cutter-testing-framework-1.1.7/0000755000175000017500000000000011525707421014656 5ustar koukoucutter-testing-framework-1.1.7/gcutter.pc.in0000644000175000017500000000035111205747031017257 0ustar koukouprefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ libdir=@libdir@ includedir=@includedir@ Name: GCutter Description: Cutter with GLib support. Version: @VERSION@ Requires: cutter >= @VERSION@, gobject-2.0 >= @GLIB_REQUIRED@ cutter-testing-framework-1.1.7/libcutter.pc.in0000644000175000017500000000043611205747032017604 0ustar koukouprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: Cutter Library Description: Cutter Command Tool Kit. Version: @VERSION@ Requires: cutter >= @VERSION@, gmodule-2.0 >= @GLIB_REQUIRED@, gobject-2.0 >= @GLIB_REQUIRED@ Cflags: -I${includedir}/cutter cutter-testing-framework-1.1.7/po/0000755000175000017500000000000011525707420015273 5ustar koukoucutter-testing-framework-1.1.7/po/Makefile.in.in0000644000175000017500000001536311345735715017765 0ustar koukou# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ DATADIRNAME = @DATADIRNAME@ itlocaledir = $(prefix)/$(DATADIRNAME)/locale subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info tags TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: cutter-testing-framework-1.1.7/po/ja.po0000644000175000017500000003474311525655170016244 0ustar koukou# Cutter ja.po. # Copyright (C) 2007-2011 Kouhei Sutou # This file is distributed under the same license as the Cutter package. # Kouhei Sutou , 2007. # msgid "" msgstr "" "Project-Id-Version: Cutter 1.1.7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-02-13 13:12+0900\n" "PO-Revision-Date: 2011-02-13 13:13+0900\n" "Last-Translator: Kouhei Sutou \n" "Language-Team: Japanese\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" #: ../cutter/cut-console.c:65 #, c-format msgid "Invalid color value: %s" msgstr "不正な色指定です: %s" #: ../cutter/cut-diff.c:58 ../cutter/cut-main.c:134 msgid "Show version" msgstr "バージョンを表示" #: ../cutter/cut-diff.c:60 msgid "Output diff with colors" msgstr "色付きで差分を出力" #: ../cutter/cut-diff.c:63 msgid "Use unified diff format" msgstr "unified diff形式を使用" #: ../cutter/cut-diff.c:65 msgid "Use LINES as diff context lines" msgstr "diffの周辺LINES行を表示" #: ../cutter/cut-diff.c:67 msgid "Use LABEL as label" msgstr "" #: ../cutter/cut-diff.c:152 msgid "FILE_FROM FILE_TO" msgstr "変更前ファイル 変更後ファイル" #: ../cutter/cut-main.c:103 #, c-format msgid "Invalid run mode: %s" msgstr "不正な実行モードです: %s" #: ../cutter/cut-main.c:124 #, c-format msgid "Invalid test case order value: %s" msgstr "不正なテストケース順序指定です: %s" #: ../cutter/cut-main.c:136 msgid "Set run mode (default: test)" msgstr "実行モードを設定(既定値: test)" #: ../cutter/cut-main.c:138 msgid "Set directory of source code" msgstr "ソースコードのディレクトリを設定" #: ../cutter/cut-main.c:140 msgid "Specify tests" msgstr "テストを指定" #: ../cutter/cut-main.c:142 msgid "Specify test cases" msgstr "テストケースを指定" #: ../cutter/cut-main.c:144 msgid "Run test cases and iterated tests with multi-thread" msgstr "マルチスレッドでテストケースと繰り返しテストを実行" #: ../cutter/cut-main.c:146 msgid "" "Run test cases and iterated tests with MAX_THREADS threads concurrently at a " "maximum (default: 10; -1 is no limit)" msgstr "" "最大MAX_THREADSスレッドを同時に動かしてテストケースと繰り返しテストを実行しま" "す(既定値: 10; -1は制限なし)" #: ../cutter/cut-main.c:152 msgid "Disable signal handling" msgstr "シグナルを処理しない" #: ../cutter/cut-main.c:154 msgid "Sort test case by. Default is 'none'." msgstr "テストケースを並び替える。既定値は'none'(並び替えない)" #: ../cutter/cut-main.c:156 msgid "Skip files" msgstr "ファイルをスキップ" #: ../cutter/cut-main.c:158 msgid "Skip directories" msgstr "ディレクトリをスキップ" #: ../cutter/cut-main.c:160 msgid "Treat failures as fatal problem" msgstr "失敗を致命的な問題として扱う" #: ../cutter/cut-main.c:162 msgid "Keep opening loaded modules to resolve symbols for debugging" msgstr "" "デバッグ時にシンボルを解決できるようにロードしたモジュールを開いたままにする" #: ../cutter/cut-main.c:165 msgid "" "Enable convenience but danger '#{ATTRIBUTE_NAME}_#{TEST_NAME - 'test_' " "PREFIX}' attribute set function" msgstr "" "便利だが危険な'#{属性名}_#{テスト名 - 'test_'プリフィックス}'属性設定関数を有" "効にする" #: ../cutter/cut-main.c:170 msgid "" "Set breakpoints at each line which invokes test. You can step into a test " "function with your debugger easily." msgstr "" "テストを実行する前の行にブレークポイントを設定する。デバッガでステップイン実" "行すれば簡単にテスト関数に入れます。" #: ../cutter/cut-main.c:230 #, c-format msgid "" "TEST_DIRECTORY\n" " %s --mode=analyze %s LOG_DIRECTORY" msgstr "" "テストディレクトリ\n" " %s --mode=analyze %s ログディレクトリ" #: ../cutter/cut-main.c:232 msgid "[OPTION...]" msgstr "[オプション...]" #: ../cutter/cut-report-factory-builder.c:197 #, c-format msgid "Set filename of %s report" msgstr "%sレポートのファイル名を設定" #: ../cutter/cut-report-factory-builder.c:214 msgid "Report Options" msgstr "レポートのオプション" #: ../cutter/cut-report-factory-builder.c:215 msgid "Show report options" msgstr "レポートのオプションを表示" #: ../cutter/cut-stream-factory-builder.c:151 msgid "Specify stream" msgstr "ストリームを指定" #: ../cutter/cut-stream-factory-builder.c:153 msgid "Stream to FILE_DESCRIPTOR (default: stdout)" msgstr "ストリームをFILE_DESCRIPTORに出力(既定値: stdout)" #: ../cutter/cut-stream-factory-builder.c:155 msgid "Stream to a file under DIRECTORY (default: none)" msgstr "ストリームをDIRECTORY以下のファイルに出力(既定値: 無し)" #: ../cutter/cut-stream-factory-builder.c:157 msgid "Obsoleted. Use --stream-directory instead" msgstr "非推奨。代わりに--stream-directory使ってください。" #: ../cutter/cut-stream-factory-builder.c:182 msgid "Stream Options" msgstr "ストリームのオプション" #: ../cutter/cut-stream-factory-builder.c:183 msgid "Show stream options" msgstr "ストリームのオプションを表示" #: ../cutter/cut-test-context.c:925 msgid "Treat a failure as a fatal problem, aborting." msgstr "失敗を致命的な問題として扱い、異常終了しています。" #: ../cutter/cut-ui-factory-builder.c:115 msgid "Specify UI" msgstr "UIを指定" #: ../cutter/cut-ui-factory-builder.c:140 msgid "UI Options" msgstr "UIのオプション" #: ../cutter/cut-ui-factory-builder.c:141 msgid "Show UI options" msgstr "コンソールUIのオプションの表示" #: ../glib-compatible/gregex.c:127 msgid "corrupted object" msgstr "" #: ../glib-compatible/gregex.c:129 msgid "internal error or corrupted object" msgstr "" #: ../glib-compatible/gregex.c:131 msgid "out of memory" msgstr "" #: ../glib-compatible/gregex.c:136 msgid "backtracking limit reached" msgstr "" #: ../glib-compatible/gregex.c:148 ../glib-compatible/gregex.c:156 msgid "the pattern contains items not supported for partial matching" msgstr "" #: ../glib-compatible/gregex.c:150 msgid "internal error" msgstr "" #: ../glib-compatible/gregex.c:158 msgid "back references as conditions are not supported for partial matching" msgstr "" #: ../glib-compatible/gregex.c:167 msgid "recursion limit reached" msgstr "" #: ../glib-compatible/gregex.c:169 msgid "workspace limit for empty substrings reached" msgstr "" #: ../glib-compatible/gregex.c:171 msgid "invalid combination of newline flags" msgstr "" #: ../glib-compatible/gregex.c:175 msgid "unknown error" msgstr "" #: ../glib-compatible/gregex.c:185 msgid "\\ at end of pattern" msgstr "" #: ../glib-compatible/gregex.c:187 msgid "\\c at end of pattern" msgstr "" #: ../glib-compatible/gregex.c:189 msgid "unrecognized character follows \\" msgstr "" #: ../glib-compatible/gregex.c:191 msgid "case changing escapes are not allowed here" msgstr "" #: ../glib-compatible/gregex.c:193 msgid "numbers out of order in {} quantifier" msgstr "" #: ../glib-compatible/gregex.c:195 msgid "number too big in {} quantifier" msgstr "" #: ../glib-compatible/gregex.c:197 msgid "missing terminating ] for character class" msgstr "" #: ../glib-compatible/gregex.c:199 msgid "invalid escape sequence in character class" msgstr "" #: ../glib-compatible/gregex.c:201 msgid "range out of order in character class" msgstr "" #: ../glib-compatible/gregex.c:203 msgid "nothing to repeat" msgstr "" #: ../glib-compatible/gregex.c:205 msgid "unrecognized character after (?" msgstr "" #: ../glib-compatible/gregex.c:207 msgid "unrecognized character after (?<" msgstr "" #: ../glib-compatible/gregex.c:209 msgid "unrecognized character after (?P" msgstr "" #: ../glib-compatible/gregex.c:211 msgid "POSIX named classes are supported only within a class" msgstr "" #: ../glib-compatible/gregex.c:213 msgid "(?R or (?[+-]digits must be followed by )" msgstr "" #: ../glib-compatible/gregex.c:215 msgid "reference to non-existent subpattern" msgstr "" #: ../glib-compatible/gregex.c:217 msgid "missing ) after comment" msgstr "" #: ../glib-compatible/gregex.c:219 msgid "regular expression too large" msgstr "" #: ../glib-compatible/gregex.c:221 msgid "failed to get memory" msgstr "" #: ../glib-compatible/gregex.c:223 msgid "lookbehind assertion is not fixed length" msgstr "" #: ../glib-compatible/gregex.c:225 msgid "malformed number or name after (?(" msgstr "" #: ../glib-compatible/gregex.c:227 msgid "conditional group contains more than two branches" msgstr "" #: ../glib-compatible/gregex.c:229 msgid "assertion expected after (?(" msgstr "" #: ../glib-compatible/gregex.c:231 msgid "unknown POSIX class name" msgstr "" #: ../glib-compatible/gregex.c:233 msgid "POSIX collating elements are not supported" msgstr "" #: ../glib-compatible/gregex.c:235 msgid "character value in \\x{...} sequence is too large" msgstr "" #: ../glib-compatible/gregex.c:237 msgid "invalid condition (?(0)" msgstr "" #: ../glib-compatible/gregex.c:239 msgid "\\C not allowed in lookbehind assertion" msgstr "" #: ../glib-compatible/gregex.c:241 msgid "recursive call could loop indefinitely" msgstr "" #: ../glib-compatible/gregex.c:243 msgid "missing terminator in subpattern name" msgstr "" #: ../glib-compatible/gregex.c:245 msgid "two named subpatterns have the same name" msgstr "" #: ../glib-compatible/gregex.c:247 msgid "malformed \\P or \\p sequence" msgstr "" #: ../glib-compatible/gregex.c:249 msgid "unknown property name after \\P or \\p" msgstr "" #: ../glib-compatible/gregex.c:251 msgid "subpattern name is too long (maximum 32 characters)" msgstr "" #: ../glib-compatible/gregex.c:253 msgid "too many named subpatterns (maximum 10,000)" msgstr "" #: ../glib-compatible/gregex.c:255 msgid "octal value is greater than \\377" msgstr "" #: ../glib-compatible/gregex.c:257 msgid "DEFINE group contains more than one branch" msgstr "" #: ../glib-compatible/gregex.c:259 msgid "repeating a DEFINE group is not allowed" msgstr "" #: ../glib-compatible/gregex.c:261 msgid "inconsistent NEWLINE options" msgstr "" #: ../glib-compatible/gregex.c:263 msgid "" "\\g is not followed by a braced name or an optionally braced non-zero number" msgstr "" #: ../glib-compatible/gregex.c:266 msgid "unexpected repeat" msgstr "" #: ../glib-compatible/gregex.c:268 msgid "code overflow" msgstr "" #: ../glib-compatible/gregex.c:270 msgid "overran compiling workspace" msgstr "" #: ../glib-compatible/gregex.c:272 msgid "previously-checked referenced subpattern not found" msgstr "" #: ../glib-compatible/gregex.c:435 ../glib-compatible/gregex.c:1487 #, c-format msgid "Error while matching regular expression %s: %s" msgstr "" #: ../glib-compatible/gregex.c:991 msgid "PCRE library is compiled without UTF8 support" msgstr "" #: ../glib-compatible/gregex.c:1000 msgid "PCRE library is compiled without UTF8 properties support" msgstr "" #: ../glib-compatible/gregex.c:1055 #, c-format msgid "Error while compiling regular expression %s at char %d: %s" msgstr "" #: ../glib-compatible/gregex.c:1091 #, c-format msgid "Error while optimizing regular expression %s: %s" msgstr "" #: ../glib-compatible/gregex.c:1915 msgid "hexadecimal digit or '}' expected" msgstr "" #: ../glib-compatible/gregex.c:1931 msgid "hexadecimal digit expected" msgstr "" #: ../glib-compatible/gregex.c:1971 msgid "missing '<' in symbolic reference" msgstr "" #: ../glib-compatible/gregex.c:1980 msgid "unfinished symbolic reference" msgstr "" #: ../glib-compatible/gregex.c:1987 msgid "zero-length symbolic reference" msgstr "" #: ../glib-compatible/gregex.c:1998 msgid "digit expected" msgstr "" #: ../glib-compatible/gregex.c:2016 msgid "illegal symbolic reference" msgstr "" #: ../glib-compatible/gregex.c:2078 msgid "stray final '\\'" msgstr "" #: ../glib-compatible/gregex.c:2082 msgid "unknown escape sequence" msgstr "" #: ../glib-compatible/gregex.c:2092 #, c-format msgid "Error while parsing replacement text \"%s\" at char %lu: %s" msgstr "" #: ../module/report/cut-pdf-report-factory.c:250 msgid "PDF Report Options" msgstr "PDFレポートのオプション" #: ../module/report/cut-pdf-report-factory.c:251 msgid "Show PDF report options" msgstr "PDFレポートのオプションを表示" #: ../module/report/cut-xml-report-factory.c:222 msgid "XML Report Options" msgstr "XMLレポートのオプション" #: ../module/report/cut-xml-report-factory.c:223 msgid "Show XML report options" msgstr "XMLレポートのオプションを表示" #: ../module/stream/cut-xml-stream-factory.c:252 msgid "XML Stream Options" msgstr "XMLストリームのオプション" #: ../module/stream/cut-xml-stream-factory.c:253 msgid "Show XML stream options" msgstr "XMLストリームのオプションを表示" #: ../module/ui/cut-console-ui-factory.c:351 #, c-format msgid "Invalid notify value: %s" msgstr "不正な通知指定です: %s" #: ../module/ui/cut-console-ui-factory.c:377 msgid "Set verbose level" msgstr "詳細度を設定" #: ../module/ui/cut-console-ui-factory.c:379 msgid "Output log with colors" msgstr "色付きでログを出力" #: ../module/ui/cut-console-ui-factory.c:382 msgid "Notify test result" msgstr "テスト結果を通知" #: ../module/ui/cut-console-ui-factory.c:390 msgid "Console UI Options" msgstr "コンソールUIのオプション" #: ../module/ui/cut-console-ui-factory.c:391 msgid "Show console UI options" msgstr "コンソールUIのオプションの表示" #: ../module/ui/cut-gtk-ui.c:227 msgid "Ready" msgstr "準備完了" #: ../module/ui/cut-gtk-ui.c:242 msgid "Name" msgstr "名前" #: ../module/ui/cut-gtk-ui.c:268 msgid "Description" msgstr "説明" #: ../module/ui/cut-gtk-ui.c:602 #, c-format msgid "" "%d test(s), %d assertion(s), %d failure(s), %d error(s), %d pending(s), %d " "omission(s), %d notification(s)" msgstr "%dテスト、%d検証、%d失敗、%dエラー、%d保留、%d省略、%d通知" #: ../module/ui/cut-gtk-ui.c:623 #, c-format msgid "%dT:%dA:%dF:%d:E:%dP:%dO:%dN" msgstr "%dテ:%d検:%d失:%d:エ:%d保:%d略:%d通" #: ../module/ui/cut-gtk-ui.c:669 #, c-format msgid "%u/%u (%u%%): %.1fs" msgstr "%u/%u (%u%%): %.1f秒" #: ../module/ui/cut-gtk-ui.c:691 #, c-format msgid "Staring test suite %s..." msgstr "テストスイート%sを開始..." #: ../module/ui/cut-gtk-ui.c:1184 #, c-format msgid "Running test: %s" msgstr "テストを実行中: %s" #: ../module/ui/cut-gtk-ui.c:1344 #, c-format msgid "Finished in %0.1f seconds: %s" msgstr "%0.1f秒で終了: %s" cutter-testing-framework-1.1.7/po/LINGUAS0000644000175000017500000000000311205747027016313 0ustar koukouja cutter-testing-framework-1.1.7/po/ChangeLog0000644000175000017500000000332711525655175017063 0ustar koukou2011-02-13 Kouhei Sutou * ja.po: update. 2011-02-08 Kouhei Sutou * POTFILES.in, ja.po: update. 2010-07-28 Kouhei Sutou * ja.po: update. 2010-03-08 Kouhei Sutou * ja.po: update. 2009-10-19 Kouhei Sutou * POTFILES.in, ja.po: update. 2009-10-11 Kouhei Sutou * POTFILES.in, ja.po: update. 2009-09-27 Kouhei Sutou * POTFILES.in: add soupcut-server.c. 2009-05-22 Kouhei Sutou * POTFILES.in, ja.po: update. 2009-05-10 Kouhei Sutou * POTFILES.in, ja.po: update. 2009-03-01 Kouhei Sutou * POTFILES.in, ja.po: update. 2008-10-13 Kouhei Sutou * POTFILES.in, ja.po: update. 2008-07-15 Kouhei Sutou * POTFILES.in, ja.po: update. 2008-07-14 Kouhei Sutou * POTFILES.in, ja.po: update. 2008-06-13 Kouhei Sutou * ja.po: update. * POTFILES.in, ja.po: update. 2008-05-19 Kouhei Sutou * POTFILES.in, ja.po: update. 2008-05-09 Kouhei Sutou * ja.po: update. 2008-05-07 Kouhei Sutou * POTFILES.in, ja.po: update. 2008-04-02 Kouhei Sutou * POTFILES.in, ja.po: updated. 2008-03-20 Kouhei Sutou * POTFILES.in, ja.po: updated. 2008-03-07 Kouhei Sutou * POTFILES.in: updated. 2007-11-26 Kouhei Sutou * ja.po: updated. * POTFILES.in: added runner factory. 2007-11-25 Kouhei Sutou * ja.po: updated. * POTFILES.in.in: removed nonexistent file. cutter-testing-framework-1.1.7/po/POTFILES.in0000644000175000017500000000653311525655071017063 0ustar koukoucutter/cut-analyzer.c cutter/cut-assertions-helper.c cutter/cut-backtrace-entry.c cutter/cut-colorize-differ.c cutter/cut-console-diff-writer.c cutter/cut-console.c cutter/cut-contractor.c cutter/cut-crash-backtrace.c cutter/cut-diff-writer.c cutter/cut-diff.c cutter/cut-differ.c cutter/cut-elf-loader.c cutter/cut-enum-types.c cutter/cut-factory-builder.c cutter/cut-file-stream-reader.c cutter/cut-helper.c cutter/cut-iterated-test.c cutter/cut-listener.c cutter/cut-loader.c cutter/cut-mach-o-loader.c cutter/cut-main.c cutter/cut-module-factory-utils.c cutter/cut-module-factory.c cutter/cut-module.c cutter/cut-pe-loader.c cutter/cut-pipeline.c cutter/cut-process.c cutter/cut-readable-differ.c cutter/cut-report-factory-builder.c cutter/cut-report.c cutter/cut-repository.c cutter/cut-run-context.c cutter/cut-runner.c cutter/cut-sequence-matcher.c cutter/cut-stream-factory-builder.c cutter/cut-stream-parser.c cutter/cut-stream-reader.c cutter/cut-stream.c cutter/cut-string-diff-writer.c cutter/cut-sub-process-group.c cutter/cut-sub-process.c cutter/cut-test-case.c cutter/cut-test-container.c cutter/cut-test-context.c cutter/cut-test-data.c cutter/cut-test-iterator.c cutter/cut-test-result.c cutter/cut-test-runner.c cutter/cut-test-suite.c cutter/cut-test-utils-helper.c cutter/cut-test.c cutter/cut-ui-factory-builder.c cutter/cut-ui.c cutter/cut-unified-differ.c cutter/cut-utils.c cutter/cut-verbose-level.c cutter/main.c gcutter/gcut-assertions-helper.c gcutter/gcut-data-helper.c gcutter/gcut-dynamic-data.c gcutter/gcut-egg.c gcutter/gcut-enum.c gcutter/gcut-error.c gcutter/gcut-event-loop.c gcutter/gcut-glib-event-loop.c gcutter/gcut-hash-table.c gcutter/gcut-inspect.c gcutter/gcut-io.c gcutter/gcut-key-file.c gcutter/gcut-list.c gcutter/gcut-main.c gcutter/gcut-object.c gcutter/gcut-process.c gcutter/gcut-string-io-channel.c gcutter/gcut-string.c gcutter/gcut-types.c gcutter/gcut-utils.c gcutter/gcut-value-equal.c gdkcutter-pixbuf/gdkcut-pixbuf-assertions-helper.c gdkcutter-pixbuf/gdkcut-pixbuf.c glib-compatible/glib-compatible.c glib-compatible/gregex.c glib-compatible/gsequence.c glib-compatible/gstring.c glib-compatible/guniprop.c glib-compatible/pcre/pcre_chartables.c glib-compatible/pcre/pcre_compile.c glib-compatible/pcre/pcre_config.c glib-compatible/pcre/pcre_dfa_exec.c glib-compatible/pcre/pcre_exec.c glib-compatible/pcre/pcre_fullinfo.c glib-compatible/pcre/pcre_get.c glib-compatible/pcre/pcre_globals.c glib-compatible/pcre/pcre_info.c glib-compatible/pcre/pcre_maketables.c glib-compatible/pcre/pcre_newline.c glib-compatible/pcre/pcre_ord2utf8.c glib-compatible/pcre/pcre_refcount.c glib-compatible/pcre/pcre_study.c glib-compatible/pcre/pcre_tables.c glib-compatible/pcre/pcre_try_flipped.c glib-compatible/pcre/pcre_ucp_searchfuncs.c glib-compatible/pcre/pcre_valid_utf8.c glib-compatible/pcre/pcre_version.c glib-compatible/pcre/pcre_xclass.c module/report/cut-cairo-chart-data.c module/report/cut-cairo-pie-chart.c module/report/cut-cairo.c module/report/cut-pdf-report-factory.c module/report/cut-pdf-report.c module/report/cut-xml-report-factory.c module/report/cut-xml-report.c module/stream/cut-xml-stream-factory.c module/stream/cut-xml-stream.c module/ui/cut-console-ui-factory.c module/ui/cut-console-ui.c module/ui/cut-gtk-ui-factory.c module/ui/cut-gtk-ui.c soupcutter/soupcut-assertions-helper.c soupcutter/soupcut-client.c soupcutter/soupcut-server.c cutter-testing-framework-1.1.7/aclocal.m40000644000175000017500000022466411525654632016541 0ustar koukou# 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'.])]) # Configure paths for GLIB # Owen Taylor 1997-2001 dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject, dnl gthread, or gio is specified in MODULES, pass to pkg-config dnl AC_DEFUN([AM_PATH_GLIB_2_0], [dnl dnl Get the cflags and libraries from pkg-config dnl AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program], , enable_glibtest=yes) pkg_config_args=glib-2.0 for module in . $4 do case "$module" in gmodule) pkg_config_args="$pkg_config_args gmodule-2.0" ;; gmodule-no-export) pkg_config_args="$pkg_config_args gmodule-no-export-2.0" ;; gobject) pkg_config_args="$pkg_config_args gobject-2.0" ;; gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; gio*) pkg_config_args="$pkg_config_args $module-2.0" ;; esac done PKG_PROG_PKG_CONFIG([0.16]) no_glib="" if test "x$PKG_CONFIG" = x ; then no_glib=yes PKG_CONFIG=no fi min_glib_version=ifelse([$1], ,2.0.0,$1) AC_MSG_CHECKING(for GLIB - version >= $min_glib_version) if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" enable_glibtest=no fi if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then : else no_glib=yes fi fi if test x"$no_glib" = x ; then GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_glibtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$GLIB_LIBS $LIBS" dnl dnl Now check if the installed GLIB is sufficiently new. (Also sanity dnl checks the results of pkg-config to some extent) dnl rm -f conf.glibtest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; fclose (fopen ("conf.glibtest", "w")); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_glib_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } if ((glib_major_version != $glib_config_major_version) || (glib_minor_version != $glib_config_minor_version) || (glib_micro_version != $glib_config_micro_version)) { printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, glib_major_version, glib_minor_version, glib_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((glib_major_version != GLIB_MAJOR_VERSION) || (glib_minor_version != GLIB_MINOR_VERSION) || (glib_micro_version != GLIB_MICRO_VERSION)) { printf("*** GLIB header files (version %d.%d.%d) do not match\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", glib_major_version, glib_minor_version, glib_micro_version); } else { if ((glib_major_version > major) || ((glib_major_version == major) && (glib_minor_version > minor)) || ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_glib" = x ; then AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://www.freedesktop.org/software/pkgconfig/" else if test -f conf.glibtest ; then : else echo "*** Could not run GLIB test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS" AC_TRY_LINK([ #include #include ], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GLIB or finding the wrong" echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GLIB is incorrectly installed."]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GLIB_CFLAGS="" GLIB_LIBS="" GLIB_GENMARSHAL="" GOBJECT_QUERY="" GLIB_MKENUMS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) AC_SUBST(GLIB_GENMARSHAL) AC_SUBST(GOBJECT_QUERY) AC_SUBST(GLIB_MKENUMS) rm -f conf.glibtest ]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# 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. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi 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 ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.in. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_HEADER_STDC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; 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 NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_in,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) # Configure paths for GTK+ # Owen Taylor 1997-2001 dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, dnl pass to pkg-config dnl AC_DEFUN([AM_PATH_GTK_2_0], [dnl dnl Get the cflags and libraries from pkg-config dnl AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program], , enable_gtktest=yes) pkg_config_args=gtk+-2.0 for module in . $4 do case "$module" in gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; esac done no_gtk="" AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version 0.7 ; then : else echo "*** pkg-config too old; version 0.7 or better required." no_gtk=yes PKG_CONFIG=no fi else no_gtk=yes fi min_gtk_version=ifelse([$1], ,2.0.0,$1) AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version) if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" enable_gtktest=no fi if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then : else no_gtk=yes fi fi if test x"$no_gtk" = x ; then GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK+ is sufficiently new. (Also sanity dnl checks the results of pkg-config to some extent) dnl rm -f conf.gtktest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; fclose (fopen ("conf.gtktest", "w")); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://pkgconfig.sourceforge.net" else if test -f conf.gtktest ; then : else echo "*** Could not run GTK+ test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK+ or finding the wrong" echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) rm -f conf.gtktest ]) dnl -*- mode: autoconf -*- # serial 1 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first dnl check for tools we added during development AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check]) AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, [with_html_dir='${datadir}/gtk-doc/html']) HTML_DIR="$with_html_dir" AC_SUBST([HTML_DIR]) dnl enable/disable documentation building AC_ARG_ENABLE([gtk-doc], AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [[default=no]]]),, [enable_gtk_doc=no]) if test x$enable_gtk_doc = xyes; then ifelse([$1],[], [PKG_CHECK_EXISTS([gtk-doc],, AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], [PKG_CHECK_EXISTS([gtk-doc >= $1],, AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))]) fi AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) dnl enable/disable output formats AC_ARG_ENABLE([gtk-doc-html], AS_HELP_STRING([--enable-gtk-doc-html], [build documentation in html format [[default=yes]]]),, [enable_gtk_doc_html=yes]) AC_ARG_ENABLE([gtk-doc-pdf], AS_HELP_STRING([--enable-gtk-doc-pdf], [build documentation in pdf format [[default=no]]]),, [enable_gtk_doc_pdf=no]) if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) # 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 # 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"]) ]) # Copyright (C) 1996, 1997, 2000, 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. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # 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])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 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_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # 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 ]) # 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) 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 1 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # 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([m4macros/cutter.m4]) m4_include([acmacros/intltool.m4]) m4_include([acmacros/libtool.m4]) m4_include([acmacros/ltoptions.m4]) m4_include([acmacros/ltsugar.m4]) m4_include([acmacros/ltversion.m4]) m4_include([acmacros/lt~obsolete.m4]) cutter-testing-framework-1.1.7/soupcutter/0000755000175000017500000000000011525707412017073 5ustar koukoucutter-testing-framework-1.1.7/soupcutter/soupcut-assertions-helper.c0000644000175000017500000001536711400051174024407 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Yuto HAYAMIZU * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "soupcut-assertions-helper.h" #include "soupcutter.h" static void soupcut_test_fail_null_message (SoupCutClient *client, const gchar *expression_client) { GString *message; const gchar *fail_message; const gchar *inspected_client; message = g_string_new(NULL); g_string_append_printf(message, "\n", expression_client); inspected_client = gcut_object_inspect(G_OBJECT(client)); g_string_append_printf(message, " client: <%s>", inspected_client); fail_message = cut_take_string(g_string_free(message, FALSE)); cut_test_fail(fail_message); } static void soupcut_find_content_type (const gchar *name, const gchar *value, gpointer user_data) { const gchar **content_type = user_data; if (cut_utils_equal_string(name, "Content-Type")){ *content_type = value; } } static const gchar * soupcut_message_get_content_type (SoupMessage *message) { const gchar *content_type = NULL; if (!message->response_headers) return NULL; soup_message_headers_foreach(message->response_headers, soupcut_find_content_type, &content_type); return content_type; } void soupcut_message_assert_equal_content_type_helper (const gchar *expected, SoupMessage *message, const gchar *expression_expected, const gchar *expression_message) { const gchar *content_type; content_type = soupcut_message_get_content_type(message); if (cut_utils_equal_string(expected, content_type)) { cut_test_pass(); } else { cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(content_type)); cut_test_fail(cut_take_printf("<%s == %s[response][content-type]>", expression_expected, expression_message)); } } void soupcut_client_assert_equal_content_type_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client) { const gchar *content_type; SoupMessage *message; message = soupcut_client_get_latest_message(client); if (!message) { soupcut_test_fail_null_message(client, expression_client); } content_type = soupcut_message_get_content_type(message); if (cut_utils_equal_string(expected, content_type)) { cut_test_pass(); } else { cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(content_type)); cut_test_fail( cut_take_printf("<%s == latest_message(%s)[response][content-type]>", expression_expected, expression_client)); } } void soupcut_client_assert_response_helper (SoupCutClient *client, const gchar *expression_client) { SoupMessage *message; message = soupcut_client_get_latest_message(client); if (!message) { soupcut_test_fail_null_message(client, expression_client); } if (200 <= message->status_code && message->status_code < 300) { cut_test_pass(); } else { cut_set_expected("2XX"); cut_set_actual(cut_take_printf("%u(%s)", message->status_code, message->reason_phrase)); cut_test_fail( cut_take_printf("", expression_client)); } } void soupcut_client_assert_equal_body_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client) { const gchar *body; SoupMessage *message; message = soupcut_client_get_latest_message(client); if (!message) { soupcut_test_fail_null_message(client, expression_client); } body = message->response_body->data; if (cut_utils_equal_string(expected, body)) { cut_test_pass(); } else { cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(body)); cut_test_fail( cut_take_printf("<%s == latest_message(%s)[response][body]>", expression_expected, expression_client)); } } void soupcut_client_assert_match_body_helper (const gchar *pattern, SoupCutClient *client, const gchar *expression_pattern, const gchar *expression_client) { const gchar *body; SoupMessage *message; message = soupcut_client_get_latest_message(client); if (!message) { soupcut_test_fail_null_message(client, expression_client); } body = message->response_body->data; if (cut_utils_regex_match(pattern, body)) { cut_test_pass(); } else { cut_set_actual(cut_take_inspect_string(body)); cut_test_fail( cut_take_printf("<%s> =~ \n" " pattern: <%s>", expression_pattern, expression_client, cut_take_inspect_string(pattern))); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/soupcutter/soupcut-assertions.h0000644000175000017500000001323611400051174023130 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Yuto HAYAMIZU * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __SOUPCUT_ASSERTIONS_H__ #define __SOUPCUT_ASSERTIONS_H__ #include #include G_BEGIN_DECLS /** * SECTION: soupcut-assertions * @title: Assertions for HTTP client and server * @short_description: Checks that your HTTP client/server * works as you expect with libsoup support. * */ /** * soupcut_message_assert_equal_content_type: * @expected: an expected Content-Type. * @message: a #SoupMessage. * @...: optional message. See cut_message() for details. * * Passes if @expected == @message->response_headers->content_type. * * Since: 1.0.8 */ #define soupcut_message_assert_equal_content_type(expected, message, \ ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ soupcut_message_assert_equal_content_type_helper( \ expected, message, #expected, #message), \ __VA_ARGS__), \ soupcut_message_assert_equal_content_type(expected, message)); \ } while (0) /** * soupcut_client_assert_equal_content_type: * @expected: an expected Content-Type. * @client: a #SoupCutClient. * @...: optional message. See cut_message() for details. * * Passes if @expected equals to Content-Type of the latest * message of @client. * * Since: 1.0.8 */ #define soupcut_client_assert_equal_content_type(expected, client, \ ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ soupcut_client_assert_equal_content_type_helper( \ expected, client, #expected, #client), \ __VA_ARGS__), \ soupcut_client_assert_equal_content_type(expected, client)); \ } while (0) /** * soupcut_client_assert_response: * @client: a #SoupCutClient. * @...: optional message. See cut_message() for details. * * Passes if status code of @client is 2XX. * * Since: 1.0.8 */ #define soupcut_client_assert_response(client, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ soupcut_client_assert_response_helper(client, #client), \ __VA_ARGS__), \ soupcut_client_assert_response(client)); \ } while (0) /** * soupcut_client_assert_equal_body: * @expected: an expected response body. * @client: a #SoupCutClient. * @...: optional message. See cut_message() for details. * * Passes if @expected == @client->response_body->data. * * Since: 1.0.8 */ #define soupcut_client_assert_equal_body(expected, client, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ soupcut_client_assert_equal_body_helper(expected, \ client, \ #expected, \ #client), \ __VA_ARGS__), \ soupcut_client_assert_equal_body(expected, client)); \ } while (0) /** * soupcut_client_assert_match_body: * @pattern: the regular expression pattern. * @client: a #SoupCutClient. * @...: optional message. See cut_message() for details. * * Passes if @pattern matches the response body of * the latest message of @client. * * Since: 1.0.8 */ #define soupcut_client_assert_match_body(pattern, client, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ soupcut_client_assert_match_body_helper(pattern, client, \ #pattern, #client), \ __VA_ARGS__), \ soupcut_client_assert_match_body(pattern, client)); \ } while (0) G_END_DECLS #endif /* __SOUPCUT_ASSERTIONS_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/soupcutter/soupcut-server.c0000644000175000017500000000430411256302420022235 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include "soupcutter/soupcut-server.h" #include static void cb_destroy (gpointer data) { SoupServer *server = data; soup_server_quit(server); g_object_unref(server); } SoupServer * soupcut_server_take (SoupServer *server) { cut_take(server, cb_destroy); return server; } SoupServer * soupcut_server_take_new (GMainContext *context) { SoupServer *server; SoupAddress *address; address = soup_address_new("localhost", SOUP_ADDRESS_ANY_PORT); soup_address_resolve_sync(address, NULL); server = soup_server_new(SOUP_SERVER_INTERFACE, address, SOUP_SERVER_ASYNC_CONTEXT, context, NULL); g_object_unref(address); return soupcut_server_take(server); } const gchar * soupcut_server_build_uri(SoupServer *server, const gchar *path) { SoupAddress *address; SoupURI *uri; const gchar *uri_string; g_object_get(server, SOUP_SERVER_INTERFACE, &address, NULL); uri = soup_uri_new(NULL); soup_uri_set_scheme(uri, SOUP_URI_SCHEME_HTTP); soup_uri_set_host(uri, "localhost"); soup_uri_set_port(uri, soup_address_get_port(address)); soup_uri_set_path(uri, path); uri_string = cut_take_string(soup_uri_to_string(uri, FALSE)); soup_uri_free(uri); return uri_string; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/soupcutter/soupcut-server.h0000644000175000017500000000442511400051174022244 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUTTEST_SOUP_H__ #define __CUTTEST_SOUP_H__ #include #include G_BEGIN_DECLS /** * SECTION: soupcut-server * @title: Convenience HTTP server API * @short_description: API to work as HTTP server. * @see_also: * Assertions for HTTP client and server * * Useful wrappers for #SoupServer are provided. * */ /** * soupcut_server_take: * @server: a #SoupServer. * * @server is shut down and unref when tear down. * * Returns: @server owned by Cutter. Don't g_object_unref() it. * * Since: 1.0.8 */ SoupServer *soupcut_server_take (SoupServer *server); /** * soupcut_server_take_new: * @context: a #GMainContext for the main loop of a new server. * * Creates and returns a new #SoupServer, whose context is @context. * The server is shut down and unref when tear down. * * Returns: a new #SoupServer owned by Cutter. Don't g_object_unref() it. * * Since: 1.0.8 */ SoupServer *soupcut_server_take_new (GMainContext *context); /** * soupcut_server_build_uri: * @server: a #SoupServer. * @path: a path. * * an URI is built and returned with the base uri of @server and @path. * * Returns: a new uri string owned by Cutter. Don't free it. * * Since: 1.0.8 */ const gchar *soupcut_server_build_uri (SoupServer *server, const gchar *path); G_END_DECLS #endif /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/soupcutter/soupcut-client.c0000644000175000017500000001570111244232307022213 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Yuto HAYAMIZU * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "soupcut-client.h" #define SOUPCUT_CLIENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), SOUPCUT_TYPE_CLIENT, SoupCutClientPrivate)) typedef struct _SoupCutClientPrivate SoupCutClientPrivate; struct _SoupCutClientPrivate { GList *messages; SoupSession *session; SoupURI *base; GMainContext *main_context; gboolean async; }; enum { PROP_0, PROP_ASYNC, }; G_DEFINE_TYPE (SoupCutClient, soupcut_client, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void soupcut_client_class_init (SoupCutClientClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_boolean("async", "Async", "True if the session is asynchronous", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_ASYNC, spec); g_type_class_add_private(gobject_class, sizeof(SoupCutClientPrivate)); } static void soupcut_client_init (SoupCutClient *result) { SoupCutClientPrivate *priv = SOUPCUT_CLIENT_GET_PRIVATE(result); priv->base = NULL; priv->messages = NULL; priv->main_context = g_main_context_new(); priv->session = soup_session_async_new_with_options( SOUP_SESSION_ASYNC_CONTEXT, priv->main_context, NULL); } static void dispose (GObject *object) { SoupCutClientPrivate *priv = SOUPCUT_CLIENT_GET_PRIVATE(object); if (priv->base) { soup_uri_free(priv->base); priv->base = NULL; } if (priv->messages) { g_list_foreach(priv->messages, (GFunc)g_object_unref, NULL); g_list_free(priv->messages); priv->messages = NULL; } if (priv->main_context) { g_main_context_unref(priv->main_context); priv->main_context = NULL; } if (priv->session) { g_object_unref(priv->session); priv->session = NULL; } G_OBJECT_CLASS(soupcut_client_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { SoupCutClientPrivate *priv; priv = SOUPCUT_CLIENT_GET_PRIVATE(object); switch (prop_id) { case PROP_ASYNC: priv->async = g_value_get_boolean(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { SoupCutClientPrivate *priv; priv = SOUPCUT_CLIENT_GET_PRIVATE(object); switch (prop_id) { case PROP_ASYNC: g_value_set_boolean(value, priv->async); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } SoupCutClient * soupcut_client_new (void) { return g_object_new(SOUPCUT_TYPE_CLIENT, NULL); } void soupcut_client_set_base(SoupCutClient *client, const gchar *uri) { SoupCutClientPrivate *priv; priv = SOUPCUT_CLIENT_GET_PRIVATE(client); if (priv->base) { soup_uri_free(priv->base); priv->base = NULL; } if (uri) priv->base = soup_uri_new(uri); } guint soupcut_client_send_message (SoupCutClient *client, SoupMessage *message) { SoupCutClientPrivate *priv; priv = SOUPCUT_CLIENT_GET_PRIVATE(client); priv->messages = g_list_prepend(priv->messages, message); return soup_session_send_message(priv->session, message); } guint soupcut_client_get (SoupCutClient *client, const gchar *uri_string, const gchar *first_query_name, ...) { SoupMessage *message; GHashTable *params; va_list args; SoupURI *uri; gchar *built_uri; SoupCutClientPrivate *priv; priv = SOUPCUT_CLIENT_GET_PRIVATE(client); if (priv->base) { if (uri_string) { uri = soup_uri_new_with_base(priv->base, uri_string); } else { uri = soup_uri_copy(priv->base); } } else { if (!uri_string) return SOUP_STATUS_MALFORMED; uri = soup_uri_new(uri_string); } if (first_query_name) { va_start(args, first_query_name); params = gcut_hash_table_string_string_new_va_list(first_query_name, args); va_end(args); soup_uri_set_query_from_form(uri, params); g_hash_table_unref(params); } built_uri = soup_uri_to_string(uri, FALSE); message = soup_message_new("GET", built_uri); g_free(built_uri); soup_uri_free(uri); return soupcut_client_send_message(client, message); } guint soupcut_client_get_n_messages (SoupCutClient *client) { SoupCutClientPrivate *priv; priv = SOUPCUT_CLIENT_GET_PRIVATE(client); return g_list_length(priv->messages); } SoupMessage * soupcut_client_get_latest_message (SoupCutClient *client) { SoupCutClientPrivate *priv; priv = SOUPCUT_CLIENT_GET_PRIVATE(client); if (!priv->messages) return NULL; return priv->messages->data; } GMainContext * soupcut_client_get_async_context (SoupCutClient *client) { SoupCutClientPrivate *priv; priv = SOUPCUT_CLIENT_GET_PRIVATE(client); if (!priv->session) return NULL; return soup_session_get_async_context(priv->session); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/soupcutter/soupcut-client.h0000644000175000017500000001137311400051174022214 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Yuto HAYAMIZU * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __SOUPCUT_CLIENT_H__ #define __SOUPCUT_CLIENT_H__ #include #include G_BEGIN_DECLS /** * SECTION: soupcut-client * @title: Convenience HTTP client API * @short_description: API to work as HTTP client. * @see_also: * Assertions for HTTP client and server * * #SoupCutClient works as a HTTP client. It accepts * multiple requests and responses are managed by * #SoupCutClient. #SoupCutClient related assertions are * also provided. */ #define SOUPCUT_TYPE_CLIENT (soupcut_client_get_type ()) #define SOUPCUT_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SOUPCUT_TYPE_CLIENT, SoupCutClient)) #define SOUPCUT_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOUPCUT_TYPE_CLIENT, SoupCutClientClass)) #define SOUPCUT_IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SOUPCUT_TYPE_CLIENT)) #define SOUPCUT_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SOUPCUT_TYPE_CLIENT)) #define SOUPCUT_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), SOUPCUT_TYPE_CLIENT, SoupCutClientClass)) typedef struct _SoupCutClient SoupCutClient; typedef struct _SoupCutClientClass SoupCutClientClass; struct _SoupCutClient { GObject object; }; struct _SoupCutClientClass { GObjectClass parent_class; }; GType soupcut_client_get_type (void) G_GNUC_CONST; /** * soupcut_client_new: * * Creates and returns a new #SoupCutClient * * Returns: a new #SoupCutClient. * * Since: 1.0.8 */ SoupCutClient *soupcut_client_new (void); /** * soupcut_client_set_base: * @client: a #SoupCutClient. * @uri: a base uri. * * Set @uri as a base uri of @client. * * Since: 1.0.8 */ void soupcut_client_set_base (SoupCutClient *client, const gchar *uri); /** * soupcut_client_send_message: * @client: a #SoupCutClient. * @message: a #SoupMessage. * * Send @message with @client. @client remebers all the messages it sent. * * Returns: a status code of the response. * * Since: 1.0.8 */ guint soupcut_client_send_message (SoupCutClient *client, SoupMessage *message); /** * soupcut_client_get: * @client: a #SoupCutClient. * @uri: an URI string. * @first_query_name: the name of the first query parameter. * @...: pairs of query parameter names and values, starting with @first_query_name, terminated by %NULL * * Send a GET request to @uri with queries. If the base URI of @client * is set by soupcut_client_set_base(), the destination URI is composed of the base URI and @uri. If not, @uri must be a fully qualified URI. * * Returns: a status code of the response. * * Since: 1.0.8 */ guint soupcut_client_get (SoupCutClient *client, const gchar *uri, const gchar *first_query_name, ...); /** * soupcut_client_get_n_messages: * @client: a #SoupCutClient. * * Returns the number of messages @client sent. * * Returns: the number of messages. * * Since: 1.0.8 */ guint soupcut_client_get_n_messages (SoupCutClient *client); /** * soupcut_client_get_latest_message: * @client: a #SoupCutClient. * * Returns the latest #SoupMessage @client sent. * * Returns: the latest #SoupMessage. * * Since: 1.0.8 */ SoupMessage *soupcut_client_get_latest_message (SoupCutClient *client); /** * soupcut_client_get_async_context: * @client: a #SoupCutClient. * * Returns the asynch_context of @client. * * Returns: a #GMainContext of @client, which may be %NULL. * * Since: 1.0.8 */ GMainContext *soupcut_client_get_async_context (SoupCutClient *client); G_END_DECLS #endif /* __SOUPCUT_CLIENT_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/soupcutter/soupcutter.h0000644000175000017500000000424211424023242021451 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Yuto HAYAMIZU * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __SOUPCUTTER_H__ #define __SOUPCUTTER_H__ #include #include #include #include #include /** * SECTION: soupcutter * @title: SoupCutter * @short_description: HTTP supported Cutter with libsoup. * @see_also: * Assertions for HTTP client/server based on libsoup * * SoupCutter adds many useful HTTP related features based * on libsoup to Cutter. If you want to write tests for * HTTP, it's good idea that you consider SoupCutter to be * used too. * * It's easy to use SoupCutter. You just include * <soupcuttter.h> instead of <cutter.h> * or <gcutter.h> and use soupcutter-pixbuf.pc instead * of cutter.pc or gcutter.pc: * * test-xxx.c: * |[ * -#include * +#include * ]| * * configure.ac: * |[ * -AC_CHECK_CUTTER * +AC_CHECK_SOUPCUTTER * ]| * * Makefile.am: * |[ * -XXX_CFLAGS = $(CUTTER_CFLAGS) * -XXX_LIBS = $(CUTTER_LIBS) * +XXX_CFLAGS = $(SOUPCUTTER_CFLAGS) * +XXX_LIBS = $(SOUPCUTTER_LIBS) * ]| */ /** * SOUPCUTTER_ENABLED * * Defined when SoupCutter is enabled. * * Since: 1.0.8 */ #define SOUPCUTTER_ENABLED 1 #endif /* __SOUPCUTTER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/soupcutter/soupcut-assertions-helper.h0000644000175000017500000000506111244232307024407 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Yuto HAYAMIZU * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __SOUPCUT_ASSERTIONS_HELPER_H__ #define __SOUPCUT_ASSERTIONS_HELPER_H__ #include #include #include #include G_BEGIN_DECLS void soupcut_message_assert_equal_content_type_helper (const gchar *expected, SoupMessage *message, const gchar *expression_expected, const gchar *expression_message); void soupcut_client_assert_equal_content_type_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); void soupcut_client_assert_response_helper (SoupCutClient *client, const gchar *expression_client); void soupcut_client_assert_equal_body_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); void soupcut_client_assert_match_body_helper (const gchar *pattern, SoupCutClient *client, const gchar *expression_pattern, const gchar *expression_client); G_END_DECLS #endif /* __SOUPCUT_ASSERTIONS_HELPER_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/soupcutter/Makefile.in0000644000175000017500000006004111525655544021151 0ustar koukou# 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@ 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@ subdir = soupcutter DIST_COMMON = $(am__pkginclude_HEADERS_DIST) \ $(am__soupcutter_include_HEADERS_DIST) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)" \ "$(DESTDIR)$(soupcutter_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libsoupcutter_la_DEPENDENCIES = $(top_builddir)/cutter/libcutter.la \ $(am__DEPENDENCIES_1) am_libsoupcutter_la_OBJECTS = soupcut-assertions-helper.lo \ soupcut-client.lo soupcut-server.lo libsoupcutter_la_OBJECTS = $(am_libsoupcutter_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libsoupcutter_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libsoupcutter_la_LDFLAGS) $(LDFLAGS) \ -o $@ @HAVE_LIBSOUP_TRUE@am_libsoupcutter_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libsoupcutter_la_SOURCES) DIST_SOURCES = $(libsoupcutter_la_SOURCES) am__pkginclude_HEADERS_DIST = soupcutter.h am__soupcutter_include_HEADERS_DIST = soupcut-assertions.h \ soupcut-assertions-helper.h soupcut-client.h soupcut-server.h HEADERS = $(pkginclude_HEADERS) $(soupcutter_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(LIBSOUP_CFLAGS) \ $(COVERAGE_CFLAGS) CLEANFILES = *.gcno *.gcda @HAVE_LIBSOUP_TRUE@lib_LTLIBRARIES = libsoupcutter.la @HAVE_LIBSOUP_TRUE@pkginclude_HEADERS = \ @HAVE_LIBSOUP_TRUE@ soupcutter.h @HAVE_LIBSOUP_TRUE@soupcutter_includedir = $(pkgincludedir)/soupcutter @HAVE_LIBSOUP_TRUE@soupcutter_include_HEADERS = \ @HAVE_LIBSOUP_TRUE@ $(soupcutter_public_headers) soupcutter_public_headers = \ soupcut-assertions.h \ soupcut-assertions-helper.h \ soupcut-client.h \ soupcut-server.h libsoupcutter_la_SOURCES = \ $(gcutter_public_headers) \ soupcut-assertions-helper.c \ soupcut-client.c \ soupcut-server.c libsoupcutter_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ -no-undefined libsoupcutter_la_LIBADD = \ $(top_builddir)/cutter/libcutter.la \ $(LIBSOUP_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign soupcutter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign soupcutter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libsoupcutter.la: $(libsoupcutter_la_OBJECTS) $(libsoupcutter_la_DEPENDENCIES) $(AM_V_CCLD)$(libsoupcutter_la_LINK) $(am_libsoupcutter_la_rpath) $(libsoupcutter_la_OBJECTS) $(libsoupcutter_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soupcut-assertions-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soupcut-client.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soupcut-server.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files install-soupcutter_includeHEADERS: $(soupcutter_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(soupcutter_includedir)" || $(MKDIR_P) "$(DESTDIR)$(soupcutter_includedir)" @list='$(soupcutter_include_HEADERS)'; test -n "$(soupcutter_includedir)" || 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_HEADER) $$files '$(DESTDIR)$(soupcutter_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(soupcutter_includedir)" || exit $$?; \ done uninstall-soupcutter_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(soupcutter_include_HEADERS)'; test -n "$(soupcutter_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(soupcutter_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(soupcutter_includedir)" && rm -f $$files 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(soupcutter_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) 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-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS \ install-soupcutter_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS \ uninstall-soupcutter_includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-pkgincludeHEADERS install-ps install-ps-am \ install-soupcutter_includeHEADERS install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES \ uninstall-pkgincludeHEADERS \ uninstall-soupcutter_includeHEADERS echo-public-headers: @for header in $(soupcutter_include_HEADERS); do \ echo $(abs_srcdir)/$${header}; \ done # 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: cutter-testing-framework-1.1.7/soupcutter/Makefile.am0000644000175000017500000000172611525654765021151 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(LIBSOUP_CFLAGS) \ $(COVERAGE_CFLAGS) CLEANFILES = *.gcno *.gcda if HAVE_LIBSOUP lib_LTLIBRARIES = libsoupcutter.la pkginclude_HEADERS = \ soupcutter.h soupcutter_includedir=$(pkgincludedir)/soupcutter soupcutter_include_HEADERS = \ $(soupcutter_public_headers) endif soupcutter_public_headers = \ soupcut-assertions.h \ soupcut-assertions-helper.h \ soupcut-client.h \ soupcut-server.h libsoupcutter_la_SOURCES = \ $(gcutter_public_headers) \ soupcut-assertions-helper.c \ soupcut-client.c \ soupcut-server.c libsoupcutter_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ -no-undefined libsoupcutter_la_LIBADD = \ $(top_builddir)/cutter/libcutter.la \ $(LIBSOUP_LIBS) echo-public-headers: @for header in $(soupcutter_include_HEADERS); do \ echo $(abs_srcdir)/$${header}; \ done cutter-testing-framework-1.1.7/gst-plugins/0000755000175000017500000000000011525707420017131 5ustar koukoucutter-testing-framework-1.1.7/gst-plugins/gst-cutter-console-output.c0000644000175000017500000001752111205747026024403 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gst-cutter-console-output.h" #include #include #include #include #include static const GstElementDetails cutter_console_output_details = GST_ELEMENT_DETAILS("Cutter console output", "Cutter console output", "Cutter console output", "g新部 Hiroyuki Ikezoe "); static GstStaticPadTemplate cutter_console_output_sink_template_factory = GST_STATIC_PAD_TEMPLATE("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS_ANY); #define GST_CUTTER_CONSOLE_OUTPUT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_CUTTER_CONSOLE_OUTPUT, GstCutterConsoleOutputPrivate)) typedef struct _GstCutterConsoleOutputPrivate GstCutterConsoleOutputPrivate; struct _GstCutterConsoleOutputPrivate { CutRunContext *reader; GObject *ui; gboolean use_color; gchar *verbose_level_string; }; GST_BOILERPLATE(GstCutterConsoleOutput, gst_cutter_console_output, GstBaseSink, GST_TYPE_BASE_SINK); enum { ARG_0, ARG_USE_COLOR, ARG_VERBOSE_LEVEL }; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static gboolean start (GstBaseSink *base_sink); static gboolean stop (GstBaseSink *base_sink); static GstFlowReturn render (GstBaseSink *base_sink, GstBuffer *buffer); static void gst_cutter_console_output_base_init (gpointer klass) { GstElementClass *element_class = GST_ELEMENT_CLASS(klass); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&cutter_console_output_sink_template_factory)); gst_element_class_set_details(element_class, &cutter_console_output_details); } static void gst_cutter_console_output_class_init (GstCutterConsoleOutputClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS(klass); GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; base_sink_class->start = start; base_sink_class->stop = stop; base_sink_class->render = render; spec = g_param_spec_boolean("use-color", "Use color", "Whether use color", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, ARG_USE_COLOR, spec); spec = g_param_spec_string("verbose-level", "Verbose Level", "The string of representing verbosity level", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, ARG_VERBOSE_LEVEL, spec); g_type_class_add_private(gobject_class, sizeof(GstCutterConsoleOutputPrivate)); } static void gst_cutter_console_output_init (GstCutterConsoleOutput *cutter_console_output, GstCutterConsoleOutputClass * klass) { GstCutterConsoleOutputPrivate *priv = GST_CUTTER_CONSOLE_OUTPUT_GET_PRIVATE(cutter_console_output); priv->reader = NULL; priv->ui = NULL; priv->use_color = FALSE; priv->verbose_level_string = NULL; } static void dispose (GObject *object) { GstCutterConsoleOutputPrivate *priv; priv = GST_CUTTER_CONSOLE_OUTPUT_GET_PRIVATE(object); if (priv->reader) { g_object_unref(priv->reader); priv->reader = NULL; } if (priv->ui) { g_object_unref(priv->ui); priv->ui = NULL; } if (priv->verbose_level_string) { g_free(priv->verbose_level_string); priv->verbose_level_string = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GstCutterConsoleOutputPrivate *priv; priv = GST_CUTTER_CONSOLE_OUTPUT_GET_PRIVATE(object); switch (prop_id) { case ARG_USE_COLOR: priv->use_color = g_value_get_boolean(value); break; case ARG_VERBOSE_LEVEL: priv->verbose_level_string = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GstCutterConsoleOutputPrivate *priv; priv = GST_CUTTER_CONSOLE_OUTPUT_GET_PRIVATE(object); switch (prop_id) { case ARG_USE_COLOR: g_value_set_boolean(value, priv->use_color); break; case ARG_VERBOSE_LEVEL: g_value_set_string(value, priv->verbose_level_string); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static gboolean start (GstBaseSink *base_sink) { GstCutterConsoleOutputPrivate *priv; CutVerboseLevel verbose_level; priv = GST_CUTTER_CONSOLE_OUTPUT_GET_PRIVATE(base_sink); verbose_level = cut_verbose_level_parse(priv->verbose_level_string, NULL); priv->ui = cut_ui_new("console", "use-color", priv->use_color, "verbose-level", verbose_level, NULL); priv->reader = cut_stream_reader_new(); cut_listener_attach_to_run_context(CUT_LISTENER(priv->ui), priv->reader); return TRUE; } static gboolean stop (GstBaseSink *base_sink) { GstCutterConsoleOutputPrivate *priv; priv = GST_CUTTER_CONSOLE_OUTPUT_GET_PRIVATE(base_sink); cut_stream_reader_end_read(CUT_STREAM_READER(priv->reader)); cut_listener_detach_from_run_context(CUT_LISTENER(priv->ui), priv->reader); return TRUE; } static GstFlowReturn render (GstBaseSink *base_sink, GstBuffer *buffer) { guint size; guint8 *data; GstCutterConsoleOutputPrivate *priv; priv = GST_CUTTER_CONSOLE_OUTPUT_GET_PRIVATE(base_sink); size = GST_BUFFER_SIZE(buffer); data = GST_BUFFER_DATA(buffer); if (size > 0) cut_stream_reader_read(CUT_STREAM_READER(priv->reader), (gchar *)data, size); return GST_FLOW_OK; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gst-plugins/gst-cutter-test-runner.c0000644000175000017500000002323311205747026023666 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "gst-cutter-test-runner.h" #include #include #include GST_DEBUG_CATEGORY_STATIC(cutter_test_runner_debug); #define GST_CAT_DEFAULT cutter_test_runner_debug static const GstElementDetails cutter_test_runner_details = GST_ELEMENT_DETAILS("Cutter test runner", "Cutter test runner", "Cutter test runner", "g新部 Hiroyuki Ikezoe "); static GstStaticPadTemplate cutter_test_runner_src_template_factory = GST_STATIC_PAD_TEMPLATE("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS_ANY); #define GST_CUTTER_TEST_RUNNER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_CUTTER_TEST_RUNNER, GstCutterTestRunnerPrivate)) typedef struct _GstCutterTestRunnerPrivate GstCutterTestRunnerPrivate; struct _GstCutterTestRunnerPrivate { CutRunContext *run_context; CutStream *cut_stream; gchar *test_directory; GString *xml_string; }; GST_BOILERPLATE(GstCutterTestRunner, gst_cutter_test_runner, GstBaseSrc, GST_TYPE_BASE_SRC); enum { ARG_0, ARG_TEST_DIRECTORY }; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static gboolean start (GstBaseSrc *base_src); static gboolean stop (GstBaseSrc *base_src); static gboolean is_seekable (GstBaseSrc *base_src); static GstFlowReturn create (GstBaseSrc *basr_src, guint64 offset, guint length, GstBuffer **buffer); static gboolean check_get_range (GstBaseSrc *base_src); static GstStateChangeReturn change_state (GstElement *element, GstStateChange transition); static void gst_cutter_test_runner_base_init (gpointer klass) { GstElementClass *element_class = GST_ELEMENT_CLASS(klass); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&cutter_test_runner_src_template_factory)); gst_element_class_set_details(element_class, &cutter_test_runner_details); } static void gst_cutter_test_runner_class_init (GstCutterTestRunnerClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); GstElementClass *element_class = GST_ELEMENT_CLASS(klass); GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS(klass); GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; element_class->change_state = change_state; base_src_class->start = start; base_src_class->stop = stop; base_src_class->is_seekable = is_seekable; base_src_class->create = create; base_src_class->check_get_range = check_get_range; spec = g_param_spec_string("test-directory", "Test directory", "The directory name in which test cases are stored", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, ARG_TEST_DIRECTORY, spec); g_type_class_add_private(gobject_class, sizeof(GstCutterTestRunnerPrivate)); GST_DEBUG_CATEGORY_INIT(cutter_test_runner_debug, "cutter-test", 0, "Cutter test elements"); } static void gst_cutter_test_runner_init (GstCutterTestRunner *cutter_test_runner, GstCutterTestRunnerClass * klass) { GstCutterTestRunnerPrivate *priv = GST_CUTTER_TEST_RUNNER_GET_PRIVATE(cutter_test_runner); priv->run_context = NULL; priv->cut_stream = NULL; priv->test_directory = NULL; priv->xml_string = NULL; } static void dispose (GObject *object) { GstCutterTestRunnerPrivate *priv = GST_CUTTER_TEST_RUNNER_GET_PRIVATE(object); if (priv->run_context) { g_object_unref(priv->run_context); priv->run_context = NULL; } if (priv->cut_stream) { g_object_unref(priv->cut_stream); priv->cut_stream = NULL; } if (priv->test_directory) { g_free(priv->test_directory); priv->test_directory = NULL; } if (priv->xml_string) { g_string_free(priv->xml_string, TRUE); priv->xml_string = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GstCutterTestRunnerPrivate *priv = GST_CUTTER_TEST_RUNNER_GET_PRIVATE(object); switch (prop_id) { case ARG_TEST_DIRECTORY: priv->test_directory = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GstCutterTestRunnerPrivate *priv = GST_CUTTER_TEST_RUNNER_GET_PRIVATE(object); switch (prop_id) { case ARG_TEST_DIRECTORY: g_value_set_string(value, priv->test_directory); default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static gboolean stream_to_string (const gchar *message, GError **error, gpointer user_data) { GString *string = user_data; g_string_append(string, message); return TRUE; } static gboolean start (GstBaseSrc *base_src) { GstCutterTestRunnerPrivate *priv = GST_CUTTER_TEST_RUNNER_GET_PRIVATE(base_src); priv->run_context = g_object_new(CUT_TYPE_TEST_RUNNER, "test-directory", priv->test_directory, NULL); priv->xml_string = g_string_new(NULL); priv->cut_stream = cut_stream_new("xml", "stream-function", stream_to_string, "stream-function-user-data", priv->xml_string, NULL); cut_run_context_add_listener(priv->run_context, CUT_LISTENER(priv->cut_stream)); gst_base_src_set_format(base_src, GST_FORMAT_BYTES); cut_run_context_start(priv->run_context); return TRUE; } static gboolean stop (GstBaseSrc *base_src) { GstCutterTestRunnerPrivate *priv = GST_CUTTER_TEST_RUNNER_GET_PRIVATE(base_src); cut_run_context_cancel(priv->run_context); cut_run_context_remove_listener(priv->run_context, CUT_LISTENER(priv->cut_stream)); return TRUE; } static gboolean is_seekable (GstBaseSrc *base_src) { return FALSE; } static gboolean check_get_range (GstBaseSrc *base_src) { return FALSE; } static GstFlowReturn create (GstBaseSrc *base_src, guint64 offset, guint length, GstBuffer **buffer) { GstBuffer *buf; guint send_size; gboolean is_end_of_buffer = FALSE; GstCutterTestRunnerPrivate *priv = GST_CUTTER_TEST_RUNNER_GET_PRIVATE(base_src); GST_DEBUG("create buffer"); if (priv->xml_string->len < offset + length) { is_end_of_buffer = TRUE; } send_size = priv->xml_string->len - offset; buf = gst_buffer_new_and_alloc(send_size); memcpy(GST_BUFFER_DATA(buf), priv->xml_string->str + offset, send_size); GST_BUFFER_SIZE(buf) = send_size; GST_BUFFER_OFFSET(buf) = offset; GST_BUFFER_OFFSET_END(buf) = offset + send_size; *buffer = buf; return !is_end_of_buffer ? GST_FLOW_OK : GST_FLOW_UNEXPECTED; } static GstStateChangeReturn change_state (GstElement *element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: break; default: break; } ret = GST_ELEMENT_CLASS(parent_class)->change_state(element, transition); if (ret == GST_STATE_CHANGE_FAILURE) return ret; switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: break; case GST_STATE_CHANGE_READY_TO_NULL: break; default: break; } return ret; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gst-plugins/gst-cutter-server.c0000644000175000017500000002157011205747026022710 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gst-cutter-server.h" #include #include #include GST_DEBUG_CATEGORY_STATIC(cutter_server_debug); #define GST_CAT_DEFAULT cutter_server_debug static const GstElementDetails cutter_server_details = GST_ELEMENT_DETAILS("Cutter test server", "Cutter test server", "Cutter test server", "g新部 Hiroyuki Ikezoe "); static GstStaticPadTemplate cutter_server_src_template_factory = GST_STATIC_PAD_TEMPLATE("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS_ANY); static GstStaticPadTemplate cutter_server_sink_template_factory = GST_STATIC_PAD_TEMPLATE("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS_ANY); #define GST_CUTTER_SERVER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_CUTTER_SERVER, GstCutterServerPrivate)) typedef struct _GstCutterServerPrivate GstCutterServerPrivate; struct _GstCutterServerPrivate { CutRunContext *run_context; CutStream *cut_stream; gchar *test_directory; gchar *host; gint port; GString *xml_string; GstElement *tcp_server_sink; GstPad *src_pad; GstPad *sink_pad; }; GST_BOILERPLATE(GstCutterServer, gst_cutter_server, GstElement, GST_TYPE_ELEMENT); enum { ARG_0, ARG_TEST_DIRECTORY, ARG_HOST, ARG_PORT }; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static GstStateChangeReturn change_state (GstElement *element, GstStateChange transition); static void gst_cutter_server_base_init (gpointer klass) { GstElementClass *element_class = GST_ELEMENT_CLASS(klass); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&cutter_server_src_template_factory)); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&cutter_server_sink_template_factory)); gst_element_class_set_details(element_class, &cutter_server_details); } static void gst_cutter_server_class_init (GstCutterServerClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); GstElementClass *element_class = GST_ELEMENT_CLASS(klass); GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; element_class->change_state = change_state; spec = g_param_spec_string("test-directory", "Test directory", "The directory name in which test cases are stored", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, ARG_TEST_DIRECTORY, spec); spec = g_param_spec_string("host", "host", "The host/IP to send the packets to", "localhost", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(gobject_class, ARG_HOST, spec); spec = g_param_spec_int("port", "port", "The port to send the packets to", 0, 65535, 4953, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, ARG_PORT, spec); g_type_class_add_private(gobject_class, sizeof(GstCutterServerPrivate)); GST_DEBUG_CATEGORY_INIT(cutter_server_debug, "cutter-test", 0, "Cutter test elements"); } static void gst_cutter_server_init (GstCutterServer *cutter_server, GstCutterServerClass * klass) { GstPadTemplate *pad_template; GstCutterServerPrivate *priv = GST_CUTTER_SERVER_GET_PRIVATE(cutter_server); pad_template = gst_element_class_get_pad_template(GST_ELEMENT_CLASS(klass), "src"); priv->src_pad = gst_pad_new_from_template(pad_template, "src"); gst_element_add_pad(GST_ELEMENT(cutter_server), priv->src_pad); pad_template = gst_element_class_get_pad_template(GST_ELEMENT_CLASS(klass), "sink"); priv->sink_pad = gst_pad_new_from_template(pad_template, "sink"); gst_element_add_pad(GST_ELEMENT(cutter_server), priv->sink_pad); priv->run_context = NULL; priv->cut_stream = NULL; priv->test_directory = NULL; priv->xml_string = NULL; priv->port = 4953; priv->host = NULL; priv->tcp_server_sink = gst_element_factory_make("tcpserversink", NULL); gst_element_link(GST_ELEMENT(cutter_server), priv->tcp_server_sink); } static void dispose (GObject *object) { GstCutterServerPrivate *priv = GST_CUTTER_SERVER_GET_PRIVATE(object); if (priv->run_context) { g_object_unref(priv->run_context); priv->run_context = NULL; } if (priv->cut_stream) { g_object_unref(priv->cut_stream); priv->cut_stream = NULL; } if (priv->test_directory) { g_free(priv->test_directory); priv->test_directory = NULL; } if (priv->xml_string) { g_string_free(priv->xml_string, TRUE); priv->xml_string = NULL; } if (priv->host) { g_free(priv->host); priv->host = NULL; } if (priv->tcp_server_sink) { gst_object_unref(priv->tcp_server_sink); priv->tcp_server_sink = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GstCutterServerPrivate *priv = GST_CUTTER_SERVER_GET_PRIVATE(object); switch (prop_id) { case ARG_TEST_DIRECTORY: priv->test_directory = g_value_dup_string(value); break; case ARG_HOST: priv->host = g_value_dup_string(value); break; case ARG_PORT: priv->port = g_value_get_int(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GstCutterServerPrivate *priv = GST_CUTTER_SERVER_GET_PRIVATE(object); switch (prop_id) { case ARG_TEST_DIRECTORY: g_value_set_string(value, priv->test_directory); case ARG_HOST: g_value_set_string(value, priv->host); case ARG_PORT: g_value_set_int(value, priv->port); default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static GstStateChangeReturn change_state (GstElement *element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: break; default: break; } ret = GST_ELEMENT_CLASS(parent_class)->change_state(element, transition); if (ret == GST_STATE_CHANGE_FAILURE) return ret; switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: break; case GST_STATE_CHANGE_READY_TO_NULL: break; default: break; } return ret; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gst-plugins/gst-cutter-console-output.h0000644000175000017500000000416111205747026024404 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GST_CUTTER_CONSOLE_OUTPUT_H__ #define __GST_CUTTER_CONSOLE_OUTPUT_H__ #include #include G_BEGIN_DECLS #define GST_TYPE_CUTTER_CONSOLE_OUTPUT (gst_cutter_console_output_get_type()) #define GST_CUTTER_CONSOLE_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CUTTER_CONSOLE_OUTPUT, GstCutterConsoleOutput)) #define GST_CUTTER_CONSOLE_OUTPUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_CUTTER_CONSOLE_OUTPUT, GstCutterConsoleOutputClass)) #define GST_CUTTER_CONSOLE_OUTPUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CUTTER_CONSOLE_OUTPUT, GstCutterConsoleOutputClass)) #define GST_IS_CUTTER_CONSOLE_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_CUTTER_CONSOLE_OUTPUT)) #define GST_IS_CUTTER_CONSOLE_OUTPUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_CUTTER_CONSOLE_OUTPUT)) typedef struct _GstCutterConsoleOutput GstCutterConsoleOutput; typedef struct _GstCutterConsoleOutputClass GstCutterConsoleOutputClass; struct _GstCutterConsoleOutput { GstBaseSink parent; }; struct _GstCutterConsoleOutputClass { GstBaseSinkClass parent_class; }; GType gst_cutter_console_output_get_type (void); G_END_DECLS #endif /* __GST_CUTTER_CONSOLE_OUTPUT_H */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gst-plugins/gst-cutter-test.c0000644000175000017500000000343611205747026022362 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gst-cutter-test-runner.h" #include "gst-cutter-console-output.h" #include "gst-cutter-server.h" GST_DEBUG_CATEGORY(cutter_debug); static gboolean plugin_init (GstPlugin * plugin) { gst_element_register(plugin, "cutter-test-runner", GST_RANK_NONE, GST_TYPE_CUTTER_TEST_RUNNER); gst_element_register(plugin, "cutter-console-output", GST_RANK_NONE, GST_TYPE_CUTTER_CONSOLE_OUTPUT); gst_element_register(plugin, "cutter-server", GST_RANK_NONE, GST_TYPE_CUTTER_SERVER); GST_DEBUG_CATEGORY_INIT(cutter_debug, "cutter-test", 0, "Cutter elements"); return TRUE; } GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR, "cutter-test", "Cutter element", plugin_init, VERSION, "LGPL", "GstCutterTest", "http://cutter.sf.net"); /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gst-plugins/gst-cutter-test-runner.h0000644000175000017500000000404311205747026023671 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GST_CUTTER_TEST_RUNNER_H__ #define __GST_CUTTER_TEST_RUNNER_H__ #include #include G_BEGIN_DECLS #define GST_TYPE_CUTTER_TEST_RUNNER (gst_cutter_test_runner_get_type()) #define GST_CUTTER_TEST_RUNNER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CUTTER_TEST_RUNNER, GstCutterTestRunner)) #define GST_CUTTER_TEST_RUNNER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_CUTTER_TEST_RUNNER, GstCutterTestRunnerClass)) #define GST_CUTTER_TEST_RUNNER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CUTTER_TEST_RUNNER, GstCutterTestRunnerClass)) #define GST_IS_CUTTER_TEST_RUNNER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_CUTTER_TEST_RUNNER)) #define GST_IS_CUTTER_TEST_RUNNER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_CUTTER_TEST_RUNNER)) typedef struct _GstCutterTestRunner GstCutterTestRunner; typedef struct _GstCutterTestRunnerClass GstCutterTestRunnerClass; struct _GstCutterTestRunner { GstBaseSrc parent; }; struct _GstCutterTestRunnerClass { GstBaseSrcClass parent_class; }; GType gst_cutter_test_runner_get_type (void); G_END_DECLS #endif /* __GST_CUTTER_TEST_RUNNER_H */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gst-plugins/gst-cutter-server.h0000644000175000017500000000365211205747026022716 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GST_CUTTER_SERVER_H__ #define __GST_CUTTER_SERVER_H__ #include #include G_BEGIN_DECLS #define GST_TYPE_CUTTER_SERVER (gst_cutter_server_get_type()) #define GST_CUTTER_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CUTTER_SERVER, GstCutterServer)) #define GST_CUTTER_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_CUTTER_SERVER, GstCutterServerClass)) #define GST_CUTTER_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CUTTER_SERVER, GstCutterServerClass)) #define GST_IS_CUTTER_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_CUTTER_SERVER)) #define GST_IS_CUTTER_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_CUTTER_SERVER)) typedef struct _GstCutterServer GstCutterServer; typedef struct _GstCutterServerClass GstCutterServerClass; struct _GstCutterServer { GstElement parent; }; struct _GstCutterServerClass { GstElementClass parent_class; }; GType gst_cutter_server_get_type (void); G_END_DECLS #endif /* __GST_CUTTER_SERVER_H */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gst-plugins/Makefile.in0000644000175000017500000010041411525655560021205 0ustar koukou# 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@ 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@ subdir = gst-plugins DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(gst_pluginsdir)" LTLIBRARIES = $(gst_plugins_LTLIBRARIES) am__DEPENDENCIES_1 = libgstcuttertest_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/cutter/libcutter.la am_libgstcuttertest_la_OBJECTS = \ libgstcuttertest_la-gst-cutter-test.lo \ libgstcuttertest_la-gst-cutter-test-runner.lo \ libgstcuttertest_la-gst-cutter-console-output.lo \ libgstcuttertest_la-gst-cutter-server.lo libgstcuttertest_la_OBJECTS = $(am_libgstcuttertest_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libgstcuttertest_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libgstcuttertest_la_CFLAGS) $(CFLAGS) \ $(libgstcuttertest_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_GSTREAMER_TRUE@am_libgstcuttertest_la_rpath = -rpath \ @HAVE_GSTREAMER_TRUE@ $(gst_pluginsdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgstcuttertest_la_SOURCES) DIST_SOURCES = $(libgstcuttertest_la_SOURCES) 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 HEADERS = $(noinst_HEADERS) 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = test @HAVE_GSTREAMER_TRUE@gst_plugins_LTLIBRARIES = libgstcuttertest.la noinst_HEADERS = \ gst-cutter-test-runner.h \ gst-cutter-console-output.h \ gst-cutter-server.h INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) libgstcuttertest_la_SOURCES = \ gst-cutter-test.c \ gst-cutter-test-runner.c \ gst-cutter-console-output.c \ gst-cutter-server.c libgstcuttertest_la_CFLAGS = \ $(GSTREAMER_CFLAGS) \ $(CUTTER_CFLAGS) libgstcuttertest_la_LIBADD = \ $(GSTREAMER_LIBS) \ $(top_builddir)/cutter/libcutter.la libgstcuttertest_la_LDFLAGS = \ -avoid-version -module \ -export-dynamic \ -no-undefined \ $(LIBTOOL_EXPORT_OPTIONS) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gst-plugins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign gst-plugins/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-gst_pluginsLTLIBRARIES: $(gst_plugins_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(gst_pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(gst_pluginsdir)" @list='$(gst_plugins_LTLIBRARIES)'; test -n "$(gst_pluginsdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(gst_pluginsdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(gst_pluginsdir)"; \ } uninstall-gst_pluginsLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(gst_plugins_LTLIBRARIES)'; test -n "$(gst_pluginsdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gst_pluginsdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gst_pluginsdir)/$$f"; \ done clean-gst_pluginsLTLIBRARIES: -test -z "$(gst_plugins_LTLIBRARIES)" || rm -f $(gst_plugins_LTLIBRARIES) @list='$(gst_plugins_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgstcuttertest.la: $(libgstcuttertest_la_OBJECTS) $(libgstcuttertest_la_DEPENDENCIES) $(AM_V_CCLD)$(libgstcuttertest_la_LINK) $(am_libgstcuttertest_la_rpath) $(libgstcuttertest_la_OBJECTS) $(libgstcuttertest_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcuttertest_la-gst-cutter-console-output.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcuttertest_la-gst-cutter-server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcuttertest_la-gst-cutter-test-runner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcuttertest_la-gst-cutter-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libgstcuttertest_la-gst-cutter-test.lo: gst-cutter-test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcuttertest_la_CFLAGS) $(CFLAGS) -MT libgstcuttertest_la-gst-cutter-test.lo -MD -MP -MF $(DEPDIR)/libgstcuttertest_la-gst-cutter-test.Tpo -c -o libgstcuttertest_la-gst-cutter-test.lo `test -f 'gst-cutter-test.c' || echo '$(srcdir)/'`gst-cutter-test.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstcuttertest_la-gst-cutter-test.Tpo $(DEPDIR)/libgstcuttertest_la-gst-cutter-test.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-cutter-test.c' object='libgstcuttertest_la-gst-cutter-test.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcuttertest_la_CFLAGS) $(CFLAGS) -c -o libgstcuttertest_la-gst-cutter-test.lo `test -f 'gst-cutter-test.c' || echo '$(srcdir)/'`gst-cutter-test.c libgstcuttertest_la-gst-cutter-test-runner.lo: gst-cutter-test-runner.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcuttertest_la_CFLAGS) $(CFLAGS) -MT libgstcuttertest_la-gst-cutter-test-runner.lo -MD -MP -MF $(DEPDIR)/libgstcuttertest_la-gst-cutter-test-runner.Tpo -c -o libgstcuttertest_la-gst-cutter-test-runner.lo `test -f 'gst-cutter-test-runner.c' || echo '$(srcdir)/'`gst-cutter-test-runner.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstcuttertest_la-gst-cutter-test-runner.Tpo $(DEPDIR)/libgstcuttertest_la-gst-cutter-test-runner.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-cutter-test-runner.c' object='libgstcuttertest_la-gst-cutter-test-runner.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcuttertest_la_CFLAGS) $(CFLAGS) -c -o libgstcuttertest_la-gst-cutter-test-runner.lo `test -f 'gst-cutter-test-runner.c' || echo '$(srcdir)/'`gst-cutter-test-runner.c libgstcuttertest_la-gst-cutter-console-output.lo: gst-cutter-console-output.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcuttertest_la_CFLAGS) $(CFLAGS) -MT libgstcuttertest_la-gst-cutter-console-output.lo -MD -MP -MF $(DEPDIR)/libgstcuttertest_la-gst-cutter-console-output.Tpo -c -o libgstcuttertest_la-gst-cutter-console-output.lo `test -f 'gst-cutter-console-output.c' || echo '$(srcdir)/'`gst-cutter-console-output.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstcuttertest_la-gst-cutter-console-output.Tpo $(DEPDIR)/libgstcuttertest_la-gst-cutter-console-output.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-cutter-console-output.c' object='libgstcuttertest_la-gst-cutter-console-output.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcuttertest_la_CFLAGS) $(CFLAGS) -c -o libgstcuttertest_la-gst-cutter-console-output.lo `test -f 'gst-cutter-console-output.c' || echo '$(srcdir)/'`gst-cutter-console-output.c libgstcuttertest_la-gst-cutter-server.lo: gst-cutter-server.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcuttertest_la_CFLAGS) $(CFLAGS) -MT libgstcuttertest_la-gst-cutter-server.lo -MD -MP -MF $(DEPDIR)/libgstcuttertest_la-gst-cutter-server.Tpo -c -o libgstcuttertest_la-gst-cutter-server.lo `test -f 'gst-cutter-server.c' || echo '$(srcdir)/'`gst-cutter-server.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstcuttertest_la-gst-cutter-server.Tpo $(DEPDIR)/libgstcuttertest_la-gst-cutter-server.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gst-cutter-server.c' object='libgstcuttertest_la-gst-cutter-server.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcuttertest_la_CFLAGS) $(CFLAGS) -c -o libgstcuttertest_la-gst-cutter-server.lo `test -f 'gst-cutter-server.c' || echo '$(srcdir)/'`gst-cutter-server.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(gst_pluginsdir)"; 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: 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) 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-generic clean-gst_pluginsLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-gst_pluginsLTLIBRARIES install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-gst_pluginsLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-gst_pluginsLTLIBRARIES clean-libtool ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-gst_pluginsLTLIBRARIES 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 installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-gst_pluginsLTLIBRARIES # 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: cutter-testing-framework-1.1.7/gst-plugins/test/0000755000175000017500000000000011525707420020110 5ustar koukoucutter-testing-framework-1.1.7/gst-plugins/test/Makefile.in0000644000175000017500000004537611525654634022204 0ustar koukou# 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@ 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@ subdir = gst-plugins/test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) @HAVE_GSTREAMER_TRUE@dummy_loader_test_la_DEPENDENCIES = \ @HAVE_GSTREAMER_TRUE@ $(top_builddir)/cutter/libcutter.la am__dummy_loader_test_la_SOURCES_DIST = dummy-test-functions.c @HAVE_GSTREAMER_TRUE@am_dummy_loader_test_la_OBJECTS = \ @HAVE_GSTREAMER_TRUE@ dummy-test-functions.lo dummy_loader_test_la_OBJECTS = $(am_dummy_loader_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent @HAVE_GSTREAMER_TRUE@am_dummy_loader_test_la_rpath = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(dummy_loader_test_la_SOURCES) DIST_SOURCES = $(am__dummy_loader_test_la_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ @HAVE_GSTREAMER_TRUE@INCLUDES = $(CUTTER_CFLAGS) \ @HAVE_GSTREAMER_TRUE@ -I$(top_builddir) \ @HAVE_GSTREAMER_TRUE@ -I$(top_srcdir) \ @HAVE_GSTREAMER_TRUE@ -I$(top_srcdir)/cutter @HAVE_GSTREAMER_TRUE@noinst_LTLIBRARIES = \ @HAVE_GSTREAMER_TRUE@ dummy_loader_test.la @HAVE_GSTREAMER_TRUE@AM_LDFLAGS = \ @HAVE_GSTREAMER_TRUE@ -module \ @HAVE_GSTREAMER_TRUE@ -rpath $(libdir) \ @HAVE_GSTREAMER_TRUE@ -avoid-version @HAVE_GSTREAMER_TRUE@dummy_loader_test_la_SOURCES = dummy-test-functions.c @HAVE_GSTREAMER_TRUE@dummy_loader_test_la_LIBADD = $(top_builddir)/cutter/libcutter.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gst-plugins/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign gst-plugins/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done dummy_loader_test.la: $(dummy_loader_test_la_OBJECTS) $(dummy_loader_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_dummy_loader_test_la_rpath) $(dummy_loader_test_la_OBJECTS) $(dummy_loader_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy-test-functions.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/gst-plugins/test/Makefile.am0000644000175000017500000000054511205747026022151 0ustar koukouif HAVE_GSTREAMER INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ dummy_loader_test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version dummy_loader_test_la_SOURCES = dummy-test-functions.c dummy_loader_test_la_LIBADD = $(top_builddir)/cutter/libcutter.la endif cutter-testing-framework-1.1.7/gst-plugins/test/dummy-test-functions.c0000644000175000017500000000172111243245122024364 0ustar koukou#include void test_abcdefghijklmnopqratuvwzyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 (void); void test_dummy_function1 (void); void test_dummy_function2 (void); void test_dummy_function3 (void); /* int test_invalid_return_value_function (void); void test_invalid_argument_type_function (int arugment); */ void text_invalid_prefix_function (void); void test_dummy_function1 (void) { } void test_dummy_function2 (void) { } void test_dummy_function3 (void) { } void test_abcdefghijklmnopqratuvwzyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 (void) { } static void test_static_function (void) { cut_error("This function is declared as static, should not be loaded!"); } void text_invalid_prefix_function (void) { cut_error("This test name does not have \"test_\" prefix," "should not be loaded!"); test_static_function(); /* must not called! */ } void cut_startup (void) { } void cut_shutdown (void) { } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gst-plugins/Makefile.am0000644000175000017500000000125211525655063021172 0ustar koukouSUBDIRS = test if HAVE_GSTREAMER gst_plugins_LTLIBRARIES = libgstcuttertest.la endif noinst_HEADERS = \ gst-cutter-test-runner.h \ gst-cutter-console-output.h \ gst-cutter-server.h INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) libgstcuttertest_la_SOURCES = \ gst-cutter-test.c \ gst-cutter-test-runner.c \ gst-cutter-console-output.c \ gst-cutter-server.c libgstcuttertest_la_CFLAGS = \ $(GSTREAMER_CFLAGS) \ $(CUTTER_CFLAGS) libgstcuttertest_la_LIBADD = \ $(GSTREAMER_LIBS) \ $(top_builddir)/cutter/libcutter.la libgstcuttertest_la_LDFLAGS = \ -avoid-version -module \ -export-dynamic \ -no-undefined \ $(LIBTOOL_EXPORT_OPTIONS) cutter-testing-framework-1.1.7/TODO0000644000175000017500000000223011424022520015327 0ustar koukou* random value generator. * cut_generate_uuid. * rename cut_process_* to cut_child_cutter_*. * support filter tests by attribute value. e.g. cutter --filter-by-attribute 'target_version <= 1.0.0'. * report errors in data setup function. * add CUTTER_DEBUG technique in test/run-test.sh to tutorial as a debugging technique. * use real data instead of dummy data (e.g. a, b, c, ...) for demo screenshot. (It's more realistic) * add 'what merit we will get' instead of 'what features we will get' to introduction document. * add 'how to become a test junkie from a test amateur' to document. * cut_thread_create(): it pushes the current test context. tests written by user will not care the current test context. * priority mode. * auto-cutter. * gompertz curve. * elapsed time assert. (compare with past elapsed time?) * test history chart. * N tests * N failures * elapsed time * coordinattion with TestLink. * failmalloc like memory test. * update option descriptions in README. * introduce easy sub process debugging mechanism. * GTK+ UI supports test iterator. * cut_get_test_name(). * cut_{get,set}_current_test_context() -> cut_{get,set}_test_context() cutter-testing-framework-1.1.7/README0000644000175000017500000002121511525642526015543 0ustar koukou# -*- rd -*- = README --- An introduction of Cutter, a Unit Testing Framework for C and C++ == Name Cutter == Author === Program * Kouhei Sutou * Hiroyuki Ikezoe * Yuto Hayamizu === Kinotan Icons * Mayu & Co. == License * Source: LGPLv3 or later. (detail: ((<"license/lgpl-3.txt"|URL:http://www.gnu.org/licenses/lgpl.html>))) * Document and kinotan icons: Triple license: LGPL, GFDL and/or CC. * LGPL: v3 or later. (detail: ((<"license/lgpl-3.txt"|URL:http://www.gnu.org/licenses/lgpl.html>))) * GFDL: v1.3 or later. (detail: ((<"license/gfdl-1.3.txt"|URL:http://www.gnu.org/licenses/fdl.html>))) * CC: (()) * Exceptions: * glib-compatible/glibintl.h, glib-compatible/gregex.*, glib-compatible/gscripttable.h, glib-compatible/gsequence.*, glib-compatible/gstring.*, glib-compatible/gunicode.h, glib-compatible/guniprop.c: LGPL v2.0 or later. (detail: ((<"glib-compatible/COPYING"|URL:http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html>))) * glib-compatible/pcre/: PCRE LICENSE. (detail: ((<"glib-compatible/pcre/COPYING"|URL:http://www.pcre.org/licence.txt>))) * html/blog.*, html/download.*, html/heading-mark.* html/install.*, html/readme.*, html/reference.*, html/tango-logo.png, html/tutorial.*, html/mini-*.svg: Public domain. They are deliverables by (()). (Some of them are modified.) * html/ja.png, html/us.png, html/famfamfam-logo.png: Public domain. They are distributed by (()). == What's this? Cutter is a xUnit family Unit Testing Framework for C and C++. This is a list of features of Cutter: * easy to write tests. * outputs result with useful format for debugging. * tests are built as shared libraries. See (()) for more details. == Dependency libraries * GLib >= 2.16 == Get tar.gz: % wget http://downloads.sourceforge.net/cutter/cutter-1.1.0.tar.gz Subversion: % svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter == Install See (()). == Usage % cutter [OPTION ...] TEST_DIRECTORY TEST_DIRECTORY should have test_*.so. test_*.so are searched recursively. See (()) for more details. == How to test Executing flow of test is the following. (1) Write a test. (2) Compile it and build test_*.so. (3) Execute cutter. It loads test_*.so and runs them. See (()) and sample/stack/. == Test result Here is an example test result: ..........F................................................. 1) Failure: test_test_case_count <1 == cut_test_case_get_n_tests(test_object, NULL)> expected: <1> but was: <0> test/test-cut-test-case.c:143: test_test_case_count() Finished in 0.020857 seconds 60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) === Progress A part that contains "." and "F" of the test result shows test progress: ..........F................................................. Each "." and "F" shows a test case (test function). "." shows a test case that is succeeded and "F" shows a test case that is failed. There are "E", "P" and "N". They shows error, pending and notification respectively. Here is a summary of test case marks: : . A succeeded test : F A failed test : E A test that had an error : P A test that is marked as pending : N A test that had an notification The above marks are showed after each test is finished. We can confirm the test progress from the output in testing. === Summary of test result Cutter outputs a summary of test result after all tests are finished. The first of a summary is a list of a detail of test result of non-succeeded test. In the example, cutter outputs a detail of test result because there is a failure. 1) Failure: test_test_case_count <1 == cut_test_case_get_n_tests(test_object, NULL)> expected: <1> but was: <0> test/test-cut-test-case.c:143: test_test_case_count() In the example, test_test_case_count test case is failed. We expected that cut_test_case_get_n_tests(test_object, NULL) is 1 but was 0. The failed assertion is in test_test_case_count() function in test/test-cut-test-case.c at 143th line. Elapsed time for testing is showed after a list of a detail of test result: Finished in 0.020857 seconds The last line is an summary of test result: 60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) Here are the means of each output: : n test(s) n test case(s) (test function(s)) are run. : n assertion(s) n assertion(s) are passed. : n failure(s) n assertion(s) are failed. : n error(s) n error(s) are occurred (cut_error() is used n times) : n pending(s) n test case(s) are pending (cut_pending() is used n times) : n notification(s) n notification(s) are occurred (cut_notification() is used n times) In the example, 60 test cases are run, 253 assertions are passed and an assertion is failed. There are no error, pending, notification. === XML report Cutter reports test result as XML format if --xml-report option is specified. A reported XML has the following structure: TEST CASE NAME DESCRIPTION OF TEST CASE (if exists) TEST NAME DESCRIPTION OF TEST CASE (if exists) TEST RESULT ([success|failure|error|pending|notification]) DETAIL OF TEST RESULT (if exists) FILE NAME LINE ADDITIONAL INFORMATION ... ELAPSED TIME (e.g.: 0.000010) ... ... === Test coverage You can see the code coverage with Cutter if your system have (()). To see the coverage, add the followling line in your configure.ac and type "make coverage". AC_CHECK_COVERAGE == References === Assertions See ((<"cutter/cut-assertions.h"|cutter-cut-assertions.html>)). === Attributes You can add attributes to your test to get more useful information on failure. For example, you can add Bug ID like the following void attributes_invalid_input(void); void test_invalid_input(void); void attributes_invalid_input (void) { cut_set_attributes("bug", "123"); } void test_invalid_input (void) { cut_assert_equal("OK", get_input()); } In the above example, test_invalid_input test has an attribute that the test is for Bug #123. You need to define a function whose name is "attributes_#{TEST_NAME - 'test_' PREFIX}" to add attributes to a test. In the above example, attributes set function, "attributes_invalid_input", is defined to set "bug" attribute to "test_invalid_input" test. === Template The following is a template of test. #include #include "HEADER_FILE_OF_YOUR_PROGRAM" void test_condition(void); void test_strstr(void); static int condition = 0; void cut_setup (void) { condition = 1; } void cut_teardown (void) { condition = 0; } void test_condition(void) { cut_set_message("The condition value should be set to 1 in cut_setup()"); cut_assert_equal_int(1, condition); ... } void test_strstr(void) { cut_assert_equal_string("sub-string", strstr("string sub-string", "sub")); ... } == Thanks * Kazumasa Matsunaga: reported a build bug. * Daijiro MORI: reported bugs. * UNNO Hideyuki: * reported a document bug. * assisted Solaris install document. * gunyara-kun: suggested API design. * Yamakawa Hiroshi: reported works on Cygwin. * Yoshinori K. Okuji: * reported locale related bugs. * suggested a new feature. * Zed Shaw: reported bugs. * Romuald Conty: reported a document bug. * Romain Tartière: * reported bugs. * suggested improvements. * Ilya Barygin: * reported bugs in test. * Hiroaki Nakamura: * reported a bug on CentOS. cutter-testing-framework-1.1.7/TUTORIAL0000644000175000017500000014030611400065250016035 0ustar koukou# -*- rd -*- = Tutorial --- How to use Cutter Copyright (C) 2007-2010 Kouhei Sutou : License Triple license: (()), (()) and/or (()) . == Introduction We write a program (library) that implements a stack in C. We write a program with writing tests. To write tests, we use Cutter that is a unit testing framework for C. We use GNU build system (GNU Autoconf/GNU Automake/GNU Libtool) for build system. GNU build system lessens disparities on build environment. For this reason, we can build our program and tests on several environment easily. It's better that a program works on several environment without many costs. If tests of the program works on the environment too, we can verify the program works well on the environment easily. It's important that both a program and tests are works well on several environment easily. Cutter requires only GLib. GLib is a very portable library that works on not only UNIX-like system but also Windows and Mac OS X. Cutter provides many useful test support features with portability due to GLib. Cutter is a testing framework and respects to xUnit style. We will learn how to use Cutter with writing a stack implementation. We assume that Cutter is already installed into your system. There are source codes of this program in sample/stack/. == Directory hierarchy First, we need to setup a directory for our stack program. We use 'stack' as the directory name. % mkdir -p /tmp/stack % cd /tmp/stack Next, we make some directories: config/ that is for build auxiliary files, src/ that is for our source files and test/ that is for tests. [stack]% mkdir config src test After the above, we get the following directory hierarchy: stack/ -+- config/ for build auxiliary files | +- src/ for source files | +- test/ for tests == Use GNU build system In GNU build system start-up, some commands are ran and they generates some files automatically. They usually are run from an authgen.sh shell script. We follow the convention. autogen.sh: #!/bin/sh run() { $@ if test $? -ne 0; then echo "Failed $@" exit 1 fi } run aclocal ${ACLOCAL_ARGS} run libtoolize --copy --force run autoheader run automake --add-missing --foreign --copy run autoconf Don't forget to make the autogen.sh executable. [stack]% chmod +x autogen.sh run() is a convenience function to confirm a result of ran command. The following list shows what is done by them: * aclocal: collects macros that is used by Automake into aclocal.m4. * libtoolize: prepares files that is needed by libtool. * autoheader: generates config.h.in that is used by configure script. * automake: generates Makefile.in that is used by configure script. * autoconf: generates configure scripts. If we installed Cutter into different prefix with aclocal's install prefix, you need to set ACLOCAL_ARGS environment variable. The environment variable is referred from autogen.sh. If we installed Cutter with $HOME/local prefix, here is an example command to set the environment variable: [stack]% export ACLOCAL_ARGS="-I $HOME/local/share/aclocal" The following is a result of autogen.sh at this point: [stack]% ./autogen.sh aclocal: `configure.ac' or `configure.in' is required Failed aclocal We need to prepare configure.ac that is for Autoconf. === configure.ac The following is a minimum configure.ac for our autogen.sh. configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL AC_CONFIG_FILES([Makefile]) AC_OUTPUT The following is a result of autogen after preparing configure.ac. [stack]% ./autogen.sh Putting files in AC_CONFIG_AUX_DIR, `config'. configure.ac:7: installing `config/install-sh' configure.ac:7: installing `config/missing' automake: no `Makefile.am' found for any configure output Failed automake --add-missing --foreign --copy We need to prepare Makefile.am for Automake. === Makefile.am An empty Makefile.am is enough if the Makefile.am is just only for autogen.sh. [stack]% touch Makefile.am [stack]% ./autogen.sh Putting files in AC_CONFIG_AUX_DIR, `config'. A configure script can be generated. We can do 'configure; make; make install' like many popular softwares at this point: [stack]% ./configure ... [stack]% make [stack]% make install But for now, nothing is to happen because we doesn't have any items that are needed to build or install. == First test writing We can write a test because we got a minimal build environment. First, we test that a newly created statck should be empty. The following code representes this test in C: void test_new_stack (void) { Stack *stack; stack = stack_new(); if (stack_is_empty(stack)) PASS; else FAIL; } We change this test code to be able to run as a test code for Cutter. === Write a test program A test program is put into test/. In this tutorial, we make a test program as test/test-stack.c. First, we need to include cutter.h to use Cutter. test/test-stack.c: #include And we need to include stack.h that declares API for test target stack implementation. (stack.h will be made later.) test/test-stack.c: #include Next, we write a test with the stack API: test/test-stack.c: void test_new_stack (void); void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); } cut_assert() is a macro that fails if the first argument is 0, passes otherwise. Writing tests with Cutter means that writing a program that verifies a target program works as we expected at the specific situation. The following test code is a whole test code to test "a newly created stack should be empty". test/test-stack.c: #include #include void test_new_stack (void); void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); } === Build a test Each test programs for Cutter are shared libraries. To build the above test program as shared library, we change Makefile.am. ==== Build configuration in test/ Makefile.am is empty for now. First, put the following configuration to use ACLOCAL_ARGS environment variable for autogen.sh with aclocal invoked via make: Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS Next, to build test/test-stack.c in test/ directory, we need to specify that there is test/ directory as sub directory in Makefile.am. Makefile.am: ... SUBDIRS = test make will detect Makefile.am is changed and update Makefile and so on automatically after we change Makefile.am and run make. [stack]% make cd . && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign Makefile cd . && /bin/sh ./config.status Makefile config.status: creating Makefile Making all in test config.status: creating Makefile Making all in test make[1]: Entering directory `/tmp/stack/test' make[1]: *** No rule to make target `all'. Stop. make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 We find that make go down to test/ to build. But make is failed in test/ because test/Makefile doesn't exist. To build in test/, we will make test/Makefile.am and indicate configure.ac to generate test/Makefile. An empty test/Makefile.am is OK for just protecting make failure in test/. [stack]% touch test/Makefile.am Next, we indicate configure.ac to generate test/Makefile. Now, make will be done successfully. configure.ac: ... AC_CONFIG_FILES([Makefile test/Makefile]) ... If we run make again, make re-runs configure and test/Makefile is generated. Now make doesn't fail in test/. [stack]% make ... config.status: creating test/Makefile config.status: creating src/config.h config.status: src/config.h is unchanged config.status: executing depfiles commands Making all in test make[1]: Entering directory `/tmp/stack/test' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/tmp/stack/test' make[1]: Entering directory `/tmp/stack' make[1]: Nothing to be done for `all-am'. make[1]: Leaving directory `/tmp/stack' ==== Build test/test_stack.so We will edit test/Makefile.am to build test/test-stack.c as a shared library. A shared library for test should be named as "test_" prefix. (It's OK if "lib" is prepended to "test_" prefix.) We use "noinst_" because a test program isn't needed to be installed. test/Makefile.am: noinst_LTLIBRARIES = test_stack.la Shared libraries for test are loaded dynamically by cutter that is a command included in Cutter to run test. Shared libraries that are loaded dynamically should be builded libtool with -module option. -rpath option is also required by -module option. Because of them LDFLAGS becomes the following. The reason why -avoid-version is specified is that shared libraries for test aren't needed to have version number. -no-undefined option tells libtool that it reports a error when there is any undefined symbol. On some environments, shared library isn't generated without -no-undefined option. (e.g. a case that generating DLL on Windows.) test/Makefile.am: ... LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined To build test/test_stack.la, test/test-stack.c is used. (test_stack.so is generated into test/.libs/.) We need to specify this. test/Makefile.am: ... test_stack_la_SOURCES = test-stack.c Now, we can build test/test_stack.la. [stack]% make ... cd .. && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign test/Makefile test/Makefile.am: required file `config/depcomp' not found test/Makefile.am: `automake --add-missing' can install `depcomp' make[1]: *** [Makefile.in] Error 1 make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 To generate config/depcomp, we need to run automake with --add-missing option. To do this, we can use autogen.sh. Don't forget to re-run configure. [stack]% ./autogen.sh [stack]% ./configure Now, we can build test/test_stack.la with make. [stack]% make ... test-stack.c:1:20: error: cutter.h: No such file or directory test-stack.c:2:19: error: stack.h: No such file or directory test-stack.c: In function 'test_new_stack': test-stack.c:9: error: 'Stack' undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: 'stack' undeclared (first use in this function) make[1]: *** [test-stack.lo] Error 1 make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 But there are the above errors because we don't setup to use Cutter yet. And we can't include stack.h because we don't have a stack implementation yet. ==== Use Cutter We will support cutter.h including. Cutter provides a macro file for aclocal. Because of this, we can use Cutter with GNU build system. First, we add a code to detect Cutter into configure.ac. configure.ac: ... AC_CHECK_CUTTER AC_CONFIG_FILES([Makefile test/Makefile]) ... We use detected Cutter information in test/Makefile.am: test/Makefile.am: ... INCLUDES = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) ... The followings are the current whole configure.ac, Makefile.am and test/Makefile.am: configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL AC_CHECK_CUTTER AC_CONFIG_FILES([Makefile test/Makefile]) AC_OUTPUT Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = test test/Makefile.am: noinst_LTLIBRARIES = test_stack.la INCLUDES = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c AC_CHECK_CUTTER macro uses pkg-config which is a popular package information management tool. If we installed Cutter with different prefix of pkg-config, we need to set PKG_CONFIG_PATH environment variable. The environment variable is referred by pkg-config to find .pc file. If we installed Cutter with $HOME/local prefix, here is an example command to set the environment variable: [stack]% export PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig We run make again and make runs configure automatically and builds with Cutter configuration after the above changes. [stack]% make ... test-stack.c:2:19: error: stack.h: No such file or directory test-stack.c: In function 'test_new_stack': test-stack.c:9: error: 'Stack' undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: 'stack' undeclared (first use in this function) make[1]: *** [test-stack.lo] Error 1 make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 An error that reports "cutter.h can't be included" is gone away. ==== Make stack API We will fix an error that stack.h can't be included. We put stack.h into src/stack.h because we make a stack implementation in src/. [stack]% touch src/stack.h To include stack.h from test program, we configure include path: test/Makefile.am: ... INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src ... We will find that an error that stack.h can't be included is gone away if we run make again. [stack]% make ... test-stack.c: In function 'test_new_stack': test-stack.c:9: error: 'Stack' undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: 'stack' undeclared (first use in this function) make[1]: *** [test-stack.lo] Error 1 make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 There is only an error that Stack type isn't declared. ==== Declare Stack type To build our test program, we declare Stack type in src/stack.h. src/stack.h: #ifndef __STACK_H__ #define __STACK_H__ typedef struct _Stack Stack; #endif We get a warning because stack_new() isn't declared but we can build a shared library. [stack]% make ... test-stack.c: In function 'test_new_stack': test-stack.c:10: warning: assignment makes pointer from integer without a cast ... [stack]% file test/.libs/test_stack.so test/.libs/test_stack.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped NOTE: We can't generate a shared library (DLL) on Cygwin when we have unresolved symbols. We can go to the next step on Cygwin without caring the command result. ==== Declare stack_new()/stack_is_empty() To suppress a warning, we declare stack_new() and stack_is_empty(). src/stack.h: ... Stack *stack_new (void); int stack_is_empty (Stack *stack); ... We can confirm that make don't report any warnings now. [stack]% make === Run test Now, we can run a test because we got a shared library. [stack]% cutter test/ cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new Loading our test is failed due to undefined stack_new() but we can confirm that our test is loaded. NOTE: We get a "0 tests are ran and no failure" result report on Cygwin because we can't generate a DLL on Cygwin when we have unresolved symbols. We will implement stack and resolve all symbols. We can generate a DLL and run test after implementing stack. We can go to the next step on Cygwin without caring the command result. ==== Automate running test GNU build system use 'make check' to run test. We follow the convention in our stack implementation. First, we make a script test/run-test.sh that runs our test. A path of cutter command is passed from environment variable CUTTER. test/run-test.sh: #!/bin/sh export BASE_DIR="`dirname $0`" $CUTTER -s $BASE_DIR "$@" $BASE_DIR Don't forget to make the test/run-test.sh executable. [stack]% chmod +x test/run-test.sh We need to specify that we use test/run-test.sh as a test runner script to test/Makefile.am. test/Makefile.am: TESTS = run-test.sh TESTS_ENVIRONMENT = CUTTER="$(CUTTER)" ... We pass a path of cutter command via environment variable CUTTER in TESTS_ENVIRONMENT. A path of cutter command is detected by AC_CHECK_CUTTER in configure.ac. We can confirm that 'make -s check' runs our test. -s option is for silence mode. A test result can be confirmed more easier. [stack]% make -s check Making check in test cutter: symbol lookup error: ./.libs/test_stack.so: undefined symbol: stack_new FAIL: run-test.sh ================================ 1 of 1 tests failed Please report to you@example.com ================================ ... NOTE: As mentioned the above, we doesn't get an error on Cygwin because we can't generate a DLL for now. We doesn't need to care it. We can go to the next. ==== Make test/run-test.sh workable alone In 'make -s check', there are outputs that isn't test result like build logs. They hid test result that is interested by us. So we want test/run-test.sh to work without invoking from 'make -s check'. test/run-test.sh needs to detect a path of cutter command automatically if environment variable CUTTER isn't set. And test/run-test.sh needs to run make to rebuild necessary files if test/run-test.sh isn't invoked from 'make check'. test/run-test.sh: #!/bin/sh export BASE_DIR="`dirname $0`" top_dir="$BASE_DIR/.." if test -z "$NO_MAKE"; then make -C $top_dir > /dev/null || exit 1 fi if test -z "$CUTTER"; then CUTTER="`make -s -C $BASE_DIR echo-cutter`" fi $CUTTER -s $BASE_DIR "$@" $BASE_DIR To support the test/run-test.sh, test/Makefile.am has some works. test/Makefile.am: ... TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" ... echo-cutter: @echo $(CUTTER) The following is the whole of test/Makefile.am. test/Makefile.am: TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) We can confirm that test/run-test.sh runs test even if it's not invoked from 'make -s check'. [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new NOTE: We doesn't get the error on Cygwin. We will use test/run-test.sh instead of 'make -s check' from now. Test result that is what we are interested in will not be hid because test/run-test.sh just outputs build errors and/or warnings and test result. We spent some times to build testing environment before we implement stack. It reduces costs to run test. If costs to run test isn't low, we will not run test gradually. It may cause quality loss. Building testing environment at first delays start time of implementing a main program. But we need to keep quality of a main program by running test until a main program is developed and maintained. We will be able to collect costs that is spent for building testing environment. It's important that building testing environment at first to be developing a high-quality program comfortably. === Implement stack We will start implementing stack because we built testing environment. ==== A straightforward stack_new() implementation We will define stack_new() and resolve run-time error. We implement stack in src/stack.c. It's a straightforward stack_new() implementation: src/stack.c: #include #include "stack.h" Stack * stack_new (void) { return NULL; } ==== Build src/libstack.la We will build src/stack.c with make. src/ should be included into build targets like test/. Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = src test configure.ac: ... AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) ... The above configurations are for what we want to do. [stack]% test/run-test.sh configure.ac:19: required file `src/Makefile.in' not found make: *** [Makefile.in] Error 1 To resolve the above error, we need to make src/Makefile.am. [stack]% touch src/Makefile.am [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new NOTE: We doesn't get the error on Cygwin. make doesn't report error but we still have an error that stack_new() is undefined. Because we don't build src/stack.c and test program also doesn't link libstack.so yet. The following configurations in src/Makefile.am are for build libstack.so from src/stack.c. src/Makefile.am: lib_LTLIBRARIES = libstack.la LDFLAGS = -no-undefined libstack_la_SOURCES = stack.c make will generate libstack.so. [stack]% make ... make[1]: Entering directory `/tmp/stack/src' Makefile:275: .deps/stack.Plo: No such file or directory make[1]: *** No rule to make target `.deps/stack.Plo'. Stop. ... To resolve the above error, we need to re-run configure. [stack]% ./configure make will generate src/.libs/libstack.so.0.0.0 now. [stack]% make [stack]% file src/.libs/libstack.so.0.0.0 src/.libs/libstack.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped NOTE: We will generate src/.libs/cyglibstack.dll on Cygwin. ==== Link src/libstack.la libstack.so is generated but it's not linked into test program. So there is still run-time error. [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new NOTE: We doesn't get the error on Cygwin. To link libstack.so, we will change test/Makefile.am like the following. test/Makefile.am: ... LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la ... We need to add src/.libs/ to PATH environment variable before run cutter to find DLL generated under src/.libs/ on Cygwin: test/run-test.sh: ... case `uname` in CYGWIN*) PATH="$top_dir/src/.libs:$PATH" ;; Darwin) DYLD_LIBRARY_PATH="$top_dir/src/.libs:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH ;; *BSD) LD_LIBRARY_PATH="$top_dir/src.libs:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH ;; *) : ;; esac $CUTTER -s $BASE_DIR "$@" $BASE_DIR We need to run 'make clean' to re-link our test program. [stack]% make clean [stack]% make [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_is_empty An error message is changed to stack_is_empty() isn't found from stack_new() isn't found. We can confirm that libstack.so is linked correctly by this change. NOTE: We doesn't get the error on Cygwin. ==== Implement stack_is_empty() We test a result of stack_is_empty() in our test program: test/test-stack.c: ... cut_assert(stack_is_empty(stack)); ... That means that stack_is_empty() should return true. So stack_is_empty() implementation in src/stack.c should return true. src/stack.c: ... #define TRUE 1 #define FALSE 0 ... int stack_is_empty (Stack *stack) { return TRUE; } The following is the whole of src/stack.c. src/stack.c: #include #include "stack.h" #define TRUE 1 #define FALSE 0 Stack * stack_new (void) { return NULL; } int stack_is_empty (Stack *stack) { return TRUE; } Our test should pass because the stack_is_empty() implementation always returns true. [stack]% test/run-test.sh . Finished in 0.000028 seconds 1 test(s), 1 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed Great! This is the first success!!! Displayed a "." means that a test is passed. The current number of tests is just one. So one "." means all tests are passed. The above result may be displayed in green. This means that we may go to the next step because our all tests are passed. We confirmed that test is worked. We will complete stack implementation with writing tests. == Implement push We will implement push. We only accept integer for values in stack in this implementation. === Test for push A stack should have 1 item and not be empty after we push a value. The following is a test for this. test/test-stack.c: ... void test_push (void); ... void test_push (void) { Stack *stack; stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } We will get an error that says stack_get_size() isn't undefined if we run test. [stack]% test/run-test.sh cutter: symbol lookup error: ./test/.libs/test_stack.so: undefined symbol: stack_get_size We will implement push to pass this test. NOTE: We doesn't get the error on Cygwin. === Implement cut_stack_push() We will implement stack_get_size() and stack_push() to be able to run test even if tests aren't passed. First, we add declarations to src/stack.h. src/stack.h: ... int stack_get_size (Stack *stack); void stack_push (Stack *stack, int value); ... And we add definitions to src/stack.c. src/stack.c: ... int stack_get_size (Stack *stack) { return 0; } void stack_push (Stack *stack, int value) { } The reason why stack_get_size() returns 0 is the first stack_get_size() call is expected to return 0 like the following. test/test-stack.c: ... stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); ... We run test because push is implemented. [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:23: test_push() Finished in 0.000113 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed "F" means that a test is Failed. The result may be showed in red. It indicates that it's dangerous to go to next stage because all of the current tests aren't passed. In other words, we should improve push implementation to pass the current tests before we implement pop. The message form cutter command shows that the test is failed because return value of stack_get_size(stack) is 0 not 1 in test_push() function at the 23th line in test/test-stack.c. The target line is the following. test/test-stack.c:23: cut_assert_equal_int(1, stack_get_size(stack)); It's failed because our stack_get_size() implementation always return 0. We should increment an internal counter after stack_push() is called. === Free memory stack_new() always returns NULL for now. Stack needs to allocate memory to have an internal counter. Stack should free memory that is unused if stack allocate memory. For example, test_new_stack() should do like the following. void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); stack_free(stack); } But stack_free() will never be called if cut_assert() where it's the above of the stack_free() fails. Because cut_assert() returns the test function immediately if the expression (stack_is_empty(stack)) is false. (It will not cause big harm because most test programs are short-lived.) Cutter supports registering functions that are surely called before/after test. They are cut_setup() and cut_teardown(). They are called even if test is failed. We can use them for freeing memory allocated in test surely. To freeing allocated memory for test_new_stack() surely, we can use cut_setup() and cut_teardown() like the following. test/test-stack.c: ... static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } ... We can also modify test_push() to freeing allocated memory in tests by using static stack variable instead of local stack variable. test/test-stack.c: ... void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } ... Here is whole of the test/test-stack.c that uses cut_setup()/cut_teardown(). test/test-stack.c: #include #include void test_new_stack (void); void test_push (void); static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } We can confirm that a result of test isn't changed after this change. [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:35: test_push() Finished in 0.000084 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed === Implement stack_new() and stack_free() We will implement stack_new() that allocate memory and stack_free() that free allocated memory. First, we will declares stack_free() in src/stack.h. src/stack.h: ... void stack_free (Stack *stack); ... Next, we will define Stack type in src/stack.c. Stack type has a field that hold stack size. src/stack.c: ... struct _Stack { int size; }; ... stack_new() allocates memory for Stack and stack_free() frees memory allocated by stack_new(). src/stack.c: ... Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; return stack; } void stack_free (Stack *stack) { free(stack); } ... We can confirm that test works same as before the changes. [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:35: test_push() Finished in 0.000113 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed === Really implement stack_push() We will really implement stack_push() and stack_get_size() to pass our tests because a stack can have a stack size. src/stack.c: ... int stack_get_size (Stack *stack) { return stack->size; } void stack_push (Stack *stack, int value) { stack->size++; } Stack increments it's size each push and returns the size. A test for stack_get_size() that is failed until now will be passed. [stack]% test/run-test.sh .F 1) Failure: test_push expected: is not FALSE/NULL test/test-stack.c:36: test_push() Finished in 0.000113 seconds 2 test(s), 3 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed The test for stack_get_size() is passed as our expectation but there is still a failure. It's a test for stack_is_empty() in test/test-stack.c at the 36th line. test/test-stack.c:36: cut_assert(!stack_is_empty(stack)); A stack should not be empty after push. === Really implement stack_is_empty() A stack should be empty only when a stack size is 0. So stack_is_empty() is changed to the following. src/stack.c: ... int stack_is_empty (Stack *stack) { return stack->size == 0; } ... We can run test again and confirm that all of tests are passed. % test/run-test.sh .. Finished in 0.000036 seconds 2 test(s), 4 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed A test for push is passed and the rest of tests are kept to pass. A result message is back to green because all of tests are passed. We can feel safe to go to the next stage; We will implement pop. == Implement pop We will implement pop that retrieve a value that is inserted by push. === Test for pop Pop returns a value that is inserted by the last push. Pop reduces stack size and finally a stack is empty. The following test represents expected push/pop behavior. test/test-stack.c: ... void test_pop (void); ... void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } We can run test. [stack]% test/run-test.sh ..cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_pop There is an error that reports stack_pop() isn't defined. We can confirm that existed two tests are passed because there are two "." before the error message. NOTE: We doesn't get the error on Cygwin. === Implement stack_pop() First, we declare stack_pop() in src/stack.h. src/stack.h: ... int stack_pop (Stack *stack); ... Next, we define stack_pop() in src/stack.c. src/stack.c: ... int stack_pop (Stack *stack) { return 30; } stack_pop() always returns 30 because the first stack_pop() call is required to return 30: test/test-stack.c:50: cut_assert_equal_int(30, stack_pop(stack)); We can confirm that test can be run and a test for pop doesn't report any error. [stack]% test/run-test.sh ..F 1) Failure: test_pop <2 == stack_get_size(stack)> expected: <2> but was: <3> test/test-stack.c:51: test_pop() Finished in 0.000307 seconds 3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 66.6667% passed A test for pop is run but failed because the current stack_pop() implementation doesn't change stack size. The failure is occurred in test/test-stack.c at the 50th line and the reason is stack_get_size() in the target line returns 3 not expected 2. test/test-stack.c:51: cut_assert_equal_int(2, stack_get_size(stack)); === Allocate memory for data We can confirm that the test can be run. We will implement stack_pop() to pass the test. A stack needs to save pushed data to retrieve by pop. A stack needs to have a new field to hold pushed data and stack_push()/stack_pop() allocates/frees memory for pushed data dynamically. First, we will add a new field in Stack. stack_new() initializes the field and stack_free() frees the field. src/stack.c: ... struct _Stack { int size; int *data; }; Stack * stack_new (void) { ... stack->data = NULL; ... } void stack_free (Stack *stack) { free(stack->data); free(stack); } ... At this point, we don't change any process that effects external program. So we can confirm that the test should be failed the same as before. [stack]% test/run-test.sh ..F 1) Failure: test_pop <2 == stack_get_size(stack)> expected: <2> but was: <3> test/test-stack.c:51: test_pop() Finished in 0.000097 seconds 3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 66.6667% passed === Really implement stack_pop() We added a new field to hold pushed data. stack_push()/stack_pop() can allocate needed memory to the field and save data. src/stack.c: ... void stack_push (Stack *stack, int value) { int *new_data; stack->size++; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (!new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return; } stack->data = new_data; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; int *new_data; stack->size--; value = stack->data[stack->size]; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return value; } stack->data = new_data; return value; } We can confirm that the test for pop is passed. [stack]% test/run-test.sh ... Finished in 0.000076 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed == Eliminate duplications stack_push() and stack_pop() implementations has duplications that are dynamic memory allocation process and error handling process when memory allocation is failed. It's generally not good that duplications exist because they may increase maintenance cost and so on. In this section, we will eliminate duplications without changing existing semantics. We can confirm that existing semantics aren't changed by running our tests. === Eliminate a duplication in memory allocation process First, we will eliminate a duplication in memory allocation process like the following: src/stack.c: new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); We will extract the above part as stack_realloc(). src/stack.c: ... static int * stack_realloc (Stack *stack) { return realloc(stack->data, sizeof(*stack->data) * stack->size); } void stack_push (Stack *stack, int value) { ... new_data = stack_realloc(stack); ... } int stack_pop (Stack *stack) { ... new_data = stack_realloc(stack); ... } We can confirm that existing semantics aren't changed by running tests. [stack]% test/run-test.sh ... Finished in 0.000078 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed We can go to the next because the result is green. === Eliminate a duplication in error handling process Next, we will eliminate a duplication in error handling process for memory allocation failure. The current implementation is the following: src/stack.c: ... void stack_push (Stack *stack, int value) { ... new_data = stack_realloc(stack); if (!new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return; } ... } int stack_pop (Stack *stack) { ... new_data = stack_realloc(stack); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return value; } ... } We will move the above error handling process to stack_realloc() and stack_realloc() returns whether memory allocation is succeeded or failed instead of allocated memory. src/stack.c: ... static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } We should confirm that the changes doesn't change existing semantics. [stack]% test/run-test.sh ... Finished in 0.000076 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed w We confirmed that we can improve our program by eliminating duplications in our program without changing existing semantics. == Conclusion This documentation shows how to setup a build environment system with GNU build system, write tests with Cutter and improve a program that has tests by using a small stack implementation. === Merit GNU build system provides us portability. Cutter provides us a method to write tests easily. Existing testing frameworks for C require to use macros to define a test or to register tests explicitly. We need to write many other things except writing tests. Cutter resolves this problem. Cutter doesn't require to use original macros to define a test. We can write a test as just a normal function. We can also write no test registration code. We only used cut_assert() and cut_assert_equal_int() but Cutter provides many assertions to verify actual value is expected value like cut_assert_equal_string(). We will be able to write tests simply by them because we doesn't need to write our assertions for primitive types. Cutter doesn't show needless information in test result message but show useful information as much as possible. It supports that we can find useful information easily and fix problems easily and rapidly. Cutter also tries to show backtraces on segmentation fault that is often caused for a program written by C for providing many information to fix problems. It's very helpful for maintenance that improving internal structure of a program without changing existing semantics. We can easily confirm that existing semantics isn't changed with automated tests. Automated tests also helps us when a new feature is developed. We can confirm that existing semantics isn't broken by codes for a new feature. Automated tests are useful for maintenance, developing new features and keeping high-quality. === Stack test The following tests are the final version. test/test-stack.c #include #include void test_new_stack (void); void test_push (void); void test_pop (void); static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } === Stack implementation The following codes are the final version. This stack implementation has some issues that error notification, performance tunings and so on because it's straightforward. But the implementation has basic features that is shown by test. src/stack.c: #include #include "stack.h" #define TRUE 1 #define FALSE 0 struct _Stack { int size; int *data; }; Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; stack->data = NULL; return stack; } void stack_free (Stack *stack) { free(stack->data); free(stack); } int stack_is_empty (Stack *stack) { return stack->size == 0; } int stack_get_size (Stack *stack) { return stack->size; } static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } === Support no Cutter installed environment In this tutorial, test/test-stack.c build is failed on no Cutter installed environment. That is make fails. If you are a developer, you must run test. So this behavior is reasonable. But it's better that this stack library can be built without Cutter for users that just want to use this stack implementation as a library. They will use a released library that is tested by developers. The following is a way to support no Cutter installed environment. First, we change AC_CHECK_CUTTER call in configure.ac to work autogen.sh (to be exact, aclocal) without cutter.m4. (If autogen.sh is ran only by developers, this change isn't needed. In the case, aclocal fails because AC_CHECK_CUTTER isn't defined.) configure.ac: ... m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) ... We use ac_cv_use_cutter as a variable name because AC_CHECK_CUTTER uses the same variable name. The variable becomes "no" if configure can't detect Cutter. On no cutter.m4 environment (no Cutter environment when autogen.sh is ran), we always can't detect Cutter. Next, we define a condition that can be used in Makefile.am after AC_CHECK_CUTTER. The condition shows whether we detect Cutter or not. configure.ac: ... m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) ... Last, we build test/test-stack.c and run test/run-test.sh only if WITH_CUTTER is true: test/Makefile.am: if WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif ... The followings are the whole of configure.ac and test/Makefile.am: configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE]) AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) AC_OUTPUT test/Makefile.am: if WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif INCLUDES = -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la AM_CFLAGS = $(CUTTER_CFLAGS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) === See also * xUnit: It's a library that supports a test style that uses assertXXX for verifying an actual value is an expected value. It also called testing framework. Cutter is one of xUnit testing framework. xUnit is implemented in many language: * SUnit (Smalltalk) * JUnit (Java) * Test::Unit (Ruby) * PyUnit (Pytnon) * ... * Extreme Programming (XP): It's a programming methodology to develop high-quality software. It's heavy on testing. cutter-testing-framework-1.1.7/gdkcutter-pixbuf/0000755000175000017500000000000011525707412020145 5ustar koukoucutter-testing-framework-1.1.7/gdkcutter-pixbuf/gdkcut-pixbuf-assertions-helper.h0000644000175000017500000000303311205747023026533 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GDKCUT_PIXBUF_ASSERTIONS_HELPER_H__ #define __GDKCUT_PIXBUF_ASSERTIONS_HELPER_H__ #include #include #include G_BEGIN_DECLS void gdkcut_pixbuf_assert_equal_helper (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_threshold); G_END_DECLS #endif /* __GDKCUT_PIXBUF_ASSERTIONS_HELPER_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gdkcutter-pixbuf/gdkcutter-pixbuf.h0000644000175000017500000000417711400051171023600 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GDKCUTTER_PIXBUF_H__ #define __GDKCUTTER_PIXBUF_H__ #include #include /** * SECTION: gdkcutter-pixbuf * @title: GdkCutter Pixbuf * @short_description: Cutter with gdk-pixbuf support. * @see_also: * Assertions with gdk-pixbuf support * * GdkCutter Pixbuf adds many useful features based on * gdk-pixbuf to Cutter. If you want to write tests for * image, it's good idea that you consider GdkCutter Pixbuf * to be used too. * * It's easy to use GdkCutter Pixbuf. You just include * <gdk-cutter-pixbuf.h> instead of <cutter.h> * or <gcutter.h> and use gdkcutter-pixbuf.pc instead * of cutter.pc or gcutter.pc: * * test-xxx.c: * |[ * -#include * +#include * ]| * * configure.ac: * |[ * -AC_CHECK_CUTTER * +AC_CHECK_GDKCUTTER_PIXBUF * ]| * * Makefile.am: * |[ * -XXX_CFLAGS = $(CUTTER_CFLAGS) * -XXX_LIBS = $(CUTTER_LIBS) * +XXX_CFLAGS = $(GDKCUTTER_PIXBUF_CFLAGS) * +XXX_LIBS = $(GDKCUTTER_PIXBUF_LIBS) * ]| */ /** * GDKCUTTER_PIXBUF_ENABLED * * Defined when GdkCutter Pixbuf is enabled. * * Since: 1.0.6 */ #define GDKCUTTER_PIXBUF_ENABLED 1 #endif /* __GDKCUTTER_PIXBUF_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gdkcutter-pixbuf/gdkcut-pixbuf.h0000644000175000017500000000375511205747023023101 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GDKCUT_PIXBUF_H__ #define __GDKCUT_PIXBUF_H__ #include G_BEGIN_DECLS /* TODO: 1.0.7: write document */ gboolean gdkcut_pixbuf_equal_property (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2); gboolean gdkcut_pixbuf_equal_content (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); GdkPixbuf *gdkcut_pixbuf_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); gchar *gdkcut_pixbuf_save_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold, const gchar *prefix, GError **error); G_END_DECLS #endif /* __GDKCUT_PIXBUF_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gdkcutter-pixbuf/gdkcut-pixbuf-assertions.h0000644000175000017500000000530611273747133025272 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GDKCUT_PIXBUF_ASSERTIONS_H__ #define __GDKCUT_PIXBUF_ASSERTIONS_H__ #include #include G_BEGIN_DECLS /** * SECTION: gdkcut-pixbuf-assertions * @title: Assertions with gdk-pixbuf support * @short_description: Checks that your program works as you * expect with gdk-pixbuf support. * */ /** * gdkcut_pixbuf_assert_equal: * @expected: an expected #GdkPixbuf. * @actual: an actual #GdkPixbuf. * @threshold: an threshold used for detecting pixel difference. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. If difference of each * corresponding pixel value is within threshold, @expected * and @actual are treated as equal image. * * If threshold is 3, pixel value of @expected at (1, 1) is * 127 and pixel value of @actual at (1, 1) is 131, @actual * doesn't equals to @expected. If pixel value of @actual at * (1, 1) is 130, @actual may equal to @expected. (All other * corresponding pixel values are needed to fill this * condition.) * * Since: 1.0.5 */ #define gdkcut_pixbuf_assert_equal(expected, actual, threshold, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gdkcut_pixbuf_assert_equal_helper(expected, actual, \ threshold, \ #expected, #actual, \ #threshold), \ __VA_ARGS__), \ gdkcut_pixbuf_assert_equal(expected, actual, threshold)); \ } while (0) G_END_DECLS #endif /* __GDKCUT_PIXBUF_ASSERTIONS_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gdkcutter-pixbuf/gdkcut-pixbuf.c0000644000175000017500000003207311205747023023067 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include "gdkcut-pixbuf.h" gboolean gdkcut_pixbuf_equal_property (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2) { if (pixbuf1 == pixbuf2) return TRUE; if (pixbuf1 == NULL || pixbuf2 == NULL) return FALSE; if (gdk_pixbuf_get_n_channels(pixbuf1) != gdk_pixbuf_get_n_channels(pixbuf2)) return FALSE; if (gdk_pixbuf_get_has_alpha(pixbuf1) != gdk_pixbuf_get_has_alpha(pixbuf2)) return FALSE; if (gdk_pixbuf_get_bits_per_sample(pixbuf1) != gdk_pixbuf_get_bits_per_sample(pixbuf2)) return FALSE; if (gdk_pixbuf_get_width(pixbuf1) != gdk_pixbuf_get_width(pixbuf2)) return FALSE; if (gdk_pixbuf_get_height(pixbuf1) != gdk_pixbuf_get_height(pixbuf2)) return FALSE; if (gdk_pixbuf_get_rowstride(pixbuf1) != gdk_pixbuf_get_rowstride(pixbuf2)) return FALSE; return TRUE; } static inline gboolean equal_channel (guchar channel1, guchar channel2, guint threshold) { guchar diff; if (channel1 == channel2) return TRUE; if (channel1 > channel2) diff = channel1 - channel2; else diff = channel2 - channel1; return diff <= threshold; } static gboolean pixels_equal (const guchar *pixels1, const guchar *pixels2, guint threshold, gint n_channels, gboolean has_alpha, gint bits_per_sample, gint width, gint height, gint row_stride) { gint x, y; gint n_row_pixels; n_row_pixels = width * n_channels; for (y = 0; y < height; y++) { const guchar *row1, *row2; row1 = pixels1 + y * row_stride; row2 = pixels2 + y * row_stride; for (x = 0; x < n_row_pixels; x += n_channels) { gint channel; for (channel = 0; channel < n_channels; channel++) { if (!equal_channel(row1[x + channel], row2[x + channel], threshold)) return FALSE; } } } return TRUE; } gboolean gdkcut_pixbuf_equal_content (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold) { if (pixbuf1 == pixbuf2) return TRUE; if (!gdkcut_pixbuf_equal_property(pixbuf1, pixbuf2)) return FALSE; return pixels_equal(gdk_pixbuf_get_pixels(pixbuf1), gdk_pixbuf_get_pixels(pixbuf2), threshold, gdk_pixbuf_get_n_channels(pixbuf1), gdk_pixbuf_get_has_alpha(pixbuf1), gdk_pixbuf_get_bits_per_sample(pixbuf1), gdk_pixbuf_get_width(pixbuf1), gdk_pixbuf_get_height(pixbuf1), gdk_pixbuf_get_rowstride(pixbuf1)); } static void draw_frame (GdkPixbuf *diff, gint sub_width, gint sub_height, guchar red, guchar green, guchar blue, guchar alpha) { guchar *pixels; gint n_channels, row_stride, width, height; gint x, y, i, channel; guchar pixel[4]; gint xes[3], yes[3]; pixel[0] = red; pixel[1] = green; pixel[2] = blue; pixel[3] = alpha; xes[0] = 0; xes[1] = sub_width + 1; xes[2] = sub_width * 2 + 2; yes[0] = 0; yes[1] = sub_height + 1; yes[2] = sub_height * 2 + 2; n_channels = gdk_pixbuf_get_n_channels(diff); row_stride = gdk_pixbuf_get_rowstride(diff); width = gdk_pixbuf_get_width(diff); height = gdk_pixbuf_get_height(diff); pixels = gdk_pixbuf_get_pixels(diff); for (y = 0; y < height; y++) { for (i = 0; i < sizeof(xes) / sizeof(*xes); i++) { guchar *target_pixel; target_pixel = pixels + xes[i] * n_channels + y * row_stride; for (channel = 0; channel < n_channels; channel++) { target_pixel[channel] = pixel[channel]; } } } for (x = 0; x < width; x++) { for (i = 0; i < sizeof(yes) / sizeof(*yes); i++) { guchar *target_pixel; target_pixel = pixels + x * n_channels + yes[i] * row_stride; for (channel = 0; channel < n_channels; channel++) { target_pixel[channel] = pixel[channel]; } } } } static void draw_pixbuf (GdkPixbuf *diff, const GdkPixbuf *source, gint x_offset, gint y_offset) { guchar *pixels, *source_pixels; gint n_channels, row_stride, width, height; gint source_n_channels, source_row_stride, source_width, source_height; gint x, y, channel; n_channels = gdk_pixbuf_get_n_channels(diff); row_stride = gdk_pixbuf_get_rowstride(diff); width = gdk_pixbuf_get_width(diff); height = gdk_pixbuf_get_height(diff); pixels = gdk_pixbuf_get_pixels(diff); source_n_channels = gdk_pixbuf_get_n_channels(source); source_row_stride = gdk_pixbuf_get_rowstride(source); source_width = gdk_pixbuf_get_width(source); source_height = gdk_pixbuf_get_height(source); source_pixels = gdk_pixbuf_get_pixels(source); for (y = 0; y < source_height; y++) { guchar *row, *source_row; row = pixels + (y + y_offset) * row_stride; source_row = source_pixels + y * source_row_stride; for (x = 0; x < source_width; x++) { guchar *target_pixel, *source_target_pixel; target_pixel = row + (x + x_offset) * n_channels; source_target_pixel = source_row + x * source_n_channels; for (channel = 0; channel < source_n_channels; channel++) { target_pixel[channel] = source_target_pixel[channel]; } for (; channel < n_channels; channel++) { target_pixel[channel] = 0xff; } } } } static void draw_diff_highlight (GdkPixbuf *diff, const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold, gint x_offset, gint y_offset) { guchar *pixels, *target_pixels1, *target_pixels2; guchar same_pixel[4], different_pixel[4]; gint n_channels, row_stride, width, height; gint target_n_channels, target_row_stride, target_width, target_height; gint x, y, channel; n_channels = gdk_pixbuf_get_n_channels(diff); row_stride = gdk_pixbuf_get_rowstride(diff); width = gdk_pixbuf_get_width(diff); height = gdk_pixbuf_get_height(diff); pixels = gdk_pixbuf_get_pixels(diff); target_n_channels = gdk_pixbuf_get_n_channels(pixbuf1); target_row_stride = gdk_pixbuf_get_rowstride(pixbuf1); target_width = gdk_pixbuf_get_width(pixbuf1); target_height = gdk_pixbuf_get_height(pixbuf1); target_pixels1 = gdk_pixbuf_get_pixels(pixbuf1); target_pixels2 = gdk_pixbuf_get_pixels(pixbuf2); same_pixel[0] = 0x00; same_pixel[1] = 0x00; same_pixel[2] = 0x00; same_pixel[3] = 0xff; different_pixel[0] = 0xff; different_pixel[1] = 0x00; different_pixel[2] = 0x00; different_pixel[3] = 0xff; for (y = 0; y < target_height; y++) { guchar *row, *target_row1, *target_row2; row = pixels + (y + y_offset) * row_stride; target_row1 = target_pixels1 + y * target_row_stride; target_row2 = target_pixels2 + y * target_row_stride; for (x = 0; x < target_width; x++) { gboolean different = FALSE; guchar *result_pixel; guchar *pixel, *target_pixel1, *target_pixel2; pixel = row + (x + x_offset) * n_channels; target_pixel1 = target_row1 + x * target_n_channels; target_pixel2 = target_row2 + x * target_n_channels; for (channel = 0; channel < target_n_channels; channel++) { guchar value1, value2; value1 = target_pixel1[channel]; value2 = target_pixel2[channel]; if (!equal_channel(value1, value2, threshold)) { different = TRUE; break; } } if (different) { result_pixel = different_pixel; } else { result_pixel = same_pixel; } for (channel = 0; channel < n_channels; channel++) { pixel[channel] = result_pixel[channel]; } } } } static void draw_diff_emphasis (GdkPixbuf *diff, const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold, gint x_offset, gint y_offset) { guchar *pixels, *target_pixels1, *target_pixels2; gint n_channels, row_stride, width, height; gint target_n_channels, target_row_stride, target_width, target_height; gint x, y, channel; n_channels = gdk_pixbuf_get_n_channels(diff); row_stride = gdk_pixbuf_get_rowstride(diff); width = gdk_pixbuf_get_width(diff); height = gdk_pixbuf_get_height(diff); pixels = gdk_pixbuf_get_pixels(diff); target_n_channels = gdk_pixbuf_get_n_channels(pixbuf1); target_row_stride = gdk_pixbuf_get_rowstride(pixbuf1); target_width = gdk_pixbuf_get_width(pixbuf1); target_height = gdk_pixbuf_get_height(pixbuf1); target_pixels1 = gdk_pixbuf_get_pixels(pixbuf1); target_pixels2 = gdk_pixbuf_get_pixels(pixbuf2); for (y = 0; y < target_height; y++) { guchar *row, *target_row1, *target_row2; row = pixels + (y + y_offset) * row_stride; target_row1 = target_pixels1 + y * target_row_stride; target_row2 = target_pixels2 + y * target_row_stride; for (x = 0; x < target_width; x++) { gboolean different = FALSE; guchar result_pixel[4]; guchar *pixel, *target_pixel1, *target_pixel2; pixel = row + (x + x_offset) * n_channels; target_pixel1 = target_row1 + x * target_n_channels; target_pixel2 = target_row2 + x * target_n_channels; for (channel = 0; channel < target_n_channels; channel++) { guchar value1, value2; value1 = target_pixel1[channel]; value2 = target_pixel2[channel]; if (equal_channel(value1, value2, threshold)) { result_pixel[channel] = value1 / 3; } else { different = TRUE; result_pixel[channel] = value1 * 3; } } if (different || target_n_channels < 4) result_pixel[3] = 0xff; for (channel = 0; channel < n_channels; channel++) { pixel[channel] = result_pixel[channel]; } } } } GdkPixbuf * gdkcut_pixbuf_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold) { GdkPixbuf *diff; gint n_channels, bits_per_sample, row_stride, width, height; if (!gdkcut_pixbuf_equal_property(pixbuf1, pixbuf2)) return NULL; if (gdkcut_pixbuf_equal_content(pixbuf1, pixbuf2, threshold)) return NULL; n_channels = gdk_pixbuf_get_n_channels(pixbuf1); bits_per_sample = gdk_pixbuf_get_bits_per_sample(pixbuf1); row_stride = gdk_pixbuf_get_rowstride(pixbuf1); width = gdk_pixbuf_get_width(pixbuf1); height = gdk_pixbuf_get_height(pixbuf1); diff = gdk_pixbuf_new(gdk_pixbuf_get_colorspace(pixbuf1), TRUE, bits_per_sample, width * 2 + 3, height * 2 + 3); gdk_pixbuf_fill(diff, 0xffffff00); draw_frame(diff, width, height, 0xff, 0xff, 0xff, 0xff); draw_pixbuf(diff, pixbuf1, 1, 1); draw_pixbuf(diff, pixbuf2, width + 2, 1); draw_diff_highlight(diff, pixbuf1, pixbuf2, threshold, 1, height + 2); draw_diff_emphasis(diff, pixbuf1, pixbuf2, threshold, width + 2, height + 2); return diff; } gchar * gdkcut_pixbuf_save_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold, const gchar *prefix, GError **error) { GdkPixbuf *diff; gchar *filename; gboolean success; diff = gdkcut_pixbuf_diff(pixbuf1, pixbuf2, threshold); if (!diff) return NULL; filename = g_strdup_printf("%s.png", prefix); success = gdk_pixbuf_save(diff, filename, "png", error, NULL); g_object_unref(diff); if (success) return filename; g_free(filename); return NULL; } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gdkcutter-pixbuf/Makefile.in0000644000175000017500000006040411525655542022224 0ustar koukou# 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@ 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@ subdir = gdkcutter-pixbuf DIST_COMMON = $(am__gdkcutter_pixbuf_include_HEADERS_DIST) \ $(am__pkginclude_HEADERS_DIST) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(gdkcutter_pixbuf_includedir)" \ "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgdkcutter_pixbuf_la_DEPENDENCIES = \ $(top_builddir)/cutter/libcutter.la $(am__DEPENDENCIES_1) am_libgdkcutter_pixbuf_la_OBJECTS = \ gdkcut-pixbuf-assertions-helper.lo gdkcut-pixbuf.lo libgdkcutter_pixbuf_la_OBJECTS = $(am_libgdkcutter_pixbuf_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libgdkcutter_pixbuf_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libgdkcutter_pixbuf_la_LDFLAGS) \ $(LDFLAGS) -o $@ @HAVE_GDK_PIXBUF_TRUE@am_libgdkcutter_pixbuf_la_rpath = -rpath \ @HAVE_GDK_PIXBUF_TRUE@ $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgdkcutter_pixbuf_la_SOURCES) DIST_SOURCES = $(libgdkcutter_pixbuf_la_SOURCES) am__gdkcutter_pixbuf_include_HEADERS_DIST = \ gdkcut-pixbuf-assertions.h gdkcut-pixbuf-assertions-helper.h \ gdkcut-pixbuf.h am__pkginclude_HEADERS_DIST = gdkcutter-pixbuf.h HEADERS = $(gdkcutter_pixbuf_include_HEADERS) $(pkginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(GDK_PIXBUF_CFLAGS) \ $(COVERAGE_CFLAGS) CLEANFILES = *.gcno *.gcda @HAVE_GDK_PIXBUF_TRUE@lib_LTLIBRARIES = libgdkcutter-pixbuf.la @HAVE_GDK_PIXBUF_TRUE@pkginclude_HEADERS = \ @HAVE_GDK_PIXBUF_TRUE@ gdkcutter-pixbuf.h @HAVE_GDK_PIXBUF_TRUE@gdkcutter_pixbuf_includedir = $(pkgincludedir)/gdkcutter-pixbuf @HAVE_GDK_PIXBUF_TRUE@gdkcutter_pixbuf_include_HEADERS = \ @HAVE_GDK_PIXBUF_TRUE@ $(gdkcutter_pixbuf_public_headers) gdkcutter_pixbuf_public_headers = \ gdkcut-pixbuf-assertions.h \ gdkcut-pixbuf-assertions-helper.h \ gdkcut-pixbuf.h libgdkcutter_pixbuf_la_SOURCES = \ $(gcutter_public_headers) \ gdkcut-pixbuf-assertions-helper.c \ gdkcut-pixbuf.c libgdkcutter_pixbuf_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ -no-undefined libgdkcutter_pixbuf_la_LIBADD = \ $(top_builddir)/cutter/libcutter.la \ $(GDK_PIXBUF_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gdkcutter-pixbuf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign gdkcutter-pixbuf/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgdkcutter-pixbuf.la: $(libgdkcutter_pixbuf_la_OBJECTS) $(libgdkcutter_pixbuf_la_DEPENDENCIES) $(AM_V_CCLD)$(libgdkcutter_pixbuf_la_LINK) $(am_libgdkcutter_pixbuf_la_rpath) $(libgdkcutter_pixbuf_la_OBJECTS) $(libgdkcutter_pixbuf_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkcut-pixbuf-assertions-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkcut-pixbuf.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-gdkcutter_pixbuf_includeHEADERS: $(gdkcutter_pixbuf_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(gdkcutter_pixbuf_includedir)" || $(MKDIR_P) "$(DESTDIR)$(gdkcutter_pixbuf_includedir)" @list='$(gdkcutter_pixbuf_include_HEADERS)'; test -n "$(gdkcutter_pixbuf_includedir)" || 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_HEADER) $$files '$(DESTDIR)$(gdkcutter_pixbuf_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(gdkcutter_pixbuf_includedir)" || exit $$?; \ done uninstall-gdkcutter_pixbuf_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(gdkcutter_pixbuf_include_HEADERS)'; test -n "$(gdkcutter_pixbuf_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(gdkcutter_pixbuf_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(gdkcutter_pixbuf_includedir)" && rm -f $$files install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(gdkcutter_pixbuf_includedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) 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-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-gdkcutter_pixbuf_includeHEADERS \ install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-gdkcutter_pixbuf_includeHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am \ install-gdkcutter_pixbuf_includeHEADERS install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-pkgincludeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-gdkcutter_pixbuf_includeHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS echo-public-headers: @for header in $(gdkcutter_pixbuf_include_HEADERS); do \ echo $(abs_srcdir)/$${header}; \ done # 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: cutter-testing-framework-1.1.7/gdkcutter-pixbuf/gdkcut-pixbuf-assertions-helper.c0000644000175000017500000001020211205747023026522 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gdkcut-pixbuf-assertions-helper.h" #include "gdkcut-pixbuf.h" void gdkcut_pixbuf_assert_equal_helper (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_threshold) { if (gdkcut_pixbuf_equal_content(expected, actual, threshold)) { cut_test_pass(); } else { GString *message; const gchar *fail_message; gchar *inspected_expected; gchar *inspected_actual; message = g_string_new(NULL); g_string_append_printf(message, "<%s == %s> (%s)\n", expression_expected, expression_actual, expression_threshold); inspected_expected = gcut_object_inspect(G_OBJECT(expected)); inspected_actual = gcut_object_inspect(G_OBJECT(actual)); g_string_append_printf(message, " expected: <%s>\n" " actual: <%s>\n" " threshold: <%u>", inspected_expected, inspected_actual, threshold); if (gdkcut_pixbuf_equal_property(expected, actual)) { const gchar *filename; guint line; gchar *diff_image_file_prefix; gchar *diff_image_file; GError *error = NULL; cut_test_context_get_last_backtrace(cut_get_current_test_context(), &filename, &line, NULL, NULL); diff_image_file_prefix = g_strdup_printf("%s-%u", filename, line); diff_image_file = gdkcut_pixbuf_save_diff(expected, actual, threshold, diff_image_file_prefix, &error); if (error) { gchar *inspected_error; inspected_error = gcut_error_inspect(error); cut_test_register_result(NOTIFICATION, inspected_error); g_free(inspected_error); } else { g_string_append_printf(message, "\n" "diff image: <%s>", diff_image_file); g_free(diff_image_file); } fail_message = cut_take_string(g_string_free(message, FALSE)); } else if (expected && actual) { fail_message = cut_append_diff(message->str, inspected_expected, inspected_actual); g_string_free(message, TRUE); } else { fail_message = cut_take_string(g_string_free(message, FALSE)); } cut_test_fail(fail_message); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gdkcutter-pixbuf/Makefile.am0000644000175000017500000000174411525655020022204 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(GDK_PIXBUF_CFLAGS) \ $(COVERAGE_CFLAGS) CLEANFILES = *.gcno *.gcda if HAVE_GDK_PIXBUF lib_LTLIBRARIES = libgdkcutter-pixbuf.la pkginclude_HEADERS = \ gdkcutter-pixbuf.h gdkcutter_pixbuf_includedir=$(pkgincludedir)/gdkcutter-pixbuf gdkcutter_pixbuf_include_HEADERS = \ $(gdkcutter_pixbuf_public_headers) endif gdkcutter_pixbuf_public_headers = \ gdkcut-pixbuf-assertions.h \ gdkcut-pixbuf-assertions-helper.h \ gdkcut-pixbuf.h libgdkcutter_pixbuf_la_SOURCES = \ $(gcutter_public_headers) \ gdkcut-pixbuf-assertions-helper.c \ gdkcut-pixbuf.c libgdkcutter_pixbuf_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ -no-undefined libgdkcutter_pixbuf_la_LIBADD = \ $(top_builddir)/cutter/libcutter.la \ $(GDK_PIXBUF_LIBS) echo-public-headers: @for header in $(gdkcutter_pixbuf_include_HEADERS); do \ echo $(abs_srcdir)/$${header}; \ done cutter-testing-framework-1.1.7/html/0000755000175000017500000000000011525707422015623 5ustar koukoucutter-testing-framework-1.1.7/html/readme.svg0000644000175000017500000016661111205747024017611 0ustar koukou image/svg+xml Info Jakub Steiner dialog info http://jimmac.musichall.cz Garrett LeSage cutter-testing-framework-1.1.7/html/reference.png0000644000175000017500000000410711205747024020266 0ustar koukouPNG  IHDR^RbKGD X pHYs^ vpAg#8nJIDATHWu9AA .D!"9ͱef4j*I%jVj1'ŐBr=p.yb֚{W{,ijE["vTy5ӖY9U3ߩbLOL0>cw>MVoQ7|!$}{h:FZ۸nsw7[doZV/uʉхu2k3 gw =ksYR괋ikN]{K)Ym}=T}+ڜڷ Ok^VMlckK Lo5eŕ7,t $kd\kJ*8w;~%Mypחj9"}69Y[z>2{vIv 1O,e"H Q%+A!Gfq8 L 5,fK%ȓ[E.4}-O; Ӂ?CSRː(<uǮ\>*n7ވ|f Iju7Wd2utBPV$vqȁnc ρ"/C ]{or X|"'d:IcTU$wLK^Ȉxd [Xyòs-;d9c!>/F(u˃ iD m .%ͶC/?_vq9'DCU63M3Փֵ %n+q,=SPrz𘰺f7zt,%Z)oS:81ƴCܠ n?&ݝ~=%]oyg^ޘܹBez8X~͹zBycŚcQծu1޳-,M;^0O:=ϻ~P'$!~(1{5lT}ڜҬ=.Ü5>04]ۓdجKb QcH1f>Ѳڼbsz~3XŴ/ K>i)SlþK`s[hy6Ţ5ܛ:auwd_Wo__֘k( "zTXtSoftwarex+//.NN,H/J6XS\IENDB`cutter-testing-framework-1.1.7/html/tutorial.svg0000644000175000017500000005122711205747024020213 0ustar koukou image/svg+xml Jakub Steiner http://jimmac.musichall.cz Preferences System preferences settings control panel tweaks system cutter-testing-framework-1.1.7/html/jp.png0000644000175000017500000000064411205747024016743 0ustar koukouPNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<6IDATxb+Df($SHŋSط#of h @^…Ç?}?9Bb$ի/(ZpK@LG`˗YT @,@ gV h,))* &@ H :sqߵ L @@1}. e@?B޽ @ ޽{H &l争=IENDB`cutter-testing-framework-1.1.7/html/tango-logo.png0000644000175000017500000001232511205747024020377 0ustar koukouPNG  IHDRx5/`sRGBbKGD pHYs  tIME %A*UIDATxyxU;Ig#+*6A@/#8 8(".(̈r@;*+("" (þ&!{BRU"E'! AF=OtW:UumNnV!}v:'D"UUF7C $!N`0{ $Ǔw_Q7gY )*eZt,=)6\N\Af IMbumݕ,­H ]c0Mq>8&:T7^S[v -#蛐< KJIxc7^AgDKpQ\pˈaF7I*`Ix6M)-2/Rʓji,oB*J&F(t,ɋs+7?PUC70Malވ¢ èжN΄VҮUɁ4*ii_0Rz,[8Ąza.LGrbڷaD a  KG 1ϊwwǭ΃=/.Ν 965%uszá!RR?9ㆅL!DDLK+P{ڔsXJUDnL0'P)`v\MnhYk%qL\mO&C1+':!q e/"LWP߯Ku> 10'r|TyXQXrSï-?ٽcYYysDEF("D]*tɶ/2'[< 1MW`@TT|>?~Pa4^_4XUU Ycph``r‹ktq/<6UUe0a~$/RJ4UEs`+pYO<:siG- &:c嚫.%6& V|5nT{_DŽзwW[~vj#|nX*9)>E2nSkV˔.1ٸT(8envǡTqYl2J ILgټm7m'3+80y|xz8l} 좐ԨA"o-O",n;Ǧ{Uz=ugL}8_Xu1ع`,\~Bp!?"Mg`)%0pۘkl7|mcńnՔLDQngrqNMUR4?|;R3i.)wyDZrtjr2t!Wt:hJy &:zQu K [QUU há2tRӳX&">n'8"pGDp]hӪ)i 6n;0M3$<)We 5Zq$Zjb=H^A!G2smKJLcu|?O!""tş0빅ڴSe8pr"&$+'̼@U-&dۇÏ?xqՀK7jjU2+׬c9C,)!A}RO5 9G/ C(de؎Oinkϡ|1LG%UFsliGcآz1DG)>VʱR{j2Ϻ~vN߭ʡ Rڶ_nD1dp_͘mޓrRBGf7Ҵ֔joVүO7ҳ>J%)%}s9IDܩue)}u%%e6NrpY?|so{bBQ0 I<2"ů=)z9%KK- u 37%- ئ]#CsZH'}V 3@J,ku1l\O~X;(*.'^"弦4o)%ȰXr]bs0 Wcj8?GRPP%!>7y\rQV (o !_4L+"!:Qn&9h1kڀVo--hg0*T(f8D&Y-|;qk>;NKo>k,rs l׼N2)% DG8A^~!6'1>+3;ܣU^_U]vlk+,2X(/J9PSㅜZ0MG fڷsJjz{'*iƌoٴ89)P*'b*F(ƔfgÇ^aU1X.i.k[PU︑湗cIJ:QU5_odϻ-IeZ$&qklhb&۵8I( c];TaAkL"[;RswVAI^yiU:>她S R2!@4oR{&`!}?ױDr彈Rֱ]+6g^x ?bİ<>sR% ;wraANg`Cs NZp놵'xE+`^ǵK̲қ3kwR9&Z=hۺYﳟ[aB8Qrw3牎r3~ fo74ȯρAIu%s9æ-8p("HGSUL#?UUlčjzn{* Ӕoۜ |fpt07\Eq\ [ 058Qt%2㑉!tIr=o%X_CU֬xѺáѼiC7mXydd]lܼ@:;v}J "n ƍ R7LQ7\i;Ȍ˚EAY iz̓ɚ#d{s_WfW~* lS{_*nƴɣzu?fo7hg8RE P~. [(AڑlF{c4jeer5wr:B'ų9R=yZyg4 /9aCj+66M8F *%˾oP/6k]JJH G2sX~ .J+x<>|~?T\.gQ.瞚L^]Ivn׍~ڧW'"< f{}(>VJbB,]:aڔ1=Rק̵ Sœ_sYR:`)3Nj*~3zUٽ0KF?6LuӁIrbcG >i8Zm^F/^I{}~LD;a~>wB U02hwq4cNyIL\WJ>?_]iDEFEJj1xx+jn!%ӲEc0&<'ө}s?dTRӳ>?#09b&Yy;VqN"KBn 7ޅ[ScIZ"Tw}OVp="-\=EQ ?F玁EB~r Htp^,.q|5W-ˉ|^hV [C+NU B!߰UIdRZ7}soS``w_~m2mڸQltE%+X)^ƮIiVDh"4;~β<7lǢ pW\8/(<9nr-N޹3,Jx|Qo<͛48̦i2𲞶V[YY|>b})7UT: x V_WUx}r keK6|.;ׇFnx| z7zс;6ڞrN?넥$%q^&xn6v: image/svg+xml System - Installer jakub Steiner http://jimmac.musichall.cz cutter-testing-framework-1.1.7/html/heading-mark.png0000644000175000017500000000344711205747024020665 0ustar koukouPNG  IHDR&&=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͖]lWwdz6I\ uqSTx)<Bp(jE}DPAT[)$v4vclޯVlIFB юY|i~`G9ܓ`fwp/5kGQ#L&^K珍Kb?j1{͵S/t2{/ڦ端:oԷkto_YYNYϦZ_:G]o.SN2p*QCy&gKOԻ~sv 2鼗.蜓sv5maJf:Y(l!qtw.u'}׊ե5g<ط@¡;ٶf%wj{h'⺳e*e;uvfE=m%u>s 0BUYI"H0lᮤ6K|m=#1AxmJEFC|-Y b`A{*LR\ڔJDrJgXj KٱSƎsT@>S(ȶnNsHßf<Miڈcò$)7NϓIU'y &y܎H41]b/nZ/,]Mn9EP`׷>366ˠhe%>Kk7ӅB͢l?w'T6r]u<8/eg`zMU[cڇs ^ awuľ7;(ڭ)ah\7yn&_.+fEPMaP6zpJIX<)(`倰}2<l)k.!;M^㚛rn#WdM31 ܚʷ~6ҝ%k[k¢pR>s.>hC$Ea/ I==q/mQ1ԝ w> Q}MQ5`8ߔU1*~vm2 M-gؽ5x+jժV_)<@P gNx2 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Text Editor cutter-testing-framework-1.1.7/html/readme.png0000644000175000017500000000150511205747024017564 0ustar koukouPNG  IHDRVΎWsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8OQLg-Q,$Fbķ.\6$PI1.B]! M QB 1~DV-}?`t|x;_~~+Jo5G6uuo O]y*k(F 釉Pq[PWws:׺ER]ê!#+l>NN? Ydmt} q;P^&#/ ޽@gUU!EAUզrֶs1[E-#,ˡ)RHs!29EMVӲ޾Fb,{dUc+4~|}SQWS? >$܇ fDrX25{g[|zEVh 3N DC_OLAGOP\M0qNĥ3ojبe޲|FjR*qi8%AR^DXm<A$Bl>Oȭ}SC LUÏ\'(0' aB$v,58?22   !֚`0~6:/IENDB`cutter-testing-framework-1.1.7/html/heading-mark.svg0000644000175000017500000003336711205747024020704 0ustar koukou image/svg+xml Jakub Steiner http://jimmac.musichall.cz cutter-testing-framework-1.1.7/html/notify-on-gnome.png0000644000175000017500000010600711524002153021346 0ustar koukouPNG  IHDR. sRGBbKGD pHYs+tIME(+EWutEXtCommentCreated with GIMPW IDATxw|\lV{q1tp @BIH  I04JPc f+ݖ%Ymծw3.Ν;3s~\HIJR$%)IIJRHDOIJR:!)IIJR`p<,>g8$%)IIJSA3) Oo씤$%)IIJZ\O 03X$%)IIJъI=c P MfS$%Ǻ{ #6,#m Vlz2,A FEJR$V ,G81b@?ԫ|8iY4Hsե%%}9Ul7@P& XEr (IIJRs/quXp있 A/hD.otwx3fs '?5k?k#8|Fفp`;5b`YmJ~zְgq_"ǣw6D}8ic=<hP} 0˖N` HIj9EKn^^҈I&wߝ;X&Ed"6yCغu'OلF校d  ~gbP>E݃k\ }?z`uhv*PUo`Hi gM ;_7IkjYvż1-fpA&<d-LM7Ê>N^0sNA^4o꠼}er͹S%&:-˄spHa}K0ٰ 멮 xN dƍp8ycDZ0ׄo#bdI&^Sν3#- 7ƅ˾ֲ\ǒ%/f:=`:?!_վK [I/*"TZvX`麟S&ȅeY_ɠlԿ'RʯVsKYDvFz@ (;XI)2Ç gY%,GSТ>`a !r>PU:t({LٜKx3gL.n=۸{g9ggM=nqqE' 1 g}NW^MsScjUN1%uW$={Y=X.%LO<n)vРo'=ݑLݬ0jn=W /Rh󫼹sT[׊((*EShT`=߰\.'EEL2aÆbhq"~ff#;=qgͦ} < Nf@hwu- h>pQz%ًgрּc}CҾڭB*K=}*n`7QU]Gkq(/_C&"ʁlݶq‚md = $aV- N$ع;3aĤ'/>n477F}e6q1mށm[_ W~A:T4]B0է b_4uvvƥP(Ĥ);X`oj`E3 M[Z,W5唟=X2x(wJ?c 4LdّТt2˟[5\zxvWS> 'ЮPD LeTI&eau~jZL?kdL6ﰟݱc'˾~>t {u9TYAsScTuO>:^|%rxc\ޥkܼ|.7Mv  G@ &$:<&%)\iS9twW|F??YjU`ar]m9GA͝\2t#G?,kc&]! qw-,˞j->7M'A` C\{~|}4?Lc }4=;)#LǦpr(Ƥ HhQѯ >Nd[+V5%[QUUE^L~^>0zhPZZمxjV* '305{DO&7u9n D_QHGo~Q&T]]L[84P9FNi/QD:c2v~2M1V'ݒ[Wqo YJ~?xy#v_"Ϯ ,^z:*KN?_}Yjz/SQIe%j(v"K),=8fKϱlÇ &1g^ikݤ$7]OџJnf&Ιxl7'@E~?p2w_qG+5k+gÆ <#.9sd*楗%v$'5y-saba߸6n~t3UU[u@iI)^Ø3s|bA3rus愩l™szg6n$tJhS0L60 S~fal>k2bE*cZXkRHƢ쎨2}Qf iYVx.7,Y֭l+QYo?W4MuSb_J'":eYDSA?Z(O)W G P45Jo,MŮE;!yZdX6گ/( >sW_wN>7g# ;+oDy̥u6HQQirl5“ol%Ҙ2EFnmMWĮ_5uFSkRlKg040i)]Nj:w꿳sQ3r7ncǎ{СCTW$ӏD\.ƍK/ 'L/׶e9!H~Z}vmmsNV|<uݼQ433źعsǍ?~+fϚŻ-λ_?s=^Y3fLl2yb0L.{= 2Cp?ں27}F͸qܴegm;s̟0`9 =8<f eff)`OϺ6kcK/D 2hm PQ5Ul0hW['cQf)؈E(= ,J)ƚPB2ԫP'?m "Y![imadffb&>0J ,Hm .ŦT=vLGˊPeΝ'ذ5@ʝ@k$Ӿs|`P>Psg΄}~4'LU- Ziv-w}!I糚ldo;938ϽZEkk .밞{_""99YdEgWDhf˲xsW3 N>_uw",aI0d,-xpn4G"[B73Oz**ӧ&w@.N @ubmp{j.I8ǃ8(4 **'0mU@Ͼh_h`XzCxt"R–,2{8kIKKj9G*+c Ob wٟ999|}2VXk]^{-7p=SNMmf~;.'$1h ?Gʸqcٲe > Wg͞CS B[{$//ohh0 F3~xA(}T>u6y`]YRl im "駶aehJ1 Pj!t흌\wiHs.y'L>=Uqܐl6Wڃt@vM~~(X봵mm>Y21Q`1{Ɨӧ>oI))wо:o Aw=LQQB[!uw?g&P2qdv| ^"3#ߋCV; 2 4P]7mD MUbP{[d{H 5B C\wx%\x(.M;0t0Q#W^mxq_">#nb=ޓB_KK >/W PB fAC3#"*3l4Տ=-M]eȲ߯?cΦ(Ŭ&͝ 9l¤IwH:]Q+.TbhWEy dT:}S.FMϝڵkط_2tvv[XxTݤS.f[ WΤ@)^p?ozbY8 ,H+ڰߤp=δ^iCd.e+(2=V#- ,\ٻu g~e*#rؓ+X{,9 QptmNv9YK?3vXƎϲ^XSI–Spd%2<nBe399T L6o";PH`PADTU%k:~C78a{{Mɦe!#JјwE?nV}$jkk _b 2g2M͗yw{<2~86oGqmg1lP6m?#7c ?Oor9ә?o'pQ_rseOǟx?HF3fr9rNNm`H<BDE~9&fòm]Fw{@G2V0 AlWHPڇ!qS^Utbk<1HWLrt\#K&<" (:SF1Zظofy*O?4V+yd5guylۀhat5vV1eD܃&1QT:}hYڸа A !Zi|肇a?Y_V<J ;UĞϊ2#cI.gꏒI[?6Z݃XWҦdzd$p3NF g."BABA׃% )i>/nQd,Ιoy#CrmˣOo&@(SUM<6i14mrYg#9s0u;Eޅ`a VԢDGjKk;{n۾ŋ%ZIʋ/g~Φ isS99_sϸ䒋4 0XC_0l06lXOsS#O=/e/#cBZ3n?cTWqDQ~T{T>Z1  0tvfȢ%\|X>S|[ѩ{Μi3XݿOWYoGQX`Zk>f[D3 錡Ze9reA*~P2 \6_\v٥8PFCC=@q3aq8Z:42 , ^[w{$h'BZz>Ëv+? :IK&Z2,\@. prRo##2Rdw6mF_>ɼ$8 DZ-o˲ ]W2xnSq;ܲ[o3 i9S&L"RFQu>ZƦF aFIA3 []Vwځ 40aPvT=m1Opwg|:c"zHzDZM ,]b?#K2(b3bg~:{ϱ7^y}ƍ{O @ oƍc-,Xs-7̽;vvZ| òe˸ xV:JZKzz:wyeqi{?~u{{;'M斛DGGwu7~}PHUXf ô7bׁz9ӎCXVTLc *;ٻ{1ir#Gen%y{W_ И7|Ok=%eU&uҙy@bڨ|>Y矶%pQv'`rIKX0g>{,8eFIsg83q3!-Ata)V0 IDAT>d1+J}:LX }.pc#mCy :d1xS t@_\E# EGΝҁ'W^}""\{UU0`@\aqidx%[$(D +#a| 3j.S&No:죴iez-o<KS=\|Blt;dgzu)\ltETM8?#2~-0%YF$FkkkY{׸}Vٵkowugdd߾dee1o^L8^tR`Eʫ\#߲,^}5>2?'MO?al߾ß̞M[[;=۷W;v(*^O?A^dYf<ϧ]VVO?O=̝7\76?箻M|~½̛-iTظK˯HgJn&kip"Z?eYt@kNAGgBd(tɖ8dgx|]{ג5DAGo͘3zny2$C>|x;zư/?9}YqOqؓ=AsΙ|`0ĺ&&UUUrW[$Z7}/N Ӎt#ˮN:2~ YE%a/<[sRdSO&uI# ( )ʦYMsɴ1utrib]{SLtM{WDQD8u-7s-7sۭR\3+^@UU'a͚5>t_\/磏>N8޽{Of'={x|G3ﺋy?e_:ӟٻgOgӓ< <>;W}wy=h=c2G_\v࣯lɅ~!ʦ%j8*+کh->e<̀Q..X֒,~ O9y20Û܂e0kdwյYCGy4(k%ne0{QYNtʐZC6z2M(؛ 3_;SÂQ^,*T 59խ_o߸Ǘ'ᬉmØNyaé:DqqI2bkUՇ>lxBw(ð U{aa(,=)3x<>]u_=?8oI|}Xn,=yH|!۪Fb:ξ~aZݨVC-J 0Pt6}@{-_C˗s,ɀ喛駟QUUo'?a(?۸t#2ϱ=MdeeqH7\7lO[nz Ip8F'hieAA]7u= Ll7O~#7XFI'Ago]Ypdxdffr%}J:fr.bsScԩyW{W3n~iIAص{˟938aB @7 TE! Qm%𦽑qqrxxp]8_NI4 EQ&koh`@v6x</ndA~Cu:;;ikWwfWSgg@Nt7i[w1l-NVf&^222z r:s 0HO}f+%_;7.ܜ$;2Sk̿;jA礁2 r`9[oamqv8a"&LNʢt@SBiUO (Q>ctr$ YS $iF'ia2B(+c nN{{>+)6z*Z}:`10 222$+++5R_)b")֢={3y҄5$0 x0pjȵ/(MDQE9Ap\\XFR GEڒ$!JR?ƎA3J0"   `Y8Nۍ岏KQ)I1/G(Q8=GGV/P^75hk,#roJIJRF_7}T$%)IIJR@ٛܘ)IIJRrJտ6LZ`%( 11I@SA5;Z/(k[BdGI$7+.3 E_(X`W ZV PY1J,F ݬ^n =0YѮ-@iVjv$%)ɖ?;׿3g.4w,fb1oљ1`6$! DA1I;1%1mYU|ol*:@0D}C3Cl۰'"?먩`PrWk(܊8rs'h -t82]=p ҎfhQ?tPm=KKQ5*jCCfbQo'';#{;:}61clxw6mf)dgeֶZ%Ex﫨4L$IbPi!ח[uoZ} UIxw`ۆ,4׍OsQXO2"MRp3p`1-mښHǒ1MܮSz[hi@Dr9S1*A|޸Kc̠sx9p珱?X6XBX0 ՋEeA&^M`| {;nQS/rESYیp )470gLC \Е="ע+& bӞjdWRAC P[S9*oEUSQYqUA USNހ($Jfn80$t'lyD4O4߮ڛ8,^t%,I w Sf /nYWHѨf\tH8XOv"ӄ0MsK`~Nb+ei";(n#PuC$*e7N˲A21y Oc_eN/UͰt3e&+#! ~H&__i׾r:ۚ<4^4%0 YQ_SQClVFNV&,Ǖ{AN=o-c^C0AsK{4!2g*j( ضO?G}."-gHt 4ᴂLCAHzD)ߝJ_nغm.9toJs90޸A#Hs;<.ii鈘*EFK´b8@V6~OH|D (IkjL^}`˜!T>x^`moGny=;ôxޗ3k2OolM5 M7]/2 +8)9_VBSur~srq>Rڝ6d`>5M&0(+zIͭwᥲC2Y23@Y,cС{[V_!,= @euMuAWgޘ^z2mƖ56WAJ q#3kƚ Ͻ[Ҏh+گc 7z}͞~]+;X Y;X8S9VT裡 /z'79TSA2+Oc/obA-tοhrɓx͔*>N 60x$9cFQº~j#?7vZ'Λºͻ1CEMM Of\~U '3}xlA%)"'M DL>(]>MaB Za[̟11hygt͋Ђxe& ˶Lp۵e vFb iI(PU5*"\ټ^ed[~7ᠺGn^ MT-ӋTP:5yoAaN'txJV` Hs[,^*:e!  BI4%CB T@N$IXAljiuXCq9dT@MDIA7Y.Y0M 2:\E<.ô(lv_뺦dx\=W0Lwha")]4tauKRU܎e-ô߯iv_,v~4$1/i&7S!}iŎ4˲):qɈt!><=B}jTCmGJ-,g֎YMS.VjuBPY,+\kʊ oo|1>YF%ntLKG}c Pk+H&*~Ws2 䖇W2~^e- )@VO7TiLU_^ބG*^Z}aY^nH.BNHË$ yEEY40e )Kx\2YEADu3ܨAPՑ%9wXI(E@ 0 A@Tb$(JeBnGI+ucfQrJ@&Zעh)8TMEDlZ6dzwLD,lhZeU7ڮa=^4ÿ3"$Ϯ=6`B!hT=np:ϊ!$(NܐV"c>Lɱk7- UQp:]Q{Y,;!\NU&뿬H{5%{*<&DO>R2p}}h,~ZGNdv,.X4&5$2^gqzu+7PS[(iDpDe!aab%~`{cӊn[] b\$I2, ӢݯMI SaV ,i fuEEDdIDQp4UGW lUET픑%22BR?|z`$E7QJ [n"bDB%80L l͈4HKsb&(JCKi[FF,[$9L lCDR./"g%Y# Gw:  B&¡n_Oi(p n"(mDs,;q\s-~L6ꨤrll.8$CB@i J2 JJ:- K"ڦ˷ӎXtb8rK41,4'$m9r\i% p[aQ:%$ kpJoUdxm(w/^E5L .Qz(1EьM7p:lJe e,˲æd"~'S1,nd+4gSz|qcϺ<5b?iZ*pāe$a$v}^iQ[[Gss3F%=m˫1ߢ:)?e@ ŕ'g>IhQUï* Q?d}NL; ֢,8$ôv)bxqo)Q J{tHt,KL|ma8eюad!ޒ9"B0 ]{{cgA@31 ,x\Ǯе'VmkI}| vUHiC崭6ôI ] Զi@ 3[pbeKح5DS4N9YӲtImDIs:LF C4]7CvVc2\YMzPn,ecmWRUUvΰ#?j; !(JhᤁrӇ~,[ NI5QTV`.2q9?Y1cba0Gt,´f7L\NtS `b=vqIRu,i#L eٖW"y_0~6$tevH>#~}A!15 "(XQk Q%%bƒ 4DQr2<@f )0dNt=!bpˊ,a{/+Z,c ĵ#TEB~aw\0,Fo̎P1o]‡T`f&m0\dhA!~EU}{;8d'i(IaD@,\F!L-L>qF 2/E13L׎Ib 0 o.d}ִ' P][O@/Kt BMBhq&h G%2ӜVrj-(F-„͔9cZs ?[|eE1ޮ}.,]iυ][=7a2-m—IiZdffRVYɊwq_Պ!/wo|bāq}j5[֬DhؿaږMFE^Mx" $E6:e C JDjYi x\hY&gf6$)+V8aG\ Uo2uY1g.,/ na˱`hb-oIdHJw-z]\PzY}Z4{)#; HƒaU>$H," ?;R!#'iRO%E߇b^IOo%nfY6=FSkB&1(XWEUTe [k2h YdefVxrI0jV]x%Iӯ`AԲ 6_(lei( IDAT%IBLx"/~9E{Dg@Q4(hIkg(юF,dI@pKJub²Q@ p)X%S4)voi!;E9Kc--RU3{{%Im>׶&Ol}a+8k|BTi E@H/q,+y?C>IӴ(j2 {{,t9Hɱ/.E !Ɏ~׎g.;>-Y_xDPτI%T`H`}e SXX@aaAB  =2/N # l4q9o$Q:(Ptݎ0X, ۩3do($E}iq9֒}^08<蕜Xp I*?|ݩ,v(@HhEdYB7hX)L#f9Tn&ȥ+PJV"`dY~YmûuT#޸0j47QTkX"/kHRሯfMM5D(>0DQ3w"oh "?;wޥNG⯯(K8g6N'~0Me~uԼV222Peo* L#^u233E AE%Yu$C;}+3RRR0+Wej4/\ϒ%_ZH]EXe:N. kR e13D):º|6%<{z&s׈l*d25RR.GTV*P*:)d26|231M c= &Rfu"FrUc֡NܼExŒͱ˽+xQ*Z@.)GYCKBkf9dƚGLVo 9-(~!zI}ժC9x02 /аA]҉];f eQW2W'U(4j%dcQbLr%f诨DRRdMRGPȈkL&cݬ_rg_~@ֲX~iu۾}{ [2I/I G$''zjΟ]KR1m4vP*̙3Yb.\(V=Ӈ۳pBz=uؑ'|RRRطo;vTʏCwq<ǝxiӦ ܺu;wr|+I{r?aaa[2FQO?ę3gVj}5jX'{vS=ٹcz:wĐܥ4-ڑ+P2|=p­U#b D^ׯ_uQz>>lܸUf̘Fä́ۈ€Z0|||3f {fС[ŪUPT87T^]vi&U6lb%nO3gҡC.]ĪUw]veĈ|<3y>F{ {شio 6dܸq|嗕7W~]ʎ;ٳg.\أ$DǹuF)[=nQ03H* 'd*<>3Cf̵lժ!Yf+PJ7nyf&L͛y缘}YڴihfӦMHqrHΝQ*8q_~%1:t_~đ#Gؾ}{+|-˗/seիǴi #b?~<;v`ժU,_!CЯ_?8}@@?NXX1c1z<8cƌ|qFZli7rHFŰa(V:֬YCN,^xƌÐ!Cse{ɓ.^Ȑ!C+V igΝ;Ν;| 2Ν;[ݻgqrիdޫ^:Vl63fnݺUfe#r9˖-#""={tRncI \wy-[raFkFLL ۷+7ԩgϞ_d>|&M0|ۤIuǏgѰaCK* ___ !t%jժU޽&MpImfoooBCCywo Ċc=fqg!11ѲW^|'lٲX֭AAAf^Bn֬Y( :صk .ի|*wG^~SԩSK AN8Ux:IAd]RHѝ3DBRJܼy3qqqL0.]ЬY35k /@zz:f~(u4|pxIMMX4+WMh1b/eŋ9s < ӧOΝ;T*d2III\t/s F/bqٓpqq --oȸё%NoB_deҥKڵ+M6%99=zXуݻ;84nܘ `ܹ<̝;Ç}/_$I,^}Y8v{tͲ_ղm6JU8Ο?O:t(6ll6̙3-Rg8g4`!Ay8ReTqqBSKcr$cݟ [*eWy!:JaÆ4k֌Ν;3h 44VZ/ٳVt7F`2oLFӦMٿ?رzZ-aaa[\l(r\j:ϱ}>K`r>|:uT*=z4ڵ#((1c0{RLJ7oAj裏puuʕ+[Co2(k:v?̯Jbb"uaʔ)[ܾ}VY~=˖-c֬YPNj$ٗckd 0K?a]N08#p@$I*u~'NO>zΞ=ڵky7y8p`c~.I:wwwAr9o 3)SgRSSi۶-o6YfNW$$$`2SF ˋ㩧#::iӦQjU>LHH+VG-uٔJͼ_Dpp0ݻw/HtڕmZʿ{nˏ?hky}}}ر#Ǐgʔ)>|[>$r20p@BBBpwwZjݻ3gh)U}sAU)U%[BUpHTTqs©EM!%z=%u8L4?''|]FY+.%zmF# 4˪Ub t9/Ve0`AAAܾ};3 g֬YDFFsѤI7og} #G,V(ϟ?OFYͱ޽{pM XbZ#GZ\9gr>^{>KFFFn1 B2|p=떁B5j԰|H^iڴ4 )))yxs,޽{w|||xgY&5j矧}.`p7?qpHtuRn.GM^*Jݻ`Ŋ4lFC*Uѣ/}6kצCd2ڴi_]144z1~xr9j3x`Du{]|Hy7,ڵkƍ-?~<˗/ s=tɆ $o-ZŠAM*U,{_}Y>rz*M6 Zټy3~~~{'`ܸqxyyP(W~i/O?DPPjs+q%ysҕvDoE؟&.gnHPE7C2YͣK.ۗ}9g6l`{L0[b6gM-޼ytؑ?":"3LvZfΜɓIMMG`͚52..-[0h 9BJJ jJ^,`odժU :VZ{nc97}˗/VZ,]": 6jvR+,,ucg5kZFΘ13f9788`L0!ϴ`43g_~% ,`y*yyg Y #( 9%ytP))e -Uair,Ւvf"=,AH]f' RӒ)]`%rWc 7.0\5a7acƜ P.H~M`0Go2)IlmNNNxyy^'<_~9d6Z=v*UPN]d2O)oѠ~N9_{vp}ԪU@f3G>ķSNw3:!!{Z@<<<`/YhH&K]w ۛ4gҤ tm>^yy,/][ Lg26t8N7єɶ߷N`` JWxG|J$Y WHc?]̖cRz ڴnVsٲuSϐ-F;3;U.V*Ѵں TF'$ҹkCZ4I꾨T $d6N(NFٛL\C tHd2rx#8K){z׮'?~ªo;kZAq\))|2q$~9}B7yG,9 Ba6mt|_$:r9:'g2>ȏ>d8]Pg X!c2Me<ݎݚX'~tڌ[18|^O7Pi+G]򑵒LB rL(ቮhҤ)\~(˩hhִ^^dddvݚbŗ1lp7nBZ- *Ν;ٱc(i9k%1}1kɹj fIfUN'UP(%+B)G.~ ccQԪG5П7_0LZC&lo1q6ۏ'݈G7EsT~~~M7a\|k7uºi[_F8u,NNBuvvɳfkoً5j?sR$"n_7ҼY]ѱn'oB*˻F͑CǸq-ӷ!N IDATsOA\I Mk]/ժU6gyύ/%NxX+P 1犝j6: ?Sߕ]۩UÇ=ZYէM4^z.T&3dx׌>ƈ# jоc6qқ6 {iOg؆Ei^׍`ۓh~aM}5k$̅2k$%?(| %=޲U+NS=Թ=χf:jUN=wٽʹ̘>EңX mڴ-??_|c"_A|E)EY2 I|ڵU222ؽ{7[wv.PZDN)[ +CQ2 ͘RΥLMҪE-NȝTqw&߳D3;z?Jz5*%NN*I]@f);"IǏ+t)&1kL~w +4Apw@Oڔ|l6s6%TZOv.qwwgOe׼1f̜NNm9|X/6Ϲלbcbw )w-qww+m4M~'''}^5Ӹqc"##Q([ǏS^=,=<Æ?BBLm81*'*'Tg޼ydhͯ6Kqu_wuŖJ/t0ӡh2ף6=qߕ)i@-qj &}--]KHh V BS޹);νĴ!%%kQ֒X;L3FtFJ? c{e vD>,V^9FzzGfܙM~Y bK#XK~M&:"z;’O鉌dٲ/yY4zG[=/+V.YF_u?Zayu&Ūno~rnܼmZкmK~^k&))WӥT^=[@=ŽV9|8/_޽=6``3k7WcޙѣGZ{Jʹs>NtI<>>6i?wsyz<ٕC~Ԯ?7c-#pRȆ??6۰e69z熿P& J'V[nOx^|0s0st:vd0JZϣGo[D ŽV/L&ڵkV $I^zt m,w#؊C@`+ kbI@>/u@\\ ܺG?Daf$]bb/|֏b aCK{؏C.8:Ab A U%5eh,lRr:ѷr-_~mRu+C71Ɍ]RR2HLO,С#m۴e_w!7oN#&V5d豿iӦߪգ\qbjV~/ٳgݧeR W*z^8:vĦ [غm%{xzyWT>$&޳SJeU|QIzJR>>޼=i :&** 77WO{^NJj֗oqL&j֬iÚ5kb2HHSawszͪᄉdos6EV,.&hZ~_ɜ9s=zrrZc#ug0ZvAYgB|x{{[e#>K!8Gݔ4үHݞYkF@N^铬^͇u܅|n/~ӯ1sz,돲~ђ&  gu uSRQ1&R7H@bbiidMeVi`[oSn]ty~ϫ|KzE`` 3fb2?B;fj //Of8tww7y %Iąh~XhѼ%/X' /d@޲U%Kiެ9 6d`.\@lll9KF`Ga[h[ݭ? SS|8w>UVjժ̝3~#55ͮg`x'= zz1n+ 9f/"ڦ n݊FQ={dwZSEȚ&"zq#$$'c>{p@_qT$=h,{-Gz0lAnOb2"66ͿĈhբV 3loJ L:383ړF2f$)-tTwrG;%&=IoM&55_֯E٤۷oe̹ԬQQ7Y|֬]ݧRUr`7l޲?~All,O?ӏ c|0c:f[ۦM&xW΍70u KY+fsyHDl ONiذ!~ߖ :4ͼ4f /dmd2}1cG[ڼ$ϢtZ>t ulqU+N$##vWIJoL}g2-$t!r9;v{Y|iWm^fRjU""#߱sg_Z 2y1gt:{C1{μy+Yl&99w`ͨ(&5dKՋ[]hب!e(P+hy9 k9hP:|ܸ{I@zr,6Ju 8r;.L5G)`2 7 Dh"5CKRU"<==9}#FfE֭߯ZE6m,.;穧1sPSvhԖ391ʁ,-V$qwإK ڵk˭,7w_߾?}zYy`N$00ʓѷmˮۗz@ d@RvH7g_jv:myY 9ZC&I`L6!"k=w'4X><ݯ-qIj1TxӵN7<)Gވ83L3MejE۸wKd"{hT* ^ŋm\zEDe6]"K?ͥGݬYIwݛ-|Ez@k (eHF3ZMFB))ezF4Ό"]hrD,ujj0L o/7|qvVXFv>O)ed$L&)҈ONCkVdqI2ZN9SG$Ihu:lg!m^Y0\Fk>s g;I0U $IBӱzjt:,hO\uW1e1$np")95d;׳M7ՖOo֘mM3sB7'5^݊ZYtȚ_{;t!t>{sIA)ps \WјV_UP500ڋQ{\nҍ.HBJ)\/3F~qf4lAdh;qEKOLb qɩK@k|`"9z(9BзOJ.5SvE:8{tDT9x{{s(4TԱE}U:5EBťgٱ}{DբjitY7ms'91|fMU荻S8OtuNb:3H"3f{q?߬\3$%}]oΧKo}+Kx{yLbb"=*N222J]_eGE!C>=fΞÙat҅>_J||'O*Т,AilW;$I"ZRZ@R*K ̙&L#z1ŪÑܫ!{zjYʲoxyy1W޽;} ڴ!)):~Ǎ;JDe{q\"긒SVu^uWVYk`39I)&lbROI^Z:C M7fǮ]6wMv <Æ_ӓ#F0giڢ%bASjUvNNpwwŋ̯m6>bR~}֮[W_|a t쌗'#_|!>Kvj|t]쌷̘3hۡfIU[>_\Nv4x0/$3f$>>7o2w޼BG^ c̙ǂ XȎV<323gï%|µkod2l-l8sAmRuy}p`#g>yB(Es  ,0 B:YQ#b!.&O/F/jD~~G(/wD N6mضe 'r_H%r^{lc_WbZQP^9uo}u;8jY&b;7͞r jGO\\zَs!@zz:.\wϞ6{c='993gok\?܂Ls-"h/򻗘W(zqh۶̟7rឝJR?9ԫWZja6+uc6mZű0͖89uul3S\ +=.\u~yz>f8~p# |R<3h㕱cynpV~udE7f%eX`Amۘᇖh巭[IK+BZ8r u'==]DSz167TJ*ࢲX.0 ;+z<}{Ạ8.Q"rɍ*Upy^U4 ٻtQǕ裏*i TٖT"zq(aÆղe_w:(^z%̚k/QL:"X⹶uE,WP!'zee0,CJoQ:P™ "z@ TF#zHY eE`rp#j*(B0}4nDFrEڵmˁ}*ڥ"8'"d`iBPfM.;g;w$___ޚ0/DΝ ?'OVȵK3/a ] (9:J=B(J%*wzz:oOb;g1@ZZ'MknݺѨa<˺Ă iܨݺu@ B0`O$"!{Wg\L #"_%'[߾u0Wy++Օ/>+/r="o<'&* 5q弢]Խ;B@c1JJ% EtIլI 1͖H Aks壏VZŋۓOҶCᇸʕ8@;nziH 2IDAT켋vQQ1)k!Y<$ɲKe0I x:S,Dȉ', {0kBCqqq!-- ]B[- Hrr2mڷGPx./=<P:D2(*Gtt46ofl߶ w77s_w}:~FSgE ڸB KՑ߽%CYDqE-aBzdQ[TeYN/5/#Z▴ 'onDrf?VXN,8RXmZ}VDk`A`ʕ$''DfdeXf4B\AypT ?cF]a)>x]t"\@ B(@PH~S ~b.R !@ *J, *h kNߤ\!)E)@fbU^!@ Tf$Q@ ز+ c%,+HoT(&JJ<+@o6FPZ e~T( F#N..!eJNgx %*S D ei r(ej5`@ ur`0I ySK{_eI$Ek AeU<eMJC02IſfR@ 8•`I v=2JCf&F T>۵ %]ڍ!E+ 8>;RZ܌[5\SEE( F#r9M7.X@ pds[$4lDT|ZA<T}嶄]bF ooԭ+F@ W*`vM"[X)u۩x׮M IJ@ (Bd2o՛kqO}kԠY˖(J0dERѸis*\u˹܅l6ӓv]Pzu1G *vUd2h֪-pmL&syJUTTUMK#E.ǯaCk"5$$!d@ 쌗7a","VW>J`6W}**bؔT >h4@JRd 0ef!Nl~)3ӀJNNo(ܒ,ZBB&Wvr I^kw O*u*P$.99d248 SICƽB=P* ?w.]Y͛}i$$I/@Fڗ㾔$$$̘-)嬣j-9Š1:{F I2a?*Ci2Պ_@ x(}J*(UbP*7@tZ:n'$/%@fŜ)Rο ZYV9n[aD2CR.8 e)EE(jb ~\Nð(@ J׹R9_1B)-+xa1$.!-ryVɡW@ kS*v d]q1WE@`Gj#FKQVVc׷O~̢{GP]!@ Ϻ{%8 H#,J@ bXWd汿X$ɎW,e] Y{TG:^J@ Tk{3eol4$XGN *6JETX6=Jl 4_ "i.I2@N=*@ 8xXm]V\Ó@c-x9Vd&t@ @Ֆ? HN>ߘ5vތS67C0JiV AYe'g%#b *EDAbi%lEVXY&P dG:++1h"(Tj[U$3IH AY$VgmQRg/JÌZY|nڼO$V,^dSj7iLhS.ժjI<2!@ (=f&%kNXҔKmQB֤&Tb?i= E@ {0 DQtL-*d8$)$DiUҷIWLf9*d{ v N"Y}m!, *Wb-xr:~x*vwT]%2^X .6-Ӥ_X>HkS<.iP emg@t'ʸj}GY.PbFaZ$lr53LC?܁Mtyf}q+̈oWV(Om1Ku}=?EIPfR]n5lvz1_O2xHf2["i0Jqw!glïpݛ2(kZCz/B ־N<^F&G" X&H, Nof2wFh̘q<!@^7`//øPIENDB`cutter-testing-framework-1.1.7/html/logo.png0000644000175000017500000001213011205747024017263 0ustar koukouPNG  IHDRs2oG/sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATx\ytSպ$gHNӦ@[: pAPP^AE߻xATPt)3ESuPdVfhim&qr֧w[+k'}pB wK@wv*a6f!G_d߂YPQwAPgzZ뎵j),5.F?pi)>ܶ/lXۉJ#1Y> EۆlRE#9aʙo~(?_ hjĚ^G䇉xfyccԨ823rHOeš[@vf6}>E/b`ԌzAݡoqixm E6;Y|NDu]2{!)>vWpq:y'ccbc;f߁o"9.e墲gKat`xp.t'r몑?.NxXVHOMwoZݹccwؑ;6u uY^VRR^!S|}k73?l-aX0CRr\*Ǿ{ɪ/`忯Dzb[ / Ll*Mo?Hpi!cxFH9?Ly/+o:*}g.(|yY7o}aӊW[RRf A+E iIi800Ѻ >ÔqBrC ؁'qwZiHNHf'Îc"Œ9KPsCzr4*>q:Ϗ.țnEVZ/0ևrduκgJ+ł^h̘8ߌ%skV-h}zR Y=awvxzTPXˡFLtLPgz^a'-fAFFÀy\ #nmP}c=ގeŰ93"{ RfK3ގ%g`n1!ZGw$:*ZV=;PZ^^Y;p\b. F˰.#{'/< 30 J!LÆw6{vh54cM>ƿΖŊwV}?uHJLBFjRRc@M&4P[_׃Edt mB?x"5A.0;#MƐA 6bE8{ a`" qO"JSDq|yfUjR^\M;bA|r =&#q:^Jsba`C7r@b `hpcx24Crl4` JJƌg`ʸ{華CR!/+yYyxpC E/ܻ:!fĢG{şW/DMeLbG顳;I0Z-g2,K3A s8N_8XlLy4* BNm6财܈ Srgr,Gx"#hnׅI|;`1ڢXG ȵ0Ğp~U@VKk410z:eXc4iwf*_ad&%];dR]n'k?i MxK 4v4b6 Z OLNKvf#373fxF]ud1] (5O;Yl-3e8tZ|R=JB'XcKNdy l);/bH=]Rv;|9+/3_-C3>tD;v!xE] 6rZXpLaÎL-Í}t @iy0 <ܥhꠢT+NtwgO^8~O]jByA+x7}t\,Օqr636HŌAmSii KKџAFaK5PXtբ ˆ+pq:P0(zIkhbO o@u-MH2$C`i67L# wVXw[O>g*LF̫Lہڋ从M&,鉙xOjiAy1[BL_g荸\.!Rgǥ; hٗ.3tz磤63F-r%>lji W8MH0$uEgr/T c8"vc'EAf";L6 <+7'f -63N+ZhK54x. 1Q (qdҲbsVV# ZZzҝPk#ƖFJzUV[A`4u뫁r(*B[rGB&PQWSÛdH>)_\thvMc `r)AijDwբ#FO8,C@SWD04Kz* L ah5 J ^V\Nx/4 ٻ-#?F҄λ6XvE8 .Y-[(JloX/LBhpzˑ; <^ V@JҎ(ٍ ޯ !;~;?7GrIENDB`cutter-testing-framework-1.1.7/html/tutorial.png0000644000175000017500000000166511205747024020201 0ustar koukouPNG  IHDRVΎWsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<2IDAT8kHQƟ3uIDybyΰ;=Z}Z1҅C%" ZdYMR* "4Ӣ͹¦L7^ݻn{$oQ9qyY^/}aua #yܬT.#a=^8]B&v1ѕ?:%)4>NwIWv(@nG4>ʠ䤝a%>w yKHTBJrlWGS[ivۗB^yO YY3jjtg(2b MN9 `ύ[11Q l'n]/ |?2Țǃ@ =_bʶv[Ŷ 7 `aޜ%I se2OVx?m7kVeG  iy,nD2%YW:_R*S&Jmsڭ E0 usr6~3G ٘tErX"QZ>ͦA("e˖ xu,,9>3{2}RjL{D`bjX~ @AefxG/}cq@m4h}ݯ_ZU|~>}ûw޼yo/N<@, wofk ˟ -W~z+n `/_/Τ?WCrm~~Ѭׯ >~+W^|ݲe@d?[/i'7 GJJ-t΀!0eb^0#i/_2|t1_@K [.˫}feqQ?b`x?I U?(?A"?>30|`.D [0+IENDB`cutter-testing-framework-1.1.7/html/bar.svg0000644000175000017500000002063611205747024017114 0ustar koukou image/svg+xml cutter-testing-framework-1.1.7/html/index.html0000644000175000017500000001510711525650503017621 0ustar koukou a Unit Testing Framework for C and C++ - Cutter

The latest release

1.1.7 is the latest release. It had been released at 2011-02-13.

[Download] [Changes]

Cutter?

screenshot

Cutter is a Unit Testing Framework for C and C++. Cutter's interface is easy to write, easy to debug your code and fun to run tests. (See the screenshot. You need "notify-send" command on Linux and *BSD or "growlnotify" command on Mac OS X for this feature.)

Platform

Cutter works on many UNIX compatible environments: Debian GNU/Linux, Ubuntu, Fedora, CentOS, FreeBSD, Solaris, Mac OS X and. Cygwin. Cutter can be installed easily because there are packages for Cutter on some platforms.

Support

Questions and bug reports are accepted on mailing list. New release announce is also done on the mailing list. If you are using Cutter, it's a good idea that you subscribe the mailling list.

Join Cutter developement

Cutter uses Subversion repository on SourceForge.net. You can get the latest Cutter source code by the following command:

% svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter
If you send a patch for a new feature or a bug fix, please use trunk. Paches are accepted on mailing list.

cutter-testing-framework-1.1.7/html/index.html.ja0000644000175000017500000001764411525650422020222 0ustar koukou C言語・C++言語用テスティングフレームワーク - Cutter

最新リリース

2011-02-13にリリースされた1.1.7が最新です。

[ダウンロード] [変更点]

Cutterとは

screenshot Cutterは書きやすさ・デバッグのしやすさを重視したC言語・C++言語用のテスティングフレームワークです。メンテナンスしやすく、利用効果の高い単体テスト(ユニットテスト)の開発を支援します。また、テストを苦痛ではなく、楽しいものにすることも重視しています。(スクリーンショット参照。この機能にはnotify-sendコマンド(Linuxや*BSDなどの場合)またはgrowlnotifyコマンド(Mac OS Xの場合)が必要です。)

動作環境

CutterはDebian GNU/Linux, Ubuntu, Fedora, CentOS, FreeBSD, Solaris, Mac OS X, Cygwinなど多くのUNIX互換環境で動作します。環境によってはパッケージが用意されているため、容易にインストールすることができます。

サポート

メーリングリストで質問・バグレポートを受け付けています。新バージョンのアナウンスもメーリングリストに告知されるので、Cutterを利用している場合はメーリングリストの購読を検討してください。

有償でのサポートやCutterを用いたテスト開発、Cutterの導入支援、Cutterを用いたテスト開発のための教育が必要な場合はクリアコードが提供するCutter関連サービスを検討してください。

Cutterの開発に参加

CutterはSourceForge.netのSubversionリポジトリを利用して開発を行っています。ソースコードは以下のように取得できます。

% svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter
新機能や問題修正のパッチはtrunkに対するものでお願いします。パッチはメーリングリストに送ってください。

cutter-testing-framework-1.1.7/html/bar.png0000644000175000017500000000042011205747024017066 0ustar koukouPNG  IHDR&sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATH PE  +  !B qQ][L&s ,0@XnfQ4fxOx#ԁ  Y[ta J-p(, 64IENDB`cutter-testing-framework-1.1.7/html/download.svg0000644000175000017500000002272611205747024020161 0ustar koukou image/svg+xml Jakub Steiner http://jimmac.musichall.cz Go Down go lower down arrow pointer > Andreas Nilsson cutter-testing-framework-1.1.7/html/cutter.css0000644000175000017500000001002011524002364017624 0ustar koukouhtml, body { margin: 0px; padding: 0px; color: black; background-color: white; } a:link { color: #79b500; } a:visited { color: #5c6e00; } img.eye-catch { float: right; } div.header { position: relative; } div.header h1 { background: url(logo.png) no-repeat; font-size: smaller; margin-top: 20px; margin-left: 50px; margin-right: 220px; height: 50px; } div.header h1 a, div.header h1 a:link, div.header h1 a:visited { color: black; text-decoration: none; } div.header h1 span { display: block; padding-left: 130px; margin-bottom: 2px; } div.header h1 span.title { padding-top: 10px; } div.header h1 span.title-separator { display: none; } ul.other-languages { position: absolute; top: 0px; right: 50px; padding: 0px; margin: 0px; } ul.other-languages li { display: block; float: left; margin-left: 10px; } ul.other-languages li a { display: block; height: 11px; width: 16px; text-indent: -100000px; outline: none; } ul.other-languages li#other-language-english { background: url(us.png) no-repeat; } ul.other-languages li#other-language-japanese { background: url(jp.png) no-repeat; } ul.menu { background: url(bar.png) repeat-x; height: 38px; padding-top: 8px; padding-left: 50px; margin-top: 0px; margin-left: 0px; margin-bottom: 0px; padding-bottom: 0px; } ul.menu li { display: inline; margin-right: 10px; } ul.menu li a { color: #d0fe8e; text-decoration: none; font-weight: bold; padding-left: 20px; } ul.menu li a:hover { text-decoration: underline; } ul.menu li a:visited { color: #b8ff4f; } ul.menu li#menu-readme { background: url(readme.png) no-repeat; } ul.menu li#menu-install { background: url(install.png) no-repeat; } ul.menu li#menu-tutorial { background: url(tutorial.png) no-repeat; } ul.menu li#menu-reference { background: url(reference.png) no-repeat; } ul.menu li#menu-download { background: url(download.png) no-repeat; } ul.menu li#menu-blog { background: url(blog.png) no-repeat; } div.content { position: relative; margin-left: 50px; margin-right: 50px; } div.content p { line-height: 150%; } div.main { margin-right: 170px; } div.main h2, div.day h3 { margin-left: -45px; text-indent: 45px; height: 36px; background: url(heading-mark.png) no-repeat ; } div.sidebar { clear: both; position: absolute; top: 0px; right: 0px; width: 175px; background-color: white; } div.sidebar div.sidebar-item { background: url(mini-heading-mark.png) no-repeat; padding-left: 22px; margin-bottom: 15px; } div.sidebar div.sidebar-item h2 { font-size: 1em; margin: 0px; padding: 0px; padding-bottom: 5px; } div.sidebar ul { margin: 0px; padding: 0px; } div.sidebar ul li { list-style-type: none; margin-bottom: 5px; } div.sidebar ul li ul { margin-top: 5px; } div.sidebar ul li ul li { padding: 0; margin: 0; margin-left: 24px; } div.sidebar ul li.sidebar-install ul li { list-style-image: url(mini-install.png); } div.sponsors { border-top: solid black 1px; position: relative; margin-top: 20px; } div.sponsors p { margin: 0px; } div.sponsors p#sponsor-ipa { margin-top: 15px; margin-left: 50px; margin-right: 220px; } div.sponsors p#sponsor-sf-net { position: absolute; top: 15px; right: 50px; } div.sponsors p#sponsor-tango { position: absolute; top: 55px; right: 50px; } div.sponsors p#sponsor-famfamfam { position: absolute; top: 118px; right: 50px; padding-bottom: 50px; } pre { overflow: auto; } pre.command { color: white; background-color: black; padding: 5px 10px; } dt { margin-bottom: 0.25em; } dd { margin-bottom: 0.5em; } /* For GTK-Doc */ @media screen { table.navigation#top { position: relative; top: 0; margin-top: 20px; z-index: 0; } div.book { top: 0px; } div.refentry, div.chapter, div.reference, div.part, div.book, div.glossary, div.sect1, div.appendix, div.preface { top: 0px; } div.footer { padding-top: 0px; padding-bottom: 1em; } } cutter-testing-framework-1.1.7/html/mini-heading-mark.png0000644000175000017500000000213011345443144021604 0ustar koukouPNG  IHDRrP6bKGD pHYs B(x vpAg\IDAT8˭Tk\Uݏdfd:mCkDi6RF(EH - ]KE Q7R?jIFSJ-M&3^fޛwLLD\x෹?7RD7~e?]vOwrLK(O'|wCf'>HCiU8:&wov)NMio~LaӕyͻOnQFW~>YɢF}YYdG^$>ܙe|*'L:NS7_s]u]&!o 0&\ԈA ڱf|Yed_׬%=1+P!!mٿ%"l<ȩs  @X:~tC52hT.1XfhLhwJldwKIY.Q:jicamTl; z$5uR \cl+) 8a8+2f+5XmUMzܝc\-_c~kяCʹt8Ip=͙ڻ?/+,_0$݅E,%n<~4I (-sV< r84Dd& "P#'Q'MJi<7D, }7U<$ '<eLGiIV&\ҡ9@wkS_v!eeI+W⇫v`B4h h ",q  A;D2B|WM3pdO+mCzfϮQx%tEXtdate:create2009-05-23T19:21:08+09:00of%tEXtdate:modify2009-05-23T19:21:08+09:00dtEXtSoftwarewww.inkscape.org<IENDB`cutter-testing-framework-1.1.7/html/mini-install.png0000644000175000017500000000133611205747024020731 0ustar koukouPNG  IHDR Vu\bKGD pHYs B(x vpAg Υ2~IDAT(UNQtF`,)0jbwl=<^&FkK7bcC-3νuQYwr^3355Yge Atw첌ps8P*@0Gq=ѫͭMAP՞T*mRqXДRB! 3Ck `fXemooCj 3C)Y!"Yu!e{ vv୮@Dp=RIض;ADZCkEtz \FuF+~%NaX,>`! 'j|h\ZIi 6Q铧JEX2EuQ$Ii:|NOH,f:@]t4MoRZf=88>ʉ"Atnu>?}av1p|0psccZpj!d%tEXtcreate-date2009-04-09T20:28:28+09:00^*%tEXtmodify-date2009-04-09T20:28:28+09:00tEXtSoftwarewww.inkscape.org<IENDB`cutter-testing-framework-1.1.7/html/Makefile.in0000644000175000017500000003344011525654634017702 0ustar koukou# 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@ 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@ subdir = html DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ EXTRA_DIST = \ $(web_contents) \ $(svg_images) web_contents = \ index.html \ index.html.ja \ cutter.css \ $(images) svg_images = \ logo.svg \ bar.svg \ blog.svg \ download.svg \ heading-mark.svg \ install.svg \ readme.svg \ tutorial.svg images = \ famfamfam-logo.png \ tango-logo.png \ jp.png \ us.png \ reference.png \ notify-on-gnome.png \ $(generated_images) generated_images = \ logo.png \ bar.png \ blog.png \ download.png \ heading-mark.png \ mini-heading-mark.png \ install.png \ mini-install.png \ readme.png \ tutorial.png MAINTAINER_CLEANFILES = $(generated_images) SUFFIXES = .svg .png all: all-am .SUFFIXES: .SUFFIXES: .svg .png $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign html/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign html/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am upload: $(web_contents) (cd $(srcdir) && rsync -avz $(web_contents) $(SF_HTDOCS)/) .svg.png: inkscape --export-png $@ $< mini-install.png: install.png convert install.png -resize 12x12 mini-install.png mini-heading-mark.png: heading-mark.png convert heading-mark.png -resize 19x19 mini-heading-mark.png # 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: cutter-testing-framework-1.1.7/html/Makefile.am0000644000175000017500000000202011524003361017637 0ustar koukouEXTRA_DIST = \ $(web_contents) \ $(svg_images) web_contents = \ index.html \ index.html.ja \ cutter.css \ $(images) svg_images = \ logo.svg \ bar.svg \ blog.svg \ download.svg \ heading-mark.svg \ install.svg \ readme.svg \ tutorial.svg images = \ famfamfam-logo.png \ tango-logo.png \ jp.png \ us.png \ reference.png \ notify-on-gnome.png \ $(generated_images) generated_images = \ logo.png \ bar.png \ blog.png \ download.png \ heading-mark.png \ mini-heading-mark.png \ install.png \ mini-install.png \ readme.png \ tutorial.png MAINTAINER_CLEANFILES = $(generated_images) upload: $(web_contents) (cd $(srcdir) && rsync -avz $(web_contents) $(SF_HTDOCS)/) SUFFIXES = .svg .png .svg.png: inkscape --export-png $@ $< mini-install.png: install.png convert install.png -resize 12x12 mini-install.png mini-heading-mark.png: heading-mark.png convert heading-mark.png -resize 19x19 mini-heading-mark.png cutter-testing-framework-1.1.7/html/install.png0000644000175000017500000000151011205747024017771 0ustar koukouPNG  IHDRVΎWsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8Mk[Gwսc˖?ZA `uf4YxƋ LV ^PS&_.tlڝ )]7"N+Eh4IL;15 x}g挰V6 >Lٝ?_mP6JRw-Y[_~}4??=33\kM8uAߟ?w L~dzXkLLL+q -u]c֢>+?t:}ǾZN_%Zu\J)r#<&c:ԚR4bow0DJI,c``t:M*rh^lmQ~$ǩT*azrrZ4vv48HB%՛trD"1}^SSD"( TB}^i%94/8 xH'7D$AIy➰"蛛C!ĉר 3̧W\/ttP)9X__!|·$.NOO_SX| [k?suTll\IENDB`cutter-testing-framework-1.1.7/html/download.png0000644000175000017500000000125611205747024020141 0ustar koukouPNG  IHDRVΎWsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<+IDAT8MHTa;\3SI И Zr&*ܴ vA.j"(*MҶUTD4PIDh2Ec9-fE/8p?J=PXЛD!1*umW9s[ʯH.zZQشtPM"<;M[ &P|5|^.1ծ6uuU.RظaH h#3XXOltR^@+!ߏhˎ== JKH:|xY\S)(CaYF3hQMP X>19-{Î_ByhQ1{{+*hS/w=^(]n2_G\?Z8mW.~I?>#2h[N璟O 4ܷb`6q&~^z&n@DHu#=cwgZ``ᕺ)I0]з{$*EVJFC8@Y ָoQ.8IENDB`cutter-testing-framework-1.1.7/html/logo.svg0000644000175000017500000017260711205747024017316 0ustar koukou image/svg+xml Cutter Cutter cutter-testing-framework-1.1.7/html/blog.png0000644000175000017500000000152611205747024017255 0ustar koukouPNG  IHDRVΎWsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8kAƟٝMNϘ+EbaDQH!؈L@+AZUmĀ&b#* B.^:;3.Ia>/QJ!{׌ ݴ2|ڲ3E%U& yvC>gۆqNhId 7-~֪gyBCkFuZvl-OruM~G =~kvE3'e'YQ_Y xq¯tfB7 oqPJ!q)p*V,/ ˴e٨jhoy~`ddifI)!I]+ 2|ށ0Ms/0??N114Q(6=m}FS/Qެ6ewoYh|aR>*W(z1K,WSayQ,H)EEG?^r'1ȣg+/Nܼ=45]He lw5u-~(t_swsnh0ϕR*^,V0\Ʃ#g8,4MCǚbO U]8`_1\f^R 0@DJ)tJֵi j`-M'+CER!M6zmwO);n& 5NP-ZTGN]QKRktq4iׇ`L<~όq)Np@x8šR]\>+Ƨ0"FU0D"fY@/c@0dH^~fJJsEx+aAVA-Bc|!zʥM@0;Y#%\ oj`!m9kt'{q=H;Ny[13#naEiXրEkfZ{8Yx=hHx}$5qݖIq$ʦn6v!} WwVa|W;X}ƙQ1)c?O$ 2<4 0ZOx/e!|Y nY< 3X&Ngpui&lrE- 0)R;/6f-cUa( m~Z͛Q,eQBSDxUOhnwpn*$_s;Y+|x#=#Uupܱfdo1iA,)GYanfa Ӣx;ʮt`(>U -;ҵ̼[j;28m3!eؑ`o1O"eU>):3{2D 9GGq9bH:Ώ0*Ik/Fee.5Ay(W-L0}!Boy cmhКPr&x%`$= an ;>ҬZ,H_- HwthbjDx}Dxa,)m e8>09 ;dYlߋ}0y'iDF:ѡ`=ʚL/{b=IpA1h` g+BFrN9w5 ULDmu}ALy{sUvq2x[/:1lAS˨7˫'2|I;ܹh$z=nSz؞ 3jRYɄIq/T5G*R} 48*Mf_;ZLEu{`#.¬ q=<.]v-lL 8 ) KtQXB/=iET 25wgɮQX%췙ŊQz5o22:rA ʻgw ۦq*FI4ZSG8.h͂Ep5t$җڎL3/ GE0乮!њzrp < : Z3"jqV>͜`1PZ cY!T#H6P>quX#0IENDB`cutter-testing-framework-1.1.7/FEATURES.ja0000644000175000017500000002770411273747134016427 0ustar koukou# -*- rd -*- = 機能 --- Cutterの機能 == はじめに Cutterは以下のような単体テストフレームワークの基本的な機能を 持っています。 * フィクスチャ * テスト登録コード不要 * デバッグに便利な結果出力 * 豊富な検証機能 Cutterは以下のようなテスト環境をもっと便利にする高度な機能も あります。 * 複数のプラットフォーム対応 * データ駆動テストのサポート * カバレッジのサポート * クラッシュ時のバックトレース出力 * テスト結果の保存・復元 * マルチプロセス・マルチスレッドのサポート * 画像差分 * ... == 基本機能 単体テストフレームワークが一般的に提供している機能について、 Cutterがどのようにその機能を提供しているかについてを説明しま す。 === フィクスチャ 単体テストフレームワークでいうフィクスチャとは、各テストを実 行する前にテスト用データを用意するための仕組みのことです。こ れは、一般的には各テスト毎にsetup/teardownと呼ばれる初期化処 理/終了処理を実行することによって実現します。 Cutterでは以下のようにテストプログラム中に cut_setup()/cut_teardown() 関数を定義すると、それらの関数が初 期化処理/終了処理として扱われます。 void cut_setup (void) { /* 初期化処理 */ } void cut_teardown (void) { /* 終了処理 */ } また、Cutterではテストケース毎の初期化処理/終了処理のために cut_startup()/cut_shutdown()もサポートしてます。 void cut_startup (void) { /* テストケースの初期化処理 */ } void cut_shutdown (void) { /* テストケースの終了処理 */ } これらの関数は以下のような順番で呼ばれます。 * cut_startup() * cut_setup() * テスト1実行 * cut_teardown() * cut_setup() * テスト2実行 * cut_teardown() * ... * cut_shutdown() また、実験的な機能ですが、テスト全体を実行する前、テスト全体 を実行した後に呼び出す関数を登録することもできます。これらの 関数をそれぞれwarmup/cooldownと呼んでいます。呼び出し順序は こうなります。 * warmup実行 * テストケース1のcut_startup() * テストケース1のcut_setup() * テスト1-1実行 * テストケース1のcut_teardown() * テストケース1のcut_setup() * テスト1-2実行 * テストケース1のcut_teardown() * ... * テストケース1のcut_shutdown() * テストケース2のcut_startup() * テストケース2のcut_setup() * テスト2-1実行 * テストケース2のcut_teardown() * テストケース2のcut_setup() * テスト2-2実行 * テストケース2のcut_teardown() * ... * テストケース2のcut_shutdown() * ... * cooldown実行 この機能は、テスト対象のライブラリがライブラリ初期化関数・終 了関数を用意している場合に有用です。ただ、この機能は実験的な 機能なのでここでその使い方を紹介するのは控えておきます。もし、 使いたい場合は聞いてください。 === テスト登録コード不要 動的な言語用の単体テストフレームワークの多くでは明示的にテス トを登録する必要はありません。自動的にテストメソッド・テスト 関数などを見つけて実行します。しかし、C言語用の単体テストフレー ムワークの多くでは明示的にテストを登録する必要があります。 Cutterはテストを簡単に書けるようにするため、多くの動的な言語 用の単体テストフレームワークのように自動的にテスト関数を見つ けます。そのため、以下のように名前が「test_」からはじまる公開 関数を定義するだけでその関数がテスト関数として認識されます。 void test_my_function (void); void test_my_function (void) { /* テスト関数 */ } === デバッグに便利な結果出力 Cuterは迅速に問題の確認・修正が行えるようにテスト結果を出力し ます。具体的には以下のように出力を行います。 * 問題がない部分はシンプルに * 問題がある部分は冗長に まず、問題がない部分をシンプルに表示する(時には何も表示しな い)ことにより大事な情報が埋もれてしまうことを防ぎます。 また、問題がある部分はどのような問題があるかを判断するために、 知っている情報をできるだけ多く表示します。 例えば、文字列が同じ内容かを比較するテストで文字列が異なって 場合を考えます。Cutterは期待値と実測値を並べて表示します。こ れによりどの部分が異なるかを目視で確認しやすくなります。 expected: but was: もし、これがずれて表示されていたり、同じ行に表示されていると どこが異なるかを見つけるのは大変になります。 expected: but was: is expected but was また、必要ならば期待値と実測値のdiffを表示して具体的にどこが 異なるのかも示します。 expected: but was: diff: - abc def ghi jkl ? ^^^ + abc DEF ghi jkl ? ^^^ このように、Cutterにはテストが失敗した時に迅速に問題を確認す るための工夫が施されています。これにより、開発者が迅速に問題 を修正することを支援します。 === 豊富な検証機能 xUnit系の単体テストフレームワークではテスト対象が期待する動 作をしているかを検証するために、assertionと呼ばれる検証機能 を提供します。例えば、一般的には以下のような検証機能がありま す。 * assert: 検証対象が真の値であることを検証 * assert_equal: 実測値が期待値と等しいことを検証 Cutterでは、以下の検証機能が上記の検証機能に対応します。 * cut_assert() * cut_assert_true(): 機能はcut_assert()と同じだが「真の値」 であることを明示(自己記述的なためこちらの利用を推奨) * cut_assert_equal_int() * cut_assert_equal_uint() * cut_assert_equal_string() * ... Cutterは上記のような一般的な検証機能以外にも様々な検証機能が 組み込みで提供しているので、より簡単にテストを書くことができ ます。例えば、以下のような検証機能を提供しています。 * cut_assert_errno(): errnoが0であることを検証 * cut_assert_match(): 実測値の文字列が指定した正規表現にマッ チすることを検証 * cut_assert_path_exist(): 指定したパスが存在することを検 証 * ... 検証機能の一覧はリファレンスマニュアルの((<検証 |cutter-cut-assertions.html>))や(())を見てください。 == 高度な機能 一部の単体テストフレームワークが提供している機能のCutterでの 提供の仕方、および、どの単体テストフレームワークも提供してい ないCutter独特の機能について提供について説明します。 === 複数のプラットフォーム対応 現在、以下のプラットフォームでの動作を確認しています。 * GNU/Linux * FreeBSD * Mac OS X * Windows (MinGW) === データ駆動テストのサポート 複数のデータに対して同じテストを実行する場合があります。例え ば、以下のような場合が考えられます。 * 複数の入力パターンがあり、それらを網羅的にテストする場合 * 複数のバックエンドを抽象化し、どのバックエンドを利用して いる場合でも同じインターフェイスで扱えるライブラリをテス トする場合。(cairoやDBIなど) このような場合、テスト自体は1つだけ定義し、各テストデータに 対してそのテストを実行することで効率的にテストを作成すること ができます。このようなテストの仕方はデータ駆動テストと呼ばれ ています。 Cutterでのデータ駆動テストの書き方については (()) を見てください。 データ駆動テストの場合はテストは以下のような流れで実行されま す。 * テストデータ生成関数呼び出し * cut_setup() * テストデータ1を使ってテスト実行 * cut_teardown() * cut_setup() * テストデータ2を使ってテスト実行 * cut_teardown() * ... === カバレッジのサポート カバレッジ率はどの程度テストを網羅的に行っているかを示す指標 になります。 CutterはGCCを使用したカバレッジ測定を支援するためのM4マクロを 提供しています。GNU Autoconf/GNU Automakeを利用している場合は このM4マクロを利用することにより、カバレッジ測定環境を簡単に ビルドシステムに組み込むことができます。 詳しくは(())や((<チュートリアル|TUTORIAL.ja>))の AC_CHECK_COVERAGEについて書かれている部分を見てください。 === クラッシュ時のバックトレース出力 C言語・C++言語で実装されたプログラムではSegmentation Faultで プログラムが異常終了することは珍しくありません。この時、 CutterはSEGV シグナルが発生した時点でのバックトレースの取得を 試みます。取得できた場合はバックトレースを出力してから終了し ます。もちろん、この時点でテストプロセスがなにかしら破壊され ているので、必ずしもバックトレースを取得できるわけではありま せん。 問題の詳細を調べるには、GDBなどのデバッガで処理を追いかけて いく必要がありますが、バックトレースをデバッグの最初の足がか りとして利用することができます。 === テスト結果の保存・復元 ソフトウェアの品質を確認する方法として以下のような方法があり ます。 * テスト状況とバグ発見数の推移を測定 * テスト状況とバグ報告数の推移を測定 * テスト状況とソース規模の推移を測定 例えば、テストが増えているのにバグ発見数が少ない場合は、効率 の悪いテストを行っている、あるいはもともとテスト対象の品質が 高かったということが考えられます。テストが増えているのにバグ 報告数が伸びている場合は的外れなテストを行っているかもしれま せん。ソース規模が大きくなっているのにテストが増えていない場 合はテスト不足が考えられます。 このように、その時点でのテスト状況だけではなく、過去のテスト 結果も利用して時系列でソフトウェアの開発状況を分析することに より、ソフトウェアの品質向上に役立てることができる場合があり ます。 Cutterはテスト結果をXMLとしてファイルに保存することができます。 また、保存したXMLを読み込んでテスト結果を復元することができま す。 まだ実装されていませんが、保存したテスト結果を読み込んで、時 系列のグラフとしてレポートを出力する機能の実装を予定していま す。 === マルチプロセス・マルチスレッドのサポート cutter-testing-framework-1.1.7/module/0000755000175000017500000000000011525707412016143 5ustar koukoucutter-testing-framework-1.1.7/module/ui/0000755000175000017500000000000011525707413016561 5ustar koukoucutter-testing-framework-1.1.7/module/ui/cut-console-ui.c0000644000175000017500000011111411525642526021575 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define CUT_TYPE_CONSOLE_UI cut_type_console_ui #define CUT_CONSOLE_UI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_CONSOLE_UI, CutConsoleUI)) #define CUT_CONSOLE_UI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_CONSOLE_UI, CutConsoleUIClass)) #define CUT_IS_CONSOLE_UI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_CONSOLE_UI)) #define CUT_IS_CONSOLE_UI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_CONSOLE_UI)) #define CUT_CONSOLE_UI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_CONSOLE_UI, CutConsoleUIClass)) #define CRASH_COLOR \ CUT_CONSOLE_COLOR_RED_BACK \ CUT_CONSOLE_COLOR_WHITE typedef struct _CutConsoleUI CutConsoleUI; typedef struct _CutConsoleUIClass CutConsoleUIClass; struct _CutConsoleUI { GObject object; gchar *name; gboolean use_color; CutVerboseLevel verbose_level; gchar *notify_command; GList *errors; gint progress_row; gint progress_row_max; }; struct _CutConsoleUIClass { GObjectClass parent_class; }; enum { PROP_0, PROP_USE_COLOR, PROP_VERBOSE_LEVEL, PROP_NOTIFY_COMMAND, PROP_PROGRESS_ROW_MAX }; static GType cut_type_console_ui = 0; static GObjectClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void attach_to_run_context (CutListener *listener, CutRunContext *run_context); static void detach_from_run_context (CutListener *listener, CutRunContext *run_context); static gboolean run (CutUI *ui, CutRunContext *run_context); static void class_init (CutConsoleUIClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_boolean("use-color", "Use color", "Whether use color", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_USE_COLOR, spec); spec = g_param_spec_enum("verbose-level", "Verbose Level", "The number of representing verbosity level", CUT_TYPE_VERBOSE_LEVEL, CUT_VERBOSE_LEVEL_NORMAL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_VERBOSE_LEVEL, spec); spec = g_param_spec_string("notify-command", "Notify Command", "The notify command for notifying test result", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_NOTIFY_COMMAND, spec); spec = g_param_spec_int("progress-row-max", "Progress Row Max", "The max number of progress row", -1, G_MAXINT16, -1, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_PROGRESS_ROW_MAX, spec); } static void init (CutConsoleUI *console) { console->use_color = FALSE; console->verbose_level = CUT_VERBOSE_LEVEL_NORMAL; console->notify_command = NULL; console->errors = NULL; console->progress_row = 0; console->progress_row_max = -1; } static void listener_init (CutListenerClass *listener) { listener->attach_to_run_context = attach_to_run_context; listener->detach_from_run_context = detach_from_run_context; } static void ui_init (CutUIClass *ui) { ui->run = run; } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutConsoleUIClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutConsoleUI), 0, (GInstanceInitFunc) init, }; static const GInterfaceInfo ui_info = { (GInterfaceInitFunc) ui_init, NULL, NULL }; static const GInterfaceInfo listener_info = { (GInterfaceInitFunc) listener_init, NULL, NULL }; cut_type_console_ui = g_type_module_register_type(type_module, G_TYPE_OBJECT, "CutConsoleUI", &info, 0); g_type_module_add_interface(type_module, cut_type_console_ui, CUT_TYPE_UI, &ui_info); g_type_module_add_interface(type_module, cut_type_console_ui, CUT_TYPE_LISTENER, &listener_info); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_console_ui) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_console_ui)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_CONSOLE_UI, first_property, var_args); } static void dispose (GObject *object) { CutConsoleUI *console; console = CUT_CONSOLE_UI(object); if (console->errors) { g_list_foreach(console->errors, (GFunc)g_error_free, NULL); g_list_free(console->errors); console->errors = NULL; } if (console->notify_command) { g_free(console->notify_command); console->notify_command = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutConsoleUI *console = CUT_CONSOLE_UI(object); switch (prop_id) { case PROP_USE_COLOR: console->use_color = g_value_get_boolean(value); break; case PROP_VERBOSE_LEVEL: console->verbose_level = g_value_get_enum(value); break; case PROP_NOTIFY_COMMAND: if (console->notify_command) g_free(console->notify_command); console->notify_command = g_value_dup_string(value); break; case PROP_PROGRESS_ROW_MAX: console->progress_row_max = g_value_get_int(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutConsoleUI *console = CUT_CONSOLE_UI(object); switch (prop_id) { case PROP_USE_COLOR: g_value_set_boolean(value, console->use_color); break; case PROP_VERBOSE_LEVEL: g_value_set_enum(value, console->verbose_level); break; case PROP_NOTIFY_COMMAND: g_value_set_string(value, console->notify_command); break; case PROP_PROGRESS_ROW_MAX: g_value_set_int(value, console->progress_row_max); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static const gchar * status_to_name(CutTestResultStatus status) { GEnumClass *enum_class; GEnumValue *value; const gchar *name = "unknown"; enum_class = g_type_class_ref(CUT_TYPE_TEST_RESULT_STATUS); value = g_enum_get_value(enum_class, status); if (value) name = value->value_nick; g_type_class_unref(enum_class); return name; } static const gchar * status_to_label(CutTestResultStatus status) { const gchar *name; switch (status) { case CUT_TEST_RESULT_SUCCESS: name = "Success"; break; case CUT_TEST_RESULT_NOTIFICATION: name = "Notification"; break; case CUT_TEST_RESULT_OMISSION: name = "Omission"; break; case CUT_TEST_RESULT_PENDING: name = "Pending"; break; case CUT_TEST_RESULT_FAILURE: name = "Failure"; break; case CUT_TEST_RESULT_ERROR: name = "Error"; break; case CUT_TEST_RESULT_CRASH: name = "Crash"; break; default: name = "MUST NOT HAPPEN!!!"; break; } return name; } static const gchar * status_to_color(CutTestResultStatus status) { const gchar *color; switch (status) { case CUT_TEST_RESULT_SUCCESS: color = CUT_CONSOLE_COLOR_GREEN; break; case CUT_TEST_RESULT_NOTIFICATION: color = CUT_CONSOLE_COLOR_CYAN; break; case CUT_TEST_RESULT_OMISSION: color = CUT_CONSOLE_COLOR_BLUE; break; case CUT_TEST_RESULT_PENDING: color = CUT_CONSOLE_COLOR_MAGENTA; break; case CUT_TEST_RESULT_FAILURE: color = CUT_CONSOLE_COLOR_RED; break; case CUT_TEST_RESULT_ERROR: color = CUT_CONSOLE_COLOR_YELLOW; break; case CUT_TEST_RESULT_CRASH: color = CRASH_COLOR; break; default: color = ""; break; } return color; } static void print_with_colorv (CutConsoleUI *console, const gchar *color, gchar const *format, va_list args) { if (console->use_color) { gchar *message; message = g_strdup_vprintf(format, args); g_print("%s%s%s", color, message, CUT_CONSOLE_COLOR_NORMAL); g_free(message); } else { g_vprintf(format, args); } } static void print_with_color (CutConsoleUI *console, const gchar *color, gchar const *format, ...) { va_list args; va_start(args, format); print_with_colorv(console, color, format, args); va_end(args); } static void print_for_status (CutConsoleUI *console, CutTestResultStatus status, gchar const *format, ...) { va_list args; va_start(args, format); print_with_colorv(console, status_to_color(status), format, args); va_end(args); } static void print_progress (CutConsoleUI *console, CutTestResultStatus status, gchar const *mark) { print_with_color(console, status_to_color(status), "%s", mark); console->progress_row += strlen(mark); if (console->progress_row >= console->progress_row_max) { if (console->progress_row_max != -1 && console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) g_print("\n"); console->progress_row = 0; } } static void cb_start_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, CutConsoleUI *console) { } static void cb_start_test_case (CutRunContext *run_context, CutTestCase *test_case, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) return; print_with_color(console, CUT_CONSOLE_COLOR_GREEN_BACK, "%s", cut_test_get_name(CUT_TEST(test_case))); g_print(":\n"); } static void cb_start_test_iterator (CutRunContext *run_context, CutTestIterator *test_iterator, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) return; g_print(" "); print_with_color(console, CUT_CONSOLE_COLOR_BLUE_BACK, "%s", cut_test_get_name(CUT_TEST(test_iterator))); g_print(":\n"); } static guint utf8_n_spaces (const gchar *string) { guint n = 0; for (; string[0]; string = g_utf8_next_char(string)) { if (g_unichar_iswide_cjk(g_utf8_get_char(string))) { n += 2; } else if (string[0] == '\t') { n += 8; } else { n++; } } return n; } static void print_test_on_start (CutConsoleUI *console, const gchar *name, CutTest *test, const gchar *indent) { GString *tab_stop; guint name_length; const gchar *description; description = cut_test_get_description(test); if (description) g_print(" %s%s\n", indent, description); name_length = utf8_n_spaces(indent) + utf8_n_spaces(name) + 2; tab_stop = g_string_new(""); while (name_length < (8 * 7 - 1)) { g_string_append_c(tab_stop, '\t'); name_length += 8; } g_print(" %s%s:%s", indent, name, tab_stop->str); g_string_free(tab_stop, TRUE); fflush(stdout); } static void cb_start_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) return; print_test_on_start(console, cut_test_get_name(test), test, ""); } static void cb_start_iterated_test (CutRunContext *run_context, CutIteratedTest *iterated_test, CutTestContext *test_context, CutConsoleUI *console) { const gchar *name = NULL; if (console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) return; if (cut_test_context_have_data(test_context)) { CutTestData *data; data = cut_test_context_get_current_data(test_context); name = cut_test_data_get_name(data); } if (!name) name = cut_test_get_name(CUT_TEST(iterated_test)); print_test_on_start(console, name, CUT_TEST(iterated_test), " "); } static void cb_success_test (CutRunContext *run_context, CutTest *test, CutTestContext *context, CutTestResult *result, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_NORMAL) return; print_progress(console, CUT_TEST_RESULT_SUCCESS, "."); fflush(stdout); } static void cb_notification_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_NORMAL) return; print_progress(console, CUT_TEST_RESULT_NOTIFICATION, "N"); fflush(stdout); } static void cb_omission_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_NORMAL) return; print_progress(console, CUT_TEST_RESULT_OMISSION, "O"); fflush(stdout); } static void cb_pending_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_NORMAL) return; print_progress(console, CUT_TEST_RESULT_PENDING, "P"); fflush(stdout); } static void cb_failure_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_NORMAL) return; print_progress(console, CUT_TEST_RESULT_FAILURE, "F"); fflush(stdout); } static void cb_error_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_NORMAL) return; print_progress(console, CUT_TEST_RESULT_ERROR, "E"); fflush(stdout); } static void handle_crash (CutRunContext *run_context, CutTestResult *result, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_NORMAL) return; print_progress(console, CUT_TEST_RESULT_CRASH, "!"); fflush(stdout); } static void cb_crash_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutConsoleUI *console) { handle_crash(run_context, result, console); } static void cb_crash_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, CutTestResult *result, CutConsoleUI *console) { handle_crash(run_context, result, console); } static void cb_complete_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, gboolean success, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) return; g_print(": (%f)\n", cut_test_get_elapsed(test)); fflush(stdout); } static void cb_complete_iterated_test (CutRunContext *run_context, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success, CutConsoleUI *console) { cb_complete_test(run_context, CUT_TEST(iterated_test), test_context, success, console); } static void cb_complete_test_iterator (CutRunContext *run_context, CutTestIterator *test_iterator, gboolean success, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) return; } static void cb_complete_test_case (CutRunContext *run_context, CutTestCase *test_case, gboolean success, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) return; } static void cb_complete_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, gboolean success, CutConsoleUI *console) { if (console->verbose_level < CUT_VERBOSE_LEVEL_VERBOSE) return; } typedef struct _ConsoleAndStatus { CutConsoleUI *console; CutTestResultStatus status; } ConsoleAndStatus; static void print_each_attribute (gpointer key, gpointer value, gpointer data) { ConsoleAndStatus *info = (ConsoleAndStatus*)data; g_print("\n"); print_with_color(info->console, status_to_color(info->status), " %s: %s", (const gchar*)key, (const gchar*)value, NULL); } static void print_test_attributes (CutConsoleUI *console, CutTestResultStatus status, CutTest *test) { ConsoleAndStatus info; info.console = console; info.status = status; g_hash_table_foreach(cut_test_get_attributes(test), (GHFunc)print_each_attribute, &info); } static CutDiffWriter * console_diff_writer_new (gboolean use_color) { CutDiffWriter *writer; gchar *deleted_mark_color, *inserted_mark_color; gchar *deleted_line_color, *inserted_line_color; gchar *deleted_segment_color, *inserted_segment_color; writer = cut_console_diff_writer_new(use_color); deleted_mark_color = g_strdup(cut_console_diff_writer_get_deleted_mark_color(writer)); inserted_mark_color = g_strdup(cut_console_diff_writer_get_inserted_mark_color(writer)); deleted_line_color = g_strdup(cut_console_diff_writer_get_deleted_line_color(writer)); inserted_line_color = g_strdup(cut_console_diff_writer_get_inserted_line_color(writer)); deleted_segment_color = g_strdup(cut_console_diff_writer_get_deleted_segment_color(writer)); inserted_segment_color = g_strdup(cut_console_diff_writer_get_inserted_segment_color(writer)); cut_console_diff_writer_set_inserted_mark_color(writer, deleted_mark_color); cut_console_diff_writer_set_deleted_mark_color(writer, inserted_mark_color); cut_console_diff_writer_set_inserted_line_color(writer, deleted_line_color); cut_console_diff_writer_set_deleted_line_color(writer, inserted_line_color); cut_console_diff_writer_set_inserted_segment_color(writer, deleted_segment_color); cut_console_diff_writer_set_deleted_segment_color(writer, inserted_segment_color); g_free(deleted_mark_color); g_free(inserted_mark_color); g_free(deleted_line_color); g_free(inserted_line_color); g_free(deleted_segment_color); g_free(inserted_segment_color); return writer; } static void print_result_detail (CutConsoleUI *console, CutTestResultStatus status, CutTestResult *result) { const gchar *expected, *actual; expected = cut_test_result_get_expected(result); actual = cut_test_result_get_actual(result); if (console->use_color && expected && actual) { const gchar *user_message, *system_message; CutDiffer *differ; user_message = cut_test_result_get_user_message(result); system_message = cut_test_result_get_system_message(result); if (user_message) g_print("\n%s", user_message); if (system_message) g_print("\n%s", system_message); g_print("\n"); g_print("expected: <"); print_for_status(console, CUT_TEST_RESULT_SUCCESS, "%s", expected); g_print(">\n"); g_print(" actual: <"); print_for_status(console, CUT_TEST_RESULT_FAILURE, "%s", actual); g_print(">"); differ = cut_colorize_differ_new(expected, actual); if (cut_differ_need_diff(differ)) { CutDiffWriter *writer; g_print("\n\n"); g_print("diff:\n"); writer = console_diff_writer_new(console->use_color); cut_differ_diff(differ, writer); g_object_unref(writer); } g_object_unref(differ); } else { const gchar *message; message = cut_test_result_get_message(result); if (message) { g_print("\n%s", message); } } } static void print_results (CutConsoleUI *console, CutRunContext *run_context) { gint i; const GList *node; i = 1; for (node = console->errors; node; node = g_list_next(node)) { GError *error = node->data; g_print("\n%d) ", i); print_for_status(console, CUT_TEST_RESULT_ERROR, "SystemError: %s:%d", g_quark_to_string(error->domain), error->code); if (error->message) { g_print("\n"); print_for_status(console, CUT_TEST_RESULT_ERROR, "%s", error->message); } g_print("\n"); i++; } for (node = cut_run_context_get_results(run_context); node; node = g_list_next(node)) { CutTestResult *result = node->data; CutTestResultStatus status; CutTest *test; const GList *node; const gchar *name; status = cut_test_result_get_status(result); if (status == CUT_TEST_RESULT_SUCCESS) continue; name = cut_test_result_get_test_name(result); if (!name) name = cut_test_result_get_test_case_name(result); if (!name) name = cut_test_result_get_test_suite_name(result); g_print("\n%d) ", i); print_for_status(console, status, "%s", status_to_label(status)); g_print(": %s", name); test = cut_test_result_get_test(result); if (test) print_test_attributes(console, status, test); print_result_detail(console, status, result); g_print("\n"); for (node = cut_test_result_get_backtrace(result); node; node = g_list_next(node)) { CutBacktraceEntry *entry = node->data; gchar *formatted_entry; formatted_entry = cut_backtrace_entry_format(entry); g_print("%s\n", formatted_entry); g_free(formatted_entry); } i++; } } static gdouble compute_pass_percentage (CutRunContext *run_context) { guint n_tests, n_successes; gdouble pass_percentage; n_tests = cut_run_context_get_n_tests(run_context); n_successes = cut_run_context_get_n_successes(run_context); if (n_tests == 0) { pass_percentage = 0; } else { pass_percentage = 100.0 * ((gdouble)n_successes / (gdouble)n_tests); } return pass_percentage; } static gchar * format_summary (CutRunContext *run_context) { guint n_tests, n_assertions, n_successes, n_failures, n_errors; guint n_pendings, n_notifications, n_omissions; n_tests = cut_run_context_get_n_tests(run_context); n_assertions = cut_run_context_get_n_assertions(run_context); n_successes = cut_run_context_get_n_successes(run_context); n_failures = cut_run_context_get_n_failures(run_context); n_errors = cut_run_context_get_n_errors(run_context); n_pendings = cut_run_context_get_n_pendings(run_context); n_notifications = cut_run_context_get_n_notifications(run_context); n_omissions = cut_run_context_get_n_omissions(run_context); return g_strdup_printf("%d test(s), %d assertion(s), %d failure(s), " "%d error(s), %d pending(s), %d omission(s), " "%d notification(s)", n_tests, n_assertions, n_failures, n_errors, n_pendings, n_omissions, n_notifications); } static void print_summary (CutConsoleUI *console, CutRunContext *run_context) { const gchar *color; gchar *summary; color = status_to_color(cut_run_context_get_status(run_context)); summary = format_summary(run_context); print_with_color(console, color, "%s", summary); g_free(summary); g_print("\n"); print_with_color(console, color, "%g%% passed", compute_pass_percentage(run_context)); g_print("\n"); } static gchar * search_icon_path (CutTestResultStatus status, gboolean success) { GList *candiate_icon_names = NULL, *node; const gchar *icons_dir = NULL; const gchar *icon_theme = "kinotan"; gchar *icon_path = NULL; candiate_icon_names = g_list_append(candiate_icon_names, (gchar *)status_to_name(status)); if (success) { candiate_icon_names = g_list_append(candiate_icon_names, "pass"); } else { switch (status) { case CUT_TEST_RESULT_FAILURE: candiate_icon_names = g_list_append(candiate_icon_names, "error"); break; case CUT_TEST_RESULT_ERROR: candiate_icon_names = g_list_append(candiate_icon_names, "failure"); break; default: break; } } candiate_icon_names = g_list_append(candiate_icon_names, "default"); icons_dir = g_getenv("CUT_ICONS_DIR"); if (!icons_dir) icons_dir = ICONS_DIR; for (node = candiate_icon_names; node; node = g_list_next(node)) { const gchar *icon_name = node->data; gchar *icon_base_path; icon_base_path = g_strdup_printf("%s.png", icon_name); icon_path = g_build_filename(icons_dir, icon_theme, icon_base_path, NULL); g_free(icon_base_path); if (g_file_test(icon_path, G_FILE_TEST_IS_REGULAR)) { break; } else { g_free(icon_path); icon_path = NULL; } } return icon_path; } static void run_notify_command (CutConsoleUI *console, gchar **args) { GError *error = NULL; g_spawn_async(NULL, args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error); if (error) { gchar *command_line; command_line = g_strjoinv(" ", args); g_print("failed to run <%s>: <%s>: <%s>\n", console->notify_command, command_line, error->message); g_free(command_line); g_error_free(error); } } static void notify_by_growlnotify (CutConsoleUI *console, CutRunContext *run_context, gboolean success) { GPtrArray *args; CutTestResultStatus status; gchar *icon_path; status = cut_run_context_get_status(run_context); icon_path = search_icon_path(status, success); args = g_ptr_array_new(); g_ptr_array_add(args, g_strdup(console->notify_command)); g_ptr_array_add(args, g_strdup("--message")); g_ptr_array_add(args, format_summary(run_context)); g_ptr_array_add(args, g_strdup("--priority")); if (success) { g_ptr_array_add(args, g_strdup("Normal")); } else { g_ptr_array_add(args, g_strdup("Emergency")); } if (icon_path) { g_ptr_array_add(args, g_strdup("--image")); g_ptr_array_add(args, icon_path); } g_ptr_array_add(args, g_strdup_printf("%s [%g%%] (%gs)", status_to_label(status), compute_pass_percentage(run_context), cut_run_context_get_elapsed(run_context))); g_ptr_array_add(args, NULL); run_notify_command(console, (gchar **)args->pdata); g_ptr_array_foreach(args, (GFunc)g_free, NULL); g_ptr_array_free(args, TRUE); } static void notify_by_notify_send (CutConsoleUI *console, CutRunContext *run_context, gboolean success) { GPtrArray *args; CutTestResultStatus status; gchar *icon_path; gchar *summary; status = cut_run_context_get_status(run_context); icon_path = search_icon_path(status, success); args = g_ptr_array_new(); g_ptr_array_add(args, g_strdup(console->notify_command)); g_ptr_array_add(args, g_strdup("--expire-time")); g_ptr_array_add(args, g_strdup("5000")); g_ptr_array_add(args, g_strdup("--urgency")); if (success) { g_ptr_array_add(args, g_strdup("normal")); } else { g_ptr_array_add(args, g_strdup("critical")); } if (icon_path) { g_ptr_array_add(args, g_strdup("--icon")); g_ptr_array_add(args, icon_path); } g_ptr_array_add(args, g_strdup_printf("%s [%g%%] (%gs)", status_to_label(status), compute_pass_percentage(run_context), cut_run_context_get_elapsed(run_context))); summary = format_summary(run_context); g_ptr_array_add(args, g_markup_escape_text(summary, -1)); g_free(summary); g_ptr_array_add(args, NULL); run_notify_command(console, (gchar **)args->pdata); g_ptr_array_foreach(args, (GFunc)g_free, NULL); g_ptr_array_free(args, TRUE); } static void notify (CutConsoleUI *console, CutRunContext *run_context, gboolean success) { if (!console->notify_command) return; if (strcmp(console->notify_command, "notify-send") == 0) { notify_by_notify_send(console, run_context, success); } else if (strcmp(console->notify_command, "growlnotify") == 0) { notify_by_growlnotify(console, run_context, success); } } static void cb_complete_run (CutRunContext *run_context, gboolean success, CutConsoleUI *console) { CutVerboseLevel verbose_level; notify(console, run_context, success); verbose_level = console->verbose_level; if (verbose_level < CUT_VERBOSE_LEVEL_NORMAL) return; if (verbose_level == CUT_VERBOSE_LEVEL_NORMAL) g_print("\n"); print_results(console, run_context); g_print("\n"); g_print("Finished in %f seconds (total: %f seconds)", cut_run_context_get_elapsed(run_context), cut_run_context_get_total_elapsed(run_context)); g_print("\n\n"); print_summary(console, run_context); } static void cb_error (CutRunContext *run_context, GError *error, CutConsoleUI *console) { if (console->verbose_level >= CUT_VERBOSE_LEVEL_NORMAL) { print_with_color(console, status_to_color(CUT_TEST_RESULT_ERROR), "E"); fflush(stdout); } console->errors = g_list_append(console->errors, g_error_copy(error)); } static void connect_to_run_context (CutConsoleUI *console, CutRunContext *run_context) { #define CONNECT(name) \ g_signal_connect(run_context, #name, G_CALLBACK(cb_ ## name), console) CONNECT(start_test_suite); CONNECT(start_test_case); CONNECT(start_test_iterator); CONNECT(start_test); CONNECT(start_iterated_test); CONNECT(success_test); CONNECT(notification_test); CONNECT(omission_test); CONNECT(pending_test); CONNECT(failure_test); CONNECT(error_test); CONNECT(crash_test); CONNECT(crash_test_suite); CONNECT(complete_test); CONNECT(complete_iterated_test); CONNECT(complete_test_iterator); CONNECT(complete_test_case); CONNECT(complete_test_suite); CONNECT(complete_run); CONNECT(error); #undef CONNECT } static void disconnect_from_run_context (CutConsoleUI *console, CutRunContext *run_context) { #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(run_context, \ G_CALLBACK(cb_ ## name), \ console) DISCONNECT(start_test_suite); DISCONNECT(start_test_case); DISCONNECT(start_test_iterator); DISCONNECT(start_test); DISCONNECT(start_iterated_test); DISCONNECT(success_test); DISCONNECT(notification_test); DISCONNECT(omission_test); DISCONNECT(pending_test); DISCONNECT(failure_test); DISCONNECT(error_test); DISCONNECT(crash_test); DISCONNECT(crash_test_suite); DISCONNECT(complete_iterated_test); DISCONNECT(complete_test); DISCONNECT(complete_test_iterator); DISCONNECT(complete_test_case); DISCONNECT(complete_test_suite); DISCONNECT(complete_run); DISCONNECT(error); #undef DISCONNECT } static void attach_to_run_context (CutListener *listener, CutRunContext *run_context) { connect_to_run_context(CUT_CONSOLE_UI(listener), run_context); } static void detach_from_run_context (CutListener *listener, CutRunContext *run_context) { disconnect_from_run_context(CUT_CONSOLE_UI(listener), run_context); } static gboolean run (CutUI *ui, CutRunContext *run_context) { return cut_run_context_start(run_context); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/ui/cut-console-ui-factory.c0000644000175000017500000003033311525642526023245 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #include #include #include #include #define CUT_TYPE_CONSOLE_UI_FACTORY cut_type_console_ui_factory #define CUT_CONSOLE_UI_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_CONSOLE_UI_FACTORY, CutConsoleUIFactory)) #define CUT_CONSOLE_UI_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_CONSOLE_UI_FACTORY, CutConsoleUIFactoryClass)) #define CUT_IS_CONSOLE_UI_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_CONSOLE_UI_FACTORY)) #define CUT_IS_CONSOLE_UI_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_CONSOLE_UI_FACTORY)) #define CUT_CONSOLE_UI_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_CONSOLE_UI_FACTORY, CutConsoleUIFactoryClass)) typedef struct _CutConsoleUIFactory CutConsoleUIFactory; typedef struct _CutConsoleUIFactoryClass CutConsoleUIFactoryClass; struct _CutConsoleUIFactory { CutModuleFactory object; gboolean use_color; CutVerboseLevel verbose_level; gchar *notify_command; }; struct _CutConsoleUIFactoryClass { CutModuleFactoryClass parent_class; }; enum { PROP_0, PROP_USE_COLOR, PROP_VERBOSE_LEVEL }; static GType cut_type_console_ui_factory = 0; static CutModuleFactoryClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void set_option_group (CutModuleFactory *factory, GOptionContext *context); static GObject *create (CutModuleFactory *factory); static void class_init (CutModuleFactoryClass *klass) { GObjectClass *gobject_class; CutModuleFactoryClass *factory_class; GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); factory_class = CUT_MODULE_FACTORY_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; factory_class->set_option_group = set_option_group; factory_class->create = create; spec = g_param_spec_boolean("use-color", "Use color", "Whether use color", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_USE_COLOR, spec); spec = g_param_spec_enum("verbose-level", "Verbose Level", "The number of representing verbosity level", CUT_TYPE_VERBOSE_LEVEL, CUT_VERBOSE_LEVEL_NORMAL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_VERBOSE_LEVEL, spec); } static void init (CutConsoleUIFactory *console) { console->use_color = FALSE; console->verbose_level = CUT_VERBOSE_LEVEL_NORMAL; console->notify_command = NULL; } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutConsoleUIFactoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutConsoleUIFactory), 0, (GInstanceInitFunc) init, }; cut_type_console_ui_factory = g_type_module_register_type(type_module, CUT_TYPE_MODULE_FACTORY, "CutConsoleUIFactory", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_console_ui_factory) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_console_ui_factory)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_CONSOLE_UI_FACTORY, first_property, var_args); } static void dispose (GObject *object) { CutConsoleUIFactory *console = CUT_CONSOLE_UI_FACTORY(object); if (console->notify_command) { g_free(console->notify_command); console->notify_command = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutConsoleUIFactory *console = CUT_CONSOLE_UI_FACTORY(object); switch (prop_id) { case PROP_USE_COLOR: console->use_color = g_value_get_boolean(value); break; case PROP_VERBOSE_LEVEL: console->verbose_level = g_value_get_enum(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutConsoleUIFactory *console = CUT_CONSOLE_UI_FACTORY(object); switch (prop_id) { case PROP_USE_COLOR: g_value_set_boolean(value, console->use_color); break; case PROP_VERBOSE_LEVEL: g_value_set_enum(value, console->verbose_level); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static gint guess_term_width (void) { gint term_width = 0; const gchar *columns_env; const gchar *term_width_env; columns_env = g_getenv("COLUMNS"); if (columns_env) term_width = atoi(columns_env); if (term_width == 0) { term_width_env = g_getenv("TERM_WIDTH"); if (term_width_env) term_width = atoi(term_width_env); } if (term_width < 0) return -1; if (term_width == 0) { const gchar *emacs_env; emacs_env = g_getenv("EMACS"); if (emacs_env && (g_str_equal(emacs_env, "t"))) term_width = -1; else term_width = 79; } return term_width; } static gboolean parse_verbose_level_arg (const gchar *option_name, const gchar *value, gpointer data, GError **error) { CutConsoleUIFactory *console = data; CutVerboseLevel verbose_level; GError *verbose_level_error = NULL; verbose_level = cut_verbose_level_parse(value, &verbose_level_error); if (!verbose_level_error) { console->verbose_level = verbose_level; return TRUE; } g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "%s", verbose_level_error->message); g_error_free(verbose_level_error); return FALSE; } static gboolean parse_color_arg (const gchar *option_name, const gchar *value, gpointer data, GError **error) { CutConsoleUIFactory *console = data; return cut_console_parse_color_arg(option_name, value, &(console->use_color), error); } static gboolean program_exist (const gchar *program) { gchar *path; gboolean found = FALSE; path = g_find_program_in_path(program); if (path) { found = TRUE; g_free(path); } return found; } static const gchar * search_notify_command (void) { const gchar *candidates[] = { "notify-send", "growlnotify", NULL }; int i; for (i = 0; candidates[i]; i++) { if (program_exist(candidates[i])) return candidates[i]; } return NULL; } static gboolean parse_notify_arg (const gchar *option_name, const gchar *value, gpointer data, GError **error) { CutConsoleUIFactory *console = data; if (value == NULL || g_utf8_collate(value, "yes") == 0 || g_utf8_collate(value, "true") == 0 || g_utf8_collate(value, "auto") == 0) { if (!console->notify_command) { console->notify_command = g_strdup(search_notify_command()); } } else if (g_utf8_collate(value, "no") == 0 || g_utf8_collate(value, "false") == 0) { if (console->notify_command) { g_free(console->notify_command); console->notify_command = NULL; } } else { g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, _("Invalid notify value: %s"), value); return FALSE; } return TRUE; } static gboolean pre_parse (GOptionContext *context, GOptionGroup *group, gpointer data, GError **error) { CutConsoleUIFactory *console = data; console->use_color = cut_console_guess_color_usability(); console->notify_command = g_strdup(search_notify_command()); return TRUE; } static void set_option_group (CutModuleFactory *factory, GOptionContext *context) { CutConsoleUIFactory *console = CUT_CONSOLE_UI_FACTORY(factory); GOptionGroup *group; GOptionEntry entries[] = { {"verbose", 'v', 0, G_OPTION_ARG_CALLBACK, parse_verbose_level_arg, N_("Set verbose level"), "[s|silent|n|normal|v|verbose]"}, {"color", 'c', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, parse_color_arg, N_("Output log with colors"), "[yes|true|no|false|auto]"}, {"notify", 0, G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, parse_notify_arg, N_("Notify test result"), "[yes|true|no|false|auto]"}, {NULL} }; if (CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group) CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group(factory, context); group = g_option_group_new(("console-ui"), _("Console UI Options"), _("Show console UI options"), console, NULL); g_option_group_add_entries(group, entries); g_option_group_set_parse_hooks(group, pre_parse, NULL); g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); g_option_context_add_group(context, group); } GObject * create (CutModuleFactory *factory) { CutConsoleUIFactory *console = CUT_CONSOLE_UI_FACTORY(factory); return G_OBJECT(cut_ui_new("console", "use-color", console->use_color, "verbose-level", console->verbose_level, "notify-command", console->notify_command, "progress-row-max", guess_term_width(), NULL)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/ui/Makefile.in0000644000175000017500000007266211525654634020651 0ustar koukou# 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@ 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@ @HAVE_GTK_TRUE@am__append_1 = gtk.la @HAVE_GTK_TRUE@am__append_2 = gtk_factory.la subdir = module/ui DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(ui_factory_moduledir)" \ "$(DESTDIR)$(ui_moduledir)" LTLIBRARIES = $(ui_factory_module_LTLIBRARIES) \ $(ui_module_LTLIBRARIES) console_la_LIBADD = am_console_la_OBJECTS = console_la-cut-console-ui.lo console_la_OBJECTS = $(am_console_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent console_factory_la_LIBADD = am_console_factory_la_OBJECTS = \ console_factory_la-cut-console-ui-factory.lo console_factory_la_OBJECTS = $(am_console_factory_la_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ $(top_builddir)/cutter/libcutter.la @HAVE_GTK_TRUE@gtk_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @HAVE_GTK_TRUE@ $(am__DEPENDENCIES_2) am__gtk_la_SOURCES_DIST = cut-gtk-ui.c @HAVE_GTK_TRUE@am_gtk_la_OBJECTS = gtk_la-cut-gtk-ui.lo gtk_la_OBJECTS = $(am_gtk_la_OBJECTS) @HAVE_GTK_TRUE@am_gtk_la_rpath = -rpath $(ui_moduledir) @HAVE_GTK_TRUE@gtk_factory_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @HAVE_GTK_TRUE@ $(am__DEPENDENCIES_2) am__gtk_factory_la_SOURCES_DIST = cut-gtk-ui-factory.c @HAVE_GTK_TRUE@am_gtk_factory_la_OBJECTS = \ @HAVE_GTK_TRUE@ gtk_factory_la-cut-gtk-ui-factory.lo gtk_factory_la_OBJECTS = $(am_gtk_factory_la_OBJECTS) @HAVE_GTK_TRUE@am_gtk_factory_la_rpath = -rpath \ @HAVE_GTK_TRUE@ $(ui_factory_moduledir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(console_la_SOURCES) $(console_factory_la_SOURCES) \ $(gtk_la_SOURCES) $(gtk_factory_la_SOURCES) DIST_SOURCES = $(console_la_SOURCES) $(console_factory_la_SOURCES) \ $(am__gtk_la_SOURCES_DIST) $(am__gtk_factory_la_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(GLIB_LIBS) \ $(top_builddir)/cutter/libcutter.la LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) AM_CFLAGS = \ $(GLIB_CFLAGS) \ -DICONS_DIR="\"$(icons_dir)\"" \ $(COVERAGE_CFLAGS) AM_LDFLAGS = \ -avoid-version -module \ -no-undefined -export-dynamic $(LIBTOOL_EXPORT_OPTIONS) ui_module_LTLIBRARIES = console.la $(am__append_1) ui_factory_module_LTLIBRARIES = console_factory.la $(am__append_2) console_la_CPPFLAGS = console_la_SOURCES = \ cut-console-ui.c console_factory_la_CPPFLAGS = console_factory_la_SOURCES = \ cut-console-ui-factory.c @HAVE_GTK_TRUE@gtk_la_CPPFLAGS = \ @HAVE_GTK_TRUE@ $(GTK_CFLAGS) @HAVE_GTK_TRUE@gtk_la_SOURCES = \ @HAVE_GTK_TRUE@ cut-gtk-ui.c @HAVE_GTK_TRUE@gtk_la_LIBADD = $(GTK_LIBS) $(LIBS) @HAVE_GTK_TRUE@gtk_factory_la_CPPFLAGS = \ @HAVE_GTK_TRUE@ $(GTK_CFLAGS) @HAVE_GTK_TRUE@gtk_factory_la_SOURCES = \ @HAVE_GTK_TRUE@ cut-gtk-ui-factory.c @HAVE_GTK_TRUE@gtk_factory_la_LIBADD = $(GTK_LIBS) $(LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign module/ui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign module/ui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-ui_factory_moduleLTLIBRARIES: $(ui_factory_module_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(ui_factory_moduledir)" || $(MKDIR_P) "$(DESTDIR)$(ui_factory_moduledir)" @list='$(ui_factory_module_LTLIBRARIES)'; test -n "$(ui_factory_moduledir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(ui_factory_moduledir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(ui_factory_moduledir)"; \ } uninstall-ui_factory_moduleLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(ui_factory_module_LTLIBRARIES)'; test -n "$(ui_factory_moduledir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(ui_factory_moduledir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(ui_factory_moduledir)/$$f"; \ done clean-ui_factory_moduleLTLIBRARIES: -test -z "$(ui_factory_module_LTLIBRARIES)" || rm -f $(ui_factory_module_LTLIBRARIES) @list='$(ui_factory_module_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done install-ui_moduleLTLIBRARIES: $(ui_module_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(ui_moduledir)" || $(MKDIR_P) "$(DESTDIR)$(ui_moduledir)" @list='$(ui_module_LTLIBRARIES)'; test -n "$(ui_moduledir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(ui_moduledir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(ui_moduledir)"; \ } uninstall-ui_moduleLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(ui_module_LTLIBRARIES)'; test -n "$(ui_moduledir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(ui_moduledir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(ui_moduledir)/$$f"; \ done clean-ui_moduleLTLIBRARIES: -test -z "$(ui_module_LTLIBRARIES)" || rm -f $(ui_module_LTLIBRARIES) @list='$(ui_module_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done console.la: $(console_la_OBJECTS) $(console_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(ui_moduledir) $(console_la_OBJECTS) $(console_la_LIBADD) $(LIBS) console_factory.la: $(console_factory_la_OBJECTS) $(console_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(ui_factory_moduledir) $(console_factory_la_OBJECTS) $(console_factory_la_LIBADD) $(LIBS) gtk.la: $(gtk_la_OBJECTS) $(gtk_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_gtk_la_rpath) $(gtk_la_OBJECTS) $(gtk_la_LIBADD) $(LIBS) gtk_factory.la: $(gtk_factory_la_OBJECTS) $(gtk_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_gtk_factory_la_rpath) $(gtk_factory_la_OBJECTS) $(gtk_factory_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console_factory_la-cut-console-ui-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console_la-cut-console-ui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_factory_la-cut-gtk-ui-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_la-cut-gtk-ui.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< console_la-cut-console-ui.lo: cut-console-ui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(console_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT console_la-cut-console-ui.lo -MD -MP -MF $(DEPDIR)/console_la-cut-console-ui.Tpo -c -o console_la-cut-console-ui.lo `test -f 'cut-console-ui.c' || echo '$(srcdir)/'`cut-console-ui.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/console_la-cut-console-ui.Tpo $(DEPDIR)/console_la-cut-console-ui.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-console-ui.c' object='console_la-cut-console-ui.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(console_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o console_la-cut-console-ui.lo `test -f 'cut-console-ui.c' || echo '$(srcdir)/'`cut-console-ui.c console_factory_la-cut-console-ui-factory.lo: cut-console-ui-factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(console_factory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT console_factory_la-cut-console-ui-factory.lo -MD -MP -MF $(DEPDIR)/console_factory_la-cut-console-ui-factory.Tpo -c -o console_factory_la-cut-console-ui-factory.lo `test -f 'cut-console-ui-factory.c' || echo '$(srcdir)/'`cut-console-ui-factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/console_factory_la-cut-console-ui-factory.Tpo $(DEPDIR)/console_factory_la-cut-console-ui-factory.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-console-ui-factory.c' object='console_factory_la-cut-console-ui-factory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(console_factory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o console_factory_la-cut-console-ui-factory.lo `test -f 'cut-console-ui-factory.c' || echo '$(srcdir)/'`cut-console-ui-factory.c gtk_la-cut-gtk-ui.lo: cut-gtk-ui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gtk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gtk_la-cut-gtk-ui.lo -MD -MP -MF $(DEPDIR)/gtk_la-cut-gtk-ui.Tpo -c -o gtk_la-cut-gtk-ui.lo `test -f 'cut-gtk-ui.c' || echo '$(srcdir)/'`cut-gtk-ui.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gtk_la-cut-gtk-ui.Tpo $(DEPDIR)/gtk_la-cut-gtk-ui.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-gtk-ui.c' object='gtk_la-cut-gtk-ui.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gtk_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gtk_la-cut-gtk-ui.lo `test -f 'cut-gtk-ui.c' || echo '$(srcdir)/'`cut-gtk-ui.c gtk_factory_la-cut-gtk-ui-factory.lo: cut-gtk-ui-factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gtk_factory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gtk_factory_la-cut-gtk-ui-factory.lo -MD -MP -MF $(DEPDIR)/gtk_factory_la-cut-gtk-ui-factory.Tpo -c -o gtk_factory_la-cut-gtk-ui-factory.lo `test -f 'cut-gtk-ui-factory.c' || echo '$(srcdir)/'`cut-gtk-ui-factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gtk_factory_la-cut-gtk-ui-factory.Tpo $(DEPDIR)/gtk_factory_la-cut-gtk-ui-factory.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-gtk-ui-factory.c' object='gtk_factory_la-cut-gtk-ui-factory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gtk_factory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gtk_factory_la-cut-gtk-ui-factory.lo `test -f 'cut-gtk-ui-factory.c' || echo '$(srcdir)/'`cut-gtk-ui-factory.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(ui_factory_moduledir)" "$(DESTDIR)$(ui_moduledir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool \ clean-ui_factory_moduleLTLIBRARIES clean-ui_moduleLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-ui_factory_moduleLTLIBRARIES \ install-ui_moduleLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-ui_factory_moduleLTLIBRARIES \ uninstall-ui_moduleLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-ui_factory_moduleLTLIBRARIES \ clean-ui_moduleLTLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 \ install-ui_factory_moduleLTLIBRARIES \ install-ui_moduleLTLIBRARIES installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-ui_factory_moduleLTLIBRARIES \ uninstall-ui_moduleLTLIBRARIES # 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: cutter-testing-framework-1.1.7/module/ui/Makefile.am0000644000175000017500000000162211525642526020621 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) AM_CFLAGS = \ $(GLIB_CFLAGS) \ -DICONS_DIR="\"$(icons_dir)\"" \ $(COVERAGE_CFLAGS) AM_LDFLAGS = \ -avoid-version -module \ -no-undefined -export-dynamic $(LIBTOOL_EXPORT_OPTIONS) LIBS = \ $(GLIB_LIBS) \ $(top_builddir)/cutter/libcutter.la ui_module_LTLIBRARIES = console.la ui_factory_module_LTLIBRARIES = console_factory.la console_la_CPPFLAGS = console_la_SOURCES = \ cut-console-ui.c console_factory_la_CPPFLAGS = console_factory_la_SOURCES = \ cut-console-ui-factory.c if HAVE_GTK ui_module_LTLIBRARIES += gtk.la ui_factory_module_LTLIBRARIES += gtk_factory.la gtk_la_CPPFLAGS = \ $(GTK_CFLAGS) gtk_la_SOURCES = \ cut-gtk-ui.c gtk_la_LIBADD = $(GTK_LIBS) $(LIBS) gtk_factory_la_CPPFLAGS = \ $(GTK_CFLAGS) gtk_factory_la_SOURCES = \ cut-gtk-ui-factory.c gtk_factory_la_LIBADD = $(GTK_LIBS) $(LIBS) endif cutter-testing-framework-1.1.7/module/ui/cut-gtk-ui.c0000644000175000017500000012140111205747030020707 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define CUT_TYPE_GTK_UI cut_type_gtk_ui #define CUT_GTK_UI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_GTK_UI, CutGtkUI)) #define CUT_GTK_UI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_GTK_UI, CutGtkUIClass)) #define CUT_IS_GTK_UI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_GTK_UI)) #define CUT_IS_GTK_UI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_GTK_UI)) #define CUT_GTK_UI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_GTK_UI, CutGtkUIClass)) typedef struct _CutGtkUI CutGtkUI; typedef struct _CutGtkUIClass CutGtkUIClass; struct _CutGtkUI { GObject object; GtkWidget *window; GtkProgressBar *progress_bar; GtkTreeView *tree_view; GtkTreeStore *logs; GtkStatusbar *statusbar; GtkLabel *summary; GtkWidget *cancel_button; GtkWidget *restart_button; CutRunContext *run_context; gboolean running; guint n_tests; guint n_completed_tests; CutTestResultStatus status; guint update_pulse_id; }; struct _CutGtkUIClass { GObjectClass parent_class; }; enum { PROP_0 }; enum { COLUMN_COLOR, COLUMN_TEST_STATUS, COLUMN_STATUS_ICON, COLUMN_PROGRESS_TEXT, COLUMN_PROGRESS_VALUE, COLUMN_PROGRESS_PULSE, COLUMN_PROGRESS_VISIBLE, COLUMN_NAME, COLUMN_DESCRIPTION, N_COLUMN }; static GType cut_type_gtk_ui = 0; static GObjectClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void attach_to_run_context (CutListener *listener, CutRunContext *run_context); static void detach_from_run_context (CutListener *listener, CutRunContext *run_context); static gboolean run (CutUI *ui, CutRunContext *run_context); static void class_init (CutGtkUIClass *klass) { GObjectClass *gobject_class; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; } static void setup_progress_bar (GtkBox *box, CutGtkUI *ui) { GtkWidget *progress_bar; progress_bar = gtk_progress_bar_new(); gtk_box_pack_start(box, progress_bar, TRUE, TRUE, 0); ui->progress_bar = GTK_PROGRESS_BAR(progress_bar); gtk_progress_bar_set_pulse_step(ui->progress_bar, 0.01); } static void cb_cancel (GtkToolButton *button, gpointer data) { CutGtkUI *ui = data; gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE); cut_run_context_cancel(ui->run_context); } static void setup_cancel_button (GtkToolbar *toolbar, CutGtkUI *ui) { GtkToolItem *cancel_button; cancel_button = gtk_tool_button_new_from_stock(GTK_STOCK_CANCEL); gtk_toolbar_insert(toolbar, cancel_button, -1); g_signal_connect(cancel_button, "clicked", G_CALLBACK(cb_cancel), ui); ui->cancel_button = GTK_WIDGET(cancel_button); } static void cb_restart (GtkToolButton *button, gpointer data) { /* CutGtkUI *ui = data; CutRunContext *run_context; gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE); run_context = cut_run_context_copy(ui->run_context); cut_run_context_set_test_suite(ui->run_context, NULL); g_object_unref(ui->run_context); ui->run_context = run_context; g_object_unref(ui->test_suite); ui->test_suite = g_object_ref(cut_run_context_get_test_suite(ui->run_context)); g_idle_add(idle_cb_run_test, ui); */ } static void setup_restart_button (GtkToolbar *toolbar, CutGtkUI *ui) { GtkToolItem *restart_button; restart_button = gtk_tool_button_new_from_stock(GTK_STOCK_REDO); gtk_toolbar_insert(toolbar, restart_button, -1); g_signal_connect(restart_button, "clicked", G_CALLBACK(cb_restart), ui); ui->restart_button = GTK_WIDGET(restart_button); } static void setup_top_bar (GtkBox *box, CutGtkUI *ui) { GtkWidget *hbox, *toolbar; hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(box, hbox, FALSE, TRUE, 0); setup_progress_bar(GTK_BOX(hbox), ui); toolbar = gtk_toolbar_new(); gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolbar), FALSE); gtk_box_pack_end(GTK_BOX(hbox), toolbar, FALSE, FALSE, 0); setup_cancel_button(GTK_TOOLBAR(toolbar), ui); setup_restart_button(GTK_TOOLBAR(toolbar), ui); } static void setup_summary_label (GtkBox *box, CutGtkUI *ui) { GtkWidget *summary; summary = gtk_label_new(_("Ready")); gtk_box_pack_start(box, summary, FALSE, TRUE, 0); ui->summary = GTK_LABEL(summary); } static void setup_tree_view_columns (GtkTreeView *tree_view) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; column = gtk_tree_view_column_new(); renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_set_title(column, _("Name")); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", COLUMN_STATUS_ICON); renderer = gtk_cell_renderer_progress_new(); gtk_tree_view_column_pack_end(column, renderer, FALSE); gtk_tree_view_column_set_attributes(column, renderer, "text", COLUMN_PROGRESS_TEXT, "value", COLUMN_PROGRESS_VALUE, "pulse", COLUMN_PROGRESS_PULSE, "visible", COLUMN_PROGRESS_VISIBLE, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_set_attributes(column, renderer, "text", COLUMN_NAME, "background", COLUMN_COLOR, NULL); gtk_tree_view_column_set_sort_column_id(column, COLUMN_NAME); gtk_tree_view_append_column(tree_view, column); renderer = g_object_new(GTK_TYPE_CELL_RENDERER_TEXT, "font", "Monospace", NULL); column = gtk_tree_view_column_new_with_attributes(_("Description"), renderer, "text", COLUMN_DESCRIPTION, "background", COLUMN_COLOR, NULL); gtk_tree_view_append_column(tree_view, column); } static void setup_tree_view (GtkBox *box, CutGtkUI *ui) { GtkWidget *tree_view, *scrolled_window; GtkTreeStore *tree_store; scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(box, scrolled_window, TRUE, TRUE, 0); tree_store = gtk_tree_store_new(N_COLUMN, G_TYPE_STRING, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING); ui->logs = tree_store; tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(tree_store)); gtk_container_add(GTK_CONTAINER(scrolled_window), tree_view); ui->tree_view = GTK_TREE_VIEW(tree_view); setup_tree_view_columns(ui->tree_view); } static void setup_statusbar (GtkBox *box, CutGtkUI *ui) { GtkWidget *statusbar; statusbar = gtk_statusbar_new(); gtk_box_pack_start(box, statusbar, FALSE, FALSE, 0); ui->statusbar = GTK_STATUSBAR(statusbar); } static gboolean cb_destroy (GtkWidget *widget, gpointer data) { CutGtkUI *ui = data; ui->window = NULL; gtk_main_quit(); return TRUE; } static gboolean cb_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer data) { if (event->state == GDK_CONTROL_MASK && event->keyval == GDK_q) { gtk_widget_destroy(widget); return TRUE; } return FALSE; } static void setup_window (CutGtkUI *ui) { GtkWidget *window, *vbox; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 600, 500); gtk_window_set_title(GTK_WINDOW(window), "Cutter"); g_signal_connect(window, "destroy", G_CALLBACK(cb_destroy), ui); g_signal_connect(window, "key-press-event", G_CALLBACK(cb_key_press_event), NULL); ui->window = window; vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); setup_top_bar(GTK_BOX(vbox), ui); setup_summary_label(GTK_BOX(vbox), ui); setup_tree_view(GTK_BOX(vbox), ui); setup_statusbar(GTK_BOX(vbox), ui); gtk_window_set_focus(GTK_WINDOW(window), GTK_WIDGET(ui->tree_view)); } static void init (CutGtkUI *ui) { ui->run_context = NULL; ui->n_tests = 0; ui->n_completed_tests = 0; ui->status = CUT_TEST_RESULT_SUCCESS; ui->update_pulse_id = 0; setup_window(ui); } static void listener_init (CutListenerClass *listener) { listener->attach_to_run_context = attach_to_run_context; listener->detach_from_run_context = detach_from_run_context; } static void ui_init (CutUIClass *ui) { ui->run = run; } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutGtkUIClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutGtkUI), 0, (GInstanceInitFunc) init, }; static const GInterfaceInfo ui_info = { (GInterfaceInitFunc) ui_init, NULL, NULL }; static const GInterfaceInfo listener_info = { (GInterfaceInitFunc) listener_init, NULL, NULL }; cut_type_gtk_ui = g_type_module_register_type(type_module, G_TYPE_OBJECT, "CutGtkUI", &info, 0); g_type_module_add_interface(type_module, cut_type_gtk_ui, CUT_TYPE_UI, &ui_info); g_type_module_add_interface(type_module, cut_type_gtk_ui, CUT_TYPE_LISTENER, &listener_info); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_gtk_ui) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_gtk_ui)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_GTK_UI, first_property, var_args); } static void dispose (GObject *object) { CutGtkUI *ui = CUT_GTK_UI(object); if (ui->update_pulse_id) { g_source_remove(ui->update_pulse_id); ui->update_pulse_id = 0; } if (ui->logs) { g_object_unref(ui->logs); ui->logs = NULL; } if (ui->window) { gtk_widget_destroy(ui->window); ui->window = NULL; } if (ui->run_context) { g_object_unref(ui->run_context); ui->run_context = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { switch (prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { switch (prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static const gchar * status_to_color (CutTestResultStatus status, gboolean only_if_not_success) { const gchar *color = "white"; switch (status) { case CUT_TEST_RESULT_SUCCESS: if (only_if_not_success) color = NULL; else color = "light green"; break; case CUT_TEST_RESULT_NOTIFICATION: color = "light blue"; break; case CUT_TEST_RESULT_OMISSION: color = "blue"; break; case CUT_TEST_RESULT_PENDING: color = "yellow"; break; case CUT_TEST_RESULT_FAILURE: color = "red"; break; case CUT_TEST_RESULT_ERROR: color = "purple"; break; case CUT_TEST_RESULT_CRASH: color = "red"; break; default: break; } return color; } static GdkPixbuf * get_status_icon (GtkTreeView *tree_view, CutTestResultStatus status) { GdkPixbuf *icon; const gchar *stock_id = ""; switch (status) { case CUT_TEST_RESULT_SUCCESS: stock_id = GTK_STOCK_APPLY; break; case CUT_TEST_RESULT_NOTIFICATION: stock_id = GTK_STOCK_DIALOG_WARNING; break; case CUT_TEST_RESULT_OMISSION: stock_id = GTK_STOCK_DIALOG_ERROR; break; case CUT_TEST_RESULT_PENDING: stock_id = GTK_STOCK_DIALOG_ERROR; break; case CUT_TEST_RESULT_FAILURE: stock_id = GTK_STOCK_STOP; break; case CUT_TEST_RESULT_ERROR: stock_id = GTK_STOCK_CANCEL; break; case CUT_TEST_RESULT_CRASH: stock_id = GTK_STOCK_STOP; break; default: stock_id = GTK_STOCK_INFO; break; } icon = gtk_widget_render_icon(GTK_WIDGET(tree_view), stock_id, GTK_ICON_SIZE_MENU, NULL); return icon; } static gchar * generate_summary_message (CutRunContext *run_context) { guint n_tests, n_assertions, n_failures, n_errors; guint n_pendings, n_notifications, n_omissions; n_tests = cut_run_context_get_n_tests(run_context); n_assertions = cut_run_context_get_n_assertions(run_context); n_failures = cut_run_context_get_n_failures(run_context); n_errors = cut_run_context_get_n_errors(run_context); n_pendings = cut_run_context_get_n_pendings(run_context); n_notifications = cut_run_context_get_n_notifications(run_context); n_omissions = cut_run_context_get_n_omissions(run_context); return g_strdup_printf(_("%d test(s), %d assertion(s), %d failure(s), " "%d error(s), %d pending(s), %d omission(s), " "%d notification(s)"), n_tests, n_assertions, n_failures, n_errors, n_pendings, n_omissions, n_notifications); } static gchar * generate_short_summary_message (CutRunContext *run_context) { guint n_tests, n_assertions, n_failures, n_errors; guint n_pendings, n_notifications, n_omissions; n_tests = cut_run_context_get_n_tests(run_context); n_assertions = cut_run_context_get_n_assertions(run_context); n_failures = cut_run_context_get_n_failures(run_context); n_errors = cut_run_context_get_n_errors(run_context); n_pendings = cut_run_context_get_n_pendings(run_context); n_notifications = cut_run_context_get_n_notifications(run_context); n_omissions = cut_run_context_get_n_omissions(run_context); return g_strdup_printf(_("%dT:%dA:%dF:%d:E:%dP:%dO:%dN"), n_tests, n_assertions, n_failures, n_errors, n_pendings, n_omissions, n_notifications); } static void update_button_sensitive (CutGtkUI *ui) { gtk_widget_set_sensitive(ui->cancel_button, ui->running); gtk_widget_set_sensitive(ui->restart_button, !ui->running); } static void update_progress_color (GtkProgressBar *bar, CutTestResultStatus status) { GtkStyle *style; style = gtk_style_new(); gdk_color_parse(status_to_color(status, FALSE), &(style->bg[GTK_STATE_PRELIGHT])); gtk_widget_set_style(GTK_WIDGET(bar), style); g_object_unref(style); } static gboolean timeout_cb_pulse (gpointer data) { CutGtkUI *ui = data; GtkProgressBar *bar; gboolean running; guint n_tests, n_completed_tests; running = ui->running; n_tests = ui->n_tests; n_completed_tests = ui->n_completed_tests; bar = ui->progress_bar; update_progress_color(bar, ui->status); if (n_tests > 0) { gdouble fraction; gchar *text; fraction = n_completed_tests / (gdouble)n_tests; gtk_progress_bar_set_fraction(ui->progress_bar, fraction); text = g_strdup_printf(_("%u/%u (%u%%): %.1fs"), n_completed_tests, n_tests, (guint)(fraction * 100), cut_run_context_get_elapsed(ui->run_context)); gtk_progress_bar_set_text(bar, text); g_free(text); } else { gtk_progress_bar_pulse(bar); } if (!running) ui->update_pulse_id = 0; return running; } static void push_start_test_suite_message (CutGtkUI *ui, CutTestSuite *test_suite) { guint context_id; gchar *message; context_id = gtk_statusbar_get_context_id(ui->statusbar, "test-suite"); message = g_strdup_printf(_("Staring test suite %s..."), cut_test_get_name(CUT_TEST(test_suite))); gtk_statusbar_push(ui->statusbar, context_id, message); g_free(message); } static void cb_ready_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, guint n_test_cases, guint n_tests, CutGtkUI *ui) { ui->running = TRUE; ui->n_tests = n_tests; ui->update_pulse_id = g_timeout_add(10, timeout_cb_pulse, ui); update_button_sensitive(ui); push_start_test_suite_message(ui, test_suite); } typedef struct _TestCaseRowInfo { CutGtkUI *ui; CutTestCase *test_case; gchar *path; guint n_tests; guint n_completed_tests; CutTestResultStatus status; } TestCaseRowInfo; typedef struct TestRowInfo { TestCaseRowInfo *test_case_row_info; CutTest *test; gchar *path; gint pulse; guint update_pulse_id; CutTestResultStatus status; } TestRowInfo; static gboolean idle_cb_free_test_case_row_info (gpointer data) { TestCaseRowInfo *info = data; CutGtkUI *ui; GtkTreeIter iter; ui = info->ui; if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ui->logs), &iter, info->path)) { GdkPixbuf *icon; icon = get_status_icon(ui->tree_view, info->status); gtk_tree_store_set(ui->logs, &iter, COLUMN_STATUS_ICON, icon, -1); g_object_unref(icon); } g_object_unref(info->ui); g_object_unref(info->test_case); g_free(info->path); g_free(info); return FALSE; } static gboolean idle_cb_free_test_row_info (gpointer data) { TestRowInfo *info = data; CutGtkUI *ui; GtkTreeIter iter; if (info->update_pulse_id) { g_source_remove(info->update_pulse_id); info->update_pulse_id = 0; } ui = info->test_case_row_info->ui; if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ui->logs), &iter, info->path)) { gtk_tree_store_set(ui->logs, &iter, COLUMN_PROGRESS_VISIBLE, FALSE, COLUMN_PROGRESS_PULSE, -1, -1); } g_object_unref(info->test); g_free(info->path); g_free(info); return FALSE; } static void update_status (TestRowInfo *info, CutTestResultStatus status) { TestCaseRowInfo *test_case_row_info; CutGtkUI *ui; info->status = status; test_case_row_info = info->test_case_row_info; ui = test_case_row_info->ui; if (test_case_row_info->status < status) test_case_row_info->status = status; if (ui->status < status) ui->status = status; } static gboolean idle_cb_append_test_case_row (gpointer data) { TestCaseRowInfo *info = data; CutGtkUI *ui; CutTestCase *test_case; GtkTreeIter iter; ui = info->ui; test_case = info->test_case; gtk_tree_store_append(ui->logs, &iter, NULL); gtk_tree_store_set(ui->logs, &iter, COLUMN_NAME, cut_test_get_name(CUT_TEST(test_case)), COLUMN_DESCRIPTION, cut_test_get_description(CUT_TEST(test_case)), COLUMN_PROGRESS_PULSE, -1, COLUMN_PROGRESS_VISIBLE, TRUE, -1); info->path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(ui->logs), &iter); return FALSE; } static gboolean idle_cb_update_test_case_row (gpointer data) { TestCaseRowInfo *info = data; CutGtkUI *ui; GtkTreeIter iter; ui = info->ui; if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ui->logs), &iter, info->path)) { gdouble fraction; gint percent; gchar *text; GdkPixbuf *icon; fraction = info->n_completed_tests / (gdouble)info->n_tests; percent = (gint)(fraction * 100); text = g_strdup_printf("%d/%d (%d%%)", info->n_completed_tests, info->n_tests, percent); icon = get_status_icon(ui->tree_view, info->status); gtk_tree_store_set(ui->logs, &iter, COLUMN_PROGRESS_TEXT, text, COLUMN_PROGRESS_VALUE, percent, COLUMN_STATUS_ICON, icon, COLUMN_COLOR, status_to_color(info->status, TRUE), -1); g_free(text); g_object_unref(icon); } return FALSE; } static gboolean timeout_cb_pulse_test (gpointer data) { TestRowInfo *info = data; TestCaseRowInfo *test_case_row_info; CutGtkUI *ui; GtkTreeIter iter; test_case_row_info = info->test_case_row_info; ui = test_case_row_info->ui; info->pulse++; if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ui->logs), &iter, info->path)) { gtk_tree_store_set(ui->logs, &iter, COLUMN_PROGRESS_PULSE, info->pulse, -1); } #if 0 if (!ui->running) { g_idle_add(idle_cb_free_test_row_info, info); g_idle_add(idle_cb_free_test_case_row_info, test_case_row_info); } #endif return ui->running; } static gboolean idle_cb_append_test_row (gpointer data) { TestRowInfo *info = data; CutGtkUI *ui; CutTest *test; GtkTreeIter test_case_iter, iter; ui = info->test_case_row_info->ui; test = info->test; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ui->logs), &test_case_iter, info->test_case_row_info->path); gtk_tree_store_append(ui->logs, &iter, &test_case_iter); gtk_tree_store_set(ui->logs, &iter, COLUMN_PROGRESS_PULSE, 0, COLUMN_PROGRESS_VISIBLE, TRUE, COLUMN_NAME, cut_test_get_name(test), COLUMN_DESCRIPTION, cut_test_get_description(test), -1); /* Always expand running test case row. Is it OK? */ if (TRUE || info->status == CUT_TEST_RESULT_SUCCESS) { GtkTreePath *path; path = gtk_tree_model_get_path(GTK_TREE_MODEL(ui->logs), &iter); gtk_tree_view_expand_to_path(ui->tree_view, path); gtk_tree_view_scroll_to_cell(ui->tree_view, path, NULL, TRUE, 0, 0.5); gtk_tree_path_free(path); } info->path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(ui->logs), &iter); info->update_pulse_id = g_timeout_add(10, timeout_cb_pulse_test, info); return FALSE; } static gboolean idle_cb_update_test_row_status (gpointer data) { TestRowInfo *info = data; CutGtkUI *ui; GtkTreeIter iter; ui = info->test_case_row_info->ui; if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ui->logs), &iter, info->path)) { GdkPixbuf *icon; icon = get_status_icon(ui->tree_view, info->status); gtk_tree_store_set(ui->logs, &iter, COLUMN_STATUS_ICON, icon, COLUMN_PROGRESS_VISIBLE, FALSE, COLUMN_COLOR, status_to_color(info->status, TRUE), -1); g_object_unref(icon); if (info->status != CUT_TEST_RESULT_SUCCESS) { GtkTreePath *path; path = gtk_tree_model_get_path(GTK_TREE_MODEL(ui->logs), &iter); gtk_tree_view_expand_to_path(ui->tree_view, path); gtk_tree_view_scroll_to_cell(ui->tree_view, path, NULL, TRUE, 0, 0.5); gtk_tree_path_free(path); } } return FALSE; } typedef struct _TestResultRowInfo { TestRowInfo *test_row_info; CutTestResult *result; } TestResultRowInfo; static void append_test_result_row (CutGtkUI *ui, CutTestResult *result, GtkTreeIter *test_row_iter, GtkTreeIter *result_row_iter) { CutTestResultStatus status; const GList *node; GString *name; const gchar *message; GdkPixbuf *icon; status = cut_test_result_get_status(result); message = cut_test_result_get_message(result); name = g_string_new(NULL); for (node = cut_test_result_get_backtrace(result); node; node = g_list_next(node)) { CutBacktraceEntry *entry = node->data; cut_backtrace_entry_format_string(entry, name); if (g_list_next(node)) g_string_append(name, "\n"); } icon = get_status_icon(ui->tree_view, status); gtk_tree_store_append(ui->logs, result_row_iter, test_row_iter); gtk_tree_store_set(ui->logs, result_row_iter, COLUMN_NAME, name->str, COLUMN_DESCRIPTION, message, COLUMN_STATUS_ICON, icon, COLUMN_COLOR, status_to_color(status, TRUE), -1); g_string_free(name, TRUE); g_object_unref(icon); } static gboolean idle_cb_append_test_result_row (gpointer data) { TestResultRowInfo *info = data; CutTestResult *result; CutGtkUI *ui; GtkTreeIter test_row_iter; gchar *test_row_path; ui = info->test_row_info->test_case_row_info->ui; result = info->result; test_row_path = info->test_row_info->path; if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ui->logs), &test_row_iter, test_row_path)) { GtkTreePath *path; GtkTreeIter iter; append_test_result_row(ui, result, &test_row_iter, &iter); path = gtk_tree_model_get_path(GTK_TREE_MODEL(ui->logs), &iter); gtk_tree_view_expand_to_path(ui->tree_view, path); gtk_tree_view_scroll_to_cell(ui->tree_view, path, NULL, TRUE, 0, 0.5); gtk_tree_path_free(path); } g_object_unref(result); g_free(info); return FALSE; } static void idle_add_append_test_result_row (TestRowInfo *info, CutTestResult *result) { TestResultRowInfo *result_row_info; result_row_info = g_new0(TestResultRowInfo, 1); result_row_info->test_row_info = info; result_row_info->result = g_object_ref(result); g_idle_add(idle_cb_append_test_result_row, result_row_info); } static gboolean idle_cb_update_summary (gpointer data) { CutGtkUI *ui = data; gchar *summary, *short_summary, *title; summary = generate_summary_message(ui->run_context); gtk_label_set_text(ui->summary, summary); g_free(summary); short_summary = generate_short_summary_message(ui->run_context); title = g_strdup_printf("%s - Cutter", short_summary); gtk_window_set_title(GTK_WINDOW(ui->window), title); g_free(short_summary); g_free(title); return FALSE; } static void cb_pass_assertion (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, gpointer data) { TestRowInfo *info = data; /* slow */ if (g_random_int_range(0, 1000) == 0) g_idle_add(idle_cb_update_summary, info->test_case_row_info->ui); } static void cb_success_test (CutRunContext *run_context, CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { TestRowInfo *info = data; if (info->status == -1) { info->status = CUT_TEST_RESULT_SUCCESS; g_idle_add(idle_cb_update_test_row_status, data); } } static void cb_failure_test (CutRunContext *run_context, CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { TestRowInfo *info = data; update_status(info, CUT_TEST_RESULT_FAILURE); g_idle_add(idle_cb_update_test_row_status, data); idle_add_append_test_result_row(info, result); } static void cb_error_test (CutRunContext *run_context, CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { TestRowInfo *info = data; update_status(info, CUT_TEST_RESULT_ERROR); g_idle_add(idle_cb_update_test_row_status, data); idle_add_append_test_result_row(info, result); } static void cb_pending_test (CutRunContext *run_context, CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { TestRowInfo *info = data; update_status(info, CUT_TEST_RESULT_PENDING); g_idle_add(idle_cb_update_test_row_status, data); idle_add_append_test_result_row(info, result); } static void cb_notification_test (CutRunContext *run_context, CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { TestRowInfo *info = data; update_status(info, CUT_TEST_RESULT_NOTIFICATION); g_idle_add(idle_cb_update_test_row_status, data); idle_add_append_test_result_row(info, result); } static void cb_omission_test (CutRunContext *run_context, CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { TestRowInfo *info = data; update_status(info, CUT_TEST_RESULT_OMISSION); g_idle_add(idle_cb_update_test_row_status, data); idle_add_append_test_result_row(info, result); } static void cb_crash_test (CutRunContext *run_context, CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { TestRowInfo *info = data; update_status(info, CUT_TEST_RESULT_CRASH); g_idle_add(idle_cb_update_test_row_status, data); idle_add_append_test_result_row(info, result); } static gboolean idle_cb_push_running_test_message (gpointer data) { TestRowInfo *info = data; CutGtkUI *ui; guint context_id; gchar *message; ui = info->test_case_row_info->ui; context_id = gtk_statusbar_get_context_id(ui->statusbar, "test"); message = g_strdup_printf(_("Running test: %s"), cut_test_get_name(info->test)); gtk_statusbar_push(ui->statusbar, context_id, message); g_free(message); return FALSE; } static gboolean idle_cb_pop_running_test_message (gpointer data) { TestRowInfo *info = data; CutGtkUI *ui; guint context_id; ui = info->test_case_row_info->ui; context_id = gtk_statusbar_get_context_id(ui->statusbar, "test"); gtk_statusbar_pop(ui->statusbar, context_id); return FALSE; } static void cb_complete_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, gboolean success, gpointer data) { TestRowInfo *info = data; TestCaseRowInfo *test_case_row_info; CutGtkUI *ui; test_case_row_info = info->test_case_row_info; ui = test_case_row_info->ui; ui->n_completed_tests++; test_case_row_info->n_completed_tests++; g_idle_add(idle_cb_update_summary, ui); g_idle_add(idle_cb_update_test_case_row, info->test_case_row_info); g_idle_add(idle_cb_pop_running_test_message, info); g_idle_add(idle_cb_free_test_row_info, info); #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(run_context, \ G_CALLBACK(cb_ ## name), \ data) DISCONNECT(pass_assertion); DISCONNECT(success_test); DISCONNECT(failure_test); DISCONNECT(error_test); DISCONNECT(pending_test); DISCONNECT(notification_test); DISCONNECT(omission_test); DISCONNECT(crash_test); DISCONNECT(complete_test); #undef DISCONNECT } static void cb_start_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, gpointer data) { TestRowInfo *info; info = g_new0(TestRowInfo, 1); info->test_case_row_info = data; info->test = g_object_ref(test); info->path = NULL; info->status = -1; info->pulse = 0; info->update_pulse_id = 0; g_idle_add(idle_cb_push_running_test_message, info); g_idle_add(idle_cb_append_test_row, info); #define CONNECT(name) \ g_signal_connect(run_context, #name, G_CALLBACK(cb_ ## name), info) CONNECT(pass_assertion); CONNECT(success_test); CONNECT(failure_test); CONNECT(error_test); CONNECT(pending_test); CONNECT(notification_test); CONNECT(omission_test); CONNECT(crash_test); CONNECT(complete_test); #undef CONNECT } static gboolean idle_cb_collapse_test_case_row (gpointer data) { TestCaseRowInfo *info = data; CutGtkUI *ui; GtkTreeIter iter; ui = info->ui; if (info->status == CUT_TEST_RESULT_SUCCESS && gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ui->logs), &iter, info->path)) { GtkTreePath *path; path = gtk_tree_model_get_path(GTK_TREE_MODEL(ui->logs), &iter); gtk_tree_view_collapse_row(ui->tree_view, path); gtk_tree_path_free(path); } return FALSE; } static void cb_complete_test_case (CutRunContext *run_context, CutTestCase *test_case, gboolean success, gpointer data) { TestCaseRowInfo *info = data; g_idle_add(idle_cb_update_summary, info->ui); g_idle_add(idle_cb_collapse_test_case_row, data); g_idle_add(idle_cb_free_test_case_row_info, data); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_start_test), data); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_complete_test_case), data); } static void cb_ready_test_case (CutRunContext *run_context, CutTestCase *test_case, guint n_tests, CutGtkUI *ui) { TestCaseRowInfo *info; info = g_new0(TestCaseRowInfo, 1); info->ui = g_object_ref(ui); info->test_case = g_object_ref(test_case); info->path = NULL; info->n_tests = n_tests; info->n_completed_tests = 0; info->status = CUT_TEST_RESULT_SUCCESS; g_idle_add(idle_cb_append_test_case_row, info); g_signal_connect(run_context, "start-test", G_CALLBACK(cb_start_test), info); g_signal_connect(run_context, "complete-test-case", G_CALLBACK(cb_complete_test_case), info); } static void push_complete_test_suite_message (CutGtkUI *ui) { guint context_id; gchar *message, *summary; context_id = gtk_statusbar_get_context_id(ui->statusbar, "test-suite"); summary = generate_summary_message(ui->run_context); message = g_strdup_printf(_("Finished in %0.1f seconds: %s"), cut_run_context_get_elapsed(ui->run_context), summary); g_free(summary); gtk_statusbar_pop(ui->statusbar, context_id); gtk_statusbar_push(ui->statusbar, context_id, message); g_free(message); } static void cb_complete_run (CutRunContext *run_context, gboolean success, CutGtkUI *ui) { ui->running = FALSE; update_button_sensitive(ui); } static void cb_complete_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, gboolean success, CutGtkUI *ui) { push_complete_test_suite_message(ui); } static void cb_error (CutRunContext *run_context, const gchar *name, const gchar *detail, CutGtkUI *ui) { g_print("SystemError: %s: %s\n", name, detail); } static void connect_to_run_context (CutGtkUI *ui, CutRunContext *run_context) { #define CONNECT(name) \ g_signal_connect(run_context, #name, G_CALLBACK(cb_ ## name), ui) CONNECT(ready_test_suite); CONNECT(ready_test_case); CONNECT(complete_test_suite); CONNECT(complete_run); CONNECT(error); #undef CONNECT } static void disconnect_from_run_context (CutGtkUI *ui, CutRunContext *run_context) { #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(run_context, \ G_CALLBACK(cb_ ## name), \ ui) DISCONNECT(ready_test_suite); DISCONNECT(ready_test_case); DISCONNECT(complete_test_suite); DISCONNECT(complete_run); DISCONNECT(error); #undef DISCONNECT } static void attach_to_run_context (CutListener *listener, CutRunContext *run_context) { connect_to_run_context(CUT_GTK_UI(listener), run_context); } static void detach_from_run_context (CutListener *listener, CutRunContext *run_context) { disconnect_from_run_context(CUT_GTK_UI(listener), run_context); } static gboolean run (CutUI *ui, CutRunContext *run_context) { CutGtkUI *gtk_ui = CUT_GTK_UI(ui); CutRunContext *pipeline; pipeline = cut_pipeline_new_from_run_context(run_context); gtk_ui->run_context = pipeline; gtk_widget_show_all(gtk_ui->window); gtk_tree_store_clear(gtk_ui->logs); gtk_ui->n_tests = 0; gtk_ui->n_completed_tests = 0; gtk_ui->status = CUT_TEST_RESULT_SUCCESS; cut_run_context_add_listener(pipeline, CUT_LISTENER(ui)); cut_run_context_start(pipeline); gtk_main(); return TRUE; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/ui/cut-gtk-ui-factory.c0000644000175000017500000001333111205747030022356 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #include #include #include #define CUT_TYPE_GTK_UI_FACTORY cut_type_gtk_ui_factory #define CUT_GTK_UI_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_GTK_UI_FACTORY, CutGtkUIFactory)) #define CUT_GTK_UI_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_GTK_UI_FACTORY, CutGtkUIFactoryClass)) #define CUT_IS_GTK_UI_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_GTK_UI_FACTORY)) #define CUT_IS_GTK_UI_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_GTK_UI_FACTORY)) #define CUT_GTK_UI_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_GTK_UI_FACTORY, CutGtkUIFactoryClass)) typedef struct _CutGtkUIFactory CutGtkUIFactory; typedef struct _CutGtkUIFactoryClass CutGtkUIFactoryClass; struct _CutGtkUIFactory { CutModuleFactory object; }; struct _CutGtkUIFactoryClass { CutModuleFactoryClass parent_class; }; enum { PROP_0 }; static GType cut_type_gtk_ui_factory = 0; static CutModuleFactoryClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void set_option_group (CutModuleFactory *factory, GOptionContext *context); static GObject *create (CutModuleFactory *factory); static void class_init (CutModuleFactoryClass *klass) { GObjectClass *gobject_class; CutModuleFactoryClass *factory_class; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); factory_class = CUT_MODULE_FACTORY_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; factory_class->set_option_group = set_option_group; factory_class->create = create; } static void init (CutGtkUIFactory *gtk) { } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutGtkUIFactoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutGtkUIFactory), 0, (GInstanceInitFunc) init, }; cut_type_gtk_ui_factory = g_type_module_register_type(type_module, CUT_TYPE_MODULE_FACTORY, "CutGtkUIFactory", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_gtk_ui_factory) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_gtk_ui_factory)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_GTK_UI_FACTORY, first_property, var_args); } static void dispose (GObject *object) { G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { switch (prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { switch (prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void set_option_group (CutModuleFactory *factory, GOptionContext *context) { GOptionGroup *group; if (CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group) CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group(factory, context); group = gtk_get_option_group(TRUE); g_option_context_add_group(context, group); } GObject * create (CutModuleFactory *factory) { return G_OBJECT(cut_ui_new("gtk", NULL)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/stream/0000755000175000017500000000000011525707413017437 5ustar koukoucutter-testing-framework-1.1.7/module/stream/cut-xml-stream-factory.c0000644000175000017500000002706511277455712024152 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #include #include #include #include #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #define CUT_TYPE_XML_STREAM_FACTORY cut_type_xml_stream_factory #define CUT_XML_STREAM_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_XML_STREAM_FACTORY, CutXMLStreamFactory)) #define CUT_XML_STREAM_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_XML_STREAM_FACTORY, CutXMLStreamFactoryClass)) #define CUT_IS_XML_STREAM_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_XML_STREAM_FACTORY)) #define CUT_IS_XML_STREAM_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_XML_STREAM_FACTORY)) #define CUT_XML_STREAM_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_XML_STREAM_FACTORY, CutXMLStreamFactoryClass)) typedef struct _CutXMLStreamFactory CutXMLStreamFactory; typedef struct _CutXMLStreamFactoryClass CutXMLStreamFactoryClass; struct _CutXMLStreamFactory { CutModuleFactory object; gint fd; gchar *directory; }; struct _CutXMLStreamFactoryClass { CutModuleFactoryClass parent_class; }; enum { PROP_0, PROP_FD, PROP_DIRECTORY }; static GType cut_type_xml_stream_factory = 0; static CutModuleFactoryClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void set_option_group (CutModuleFactory *factory, GOptionContext *context); static GObject *create (CutModuleFactory *factory); static void class_init (CutModuleFactoryClass *klass) { CutModuleFactoryClass *factory_class; GObjectClass *gobject_class; GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); factory_class = CUT_MODULE_FACTORY_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; factory_class->set_option_group = set_option_group; factory_class->create = create; spec = g_param_spec_int("fd", "FD", "The FD of output stream", G_MININT32, G_MAXINT32, -1, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_FD, spec); spec = g_param_spec_string("directory", "Log Directory", "The directory of streamed files", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_DIRECTORY, spec); } static void init (CutXMLStreamFactory *factory) { factory->fd = -1; factory->directory = NULL; } static void dispose (GObject *object) { CutXMLStreamFactory *factory; factory = CUT_XML_STREAM_FACTORY(object); if (factory->directory) { g_free(factory->directory); factory->directory = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutXMLStreamFactory *factory; factory = CUT_XML_STREAM_FACTORY(object); switch (prop_id) { case PROP_FD: factory->fd = g_value_get_int(value); break; case PROP_DIRECTORY: if (factory->directory) g_free(factory->directory); factory->directory = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutXMLStreamFactory *factory; factory = CUT_XML_STREAM_FACTORY(object); switch (prop_id) { case PROP_FD: g_value_set_int(value, factory->fd); break; case PROP_DIRECTORY: g_value_set_string(value, factory->directory); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutXMLStreamFactoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutXMLStreamFactory), 0, (GInstanceInitFunc) init, }; cut_type_xml_stream_factory = g_type_module_register_type(type_module, CUT_TYPE_MODULE_FACTORY, "CutXMLStreamFactory", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_xml_stream_factory) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_xml_stream_factory)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_XML_STREAM_FACTORY, first_property, var_args); } static void set_option_group (CutModuleFactory *factory, GOptionContext *context) { CutXMLStreamFactory *xml = CUT_XML_STREAM_FACTORY(factory); GOptionGroup *group; GOptionEntry entries[] = { {NULL} }; if (CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group) CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group(factory, context); return; group = g_option_group_new(("xml-stream"), _("XML Stream Options"), _("Show XML stream options"), xml, NULL); g_option_group_add_entries(group, entries); g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); g_option_context_add_group(context, group); } typedef struct _StreamData StreamData; struct _StreamData { gboolean initialized; gint fd; gchar *directory; GList *channels; }; static StreamData * stream_data_new (gint fd, gchar *directory) { StreamData *data; data = g_slice_new(StreamData); data->initialized = FALSE; data->fd = fd; data->directory = g_strdup(directory); data->channels = NULL; return data; } static void stream_data_free (StreamData *data) { if (data->directory) g_free(data->directory); if (data->channels) { g_list_foreach(data->channels, (GFunc)g_io_channel_unref, NULL); g_list_free(data->channels); } g_slice_free(StreamData, data); } static GList * create_channels (StreamData *data, GError **error) { gint fd = -1; GList *channels = NULL; GIOChannel *channel; if (data->fd == -1 && !data->directory) fd = STDOUT_FILENO; else fd = data->fd; if (fd != -1) { #ifdef G_OS_WIN32 channel = g_io_channel_win32_new_fd(fd); #else channel = g_io_channel_unix_new(fd); #endif if (channel) { g_io_channel_set_close_on_unref(channel, TRUE); channels = g_list_prepend(channels, channel); } } if (data->directory) { gchar *file_name, *base_name; time_t now; struct tm *tm; time(&now); tm = gmtime(&now); base_name = g_strdup_printf("%04d-%02d-%02d-%02d-%02d-%02d.xml", 1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); file_name = g_build_filename(data->directory, base_name, NULL); g_mkdir_with_parents(data->directory, 0755); channel = g_io_channel_new_file(file_name, "w", error); if (channel) { g_io_channel_set_close_on_unref(channel, TRUE); channels = g_list_prepend(channels, channel); } g_free(base_name); g_free(file_name); } return channels; } static gboolean stream (const gchar *message, GError **error, gpointer user_data) { StreamData *data = user_data; GList *node; gsize length; if (!data->initialized) { data->channels = create_channels(data, error); data->initialized = TRUE; if (*error) return FALSE; } if (!data->channels) return FALSE; length = strlen(message); for (node = data->channels; node; node = g_list_next(node)) { GIOChannel *channel = node->data; gsize len, written; const gchar *snippet; len = length; written = 0; snippet = message; while (len > 0) { g_io_channel_write_chars(channel, snippet, len, &written, error); if (*error) break; snippet += written; len -= written; } g_io_channel_flush(channel, NULL); if (*error) break; } return *error == NULL; } GObject * create (CutModuleFactory *factory) { CutXMLStreamFactory *xml_factory; StreamData *data; xml_factory = CUT_XML_STREAM_FACTORY(factory); data = stream_data_new(xml_factory->fd, xml_factory->directory); return G_OBJECT(cut_stream_new("xml", "stream-function", stream, "stream-function-user-data", data, "stream-function-user-data-destroy-function", stream_data_free, NULL)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/stream/cut-xml-stream.c0000644000175000017500000006145511205747030022472 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #include #include #include #include #include #define CUT_TYPE_XML_STREAM cut_type_xml_stream #define CUT_XML_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_XML_STREAM, CutXMLStream)) #define CUT_XML_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_XML_STREAM, CutXMLStreamClass)) #define CUT_IS_XML_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_XML_STREAM)) #define CUT_IS_XML_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_XML_STREAM)) #define CUT_XML_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_XML_STREAM, CutXMLStreamClass)) typedef struct _CutXMLStream CutXMLStream; typedef struct _CutXMLStreamClass CutXMLStreamClass; struct _CutXMLStream { CutStream object; CutRunContext *run_context; GMutex *mutex; CutStreamFunction stream_function; gpointer stream_function_user_data; GDestroyNotify stream_function_user_data_destroy_function; }; struct _CutXMLStreamClass { CutStreamClass parent_class; }; enum { PROP_0, PROP_RUN_CONTEXT, PROP_STREAM_FUNCTION, PROP_STREAM_FUNCTION_USER_DATA, PROP_STREAM_FUNCTION_USER_DATA_DESTROY_FUNCTION }; static GType cut_type_xml_stream = 0; static CutStreamClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void attach_to_run_context (CutListener *listener, CutRunContext *run_context); static void detach_from_run_context (CutListener *listener, CutRunContext *run_context); static void class_init (CutXMLStreamClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; CutStreamClass *stream_class; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); stream_class = CUT_STREAM_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_object("cut-run-context", "CutRunContext object", "A CutRunContext object", CUT_TYPE_RUN_CONTEXT, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_RUN_CONTEXT, spec); spec = g_param_spec_pointer("stream-function", "Stream function", "A function to stream data", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_STREAM_FUNCTION, spec); spec = g_param_spec_pointer("stream-function-user-data", "Stream function user data", "A user data to use with stream function", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_STREAM_FUNCTION_USER_DATA, spec); spec = g_param_spec_pointer("stream-function-user-data-destroy-function", "Destroy function for stream function user data", "A function to destroy user data", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_STREAM_FUNCTION_USER_DATA_DESTROY_FUNCTION, spec); } static void init (CutXMLStream *stream) { stream->run_context = NULL; stream->mutex = g_mutex_new(); stream->stream_function = NULL; stream->stream_function_user_data = NULL; stream->stream_function_user_data_destroy_function = NULL; } static void listener_init (CutListenerClass *listener) { listener->attach_to_run_context = attach_to_run_context; listener->detach_from_run_context = detach_from_run_context; } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutXMLStreamClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutXMLStream), 0, (GInstanceInitFunc) init, }; static const GInterfaceInfo listener_info = { (GInterfaceInitFunc) listener_init, NULL, NULL }; cut_type_xml_stream = g_type_module_register_type(type_module, CUT_TYPE_STREAM, "CutXMLStream", &info, 0); g_type_module_add_interface(type_module, cut_type_xml_stream, CUT_TYPE_LISTENER, &listener_info); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_xml_stream) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_xml_stream)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_XML_STREAM, first_property, var_args); } static void dispose (GObject *object) { CutXMLStream *stream = CUT_XML_STREAM(object); if (stream->run_context) { g_object_unref(stream->run_context); stream->run_context = NULL; } if (stream->mutex) { g_mutex_free(stream->mutex); stream->mutex = NULL; } if (stream->stream_function_user_data) { if (stream->stream_function_user_data_destroy_function) stream->stream_function_user_data_destroy_function(stream->stream_function_user_data); stream->stream_function_user_data = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutXMLStream *stream = CUT_XML_STREAM(object); switch (prop_id) { case PROP_RUN_CONTEXT: attach_to_run_context(CUT_LISTENER(stream), CUT_RUN_CONTEXT(g_value_get_object(value))); break; case PROP_STREAM_FUNCTION: stream->stream_function = g_value_get_pointer(value); break; case PROP_STREAM_FUNCTION_USER_DATA: stream->stream_function_user_data = g_value_get_pointer(value); break; case PROP_STREAM_FUNCTION_USER_DATA_DESTROY_FUNCTION: stream->stream_function_user_data_destroy_function = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutXMLStream *stream = CUT_XML_STREAM(object); switch (prop_id) { case PROP_RUN_CONTEXT: g_value_set_object(value, G_OBJECT(stream->run_context)); break; case PROP_STREAM_FUNCTION: g_value_set_pointer(value, stream->stream_function); break; case PROP_STREAM_FUNCTION_USER_DATA: g_value_set_pointer(value, stream->stream_function_user_data); break; case PROP_STREAM_FUNCTION_USER_DATA_DESTROY_FUNCTION: g_value_set_pointer(value, stream->stream_function_user_data_destroy_function); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void flow (CutXMLStream *stream, const gchar *format, ...) { GError *error = NULL; gchar *message; va_list va_args; if (!stream->stream_function) return; va_start(va_args, format); message = g_strdup_vprintf(format, va_args); va_end(va_args); g_mutex_lock(stream->mutex); stream->stream_function(message, &error, stream->stream_function_user_data); g_mutex_unlock(stream->mutex); if (error) { g_warning("WriteError: %s:%d: %s", g_quark_to_string(error->domain), error->code, error->message); g_error_free(error); } g_free(message); } static void cb_start_run (CutRunContext *run_context, CutXMLStream *stream) { flow(stream, "\n"); } static void cb_ready_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, guint n_test_cases, guint n_tests, CutXMLStream *stream) { GString *string; gchar *str; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_suite), string, 4); str = g_strdup_printf("%d", n_test_cases); cut_utils_append_xml_element_with_value(string, 4, "n-test-cases", str); g_free(str); str = g_strdup_printf("%d", n_tests); cut_utils_append_xml_element_with_value(string, 4, "n-tests", str); g_free(str); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_start_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_suite), string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_ready_test_case (CutRunContext *run_context, CutTestCase *test_case, guint n_tests, CutXMLStream *stream) { GString *string; gchar *str; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_case), string, 4); str = g_strdup_printf("%d", n_tests); cut_utils_append_xml_element_with_value(string, 4, "n-tests", str); g_free(str); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_start_test_case (CutRunContext *run_context, CutTestCase *test_case, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_case), string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_ready_test_iterator (CutRunContext *run_context, CutTestIterator *test_iterator, guint n_tests, CutXMLStream *stream) { GString *string; gchar *str; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_iterator), string, 4); str = g_strdup_printf("%d", n_tests); cut_utils_append_xml_element_with_value(string, 4, "n-tests", str); g_free(str); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_start_test_iterator (CutRunContext *run_context, CutTestIterator *test_iterator, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_iterator), string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_start_iterated_test (CutRunContext *run_context, CutIteratedTest *iterated_test, CutTestContext *test_context, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(iterated_test), string, 4); cut_test_context_to_xml_string(test_context, string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_start_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(test, string, 4); cut_test_context_to_xml_string(test_context, string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_pass_assertion (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(test, string, 4); cut_test_context_to_xml_string(test_context, string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_test_result (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(test, string, 4); cut_test_context_to_xml_string(test_context, string, 4); cut_test_result_to_xml_string(result, string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_complete_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, gboolean success, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(test, string, 4); if (test_context) cut_test_context_to_xml_string(test_context, string, 4); cut_utils_append_xml_element_with_boolean_value(string, 4, "success", success); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_complete_iterated_test (CutRunContext *run_context, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(iterated_test), string, 4); cut_test_context_to_xml_string(test_context, string, 4); cut_utils_append_xml_element_with_boolean_value(string, 4, "success", success); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_test_iterator_result (CutRunContext *run_context, CutTestIterator *test_iterator, CutTestResult *result, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_iterator), string, 4); cut_test_result_to_xml_string(result, string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_complete_test_iterator (CutRunContext *run_context, CutTestIterator *test_iterator, gboolean success, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_iterator), string, 4); cut_utils_append_xml_element_with_boolean_value(string, 4, "success", success); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_test_case_result (CutRunContext *run_context, CutTestCase *test_case, CutTestResult *result, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_case), string, 4); cut_test_result_to_xml_string(result, string, 4); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_complete_test_case (CutRunContext *run_context, CutTestCase *test_case, gboolean success, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_case), string, 4); cut_utils_append_xml_element_with_boolean_value(string, 4, "success", success); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_complete_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, gboolean success, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); g_string_append(string, " \n"); cut_test_to_xml_string(CUT_TEST(test_suite), string, 4); cut_utils_append_xml_element_with_boolean_value(string, 4, "success", success); g_string_append(string, " \n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void cb_complete_run (CutRunContext *run_context, gboolean success, CutXMLStream *stream) { GString *string; string = g_string_new(NULL); cut_utils_append_xml_element_with_boolean_value(string, 2, "success", success); g_string_append(string, "\n"); flow(stream, "%s", string->str); g_string_free(string, TRUE); } static void connect_to_run_context (CutXMLStream *stream, CutRunContext *run_context) { #define CONNECT(name) \ g_signal_connect(run_context, #name, G_CALLBACK(cb_ ## name), stream) #define CONNECT_TO_TEST(name) \ g_signal_connect(run_context, #name "_test", \ G_CALLBACK(cb_test_result), stream) #define CONNECT_TO_TEST_CASE(name) \ g_signal_connect(run_context, #name "_test_case", \ G_CALLBACK(cb_test_case_result), stream) #define CONNECT_TO_TEST_ITERATOR(name) \ g_signal_connect(run_context, #name "_test_iterator", \ G_CALLBACK(cb_test_iterator_result), stream) CONNECT(start_run); CONNECT(ready_test_suite); CONNECT(start_test_suite); CONNECT(ready_test_case); CONNECT(start_test_case); CONNECT(ready_test_iterator); CONNECT(start_test_iterator); CONNECT(start_iterated_test); CONNECT(start_test); CONNECT(pass_assertion); CONNECT_TO_TEST(success); CONNECT_TO_TEST(failure); CONNECT_TO_TEST(error); CONNECT_TO_TEST(pending); CONNECT_TO_TEST(notification); CONNECT_TO_TEST(omission); CONNECT_TO_TEST(crash); CONNECT_TO_TEST_ITERATOR(success); CONNECT_TO_TEST_ITERATOR(failure); CONNECT_TO_TEST_ITERATOR(error); CONNECT_TO_TEST_ITERATOR(pending); CONNECT_TO_TEST_ITERATOR(notification); CONNECT_TO_TEST_ITERATOR(omission); CONNECT_TO_TEST_ITERATOR(crash); CONNECT_TO_TEST_CASE(success); CONNECT_TO_TEST_CASE(failure); CONNECT_TO_TEST_CASE(error); CONNECT_TO_TEST_CASE(pending); CONNECT_TO_TEST_CASE(notification); CONNECT_TO_TEST_CASE(omission); CONNECT_TO_TEST_CASE(crash); CONNECT(complete_test); CONNECT(complete_iterated_test); CONNECT(complete_test_iterator); CONNECT(complete_test_case); CONNECT(complete_test_suite); CONNECT(complete_run); #undef CONNECT } static void disconnect_from_run_context (CutXMLStream *stream, CutRunContext *run_context) { #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(run_context, \ G_CALLBACK(cb_ ## name), \ stream) DISCONNECT(start_run); DISCONNECT(ready_test_suite); DISCONNECT(start_test_suite); DISCONNECT(ready_test_case); DISCONNECT(start_test_case); DISCONNECT(ready_test_iterator); DISCONNECT(start_test_iterator); DISCONNECT(start_iterated_test); DISCONNECT(start_test); DISCONNECT(pass_assertion); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_test_result), stream); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_test_iterator_result), stream); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_test_case_result), stream); DISCONNECT(complete_test); DISCONNECT(complete_iterated_test); DISCONNECT(complete_test_iterator); DISCONNECT(complete_test_case); DISCONNECT(complete_test_suite); DISCONNECT(complete_run); #undef DISCONNECT } static void attach_to_run_context (CutListener *listener, CutRunContext *run_context) { CutXMLStream *stream = CUT_XML_STREAM(listener); if (stream->run_context) detach_from_run_context(listener, stream->run_context); if (run_context) { stream->run_context = g_object_ref(run_context); connect_to_run_context(CUT_XML_STREAM(listener), run_context); } } static void detach_from_run_context (CutListener *listener, CutRunContext *run_context) { CutXMLStream *stream = CUT_XML_STREAM(listener); if (stream->run_context != run_context) return; disconnect_from_run_context(stream, run_context); g_object_unref(stream->run_context); stream->run_context = NULL; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/stream/Makefile.in0000644000175000017500000006247611525654634021531 0ustar koukou# 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@ 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@ subdir = module/stream DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(stream_factory_moduledir)" \ "$(DESTDIR)$(stream_moduledir)" LTLIBRARIES = $(stream_factory_module_LTLIBRARIES) \ $(stream_module_LTLIBRARIES) xml_la_LIBADD = am_xml_la_OBJECTS = xml_la-cut-xml-stream.lo xml_la_OBJECTS = $(am_xml_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent xml_factory_la_LIBADD = am_xml_factory_la_OBJECTS = xml_factory_la-cut-xml-stream-factory.lo xml_factory_la_OBJECTS = $(am_xml_factory_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(xml_la_SOURCES) $(xml_factory_la_SOURCES) DIST_SOURCES = $(xml_la_SOURCES) $(xml_factory_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(GLIB_LIBS) \ $(top_builddir)/cutter/libcutter.la LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) AM_CFLAGS = \ $(GLIB_CFLAGS) \ $(COVERAGE_CFLAGS) AM_LDFLAGS = \ -avoid-version -module \ -no-undefined -export-dynamic $(LIBTOOL_EXPORT_OPTIONS) stream_module_LTLIBRARIES = \ xml.la stream_factory_module_LTLIBRARIES = \ xml_factory.la xml_la_CPPFLAGS = xml_la_SOURCES = cut-xml-stream.c xml_factory_la_CPPFLAGS = xml_factory_la_SOURCES = cut-xml-stream-factory.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign module/stream/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign module/stream/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-stream_factory_moduleLTLIBRARIES: $(stream_factory_module_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(stream_factory_moduledir)" || $(MKDIR_P) "$(DESTDIR)$(stream_factory_moduledir)" @list='$(stream_factory_module_LTLIBRARIES)'; test -n "$(stream_factory_moduledir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(stream_factory_moduledir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(stream_factory_moduledir)"; \ } uninstall-stream_factory_moduleLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(stream_factory_module_LTLIBRARIES)'; test -n "$(stream_factory_moduledir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(stream_factory_moduledir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(stream_factory_moduledir)/$$f"; \ done clean-stream_factory_moduleLTLIBRARIES: -test -z "$(stream_factory_module_LTLIBRARIES)" || rm -f $(stream_factory_module_LTLIBRARIES) @list='$(stream_factory_module_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done install-stream_moduleLTLIBRARIES: $(stream_module_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(stream_moduledir)" || $(MKDIR_P) "$(DESTDIR)$(stream_moduledir)" @list='$(stream_module_LTLIBRARIES)'; test -n "$(stream_moduledir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(stream_moduledir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(stream_moduledir)"; \ } uninstall-stream_moduleLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(stream_module_LTLIBRARIES)'; test -n "$(stream_moduledir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(stream_moduledir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(stream_moduledir)/$$f"; \ done clean-stream_moduleLTLIBRARIES: -test -z "$(stream_module_LTLIBRARIES)" || rm -f $(stream_module_LTLIBRARIES) @list='$(stream_module_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done xml.la: $(xml_la_OBJECTS) $(xml_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(stream_moduledir) $(xml_la_OBJECTS) $(xml_la_LIBADD) $(LIBS) xml_factory.la: $(xml_factory_la_OBJECTS) $(xml_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(stream_factory_moduledir) $(xml_factory_la_OBJECTS) $(xml_factory_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_factory_la-cut-xml-stream-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_la-cut-xml-stream.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< xml_la-cut-xml-stream.lo: cut-xml-stream.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_la-cut-xml-stream.lo -MD -MP -MF $(DEPDIR)/xml_la-cut-xml-stream.Tpo -c -o xml_la-cut-xml-stream.lo `test -f 'cut-xml-stream.c' || echo '$(srcdir)/'`cut-xml-stream.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xml_la-cut-xml-stream.Tpo $(DEPDIR)/xml_la-cut-xml-stream.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-xml-stream.c' object='xml_la-cut-xml-stream.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xml_la-cut-xml-stream.lo `test -f 'cut-xml-stream.c' || echo '$(srcdir)/'`cut-xml-stream.c xml_factory_la-cut-xml-stream-factory.lo: cut-xml-stream-factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xml_factory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_factory_la-cut-xml-stream-factory.lo -MD -MP -MF $(DEPDIR)/xml_factory_la-cut-xml-stream-factory.Tpo -c -o xml_factory_la-cut-xml-stream-factory.lo `test -f 'cut-xml-stream-factory.c' || echo '$(srcdir)/'`cut-xml-stream-factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xml_factory_la-cut-xml-stream-factory.Tpo $(DEPDIR)/xml_factory_la-cut-xml-stream-factory.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-xml-stream-factory.c' object='xml_factory_la-cut-xml-stream-factory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xml_factory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xml_factory_la-cut-xml-stream-factory.lo `test -f 'cut-xml-stream-factory.c' || echo '$(srcdir)/'`cut-xml-stream-factory.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(stream_factory_moduledir)" "$(DESTDIR)$(stream_moduledir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool \ clean-stream_factory_moduleLTLIBRARIES \ clean-stream_moduleLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-stream_factory_moduleLTLIBRARIES \ install-stream_moduleLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-stream_factory_moduleLTLIBRARIES \ uninstall-stream_moduleLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-stream_factory_moduleLTLIBRARIES \ clean-stream_moduleLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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-stream_factory_moduleLTLIBRARIES \ install-stream_moduleLTLIBRARIES install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am \ uninstall-stream_factory_moduleLTLIBRARIES \ uninstall-stream_moduleLTLIBRARIES # 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: cutter-testing-framework-1.1.7/module/stream/Makefile.am0000644000175000017500000000101011205747030021455 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) AM_CFLAGS = \ $(GLIB_CFLAGS) \ $(COVERAGE_CFLAGS) AM_LDFLAGS = \ -avoid-version -module \ -no-undefined -export-dynamic $(LIBTOOL_EXPORT_OPTIONS) stream_module_LTLIBRARIES = \ xml.la stream_factory_module_LTLIBRARIES = \ xml_factory.la LIBS = \ $(GLIB_LIBS) \ $(top_builddir)/cutter/libcutter.la xml_la_CPPFLAGS = xml_la_SOURCES = cut-xml-stream.c xml_factory_la_CPPFLAGS = xml_factory_la_SOURCES = cut-xml-stream-factory.c cutter-testing-framework-1.1.7/module/Makefile.in0000644000175000017500000004757611525654634020242 0ustar koukou# 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@ 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@ subdir = module DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = ui report stream all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign module/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign module/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/module/report/0000755000175000017500000000000011525707413017457 5ustar koukoucutter-testing-framework-1.1.7/module/report/cut-pdf-report.c0000644000175000017500000005114111424022520022463 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_GOFFICE # include # include # include # include # include # include # include # include # include # include #endif #include #include #include #include #include #include #include "cut-cairo.h" #include "cut-cairo-pie-chart.h" #define CUT_TYPE_PDF_REPORT cut_type_pdf_report #define CUT_PDF_REPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_PDF_REPORT, CutPDFReport)) #define CUT_PDF_REPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_PDF_REPORT, CutPDFReportClass)) #define CUT_IS_PDF_REPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_PDF_REPORT)) #define CUT_IS_PDF_REPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_PDF_REPORT)) #define CUT_PDF_REPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_PDF_REPORT, CutPDFReportClass)) #define A4_WIDTH 596 #define A4_HEIGHT 842 typedef struct _CutPDFReport CutPDFReport; typedef struct _CutPDFReportClass CutPDFReportClass; struct _CutPDFReport { CutReport object; CutRunContext *run_context; cairo_t *context; }; struct _CutPDFReportClass { CutReportClass parent_class; }; enum { PROP_0, PROP_RUN_CONTEXT }; static GType cut_type_pdf_report = 0; static CutPDFReportClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void attach_to_run_context (CutListener *listener, CutRunContext *run_context); static void detach_from_run_context (CutListener *listener, CutRunContext *run_context); static gchar *get_all_results (CutReport *report); static gchar *get_success_results (CutReport *report); static gchar *get_error_results (CutReport *report); static gchar *get_failure_results (CutReport *report); static gchar *get_pending_results (CutReport *report); static gchar *get_notification_results (CutReport *report); static gchar *get_omission_results (CutReport *report); static gchar *get_crash_results (CutReport *report); static gchar *get_test_result (CutReport *report, const gchar *test_name); static void class_init (CutPDFReportClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; CutReportClass *report_class; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); report_class = CUT_REPORT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; report_class->get_all_results = get_all_results; report_class->get_success_results = get_success_results; report_class->get_error_results = get_error_results; report_class->get_failure_results = get_failure_results; report_class->get_pending_results = get_pending_results; report_class->get_notification_results = get_notification_results; report_class->get_omission_results = get_omission_results; report_class->get_crash_results = get_crash_results; report_class->get_test_result = get_test_result; spec = g_param_spec_object("cut-run-context", "CutRunContext object", "A CutRunContext object", CUT_TYPE_RUN_CONTEXT, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_RUN_CONTEXT, spec); } static void init (CutPDFReport *report) { report->run_context = NULL; report->context = NULL; } static void listener_init (CutListenerClass *listener) { listener->attach_to_run_context = attach_to_run_context; listener->detach_from_run_context = detach_from_run_context; } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutPDFReportClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutPDFReport), 0, (GInstanceInitFunc) init, }; static const GInterfaceInfo listener_info = { (GInterfaceInitFunc) listener_init, NULL, NULL }; cut_type_pdf_report = g_type_module_register_type(type_module, CUT_TYPE_REPORT, "CutPDFReport", &info, 0); g_type_module_add_interface(type_module, cut_type_pdf_report, CUT_TYPE_LISTENER, &listener_info); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (CUT_TYPE_PDF_REPORT) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(CUT_TYPE_PDF_REPORT)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_PDF_REPORT, first_property, var_args); } static void dispose (GObject *object) { CutPDFReport *report = CUT_PDF_REPORT(object); if (report->run_context) { g_object_unref(report->run_context); report->run_context = NULL; } if (report->context) { cairo_destroy(report->context); report->context = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutPDFReport *report = CUT_PDF_REPORT(object); switch (prop_id) { case PROP_RUN_CONTEXT: attach_to_run_context(CUT_LISTENER(report), CUT_RUN_CONTEXT(g_value_get_object(value))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutPDFReport *report = CUT_PDF_REPORT(object); switch (prop_id) { case PROP_RUN_CONTEXT: g_value_set_object(value, G_OBJECT(report->run_context)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void init_page (cairo_t *cr) { cairo_move_to(cr, 10, 10); } static void cb_ready_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, guint n_test_cases, guint n_tests, CutPDFReport *report) { const gchar *filename; cairo_surface_t *surface; filename = cut_report_get_filename(CUT_REPORT(report)); if (!filename) return; if (report->context) { cairo_destroy(report->context); report->context = NULL; } surface = cairo_pdf_surface_create(filename, A4_WIDTH, A4_HEIGHT); report->context = cairo_create(surface); cairo_surface_destroy(surface); init_page(report->context); } static PangoLayout * show_text_with_page_feed (cairo_t *cr, const gchar *utf8) { PangoLayout *layout; double x, y; int width, height; if (!utf8) return NULL; layout = cut_cairo_create_pango_layout(cr, utf8, 10); if (!layout) return NULL; cairo_get_current_point(cr, &x, &y); pango_layout_get_pixel_size(layout, &width, &height); if (A4_HEIGHT < y + height) { cairo_show_page(cr); init_page(cr); cairo_get_current_point(cr, NULL, &y); cairo_move_to(cr, x, y); } pango_cairo_show_layout(cr, layout); return layout; } static void cb_start_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, CutPDFReport *report) { } static void cb_start_test_case (CutRunContext *run_context, CutTestCase *test_case, CutPDFReport *report) { } static void cb_start_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutPDFReport *report) { } static void cb_test_signal (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutPDFReport *report) { } static void cb_complete_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, gboolean success, CutPDFReport *report) { } static void cb_complete_test_case (CutRunContext *run_context, CutTestCase *test_case, gboolean success, CutPDFReport *report) { } static void show_test_case (cairo_t *cr, CutTestCase *test_case, CutTestResultStatus status, guint n_tests, guint n_successes, guint n_failures, guint n_errors, guint n_pendings, guint n_omissions) { PangoLayout *layout; const gchar *utf8; int width, height; gdouble x, y; utf8 = cut_test_get_name(CUT_TEST(test_case)); layout = show_text_with_page_feed(cr, utf8); if (!layout) return; cairo_get_current_point(cr, &x, &y); cairo_save(cr); pango_layout_get_pixel_size(layout, &width, &height); cairo_rectangle(cr, A4_WIDTH - 100 - 10, y + 2, 100, height - 4); cut_cairo_set_source_result_color(cr, status); cairo_fill_preserve(cr); cairo_set_line_width(cr, 0.5); cairo_set_source_rgb(cr, 0, 0, 0); cairo_stroke(cr); cairo_restore(cr); cairo_move_to(cr, x, y + height); g_object_unref(layout); } static void cb_complete_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, gboolean success, CutPDFReport *report) { } static void show_summary (CutPDFReport *report, CutRunContext *run_context) { const GList *node; CutTestCase *test_case = NULL; cairo_t *cr; gdouble x, y, after_x, after_y, width, height; guint n_tests, n_successes, n_failures, n_errors, n_pendings, n_omissions; CutTestResultStatus test_case_status; cr = report->context; n_tests = n_successes = n_failures = n_errors = n_pendings = n_omissions = 0; test_case_status = CUT_TEST_RESULT_SUCCESS; cairo_get_current_point(cr, &x, &y); for (node = cut_run_context_get_results(run_context); node; node = g_list_next(node)) { CutTestResult *result = node->data; CutTestCase *current_test_case; CutTestResultStatus status; status = cut_test_result_get_status(result); current_test_case = cut_test_result_get_test_case(result); if (!test_case) test_case = current_test_case; if (test_case != current_test_case) { show_test_case(cr, test_case, test_case_status, n_tests, n_successes, n_failures, n_errors, n_pendings, n_omissions); n_tests = n_successes = n_failures = n_errors = n_pendings = n_omissions = 0; test_case_status = CUT_TEST_RESULT_SUCCESS; test_case = current_test_case; } n_tests++; switch (status) { case CUT_TEST_RESULT_SUCCESS: n_successes++; break; case CUT_TEST_RESULT_FAILURE: n_failures++; break; case CUT_TEST_RESULT_ERROR: n_errors++; break; case CUT_TEST_RESULT_PENDING: n_pendings++; break; case CUT_TEST_RESULT_OMISSION: n_omissions++; break; default: break; } if (test_case_status < status) test_case_status = status; } if (test_case) show_test_case(cr, test_case, test_case_status, n_tests, n_successes, n_failures, n_errors, n_pendings, n_omissions); cairo_get_current_point(cr, &after_x, &after_y); width = A4_WIDTH - x * 2; height = after_y - y; } #ifdef HAVE_GOFFICE static void graph_setup_title (GogGraph *graph, const gchar *title) { GogLabel *label; GOData *data; GOStyle *style; PangoFontDescription *desc; label = g_object_new(GOG_TYPE_LABEL, NULL); data = go_data_scalar_str_new(title, FALSE); gog_dataset_set_dim(GOG_DATASET(label), 0, data, NULL); gog_object_add_by_name(GOG_OBJECT(graph), "Title", GOG_OBJECT(label)); style = go_styled_object_get_style(GO_STYLED_OBJECT(label)); desc = pango_font_description_from_string("Sans bold 16"); go_style_set_font_desc(style, desc); } static void graph_setup_chart (GogGraph *graph, CutRunContext *run_context) { GogChart *chart; GogPlot *pie; GOData *data; GogSeries *series; gchar **legends; double *values; gint n = 0; chart = GOG_CHART(gog_object_get_child_by_name(GOG_OBJECT(graph), "Chart")); pie = gog_plot_new_by_name("GogPiePlot"); gog_object_add_by_name(GOG_OBJECT(chart), "Plot", GOG_OBJECT(pie)); legends = g_new0(gchar *, CUT_TEST_RESULT_LAST); values = g_new0(double, CUT_TEST_RESULT_LAST); #define STATUS(status) (CUT_TEST_RESULT_ ## status) #define SET_DATA(status, n_statuses) G_STMT_START \ { \ const gchar *name; \ name = cut_test_result_status_to_signal_name(STATUS(status)); \ legends[STATUS(status)] = g_strdup(name); \ values[STATUS(status)] = \ cut_run_context_get_n_ ## n_statuses(run_context); \ n++; \ } G_STMT_END \ SET_DATA(SUCCESS, successes); SET_DATA(NOTIFICATION, notifications); SET_DATA(OMISSION, omissions); SET_DATA(PENDING, pendings); SET_DATA(FAILURE, failures); SET_DATA(ERROR, errors); #undef STATUS #undef SET_DATA series = gog_plot_new_series(pie); data = go_data_vector_str_new((const gchar * const *)legends, n, (GDestroyNotify)g_strfreev); gog_series_set_dim(series, 0, data, NULL); data = go_data_vector_val_new(values, n, g_free); gog_series_set_dim(series, 1, data, NULL); gog_object_add_by_name(GOG_OBJECT(chart), "Legend", NULL); } static GogGraph * graph_new (const gchar *title, CutRunContext *run_context) { GogGraph *graph; graph = g_object_new(GOG_TYPE_GRAPH, NULL); gog_object_add_by_name(GOG_OBJECT(graph), "Chart", NULL); graph_setup_title(graph, title); graph_setup_chart(graph, run_context); return graph; } static void draw_chart (CutPDFReport *report, CutRunContext *run_context) { GogGraph *graph; graph = graph_new("Test result report", run_context); cairo_translate(report->context, 100, 50); gog_graph_render_to_cairo(graph, report->context, 400, 300); g_object_unref(graph); } #endif static void cb_complete_run (CutRunContext *run_context, gboolean success, CutPDFReport *report) { #ifdef HAVE_GOFFICE cairo_save(report->context); draw_chart(report, run_context); cairo_restore(report->context); cairo_show_page(report->context); #endif init_page(report->context); show_summary(report, run_context); } static void connect_to_run_context (CutPDFReport *report, CutRunContext *run_context) { #define CONNECT(name) \ g_signal_connect(run_context, #name, G_CALLBACK(cb_ ## name), report) #define CONNECT_TO_TEST(name) \ g_signal_connect(run_context, #name, G_CALLBACK(cb_test_signal), report) CONNECT(ready_test_suite); CONNECT(start_test_suite); CONNECT(start_test_case); CONNECT(start_test); CONNECT_TO_TEST(success_test); CONNECT_TO_TEST(failure_test); CONNECT_TO_TEST(error_test); CONNECT_TO_TEST(pending_test); CONNECT_TO_TEST(notification_test); CONNECT_TO_TEST(omission_test); CONNECT_TO_TEST(crash_test); CONNECT(complete_test); CONNECT(complete_test_case); CONNECT(complete_test_suite); CONNECT(complete_run); #undef CONNECT } static void disconnect_from_run_context (CutPDFReport *report, CutRunContext *run_context) { #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(run_context, \ G_CALLBACK(cb_ ## name), \ report) DISCONNECT(ready_test_suite); DISCONNECT(start_test_suite); DISCONNECT(start_test_case); DISCONNECT(start_test); DISCONNECT(complete_test); DISCONNECT(complete_test_case); DISCONNECT(complete_test_suite); DISCONNECT(complete_run); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_test_signal), report); #undef DISCONNECT } static void attach_to_run_context (CutListener *listener, CutRunContext *run_context) { CutPDFReport *report = CUT_PDF_REPORT(listener); if (report->run_context) detach_from_run_context(listener, report->run_context); if (run_context) { report->run_context = g_object_ref(run_context); connect_to_run_context(CUT_PDF_REPORT(listener), run_context); } } static void detach_from_run_context (CutListener *listener, CutRunContext *run_context) { CutPDFReport *report = CUT_PDF_REPORT(listener); if (report->run_context != run_context) return; disconnect_from_run_context(report, run_context); g_object_unref(report->run_context); report->run_context = NULL; } static gchar * get_all_results (CutReport *report) { return NULL; } static gchar * get_success_results (CutReport *report) { return NULL; } static gchar * get_error_results (CutReport *report) { return NULL; } static gchar * get_failure_results (CutReport *report) { return NULL; } static gchar * get_pending_results (CutReport *report) { return NULL; } static gchar * get_notification_results (CutReport *report) { return NULL; } static gchar * get_omission_results (CutReport *report) { return NULL; } static gchar * get_crash_results (CutReport *report) { return NULL; } static gchar * get_test_result (CutReport *report, const gchar *test_name) { return NULL; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/cut-cairo.c0000644000175000017500000000554511205747030021514 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-cairo.h" PangoLayout * cut_cairo_create_pango_layout (cairo_t *cr, const gchar *utf8, gint font_size) { PangoLayout *layout; PangoFontDescription *description; gchar *description_string; if (!utf8) return NULL; layout = pango_cairo_create_layout(cr); if (font_size < 0) description_string = g_strdup("Mono"); else description_string = g_strdup_printf("Mono %d", font_size); description = pango_font_description_from_string(description_string); g_free(description_string); pango_layout_set_font_description(layout, description); pango_font_description_free(description); pango_layout_set_text(layout, utf8, -1); return layout; } void cut_cairo_set_source_result_color (cairo_t *cr, CutTestResultStatus status) { gdouble red, green, blue; switch (status) { case CUT_TEST_RESULT_SUCCESS: red = 0x8a / (gdouble)0xff; green = 0xe2 / (gdouble)0xff; blue = 0x34 / (gdouble)0xff; break; case CUT_TEST_RESULT_NOTIFICATION: red = 0x72 / (gdouble)0xff; green = 0x9f / (gdouble)0xff; blue = 0xcf / (gdouble)0xff; break; case CUT_TEST_RESULT_OMISSION: red = 0x20 / (gdouble)0xff; green = 0x4a / (gdouble)0xff; blue = 0x87 / (gdouble)0xff; break; case CUT_TEST_RESULT_PENDING: red = 0x5c / (gdouble)0xff; green = 0x35 / (gdouble)0xff; blue = 0x66 / (gdouble)0xff; break; case CUT_TEST_RESULT_FAILURE: red = 0xef / (gdouble)0xff; green = 0x29 / (gdouble)0xff; blue = 0x29 / (gdouble)0xff; break; case CUT_TEST_RESULT_ERROR: red = 0xfc / (gdouble)0xff; green = 0xe9 / (gdouble)0xff; blue = 0x4f / (gdouble)0xff; break; default: return; } cairo_set_source_rgb(cr, red, green, blue); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/cut-cairo-chart-data.h0000644000175000017500000000465311205747030023526 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_CAIRO_CHART_DATA_H__ #define __CUT_CAIRO_CHART_DATA_H__ #include G_BEGIN_DECLS #define CUT_TYPE_CAIRO_CHART_DATA (cut_cairo_chart_data_get_type ()) #define CUT_CAIRO_CHART_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_CAIRO_CHART_DATA, CutCairoChartData)) #define CUT_CAIRO_CHART_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_CAIRO_CHART_DATA, CutCairoChartDataClass)) #define CUT_IS_CAIRO_CHART_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_CAIRO_CHART_DATA)) #define CUT_IS_CAIRO_CHART_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_CAIRO_CHART_DATA)) #define CUT_CAIRO_CHART_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_CAIRO_CHART_DATA, CutCairoChartDataClass)) typedef struct _CutCairoChartData CutCairoChartData; typedef struct _CutCairoChartDataClass CutCairoChartDataClass; struct _CutCairoChartData { GObject object; }; struct _CutCairoChartDataClass { GObjectClass parent_class; }; GType cut_cairo_chart_data_get_type (void) G_GNUC_CONST; CutCairoChartData *cut_cairo_chart_data_new (void); const gchar *cut_cairo_chart_data_get_description(CutCairoChartData *data); gboolean cut_cairo_chart_data_get_rgb (CutCairoChartData *data, gdouble *red, gdouble *green, gdouble *blue); G_END_DECLS #endif /* __CUT_CAIRO_CHART_DATA_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/cut-xml-report.c0000644000175000017500000003507211205747030022526 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #include #include #include #include #include #define CUT_TYPE_XML_REPORT cut_type_xml_report #define CUT_XML_REPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_XML_REPORT, CutXMLReport)) #define CUT_XML_REPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_XML_REPORT, CutXMLReportClass)) #define CUT_IS_XML_REPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_XML_REPORT)) #define CUT_IS_XML_REPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_XML_REPORT)) #define CUT_XML_REPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_XML_REPORT, CutXMLReportClass)) typedef struct _CutXMLReport CutXMLReport; typedef struct _CutXMLReportClass CutXMLReportClass; struct _CutXMLReport { CutReport object; CutRunContext *run_context; }; struct _CutXMLReportClass { CutReportClass parent_class; }; enum { PROP_0, PROP_RUN_CONTEXT }; static GType cut_type_xml_report = 0; static CutReportClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void attach_to_run_context (CutListener *listener, CutRunContext *run_context); static void detach_from_run_context (CutListener *listener, CutRunContext *run_context); static gchar *get_all_results (CutReport *report); static gchar *get_success_results (CutReport *report); static gchar *get_error_results (CutReport *report); static gchar *get_failure_results (CutReport *report); static gchar *get_pending_results (CutReport *report); static gchar *get_notification_results (CutReport *report); static gchar *get_omission_results (CutReport *report); static gchar *get_crash_results (CutReport *report); static gchar *get_test_result (CutReport *report, const gchar *test_name); static void class_init (CutXMLReportClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; CutReportClass *report_class; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); report_class = CUT_REPORT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; report_class->get_all_results = get_all_results; report_class->get_success_results = get_success_results; report_class->get_error_results = get_error_results; report_class->get_failure_results = get_failure_results; report_class->get_pending_results = get_pending_results; report_class->get_notification_results = get_notification_results; report_class->get_omission_results = get_omission_results; report_class->get_crash_results = get_crash_results; report_class->get_test_result = get_test_result; spec = g_param_spec_object("cut-run-context", "CutRunContext object", "A CutRunContext object", CUT_TYPE_RUN_CONTEXT, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_RUN_CONTEXT, spec); } static void init (CutXMLReport *report) { report->run_context = NULL; } static void listener_init (CutListenerClass *listener) { listener->attach_to_run_context = attach_to_run_context; listener->detach_from_run_context = detach_from_run_context; } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutXMLReportClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutXMLReport), 0, (GInstanceInitFunc) init, }; static const GInterfaceInfo listener_info = { (GInterfaceInitFunc) listener_init, NULL, NULL }; cut_type_xml_report = g_type_module_register_type(type_module, CUT_TYPE_REPORT, "CutXMLReport", &info, 0); g_type_module_add_interface(type_module, cut_type_xml_report, CUT_TYPE_LISTENER, &listener_info); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_xml_report) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_xml_report)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_XML_REPORT, first_property, var_args); } static void dispose (GObject *object) { CutXMLReport *report = CUT_XML_REPORT(object); if (report->run_context) { g_object_unref(report->run_context); report->run_context = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutXMLReport *report = CUT_XML_REPORT(object); switch (prop_id) { case PROP_RUN_CONTEXT: attach_to_run_context(CUT_LISTENER(report), CUT_RUN_CONTEXT(g_value_get_object(value))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutXMLReport *report = CUT_XML_REPORT(object); switch (prop_id) { case PROP_RUN_CONTEXT: g_value_set_object(value, G_OBJECT(report->run_context)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void output_to_file (CutXMLReport *report, gchar *string) { const gchar *filename; FILE *fp; int n_retries = 0; if (!string) return; filename = cut_report_get_filename(CUT_REPORT(report)); if (!filename) return; fp = g_fopen(filename, "a"); if (!fp) return; while (fwrite(string, strlen(string), 1, fp) != 1) { n_retries++; if (n_retries >= 3) { g_warning("can't write XML report to file [%s]: [%s]", filename, string); break; } } fclose(fp); } static void cb_ready_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, guint n_test_cases, guint n_tests, CutXMLReport *report) { const gchar *filename; filename = cut_report_get_filename(CUT_REPORT(report)); if (!filename) return; if (g_file_test(filename, G_FILE_TEST_EXISTS)) g_unlink(filename); } static void cb_start_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, CutXMLReport *report) { output_to_file(report, "\n"); } static void cb_start_test_case (CutRunContext *run_context, CutTestCase *test_case, CutXMLReport *report) { } static void cb_start_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutXMLReport *report) { } static void cb_test_signal (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, CutTestResult *result, CutXMLReport *report) { GString *string; string = g_string_new(NULL); cut_test_result_to_xml_string(result, string, 2); output_to_file(report, string->str); g_string_free(string, TRUE); } static void cb_complete_test (CutRunContext *run_context, CutTest *test, CutTestContext *test_context, gboolean success, CutXMLReport *report) { } static void cb_complete_test_case (CutRunContext *run_context, CutTestCase *test_case, gboolean success, CutXMLReport *report) { } static void cb_complete_test_suite (CutRunContext *run_context, CutTestSuite *test_suite, gboolean success, CutXMLReport *report) { output_to_file(report, ""); } static void connect_to_run_context (CutXMLReport *report, CutRunContext *run_context) { #define CONNECT(name) \ g_signal_connect(run_context, #name, G_CALLBACK(cb_ ## name), report) #define CONNECT_TO_TEST(name) \ g_signal_connect(run_context, #name, G_CALLBACK(cb_test_signal), report) CONNECT(ready_test_suite); CONNECT(start_test_suite); CONNECT(start_test_case); CONNECT(start_test); CONNECT_TO_TEST(success_test); CONNECT_TO_TEST(failure_test); CONNECT_TO_TEST(error_test); CONNECT_TO_TEST(pending_test); CONNECT_TO_TEST(notification_test); CONNECT_TO_TEST(omission_test); CONNECT_TO_TEST(crash_test); CONNECT(complete_test); CONNECT(complete_test_case); CONNECT(complete_test_suite); #undef CONNECT } static void disconnect_from_run_context (CutXMLReport *report, CutRunContext *run_context) { #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(run_context, \ G_CALLBACK(cb_ ## name), \ report) DISCONNECT(start_test_suite); DISCONNECT(start_test_case); DISCONNECT(start_test); DISCONNECT(complete_test); DISCONNECT(complete_test_case); DISCONNECT(complete_test_suite); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_test_signal), report); #undef DISCONNECT } static void attach_to_run_context (CutListener *listener, CutRunContext *run_context) { CutXMLReport *report = CUT_XML_REPORT(listener); if (report->run_context) detach_from_run_context(listener, report->run_context); if (run_context) { report->run_context = g_object_ref(run_context); connect_to_run_context(CUT_XML_REPORT(listener), run_context); } } static void detach_from_run_context (CutListener *listener, CutRunContext *run_context) { CutXMLReport *report = CUT_XML_REPORT(listener); if (report->run_context != run_context) return; disconnect_from_run_context(report, run_context); g_object_unref(report->run_context); report->run_context = NULL; } static gchar * get_all_results (CutReport *report) { const GList *node; GString *xml = g_string_new(""); CutXMLReport *xml_report = CUT_XML_REPORT(report); for (node = cut_run_context_get_results(xml_report->run_context); node; node = g_list_next(node)) { CutTestResult *result = node->data; cut_test_result_to_xml_string(result, xml, 2); } return g_string_free(xml, FALSE); } static gchar * get_status_results (CutXMLReport *report, CutTestResultStatus status) { const GList *node; GString *xml = g_string_new(""); CutXMLReport *xml_report = CUT_XML_REPORT(report); for (node = cut_run_context_get_results(xml_report->run_context); node; node = g_list_next(node)) { CutTestResult *result = node->data; if (status != cut_test_result_get_status(result)) continue; cut_test_result_to_xml_string(result, xml, 2); } return g_string_free(xml, FALSE); } static gchar * get_success_results (CutReport *report) { return get_status_results(CUT_XML_REPORT(report), CUT_TEST_RESULT_SUCCESS); } static gchar * get_error_results (CutReport *report) { return get_status_results(CUT_XML_REPORT(report), CUT_TEST_RESULT_ERROR); } static gchar * get_failure_results (CutReport *report) { return get_status_results(CUT_XML_REPORT(report), CUT_TEST_RESULT_FAILURE); } static gchar * get_pending_results (CutReport *report) { return get_status_results(CUT_XML_REPORT(report), CUT_TEST_RESULT_PENDING); } static gchar * get_notification_results (CutReport *report) { return get_status_results(CUT_XML_REPORT(report), CUT_TEST_RESULT_NOTIFICATION); } static gchar * get_omission_results (CutReport *report) { return get_status_results(CUT_XML_REPORT(report), CUT_TEST_RESULT_OMISSION); } static gchar * get_crash_results (CutReport *report) { return get_status_results(CUT_XML_REPORT(report), CUT_TEST_RESULT_CRASH); } static gchar * get_test_result (CutReport *report, const gchar *test_name) { return NULL; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/cut-cairo.h0000644000175000017500000000260211205747030021510 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_CAIRO_H__ #define __CUT_CAIRO_H__ #include #include #include #include G_BEGIN_DECLS PangoLayout *cut_cairo_create_pango_layout (cairo_t *cr, const gchar *utf8, gint font_size); void cut_cairo_set_source_result_color (cairo_t *cr, CutTestResultStatus status); #endif /* __CUT_CAIRO_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/cut-pdf-report-factory.c0000644000175000017500000002000711424022520024125 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #ifdef HAVE_GOFFICE # include # include # include #endif #include #include #include #include #ifdef HAVE_GOFFICE static gboolean goffice_initialized = FALSE; static gboolean goffice_shutdowned = FALSE; #endif #define CUT_TYPE_PDF_REPORT_FACTORY cut_type_pdf_factory_report #define CUT_PDF_REPORT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_PDF_REPORT_FACTORY, CutPDFReportFactory)) #define CUT_PDF_REPORT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_PDF_REPORT_FACTORY, CutPDFReportFactoryClass)) #define CUT_IS_PDF_REPORT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_PDF_REPORT_FACTORY)) #define CUT_IS_PDF_REPORT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_PDF_REPORT_FACTORY)) #define CUT_PDF_REPORT_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_PDF_REPORT_FACTORY, CutPDFReportFactoryClass)) typedef struct _CutPDFReportFactory CutPDFReportFactory; typedef struct _CutPDFReportFactoryClass CutPDFReportFactoryClass; struct _CutPDFReportFactory { CutModuleFactory object; gchar *filename; }; struct _CutPDFReportFactoryClass { CutModuleFactoryClass parent_class; }; enum { PROP_0, PROP_FILENAME }; static GType cut_type_pdf_factory_report = 0; static CutModuleFactoryClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void set_option_group (CutModuleFactory *factory, GOptionContext *context); static GObject *create (CutModuleFactory *factory); static void class_init (CutModuleFactoryClass *klass) { CutModuleFactoryClass *factory_class; GObjectClass *gobject_class; GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); factory_class = CUT_MODULE_FACTORY_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; factory_class->set_option_group = set_option_group; factory_class->create = create; spec = g_param_spec_string("filename", "Filename", "The name of output file", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_FILENAME, spec); } static void init (CutPDFReportFactory *pdf) { pdf->filename = NULL; } static void dispose (GObject *object) { CutPDFReportFactory *pdf = CUT_PDF_REPORT_FACTORY(object); if (pdf->filename) { g_free(pdf->filename); pdf->filename = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutPDFReportFactory *pdf = CUT_PDF_REPORT_FACTORY(object); switch (prop_id) { case PROP_FILENAME: if (pdf->filename) g_free(pdf->filename); pdf->filename = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutPDFReportFactory *pdf = CUT_PDF_REPORT_FACTORY(object); switch (prop_id) { case PROP_FILENAME: g_value_set_string(value, pdf->filename); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutPDFReportFactoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutPDFReportFactory), 0, (GInstanceInitFunc) init, }; cut_type_pdf_factory_report = g_type_module_register_type(type_module, CUT_TYPE_MODULE_FACTORY, "CutPDFReportFactory", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; #ifdef HAVE_GOFFICE if (!goffice_initialized) { goffice_initialized = TRUE; libgoffice_init(); go_plugins_init(NULL, NULL, NULL, NULL, TRUE, GO_TYPE_PLUGIN_LOADER_MODULE); } #endif register_type(type_module); if (cut_type_pdf_factory_report) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_pdf_factory_report)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { #ifdef HAVE_GOFFICE if (goffice_initialized && !goffice_shutdowned) { goffice_shutdowned = TRUE; go_plugins_shutdown(); libgoffice_shutdown(); } #endif } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_PDF_REPORT_FACTORY, first_property, var_args); } static void set_option_group (CutModuleFactory *factory, GOptionContext *context) { CutPDFReportFactory *pdf = CUT_PDF_REPORT_FACTORY(factory); GOptionGroup *group; GOptionEntry entries[] = { {NULL} }; if (CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group) CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group(factory, context); group = g_option_group_new(("pdf-report"), _("PDF Report Options"), _("Show PDF report options"), pdf, NULL); g_option_group_add_entries(group, entries); g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); g_option_context_add_group(context, group); } static GObject * create (CutModuleFactory *factory) { CutPDFReportFactory *pdf = CUT_PDF_REPORT_FACTORY(factory); return G_OBJECT(cut_report_new("pdf", "filename", pdf->filename, NULL)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/cut-xml-report-factory.c0000644000175000017500000001653011424043514024170 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #include #include #define CUT_TYPE_XML_REPORT_FACTORY cut_type_xml_report_factory #define CUT_XML_REPORT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_XML_REPORT_FACTORY, CutXMLReportFactory)) #define CUT_XML_REPORT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_XML_REPORT_FACTORY, CutXMLReportFactoryClass)) #define CUT_IS_XML_REPORT_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_XML_REPORT_FACTORY)) #define CUT_IS_XML_REPORT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_XML_REPORT_FACTORY)) #define CUT_XML_REPORT_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_XML_REPORT_FACTORY, CutXMLReportFactoryClass)) typedef struct _CutXMLReportFactory CutXMLReportFactory; typedef struct _CutXMLReportFactoryClass CutXMLReportFactoryClass; struct _CutXMLReportFactory { CutModuleFactory object; gchar *filename; }; struct _CutXMLReportFactoryClass { CutModuleFactoryClass parent_class; }; enum { PROP_0, PROP_FILENAME }; static GType cut_type_xml_report_factory = 0; static CutModuleFactoryClass *parent_class; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void set_option_group (CutModuleFactory *factory, GOptionContext *context); static GObject *create (CutModuleFactory *factory); static void class_init (CutModuleFactoryClass *klass) { CutModuleFactoryClass *factory_class; GObjectClass *gobject_class; GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class = G_OBJECT_CLASS(klass); factory_class = CUT_MODULE_FACTORY_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; factory_class->set_option_group = set_option_group; factory_class->create = create; spec = g_param_spec_string("filename", "Filename", "The name of output file", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_FILENAME, spec); } static void init (CutXMLReportFactory *xml) { xml->filename = NULL; } static void dispose (GObject *object) { CutXMLReportFactory *xml = CUT_XML_REPORT_FACTORY(object); if (xml->filename) { g_free(xml->filename); xml->filename = NULL; } G_OBJECT_CLASS(parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutXMLReportFactory *xml = CUT_XML_REPORT_FACTORY(object); switch (prop_id) { case PROP_FILENAME: if (xml->filename) g_free(xml->filename); xml->filename = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutXMLReportFactory *xml = CUT_XML_REPORT_FACTORY(object); switch (prop_id) { case PROP_FILENAME: g_value_set_string(value, xml->filename); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutXMLReportFactoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutXMLReportFactory), 0, (GInstanceInitFunc) init, }; cut_type_xml_report_factory = g_type_module_register_type(type_module, CUT_TYPE_MODULE_FACTORY, "CutXMLReportFactory", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_xml_report_factory) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_xml_report_factory)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_XML_REPORT_FACTORY, first_property, var_args); } static void set_option_group (CutModuleFactory *factory, GOptionContext *context) { CutXMLReportFactory *xml = CUT_XML_REPORT_FACTORY(factory); GOptionGroup *group; GOptionEntry entries[] = { {NULL} }; if (CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group) CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group(factory, context); group = g_option_group_new(("xml-report"), _("XML Report Options"), _("Show XML report options"), xml, NULL); g_option_group_add_entries(group, entries); g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); g_option_context_add_group(context, group); } static GObject * create (CutModuleFactory *factory) { CutXMLReportFactory *xml = CUT_XML_REPORT_FACTORY(factory); return G_OBJECT(cut_report_new("xml", "filename", xml->filename, NULL)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/Makefile.in0000644000175000017500000010527011525654634021537 0ustar koukou# 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@ 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@ @PDF_REPORT_AVAILABLE_TRUE@am__append_1 = pdf.la @PDF_REPORT_AVAILABLE_TRUE@am__append_2 = pdf_factory.la subdir = module/report DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(report_factory_moduledir)" \ "$(DESTDIR)$(report_moduledir)" LTLIBRARIES = $(report_factory_module_LTLIBRARIES) \ $(report_module_LTLIBRARIES) am__DEPENDENCIES_1 = @PDF_REPORT_AVAILABLE_TRUE@pdf_la_DEPENDENCIES = \ @PDF_REPORT_AVAILABLE_TRUE@ $(am__DEPENDENCIES_1) \ @PDF_REPORT_AVAILABLE_TRUE@ $(am__DEPENDENCIES_1) \ @PDF_REPORT_AVAILABLE_TRUE@ $(am__DEPENDENCIES_1) am__pdf_la_SOURCES_DIST = cut-pdf-report.c cut-cairo.c cut-cairo.h \ cut-cairo-pie-chart.c cut-cairo-pie-chart.h \ cut-cairo-chart-data.c cut-cairo-chart-data.h @PDF_REPORT_AVAILABLE_TRUE@am_pdf_la_OBJECTS = \ @PDF_REPORT_AVAILABLE_TRUE@ pdf_la-cut-pdf-report.lo \ @PDF_REPORT_AVAILABLE_TRUE@ pdf_la-cut-cairo.lo \ @PDF_REPORT_AVAILABLE_TRUE@ pdf_la-cut-cairo-pie-chart.lo \ @PDF_REPORT_AVAILABLE_TRUE@ pdf_la-cut-cairo-chart-data.lo pdf_la_OBJECTS = $(am_pdf_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent pdf_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(pdf_la_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ @PDF_REPORT_AVAILABLE_TRUE@am_pdf_la_rpath = -rpath \ @PDF_REPORT_AVAILABLE_TRUE@ $(report_moduledir) @PDF_REPORT_AVAILABLE_TRUE@pdf_factory_la_DEPENDENCIES = \ @PDF_REPORT_AVAILABLE_TRUE@ $(am__DEPENDENCIES_1) am__pdf_factory_la_SOURCES_DIST = cut-pdf-report-factory.c @PDF_REPORT_AVAILABLE_TRUE@am_pdf_factory_la_OBJECTS = pdf_factory_la-cut-pdf-report-factory.lo pdf_factory_la_OBJECTS = $(am_pdf_factory_la_OBJECTS) pdf_factory_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(pdf_factory_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ $@ @PDF_REPORT_AVAILABLE_TRUE@am_pdf_factory_la_rpath = -rpath \ @PDF_REPORT_AVAILABLE_TRUE@ $(report_factory_moduledir) xml_la_LIBADD = am_xml_la_OBJECTS = xml_la-cut-xml-report.lo xml_la_OBJECTS = $(am_xml_la_OBJECTS) xml_factory_la_LIBADD = am_xml_factory_la_OBJECTS = xml_factory_la-cut-xml-report-factory.lo xml_factory_la_OBJECTS = $(am_xml_factory_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(pdf_la_SOURCES) $(pdf_factory_la_SOURCES) \ $(xml_la_SOURCES) $(xml_factory_la_SOURCES) DIST_SOURCES = $(am__pdf_la_SOURCES_DIST) \ $(am__pdf_factory_la_SOURCES_DIST) $(xml_la_SOURCES) \ $(xml_factory_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(GLIB_LIBS) \ $(top_builddir)/cutter/libcutter.la LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) AM_CFLAGS = \ $(GLIB_CFLAGS) \ $(COVERAGE_CFLAGS) AM_LDFLAGS = \ -avoid-version -module \ -no-undefined -export-dynamic $(LIBTOOL_EXPORT_OPTIONS) report_module_LTLIBRARIES = xml.la $(am__append_1) report_factory_module_LTLIBRARIES = xml_factory.la $(am__append_2) xml_la_CPPFLAGS = xml_la_SOURCES = cut-xml-report.c xml_factory_la_CPPFLAGS = xml_factory_la_SOURCES = cut-xml-report-factory.c @PDF_REPORT_AVAILABLE_TRUE@pdf_la_CFLAGS = \ @PDF_REPORT_AVAILABLE_TRUE@ $(CAIRO_PDF_CFLAGS) \ @PDF_REPORT_AVAILABLE_TRUE@ $(PANGO_CAIRO_CFLAGS) \ @PDF_REPORT_AVAILABLE_TRUE@ $(GOFFICE_CFLAGS) \ @PDF_REPORT_AVAILABLE_TRUE@ $(AM_CFLAGS) @PDF_REPORT_AVAILABLE_TRUE@pdf_la_SOURCES = \ @PDF_REPORT_AVAILABLE_TRUE@ cut-pdf-report.c \ @PDF_REPORT_AVAILABLE_TRUE@ cut-cairo.c \ @PDF_REPORT_AVAILABLE_TRUE@ cut-cairo.h \ @PDF_REPORT_AVAILABLE_TRUE@ cut-cairo-pie-chart.c \ @PDF_REPORT_AVAILABLE_TRUE@ cut-cairo-pie-chart.h \ @PDF_REPORT_AVAILABLE_TRUE@ cut-cairo-chart-data.c \ @PDF_REPORT_AVAILABLE_TRUE@ cut-cairo-chart-data.h @PDF_REPORT_AVAILABLE_TRUE@pdf_la_LIBADD = \ @PDF_REPORT_AVAILABLE_TRUE@ $(CAIRO_PDF_LIBS) \ @PDF_REPORT_AVAILABLE_TRUE@ $(PANGO_CAIRO_LIBS) \ @PDF_REPORT_AVAILABLE_TRUE@ $(GOFFICE_LIBS) \ @PDF_REPORT_AVAILABLE_TRUE@ -lm @PDF_REPORT_AVAILABLE_TRUE@pdf_factory_la_CFLAGS = \ @PDF_REPORT_AVAILABLE_TRUE@ $(GOFFICE_CFLAGS) \ @PDF_REPORT_AVAILABLE_TRUE@ $(AM_CFLAGS) @PDF_REPORT_AVAILABLE_TRUE@pdf_factory_la_LIBADD = \ @PDF_REPORT_AVAILABLE_TRUE@ $(GOFFICE_LIBS) @PDF_REPORT_AVAILABLE_TRUE@pdf_factory_la_SOURCES = cut-pdf-report-factory.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign module/report/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign module/report/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-report_factory_moduleLTLIBRARIES: $(report_factory_module_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(report_factory_moduledir)" || $(MKDIR_P) "$(DESTDIR)$(report_factory_moduledir)" @list='$(report_factory_module_LTLIBRARIES)'; test -n "$(report_factory_moduledir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(report_factory_moduledir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(report_factory_moduledir)"; \ } uninstall-report_factory_moduleLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(report_factory_module_LTLIBRARIES)'; test -n "$(report_factory_moduledir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(report_factory_moduledir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(report_factory_moduledir)/$$f"; \ done clean-report_factory_moduleLTLIBRARIES: -test -z "$(report_factory_module_LTLIBRARIES)" || rm -f $(report_factory_module_LTLIBRARIES) @list='$(report_factory_module_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done install-report_moduleLTLIBRARIES: $(report_module_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(report_moduledir)" || $(MKDIR_P) "$(DESTDIR)$(report_moduledir)" @list='$(report_module_LTLIBRARIES)'; test -n "$(report_moduledir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(report_moduledir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(report_moduledir)"; \ } uninstall-report_moduleLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(report_module_LTLIBRARIES)'; test -n "$(report_moduledir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(report_moduledir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(report_moduledir)/$$f"; \ done clean-report_moduleLTLIBRARIES: -test -z "$(report_module_LTLIBRARIES)" || rm -f $(report_module_LTLIBRARIES) @list='$(report_module_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done pdf.la: $(pdf_la_OBJECTS) $(pdf_la_DEPENDENCIES) $(AM_V_CCLD)$(pdf_la_LINK) $(am_pdf_la_rpath) $(pdf_la_OBJECTS) $(pdf_la_LIBADD) $(LIBS) pdf_factory.la: $(pdf_factory_la_OBJECTS) $(pdf_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(pdf_factory_la_LINK) $(am_pdf_factory_la_rpath) $(pdf_factory_la_OBJECTS) $(pdf_factory_la_LIBADD) $(LIBS) xml.la: $(xml_la_OBJECTS) $(xml_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(report_moduledir) $(xml_la_OBJECTS) $(xml_la_LIBADD) $(LIBS) xml_factory.la: $(xml_factory_la_OBJECTS) $(xml_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(report_factory_moduledir) $(xml_factory_la_OBJECTS) $(xml_factory_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdf_factory_la-cut-pdf-report-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdf_la-cut-cairo-chart-data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdf_la-cut-cairo-pie-chart.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdf_la-cut-cairo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdf_la-cut-pdf-report.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_factory_la-cut-xml-report-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_la-cut-xml-report.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< pdf_la-cut-pdf-report.lo: cut-pdf-report.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_la_CFLAGS) $(CFLAGS) -MT pdf_la-cut-pdf-report.lo -MD -MP -MF $(DEPDIR)/pdf_la-cut-pdf-report.Tpo -c -o pdf_la-cut-pdf-report.lo `test -f 'cut-pdf-report.c' || echo '$(srcdir)/'`cut-pdf-report.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pdf_la-cut-pdf-report.Tpo $(DEPDIR)/pdf_la-cut-pdf-report.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-pdf-report.c' object='pdf_la-cut-pdf-report.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_la_CFLAGS) $(CFLAGS) -c -o pdf_la-cut-pdf-report.lo `test -f 'cut-pdf-report.c' || echo '$(srcdir)/'`cut-pdf-report.c pdf_la-cut-cairo.lo: cut-cairo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_la_CFLAGS) $(CFLAGS) -MT pdf_la-cut-cairo.lo -MD -MP -MF $(DEPDIR)/pdf_la-cut-cairo.Tpo -c -o pdf_la-cut-cairo.lo `test -f 'cut-cairo.c' || echo '$(srcdir)/'`cut-cairo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pdf_la-cut-cairo.Tpo $(DEPDIR)/pdf_la-cut-cairo.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-cairo.c' object='pdf_la-cut-cairo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_la_CFLAGS) $(CFLAGS) -c -o pdf_la-cut-cairo.lo `test -f 'cut-cairo.c' || echo '$(srcdir)/'`cut-cairo.c pdf_la-cut-cairo-pie-chart.lo: cut-cairo-pie-chart.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_la_CFLAGS) $(CFLAGS) -MT pdf_la-cut-cairo-pie-chart.lo -MD -MP -MF $(DEPDIR)/pdf_la-cut-cairo-pie-chart.Tpo -c -o pdf_la-cut-cairo-pie-chart.lo `test -f 'cut-cairo-pie-chart.c' || echo '$(srcdir)/'`cut-cairo-pie-chart.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pdf_la-cut-cairo-pie-chart.Tpo $(DEPDIR)/pdf_la-cut-cairo-pie-chart.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-cairo-pie-chart.c' object='pdf_la-cut-cairo-pie-chart.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_la_CFLAGS) $(CFLAGS) -c -o pdf_la-cut-cairo-pie-chart.lo `test -f 'cut-cairo-pie-chart.c' || echo '$(srcdir)/'`cut-cairo-pie-chart.c pdf_la-cut-cairo-chart-data.lo: cut-cairo-chart-data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_la_CFLAGS) $(CFLAGS) -MT pdf_la-cut-cairo-chart-data.lo -MD -MP -MF $(DEPDIR)/pdf_la-cut-cairo-chart-data.Tpo -c -o pdf_la-cut-cairo-chart-data.lo `test -f 'cut-cairo-chart-data.c' || echo '$(srcdir)/'`cut-cairo-chart-data.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pdf_la-cut-cairo-chart-data.Tpo $(DEPDIR)/pdf_la-cut-cairo-chart-data.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-cairo-chart-data.c' object='pdf_la-cut-cairo-chart-data.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_la_CFLAGS) $(CFLAGS) -c -o pdf_la-cut-cairo-chart-data.lo `test -f 'cut-cairo-chart-data.c' || echo '$(srcdir)/'`cut-cairo-chart-data.c pdf_factory_la-cut-pdf-report-factory.lo: cut-pdf-report-factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_factory_la_CFLAGS) $(CFLAGS) -MT pdf_factory_la-cut-pdf-report-factory.lo -MD -MP -MF $(DEPDIR)/pdf_factory_la-cut-pdf-report-factory.Tpo -c -o pdf_factory_la-cut-pdf-report-factory.lo `test -f 'cut-pdf-report-factory.c' || echo '$(srcdir)/'`cut-pdf-report-factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pdf_factory_la-cut-pdf-report-factory.Tpo $(DEPDIR)/pdf_factory_la-cut-pdf-report-factory.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-pdf-report-factory.c' object='pdf_factory_la-cut-pdf-report-factory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pdf_factory_la_CFLAGS) $(CFLAGS) -c -o pdf_factory_la-cut-pdf-report-factory.lo `test -f 'cut-pdf-report-factory.c' || echo '$(srcdir)/'`cut-pdf-report-factory.c xml_la-cut-xml-report.lo: cut-xml-report.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_la-cut-xml-report.lo -MD -MP -MF $(DEPDIR)/xml_la-cut-xml-report.Tpo -c -o xml_la-cut-xml-report.lo `test -f 'cut-xml-report.c' || echo '$(srcdir)/'`cut-xml-report.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xml_la-cut-xml-report.Tpo $(DEPDIR)/xml_la-cut-xml-report.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-xml-report.c' object='xml_la-cut-xml-report.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xml_la-cut-xml-report.lo `test -f 'cut-xml-report.c' || echo '$(srcdir)/'`cut-xml-report.c xml_factory_la-cut-xml-report-factory.lo: cut-xml-report-factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xml_factory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_factory_la-cut-xml-report-factory.lo -MD -MP -MF $(DEPDIR)/xml_factory_la-cut-xml-report-factory.Tpo -c -o xml_factory_la-cut-xml-report-factory.lo `test -f 'cut-xml-report-factory.c' || echo '$(srcdir)/'`cut-xml-report-factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xml_factory_la-cut-xml-report-factory.Tpo $(DEPDIR)/xml_factory_la-cut-xml-report-factory.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cut-xml-report-factory.c' object='xml_factory_la-cut-xml-report-factory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xml_factory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xml_factory_la-cut-xml-report-factory.lo `test -f 'cut-xml-report-factory.c' || echo '$(srcdir)/'`cut-xml-report-factory.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(report_factory_moduledir)" "$(DESTDIR)$(report_moduledir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool \ clean-report_factory_moduleLTLIBRARIES \ clean-report_moduleLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-report_factory_moduleLTLIBRARIES \ install-report_moduleLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-report_factory_moduleLTLIBRARIES \ uninstall-report_moduleLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-report_factory_moduleLTLIBRARIES \ clean-report_moduleLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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-report_factory_moduleLTLIBRARIES \ install-report_moduleLTLIBRARIES install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am \ uninstall-report_factory_moduleLTLIBRARIES \ uninstall-report_moduleLTLIBRARIES # 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: cutter-testing-framework-1.1.7/module/report/Makefile.am0000644000175000017500000000221711523771313021513 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) AM_CFLAGS = \ $(GLIB_CFLAGS) \ $(COVERAGE_CFLAGS) AM_LDFLAGS = \ -avoid-version -module \ -no-undefined -export-dynamic $(LIBTOOL_EXPORT_OPTIONS) report_module_LTLIBRARIES = \ xml.la report_factory_module_LTLIBRARIES = \ xml_factory.la LIBS = \ $(GLIB_LIBS) \ $(top_builddir)/cutter/libcutter.la xml_la_CPPFLAGS = xml_la_SOURCES = cut-xml-report.c xml_factory_la_CPPFLAGS = xml_factory_la_SOURCES = cut-xml-report-factory.c if PDF_REPORT_AVAILABLE report_module_LTLIBRARIES += pdf.la report_factory_module_LTLIBRARIES += pdf_factory.la pdf_la_CFLAGS = \ $(CAIRO_PDF_CFLAGS) \ $(PANGO_CAIRO_CFLAGS) \ $(GOFFICE_CFLAGS) \ $(AM_CFLAGS) pdf_la_SOURCES = \ cut-pdf-report.c \ cut-cairo.c \ cut-cairo.h \ cut-cairo-pie-chart.c \ cut-cairo-pie-chart.h \ cut-cairo-chart-data.c \ cut-cairo-chart-data.h pdf_la_LIBADD = \ $(CAIRO_PDF_LIBS) \ $(PANGO_CAIRO_LIBS) \ $(GOFFICE_LIBS) \ -lm pdf_factory_la_CFLAGS = \ $(GOFFICE_CFLAGS) \ $(AM_CFLAGS) pdf_factory_la_LIBADD = \ $(GOFFICE_LIBS) pdf_factory_la_SOURCES = cut-pdf-report-factory.c endif cutter-testing-framework-1.1.7/module/report/cut-cairo-pie-chart.h0000644000175000017500000000511411205747030023363 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_CAIRO_PIE_CHART_H__ #define __CUT_CAIRO_PIE_CHART_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_CAIRO_PIE_CHART (cut_cairo_pie_chart_get_type ()) #define CUT_CAIRO_PIE_CHART(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_CAIRO_PIE_CHART, CutCairoPieChart)) #define CUT_CAIRO_PIE_CHART_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_CAIRO_PIE_CHART, CutCairoPieChartClass)) #define CUT_IS_CAIRO_PIE_CHART(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_CAIRO_PIE_CHART)) #define CUT_IS_CAIRO_PIE_CHART_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_CAIRO_PIE_CHART)) #define CUT_CAIRO_PIE_CHART_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_CAIRO_PIE_CHART, CutCairoPieChartClass)) typedef struct _CutCairoPieChart CutCairoPieChart; typedef struct _CutCairoPieChartClass CutCairoPieChartClass; struct _CutCairoPieChart { GObject object; }; struct _CutCairoPieChartClass { GObjectClass parent_class; }; GType cut_cairo_pie_chart_get_type (void) G_GNUC_CONST; CutCairoPieChart *cut_cairo_pie_chart_new (gdouble width, gdouble height); void cut_cairo_pie_chart_draw (CutCairoPieChart *chart, cairo_t *cr, CutRunContext *run_context); void cut_cairo_pie_chart_get_size (CutCairoPieChart *chart, gdouble *width, gdouble *height); gdouble cut_cairo_pie_chart_get_width (CutCairoPieChart *chart); gdouble cut_cairo_pie_chart_get_height(CutCairoPieChart *chart); G_END_DECLS #endif /* __CUT_CAIRO_PIE_CHART_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/cut-cairo-chart-data.c0000644000175000017500000001435011205747030023514 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "cut-cairo-chart-data.h" #define CUT_CAIRO_CHART_DATA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_CAIRO_CHART_DATA, CutCairoChartDataPrivate)) typedef struct _CutCairoChartDataPrivate CutCairoChartDataPrivate; struct _CutCairoChartDataPrivate { gchar *description; gdouble red; gdouble green; gdouble blue; }; enum { PROP_0, PROP_DESCRIPTION, PROP_RED, PROP_GREEN, PROP_BLUE }; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); G_DEFINE_TYPE (CutCairoChartData, cut_cairo_chart_data, G_TYPE_OBJECT) static void cut_cairo_chart_data_class_init (CutCairoChartDataClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("description", "The description", "The description", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_DESCRIPTION, spec); spec = g_param_spec_double("red", "Red", "Red value", 0.0, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_RED, spec); spec = g_param_spec_double("green", "Green", "Green value", 0.0, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_GREEN, spec); spec = g_param_spec_double("blue", "Blue", "Blue value", 0.0, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_BLUE, spec); g_type_class_add_private(gobject_class, sizeof(CutCairoChartDataPrivate)); } static void cut_cairo_chart_data_init (CutCairoChartData *chart) { CutCairoChartDataPrivate *priv; priv = CUT_CAIRO_CHART_DATA_GET_PRIVATE(chart); priv->description = NULL; } static void dispose (GObject *object) { CutCairoChartDataPrivate *priv; priv = CUT_CAIRO_CHART_DATA_GET_PRIVATE(object); if (priv->description) { g_free(priv->description); priv->description = NULL; } G_OBJECT_CLASS(cut_cairo_chart_data_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutCairoChartDataPrivate *priv = CUT_CAIRO_CHART_DATA_GET_PRIVATE(object); switch (prop_id) { case PROP_DESCRIPTION: if (priv->description) g_free(priv->description); priv->description = g_value_dup_string(value); break; case PROP_RED: priv->red = g_value_get_double(value); break; case PROP_GREEN: priv->green = g_value_get_double(value); break; case PROP_BLUE: priv->blue = g_value_get_double(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutCairoChartDataPrivate *priv = CUT_CAIRO_CHART_DATA_GET_PRIVATE(object); switch (prop_id) { case PROP_DESCRIPTION: g_value_set_string(value, priv->description); break; case PROP_RED: g_value_set_double(value, priv->red); break; case PROP_GREEN: g_value_set_double(value, priv->green); break; case PROP_BLUE: g_value_set_double(value, priv->blue); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutCairoChartData * cut_cairo_chart_data_new (void) { return g_object_new(CUT_TYPE_CAIRO_CHART_DATA, NULL); } gboolean cut_cairo_chart_data_get_rgb (CutCairoChartData *chart, gdouble *red, gdouble *green, gdouble *blue) { CutCairoChartDataPrivate *priv; priv = CUT_CAIRO_CHART_DATA_GET_PRIVATE(chart); *red = priv->red; *green = priv->green; *blue = priv->blue; return TRUE; } const gchar * cut_cairo_chart_data_get_description (CutCairoChartData *chart) { return CUT_CAIRO_CHART_DATA_GET_PRIVATE(chart)->description; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/report/cut-cairo-pie-chart.c0000644000175000017500000003244311205747030023363 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include "cut-cairo-pie-chart.h" #include "cut-cairo.h" #define CUT_CAIRO_PIE_CHART_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_CAIRO_PIE_CHART, CutCairoPieChartPrivate)) typedef struct _CutCairoPieChartPrivate CutCairoPieChartPrivate; struct _CutCairoPieChartPrivate { gdouble width; gdouble height; guint n_legends; gboolean show_data_label; GList *series; }; enum { PROP_0, PROP_WIDTH, PROP_HEIGHT }; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); G_DEFINE_TYPE (CutCairoPieChart, cut_cairo_pie_chart, G_TYPE_OBJECT) static void cut_cairo_pie_chart_class_init (CutCairoPieChartClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_double("width", "Width", "Width", 0.0, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_WIDTH, spec); spec = g_param_spec_double("height", "Height", "Height", 0.0, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_HEIGHT, spec); g_type_class_add_private(gobject_class, sizeof(CutCairoPieChartPrivate)); } static void cut_cairo_pie_chart_init (CutCairoPieChart *chart) { CutCairoPieChartPrivate *priv; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); priv->n_legends = 0; priv->series = NULL; priv->show_data_label = TRUE; } static void dispose (GObject *object) { CutCairoPieChartPrivate *priv; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(object); if (priv->series) { g_list_free(priv->series); priv->series = NULL; } G_OBJECT_CLASS(cut_cairo_pie_chart_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutCairoPieChartPrivate *priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(object); switch (prop_id) { case PROP_WIDTH: priv->width = g_value_get_double(value); break; case PROP_HEIGHT: priv->height = g_value_get_double(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutCairoPieChartPrivate *priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(object); switch (prop_id) { case PROP_WIDTH: g_value_set_double(value, priv->width); break; case PROP_HEIGHT: g_value_set_double(value, priv->height); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutCairoPieChart * cut_cairo_pie_chart_new (gdouble width, gdouble height) { return g_object_new(CUT_TYPE_CAIRO_PIE_CHART, "width", width, "height", height, NULL); } #define SQUARE_LENGTH(x, y) ((x) * (x) + (y) * (y)) static void show_text_at_center (cairo_t *cr, const gchar *utf8, gdouble center_x, gdouble center_y, gdouble radian, gint font_size) { PangoLayout *layout; int width, height; if (!utf8) return; layout = cut_cairo_create_pango_layout(cr, utf8, font_size); if (!layout) return; pango_layout_get_pixel_size(layout, &width, &height); if (cos(radian) < 0.0) center_x -= width; center_y -= height / 2; cairo_move_to(cr, center_x, center_y); pango_cairo_show_layout(cr, layout); g_object_unref(layout); } static void get_pie_center_position (CutCairoPieChart *chart, gdouble *x, gdouble *y) { CutCairoPieChartPrivate *priv; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); *x = priv->width / 2.0; *y = priv->height / 2.0; } static gdouble get_pie_radius (CutCairoPieChart *chart) { return CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart)->height / 2.0; } #define LEGEND_X 200 #define LEGEND_Y 50 static void draw_legend_mark (cairo_t *cr, gdouble x, gdouble y, CutTestResultStatus status) { cairo_rectangle(cr, x, y, 10, 10); cut_cairo_set_source_result_color(cr, status); cairo_fill_preserve(cr); cairo_set_source_rgba(cr, 0, 0, 0, 0.8); cairo_stroke(cr); } static void show_legend (CutCairoPieChart *chart, cairo_t *cr, CutTestResultStatus status) { CutCairoPieChartPrivate *priv; PangoLayout *layout; const gchar *text; gdouble x, y; gdouble center_x, center_y; gdouble radius; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); radius = get_pie_radius(chart); get_pie_center_position(chart, ¢er_x, ¢er_y); x = center_x + radius + 10; y = center_y - radius + priv->n_legends * 10; draw_legend_mark(cr, x, y, status); text = cut_test_result_status_to_signal_name(status); layout = cut_cairo_create_pango_layout(cr, text, 6); if (!layout) return; cairo_move_to(cr, x + 12, y); pango_cairo_show_layout(cr, layout); g_object_unref(layout); priv->n_legends++; } static gdouble draw_pie_piece (CutCairoPieChart *chart, cairo_t *cr, gdouble start, gdouble percent) { gdouble end; gdouble center_x, center_y; gdouble radius; if (percent == 0.0) return start; get_pie_center_position(chart, ¢er_x, ¢er_y); radius = get_pie_radius(chart); cairo_move_to(cr, center_x, center_y); end = start + 2 * M_PI * percent; cairo_arc(cr, center_x, center_y, radius, start, end); cairo_fill_preserve(cr); cairo_set_source_rgba(cr, 0, 0, 0, 0.8); cairo_stroke(cr); return end; } static gdouble get_status_result_number (CutRunContext *run_context, CutTestResultStatus status) { guint n_results = 0; switch (status) { case CUT_TEST_RESULT_SUCCESS: n_results = cut_run_context_get_n_successes(run_context); break; case CUT_TEST_RESULT_NOTIFICATION: n_results = cut_run_context_get_n_notifications(run_context); break; case CUT_TEST_RESULT_OMISSION: n_results = cut_run_context_get_n_omissions(run_context); break; case CUT_TEST_RESULT_PENDING: n_results = cut_run_context_get_n_pendings(run_context); break; case CUT_TEST_RESULT_FAILURE: n_results = cut_run_context_get_n_failures(run_context); break; case CUT_TEST_RESULT_ERROR: n_results = cut_run_context_get_n_errors(run_context); break; default: break; } return (gdouble)n_results; } static gdouble calculate_sum (CutCairoPieChart *chart, CutRunContext *run_context) { CutCairoPieChartPrivate *priv; GList *node; gdouble sum = 0.0; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); for (node = priv->series; node; node = g_list_next(node)) { CutTestResultStatus status; status = GPOINTER_TO_INT(node->data); sum += get_status_result_number(run_context, status); } return sum; } static void draw_data_label (CutCairoPieChart *chart, cairo_t *cr, CutRunContext *run_context) { CutCairoPieChartPrivate *priv; GList *node; gdouble sum, start; gdouble center_x, center_y, radius; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); sum = calculate_sum(chart, run_context); start = 2 * M_PI * 0.75; get_pie_center_position(chart, ¢er_x, ¢er_y); radius = get_pie_radius(chart); for (node = priv->series; node; node = g_list_next(node)) { CutTestResultStatus status; gint n_results; gdouble x, y; gdouble ratio, radian; const gchar *label; status = GPOINTER_TO_INT(node->data); n_results = get_status_result_number(run_context, status); if (n_results == 0) continue; ratio = n_results / sum; radian = start + M_PI * ratio; start += 2 * M_PI * ratio; if (cos(radian) > 0.0) x = center_x + radius + 20; else x = center_x - radius - 20; y = center_y + sin(radian) * radius; label = cut_test_result_status_to_signal_name(status); show_text_at_center(cr, label, x, y, radian, 6); cairo_set_line_width(cr, 0.50); y = center_y + sin(radian) * radius; cairo_move_to(cr, x, y); x = center_x + cos(radian) * radius; cairo_line_to(cr, x, y); cairo_stroke(cr); } } static void draw_chart (CutCairoPieChart *chart, cairo_t *cr, CutRunContext *run_context) { CutCairoPieChartPrivate *priv; GList *node; gdouble sum; gdouble start; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); cairo_set_line_width(cr, 0.75); sum = calculate_sum(chart, run_context); start = 2 * M_PI * 0.75; for (node = priv->series; node; node = g_list_next(node)) { CutTestResultStatus status; gint n_results; gdouble ratio; status = GPOINTER_TO_INT(node->data); cut_cairo_set_source_result_color(cr, status); n_results = get_status_result_number(run_context, status); if (n_results == 0) continue; ratio = (gdouble)n_results / (gdouble)sum; start = draw_pie_piece(chart, cr, start, ratio); } } static void draw_legend (CutCairoPieChart *chart, cairo_t *cr) { CutCairoPieChartPrivate *priv; GList *node; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); for (node = priv->series; node; node = g_list_next(node)) { CutTestResultStatus status; status = GPOINTER_TO_INT(node->data); show_legend(chart, cr, status); } } static void create_series (CutCairoPieChart *chart) { CutCairoPieChartPrivate *priv; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); priv->series = g_list_append(priv->series, GINT_TO_POINTER(CUT_TEST_RESULT_SUCCESS)); priv->series = g_list_append(priv->series, GINT_TO_POINTER(CUT_TEST_RESULT_FAILURE)); priv->series = g_list_append(priv->series, GINT_TO_POINTER(CUT_TEST_RESULT_ERROR)); priv->series = g_list_append(priv->series, GINT_TO_POINTER(CUT_TEST_RESULT_PENDING)); priv->series = g_list_append(priv->series, GINT_TO_POINTER(CUT_TEST_RESULT_OMISSION)); } void cut_cairo_pie_chart_draw (CutCairoPieChart *chart, cairo_t *cr, CutRunContext *run_context) { CutCairoPieChartPrivate *priv; double current_x, current_y; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); cairo_get_current_point(cr, ¤t_x, ¤t_y); cairo_save(cr); cairo_translate(cr, current_x, current_y); /* tentative */ create_series(chart); draw_chart(chart, cr, run_context); draw_legend(chart, cr); if (priv->show_data_label) draw_data_label(chart, cr, run_context); cairo_restore(cr); } void cut_cairo_pie_chart_get_size (CutCairoPieChart *chart, gdouble *width, gdouble *height) { CutCairoPieChartPrivate *priv; priv = CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart); *width = priv->width; *height = priv->height; } gdouble cut_cairo_pie_chart_get_width (CutCairoPieChart *chart) { return CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart)->width; } gdouble cut_cairo_pie_chart_get_height (CutCairoPieChart *chart) { return CUT_CAIRO_PIE_CHART_GET_PRIVATE(chart)->height; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/module/Makefile.am0000644000175000017500000000003311205747030020166 0ustar koukouSUBDIRS = ui report stream cutter-testing-framework-1.1.7/autogen.sh0000755000175000017500000000117011400065250016643 0ustar koukou#!/bin/sh run() { $@ if test $? -ne 0; then echo "Failed $@" exit 1 fi } # for old intltoolize if [ ! -e config/po ]; then ln -s ../po config/po fi case `uname -s` in Darwin) : ${LIBTOOLIZE=glibtoolize} ;; FreeBSD) : ${ACLOCAL_OPTIONS="$ACLOCAL_OPTIONS -I /usr/local/share/aclocal/"} ;; esac run ${ACLOCAL:-aclocal} -I acmacros -I m4macros $ACLOCAL_OPTIONS run ${LIBTOOLIZE:-libtoolize} --copy --force run ${INTLTOOLIZE:-intltoolize} --force --copy #run ${GTKDOCIZE:-gtkdocize} --copy run ${AUTOHEADER:-autoheader} run ${AUTOMAKE:-automake} --add-missing --foreign --copy run ${AUTOCONF:-autoconf} cutter-testing-framework-1.1.7/rpm/0000755000175000017500000000000011525707410015452 5ustar koukoucutter-testing-framework-1.1.7/rpm/centos/0000755000175000017500000000000011525707410016745 5ustar koukoucutter-testing-framework-1.1.7/rpm/centos/cutter.spec.in0000644000175000017500000000262311525645034021542 0ustar koukouSummary: A Unit Testing Framework for C Name: cutter Version: @VERSION@ Release: 0%{?dist} License: LGPL3+ URL: http://cutter.sourceforge.net/ Group: Development/Tools Source: http://downloads.sourceforge.net/cutter/cutter-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id_u} -n) BuildRequires: intltool BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: glib2-devel BuildRequires: libsoup-devel Requires: glib2 Requires: libsoup Requires: libnotify %description Cutter is a xUnit family Unit Testing Framework for C. Cutter provides easy to write test and easy to debug code environment. %prep %setup -q %build %configure make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %clean rm -rf %{buildroot} %files %defattr(-, root, root, -) %doc ChangeLog README README.ja NEWS NEWS.ja TODO FEATURES FEATURES.ja TUTORIAL TUTORIAL.ja USERS USERS.ja %doc %{_datadir}/gtk-doc/html/cutter/ %{_bindir}/ %{_includedir}/cutter/ %{_libdir}/ %{_mandir}/ %{_datadir}/aclocal/ %{_datadir}/cutter/ %{_datadir}/locale/ %changelog * Sun Feb 13 2011 Kouhei Sutou - 1.1.7-0 - new upstream release. * Wed Feb 09 2011 Kouhei Sutou - 1.1.6-0 - new upstream release. * Mon Sep 06 2010 Kouhei Sutou - (1.1.5-0) - new upstream release * Thu Jun 10 2010 Kouhei Sutou - (1.1.4-0) - initial RPM cutter-testing-framework-1.1.7/rpm/fedora/0000755000175000017500000000000011525707410016712 5ustar koukoucutter-testing-framework-1.1.7/rpm/fedora/cutter.spec.in0000644000175000017500000000377111525645034021514 0ustar koukouSummary: A Unit Testing Framework for C Name: cutter Version: @VERSION@ Release: 0%{?dist} License: LGPL3+ URL: http://cutter.sourceforge.net/ Group: Development/Tools Source: http://downloads.sourceforge.net/cutter/cutter-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id_u} -n) BuildRequires: intltool BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: glib2-devel BuildRequires: libsoup-devel Requires: glib2 Requires: libsoup Requires: libnotify %description Cutter is a xUnit family Unit Testing Framework for C. Cutter provides easy to write test and easy to debug code environment. %prep %setup -q %build %configure make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %clean rm -rf %{buildroot} %files %defattr(-, root, root, -) %doc ChangeLog README README.ja NEWS NEWS.ja TODO FEATURES FEATURES.ja TUTORIAL TUTORIAL.ja USERS USERS.ja %doc %{_datadir}/gtk-doc/html/cutter/ %{_bindir}/ %{_includedir}/cutter/ %{_libdir}/ %{_mandir}/ %{_datadir}/aclocal/ %{_datadir}/cutter/ %{_datadir}/locale/ %changelog * Sun Feb 13 2011 Kouhei Sutou - 1.1.7-0 - new upstream release. * Wed Feb 09 2011 Kouhei Sutou - 1.1.6-0 - new upstream release. * Mon Sep 06 2010 Kouhei Sutou - (1.1.5-0) - new upstream release * Thu Jun 10 2010 Kouhei Sutou - (1.1.4-0) - new upstream release * Tue Apr 13 2010 Kouhei Sutou - (1.1.3-0) - new upstream release * Sat Apr 03 2010 Kouhei Sutou - (1.1.2-0) - new upstream release * Thu Mar 3 2010 Kouhei Sutou - (1.1.1-0) - new upstream release * Thu Nov 3 2009 Kouhei Sutou - (1.1.0-0) - new upstream release * Mon Oct 20 2009 Kouhei Sutou - (1.0.9-0) - new upstream release * Sat Aug 29 2009 Kouhei Sutou - (1.0.8-0) - new upstream release * Thu May 21 2009 Kouhei Sutou - (1.0.7-1) - initial RPM cutter-testing-framework-1.1.7/apt/0000755000175000017500000000000011525707422015443 5ustar koukoucutter-testing-framework-1.1.7/apt/Makefile.in0000644000175000017500000003341711525657723017530 0ustar koukou# 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@ 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@ subdir = apt DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SERVER_PATH = $(SF_USER),$(SF_PROJECT_ID)@$(SF_HTDOCS) DISTRIBUTIONS = debian ubuntu CHROOT_BASE = /var/lib/chroot ARCHITECTURES = i386 amd64 CODE_NAMES = squeeze unstable lucid maverick all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign apt/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign apt/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am release: remove-existing-packages build update sign upload remove-existing-packages: for distribution in $(DISTRIBUTIONS); do \ find $${distribution}/pool -not \ -path '*/.svn/*' \-type f -delete; \ done update: ./update-repository.sh \ '$(SF_PROJECT_NAME)' '$(PACKAGE_TITLE)' '$(CODE_NAMES)' sign: ./sign-repository.sh '$(CODE_NAMES)' upload: for distribution in $(DISTRIBUTIONS); do \ (cd $${distribution}; \ rsync -avz --exclude .svn --delete \ dists pool $(SERVER_PATH)/$${distribution}; \ ); \ done download: for distribution in $(DISTRIBUTIONS); do \ (cd $${distribution}; \ rsync -avz $(SERVER_PATH)/$${distribution}/pool/ pool; \ ); \ done build: ./build-in-chroot.sh \ $(PACKAGE) $(VERSION) $(CHROOT_BASE) \ '$(ARCHITECTURES)' '$(CODE_NAMES)' # 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: cutter-testing-framework-1.1.7/apt/Makefile.am0000644000175000017500000000200311525656007017474 0ustar koukouSERVER_PATH = $(SF_USER),$(SF_PROJECT_ID)@$(SF_HTDOCS) DISTRIBUTIONS = debian ubuntu CHROOT_BASE = /var/lib/chroot ARCHITECTURES = i386 amd64 CODE_NAMES = squeeze unstable lucid maverick release: remove-existing-packages build update sign upload remove-existing-packages: for distribution in $(DISTRIBUTIONS); do \ find $${distribution}/pool -not \ -path '*/.svn/*' \-type f -delete; \ done update: ./update-repository.sh \ '$(SF_PROJECT_NAME)' '$(PACKAGE_TITLE)' '$(CODE_NAMES)' sign: ./sign-repository.sh '$(CODE_NAMES)' upload: for distribution in $(DISTRIBUTIONS); do \ (cd $${distribution}; \ rsync -avz --exclude .svn --delete \ dists pool $(SERVER_PATH)/$${distribution}; \ ); \ done download: for distribution in $(DISTRIBUTIONS); do \ (cd $${distribution}; \ rsync -avz $(SERVER_PATH)/$${distribution}/pool/ pool; \ ); \ done build: ./build-in-chroot.sh \ $(PACKAGE) $(VERSION) $(CHROOT_BASE) \ '$(ARCHITECTURES)' '$(CODE_NAMES)' cutter-testing-framework-1.1.7/misc/0000755000175000017500000000000011525707420015610 5ustar koukoucutter-testing-framework-1.1.7/misc/rd2man-lib.rb0000644000175000017500000000466511523751076020103 0ustar koukourequire 'rd/rd2man-lib' require 'rd-visitor-util' module RD class RD2MANVisitor include RDVisitorUtil def apply_to_DocumentElement(element, content) content = content.join title = @title || guess_title <<"EOT" .\\" DO NOT MODIFY THIS FILE! it was generated by rd2 .TH #{title} 1 "#{Time.now.strftime '%B %Y'}" "#{@source}" "#{@manual}" #{content} EOT end # " def apply_to_Headline(element, title) case element.level when 1 @title, @source, @manual = title.join.split(/\s*\/\s*/, 3) @title = @title.upcase "" when 2 ".SH #{title}\n" else ".SS #{title}\n" end end def apply_to_TextBlock(element, content) if RD::DescListItem === element.parent || RD::ItemListItem === element.parent || RD::EnumListItem === element.parent siblings = element.parent.children next_sibling = siblings[siblings.index(element) + 1] if RD::ItemList === next_sibling content.join.strip else content.join.strip + "\n" end else ".PP\n" + content.join.strip + "\n" end end def apply_to_ItemList(element, items) items.collect! do |x| x.sub(/\n\n/, "\n") end items = items.join(".IP\n.B\n\\(bu\n") # "\\(bu" -> "" ? ".IP\n.B\n\\(bu\n" + items.strip + "\n" end def apply_to_ItemListItem(element, content) content.join("\n") end def apply_to_DescListItem(element, term, description) anchor = refer(element) term = term.join.strip if description.empty? ".TP\n.fi\n.B\n#{term}\n" else %[.TP\n.fi\n.B\n#{term}\n#{description.join("\n")}].strip + "\n" end end def apply_to_RefToElement(element, content) content = content.join.sub(/^function#/, "") "\n.BR #{content.strip}\n" end def apply_to_Reference_with_RDLabel(element, content) "\n.BR #{content.join.sub(/\.rd(\.[a-z]{2})?\z/, '')}\n" end def apply_to_Var(element, content) "\n.I #{content.join.sub(/\./, '\\.')}\n" end def apply_to_Keyboard(element, content) "\n.B #{content.join.sub(/\./, '\\.')}\n" end def apply_to_StringElement(element) apply_to_String(remove_newline(element.content)) end private def guess_title title = @filename || ARGF.filename || "Untitled" title = File.basename(title) title.sub(/\.rd$/i, '') end end end cutter-testing-framework-1.1.7/misc/prepare-gtk-doc-html-for-publishing.rb0000755000175000017500000000307411243245122025011 0ustar koukou#!/usr/bin/env ruby require 'optparse' template_directory = File.dirname(__FILE__) template_suffix = nil target_language = nil site_title = nil opts = OptionParser.new do |opts| opts.on("--help", "Show this message") do puts opts exit 0 end opts.on("--template-directory=DIRECTORY", "Template directory") do |dir| template_directory = dir end opts.on("--suffix=SUFFIX", "Template file suffix") do |suffix| suffix = nil if suffix.empty? template_suffix = suffix end opts.on("--language=LANGUAGE", "Target language") do |language| target_language = language end opts.on("--title=TITLE", "Site title") do |title| site_title = title end end opts.parse! def read_template(template_directory, type, suffix, language) file = [type, suffix, language].compact.join("-") + ".html" File.read(File.join(template_directory, file)) end head = read_template(template_directory, "head", template_suffix, target_language) header = read_template(template_directory, "header", template_suffix, target_language) footer = read_template(template_directory, "footer", template_suffix, target_language) ARGV.each do |target| File.open(target, "r+") do |input| content = input.read content = content.sub(/(<\/title>)/, " - #{site_title}\\1") if site_title content = content.sub(/(<\/head>)/, head + "\n\\1") content = content.sub(/()/, "\\1\n" + header) content = content.sub(/(<\/body>)/, footer + "\n\\1") input.seek(0) input.print(content) end end cutter-testing-framework-1.1.7/misc/update-latest-release.rb0000755000175000017500000000332711523751076022343 0ustar koukou#!/usr/bin/env ruby require 'time' if ARGV.size < 4 puts "Usage: #{$0} " + "PACKAGE " + "OLD_VERSION OLD_RELEASE_DATE " + "NEW_VERSION NEW_RELEASE_DATE " + "FILES..." puts " e.g.: #{$0} cutter 1.0.9 2009-10-20 1.1.0 2009-11-29 " + " html/index.html html/index.html.ja rpm/fedora/cutter.spec.in" exit(1) end package, old_version, old_release_date, new_version, new_release_date, *files = ARGV files.each do |file| content = replaced_content = File.read(file) case file when /\.spec(?:\.in)?\z/ date = Time.parse(new_release_date).strftime("%a %b %d %Y") if content !~ /#{Regexp.escape(new_version)}/ replaced_content = content.sub(/^(%changelog\n)/, <<-EOC) %changelog * #{date} Kouhei Sutou - #{new_version}-0 - new upstream release. EOC end when /debian\/changelog\z/ date = Time.parse(new_release_date).rfc2822 if content !~ /#{Regexp.escape(new_version)}/ replaced_content = content.sub(/\A/, <<-EOC) #{package} (#{new_version}-1) unstable; urgency=low * New upstream release. -- Kouhei Sutou #{date} EOC end else [[old_version, new_version], [old_release_date, new_release_date]].each do |old, new| replaced_content = replaced_content.gsub(/#{Regexp.escape(old)}/, new) if /\./ =~ old old_underscore = old.gsub(/\./, '-') new_underscore = new.gsub(/\./, '-') replaced_content = replaced_content.gsub(/#{Regexp.escape(old_underscore)}/, new_underscore) end end end next if replaced_content == content File.open(file, "w") do |output| output.print(replaced_content) end end cutter-testing-framework-1.1.7/misc/generate-makefile-objects.rb0000755000175000017500000000052011277544575023147 0ustar koukou#!/usr/bin/env ruby puts "#{ARGV.shift} = \\\n" prefix = ARGV.shift files = ARGV.collect do |file| _prefix = prefix case file when /(-enum-types|-marshalers)/ _prefix = _prefix.sub(/(\$\(top_builddir\))/, '\1/vcc/source') end "\t#{_prefix}#{file.sub(/\.c(?:pp)?$/, '.obj')}".gsub(/\//, "\\") end.join(" \\\n") puts files cutter-testing-framework-1.1.7/misc/generate-test-makefile.rb0000755000175000017500000000165611355531411022466 0ustar koukou#!/usr/bin/env ruby top_srcdir = ARGV.shift target_path = ARGV.shift resource_dir = "#{top_srcdir}\\vcc\\resource\\#{target_path.gsub(/\//, '\\')}" makefile_path = "Makefile.#{target_path.split(/\//).join('.')}" test_bases = ARGV.collect do |file| file.sub(/\.la$/, '') end test_dlls = test_bases.collect do |base| "#{base}.dll" end File.open(makefile_path, "w") do |makefile| makefile.puts((["tests = "] + test_dlls).join(" \\\n\t")) makefile.puts test_bases.each do |base| dll = "#{base}.dll" obj = "#{base}.obj" def_file = "#{resource_dir}\\#{base}.def" local_cflags = base.gsub(/-/, "_") + "_CFLAGS" local_ldflags = base.gsub(/-/, "_") + "_LDFLAGS" makefile.puts("#{dll}: #{obj} #{def_file}") makefile.puts("\t$(CC) $(CFLAGS) $(#{local_cflags}) -LD -Fe$@ #{obj} " + "$(LIBS) $(LDFLAGS) $(#{local_ldflags}) " + "/def:#{def_file}") makefile.puts end end cutter-testing-framework-1.1.7/misc/generate-def.rb0000755000175000017500000000052211277421256020471 0ustar koukou#!/usr/bin/env ruby puts "EXPORTS" ARGV.each do |file| content = File.read(file) content.scan(/^(?-m:const\s+)?\w(?-m:.+)\s+\** ((?:|g|gdk|soup)cut(?:test)?_[a-z_]+) \s*(?:\(|$)/mx) do function = $1 case function when /u?int(max|ptr)/ else puts "\t#{function}" end end end cutter-testing-framework-1.1.7/misc/generate-test-defs.rb0000755000175000017500000000135511355531411021626 0ustar koukou#!/usr/bin/env ruby require 'fileutils' source_dir = ARGV.shift output_dir = ARGV.shift FileUtils.mkdir_p(output_dir) ARGV.each do |file| base = file.sub(/\.la$/, '') File.open(File.join(output_dir, "#{base}.def"), "w") do |def_file| c_source = File.join(source_dir, "#{base}.c") if File.exist?(c_source) content = File.read(c_source) def_file.puts("EXPORTS") functions = [] content.scan(/^void\s+([a-zA-Z\d_]+)\s*\(/) do function = $1 case function when /u?int(max|ptr)/ when /u?int_(fast|least)/ else functions << function end end functions.uniq.sort.each do |function| def_file.puts("\t#{function}") end end end end cutter-testing-framework-1.1.7/misc/Makefile.in0000644000175000017500000003217311525654634017673 0ustar koukou# 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@ 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@ subdir = misc DIST_COMMON = $(dist_noinst_SCRIPTS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SCRIPTS = $(dist_noinst_SCRIPTS) AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ dist_noinst_SCRIPTS = \ rd2refentry-lib.rb \ expand-rd2-snippet.rb \ rd2man-lib.rb \ prepare-gtk-doc-html-for-publishing.rb \ release.rb \ update-latest-release.rb \ generate-def.rb \ generate-makefile-objects.rb \ generate-test-defs.rb \ generate-test-makefile.rb all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign misc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign misc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/misc/Makefile.am0000644000175000017500000000044711277421256017655 0ustar koukoudist_noinst_SCRIPTS = \ rd2refentry-lib.rb \ expand-rd2-snippet.rb \ rd2man-lib.rb \ prepare-gtk-doc-html-for-publishing.rb \ release.rb \ update-latest-release.rb \ generate-def.rb \ generate-makefile-objects.rb \ generate-test-defs.rb \ generate-test-makefile.rb cutter-testing-framework-1.1.7/misc/rd2refentry-lib.rb0000644000175000017500000003010211523751076021147 0ustar koukourequire "English" require "erb" require "optparse" require "rd/rdvisitor" require "rd/version" require 'rd-visitor-util' require "rt/rtparser" begin require "gettext" rescue LoadError require "rubygems" require "gettext" end begin require "gettext/tools" rescue LoadError require "gettext/poparser" GetText::MOFile = MOFile end module RD class RD2RefEntryVisitor < RDVisitor include ERB::Util include RDVisitorUtil SYSTEM_NAME = "RDtool -- RD2RefEntryVisitor" SYSTEM_VERSION = "0.0.1" VERSION = Version.new_from_version_string(SYSTEM_NAME, SYSTEM_VERSION) @@po = nil @@name = nil class << self def version VERSION end def po=(po) @@po = po end def name=(name) @@name = name end end # must-have constants OUTPUT_SUFFIX = "xml" INCLUDE_SUFFIX = ["xml"] METACHAR = {"<" => "<", ">" => ">", "&" => "&"} def initialize super @translate_data = nil @n_sections = 0 @n_text_blocks_in_section = 0 @term_indexes = {} @man_style = false end def apply_to_DocumentElement(element, contents) ret = "" ret << "#{xml_decl}\n" ret << "#{doctype_decl}\n" ret << "\n" ret << "#{ref_meta}\n" ret << "#{ref_name_div}\n" ret << collect_section_contents(contents).join("\n\n") ret << "\n" ret end def apply_to_Headline(element, title) id = nil if /\A\s*\[(.+?)\]\s*/ =~ title.first local_id = $1 title[0] = $POSTMATCH id = "#{ref_entry_id}.#{local_id}" end case element.level when 1 title = title.join @title, @purpose = title.split(/\s*\B---\B\s*/, 2) if @purpose.nil? components = title.split(/\s*\B\/\B\s*/) if components.size == 3 name, package, manual = components @title = name @man_style = true end end when 2 @n_sections += 1 @n_text_blocks_in_section = 0 end [:headline, element.level - 1, title, id] end def apply_to_Verbatim(element) lines = [] element.each_line do |line| lines.push(line) end case lines.first.strip when "# RT" apply_to_RT(lines.join) when "# note" contents = lines[1..-1].collect {|line| apply_to_String(line)} tag("note", {}, contents.join("").chomp) else contents = lines.collect {|line| apply_to_String(line)} tag("programlisting", {}, contents.join("").chomp) end end def apply_to_RT(content) rt = RT::RTParser.parse(content) elements = [tag("caption", {}, apply_to_String(rt.config["caption"]))] header_rows = [] rt.header.each do |row| header_cells = [] row.each do |cell| if cell.class == RT::RTCell header_cells << [tag("th", {}, apply_to_String(cell.value))] end end header_rows << [tag("tr", {}, header_cells)] end elements << [tag("thead", {}, header_rows)] rows = [] rt.body.each do |row| cells = [] row.each do |cell| if cell.class == RT::RTCell cells << [tag("td", {}, apply_to_String(cell.value))] end end rows << [tag("tr", {}, cells)] end elements << [tag("tbody", {}, rows)] attributes = {} attributes["id"] = rt.config["id"] if rt.config["id"] tag("table", attributes, elements) end def apply_to_Reference_with_RDLabel(element, contents) if element.label.filename raise "label with filename is unsupported: #{element.label.inspect}" end url = element.label.element_label label = contents.join("").chomp if label.empty? label = remove_suffix(remove_lang_suffix(remove_hash_suffix(url))) end case url when /\.html\z/ if @@name and /\A#{Regexp.escape(@@name.downcase)}-/ =~ url return tag("link", {:linkend => remove_suffix(remove_lang_suffix(url))}, label) end when /\.html#[a-zA-Z\-_]+$/ when /\.svg\z/, /\.png\z/ url = url.sub(/svg\z/, "png") return tag("inlinemediaobject", {}, [ tag("imageobject", {}, tag("imagedata", { :fileref => url.sub(/svg\z/, "png"), :format => "PNG" })), tag("textobject", {}, tag("phrase", {}, label)), ]) else case url when /#/ target, hash = $PREMATCH, $POSTMATCH if target.empty? linkend = term_index_id(hash) else target = nil if target == "." linkend = "#{ref_entry_id(target)}.#{term_index_id(hash)}" end when /\(\)\z/ linkend = term_index_id(url) when /\A[A-Z][A-Z]*_[A-Z_]+\z/ linkend = "#{url.gsub(/_/, '-')}:CAPS" else linkend = ref_entry_id(url) end return tag("link", {:linkend => linkend}, label) end tag("ulink", {:url => url}, label) end def apply_to_Reference_with_URL(element, contents) url = element.label.url label = contents.join("").chomp label = url if label.empty? tag("ulink", {:url => url}, label) end def apply_to_ItemList(element, items) tag("itemizedlist", {}, *items) end def apply_to_EnumList(element, items) tag("orderedlist", {}, *items) end def apply_to_DescList(element, items) tag("variablelist", {}, *items) end def apply_to_ItemListItem(element, contents) tag("listitem", {}, *contents) end def apply_to_EnumListItem(element, contents) tag("listitem", {}, *contents) end def apply_to_DescListItem(element, term, contents) term_attributes = {} term = term.join("") if /\A\s*\[\]\s*/ =~ term term = $POSTMATCH else id = term_index_id(term) unless @term_indexes[id] @term_indexes[id] = term term_attributes["id"] = "#{ref_entry_id}.#{id}" end end tag("varlistentry", {}, tag("term", term_attributes, term), tag("listitem", {}, *contents)) end def apply_to_TextBlock(element, contents) @n_text_blocks_in_section += 1 if @man_style and @n_sections == 1 and @n_text_blocks_in_section == 1 @purpose = contents.join.split(/\s+-\s+/, 2)[1] end tag("para", {}, *contents) end def apply_to_Emphasis(element, contents) tag("emphasis", {}, *contents) end def apply_to_Footnote(element, contents) tag("footnote", {}, tag("para", {}, *contents)) end def apply_to_Code(element, contents) tag("code", {}, *contents) end def apply_to_Var(element, contents) tag("varname", {}, *contents) end def apply_to_Keyboard(element, contents) tag("command", {}, *contents) end def apply_to_StringElement(element) apply_to_String(remove_newline(element.content)) end def apply_to_String(element) h(element) end private def _(msgstr) translate_data[msgstr] || msgstr end def translate_data @translate_data ||= make_translate_data end def make_translate_data data = GetText::MOFile.new if @@po parser = GetText::PoParser.new parser.parse(File.read(@@po), data) end data end def xml_decl "" end def doctype_decl "" end def ref_entry_id(filename=nil) filename ||= ARGF.filename remove_suffix(File.basename(filename)).downcase end def term_index_id(term) first_sentence = term.to_s.split(/[\s\(=\[,]/, 2)[0] first_sentence.gsub(/[._]/, "-").gsub(/!/, '-bang').gsub(/\?/, "-question") end def tag(name, attributes={}, *contents) encoded_attributes = attributes.collect do |key, value| "#{key}=\"#{h(value)}\"" end.join(" ") unless encoded_attributes.empty? encoded_attributes = " #{encoded_attributes}" end if contents.size == 1 and contents[0] !~ /" else "<#{name}#{encoded_attributes}>#{indented_contents}" end end def ref_meta tag("refmeta", {}, tag("refentrytitle", { "role" => "top_of_page", "id" => "#{ref_entry_id}.top_of_page", }, @title), tag("refmiscinfo", {}, h(_("#{@@name || 'MY'} Library")))) end def ref_name_div contents = [tag("refname", {}, @title)] contents << tag("refpurpose", {}, @purpose) if @purpose tag("refnamediv", {}, *contents) end def collect_section_contents(contents) section_contents = pre_collect_section_contents(contents) post_collect_section_contents(section_contents) end def pre_collect_section_contents(contents) section_contents = [[0, [], nil]] contents.each do |content| if content.is_a?(Array) and content[0] == :headline _, level, title, id = content title_tag = tag("title", {}, *title) sub_section_contents = [] while section_contents.last[0] > level sub_level, sub_contents, sub_id = section_contents.pop attributes = {} attributes["id"] = sub_id if sub_id sub_section_contents.unshift(tag("refsect#{sub_level}", attributes, *sub_contents) + "\n") end section_contents.last[1].concat(sub_section_contents) section_contents << [level, [title_tag], id] else section_contents.last[1] << content end end section_contents end def post_collect_section_contents(section_contents) collected_section_contents = [] section_contents.last[0].downto(0) do |level| sub_section_contents = [] while section_contents.last[0] > level sub_level, sub_contents, id = section_contents.pop attributes = {} attributes["id"] = id if id sub_section_contents.unshift(tag("refsect#{sub_level}", attributes, *sub_contents)) end unless sub_section_contents.empty? raise "!?" unless section_contents.last[0] == level _, contents, id = section_contents.pop if level > 0 attributes = {} attributes["id"] = id if id contents = tag("refsect#{level}", attributes, *(contents + sub_section_contents)) else contents = sub_section_contents.join("\n\n") end collected_section_contents.unshift(contents + "\n") end end collected_section_contents end def consist_of_one_textblock?(listitem) listitem.children.size == 1 and listitem.children[0].is_a?(TextBlock) end def remove_hash_suffix(string) string.sub(/\#.*\z/, "") end def remove_lang_suffix(string) string.sub(/\.[a-z]{2}\z/, "") end def remove_suffix(string) string.sub(/(?:\.[^.]{2,4})+\z/, "") end end end $Visitor_Class = RD::RD2RefEntryVisitor ARGV.options do |opts| opts.on("--name=NAME", "The library name") do |name| RD::RD2RefEntryVisitor.name = name end opts.on("-pPO", "--po=PO", "PO file") do |po| RD::RD2RefEntryVisitor.po = po end end cutter-testing-framework-1.1.7/misc/expand-rd2-snippet.rb0000755000175000017500000000405411205747031021564 0ustar koukou#!/usr/bin/env ruby $LOAD_PATH.unshift(File.dirname(__FILE__)) require 'rd2refentry-lib' require 'rd/rdfmt' require 'fileutils' if ARGV.size != 1 puts "Usage: #{$0} DOCBOOK_XML_DIR" exit 1 end class RD2RefEntrySnippetVisitor < RD::RD2RefEntryVisitor def apply_to_DocumentElement(element, contents) section_contents = collect_section_contents(contents) if section_contents.empty? contents.join("\n\n") else section_contents.join("\n\n").gsub(/<(\/)?refsect(\d)/) do "<#{$1}refsect#{$2.to_i.succ}" end end end def apply_to_Verbatim(element) if /\A#\s*pass-through\s*\z/ =~ (element.content[0] || '') element.content[1..-1].join else super end end def apply_to_String(element) element.gsub(/([^<]*)(<.+?>)?/) do content = $1 tag = $2 h(content).gsub(/&commat;/, '@') + (tag || "") end end end def expand_rd2_snippet(rd_snippet) source = "=begin\n#{rd_snippet}\n=end\n" tree = RD::RDTree.new(source) visitor = RD2RefEntrySnippetVisitor.new visitor.visit(tree) end def expand_rd2_snippets(file_name) content = File.open(file_name) {|input| input.read} rd2_snippet_re = /\s*\s*(.+?)\s*<\/rd>\s*<\/para>/m expanded_content = content.gsub(rd2_snippet_re) do rd2_snippet = $1 program_listing_re = /\n.*?(?m:.+?)<\/programlisting>.*?\n/ rd2_snippet = rd2_snippet.gsub(program_listing_re) do |program_listing| "\n # pass-through" + program_listing.gsub(/\n/, "\n ") end rd2_snippet = rd2_snippet.gsub(/<\/para>\n\n/, "\n") expand_rd2_snippet(rd2_snippet) end changed = content != expanded_content if changed File.open(file_name, "w") {|output| output.print(expanded_content)} end changed end xml_dir_name = ARGV[0] changed = false Dir.open(xml_dir_name) do |dir| dir.each do |name| next if /\.xml\z/ !~ name changed = true if expand_rd2_snippets(File.join(xml_dir_name, name)) end end if changed FileUtils.touch(File.join(File.dirname(xml_dir_name), "sgml.stamp")) end cutter-testing-framework-1.1.7/misc/release.rb0000755000175000017500000001131711400051174017551 0ustar koukou#!/usr/bin/env ruby require 'English' require 'rubygems' require 'mechanize' require 'logger' if ARGV.size < 7 puts "Usage: #{$0} " + "SF_USER_NAME PROJECT_ID PROJECT_NAME PACKAGE_NAME RELEASE_NAME " + "README NEWS FILES..." puts " e.g.: #{$0} ktou cutter Cutter cutter 0.3.0 README NEWS " + "cutter-0.3.0.tar.gz cutter-0.3.0.tar.bz2" exit(1) end sf_user_name, project_id, project_name, package_name, release_name, \ readme, news, *files = ARGV def read_password(prompt, input=$stdin, output=$stdout) output.print(prompt) system("/bin/stty -echo") if input.tty? input.gets.chomp ensure system("/bin/stty echo") if input.tty? output.puts end def login(agent, user_name, password=nil) page = agent.get("https://sourceforge.net/account/login.php") login_form = page.form("login_userpw") login_form.form_loginname = user_name login_form.form_pw = password || yield begin page = agent.submit(login_form, login_form.buttons.first) rescue Mechanize::ResponseCodeError end raise "login failed" unless /Log Out|Log out/ =~ page.body page = agent.get("https://sourceforge.net/users/#{user_name}") page end def go_project_page(agent, my_page, project_name) project_page_link = my_page.links.find do |link| /\A#{Regexp.escape(project_name)}\z/i =~ link.text end agent.click(project_page_link) end def upload_files(sf_user_name, project_id, package_name, release_name, news, files) dist_top_dir = "dist" FileUtils.rm_rf(dist_top_dir) dist_dir = File.join(dist_top_dir, package_name, release_name) FileUtils.mkdir_p(dist_dir) FileUtils.cp(files, dist_dir) File.open(File.join(dist_dir, "#{release_name}-release.txt"), "w") do |note| note.print(latest_release_changes(news)) end Dir.chdir(dist_top_dir) do host = "#{sf_user_name},#{project_id}@frs.sourceforge.net" path = ["", "home", "frs", "project", project_id[0, 1], project_id[0, 2], project_id].join("/") system("rsync", "-avz", "./", "#{host}:#{path}/") end end def go_development_page(agent, project_page, project_id) development_page_link = project_page.links.find do |link| /\bprojects\b/ =~ link.href and /\bDevelop\b/ =~ link.text end if development_page_link.nil? agent.get("https://sourceforge.net/projects/#{project_id}/develop") else agent.click(development_page_link) end end def extract_sections(file) normalized_text = File.read(file).gsub(/==+\n.*\n==+\n/, '') normalized_text.split(/.*\n^(?:==\s+|=+$).*\n\n\n*/) end def guess_target_index(file, default_index) index = default_index if /:(\d+)\Z/ =~ file file = $PREMATCH index = $1.to_i end [file, index] end def project_summary(readme) readme, index = guess_target_index(readme, 4) extract_sections(readme)[index].split(/\n\n/)[0].chomp end def latest_release_changes(news) news, index = guess_target_index(news, 1) extract_sections(news)[index].chomp end def remove_rd_link_markup(text) text.gsub(/\(\(<(.*?)(?:\|.*?)?>\)\)/m, '\1') end def go_news_page(agent, development_page) agent.click(development_page.links.find {|link| /\ANews\z/ =~ link.text}) end def go_submit_news_page(agent, news_page) submit_news_page_link = news_page.links.find do |link| /\bnews\b/ =~ link.href and /\ASubmit\z/ =~ link.text end agent.click(submit_news_page_link) end def submit_news(agent, submit_news_page, project_name, package_name, release_name, readme, news) submit_news_form = submit_news_page.forms.find do |form| /\bnews\b/ =~ form.action end summary = "#{project_name}: #{package_name} #{release_name} Released" submit_news_form.summary = summary details = [project_summary(readme), latest_release_changes(news)].join("\n\n") submit_news_form.details = remove_rd_link_markup(details).gsub(/\n/, "\r\n") agent.submit(submit_news_form, submit_news_form.buttons.first) end def main(sf_user_name, project_id, project_name, package_name, release_name, readme, news, files) agent = Mechanize.new do |_agent| # _agent.log = Logger.new(STDOUT) end password = read_password("SF.net password for [#{sf_user_name}]: ") my_page = login(agent, sf_user_name, password) project_page = go_project_page(agent, my_page, project_name) development_page = go_development_page(agent, project_page, project_id) upload_files(sf_user_name, project_id, package_name, release_name, news, files) news_page = go_news_page(agent, development_page) submit_news_page = go_submit_news_page(agent, news_page) submit_news(agent, submit_news_page, project_name, package_name, release_name, readme, news) end main(sf_user_name, project_id, project_name, package_name, release_name, readme, news, files) cutter-testing-framework-1.1.7/cutter/0000755000175000017500000000000011525707412016164 5ustar koukoucutter-testing-framework-1.1.7/cutter/cut-types.h0000644000175000017500000000366611205747026020305 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TYPES_H__ #define __CUT_TYPES_H__ #ifdef __cplusplus extern "C" { #endif /** * SECTION: cut-types * @title: Types * @short_description: Types that is used in test. * * There are some types to be used in test. */ /** * CutDestroyFunction: * @data: the data element to be destroyed. * * Specifies the type of function which is called when a * data element is destroyed. It is passed the pointer to * the data element and should free any memory and resources * allocated for it. */ typedef void (*CutDestroyFunction) (void *data); typedef void (*CutCallbackFunction) (void); /** * cut_boolean: * * A standard boolean type. Variables of this type should * only contain the value %CUT_TRUE or %CUT_FALSE. */ typedef int cut_boolean; /** * CUT_TRUE: * * Defines the %CUT_TRUE value for the #cut_boolean type. */ #ifndef CUT_TRUE # define CUT_TRUE (!CUT_FALSE) #endif /** * CUT_FALSE: * * Defines the %CUT_FALSE value for the #cut_boolean type. */ #ifndef CUT_FALSE # define CUT_FALSE (0) #endif #ifdef __cplusplus } #endif #endif /* __CUT_TYPES_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-contractor.c0000644000175000017500000001221411523751075021301 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-contractor.h" #include "cut-module-factory-utils.h" #include "cut-factory-builder.h" #include "cut-report-factory-builder.h" #include "cut-stream-factory-builder.h" #include "cut-ui-factory-builder.h" #define CUT_CONTRACTOR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_CONTRACTOR, CutContractorPrivate)) typedef struct _CutContractorPrivate CutContractorPrivate; struct _CutContractorPrivate { GList *builders; }; G_DEFINE_TYPE(CutContractor, cut_contractor, G_TYPE_OBJECT) static void dispose (GObject *object); static void cut_contractor_class_init (CutContractorClass *klass) { GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; g_type_class_add_private(gobject_class, sizeof(CutContractorPrivate)); } static GList * create_default_builders (void) { GList *list = NULL; list = g_list_prepend(list, g_object_new(CUT_TYPE_UI_FACTORY_BUILDER, NULL)); list = g_list_prepend(list, g_object_new(CUT_TYPE_REPORT_FACTORY_BUILDER, NULL)); list = g_list_prepend(list, g_object_new(CUT_TYPE_STREAM_FACTORY_BUILDER, NULL)); return list; } static void load_ui_factory (CutContractor *contractor) { GList *node; CutContractorPrivate *priv = CUT_CONTRACTOR_GET_PRIVATE(contractor); for (node = priv->builders; node; node = g_list_next(node)) { const gchar *module_dir, *type_name; CutFactoryBuilder *builder = CUT_FACTORY_BUILDER(node->data); type_name = cut_factory_builder_get_type_name(builder); if (strcmp(type_name, "ui")) continue; module_dir = cut_factory_builder_get_module_dir(builder); cut_module_factory_load(module_dir, "ui"); } } static void cut_contractor_init (CutContractor *contractor) { CutContractorPrivate *priv = CUT_CONTRACTOR_GET_PRIVATE(contractor); cut_module_factory_init(); priv->builders = create_default_builders(); load_ui_factory(contractor); } static void dispose (GObject *object) { CutContractorPrivate *priv = CUT_CONTRACTOR_GET_PRIVATE(object); if (priv->builders) { g_list_foreach(priv->builders, (GFunc)g_object_unref, NULL); g_list_free(priv->builders); priv->builders = NULL; } cut_module_factory_quit(); G_OBJECT_CLASS(cut_contractor_parent_class)->dispose(object); } CutContractor * cut_contractor_new (void) { return CUT_CONTRACTOR(g_object_new(CUT_TYPE_CONTRACTOR, NULL)); } gboolean cut_contractor_has_builder (CutContractor *contractor, const gchar *type_name) { GList *node; CutContractorPrivate *priv = CUT_CONTRACTOR_GET_PRIVATE(contractor); for (node = priv->builders; node; node = g_list_next(node)) { CutFactoryBuilder *builder = CUT_FACTORY_BUILDER(node->data); const gchar *name; name = cut_factory_builder_get_type_name(builder); if (!strcmp(type_name, name)) return TRUE; } return FALSE; } GList * cut_contractor_build_factories (CutContractor *contractor) { GList *factories = NULL, *node; CutContractorPrivate *priv = CUT_CONTRACTOR_GET_PRIVATE(contractor); for (node = priv->builders; node; node = g_list_next(node)) { CutFactoryBuilder *builder = CUT_FACTORY_BUILDER(node->data); factories = g_list_concat(cut_factory_builder_build(builder), factories); } return factories; } GList * cut_contractor_build_all_factories (CutContractor *contractor) { GList *factories = NULL, *node; CutContractorPrivate *priv = CUT_CONTRACTOR_GET_PRIVATE(contractor); for (node = priv->builders; node; node = g_list_next(node)) { CutFactoryBuilder *builder = CUT_FACTORY_BUILDER(node->data); factories = g_list_concat(cut_factory_builder_build_all(builder), factories); } return factories; } void cut_contractor_set_option_context (CutContractor *contractor, GOptionContext *context) { GList *node; CutContractorPrivate *priv = CUT_CONTRACTOR_GET_PRIVATE(contractor); for (node = priv->builders; node; node = g_list_next(node)) { CutFactoryBuilder *builder = CUT_FACTORY_BUILDER(node->data); cut_factory_builder_set_option_context(builder, context); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-utils.h0000644000175000017500000001021711277421252020266 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_UTILS_H__ #define __CUT_UTILS_H__ #include G_BEGIN_DECLS typedef enum { CUT_READ, CUT_WRITE } CutPipeMode; #define cut_utils_report_error(error) do \ { \ gchar *inspected; \ \ inspected = gcut_error_inspect(error); \ g_warning("%s", inspected); \ g_free(inspected); \ g_error_free(error); \ } while (0) gchar *cut_utils_create_regex_pattern (const gchar *string); GList *cut_utils_filter_to_regexs (const gchar **filters); gboolean cut_utils_filter_match (GList *regexs, const gchar *name); void cut_utils_append_indent (GString *string, guint size); void cut_utils_append_xml_element_with_value (GString *string, guint indent, const gchar *element_name, const gchar *value); void cut_utils_append_xml_element_with_boolean_value (GString *string, guint indent, const gchar *element_name, gboolean boolean); gchar **cut_utils_strv_concat (const gchar **str_array, ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED; void cut_utils_close_pipe (int *pipe, CutPipeMode mode); const gchar *cut_utils_get_cutter_command_path (void); gchar *cut_utils_expand_path (const gchar *path); gchar *cut_utils_expand_path_va_list (const gchar *path, va_list args); gboolean cut_utils_remove_path (const char *path, GError **error); gboolean cut_utils_remove_path_recursive (const char *path, GError **error); gchar *cut_utils_regex_replace (const gchar *pattern, const gchar *string, const gchar *replacement, GError **error); GList *cut_utils_parse_gdb_backtrace (const gchar *gdb_backtrace); gchar *cut_utils_double_to_string (gdouble value); gint cut_utils_compare_string (gconstpointer data1, gconstpointer data2); gint cut_utils_compare_direct (gconstpointer data1, gconstpointer data2); #ifdef G_OS_WIN32 const gchar *cut_win32_base_path (void); gchar *cut_win32_build_module_dir_name (const gchar *type); gchar *cut_win32_build_factory_module_dir_name (const gchar *type); gboolean cut_win32_kill_process (GPid pid, guint exit_code); #endif G_END_DECLS #endif /* __CUT_UTILS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test.c0000644000175000017500000005530311346170735020111 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include "cut-test.h" #include "cut-test-container.h" #include "cut-run-context.h" #include "cut-test-result.h" #include "cut-utils.h" #include "cut-crash-backtrace.h" #include #ifdef ERROR # undef ERROR /* for Windows */ #endif #define CUT_TEST_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_TEST, CutTestPrivate)) typedef struct _CutTestPrivate CutTestPrivate; struct _CutTestPrivate { gchar *name; gchar *full_name; gchar *element_name; CutTestFunction test_function; GTimer *timer; GTimeVal start_time; gdouble elapsed; GHashTable *attributes; gchar *base_directory; }; enum { PROP_0, PROP_NAME, PROP_ELEMENT_NAME, PROP_TEST_FUNCTION, PROP_BASE_DIRECTORY }; enum { START, PASS_ASSERTION, SUCCESS, FAILURE, ERROR, PENDING, NOTIFICATION, OMISSION, CRASH, COMPLETE, LAST_SIGNAL }; static gint cut_test_signals[LAST_SIGNAL] = {0}; G_DEFINE_TYPE (CutTest, cut_test, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void start (CutTest *test, CutTestContext *test_context); static gdouble get_elapsed (CutTest *test); static void set_elapsed (CutTest *test, gdouble elapsed); static gboolean run (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); static gboolean is_available (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); static void invoke (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); static void emit_result_signal (CutTest *test, CutTestContext *test_context, CutTestResult *result); static void cut_test_class_init (CutTestClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; klass->start = start; klass->get_elapsed = get_elapsed; klass->set_elapsed = set_elapsed; klass->run = run; klass->is_available = is_available; klass->invoke = invoke; klass->emit_result_signal = emit_result_signal; spec = g_param_spec_string("name", "Test name", "The name of the test", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_NAME, spec); spec = g_param_spec_string("element-name", "Element name", "The element name of the test", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_ELEMENT_NAME, spec); spec = g_param_spec_pointer("test-function", "Test Function", "The function for test", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_TEST_FUNCTION, spec); spec = g_param_spec_string("base-directory", "Base directory", "The base directory of the test", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_BASE_DIRECTORY, spec); cut_test_signals[START] = g_signal_new ("start", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (CutTestClass, start), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CUT_TYPE_TEST_CONTEXT); cut_test_signals[PASS_ASSERTION] = g_signal_new ("pass-assertion", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (CutTestClass, pass_assertion), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CUT_TYPE_TEST_CONTEXT); cut_test_signals[SUCCESS] = g_signal_new ("success", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (CutTestClass, success), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_signals[FAILURE] = g_signal_new ("failure", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (CutTestClass, failure), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_signals[ERROR] = g_signal_new ("error", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (CutTestClass, error), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_signals[PENDING] = g_signal_new ("pending", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (CutTestClass, pending), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_signals[NOTIFICATION] = g_signal_new ("notification", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (CutTestClass, notification), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_signals[OMISSION] = g_signal_new("omission", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestClass, omission), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_signals[CRASH] = g_signal_new("crash", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestClass, crash), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_signals[COMPLETE] = g_signal_new("complete", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (CutTestClass, complete), NULL, NULL, _gcut_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, G_TYPE_BOOLEAN); g_type_class_add_private(gobject_class, sizeof(CutTestPrivate)); } static void cut_test_init (CutTest *test) { CutTestPrivate *priv = CUT_TEST_GET_PRIVATE(test); priv->full_name = NULL; priv->test_function = NULL; priv->timer = NULL; priv->start_time.tv_sec = 0; priv->start_time.tv_usec = 0; priv->elapsed = -1.0; priv->attributes = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); } static void free_full_name (CutTestPrivate *priv) { if (priv->full_name) { g_free(priv->full_name); priv->full_name = NULL; } } static void dispose (GObject *object) { CutTestPrivate *priv = CUT_TEST_GET_PRIVATE(object); if (priv->name) { g_free(priv->name); priv->name = NULL; } if (priv->element_name) { g_free(priv->element_name); priv->element_name = NULL; } priv->test_function = NULL; if (priv->timer) { g_timer_destroy(priv->timer); priv->timer = NULL; } if (priv->attributes) { g_hash_table_unref(priv->attributes); priv->attributes = NULL; } free_full_name(priv); if (priv->base_directory) { g_free(priv->base_directory); priv->base_directory = NULL; } G_OBJECT_CLASS(cut_test_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutTestPrivate *priv = CUT_TEST_GET_PRIVATE(object); switch (prop_id) { case PROP_NAME: cut_test_set_name(CUT_TEST(object), g_value_get_string(value)); break; case PROP_ELEMENT_NAME: if (priv->element_name) { g_free(priv->element_name); priv->element_name = NULL; } priv->element_name = g_value_dup_string(value); break; case PROP_TEST_FUNCTION: priv->test_function = g_value_get_pointer(value); break; case PROP_BASE_DIRECTORY: cut_test_set_base_directory(CUT_TEST(object), g_value_get_string(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutTestPrivate *priv = CUT_TEST_GET_PRIVATE(object); switch (prop_id) { case PROP_NAME: g_value_set_string(value, priv->name); break; case PROP_ELEMENT_NAME: g_value_set_string(value, priv->element_name); break; case PROP_TEST_FUNCTION: g_value_set_pointer(value, priv->test_function); break; case PROP_BASE_DIRECTORY: g_value_set_string(value, priv->base_directory); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutTest * cut_test_new (const gchar *name, CutTestFunction function) { return g_object_new(CUT_TYPE_TEST, "element-name", "test", "name", name, "test-function", function, NULL); } CutTest * cut_test_new_empty (void) { return cut_test_new(NULL, NULL); } static void start (CutTest *test, CutTestContext *test_context) { GTimeVal value; g_get_current_time(&value); cut_test_set_start_time(test, &value); } static gboolean is_available (CutTest *test, CutTestContext *test_context, CutRunContext *run_context) { return CUT_TEST_GET_PRIVATE(test)->test_function != NULL; } static void invoke (CutTest *test, CutTestContext *test_context, CutRunContext *run_context) { CutTestPrivate *priv; priv = CUT_TEST_GET_PRIVATE(test); if (cut_run_context_get_stop_before_test(run_context)) G_BREAKPOINT(); priv->test_function(); } static gboolean run (CutTest *test, CutTestContext *test_context, CutRunContext *run_context) { CutTestClass *klass; CutTestPrivate *priv; gboolean success = TRUE; jmp_buf jump_buffer; CutTestSuite *test_suite; CutTestCase *test_case; CutTestIterator *test_iterator; CutTestResult *result; CutTestData *data = NULL; gint signum; jmp_buf crash_jump_buffer; CutCrashBacktrace *crash_backtrace = NULL; priv = CUT_TEST_GET_PRIVATE(test); klass = CUT_TEST_GET_CLASS(test); if (!klass->is_available(test, test_context, run_context)) return FALSE; test_suite = cut_test_context_get_test_suite(test_context); test_case = cut_test_context_get_test_case(test_context); test_iterator = cut_test_context_get_test_iterator(test_context); if (CUT_IS_ITERATED_TEST(test)) data = cut_iterated_test_get_data(CUT_ITERATED_TEST(test)); if (cut_run_context_is_multi_thread(run_context) || !cut_run_context_get_handle_signals(run_context)) { signum = 0; } else { crash_backtrace = cut_crash_backtrace_new(&crash_jump_buffer); signum = setjmp(crash_jump_buffer); } switch (signum) { case 0: g_signal_emit_by_name(test, "start", test_context); cut_test_context_set_jump(test_context, &jump_buffer); if (setjmp(jump_buffer) == 0) { if (priv->timer) { g_timer_start(priv->timer); } else { priv->timer = g_timer_new(); } klass->invoke(test, test_context, run_context); } g_timer_stop(priv->timer); success = !cut_test_context_is_failed(test_context); if (crash_backtrace) cut_crash_backtrace_free(crash_backtrace); break; #ifndef G_OS_WIN32 case SIGSEGV: case SIGABRT: case SIGTERM: success = FALSE; cut_crash_backtrace_emit(test_suite, test_case, test, test_iterator, data, test_context); break; case SIGINT: cut_run_context_cancel(run_context); break; #endif default: break; } if (success) { result = cut_test_result_new(CUT_TEST_RESULT_SUCCESS, test, test_iterator, test_case, NULL, data, NULL, NULL, NULL); cut_test_emit_result_signal(test, test_context, result); g_object_unref(result); } g_signal_emit_by_name(test, "complete", test_context, success); return success; } gboolean cut_test_run (CutTest *test, CutTestContext *test_context, CutRunContext *run_context) { return CUT_TEST_GET_CLASS(test)->run(test, test_context, run_context); } const gchar * cut_test_get_name (CutTest *test) { return CUT_TEST_GET_PRIVATE(test)->name; } void cut_test_set_name (CutTest *test, const gchar *name) { CutTestPrivate *priv = CUT_TEST_GET_PRIVATE(test); if (priv->name) { g_free(priv->name); priv->name = NULL; } free_full_name(priv); if (name) priv->name = g_strdup(name); } const gchar * cut_test_get_full_name (CutTest *test) { CutTestPrivate *priv; CutTestData *data = NULL; priv = CUT_TEST_GET_PRIVATE(test); if (priv->full_name) return priv->full_name; if (CUT_IS_ITERATED_TEST(test)) data = cut_iterated_test_get_data(CUT_ITERATED_TEST(test)); if (priv->name && data) { priv->full_name = g_strconcat(priv->name, " (", cut_test_data_get_name(data), ")", NULL); } else if (priv->name) { priv->full_name = g_strdup(priv->name); } else if (data) { priv->full_name = g_strconcat(" (", cut_test_data_get_name(data), ")", NULL); } return priv->full_name; } const gchar * cut_test_get_description (CutTest *test) { return cut_test_get_attribute(test, "description"); } void cut_test_get_start_time (CutTest *test, GTimeVal *start_time) { memcpy(start_time, &(CUT_TEST_GET_PRIVATE(test)->start_time), sizeof(GTimeVal)); } void cut_test_set_start_time (CutTest *test, GTimeVal *start_time) { memcpy(&(CUT_TEST_GET_PRIVATE(test)->start_time), start_time, sizeof(GTimeVal)); } static gdouble get_elapsed (CutTest *test) { CutTestPrivate *priv = CUT_TEST_GET_PRIVATE(test); if (!(priv->elapsed < 0.0)) return priv->elapsed; if (priv->timer) return g_timer_elapsed(priv->timer, NULL); else return 0.0; } gdouble cut_test_get_elapsed (CutTest *test) { return CUT_TEST_GET_CLASS(test)->get_elapsed(test); } static void set_elapsed (CutTest *test, gdouble elapsed) { CUT_TEST_GET_PRIVATE(test)->elapsed = elapsed; } void cut_test_set_elapsed (CutTest *test, gdouble elapsed) { CUT_TEST_GET_CLASS(test)->set_elapsed(test, elapsed); } const gchar * cut_test_get_attribute (CutTest *test, const gchar *name) { return g_hash_table_lookup(CUT_TEST_GET_PRIVATE(test)->attributes, name); } void cut_test_set_attribute (CutTest *test, const gchar *name, const gchar *value) { g_hash_table_replace(CUT_TEST_GET_PRIVATE(test)->attributes, g_strdup(name), g_strdup(value)); } GHashTable * cut_test_get_attributes (CutTest *test) { return CUT_TEST_GET_PRIVATE(test)->attributes; } const gchar * cut_test_get_base_directory (CutTest *test) { return CUT_TEST_GET_PRIVATE(test)->base_directory; } void cut_test_set_base_directory (CutTest *test, const gchar *base_directory) { CutTestPrivate *priv = CUT_TEST_GET_PRIVATE(test); if (priv->base_directory) { g_free(priv->base_directory); priv->base_directory = NULL; } priv->base_directory = g_strdup(base_directory); } gchar * cut_test_to_xml (CutTest *test) { GString *string; string = g_string_new(NULL); cut_test_to_xml_string(test, string, 0); return g_string_free(string, FALSE); } typedef struct _AppendAttributeInfo { GString *string; guint indent; } AppendAttributeInfo; static void append_attribute (const gchar *key, const gchar *value, AppendAttributeInfo *info) { if (strcmp(key, "description") == 0) return; cut_utils_append_indent(info->string, info->indent); g_string_append(info->string, "\n"); } void cut_test_to_xml_string (CutTest *test, GString *string, guint indent) { CutTestPrivate *priv; gchar *escaped, *start_time, *elapsed; const gchar *description, *name; GHashTable *attributes; priv = CUT_TEST_GET_PRIVATE(test); escaped = g_markup_escape_text(priv->element_name, -1); cut_utils_append_indent(string, indent); g_string_append_printf(string, "<%s>\n", escaped); name = cut_test_get_name(test); if (name) cut_utils_append_xml_element_with_value(string, indent + 2, "name", name); description = cut_test_get_description(test); if (description) cut_utils_append_xml_element_with_value(string, indent + 2, "description", description); start_time = g_time_val_to_iso8601(&(priv->start_time)); cut_utils_append_xml_element_with_value(string, indent + 2, "start-time", start_time); g_free(start_time); elapsed = cut_utils_double_to_string(cut_test_get_elapsed(test)); cut_utils_append_xml_element_with_value(string, indent + 2, "elapsed", elapsed); g_free(elapsed); attributes = cut_test_get_attributes(test); if (attributes) { AppendAttributeInfo info; info.string = string; info.indent = indent + 2; g_hash_table_foreach(attributes, (GHFunc)append_attribute, &info); } cut_utils_append_indent(string, indent); g_string_append_printf(string, "\n", escaped); g_free(escaped); } void cut_test_set_result_elapsed (CutTest *test, CutTestResult *result) { CutTestPrivate *priv; priv = CUT_TEST_GET_PRIVATE(test); cut_test_result_set_start_time(result, &(priv->start_time)); cut_test_result_set_elapsed(result, cut_test_get_elapsed(test)); } static void emit_result_signal (CutTest *test, CutTestContext *test_context, CutTestResult *result) { const gchar *status_signal_name = NULL; CutTestResultStatus status; status = cut_test_result_get_status(result); status_signal_name = cut_test_result_status_to_signal_name(status); g_signal_emit_by_name(test, status_signal_name, test_context, result); } void cut_test_emit_result_signal (CutTest *test, CutTestContext *test_context, CutTestResult *result) { cut_test_set_result_elapsed(test, result); CUT_TEST_GET_CLASS(test)->emit_result_signal(test, test_context, result); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-console.c0000644000175000017500000000425311264347452020573 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "cut-console.h" gboolean cut_console_guess_color_usability (void) { const gchar *term, *emacs; term = g_getenv("TERM"); if (term && (g_str_has_suffix(term, "term") || g_str_has_suffix(term, "term-color") || g_str_equal(term, "screen") || g_str_equal(term, "linux"))) return TRUE; emacs = g_getenv("EMACS"); if (emacs && (g_str_equal(emacs, "t"))) return TRUE; return FALSE; } gboolean cut_console_parse_color_arg (const gchar *option_name, const gchar *value, gboolean *use_color, GError **error) { if (value == NULL || g_utf8_collate(value, "yes") == 0 || g_utf8_collate(value, "true") == 0) { *use_color = TRUE; } else if (g_utf8_collate(value, "no") == 0 || g_utf8_collate(value, "false") == 0) { *use_color = FALSE; } else if (g_utf8_collate(value, "auto") == 0) { *use_color = cut_console_guess_color_usability(); } else { g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, _("Invalid color value: %s"), value); return FALSE; } return TRUE; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-enum-types.c0000644000175000017500000001635211424022573021232 0ustar koukou /* Generated data (by glib-mkenums) */ #include "cut-enum-types.h" #include "cut-public.h" #include "cut-analyzer.h" #include "cut-backtrace-entry.h" #include "cut-colorize-differ.h" #include "cut-console-diff-writer.h" #include "cut-console.h" #include "cut-contractor.h" #include "cut-diff-writer.h" #include "cut-differ.h" #include "cut-factory-builder.h" #include "cut-file-stream-reader.h" #include "cut-iterated-test.h" #include "cut-listener-utils.h" #include "cut-listener.h" #include "cut-main.h" #include "cut-module-factory-utils.h" #include "cut-module-factory.h" #include "cut-pipeline.h" #include "cut-private.h" #include "cut-process.h" #include "cut-readable-differ.h" #include "cut-report-factory-builder.h" #include "cut-report.h" #include "cut-run-context.h" #include "cut-runner.h" #include "cut-stream-factory-builder.h" #include "cut-stream-parser.h" #include "cut-stream-reader.h" #include "cut-stream.h" #include "cut-string-diff-writer.h" #include "cut-sub-process-group.h" #include "cut-sub-process.h" #include "cut-test-case.h" #include "cut-test-container.h" #include "cut-test-context.h" #include "cut-test-data.h" #include "cut-test-iterator.h" #include "cut-test-result.h" #include "cut-test-runner.h" #include "cut-test-suite.h" #include "cut-test.h" #include "cut-ui-factory-builder.h" #include "cut-ui.h" #include "cut-unified-differ.h" #include "cut-verbose-level.h" /* enumerations from "cut-public.h" */ GType cut_test_result_status_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_TEST_RESULT_INVALID, "CUT_TEST_RESULT_INVALID", "invalid" }, { CUT_TEST_RESULT_SUCCESS, "CUT_TEST_RESULT_SUCCESS", "success" }, { CUT_TEST_RESULT_NOTIFICATION, "CUT_TEST_RESULT_NOTIFICATION", "notification" }, { CUT_TEST_RESULT_OMISSION, "CUT_TEST_RESULT_OMISSION", "omission" }, { CUT_TEST_RESULT_PENDING, "CUT_TEST_RESULT_PENDING", "pending" }, { CUT_TEST_RESULT_FAILURE, "CUT_TEST_RESULT_FAILURE", "failure" }, { CUT_TEST_RESULT_ERROR, "CUT_TEST_RESULT_ERROR", "error" }, { CUT_TEST_RESULT_CRASH, "CUT_TEST_RESULT_CRASH", "crash" }, { CUT_TEST_RESULT_LAST, "CUT_TEST_RESULT_LAST", "last" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutTestResultStatus", values); } return etype; } GType cut_diff_writer_tag_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_DIFF_WRITER_TAG_NONE, "CUT_DIFF_WRITER_TAG_NONE", "none" }, { CUT_DIFF_WRITER_TAG_SUMMARY, "CUT_DIFF_WRITER_TAG_SUMMARY", "summary" }, { CUT_DIFF_WRITER_TAG_CONTEXT, "CUT_DIFF_WRITER_TAG_CONTEXT", "context" }, { CUT_DIFF_WRITER_TAG_EQUAL_MARK, "CUT_DIFF_WRITER_TAG_EQUAL_MARK", "equal-mark" }, { CUT_DIFF_WRITER_TAG_DELETED_MARK, "CUT_DIFF_WRITER_TAG_DELETED_MARK", "deleted-mark" }, { CUT_DIFF_WRITER_TAG_INSERTED_MARK, "CUT_DIFF_WRITER_TAG_INSERTED_MARK", "inserted-mark" }, { CUT_DIFF_WRITER_TAG_DIFFERENCE_MARK, "CUT_DIFF_WRITER_TAG_DIFFERENCE_MARK", "difference-mark" }, { CUT_DIFF_WRITER_TAG_EQUAL_LINE, "CUT_DIFF_WRITER_TAG_EQUAL_LINE", "equal-line" }, { CUT_DIFF_WRITER_TAG_DELETED_LINE, "CUT_DIFF_WRITER_TAG_DELETED_LINE", "deleted-line" }, { CUT_DIFF_WRITER_TAG_INSERTED_LINE, "CUT_DIFF_WRITER_TAG_INSERTED_LINE", "inserted-line" }, { CUT_DIFF_WRITER_TAG_DIFFERENCE_LINE, "CUT_DIFF_WRITER_TAG_DIFFERENCE_LINE", "difference-line" }, { CUT_DIFF_WRITER_TAG_EQUAL_SEGMENT, "CUT_DIFF_WRITER_TAG_EQUAL_SEGMENT", "equal-segment" }, { CUT_DIFF_WRITER_TAG_DELETED_SEGMENT, "CUT_DIFF_WRITER_TAG_DELETED_SEGMENT", "deleted-segment" }, { CUT_DIFF_WRITER_TAG_INSERTED_SEGMENT, "CUT_DIFF_WRITER_TAG_INSERTED_SEGMENT", "inserted-segment" }, { CUT_DIFF_WRITER_TAG_DIFFERENCE_SEGMENT, "CUT_DIFF_WRITER_TAG_DIFFERENCE_SEGMENT", "difference-segment" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutDiffWriterTag", values); } return etype; } GType cut_file_stream_reader_error_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_FILE_STREAM_READER_ERROR_FILE, "CUT_FILE_STREAM_READER_ERROR_FILE", "file" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutFileStreamReaderError", values); } return etype; } GType cut_pipeline_error_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_PIPELINE_ERROR_PIPE, "CUT_PIPELINE_ERROR_PIPE", "pipe" }, { CUT_PIPELINE_ERROR_COMMAND_LINE, "CUT_PIPELINE_ERROR_COMMAND_LINE", "command-line" }, { CUT_PIPELINE_ERROR_SPAWN, "CUT_PIPELINE_ERROR_SPAWN", "spawn" }, { CUT_PIPELINE_ERROR_CHILD_PID, "CUT_PIPELINE_ERROR_CHILD_PID", "child-pid" }, { CUT_PIPELINE_ERROR_IO_ERROR, "CUT_PIPELINE_ERROR_IO_ERROR", "io-error" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutPipelineError", values); } return etype; } GType cut_order_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_ORDER_NONE_SPECIFIED, "CUT_ORDER_NONE_SPECIFIED", "none-specified" }, { CUT_ORDER_NAME_ASCENDING, "CUT_ORDER_NAME_ASCENDING", "name-ascending" }, { CUT_ORDER_NAME_DESCENDING, "CUT_ORDER_NAME_DESCENDING", "name-descending" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutOrder", values); } return etype; } GType cut_stream_reader_error_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_STREAM_READER_ERROR_READ, "CUT_STREAM_READER_ERROR_READ", "read" }, { CUT_STREAM_READER_ERROR_PARSE, "CUT_STREAM_READER_ERROR_PARSE", "parse" }, { CUT_STREAM_READER_ERROR_END_PARSE, "CUT_STREAM_READER_ERROR_END_PARSE", "end-parse" }, { CUT_STREAM_READER_ERROR_IO_ERROR, "CUT_STREAM_READER_ERROR_IO_ERROR", "io-error" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutStreamReaderError", values); } return etype; } GType cut_test_context_error_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_TEST_CONTEXT_ERROR_FATAL, "CUT_TEST_CONTEXT_ERROR_FATAL", "fatal" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutTestContextError", values); } return etype; } GType cut_verbose_level_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_VERBOSE_LEVEL_INVALID, "CUT_VERBOSE_LEVEL_INVALID", "invalid" }, { CUT_VERBOSE_LEVEL_SILENT, "CUT_VERBOSE_LEVEL_SILENT", "silent" }, { CUT_VERBOSE_LEVEL_NORMAL, "CUT_VERBOSE_LEVEL_NORMAL", "normal" }, { CUT_VERBOSE_LEVEL_VERBOSE, "CUT_VERBOSE_LEVEL_VERBOSE", "verbose" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutVerboseLevel", values); } return etype; } GType cut_verbose_level_error_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { CUT_VERBOSE_LEVEL_ERROR_BAD_VALUE, "CUT_VERBOSE_LEVEL_ERROR_BAD_VALUE", "value" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("CutVerboseLevelError", values); } return etype; } /* Generated data ends here */ cutter-testing-framework-1.1.7/cutter/cut-test-context.c0000644000175000017500000013135411523751075021573 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #ifdef HAVE_SYS_WAIT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #include #include #ifdef G_OS_WIN32 # ifdef __MINGW32__ # define _WIN32_WINDOWS 0x0401 /* to get IsDebuggerPresent */ # endif # include # include /* For getpid() */ # include #endif #include "cut-run-context.h" #include "cut-test-context.h" #include "cut-test-suite.h" #include "cut-test-iterator.h" #include "cut-test-result.h" #include "cut-test-data.h" #include "cut-process.h" #include "cut-backtrace-entry.h" #include "cut-utils.h" #define cut_omit(context, message) do \ { \ cut_test_context_register_result(context, \ CUT_TEST_RESULT_OMISSION, \ message); \ cut_test_context_long_jump(context); \ } while (0) #define CUT_TEST_CONTEXT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_TEST_CONTEXT, CutTestContextPrivate)) typedef struct _CutTestContextPrivate CutTestContextPrivate; struct _CutTestContextPrivate { CutRunContext *run_context; CutTestSuite *test_suite; CutTestCase *test_case; CutTestIterator *test_iterator; CutTest *test; gboolean failed; gboolean omitted; gboolean is_multi_thread; jmp_buf *jump_buffer; GList *taken_objects; GList *taken_string_arrays; GList *taken_g_objects; GList *taken_errors; GList *taken_lists; GList *taken_hash_tables; GList *current_data; GList *data_list; GList *processes; gchar *fixture_data_dir; GHashTable *cached_fixture_data; GList *backtrace; gchar *user_message; guint user_message_keep_count; GMutex *mutex; gchar *expected; gchar *actual; CutTestResult *current_result; guint user_message_jump_nest; }; enum { PROP_0, PROP_RUN_CONTEXT, PROP_TEST_SUITE, PROP_TEST_CASE, PROP_TEST_ITERATOR, PROP_TEST }; G_DEFINE_TYPE (CutTestContext, cut_test_context, G_TYPE_OBJECT) typedef struct _TakenObject TakenObject; struct _TakenObject { gpointer object; CutDestroyFunction destroy_function; }; static TakenObject * taken_object_new (gpointer object, CutDestroyFunction destroy_function) { TakenObject *taken_object; taken_object = g_slice_new(TakenObject); taken_object->object = object; taken_object->destroy_function = destroy_function; return taken_object; } static void taken_object_free (TakenObject *taken_object) { if (taken_object->object) taken_object->destroy_function(taken_object->object); g_slice_free(TakenObject, taken_object); } typedef struct _TakenList TakenList; struct _TakenList { GList *list; CutDestroyFunction destroy_function; }; static TakenList * taken_list_new (GList *list, CutDestroyFunction destroy_function) { TakenList *taken_list; taken_list = g_slice_new(TakenList); taken_list->list = list; taken_list->destroy_function = destroy_function; return taken_list; } static void taken_list_free (TakenList *taken_list) { if (taken_list->destroy_function) { GList *node; for (node = taken_list->list; node; node = g_list_next(node)) { if (node->data) taken_list->destroy_function(node->data); } } g_list_free(taken_list->list); g_slice_free(TakenList, taken_list); } static GStaticPrivate current_context_private; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_test_context_class_init (CutTestContextClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_object("run-context", "Run context", "The run context of the test context", CUT_TYPE_RUN_CONTEXT, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_RUN_CONTEXT, spec); spec = g_param_spec_object("test-suite", "Test suite", "The test suite of the test context", CUT_TYPE_TEST_SUITE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST_SUITE, spec); spec = g_param_spec_object("test-case", "Test case", "The test case of the test context", CUT_TYPE_TEST_CASE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST_CASE, spec); spec = g_param_spec_object("test-iterator", "Test iterator", "The test iterator of the test context", CUT_TYPE_TEST_ITERATOR, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST_ITERATOR, spec); spec = g_param_spec_object("test", "Test", "The test of the test context", CUT_TYPE_TEST, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST, spec); g_type_class_add_private(gobject_class, sizeof(CutTestContextPrivate)); } static void fixture_data_free (gpointer data) { GString *string = data; g_string_free(string, TRUE); } static void cut_test_context_init (CutTestContext *context) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); priv->run_context = NULL; priv->test_suite = NULL; priv->test_case = NULL; priv->test_iterator = NULL; priv->test = NULL; priv->failed = FALSE; priv->omitted = FALSE; priv->is_multi_thread = FALSE; priv->taken_objects = NULL; priv->data_list = NULL; priv->current_data = NULL; priv->processes = NULL; priv->fixture_data_dir = NULL; priv->cached_fixture_data = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, fixture_data_free); priv->backtrace = NULL; priv->user_message = NULL; priv->user_message_keep_count = 0; priv->mutex = g_mutex_new(); priv->expected = NULL; priv->actual = NULL; priv->current_result = NULL; priv->user_message_jump_nest = 0; } static void free_data_list (CutTestContextPrivate *priv) { if (priv->data_list) { g_list_foreach(priv->data_list, (GFunc)g_object_unref, NULL); g_list_free(priv->data_list); priv->data_list = NULL; } priv->current_data = NULL; } static void clear_user_message (CutTestContextPrivate *priv) { if (priv->user_message_keep_count > 0) priv->user_message_keep_count--; if (priv->user_message_keep_count == 0) { if (priv->user_message) { g_free(priv->user_message); priv->user_message = NULL; } } } static void clear_additional_test_result_data (CutTestContextPrivate *priv) { if (priv->expected) { g_free(priv->expected); priv->expected = NULL; } if (priv->actual) { g_free(priv->actual); priv->actual = NULL; } } static void clear_current_result (CutTestContextPrivate *priv) { if (priv->current_result) { g_object_unref(priv->current_result); priv->current_result = NULL; } } static void dispose (GObject *object) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(object); if (priv->run_context) { g_object_unref(priv->run_context); priv->run_context = NULL; } if (priv->test_suite) { g_object_unref(priv->test_suite); priv->test_suite = NULL; } if (priv->test_case) { g_object_unref(priv->test_case); priv->test_case = NULL; } if (priv->test_iterator) { g_object_unref(priv->test_iterator); priv->test_iterator = NULL; } if (priv->test) { g_object_unref(priv->test); priv->test = NULL; } if (priv->processes) { g_list_foreach(priv->processes, (GFunc)g_object_unref, NULL); g_list_free(priv->processes); priv->processes = NULL; } if (priv->taken_objects) { g_list_foreach(priv->taken_objects, (GFunc)taken_object_free, NULL); g_list_free(priv->taken_objects); priv->taken_objects = NULL; } free_data_list(priv); if (priv->fixture_data_dir) { g_free(priv->fixture_data_dir); priv->fixture_data_dir = NULL; } if (priv->cached_fixture_data) { g_hash_table_unref(priv->cached_fixture_data); priv->cached_fixture_data = NULL; } if (priv->backtrace) { g_list_foreach(priv->backtrace, (GFunc)g_object_unref, NULL); g_list_free(priv->backtrace); priv->backtrace = NULL; } clear_user_message(priv); if (priv->mutex) { g_mutex_free(priv->mutex); priv->mutex = NULL; } clear_additional_test_result_data(priv); clear_current_result(priv); G_OBJECT_CLASS(cut_test_context_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutTestContext *context = CUT_TEST_CONTEXT(object); switch (prop_id) { case PROP_RUN_CONTEXT: cut_test_context_set_run_context(context, g_value_get_object(value)); break; case PROP_TEST_SUITE: cut_test_context_set_test_suite(context, g_value_get_object(value)); break; case PROP_TEST_CASE: cut_test_context_set_test_case(context, g_value_get_object(value)); break; case PROP_TEST_ITERATOR: cut_test_context_set_test_iterator(context, g_value_get_object(value)); break; case PROP_TEST: cut_test_context_set_test(context, g_value_get_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(object); switch (prop_id) { case PROP_RUN_CONTEXT: g_value_set_object(value, priv->run_context); break; case PROP_TEST_SUITE: g_value_set_object(value, priv->test_suite); break; case PROP_TEST_CASE: g_value_set_object(value, priv->test_case); break; case PROP_TEST_ITERATOR: g_value_set_object(value, priv->test_iterator); break; case PROP_TEST: g_value_set_object(value, priv->test); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } GQuark cut_test_context_error_quark (void) { return g_quark_from_static_string("cut-test-context-error-quark"); } void cut_test_context_current_init (void) { g_static_private_init(¤t_context_private); } void cut_test_context_current_quit (void) { g_static_private_free(¤t_context_private); } static void contexts_free (gpointer data) { GPtrArray *contexts = data; g_ptr_array_free(contexts, TRUE); } void cut_test_context_current_push (CutTestContext *context) { GPtrArray *contexts; contexts = g_static_private_get(¤t_context_private); if (!contexts) { contexts = g_ptr_array_new(); g_static_private_set(¤t_context_private, contexts, contexts_free); } g_ptr_array_add(contexts, context); } CutTestContext * cut_test_context_current_pop (void) { GPtrArray *contexts; CutTestContext *context = NULL; contexts = g_static_private_get(¤t_context_private); if (contexts) { context = g_ptr_array_index(contexts, contexts->len - 1); g_ptr_array_remove_index(contexts, contexts->len - 1); } return context; } CutTestContext * cut_test_context_current_peek (void) { GPtrArray *contexts; contexts = g_static_private_get(¤t_context_private); if (contexts) return g_ptr_array_index(contexts, contexts->len - 1); else return NULL; } CutTestContext * cut_test_context_new (CutRunContext *run_context, CutTestSuite *test_suite, CutTestCase *test_case, CutTestIterator *test_iterator, CutTest *test) { return g_object_new(CUT_TYPE_TEST_CONTEXT, "run-context", run_context, "test-suite", test_suite, "test-case", test_case, "test-iterator", test_iterator, "test", test, NULL); } CutTestContext * cut_test_context_new_empty (void) { return cut_test_context_new(NULL, NULL, NULL, NULL, NULL); } CutRunContext * cut_test_context_get_run_context (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->run_context; } void cut_test_context_set_run_context (CutTestContext *context, CutRunContext *run_context) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->run_context) g_object_unref(priv->run_context); if (run_context) g_object_ref(run_context); priv->run_context = run_context; } CutTestSuite * cut_test_context_get_test_suite (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->test_suite; } void cut_test_context_set_test_suite (CutTestContext *context, CutTestSuite *test_suite) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->test_suite) g_object_unref(priv->test_suite); if (test_suite) g_object_ref(test_suite); priv->test_suite = test_suite; } CutTestCase * cut_test_context_get_test_case (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->test_case; } void cut_test_context_set_test_case (CutTestContext *context, CutTestCase *test_case) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->test_case) g_object_unref(priv->test_case); if (test_case) g_object_ref(test_case); priv->test_case = test_case; } CutTestIterator * cut_test_context_get_test_iterator (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->test_iterator; } void cut_test_context_set_test_iterator (CutTestContext *context, CutTestIterator *test_iterator) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->test_iterator) g_object_unref(priv->test_iterator); if (test_iterator) g_object_ref(test_iterator); priv->test_iterator = test_iterator; } CutTest * cut_test_context_get_test (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->test; } void cut_test_context_set_test (CutTestContext *context, CutTest *test) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->test) g_object_unref(priv->test); if (test) g_object_ref(test); priv->test = test; } void cut_test_context_add_data (CutTestContext *context, const gchar *first_data_name, ...) { CutTestContextPrivate *priv; const gchar *name; va_list args; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); name = first_data_name; va_start(args, first_data_name); while (name) { CutTestData *test_data; gpointer data; CutDestroyFunction destroy_function; data = va_arg(args, gpointer); destroy_function = va_arg(args, CutDestroyFunction); test_data = cut_test_data_new(name, data, destroy_function); priv->data_list = g_list_prepend(priv->data_list, test_data); if (!priv->current_data) priv->current_data = priv->data_list; name = va_arg(args, gchar *); } va_end(args); } void cut_test_context_set_attributes (CutTestContext *context, const gchar *first_attribute_name, ...) { CutTestContextPrivate *priv; CutTest *target = NULL; const gchar *name; va_list args; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->test) { target = priv->test; } else if (priv->test_iterator) { target = CUT_TEST(priv->test_iterator); } else if (priv->test_case) { target = CUT_TEST(priv->test_case); } else if (priv->test_suite) { target = CUT_TEST(priv->test_suite); } if (!target) { g_warning("can't find a target to set attributes."); return; } name = first_attribute_name; va_start(args, first_attribute_name); while (name) { const gchar *value; value = va_arg(args, gchar *); cut_test_set_attribute(target, name, value); name = va_arg(args, gchar *); } va_end(args); } void cut_test_context_set_data (CutTestContext *context, CutTestData *test_data) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); free_data_list(priv); if (test_data) { g_object_ref(test_data); priv->data_list = g_list_prepend(priv->data_list, test_data); priv->current_data = priv->data_list; } } CutTestData * cut_test_context_get_data (CutTestContext *context, guint index) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); return g_list_nth_data(priv->data_list, index); } void cut_test_context_shift_data (CutTestContext *context) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->current_data) priv->current_data = g_list_previous(priv->current_data); } gboolean cut_test_context_have_data (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->current_data != NULL; } CutTestData * cut_test_context_get_current_data (CutTestContext *context) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); g_return_val_if_fail(priv->current_data != NULL, NULL); return priv->current_data->data; } guint cut_test_context_get_n_data (CutTestContext *context) { return g_list_length(CUT_TEST_CONTEXT_GET_PRIVATE(context)->data_list); } void cut_test_context_set_jump (CutTestContext *context, jmp_buf *buffer) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); priv->jump_buffer = buffer; } jmp_buf * cut_test_context_get_jump (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->jump_buffer; } void cut_test_context_long_jump (CutTestContext *context) { CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); longjmp(*(priv->jump_buffer), 1); } void cut_test_context_pass_assertion (CutTestContext *context) { CutTestContextPrivate *priv; g_return_if_fail(CUT_IS_TEST_CONTEXT(context)); priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); g_return_if_fail(priv->test); clear_user_message(priv); g_signal_emit_by_name(priv->test, "pass-assertion", context); } static CutProcess * get_process_from_pid (CutTestContext *context, int pid) { GList *node; CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); for (node = priv->processes; node; node = g_list_next(node)) { CutProcess *process = CUT_PROCESS(node->data); if (pid == cut_process_get_pid(process)) return process; } return NULL; } void cut_test_context_emit_signal (CutTestContext *context, CutTestResult *result) { CutTestContextPrivate *priv; CutTest *target = NULL; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->test) { target = priv->test; } else if (priv->test_iterator) { target = CUT_TEST(priv->test_iterator); } else if (priv->test_case) { target = CUT_TEST(priv->test_case); } if (target) cut_test_emit_result_signal(target, context, result); } void cut_test_context_set_current_result (CutTestContext *context, CutTestResultStatus status, const char *system_message) { CutTestContextPrivate *priv; CutTestData *test_data = NULL; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); clear_current_result(priv); if (cut_test_result_status_is_critical(status)) { priv->failed = TRUE; } priv->omitted = (status == CUT_TEST_RESULT_OMISSION); if (priv->current_data) test_data = priv->current_data->data; priv->current_result = cut_test_result_new(status, priv->test, priv->test_iterator, priv->test_case, priv->test_suite, test_data, priv->user_message, system_message, priv->backtrace); clear_user_message(priv); cut_test_result_set_expected(priv->current_result, priv->expected); cut_test_result_set_actual(priv->current_result, priv->actual); clear_additional_test_result_data(priv); } void cut_test_context_set_current_result_user_message (CutTestContext *context, const char *user_message) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (!priv->current_result) return; cut_test_result_set_user_message(priv->current_result, user_message); } gboolean cut_test_context_get_have_current_result (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->current_result != NULL; } void cut_test_context_process_current_result (CutTestContext *context) { CutTestContextPrivate *priv; CutTestResultStatus status; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (!priv->current_result) return; status = cut_test_result_get_status(priv->current_result); if (priv->test) { CutProcess *process; /* If the current procss is a child process, the pid is 0. */ process = get_process_from_pid(context, 0); if (process) { cut_process_send_test_result_to_parent(process, priv->current_result); clear_current_result(priv); if (status == CUT_TEST_RESULT_NOTIFICATION) return; cut_process_exit(process); } } cut_test_context_emit_signal(context, priv->current_result); if (status == CUT_TEST_RESULT_FAILURE && priv->run_context && cut_run_context_get_fatal_failures(priv->run_context)) { const gchar *message; message = _("Treat a failure as a fatal problem, aborting."); cut_run_context_emit_error(priv->run_context, CUT_TEST_CONTEXT_ERROR, CUT_TEST_CONTEXT_ERROR_FATAL, NULL, "%s", message); cut_run_context_emit_complete_run(priv->run_context, FALSE); #ifdef G_OS_WIN32 if (IsDebuggerPresent()) G_BREAKPOINT(); else abort(); #else # ifdef SIGTRAP G_BREAKPOINT(); # else abort(); # endif #endif } clear_current_result(priv); } void cut_test_context_register_result (CutTestContext *context, CutTestResultStatus status, const char *system_message) { cut_test_context_set_current_result(context, status, system_message); cut_test_context_process_current_result(context); } void cut_test_context_start_user_message_jump (CutTestContext *context) { CUT_TEST_CONTEXT_GET_PRIVATE(context)->user_message_jump_nest++; } void cut_test_context_finish_user_message_jump (CutTestContext *context) { CUT_TEST_CONTEXT_GET_PRIVATE(context)->user_message_jump_nest--; } gboolean cut_test_context_in_user_message_jump (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->user_message_jump_nest > 0; } void cut_test_context_set_failed (CutTestContext *context, gboolean failed) { CUT_TEST_CONTEXT_GET_PRIVATE(context)->failed = failed; } gboolean cut_test_context_is_failed (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->failed; } gboolean cut_test_context_need_test_run (CutTestContext *context) { return !cut_test_context_is_failed(context) && !CUT_TEST_CONTEXT_GET_PRIVATE(context)->omitted; } const void * cut_test_context_take (CutTestContext *context, void *object, CutDestroyFunction destroy_function) { CutTestContextPrivate *priv; TakenObject *taken_object; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); taken_object = taken_object_new(object, destroy_function); priv->taken_objects = g_list_prepend(priv->taken_objects, taken_object); return object; } const void * cut_test_context_take_memory (CutTestContext *context, void *memory) { return cut_test_context_take(context, memory, g_free); } const char * cut_test_context_take_string (CutTestContext *context, char *string) { return cut_test_context_take(context, string, g_free); } const char * cut_test_context_take_strdup (CutTestContext *context, const char *string) { return cut_test_context_take_string(context, g_strdup(string)); } const char * cut_test_context_take_strndup (CutTestContext *context, const char *string, size_t size) { return cut_test_context_take_string(context, g_strndup(string, size)); } const void * cut_test_context_take_memdup (CutTestContext *context, const void *memory, size_t size) { return cut_test_context_take_memory(context, g_memdup(memory, size)); } const char * cut_test_context_take_printf (CutTestContext *context, const char *format, ...) { const char *taken_string = NULL; va_list args; va_start(args, format); if (format) { char *formatted_string; formatted_string = g_strdup_vprintf(format, args); taken_string = cut_test_context_take_string(context, formatted_string); } va_end(args); return taken_string; } const char ** cut_test_context_take_string_array (CutTestContext *context, char **strings) { return (const char **)cut_test_context_take(context, (gpointer)strings, (CutDestroyFunction)g_strfreev); } GObject * cut_test_context_take_g_object (CutTestContext *context, GObject *object) { return (GObject *)cut_test_context_take(context, object, g_object_unref); } const GError * cut_test_context_take_g_error (CutTestContext *context, GError *error) { return cut_test_context_take(context, error, (CutDestroyFunction)g_error_free); } const GList * cut_test_context_take_g_list (CutTestContext *context, GList *list, CutDestroyFunction destroy_function) { TakenList *taken_list; taken_list = taken_list_new(list, destroy_function); cut_test_context_take(context, taken_list, (CutDestroyFunction)taken_list_free); return list; } GHashTable * cut_test_context_take_g_hash_table (CutTestContext *context, GHashTable *hash_table) { return (GHashTable *)cut_test_context_take(context, hash_table, (CutDestroyFunction)g_hash_table_unref); } static void cut_test_context_g_string_free (GString *string) { g_string_free(string, TRUE); } GString * cut_test_context_take_g_string (CutTestContext *context, GString *string) { return (GString *)cut_test_context_take(context, string, (CutDestroyFunction) cut_test_context_g_string_free); } int cut_test_context_trap_fork (CutTestContext *context) { #ifdef G_OS_WIN32 cut_omit(context, "cut_test_context_wait_process() doesn't " "work on the environment."); return 0; #else CutTestContextPrivate *priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); CutProcess *process; if (cut_test_context_is_multi_thread(context)) { cut_test_context_register_result(context, CUT_TEST_RESULT_OMISSION, "can't use cut_fork() " "in multi thread mode"); cut_test_context_long_jump(context); } process = cut_process_new(); priv->processes = g_list_prepend(priv->processes, process); return cut_process_fork(process); #endif } int cut_test_context_wait_process (CutTestContext *context, int pid, unsigned int timeout) { int exit_status = EXIT_SUCCESS; #ifdef G_OS_WIN32 cut_omit(context, "cut_test_context_wait_process() doesn't " "work on the environment."); #else CutProcess *process; process = get_process_from_pid(context, pid); if (process) { int process_status; const gchar *xml; process_status = cut_process_wait(process, timeout); exit_status = WEXITSTATUS(process_status); xml = cut_process_get_result_from_child(process); if (xml) xml = strstr(xml, ""); while (xml) { CutTestResult *result; gchar *next_result_xml; gint result_xml_length = -1; next_result_xml = strstr(xml + 1, ""); if (next_result_xml) result_xml_length = next_result_xml - xml; result = cut_test_result_new_from_xml(xml, result_xml_length, NULL); if (result) { cut_test_context_emit_signal(context, result); g_object_unref(result); } if (result_xml_length == -1) xml = NULL; else xml += result_xml_length; } } #endif return exit_status; } const char * cut_test_context_get_forked_stdout_message (CutTestContext *context, int pid) { CutProcess *process; process = get_process_from_pid(context, pid); if (process) return cut_process_get_stdout_message(process); return NULL; } const char * cut_test_context_get_forked_stderr_message (CutTestContext *context, int pid) { CutProcess *process; process = get_process_from_pid(context, pid); if (process) return cut_process_get_stderr_message(process); return NULL; } void cut_test_context_set_multi_thread (CutTestContext *context, gboolean is_multi_thread) { CUT_TEST_CONTEXT_GET_PRIVATE(context)->is_multi_thread = is_multi_thread; } gboolean cut_test_context_is_multi_thread (CutTestContext *context) { return CUT_TEST_CONTEXT_GET_PRIVATE(context)->is_multi_thread; } gchar * cut_test_context_to_xml (CutTestContext *context) { GString *string; string = g_string_new(NULL); cut_test_context_to_xml_string(context, string, 0); return g_string_free(string, FALSE); } void cut_test_context_to_xml_string (CutTestContext *context, GString *string, guint indent) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); cut_utils_append_indent(string, indent); g_string_append(string, "\n"); if (priv->test_suite) cut_test_to_xml_string(CUT_TEST(priv->test_suite), string, indent + 2); if (priv->test_case) cut_test_to_xml_string(CUT_TEST(priv->test_case), string, indent + 2); if (priv->test_iterator) cut_test_to_xml_string(CUT_TEST(priv->test_iterator), string, indent + 2); if (priv->test) cut_test_to_xml_string(priv->test, string, indent + 2); if (priv->current_data) cut_test_data_to_xml_string(priv->current_data->data, string, indent + 2); cut_utils_append_xml_element_with_boolean_value(string, indent + 2, "failed", priv->failed); cut_utils_append_indent(string, indent); g_string_append(string, "\n"); } void cut_test_context_set_fixture_data_dir (CutTestContext *context, const gchar *path, ...) { CutTestContextPrivate *priv; va_list args; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->fixture_data_dir) g_free(priv->fixture_data_dir); va_start(args, path); priv->fixture_data_dir = cut_utils_expand_path_va_list(path, args); va_end(args); } const gchar * cut_test_context_build_fixture_path_va_list (CutTestContext *context, const gchar *path, va_list args) { CutTestContextPrivate *priv; gchar *concatenated_path; const gchar *full_path; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); concatenated_path = cut_utils_build_path_va_list(path, args); if (g_path_is_absolute(concatenated_path)) { full_path = cut_test_context_take_string(context, concatenated_path); } else { gchar *resolved_path; if (priv->fixture_data_dir) { resolved_path = g_build_filename(priv->fixture_data_dir, concatenated_path, NULL); } else { resolved_path = cut_utils_expand_path(concatenated_path); } full_path = cut_test_context_take_string(context, resolved_path); } g_free(concatenated_path); return full_path; } const gchar * cut_test_context_build_fixture_path (CutTestContext *context, const gchar *path, ...) { va_list args; const gchar *full_path; va_start(args, path); full_path = cut_test_context_build_fixture_path_va_list(context, path, args); va_end(args); return full_path; } GString * cut_test_context_get_fixture_data_va_list (CutTestContext *context, GError **error, const gchar **full_path, const gchar *path, va_list args) { CutTestContextPrivate *priv; GString *data; const gchar *fixture_full_path; if (!path) return NULL; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); fixture_full_path = cut_test_context_build_fixture_path_va_list(context, path, args); data = g_hash_table_lookup(priv->cached_fixture_data, fixture_full_path); if (!data) { gchar *contents; gsize length; if (g_file_get_contents(fixture_full_path, &contents, &length, error)) { data = g_string_new_len(contents, length); g_free(contents); g_hash_table_insert(priv->cached_fixture_data, g_strdup(fixture_full_path), data); } } if (full_path) *full_path = fixture_full_path; return data; } GString * cut_test_context_get_fixture_data (CutTestContext *context, GError **error, const gchar **full_path, const gchar *path, ...) { GString *data; va_list args; if (!path) return NULL; va_start(args, path); data = cut_test_context_get_fixture_data_va_list(context, error, full_path, path, args); va_end(args); return data; } gchar * cut_test_context_build_source_filename (CutTestContext *context, const gchar *filename) { CutTestContextPrivate *priv; const gchar *base_directory = NULL; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->test) base_directory = cut_test_get_base_directory(priv->test); if (!base_directory && priv->test_case) base_directory = cut_test_get_base_directory(CUT_TEST(priv->test_case)); if (!base_directory && priv->test_suite) base_directory = cut_test_get_base_directory(CUT_TEST(priv->test_suite)); if (base_directory) { gchar *relative_filename, *full_filename; relative_filename = g_build_filename(base_directory, filename, NULL); if (priv->run_context) { full_filename = cut_run_context_build_source_filename(priv->run_context, relative_filename); g_free(relative_filename); return full_filename; } else { return relative_filename; } } if (priv->run_context) return cut_run_context_build_source_filename(priv->run_context, filename); else return g_strdup(filename); } static gchar * convert_directory_separator_in_relative_path (const gchar *relative_path) { gchar *convert, *dirname, *basename; dirname = g_path_get_dirname(relative_path); basename = g_path_get_basename(relative_path); convert = g_build_filename(dirname, basename, NULL); g_free(dirname); g_free(basename); return convert; } void cut_test_context_push_backtrace (CutTestContext *context, const char *relative_path, const char *filename, unsigned int line, const char *function_name, const char *info) { CutTestContextPrivate *priv; CutBacktraceEntry *entry; gchar *full_filename = NULL; g_return_if_fail(context != NULL); g_return_if_fail(CUT_IS_TEST_CONTEXT(context)); priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); if (relative_path) { const gchar *source_directory = NULL; gchar *convert_relative_path; convert_relative_path = convert_directory_separator_in_relative_path(relative_path); if (priv->run_context) source_directory = cut_run_context_get_source_directory(priv->run_context); if (source_directory) full_filename = g_build_filename(source_directory, convert_relative_path, filename, NULL); else full_filename = g_build_filename(convert_relative_path, filename, NULL); g_free(convert_relative_path); } else { full_filename = cut_test_context_build_source_filename(context, filename); } entry = cut_backtrace_entry_new(full_filename, line, function_name, info); g_free(full_filename); priv->backtrace = g_list_prepend(priv->backtrace, entry); g_mutex_unlock(priv->mutex); } void cut_test_context_pop_backtrace (CutTestContext *context) { CutTestContextPrivate *priv; CutBacktraceEntry *entry; g_return_if_fail(context != NULL); g_return_if_fail(CUT_IS_TEST_CONTEXT(context)); priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); g_return_if_fail(priv->backtrace != NULL); g_mutex_lock(priv->mutex); entry = priv->backtrace->data; g_object_unref(entry); priv->backtrace = g_list_delete_link(priv->backtrace, priv->backtrace); g_mutex_unlock(priv->mutex); } void cut_test_context_get_last_backtrace (CutTestContext *context, const char **filename, unsigned int *line, const char **function_name, const char **info) { CutTestContextPrivate *priv; CutBacktraceEntry *entry; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); g_return_if_fail(priv->backtrace != NULL); entry = priv->backtrace->data; if (filename) *filename = cut_backtrace_entry_get_file(entry); if (line) *line = cut_backtrace_entry_get_line(entry); if (function_name) *function_name = cut_backtrace_entry_get_function(entry); if (info) *info = cut_backtrace_entry_get_info(entry); } void cut_test_context_set_user_message (CutTestContext *context, const char *format, ...) { va_list args; va_start(args, format); cut_test_context_set_user_message_va_list(context, format, args); va_end(args); } void cut_test_context_set_user_message_backward_compatibility (CutTestContext *context, const char *format, ...) { va_list args; if (!format) return; va_start(args, format); cut_test_context_set_user_message_va_list(context, format, args); va_end(args); } void cut_test_context_set_user_message_va_list (CutTestContext *context, const char *format, va_list args) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); clear_user_message(priv); if (!format) return; priv->user_message = g_strdup_vprintf(format, args); } void cut_test_context_check_optional_assertion_message (CutTestContext *context) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); clear_user_message(priv); priv->user_message = g_strdup("optional assertion message " "on the current environment " "is unavailable"); } void cut_test_context_keep_user_message (CutTestContext *context) { CUT_TEST_CONTEXT_GET_PRIVATE(context)->user_message_keep_count++; } void cut_test_context_set_expected (CutTestContext *context, const gchar *expected) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->expected) g_free(priv->expected); priv->expected = g_strdup(expected); } void cut_test_context_set_actual (CutTestContext *context, const gchar *actual) { CutTestContextPrivate *priv; priv = CUT_TEST_CONTEXT_GET_PRIVATE(context); if (priv->actual) g_free(priv->actual); priv->actual = g_strdup(actual); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-sequence-matcher.c0000644000175000017500000010362711424022512022350 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-sequence-matcher.h" #include "../gcutter/gcut-list.h" #define CUT_SEQUENCE_MATCHER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_SEQUENCE_MATCHER, CutSequenceMatcherPrivate)) typedef struct _CutSequenceMatcherPrivate CutSequenceMatcherPrivate; struct _CutSequenceMatcherPrivate { GSequence *from; GSequence *to; GSequenceIterCompareFunc compare_func; gpointer compare_func_user_data; GHashTable *to_indices; GHashTable *junks; GList *matches; GList *blocks; GList *operations; GList *grouped_operations; gdouble ratio; guint context_size; }; enum { PROP_0, PROP_FROM_SEQUENCE, PROP_TO_SEQUENCE, PROP_COMPARE_FUNC, PROP_COMPARE_FUNC_USER_DATA, PROP_TO_INDICES, PROP_JUNKS }; G_DEFINE_TYPE (CutSequenceMatcher, cut_sequence_matcher, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); CutSequenceMatchInfo * cut_sequence_match_info_new (guint from_index, guint to_index, guint size) { CutSequenceMatchInfo *info; info = g_slice_new(CutSequenceMatchInfo); info->from_index = from_index; info->to_index = to_index; info->size = size; return info; } void cut_sequence_match_info_free (CutSequenceMatchInfo *info) { g_slice_free(CutSequenceMatchInfo, info); } CutSequenceMatchOperation * cut_sequence_match_operation_new (CutSequenceMatchOperationType type, guint from_begin, guint from_end, guint to_begin, guint to_end) { CutSequenceMatchOperation *operation; operation = g_slice_new(CutSequenceMatchOperation); operation->type = type; operation->from_begin = from_begin; operation->from_end = from_end; operation->to_begin = to_begin; operation->to_end = to_end; return operation; } void cut_sequence_match_operation_free (CutSequenceMatchOperation *operation) { g_slice_free(CutSequenceMatchOperation, operation); } static void cut_sequence_matcher_class_init (CutSequenceMatcherClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_pointer("from-sequence", "From Sequence", "From Sequence", G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_FROM_SEQUENCE, spec); spec = g_param_spec_pointer("to-sequence", "To Sequence", "To Sequence", G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_TO_SEQUENCE, spec); spec = g_param_spec_pointer("compare-function", "Compare Fcuntion", "Compare Fcuntion", G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_COMPARE_FUNC, spec); spec = g_param_spec_pointer("compare-function-user-data", "Compare Fcuntion User Data", "Compare Fcuntion User Data", G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_COMPARE_FUNC_USER_DATA, spec); spec = g_param_spec_pointer("to-indices", "To Indecies", "To Indecies", G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_TO_INDICES, spec); spec = g_param_spec_pointer("junks", "Junks", "Junks", G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_JUNKS, spec); g_type_class_add_private(gobject_class, sizeof(CutSequenceMatcherPrivate)); } static void cut_sequence_matcher_init (CutSequenceMatcher *sequence_matcher) { CutSequenceMatcherPrivate *priv; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(sequence_matcher); priv->from = NULL; priv->to = NULL; priv->to_indices = NULL; priv->junks = NULL; priv->matches = NULL; priv->blocks = NULL; priv->operations = NULL; priv->grouped_operations = NULL; priv->ratio = -1.0; priv->context_size = 3; } static void dispose_goruped_operations (CutSequenceMatcherPrivate *priv) { GList *node; if (!priv->grouped_operations) return; for (node = priv->grouped_operations; node; node = g_list_next(node)) { GList *operations = node->data; g_list_foreach(operations, (GFunc)cut_sequence_match_operation_free, NULL); g_list_free(operations); } g_list_free(priv->grouped_operations); priv->grouped_operations = NULL; } static void dispose (GObject *object) { CutSequenceMatcherPrivate *priv; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(object); if (priv->from) { g_sequence_free(priv->from); priv->from = NULL; } if (priv->to) { g_sequence_free(priv->to); priv->to = NULL; } if (priv->to_indices) { g_hash_table_unref(priv->to_indices); priv->to_indices = NULL; } if (priv->junks) { g_hash_table_unref(priv->junks); priv->junks = NULL; } if (priv->matches) { g_list_foreach(priv->matches, (GFunc)cut_sequence_match_info_free, NULL); g_list_free(priv->matches); priv->matches = NULL; } if (priv->blocks) { g_list_foreach(priv->blocks, (GFunc)cut_sequence_match_info_free, NULL); g_list_free(priv->blocks); priv->blocks = NULL; } if (priv->operations) { g_list_foreach(priv->operations, (GFunc)cut_sequence_match_operation_free, NULL); g_list_free(priv->operations); priv->operations = NULL; } dispose_goruped_operations(priv); G_OBJECT_CLASS(cut_sequence_matcher_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutSequenceMatcherPrivate *priv; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(object); switch (prop_id) { case PROP_FROM_SEQUENCE: priv->from = g_value_get_pointer(value); break; case PROP_TO_SEQUENCE: priv->to = g_value_get_pointer(value); break; case PROP_COMPARE_FUNC: priv->compare_func = g_value_get_pointer(value); break; case PROP_COMPARE_FUNC_USER_DATA: priv->compare_func_user_data = g_value_get_pointer(value); break; case PROP_TO_INDICES: priv->to_indices = g_value_get_pointer(value); break; case PROP_JUNKS: priv->junks = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutSequenceMatcherPrivate *priv; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(object); switch (prop_id) { case PROP_FROM_SEQUENCE: g_value_set_pointer(value, priv->from); break; case PROP_TO_SEQUENCE: g_value_set_pointer(value, priv->to); break; case PROP_COMPARE_FUNC: g_value_set_pointer(value, priv->compare_func); break; case PROP_COMPARE_FUNC_USER_DATA: g_value_set_pointer(value, priv->compare_func_user_data); break; case PROP_TO_INDICES: g_value_set_pointer(value, priv->to_indices); break; case PROP_JUNKS: g_value_set_pointer(value, priv->junks); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } typedef struct { GHashTable *junks; CutJunkFilterFunc junk_filter_func; gpointer junk_filter_func_user_data; } RemoveJunkData; static gboolean remove_junk (gpointer key, gpointer value, gpointer user_data) { RemoveJunkData *data = user_data; gboolean is_junk; is_junk = data->junk_filter_func(key, data->junk_filter_func_user_data); if (is_junk) { g_hash_table_insert(data->junks, key, GINT_TO_POINTER(TRUE)); } return is_junk; } static void remove_junks_from_to_indices (CutSequenceMatcher *matcher, CutJunkFilterFunc junk_filter_func, gpointer junk_filter_func_user_data) { CutSequenceMatcherPrivate *priv; RemoveJunkData data; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); data.junk_filter_func = junk_filter_func; data.junk_filter_func_user_data = junk_filter_func_user_data; data.junks = priv->junks; g_hash_table_foreach_steal(priv->to_indices, remove_junk, &data); } static void update_to_indices (CutSequenceMatcher *matcher, CutJunkFilterFunc junk_filter_func, gpointer junk_filter_func_user_data) { CutSequenceMatcherPrivate *priv; gint i; GSequenceIter *iter, *begin, *end; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); if (!priv->to) return; begin = g_sequence_get_begin_iter(priv->to); end = g_sequence_get_end_iter(priv->to); for (i = 0, iter = begin; iter != end; i++, iter = g_sequence_iter_next(iter)) { gpointer data; GList *indices; data = g_sequence_get(iter); indices = g_hash_table_lookup(priv->to_indices, data); indices = g_list_append(indices, GINT_TO_POINTER(i)); g_hash_table_replace(priv->to_indices, data, g_list_copy(indices)); } if (junk_filter_func) remove_junks_from_to_indices(matcher, junk_filter_func, junk_filter_func_user_data); } CutSequenceMatcher * cut_sequence_matcher_new (GSequence *from, GSequence *to, GSequenceIterCompareFunc compare_func, gpointer compare_func_user_data, GHashFunc content_hash_func, GEqualFunc content_equal_func, CutJunkFilterFunc junk_filter_func, gpointer junk_filter_func_user_data) { CutSequenceMatcher *matcher; matcher = g_object_new(CUT_TYPE_SEQUENCE_MATCHER, "from-sequence", from, "to-sequence", to, "compare-function", compare_func, "compare-function-user-data", compare_func_user_data, "to-indices", g_hash_table_new_full(content_hash_func, content_equal_func, NULL, (GDestroyNotify)g_list_free), "junks", g_hash_table_new(content_hash_func, content_equal_func), NULL); update_to_indices(matcher, junk_filter_func, junk_filter_func_user_data); return matcher; } static GSequence * char_sequence_new (const gchar *string) { GSequence *sequence; sequence = g_sequence_new(NULL); for (; *string != '\0'; string = g_utf8_next_char(string)) { g_sequence_append(sequence, GUINT_TO_POINTER(g_utf8_get_char(string))); } return sequence; } static gint char_sequence_iter_compare (GSequenceIter *data1, GSequenceIter *data2, gpointer user_data) { gunichar character1, character2; character1 = GPOINTER_TO_UINT(g_sequence_get(data1)); character2 = GPOINTER_TO_UINT(g_sequence_get(data2)); if (character1 < character2) { return -1; } else if (character1 == character2) { return 0; } else { return 1; } } static guint char_value_hash (gconstpointer v) { return GPOINTER_TO_UINT(v); } static gboolean char_value_equal (gconstpointer v1, gconstpointer v2) { gunichar character1, character2; character1 = GPOINTER_TO_UINT(v1); character2 = GPOINTER_TO_UINT(v2); return character1 == character2; } CutSequenceMatcher * cut_sequence_matcher_char_new (const gchar *from, const gchar *to) { return cut_sequence_matcher_char_new_full(from, to, NULL, NULL); } CutSequenceMatcher * cut_sequence_matcher_char_new_full (const gchar *from, const gchar *to, CutJunkFilterFunc junk_filter_func, gpointer junk_filter_func_user_data) { return cut_sequence_matcher_new(char_sequence_new(from), char_sequence_new(to), char_sequence_iter_compare, NULL, char_value_hash, char_value_equal, junk_filter_func, junk_filter_func_user_data); } static GSequence * string_sequence_new (gchar **strings) { GSequence *sequence; sequence = g_sequence_new(g_free); for (; *strings; strings++) { g_sequence_append(sequence, g_strdup(*strings)); } return sequence; } static gint string_sequence_iter_compare (GSequenceIter *data1, GSequenceIter *data2, gpointer user_data) { gchar *string1, *string2; string1 = g_sequence_get(data1); string2 = g_sequence_get(data2); return strcmp(string1, string2); } CutSequenceMatcher * cut_sequence_matcher_string_new (gchar **from, gchar **to) { return cut_sequence_matcher_string_new_full(from, to, NULL, NULL); } CutSequenceMatcher * cut_sequence_matcher_string_new_full (gchar **from, gchar **to, CutJunkFilterFunc junk_filter_func, gpointer junk_filter_func_user_data) { return cut_sequence_matcher_new(string_sequence_new(from), string_sequence_new(to), string_sequence_iter_compare, NULL, g_str_hash, g_str_equal, junk_filter_func, junk_filter_func_user_data); } const GList * cut_sequence_matcher_get_to_index (CutSequenceMatcher *matcher, gpointer to_content) { CutSequenceMatcherPrivate *priv; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); if (!priv->to) return NULL; return g_hash_table_lookup(priv->to_indices, to_content); } static CutSequenceMatchInfo * find_best_match_position (CutSequenceMatcher *matcher, guint from_begin, guint from_end, guint to_begin, guint to_end) { CutSequenceMatcherPrivate *priv; CutSequenceMatchInfo *info; GSequenceIter *iter, *begin, *end; GHashTable *sizes, *current_sizes; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); info = cut_sequence_match_info_new(from_begin, to_begin, 0); sizes = g_hash_table_new(g_direct_hash, g_direct_equal); begin = g_sequence_get_iter_at_pos(priv->from, from_begin); end = g_sequence_get_iter_at_pos(priv->from, from_end); for (iter = begin; iter != end; iter = g_sequence_iter_next(iter)) { guint from_index; const GList *node; from_index = g_sequence_iter_get_position(iter); current_sizes = g_hash_table_new(g_direct_hash, g_direct_equal); for (node = cut_sequence_matcher_get_to_index(matcher, g_sequence_get(iter)); node; node = g_list_next(node)) { guint size, to_index; gpointer size_as_pointer; to_index = GPOINTER_TO_UINT(node->data); if (to_index < to_begin) continue; if (to_index + 1 > to_end) break; size_as_pointer = g_hash_table_lookup(sizes, GUINT_TO_POINTER(to_index - 1)); size = GPOINTER_TO_INT(size_as_pointer); size++; size_as_pointer = GUINT_TO_POINTER(size); g_hash_table_insert(current_sizes, GUINT_TO_POINTER(to_index), size_as_pointer); if (size > info->size) { info->from_index = from_index - size + 1; info->to_index = to_index - size + 1; info->size = size; } } g_hash_table_unref(sizes); sizes = current_sizes; } g_hash_table_unref(sizes); return info; } static gboolean check_junk (CutSequenceMatcherPrivate *priv, gboolean should_junk, guint index) { gpointer key; gboolean is_junk; key = g_sequence_get(g_sequence_get_iter_at_pos(priv->to, index)); is_junk = GPOINTER_TO_INT(g_hash_table_lookup(priv->junks, key)); return should_junk ? is_junk : !is_junk; } static gboolean equal_content (CutSequenceMatcherPrivate *priv, guint from_index, guint to_index) { GSequenceIter *from_iter, *to_iter; from_iter = g_sequence_get_iter_at_pos(priv->from, from_index); to_iter = g_sequence_get_iter_at_pos(priv->to, to_index); return priv->compare_func(from_iter, to_iter, priv->compare_func_user_data) == 0; } static void adjust_best_info_with_junk_predicate (CutSequenceMatcher *matcher, gboolean should_junk, CutSequenceMatchInfo *best_info, guint from_begin, guint from_end, guint to_begin, guint to_end) { CutSequenceMatcherPrivate *priv; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); while (best_info->from_index > from_begin && best_info->to_index > to_begin && check_junk(priv, should_junk, best_info->to_index - 1) && equal_content(priv, best_info->from_index - 1, best_info->to_index - 1)) { best_info->from_index--; best_info->to_index--; best_info->size++; } while (best_info->from_index + best_info->size + 1 < from_end && best_info->to_index + best_info->size + 1 < to_end && check_junk(priv, should_junk, best_info->to_index + best_info->size) && equal_content(priv, best_info->from_index + best_info->size, best_info->to_index + best_info->size)) { best_info->size++; } } CutSequenceMatchInfo * cut_sequence_matcher_get_longest_match (CutSequenceMatcher *matcher, guint from_begin, guint from_end, guint to_begin, guint to_end) { CutSequenceMatcherPrivate *priv; CutSequenceMatchInfo *info; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); info = find_best_match_position(matcher, from_begin, from_end, to_begin, to_end); if (g_hash_table_size(priv->junks) > 0) { adjust_best_info_with_junk_predicate(matcher, FALSE, info, from_begin, from_end, to_begin, to_end); adjust_best_info_with_junk_predicate(matcher, TRUE, info, from_begin, from_end, to_begin, to_end); } return info; } typedef struct _MatchingInfo MatchingInfo; struct _MatchingInfo { guint from_begin; guint from_end; guint to_begin; guint to_end; }; static void push_matching_info (GQueue *queue, guint from_begin, guint from_end, guint to_begin, guint to_end) { MatchingInfo *info; info = g_slice_new(MatchingInfo); info->from_begin = from_begin; info->from_end = from_end; info->to_begin = to_begin; info->to_end = to_end; g_queue_push_tail(queue, info); } static void pop_matching_info (GQueue *queue, MatchingInfo *info) { MatchingInfo *popped_info; popped_info = g_queue_pop_head(queue); *info = *popped_info; g_slice_free(MatchingInfo, popped_info); } static gint compare_match_info (gconstpointer data1, gconstpointer data2) { const CutSequenceMatchInfo *info1, *info2; info1 = data1; info2 = data2; if (info1->from_index < info2->from_index) { return -1; } else if (info1->from_index == info2->from_index) { return 0; } else { return 1; } } const GList * cut_sequence_matcher_get_matches (CutSequenceMatcher *matcher) { CutSequenceMatcherPrivate *priv; GList *matches = NULL; GQueue *queue; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); if (priv->matches) return priv->matches; queue = g_queue_new(); push_matching_info(queue, 0, g_sequence_get_length(priv->from), 0, g_sequence_get_length(priv->to)); while (!g_queue_is_empty(queue)) { MatchingInfo info; CutSequenceMatchInfo *match_info; pop_matching_info(queue, &info); match_info = cut_sequence_matcher_get_longest_match(matcher, info.from_begin, info.from_end, info.to_begin, info.to_end); if (match_info->size == 0) { cut_sequence_match_info_free(match_info); continue; } if (info.from_begin < match_info->from_index && info.to_begin < match_info->to_index) push_matching_info(queue, info.from_begin, match_info->from_index, info.to_begin, match_info->to_index); matches = g_list_prepend(matches, match_info); if (match_info->from_index + match_info->size < info.from_end && match_info->to_index + match_info->size < info.to_end) push_matching_info(queue, match_info->from_index + match_info->size, info.from_end, match_info->to_index + match_info->size, info.to_end); } g_queue_free(queue); priv->matches = g_list_sort(matches, compare_match_info); return priv->matches; } static GList * prepend_match_info (GList *list, guint begin, guint end, guint size) { return g_list_prepend(list, cut_sequence_match_info_new(begin, end, size)); } const GList * cut_sequence_matcher_get_blocks (CutSequenceMatcher *matcher) { CutSequenceMatcherPrivate *priv; guint from_index, to_index, size; const GList *node; GList *blocks = NULL; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); if (priv->blocks) return priv->blocks; from_index = to_index = size = 0; for (node = cut_sequence_matcher_get_matches(matcher); node; node = g_list_next(node)) { CutSequenceMatchInfo *info = node->data; if (from_index + size == info->from_index && to_index + size == info->to_index) { size += info->size; } else { if (size > 0) blocks = prepend_match_info(blocks, from_index, to_index, size); from_index = info->from_index; to_index = info->to_index; size = info->size; } } if (size > 0) blocks = prepend_match_info(blocks, from_index, to_index, size); blocks = prepend_match_info(blocks, g_sequence_get_length(priv->from), g_sequence_get_length(priv->to), 0); priv->blocks = g_list_reverse(blocks); return priv->blocks; } static CutSequenceMatchOperationType determine_operation_type (guint from_index, guint to_index, CutSequenceMatchInfo *info) { if (from_index < info->from_index && to_index < info->to_index) { return CUT_SEQUENCE_MATCH_OPERATION_REPLACE; } else if (from_index < info->from_index) { return CUT_SEQUENCE_MATCH_OPERATION_DELETE; } else if (to_index < info->to_index) { return CUT_SEQUENCE_MATCH_OPERATION_INSERT; } else { return CUT_SEQUENCE_MATCH_OPERATION_EQUAL; } } static GList * prepend_operation (GList *list, CutSequenceMatchOperationType type, guint from_begin, guint from_end, guint to_begin, guint to_end) { return g_list_prepend(list, cut_sequence_match_operation_new(type, from_begin, from_end, to_begin, to_end)); } const GList * cut_sequence_matcher_get_operations (CutSequenceMatcher *matcher) { CutSequenceMatcherPrivate *priv; const GList *node; GList *operations = NULL; guint from_index = 0; guint to_index = 0; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); if (priv->operations) return priv->operations; for (node = cut_sequence_matcher_get_blocks(matcher); node; node = g_list_next(node)) { CutSequenceMatchInfo *info = node->data; CutSequenceMatchOperationType type; type = determine_operation_type(from_index, to_index, info); if (type != CUT_SEQUENCE_MATCH_OPERATION_EQUAL) operations = prepend_operation(operations, type, from_index, info->from_index, to_index, info->to_index); from_index = info->from_index + info->size; to_index = info->to_index + info->size; if (info->size > 0) operations = prepend_operation(operations, CUT_SEQUENCE_MATCH_OPERATION_EQUAL, info->from_index, from_index, info->to_index, to_index); } priv->operations = g_list_reverse(operations); return priv->operations; } static GList * get_edge_expanded_copied_operations (CutSequenceMatcher *matcher, guint context_size) { const GList *original_operations = NULL; GList *operations = NULL; original_operations = cut_sequence_matcher_get_operations(matcher); if (original_operations) { CutSequenceMatchOperation *operation = original_operations->data; const GList *node; guint from_begin, from_end, to_begin, to_end; from_begin = operation->from_begin; from_end = operation->from_end; to_begin = operation->to_begin; to_end = operation->to_end; node = original_operations; if (operation->type == CUT_SEQUENCE_MATCH_OPERATION_EQUAL) { guint from_context_begin = 0, to_context_begin = 0; if (from_end > context_size) from_context_begin = from_end - context_size; if (to_end > context_size) to_context_begin = to_end - context_size; operations = prepend_operation(operations, CUT_SEQUENCE_MATCH_OPERATION_EQUAL, MAX(from_begin, from_context_begin), from_end, MAX(to_begin, to_context_begin), to_end); node = g_list_next(node); } for (; node; node = g_list_next(node)) { operation = node->data; from_begin = operation->from_begin; from_end = operation->from_end; to_begin = operation->to_begin; to_end = operation->to_end; if (!g_list_next(node) && operation->type == CUT_SEQUENCE_MATCH_OPERATION_EQUAL) { operations = prepend_operation(operations, CUT_SEQUENCE_MATCH_OPERATION_EQUAL, from_begin, MIN(from_end, from_begin + context_size), to_begin, MIN(to_end, to_begin + context_size)); } else { operations = prepend_operation(operations, operation->type, from_begin, from_end, to_begin, to_end); } } operations = g_list_reverse(operations); } else { operations = prepend_operation(operations, CUT_SEQUENCE_MATCH_OPERATION_EQUAL, 0, 0, 0, 0); } return operations; } const GList * cut_sequence_matcher_get_grouped_operations (CutSequenceMatcher *matcher) { CutSequenceMatcherPrivate *priv; GList *node; GList *operations = NULL; GList *groups = NULL; GList *group = NULL; guint context_size; guint group_window; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); if (priv->grouped_operations) return priv->grouped_operations; context_size = priv->context_size; operations = get_edge_expanded_copied_operations(matcher, context_size); group_window = context_size * 2; for (node = operations; node; node = g_list_next(node)) { CutSequenceMatchOperation *operation = node->data; guint from_begin, from_end, to_begin, to_end; from_begin = operation->from_begin; from_end = operation->from_end; to_begin = operation->to_begin; to_end = operation->to_end; if (operation->type == CUT_SEQUENCE_MATCH_OPERATION_EQUAL && ((from_end - from_begin) > group_window)) { operation->from_end = MIN(from_end, from_begin + context_size); operation->to_end = MIN(to_end, to_begin + context_size); group = g_list_prepend(group, operation); groups = g_list_prepend(groups, g_list_reverse(group)); group = NULL; if (from_end > context_size) from_begin = MAX(from_begin, from_end - context_size); if (to_end > context_size) to_begin = MAX(to_begin, to_end - context_size); group = prepend_operation(group, operation->type, from_begin, from_end, to_begin, to_end); } else { group = g_list_prepend(group, operation); } } if (group) groups = g_list_prepend(groups, g_list_reverse(group)); g_list_free(operations); priv->grouped_operations = g_list_reverse(groups); return priv->grouped_operations; } gdouble cut_sequence_matcher_get_ratio (CutSequenceMatcher *matcher) { CutSequenceMatcherPrivate *priv; const GList *node; guint length; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); if (priv->ratio >= 0.0) return priv->ratio; length = g_sequence_get_length(priv->from) + g_sequence_get_length(priv->to); if (length == 0) { priv->ratio = 1.0; } else { guint matches = 0; for (node = cut_sequence_matcher_get_blocks(matcher); node; node = g_list_next(node)) { CutSequenceMatchInfo *info = node->data; matches += info->size; } priv->ratio = 2.0 * matches / length; } return priv->ratio; } guint cut_sequence_matcher_get_context_size (CutSequenceMatcher *matcher) { return CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher)->context_size; } void cut_sequence_matcher_set_context_size (CutSequenceMatcher *matcher, guint context_size) { CutSequenceMatcherPrivate *priv; priv = CUT_SEQUENCE_MATCHER_GET_PRIVATE(matcher); if (priv->context_size != context_size) { priv->context_size = context_size; dispose_goruped_operations(priv); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-mach-o-loader.c0000644000175000017500000002407111271044467021537 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #ifdef HAVE_MACH_O_LOADER_H # include # include #endif #include #include "cut-mach-o-loader.h" #define CUT_MACH_O_LOADER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_MACH_O_LOADER, CutMachOLoaderPrivate)) typedef enum { ARCHITECTURE_UNKNOWN, ARCHITECTURE_32BIT, ARCHITECTURE_64BIT } ArchitectureBit; typedef struct _CutMachOLoaderPrivate CutMachOLoaderPrivate; struct _CutMachOLoaderPrivate { gchar *so_filename; gchar *content; gsize length; ArchitectureBit bit; }; enum { PROP_0, PROP_SO_FILENAME }; G_DEFINE_TYPE(CutMachOLoader, cut_mach_o_loader, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_mach_o_loader_class_init (CutMachOLoaderClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("so-filename", ".so filename", "The filename of shared object", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_SO_FILENAME, spec); g_type_class_add_private(gobject_class, sizeof(CutMachOLoaderPrivate)); } static void cut_mach_o_loader_init (CutMachOLoader *loader) { CutMachOLoaderPrivate *priv = CUT_MACH_O_LOADER_GET_PRIVATE(loader); priv->so_filename = NULL; priv->content = NULL; priv->length = 0; priv->bit = ARCHITECTURE_UNKNOWN; } static void dispose (GObject *object) { CutMachOLoaderPrivate *priv = CUT_MACH_O_LOADER_GET_PRIVATE(object); if (priv->so_filename) { g_free(priv->so_filename); priv->so_filename = NULL; } if (priv->content) { g_free(priv->content); priv->content = NULL; } G_OBJECT_CLASS(cut_mach_o_loader_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutMachOLoaderPrivate *priv = CUT_MACH_O_LOADER_GET_PRIVATE(object); switch (prop_id) { case PROP_SO_FILENAME: if (priv->so_filename) g_free(priv->so_filename); priv->so_filename = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutMachOLoaderPrivate *priv = CUT_MACH_O_LOADER_GET_PRIVATE(object); switch (prop_id) { case PROP_SO_FILENAME: g_value_set_string(value, priv->so_filename); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutMachOLoader * cut_mach_o_loader_new (const gchar *so_filename) { return g_object_new(CUT_TYPE_MACH_O_LOADER, "so-filename", so_filename, NULL); } gboolean cut_mach_o_loader_is_mach_o (CutMachOLoader *loader) { #ifdef HAVE_MACH_O_LOADER_H CutMachOLoaderPrivate *priv; GError *error = NULL; uint32_t magic = 0; priv = CUT_MACH_O_LOADER_GET_PRIVATE(loader); if (!g_file_get_contents(priv->so_filename, &priv->content, &priv->length, &error)) { g_warning("can't read shared library file: %s", error->message); g_error_free(error); return FALSE; } if (priv->length >= sizeof(magic)) memcpy(&magic, priv->content, sizeof(magic)); switch (magic) { case MH_MAGIC: priv->bit = ARCHITECTURE_32BIT; break; case MH_MAGIC_64: priv->bit = ARCHITECTURE_64BIT; break; default: g_free(priv->content); priv->content = NULL; break; } return priv->content != NULL; #else return FALSE; #endif } gboolean cut_mach_o_loader_support_attribute (CutMachOLoader *loader) { #ifdef HAVE_MACH_O_LOADER_H return TRUE; #else return FALSE; #endif } #ifdef HAVE_MACH_O_LOADER_H static void update_section_index (CutMachOLoaderPrivate *priv, gsize offset, uint32_t *section_index, uint32_t *text_section_index) { struct segment_command *segment; struct segment_command_64 *segment_64; gint j; const gchar *segment_name; uint32_t n_sections; struct section *section = NULL; struct section_64 *section_64 = NULL; if (priv->bit == ARCHITECTURE_32BIT) { segment = (struct segment_command *)(priv->content + offset); segment_name = segment->segname; n_sections = segment->nsects; } else { segment_64 = (struct segment_command_64 *)(priv->content + offset); segment_name = segment_64->segname; n_sections = segment_64->nsects; } if (!g_str_equal(segment_name, "__TEXT")) { *section_index += n_sections; return; } if (priv->bit == ARCHITECTURE_32BIT) { section = (struct section *)(priv->content + offset + sizeof(*segment)); } else { section_64 = (struct section_64 *)(priv->content + offset + sizeof(*segment_64)); } for (j = 0; j < n_sections; j++) { const gchar *section_name; if (priv->bit == ARCHITECTURE_32BIT) { section_name = section->sectname; section++; } else { section_name = section_64->sectname; section_64++; } (*section_index)++; if (g_str_equal(section_name, "__text")) *text_section_index = *section_index; } } static void update_symbols (CutMachOLoaderPrivate *priv, gsize offset, uint32_t text_section_index, GList **symbols) { struct symtab_command *table; struct nlist *symbol = NULL; struct nlist_64 *symbol_64 = NULL; gchar *string_table; gint j; if (text_section_index == 0) return; table = (struct symtab_command *)(priv->content + offset); if (priv->bit == ARCHITECTURE_32BIT) { symbol = (struct nlist *)(priv->content + table->symoff); } else { symbol_64 = (struct nlist_64 *)(priv->content + table->symoff); } string_table = priv->content + table->stroff; for (j = 0; j < table->nsyms; j++) { uint8_t type, defined_section_index; gboolean defined_in_section = FALSE; int32_t string_offset; if (priv->bit == ARCHITECTURE_32BIT) { type = symbol->n_type; string_offset = symbol->n_un.n_strx; defined_section_index = symbol->n_sect; symbol++; } else { type = symbol_64->n_type; string_offset = symbol_64->n_un.n_strx; defined_section_index = symbol_64->n_sect; symbol_64++; } if ((type & N_TYPE) == N_SECT) defined_in_section = TRUE; if (defined_in_section && defined_section_index == text_section_index && type & N_EXT) { gchar *name; name = string_table + string_offset; *symbols = g_list_prepend(*symbols, g_strdup(name + 1)); } } } #endif GList * cut_mach_o_loader_collect_symbols (CutMachOLoader *loader) { #ifdef HAVE_MACH_O_LOADER_H CutMachOLoaderPrivate *priv; GList *symbols = NULL; gsize offset = 0; struct mach_header *header = NULL; struct mach_header_64 *header_64 = NULL; uint32_t i, n_commands; uint32_t section_index = 0, text_section_index = 0; priv = CUT_MACH_O_LOADER_GET_PRIVATE(loader); if (priv->bit == ARCHITECTURE_32BIT) { header = (struct mach_header *)priv->content; offset += sizeof(*header); n_commands = header->ncmds; } else { header_64 = (struct mach_header_64 *)priv->content; offset += sizeof(*header_64); n_commands = header_64->ncmds; } for (i = 0; i < n_commands; i++) { struct load_command *load; load = (struct load_command *)(priv->content + offset); switch (load->cmd) { case LC_SEGMENT: case LC_SEGMENT_64: update_section_index(priv, offset, §ion_index, &text_section_index); break; case LC_SYMTAB: update_symbols(priv, offset, text_section_index, &symbols); break; default: break; } offset += load->cmdsize; } return symbols; #else return NULL; #endif } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-readable-differ.c0000644000175000017500000003245611424022512022114 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-readable-differ.h" #include "cut-string-diff-writer.h" #include "cut-utils.h" G_DEFINE_TYPE(CutReadableDiffer, cut_readable_differ, CUT_TYPE_DIFFER) static void diff (CutDiffer *differ, CutDiffWriter *writer); static void diff_line (CutDiffer *differ, CutDiffWriter *writer, gchar *from_line, gchar *to_line); static guint get_initial_context_size (CutDiffer *differ); static void cut_readable_differ_class_init (CutReadableDifferClass *klass) { CutDifferClass *differ_class; differ_class = CUT_DIFFER_CLASS(klass); differ_class->diff = diff; differ_class->get_initial_context_size = get_initial_context_size; klass->diff_line = diff_line; } static void cut_readable_differ_init (CutReadableDiffer *differ) { } CutDiffer * cut_readable_differ_new (const gchar *from, const gchar *to) { return g_object_new(CUT_TYPE_READABLE_DIFFER, "from", from, "to", to, NULL); } static void mark_equal (CutDiffWriter *writer, gchar **lines, gint begin, gint end) { cut_diff_writer_mark_lines(writer, " ", " ", lines, begin, end, CUT_DIFF_WRITER_TAG_EQUAL_LINE); } static void mark_inserted (CutDiffWriter *writer, gchar **lines, gint begin, gint end) { cut_diff_writer_mark_lines(writer, "+", " ", lines, begin, end, CUT_DIFF_WRITER_TAG_INSERTED_LINE); } static void mark_deleted (CutDiffWriter *writer, gchar **lines, gint begin, gint end) { cut_diff_writer_mark_lines(writer, "-", " ", lines, begin, end, CUT_DIFF_WRITER_TAG_DELETED_LINE); } static void mark_difference (CutDiffWriter *writer, gchar **lines, gint begin, gint end) { cut_diff_writer_mark_lines(writer, "?", " ", lines, begin, end, CUT_DIFF_WRITER_TAG_DIFFERENCE_LINE); } static void format_diff_point (CutDiffWriter *writer, gchar *from_line, gchar *to_line, gchar *from_tags, gchar *to_tags) { gchar *lines[] = {NULL, NULL}; from_tags = g_strchomp(from_tags); to_tags = g_strchomp(to_tags); lines[0] = from_line; mark_deleted(writer, lines, 0, 1); if (from_tags[0]) { lines[0] = from_tags; mark_difference(writer, lines, 0, 1); } lines[0] = to_line; mark_inserted(writer, lines, 0, 1); if (to_tags[0]) { lines[0] = to_tags; mark_difference(writer, lines, 0, 1); } } static void append_spaces (GString *buffer, const gchar *string, guint begin, guint end) { const gchar *last; last = g_utf8_offset_to_pointer(string, end); for (string = g_utf8_offset_to_pointer(string, begin); string < last; string = g_utf8_next_char(string)) { if (g_unichar_iswide_cjk(g_utf8_get_char(string))) { g_string_append(buffer, " "); } else if (string[0] == '\t') { g_string_append_c(buffer, '\t'); } else { g_string_append_c(buffer, ' '); } } } static void append_character_n_times (GString *buffer, gchar character, guint n) { guint i; for (i = 0; i < n; i++) g_string_append_c(buffer, character); } static void diff_line (CutDiffer *differ, CutDiffWriter *writer, gchar *from_line, gchar *to_line) { GString *from_tags, *to_tags; CutSequenceMatcher *matcher; const GList *operations; from_tags = g_string_new(""); to_tags = g_string_new(""); matcher = cut_sequence_matcher_char_new_full(from_line, to_line, cut_differ_util_is_space_character, NULL); for (operations = cut_sequence_matcher_get_operations(matcher); operations; operations = g_list_next(operations)) { CutSequenceMatchOperation *operation = operations->data; guint from_width, to_width; from_width = cut_differ_util_compute_width(from_line, operation->from_begin, operation->from_end); to_width = cut_differ_util_compute_width(to_line, operation->to_begin, operation->to_end); switch (operation->type) { case CUT_SEQUENCE_MATCH_OPERATION_EQUAL: append_spaces(from_tags, from_line, operation->from_begin, operation->from_end); append_spaces(to_tags, to_line, operation->to_begin, operation->to_end); break; case CUT_SEQUENCE_MATCH_OPERATION_INSERT: append_character_n_times(to_tags, '+', to_width); break; case CUT_SEQUENCE_MATCH_OPERATION_DELETE: append_character_n_times(from_tags, '-', from_width); break; case CUT_SEQUENCE_MATCH_OPERATION_REPLACE: append_character_n_times(from_tags, '^', from_width); append_character_n_times(to_tags, '^', to_width); break; default: g_error("unknown operation type: %d", operation->type); break; } } format_diff_point(writer, from_line, to_line, from_tags->str, to_tags->str); g_string_free(from_tags, TRUE); g_string_free(to_tags, TRUE); g_object_unref(matcher); } static void diff_lines (CutDiffer *differ, CutDiffWriter *writer, gchar **from, gint from_begin, gint from_end, gchar **to, gint to_begin, gint to_end); static void mark_diff_lines (CutDiffer *differ, CutDiffWriter *writer, gchar **from, gint from_begin, gint from_end, gchar **to, gint to_begin, gint to_end) { if (from_begin < from_end) { if (to_begin < to_end) { diff_lines(differ, writer, from, from_begin, from_end, to, to_begin, to_end); } else { mark_deleted(writer, from, from_begin, from_end); } } else { mark_inserted(writer, to, to_begin, to_end); } } static void diff_lines (CutDiffer *differ, CutDiffWriter *writer, gchar **from, gint from_begin, gint from_end, gchar **to, gint to_begin, gint to_end) { CutReadableDifferClass *klass; gdouble best_ratio, cut_off_ratio; gint from_equal_index, to_equal_index; gint from_best_index, to_best_index; gint to_index, from_index; klass = CUT_READABLE_DIFFER_GET_CLASS(differ); best_ratio = cut_differ_get_best_ratio(differ); cut_off_ratio = cut_differ_get_cut_off_ratio(differ); from_equal_index = to_equal_index = -1; from_best_index = from_begin; to_best_index = to_begin; for (to_index = to_begin; to_index < to_end; to_index++) { for (from_index = from_begin; from_index < from_end; from_index++) { CutSequenceMatcher *matcher; const gchar *from_line, *to_line; gdouble ratio; from_line = from[from_index]; to_line = to[to_index]; if (strcmp(from_line, to_line) == 0) { if (from_equal_index < 0) from_equal_index = from_index; if (to_equal_index < 0) to_equal_index = to_index; continue; } matcher = cut_sequence_matcher_char_new_full( from_line, to_line, cut_differ_util_is_space_character, NULL); ratio = cut_sequence_matcher_get_ratio(matcher); if (ratio > best_ratio) { best_ratio = ratio; from_best_index = from_index; to_best_index = to_index; } g_object_unref(matcher); } } if (best_ratio < cut_off_ratio) { if (from_equal_index < 0) { if (to_end - to_begin < from_end - from_begin) { mark_inserted(writer, to, to_begin, to_end); mark_deleted(writer, from, from_begin, from_end); } else { mark_deleted(writer, from, from_begin, from_end); mark_inserted(writer, to, to_begin, to_end); } return; } from_best_index = from_equal_index; to_best_index = to_equal_index; best_ratio = 1.0; } mark_diff_lines(differ, writer, from, from_begin, from_best_index, to, to_begin, to_best_index); klass->diff_line(differ, writer, from[from_best_index], to[to_best_index]); mark_diff_lines(differ, writer, from, from_best_index + 1, from_end, to, to_best_index + 1, to_end); } static void diff_operations (CutDiffer *differ, CutDiffWriter *writer, const GList *operations, gchar **from, gchar **to) { for (; operations; operations = g_list_next(operations)) { CutSequenceMatchOperation *operation = operations->data; switch (operation->type) { case CUT_SEQUENCE_MATCH_OPERATION_EQUAL: mark_equal(writer, from, operation->from_begin, operation->from_end); break; case CUT_SEQUENCE_MATCH_OPERATION_INSERT: mark_inserted(writer, to, operation->to_begin, operation->to_end); break; case CUT_SEQUENCE_MATCH_OPERATION_DELETE: mark_deleted(writer, from, operation->from_begin, operation->from_end); break; case CUT_SEQUENCE_MATCH_OPERATION_REPLACE: diff_lines(differ, writer, from, operation->from_begin, operation->from_end, to, operation->to_begin, operation->to_end); break; default: g_error("unknown operation type: %d", operation->type); break; } } } static void diff (CutDiffer *differ, CutDiffWriter *writer) { CutSequenceMatcher *matcher; gchar **from, **to; from = cut_differ_get_from(differ); to = cut_differ_get_to(differ); matcher = cut_differ_get_sequence_matcher(differ); if (cut_differ_get_context_size(differ) == 0) { const GList *operations; operations = cut_sequence_matcher_get_operations(matcher); diff_operations(differ, writer, operations, from, to); } else { const GList *groups; groups = cut_sequence_matcher_get_grouped_operations(matcher); if (cut_differ_util_is_same_content(groups)) return; /* write_header(priv, writer); */ for (; groups; groups = g_list_next(groups)) { const GList *operations = groups->data; cut_differ_write_summary(differ, writer, operations); diff_operations(differ, writer, operations, from, to); } } cut_diff_writer_finish(writer); } static guint get_initial_context_size (CutDiffer *differ) { return 0; } gchar * cut_diff_readable (const gchar *from, const gchar *to) { CutDiffWriter *writer; CutDiffer *differ; gchar *diff; differ = cut_readable_differ_new(from, to); writer = cut_string_diff_writer_new(); cut_differ_diff(differ, writer); diff = g_strdup(cut_string_diff_writer_get_result(writer)); g_object_unref(writer); g_object_unref(differ); return diff; } gchar * cut_diff_readable_folded (const gchar *from, const gchar *to) { gchar *folded_from, *folded_to; gchar *folded_diff; folded_from = cut_utils_fold(from); folded_to = cut_utils_fold(to); folded_diff = cut_diff_readable(folded_from, folded_to); g_free(folded_from); g_free(folded_to); return folded_diff; } gboolean cut_diff_readable_is_interested (const gchar *diff) { if (!diff) return FALSE; if (!g_regex_match_simple("^[-+]", diff, G_REGEX_MULTILINE, 0)) return FALSE; if (g_regex_match_simple("^[ ?]", diff, G_REGEX_MULTILINE, 0)) return TRUE; if (g_regex_match_simple("(?:.*\n){2,}", diff, G_REGEX_MULTILINE, 0)) return TRUE; return FALSE; } gboolean cut_diff_readable_need_fold (const gchar *diff) { if (!diff) return FALSE; if (g_regex_match_simple("^[-+].{79}", diff, G_REGEX_MULTILINE, 0)) return TRUE; return FALSE; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-pe-loader.c0000644000175000017500000002104111277421252020766 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #ifdef HAVE_WINDOWS_H # include #endif #include #include "cut-pe-loader.h" #define CUT_PE_LOADER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_PE_LOADER, CutPELoaderPrivate)) typedef struct _CutPELoaderPrivate CutPELoaderPrivate; struct _CutPELoaderPrivate { gchar *so_filename; gchar *content; gsize length; #ifdef HAVE_WINDOWS_H IMAGE_NT_HEADERS *nt_headers; #endif }; enum { PROP_0, PROP_SO_FILENAME }; G_DEFINE_TYPE(CutPELoader, cut_pe_loader, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_pe_loader_class_init (CutPELoaderClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("so-filename", ".so filename", "The filename of shared object", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_SO_FILENAME, spec); g_type_class_add_private(gobject_class, sizeof(CutPELoaderPrivate)); } static void cut_pe_loader_init (CutPELoader *loader) { CutPELoaderPrivate *priv = CUT_PE_LOADER_GET_PRIVATE(loader); priv->so_filename = NULL; priv->content = NULL; priv->length = 0; #ifdef HAVE_WINDOWS_H priv->nt_headers = NULL; #endif } static void dispose (GObject *object) { CutPELoaderPrivate *priv = CUT_PE_LOADER_GET_PRIVATE(object); if (priv->so_filename) { g_free(priv->so_filename); priv->so_filename = NULL; } if (priv->content) { g_free(priv->content); priv->content = NULL; } G_OBJECT_CLASS(cut_pe_loader_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutPELoaderPrivate *priv = CUT_PE_LOADER_GET_PRIVATE(object); switch (prop_id) { case PROP_SO_FILENAME: if (priv->so_filename) g_free(priv->so_filename); priv->so_filename = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutPELoaderPrivate *priv = CUT_PE_LOADER_GET_PRIVATE(object); switch (prop_id) { case PROP_SO_FILENAME: g_value_set_string(value, priv->so_filename); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutPELoader * cut_pe_loader_new (const gchar *so_filename) { return g_object_new(CUT_TYPE_PE_LOADER, "so-filename", so_filename, NULL); } gboolean cut_pe_loader_is_dll (CutPELoader *loader) { #ifdef HAVE_WINDOWS_H CutPELoaderPrivate *priv; GError *error = NULL; IMAGE_DOS_HEADER *dos_header; priv = CUT_PE_LOADER_GET_PRIVATE(loader); if (!g_file_get_contents(priv->so_filename, &priv->content, &priv->length, &error)) { g_warning("can't read shared library file: %s", error->message); g_error_free(error); return FALSE; } if (priv->length < sizeof(*dos_header)) return FALSE; dos_header = (IMAGE_DOS_HEADER *)priv->content; if (priv->length < dos_header->e_lfanew) return FALSE; priv->nt_headers = (IMAGE_NT_HEADERS *)(priv->content + dos_header->e_lfanew); if (priv->nt_headers->Signature != IMAGE_NT_SIGNATURE) return FALSE; return priv->nt_headers->FileHeader.Characteristics & IMAGE_FILE_DLL; #else return FALSE; #endif } gboolean cut_pe_loader_support_attribute (CutPELoader *loader) { #ifdef HAVE_WINDOWS_H return TRUE; #else return FALSE; #endif } GList * cut_pe_loader_collect_symbols (CutPELoader *loader) { #ifdef HAVE_WINDOWS_H CutPELoaderPrivate *priv; GList *symbols = NULL; WORD i; IMAGE_SECTION_HEADER *first_section; IMAGE_SECTION_HEADER *text_section = NULL; IMAGE_SECTION_HEADER *edata_section = NULL; IMAGE_SECTION_HEADER *rdata_section = NULL; IMAGE_EXPORT_DIRECTORY *export_directory; const gchar *base_address; ULONG *name_addresses; ULONG *function_addresses; DWORD min_text_section_address, max_text_section_address; priv = CUT_PE_LOADER_GET_PRIVATE(loader); first_section = IMAGE_FIRST_SECTION(priv->nt_headers); for (i = 0; i < priv->nt_headers->FileHeader.NumberOfSections; i++) { const gchar *section_name; section_name = (const gchar *)((first_section + i)->Name); if (g_str_equal(".text", section_name)) { text_section = first_section + i; } else if (g_str_equal(".edata", section_name)) { edata_section = first_section + i; } else if (g_str_equal(".rdata", section_name)) { rdata_section = first_section + i; } } if (!text_section) return NULL; if (!edata_section && !rdata_section) return NULL; if (edata_section) { export_directory = (IMAGE_EXPORT_DIRECTORY *)(priv->content + edata_section->PointerToRawData); base_address = priv->content + edata_section->PointerToRawData - edata_section->VirtualAddress; } else { IMAGE_OPTIONAL_HEADER *optional_header; IMAGE_DATA_DIRECTORY *export_data_directory; optional_header = &(priv->nt_headers->OptionalHeader); export_data_directory = &(optional_header->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]); export_directory = (IMAGE_EXPORT_DIRECTORY *)(priv->content + rdata_section->PointerToRawData + export_data_directory->VirtualAddress - rdata_section->VirtualAddress); base_address = priv->content + rdata_section->PointerToRawData - rdata_section->VirtualAddress; } name_addresses = (ULONG *)(base_address + export_directory->AddressOfNames); function_addresses = (ULONG *)(base_address + export_directory->AddressOfFunctions); min_text_section_address = text_section->VirtualAddress; max_text_section_address = min_text_section_address + text_section->SizeOfRawData; for (i = 0; i < export_directory->NumberOfNames; i++) { const gchar *name; DWORD function_address; name = base_address + name_addresses[i]; function_address = function_addresses[i]; if (min_text_section_address < function_address && function_address < max_text_section_address) symbols = g_list_prepend(symbols, g_strdup(name)); } return symbols; #else return NULL; #endif } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-console-diff-writer.h0000644000175000017500000001053111264640752023013 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_CONSOLE_DIFF_WRITER_H__ #define __CUT_CONSOLE_DIFF_WRITER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_CONSOLE_DIFF_WRITER (cut_console_diff_writer_get_type ()) #define CUT_CONSOLE_DIFF_WRITER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_CONSOLE_DIFF_WRITER, CutConsoleDiffWriter)) #define CUT_CONSOLE_DIFF_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_CONSOLE_DIFF_WRITER, CutConsoleDiffWriterClass)) #define CUT_IS_CONSOLE_DIFF_WRITER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_CONSOLE_DIFF_WRITER)) #define CUT_IS_CONSOLE_DIFF_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_CONSOLE_DIFF_WRITER)) #define CUT_CONSOLE_DIFF_WRITER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_CONSOLE_DIFF_WRITER, CutConsoleDiffWriterClass)) typedef struct _CutConsoleDiffWriter CutConsoleDiffWriter; typedef struct _CutConsoleDiffWriterClass CutConsoleDiffWriterClass; struct _CutConsoleDiffWriter { CutDiffWriter object; }; struct _CutConsoleDiffWriterClass { CutDiffWriterClass parent_class; }; GType cut_console_diff_writer_get_type (void) G_GNUC_CONST; CutDiffWriter *cut_console_diff_writer_new (gboolean use_color); void cut_console_diff_writer_set_deleted_mark_color (CutDiffWriter *writer, const gchar *color); const gchar *cut_console_diff_writer_get_deleted_mark_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_mark_color (CutDiffWriter *writer, const gchar *color); const gchar *cut_console_diff_writer_get_inserted_mark_color (CutDiffWriter *writer); void cut_console_diff_writer_set_deleted_line_color (CutDiffWriter *writer, const gchar *color); const gchar *cut_console_diff_writer_get_deleted_line_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_line_color (CutDiffWriter *writer, const gchar *color); const gchar *cut_console_diff_writer_get_inserted_line_color (CutDiffWriter *writer); void cut_console_diff_writer_set_deleted_segment_color (CutDiffWriter *writer, const gchar *color); const gchar *cut_console_diff_writer_get_deleted_segment_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_segment_color (CutDiffWriter *writer, const gchar *color); const gchar *cut_console_diff_writer_get_inserted_segment_color (CutDiffWriter *writer); G_END_DECLS #endif /* __CUT_CONSOLE_DIFF_WRITER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-runner.c0000644000175000017500000000525611205747026020442 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-main.h" #include "cut-runner.h" #include "cut-run-context.h" GType cut_runner_get_type (void) { static GType runner_type = 0; if (!runner_type) runner_type = g_type_register_static_simple(G_TYPE_INTERFACE, "CutRunner", sizeof(CutRunnerIface), NULL, 0, NULL, 0); return runner_type; } typedef struct _CollectRunResultInfo CollectRunResultInfo; struct _CollectRunResultInfo { gboolean success; gboolean received; }; static void cb_collect_run_result (CutRunContext *context, gboolean success, gpointer user_data) { CollectRunResultInfo *info = user_data; info->success = success; info->received = TRUE; } gboolean cut_runner_run (CutRunner *runner) { gboolean success = TRUE; CutRunnerIface *iface; iface = CUT_RUNNER_GET_IFACE(runner); if (iface->run) { success = iface->run(runner); } else if (iface->run_async) { CollectRunResultInfo info; info.received = FALSE; g_signal_connect(runner, "complete-run", G_CALLBACK(cb_collect_run_result), &info); iface->run_async(runner); while (!info.received) cut_run_iteration(); g_signal_handlers_disconnect_by_func(runner, G_CALLBACK(cb_collect_run_result), &info); success = info.success; } return success; } void cut_runner_run_async (CutRunner *runner) { CutRunnerIface *iface; iface = CUT_RUNNER_GET_IFACE(runner); if (iface->run_async) iface->run_async(runner); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-stream-factory-builder.c0000644000175000017500000002040711261376767023524 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-utils.h" #include "cut-stream-factory-builder.h" #include "cut-module-factory.h" #include "cut-module-factory-utils.h" static gchar *stream_name = NULL; static int fd = -1; static gchar *directory = NULL; static CutStreamFactoryBuilder *the_builder = NULL; #ifdef G_OS_WIN32 static gchar *win32_stream_factory_module_dir = NULL; #endif #define CUT_STREAM_FACTORY_BUILDER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_STREAM_FACTORY_BUILDER, CutStreamFactoryBuilderPrivate)) typedef struct _CutStreamFactoryBuilderPrivate CutStreamFactoryBuilderPrivate; struct _CutStreamFactoryBuilderPrivate { GList *names; }; static GObject *constructor (GType type, guint n_props, GObjectConstructParam *props); static void dispose (GObject *object); static void set_option_context (CutFactoryBuilder *builder, GOptionContext *context); static GList *build (CutFactoryBuilder *builder); static GList *build_all (CutFactoryBuilder *builder); static const gchar *get_type_name (CutFactoryBuilder *builder); G_DEFINE_TYPE(CutStreamFactoryBuilder, cut_stream_factory_builder, CUT_TYPE_FACTORY_BUILDER) static void cut_stream_factory_builder_class_init (CutStreamFactoryBuilderClass *klass) { GObjectClass *gobject_class; CutFactoryBuilderClass *builder_class; gobject_class = G_OBJECT_CLASS(klass); builder_class = CUT_FACTORY_BUILDER_CLASS(klass); gobject_class->constructor = constructor; gobject_class->dispose = dispose; builder_class->set_option_context = set_option_context; builder_class->build = build; builder_class->build_all = build_all; builder_class->get_type_name = get_type_name; g_type_class_add_private(gobject_class, sizeof(CutStreamFactoryBuilderPrivate)); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object; if (!the_builder) { GObjectClass *klass; klass = G_OBJECT_CLASS(cut_stream_factory_builder_parent_class); object = klass->constructor(type, n_props, props); the_builder = CUT_STREAM_FACTORY_BUILDER(object); } else { object = g_object_ref(the_builder); } return object; } static void cut_stream_factory_builder_init (CutStreamFactoryBuilder *builder) { CutStreamFactoryBuilderPrivate *priv; const gchar *dir; priv = CUT_STREAM_FACTORY_BUILDER_GET_PRIVATE(builder); priv->names = NULL; dir = g_getenv("CUT_STREAM_FACTORY_MODULE_DIR"); if (!dir) { #ifdef G_OS_WIN32 if (!win32_stream_factory_module_dir) win32_stream_factory_module_dir = cut_win32_build_factory_module_dir_name("stream"); dir = win32_stream_factory_module_dir; #else dir = STREAM_FACTORY_MODULEDIR; #endif } g_object_set(G_OBJECT(builder), "module-dir", dir, NULL); cut_module_factory_load(dir, "stream"); } static void dispose (GObject *object) { CutStreamFactoryBuilderPrivate *priv; priv = CUT_STREAM_FACTORY_BUILDER_GET_PRIVATE(object); if (priv->names) { g_list_foreach(priv->names, (GFunc)g_free, NULL); g_list_free(priv->names); priv->names = NULL; } G_OBJECT_CLASS(cut_stream_factory_builder_parent_class)->dispose(object); } static void set_option_context (CutFactoryBuilder *builder, GOptionContext *context) { static gchar *arg_description = NULL; GOptionGroup *group; GOptionEntry entries[] = { {"stream", 0, 0, G_OPTION_ARG_STRING, &stream_name, N_("Specify stream"), NULL}, {"stream-fd", 0, 0, G_OPTION_ARG_INT, &fd, N_("Stream to FILE_DESCRIPTOR (default: stdout)"), "FILE_DESCRIPTOR"}, {"stream-directory", 0, 0, G_OPTION_ARG_STRING, &directory, N_("Stream to a file under DIRECTORY (default: none)"), "DIRECTORY"}, {"stream-log-directory", 0, 0, G_OPTION_ARG_STRING, &directory, N_("Obsoleted. Use --stream-directory instead"), "DIRECTORY"}, {NULL} }; if (!arg_description) { GString *available_streams; GList *names, *node; available_streams = g_string_new("["); names = cut_module_factory_get_names("stream"); for (node = names; node; node = g_list_next(node)) { const gchar *name = node->data; g_string_append(available_streams, name); if (g_list_next(node)) g_string_append(available_streams, "|"); } g_string_append(available_streams, "]"); arg_description = g_string_free(available_streams, FALSE); g_list_foreach(names, (GFunc)g_free, NULL); g_list_free(names); } entries[0].arg_description = arg_description; group = g_option_group_new(("stream"), _("Stream Options"), _("Show stream options"), builder, NULL); g_option_group_add_entries(group, entries); g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); g_option_context_add_group(context, group); } static CutModuleFactory * build_factory (CutFactoryBuilder *builder, const gchar *stream_type, const gchar *first_property, ...) { CutModuleFactory *factory = NULL; if (cut_module_factory_exist_module("stream", stream_type)) { GOptionContext *option_context; va_list var_args; va_start(var_args, first_property); factory = cut_module_factory_new_valist("stream", stream_type, first_property, var_args); va_end(var_args); g_object_get(builder, "option-context", &option_context, NULL); cut_module_factory_set_option_group(factory, option_context); } return factory; } static GList * build (CutFactoryBuilder *builder) { GList *factories = NULL; CutStreamFactoryBuilderPrivate *priv; CutModuleFactory *factory; if (!stream_name) return NULL; priv = CUT_STREAM_FACTORY_BUILDER_GET_PRIVATE(builder); factory = build_factory(builder, stream_name, "fd", fd, "directory", directory, NULL); if (factory) factories = g_list_prepend(factories, factory); return g_list_reverse(factories); } static GList * build_all (CutFactoryBuilder *builder) { GList *factories = NULL, *node; GList *factory_names; factory_names = cut_module_factory_get_names("stream"); for (node = factory_names; node; node = g_list_next(node)) { CutModuleFactory *module_factory; GOptionContext *option_context; module_factory = cut_module_factory_new("stream", node->data, NULL); g_object_get(builder, "option-context", &option_context, NULL); cut_module_factory_set_option_group(module_factory, option_context); factories = g_list_prepend(factories, module_factory); } return g_list_reverse(factories); } static const gchar * get_type_name (CutFactoryBuilder *builder) { return "stream"; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-pe-loader.h0000644000175000017500000000416311205747026021002 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_PE_LOADER_H__ #define __CUT_PE_LOADER_H__ #include G_BEGIN_DECLS #define CUT_TYPE_PE_LOADER (cut_pe_loader_get_type ()) #define CUT_PE_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_PE_LOADER, CutPELoader)) #define CUT_PE_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_PE_LOADER, CutPELoaderClass)) #define CUT_IS_PE_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_PE_LOADER)) #define CUT_IS_PE_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_PE_LOADER)) #define CUT_PE_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_PE_LOADER, CutPELoaderClass)) typedef struct _CutPELoader CutPELoader; typedef struct _CutPELoaderClass CutPELoaderClass; struct _CutPELoader { GObject object; }; struct _CutPELoaderClass { GObjectClass parent_class; }; GType cut_pe_loader_get_type (void) G_GNUC_CONST; CutPELoader *cut_pe_loader_new (const gchar *so_filename); gboolean cut_pe_loader_is_dll (CutPELoader *loader); gboolean cut_pe_loader_support_attribute (CutPELoader *loader); GList *cut_pe_loader_collect_symbols (CutPELoader *loader); G_END_DECLS #endif /* __CUT_PE_LOADER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-module.h0000644000175000017500000000517011205747026020416 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2006 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_MODULE_H__ #define __CUT_MODULE_H__ #include G_BEGIN_DECLS #define CUT_TYPE_MODULE (cut_module_get_type ()) #define CUT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_MODULE, CutModule)) #define CUT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_MODULE, CutModuleClass)) #define CUT_IS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_MODULE)) #define CUT_IS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_MODULE)) #define CUT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_MODULE, CutModuleClass)) typedef struct _CutModule CutModule; typedef struct _CutModuleClass CutModuleClass; struct _CutModule { GTypeModule object; }; struct _CutModuleClass { GTypeModuleClass parent_class; }; GType cut_module_get_type (void) G_GNUC_CONST; CutModule *cut_module_load_module (const gchar *base_dir, const gchar *name); GList *cut_module_load_modules (const gchar *base_dir); GList *cut_module_load_modules_unique (const gchar *base_dir, GList *modules); CutModule *cut_module_find (GList *modules, const gchar *name); GObject *cut_module_instantiate (CutModule *module, const gchar *first_property, va_list var_args); GList *cut_module_collect_registered_types (GList *modules); GList *cut_module_collect_names (GList *modules); void cut_module_unload (CutModule *module); G_END_DECLS #endif /* __CUT_MODULE_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-colorize-differ.c0000644000175000017500000002416011407320456022205 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-sequence-matcher.h" #include "cut-colorize-differ.h" #include "cut-utils.h" G_DEFINE_TYPE(CutColorizeDiffer, cut_colorize_differ, CUT_TYPE_READABLE_DIFFER) static gdouble get_best_ratio (CutDiffer *differ); static gdouble get_cut_off_ratio (CutDiffer *differ); static void diff_line (CutDiffer *differ, CutDiffWriter *writer, gchar *from_line, gchar *to_line); static void cut_colorize_differ_class_init (CutColorizeDifferClass *klass) { CutDifferClass *differ_class; CutReadableDifferClass *readable_differ_class; differ_class = CUT_DIFFER_CLASS(klass); differ_class->get_best_ratio = get_best_ratio; differ_class->get_cut_off_ratio = get_cut_off_ratio; readable_differ_class = CUT_READABLE_DIFFER_CLASS(klass); readable_differ_class->diff_line = diff_line; } static void cut_colorize_differ_init (CutColorizeDiffer *differ) { } CutDiffer * cut_colorize_differ_new (const gchar *from, const gchar *to) { return g_object_new(CUT_TYPE_COLORIZE_DIFFER, "from", from, "to", to, NULL); } static gdouble get_best_ratio (CutDiffer *differ) { return 0.0; } static gdouble get_cut_off_ratio (CutDiffer *differ) { return 0.0; } static void write_equal_segment (CutDiffWriter *writer, const gchar *line, guint begin, guint end) { cut_diff_writer_write_segment(writer, line, begin, end, CUT_DIFF_WRITER_TAG_EQUAL_SEGMENT); } static void write_inserted_segment (CutDiffWriter *writer, const gchar *line, guint begin, guint end) { cut_diff_writer_write_segment(writer, line, begin, end, CUT_DIFF_WRITER_TAG_INSERTED_SEGMENT); } static void write_deleted_segment (CutDiffWriter *writer, const gchar *line, guint begin, guint end) { cut_diff_writer_write_segment(writer, line, begin, end, CUT_DIFF_WRITER_TAG_DELETED_SEGMENT); } static void write_difference_spaces (CutDiffWriter *writer, const gchar *line, guint begin, guint end) { cut_diff_writer_write_spaces(writer, line, begin, end, CUT_DIFF_WRITER_TAG_DIFFERENCE_SEGMENT); } static void write_equal_spaces (CutDiffWriter *writer, const gchar *line, guint begin, guint end) { cut_diff_writer_write_spaces(writer, line, begin, end, CUT_DIFF_WRITER_TAG_EQUAL_SEGMENT); } typedef enum { WRITE_EQUAL_SPACES, WRITE_DIFFERENCE_SPACES, WRITE_INSERTED_SEGMENT, } WriteType; typedef struct _WriteOperation { WriteType type; const gchar *line; guint begin; guint end; } WriteOperation; static WriteOperation * write_operation_new (WriteType type, const gchar *line, guint begin, guint end) { WriteOperation *operation; operation = g_new0(WriteOperation, 1); operation->type = type; operation->line = line; operation->begin = begin; operation->end = end; return operation; } static void diff_line (CutDiffer *differ, CutDiffWriter *writer, gchar *from_line, gchar *to_line) { GList *write_operations = NULL; CutSequenceMatcher *matcher; const GList *operations; gboolean no_replace = TRUE; matcher = cut_sequence_matcher_char_new_full(from_line, to_line, cut_differ_util_is_space_character, NULL); for (operations = cut_sequence_matcher_get_operations(matcher); operations; operations = g_list_next(operations)) { CutSequenceMatchOperation *operation = operations->data; if (operation->type == CUT_SEQUENCE_MATCH_OPERATION_REPLACE) { no_replace = FALSE; break; } } cut_diff_writer_write_mark(writer, "?", " ", CUT_DIFF_WRITER_TAG_DIFFERENCE_MARK); #define APPEND_WRITE_OPERATION(write_operation) \ write_operations = g_list_append(write_operations, write_operation) for (operations = cut_sequence_matcher_get_operations(matcher); operations; operations = g_list_next(operations)) { CutSequenceMatchOperation *operation = operations->data; guint from_width, to_width; from_width = cut_differ_util_compute_width(from_line, operation->from_begin, operation->from_end); to_width = cut_differ_util_compute_width(to_line, operation->to_begin, operation->to_end); switch (operation->type) { case CUT_SEQUENCE_MATCH_OPERATION_EQUAL: write_equal_segment(writer, from_line, operation->from_begin, operation->from_end); if (!no_replace) APPEND_WRITE_OPERATION( write_operation_new(WRITE_EQUAL_SPACES, from_line, operation->from_begin, operation->from_end)); break; case CUT_SEQUENCE_MATCH_OPERATION_INSERT: if (no_replace) { write_inserted_segment(writer, to_line, operation->to_begin, operation->to_end); } else { write_difference_spaces(writer, to_line, operation->to_begin, operation->to_end); APPEND_WRITE_OPERATION( write_operation_new(WRITE_INSERTED_SEGMENT, to_line, operation->to_begin, operation->to_end)); } break; case CUT_SEQUENCE_MATCH_OPERATION_DELETE: write_deleted_segment(writer, from_line, operation->from_begin, operation->from_end); if (!no_replace) APPEND_WRITE_OPERATION( write_operation_new(WRITE_DIFFERENCE_SPACES, from_line, operation->from_begin, operation->from_end)); break; case CUT_SEQUENCE_MATCH_OPERATION_REPLACE: write_deleted_segment(writer, from_line, operation->from_begin, operation->from_end); if (from_width < to_width) write_difference_spaces(writer, to_line, operation->to_begin + from_width, operation->to_end); APPEND_WRITE_OPERATION( write_operation_new(WRITE_INSERTED_SEGMENT, to_line, operation->to_begin, operation->to_end)); if (to_width < from_width) APPEND_WRITE_OPERATION( write_operation_new(WRITE_DIFFERENCE_SPACES, from_line, operation->from_begin + to_width, operation->from_end)); break; default: g_error("unknown operation type: %d", operation->type); break; } } #undef APPEND_WRITE_OPERATION cut_diff_writer_write_line(writer, "", CUT_DIFF_WRITER_TAG_NONE); if (write_operations) { GList *node; cut_diff_writer_write_mark(writer, "?", " ", CUT_DIFF_WRITER_TAG_DIFFERENCE_MARK); for (node = write_operations; node; node = g_list_next(node)) { WriteOperation *operation = node->data; switch (operation->type) { case WRITE_EQUAL_SPACES: write_equal_spaces(writer, operation->line, operation->begin, operation->end); break; case WRITE_DIFFERENCE_SPACES: write_difference_spaces(writer, operation->line, operation->begin, operation->end); break; case WRITE_INSERTED_SEGMENT: write_inserted_segment(writer, operation->line, operation->begin, operation->end); break; } g_free(operation); } g_list_free(write_operations); cut_diff_writer_write_line(writer, "", CUT_DIFF_WRITER_TAG_NONE); } g_object_unref(matcher); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-process.h0000644000175000017500000000510611205747026020606 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_PROCESS_H__ #define __CUT_PROCESS_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_PROCESS (cut_process_get_type ()) #define CUT_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_PROCESS, CutProcess)) #define CUT_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_PROCESS, CutProcessClass)) #define CUT_IS_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_PROCESS)) #define CUT_IS_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_PROCESS)) #define CUT_PROCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_PROCESS, CutProcessClass)) typedef struct _CutProcess CutProcess; typedef struct _CutProcessClass CutProcessClass; struct _CutProcess { GObject object; }; struct _CutProcessClass { GObjectClass parent_class; }; GType cut_process_get_type (void) G_GNUC_CONST; CutProcess *cut_process_new (void); int cut_process_fork (CutProcess *process); int cut_process_wait (CutProcess *process, unsigned int usec_timeout); int cut_process_get_pid (CutProcess *process); const gchar *cut_process_get_stdout_message (CutProcess *process); const gchar *cut_process_get_stderr_message (CutProcess *process); gboolean cut_process_send_test_result_to_parent (CutProcess *process, CutTestResult *result); const gchar *cut_process_get_result_from_child (CutProcess *process); void cut_process_exit (CutProcess *process); G_END_DECLS #endif /* __CUT_PROCESS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-container.c0000644000175000017500000001251711407320456022064 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include "cut-test-container.h" #include "cut-iterated-test.h" #include "cut-run-context.h" #include "cut-utils.h" #define CUT_TEST_CONTAINER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_TEST_CONTAINER, CutTestContainerPrivate)) typedef struct _CutTestContainerPrivate CutTestContainerPrivate; struct _CutTestContainerPrivate { GList *tests; gdouble elapsed; }; G_DEFINE_ABSTRACT_TYPE (CutTestContainer, cut_test_container, CUT_TYPE_TEST) static void dispose (GObject *object); static gdouble get_elapsed (CutTest *test); static void set_elapsed (CutTest *test, gdouble elapsed); static void cut_test_container_class_init (CutTestContainerClass *klass) { GObjectClass *gobject_class; CutTestClass *test_class; gobject_class = G_OBJECT_CLASS(klass); test_class = CUT_TEST_CLASS(klass); gobject_class->dispose = dispose; test_class->get_elapsed = get_elapsed; test_class->set_elapsed = set_elapsed; g_type_class_add_private(gobject_class, sizeof(CutTestContainerPrivate)); } static void cut_test_container_init (CutTestContainer *container) { CutTestContainerPrivate *priv = CUT_TEST_CONTAINER_GET_PRIVATE(container); priv->tests = NULL; priv->elapsed = -1.0; } static void dispose (GObject *object) { CutTestContainerPrivate *priv = CUT_TEST_CONTAINER_GET_PRIVATE(object); if (priv->tests) { g_list_foreach(priv->tests, (GFunc)g_object_unref, NULL); g_list_free(priv->tests); priv->tests = NULL; } G_OBJECT_CLASS(cut_test_container_parent_class)->dispose(object); } void cut_test_container_add_test (CutTestContainer *container, CutTest *test) { CutTestContainerPrivate *priv = CUT_TEST_CONTAINER_GET_PRIVATE(container); if (CUT_IS_TEST(test)) { g_object_ref(test); priv->tests = g_list_append(priv->tests, test); } } GList * cut_test_container_get_children (CutTestContainer *container) { return CUT_TEST_CONTAINER_GET_PRIVATE(container)->tests; } static gdouble get_elapsed (CutTest *test) { gdouble result = 0.0; GList *child; CutTestContainerPrivate *priv; g_return_val_if_fail(CUT_IS_TEST_CONTAINER(test), FALSE); priv = CUT_TEST_CONTAINER_GET_PRIVATE(test); if (!(priv->elapsed < 0.0)) return priv->elapsed; for (child = priv->tests; child; child = g_list_next(child)) { CutTest *test = child->data; result += cut_test_get_elapsed(test); } return result; } static void set_elapsed (CutTest *test, gdouble elapsed) { g_return_if_fail(CUT_IS_TEST_CONTAINER(test)); CUT_TEST_CONTAINER_GET_PRIVATE(test)->elapsed = elapsed; } GList * cut_test_container_filter_children (CutTestContainer *container, const gchar **filter) { GList *original, *node, *regexs; GList *matched_tests = NULL; g_return_val_if_fail(CUT_IS_TEST_CONTAINER(container), NULL); original = (GList *)cut_test_container_get_children(container); if (!filter) return g_list_copy(original); regexs = cut_utils_filter_to_regexs(filter); if (!regexs) return g_list_copy(original); for (node = original; node; node = g_list_next(node)) { CutTest *test = node->data; if (CUT_IS_TEST_ITERATOR(test) || cut_utils_filter_match(regexs, cut_test_get_name(test)) || cut_utils_filter_match(regexs, cut_test_get_full_name(test))) { matched_tests = g_list_append(matched_tests, test); } } g_list_foreach(regexs, (GFunc)g_regex_unref, NULL); g_list_free(regexs); return matched_tests; } guint cut_test_container_get_n_tests (CutTestContainer *container, CutRunContext *run_context) { const gchar **test_names = NULL; if (run_context) test_names = cut_run_context_get_target_test_names(run_context); if (test_names) { GList *filtered_tests; guint n_tests; filtered_tests = cut_test_container_filter_children(container, test_names); n_tests = g_list_length(filtered_tests); g_list_free(filtered_tests); return n_tests; } else { CutTestContainerPrivate *priv; priv = CUT_TEST_CONTAINER_GET_PRIVATE(container); return g_list_length(priv->tests); } } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-report.c0000644000175000017500000001631611205747026020443 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-report.h" #include "cut-module.h" #include "cut-listener-utils.h" #define CUT_REPORT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_REPORT, CutReportPrivate)) typedef struct _CutReportPrivate CutReportPrivate; struct _CutReportPrivate { gchar *filename; }; enum { PROP_0, PROP_FILENAME }; static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); G_DEFINE_ABSTRACT_TYPE (CutReport, cut_report, G_TYPE_OBJECT) CUT_DEFINE_LISTENER_MODULE(report, REPORT) static void cut_report_class_init (CutReportClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("filename", "Filename", "The name of output file", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT); g_object_class_install_property(gobject_class, PROP_FILENAME, spec); g_type_class_add_private(gobject_class, sizeof(CutReportPrivate)); } static void cut_report_init (CutReport *report) { CutReportPrivate *priv = CUT_REPORT_GET_PRIVATE(report); priv->filename = NULL; } static void dispose (GObject *object) { CutReportPrivate *priv = CUT_REPORT_GET_PRIVATE(object); if (priv->filename) { g_free(priv->filename); priv->filename = NULL; } G_OBJECT_CLASS(cut_report_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutReportPrivate *priv = CUT_REPORT_GET_PRIVATE(object); switch (prop_id) { case PROP_FILENAME: if (priv->filename) g_free(priv->filename); priv->filename = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutReportPrivate *priv = CUT_REPORT_GET_PRIVATE(object); switch (prop_id) { case PROP_FILENAME: g_value_set_string(value, priv->filename); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutReport * cut_report_new (const gchar *name, const gchar *first_property, ...) { CutModule *module; GObject *report; va_list var_args; module = cut_report_load_module(name); g_return_val_if_fail(module != NULL, NULL); va_start(var_args, first_property); report = cut_module_instantiate(module, first_property, var_args); va_end(var_args); return CUT_REPORT(report); } const gchar * cut_report_get_filename (CutReport *report) { return CUT_REPORT_GET_PRIVATE(report)->filename; } gchar * cut_report_get_all_results (CutReport *report) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_all_results) return klass->get_all_results(report); else return NULL; } gchar * cut_report_get_success_results (CutReport *report) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_success_results) return klass->get_success_results(report); else return NULL; } gchar * cut_report_get_error_results (CutReport *report) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_error_results) return klass->get_error_results(report); else return NULL; } gchar * cut_report_get_failure_results (CutReport *report) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_failure_results) return klass->get_failure_results(report); else return NULL; } gchar * cut_report_get_pending_results (CutReport *report) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_pending_results) return klass->get_pending_results(report); else return NULL; } gchar * cut_report_get_notification_results (CutReport *report) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_notification_results) return klass->get_notification_results(report); else return NULL; } gchar * cut_report_get_omission_results (CutReport *report) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_omission_results) return klass->get_omission_results(report); else return NULL; } gchar * cut_report_get_crash_results (CutReport *report) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_crash_results) return klass->get_crash_results(report); else return NULL; } gchar * cut_report_get_test_result(CutReport *report, const gchar *test_name) { CutReportClass *klass; g_return_val_if_fail(CUT_IS_REPORT(report), NULL); g_return_val_if_fail(test_name, NULL); klass = CUT_REPORT_GET_CLASS(report); if (klass->get_test_result) return klass->get_test_result(report, test_name); else return NULL; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-loader.c0000644000175000017500000011770611407320456020401 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #ifdef HAVE_LIBBFD # include #else # include #endif #include "cut-loader.h" #include "cut-elf-loader.h" #include "cut-mach-o-loader.h" #include "cut-pe-loader.h" #include "cut-test-iterator.h" #include "cut-experimental.h" #define TEST_SUITE_SO_NAME_PREFIX "suite" #define TEST_NAME_PREFIX "test_" #define DATA_SETUP_FUNCTION_NAME_PREFIX "data_" #define ATTRIBUTES_SETUP_FUNCTION_NAME_PREFIX "attributes_" #define CUT_LOADER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_LOADER, CutLoaderPrivate)) typedef enum { CUT_BINARY_TYPE_UNKNOWN, CUT_BINARY_TYPE_MACH_O_BUNDLE, CUT_BINARY_TYPE_MS_WINDOWS_DLL } CutBinaryType; typedef struct _SymbolNames SymbolNames; struct _SymbolNames { gchar *namespace; gchar *test_name; gchar *test_function_name; gchar *data_setup_function_name; gchar *attributes_setup_function_name; gboolean require_data_setup_function; gboolean cpp; gboolean gcc; }; typedef struct _CutLoaderPrivate CutLoaderPrivate; struct _CutLoaderPrivate { gchar *so_filename; GList *symbols; GModule *module; CutBinaryType binary_type; CutELFLoader *elf_loader; CutMachOLoader *mach_o_loader; CutPELoader *pe_loader; gboolean keep_opening; gboolean enable_convenience_attribute_definition; gchar *base_directory; }; enum { PROP_0, PROP_SO_FILENAME, PROP_BASE_DIRECTORY }; G_DEFINE_TYPE (CutLoader, cut_loader, G_TYPE_OBJECT) static SymbolNames * symbol_names_new (gchar *namespace, gchar *test_name, gchar *test_function_name, gchar *data_setup_function_name, gchar *attributes_setup_function_name, gboolean require_data_setup_function, gboolean cpp, gboolean gcc) { SymbolNames *names; names = g_new0(SymbolNames, 1); names->namespace = namespace; names->test_name = test_name; names->test_function_name = test_function_name; names->data_setup_function_name = data_setup_function_name; names->attributes_setup_function_name = attributes_setup_function_name; names->require_data_setup_function = require_data_setup_function; names->cpp = cpp; names->gcc = gcc; return names; } static void symbol_names_free (SymbolNames *names) { g_free(names->namespace); g_free(names->test_name); g_free(names->test_function_name); g_free(names->data_setup_function_name); g_free(names->attributes_setup_function_name); g_free(names); } static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_loader_class_init (CutLoaderClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("so-filename", ".so filename", "The filename of shared object", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_SO_FILENAME, spec); spec = g_param_spec_string("base-directory", "Base directory", "The base directory of shared object", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_BASE_DIRECTORY, spec); g_type_class_add_private(gobject_class, sizeof(CutLoaderPrivate)); } static void cut_loader_init (CutLoader *loader) { CutLoaderPrivate *priv = CUT_LOADER_GET_PRIVATE(loader); priv->so_filename = NULL; priv->binary_type = CUT_BINARY_TYPE_UNKNOWN; priv->elf_loader = NULL; priv->mach_o_loader = NULL; priv->pe_loader = NULL; priv->keep_opening = FALSE; priv->enable_convenience_attribute_definition = FALSE; priv->base_directory = NULL; } static void free_symbols (CutLoaderPrivate *priv) { if (priv->symbols) { g_list_foreach(priv->symbols, (GFunc)g_free, NULL); g_list_free(priv->symbols); priv->symbols = NULL; } } static void dispose (GObject *object) { CutLoaderPrivate *priv = CUT_LOADER_GET_PRIVATE(object); if (priv->so_filename) { g_free(priv->so_filename); priv->so_filename = NULL; } if (priv->elf_loader) { g_object_unref(priv->elf_loader); priv->elf_loader = NULL; } if (priv->mach_o_loader) { g_object_unref(priv->mach_o_loader); priv->mach_o_loader = NULL; } if (priv->pe_loader) { g_object_unref(priv->pe_loader); priv->pe_loader = NULL; } if (priv->module) { if (!priv->keep_opening) g_module_close(priv->module); priv->module = NULL; } free_symbols(priv); if (priv->base_directory) { g_free(priv->base_directory); priv->base_directory = NULL; } G_OBJECT_CLASS(cut_loader_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutLoaderPrivate *priv = CUT_LOADER_GET_PRIVATE(object); switch (prop_id) { case PROP_SO_FILENAME: priv->so_filename = g_value_dup_string(value); break; case PROP_BASE_DIRECTORY: cut_loader_set_base_directory(CUT_LOADER(object), g_value_get_string(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutLoaderPrivate *priv = CUT_LOADER_GET_PRIVATE(object); switch (prop_id) { case PROP_SO_FILENAME: g_value_set_string(value, priv->so_filename); break; case PROP_BASE_DIRECTORY: g_value_set_string(value, priv->base_directory); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutLoader * cut_loader_new (const gchar *soname) { return g_object_new(CUT_TYPE_LOADER, "so-filename", soname, NULL); } gboolean cut_loader_get_keep_opening (CutLoader *loader) { return CUT_LOADER_GET_PRIVATE(loader)->keep_opening; } void cut_loader_set_keep_opening (CutLoader *loader, gboolean keep_opening) { CUT_LOADER_GET_PRIVATE(loader)->keep_opening = keep_opening; } gboolean cut_loader_get_enable_convenience_attribute_definition (CutLoader *loader) { return CUT_LOADER_GET_PRIVATE(loader)->enable_convenience_attribute_definition; } void cut_loader_set_enable_convenience_attribute_definition (CutLoader *loader, gboolean enable_convenience_attribute_definition) { CUT_LOADER_GET_PRIVATE(loader)->enable_convenience_attribute_definition = enable_convenience_attribute_definition; } const gchar * cut_loader_get_base_directory (CutLoader *loader) { return CUT_LOADER_GET_PRIVATE(loader)->base_directory; } void cut_loader_set_base_directory (CutLoader *loader, const gchar *base_directory) { CutLoaderPrivate *priv; priv = CUT_LOADER_GET_PRIVATE(loader); if (priv->base_directory) g_free(priv->base_directory); priv->base_directory = g_strdup(base_directory); } static inline const gchar * skip_cpp_namespace_gcc (const gchar *name, GString *namespaces) { if (g_str_has_prefix(name, "_Z")) { name += strlen("_Z"); } else { return NULL; } if (!name[0]) return NULL; while (name[0] == 'N') { gchar *namespace_name_start; guint64 namespace_name_length; name++; namespace_name_length = g_ascii_strtoull(name, &namespace_name_start, 10); if (namespace_name_length == 0) return NULL; if (namespaces) { g_string_append_len(namespaces, namespace_name_start, namespace_name_length); g_string_append(namespaces, "::"); } name = namespace_name_start + namespace_name_length; } return name; } static inline gboolean find_cpp_test_name_gcc (const gchar *name, gchar **test_name_start, guint64 *test_name_length, GString *namespaces) { guint64 length; name = skip_cpp_namespace_gcc(name, namespaces); if (!name) return FALSE; length = g_ascii_strtoull(name, test_name_start, 10); if (length == 0) return FALSE; if (test_name_length) *test_name_length = length; return g_str_has_prefix(*test_name_start, TEST_NAME_PREFIX); } static inline SymbolNames * detect_cpp_test_function_symbol_names_gcc (const gchar *name) { const gchar *original_name = name; gchar *test_name_start; guint64 test_name_length; gchar *data_setup_function_name = NULL; gchar *attributes_setup_function_name = NULL; gboolean require_data_setup_function = FALSE; gchar *namespace; GString *test_name; test_name = g_string_new(NULL); if (!find_cpp_test_name_gcc(name, &test_name_start, &test_name_length, test_name)) { g_string_free(test_name, TRUE); return NULL; } name = test_name_start + test_name_length; if (g_str_equal(name, "Ev")) { } else if (g_str_equal(name, "EPv") || g_str_equal(name, "EPKv")) { GString *data_setup_function_name_string; size_t test_name_prefix_length; require_data_setup_function = TRUE; test_name_prefix_length = strlen(TEST_NAME_PREFIX); data_setup_function_name_string = g_string_new(NULL); g_string_append_len(data_setup_function_name_string, original_name, original_name - test_name_start); g_string_append(data_setup_function_name_string, DATA_SETUP_FUNCTION_NAME_PREFIX); g_string_append_len(data_setup_function_name_string, test_name_start + test_name_prefix_length, test_name_length - test_name_prefix_length); g_string_append(data_setup_function_name_string, "Ev"); data_setup_function_name = g_string_free(data_setup_function_name_string, FALSE); } else { g_string_free(test_name, TRUE); return NULL; } { GString *attributes_setup_function_name_string; size_t test_name_prefix_length; test_name_prefix_length = strlen(TEST_NAME_PREFIX); attributes_setup_function_name_string = g_string_new(NULL); g_string_append_len(attributes_setup_function_name_string, original_name, original_name - test_name_start); g_string_append(attributes_setup_function_name_string, ATTRIBUTES_SETUP_FUNCTION_NAME_PREFIX); g_string_append_len(attributes_setup_function_name_string, test_name_start + test_name_prefix_length, test_name_length - test_name_prefix_length); g_string_append(attributes_setup_function_name_string, "Ev"); attributes_setup_function_name = g_string_free(attributes_setup_function_name_string, FALSE); } if (test_name->len == 0) { namespace = g_strdup(""); } else { namespace = g_strndup(test_name->str, test_name->len - 2); } g_string_append_len(test_name, test_name_start, test_name_length); return symbol_names_new(namespace, g_string_free(test_name, FALSE), g_strdup(original_name), data_setup_function_name, attributes_setup_function_name, require_data_setup_function, TRUE, TRUE); } static inline gboolean is_gcc_cpp_symbol (const gchar *name) { return g_str_has_prefix(name, "_Z"); } /* FIXME: Symbol detection codes for C++ are too dirty. We should clean it up as soon as possible!!! */ /* format: '?FUNCTION_NAME@NAMESPACE_N@NAMESPACE_N-1@...@NAMESPACE_0@@SIGNATURE' SIGNATURE_NAME: 'YAXXZ': void XXX(void); 'YAXPAX@Z': void XXX(void *); 'YAXPBX@Z': void XXX(const void *); */ static inline SymbolNames * detect_cpp_test_function_symbol_names_vcc (const gchar *name) { const gchar *original_name = name; const gchar *test_name_start; guint test_name_length; gchar *data_setup_function_name = NULL; gchar *attributes_setup_function_name = NULL; gboolean require_data_setup_function = FALSE; GString *test_name; test_name_start = name + strlen("?"); if (!g_str_has_prefix(test_name_start, TEST_NAME_PREFIX)) return NULL; test_name_length = 0; while (test_name_start[test_name_length] && test_name_start[test_name_length] != '@') { test_name_length++; } if (test_name_start[test_name_length] != '@') return NULL; test_name = g_string_new(NULL); g_string_append_len(test_name, test_name_start, test_name_length); name = test_name_start + test_name_length; while (name[0]) { const gchar *namespace; guint namespace_length = 0; if (name[0] != '@') { g_string_free(test_name, TRUE); return NULL; } namespace = name + strlen("@"); if (namespace[0] == '@') { name = namespace + 1; break; } while (namespace[namespace_length] && namespace[namespace_length] != '@') { namespace_length++; } g_string_prepend(test_name, "::"); g_string_prepend_len(test_name, namespace, namespace_length); name = namespace + namespace_length; } if (g_str_equal(name, "YAXXZ")) { } else if (g_str_equal(name, "YAXPAX@Z") || g_str_equal(name, "YAXPBX@Z")) { GString *data_setup_function_name_string; size_t test_name_prefix_length; require_data_setup_function = TRUE; test_name_prefix_length = strlen(TEST_NAME_PREFIX); data_setup_function_name_string = g_string_new(NULL); g_string_append_len(data_setup_function_name_string, original_name, original_name - test_name_start); g_string_append(data_setup_function_name_string, DATA_SETUP_FUNCTION_NAME_PREFIX); g_string_append_len(data_setup_function_name_string, test_name_start + test_name_prefix_length, name - test_name_start + test_name_prefix_length); g_string_append(data_setup_function_name_string, "YAXXZ"); data_setup_function_name = g_string_free(data_setup_function_name_string, FALSE); } else { g_string_free(test_name, TRUE); return NULL; } { GString *attributes_setup_function_name_string; size_t test_name_prefix_length; test_name_prefix_length = strlen(TEST_NAME_PREFIX); attributes_setup_function_name_string = g_string_new(NULL); g_string_append_len(attributes_setup_function_name_string, original_name, original_name - test_name_start); g_string_append(attributes_setup_function_name_string, ATTRIBUTES_SETUP_FUNCTION_NAME_PREFIX); g_string_append_len(attributes_setup_function_name_string, test_name_start + test_name_prefix_length, name - test_name_start + test_name_prefix_length); g_string_append(attributes_setup_function_name_string, "YAXXZ"); attributes_setup_function_name = g_string_free(attributes_setup_function_name_string, FALSE); } { gchar *last_separator; gchar *test_case_name; last_separator = g_strrstr(test_name->str, "::"); if (last_separator) { test_case_name = g_strndup(test_name->str, last_separator - test_name->str); } else { test_case_name = g_strdup(""); } return symbol_names_new(test_case_name, g_string_free(test_name, FALSE), g_strdup(original_name), data_setup_function_name, attributes_setup_function_name, require_data_setup_function, TRUE, FALSE); } } static inline gboolean is_vcc_cpp_symbol (const gchar *name) { return g_str_has_prefix(name, "?"); } static inline SymbolNames * detect_cpp_test_function_symbol_names (const gchar *name) { if (is_gcc_cpp_symbol(name)) { return detect_cpp_test_function_symbol_names_gcc(name); } else if (is_vcc_cpp_symbol(name)) { return detect_cpp_test_function_symbol_names_vcc(name); } return NULL; } static inline SymbolNames * detect_test_function_symbol_names (const gchar *name) { if (!name) return NULL; if (g_str_has_prefix(name, TEST_NAME_PREFIX)) { gchar *data_setup_function_name; gchar *attributes_setup_function_name; data_setup_function_name = g_strconcat(DATA_SETUP_FUNCTION_NAME_PREFIX, name + strlen(TEST_NAME_PREFIX), NULL); attributes_setup_function_name = g_strconcat(ATTRIBUTES_SETUP_FUNCTION_NAME_PREFIX, name + strlen(TEST_NAME_PREFIX), NULL); return symbol_names_new(NULL, g_strdup(name), g_strdup(name), data_setup_function_name, attributes_setup_function_name, FALSE, FALSE, FALSE); } return detect_cpp_test_function_symbol_names(name); } #ifdef HAVE_LIBBFD static gboolean cut_loader_support_attribute_bfd (CutLoader *loader) { CutLoaderPrivate *priv; priv = CUT_LOADER_GET_PRIVATE(loader); return priv->binary_type != CUT_BINARY_TYPE_MACH_O_BUNDLE; } static GList * collect_symbols_bfd (CutLoaderPrivate *priv) { GList *symbols = NULL; long storage_needed; asymbol **symbol_table; long number_of_symbols; long i; char symbol_leading_char; bfd *abfd; abfd = bfd_openr(priv->so_filename, NULL); if (!abfd) return NULL; if (!bfd_check_format(abfd, bfd_object)) { bfd_close(abfd); return NULL; } storage_needed = bfd_get_symtab_upper_bound(abfd); if (storage_needed <= 0) { bfd_close(abfd); return NULL; } symbol_table = (asymbol **)g_new(char, storage_needed); number_of_symbols = bfd_canonicalize_symtab(abfd, symbol_table); symbol_leading_char = bfd_get_symbol_leading_char(abfd); if (bfd_get_flavour(abfd) == bfd_target_mach_o_flavour) priv->binary_type = CUT_BINARY_TYPE_MACH_O_BUNDLE; for (i = 0; i < number_of_symbols; i++) { symbol_info info; bfd_symbol_info(symbol_table[i], &info); if (info.type == 'T' || (priv->binary_type == CUT_BINARY_TYPE_MACH_O_BUNDLE && info.type == 'U')) { const char *name = info.name; while (symbol_leading_char == name[0]) name++; symbols = g_list_prepend(symbols, g_strdup(name)); } } g_free(symbol_table); bfd_close(abfd); return symbols; } #else static gboolean cut_loader_support_attribute_scan (CutLoader *loader) { CutLoaderPrivate *priv; priv = CUT_LOADER_GET_PRIVATE(loader); return priv->binary_type == CUT_BINARY_TYPE_MS_WINDOWS_DLL; } static inline CutBinaryType guess_binary_type (char *buffer, size_t size) { if (size >= 4 && ((guint32 *)buffer)[0] == 0xfeedface) return CUT_BINARY_TYPE_MACH_O_BUNDLE; if (size >= 4 && ((guint8 *)buffer)[0] == 'M' && ((guint8 *)buffer)[1] == 'Z' && ((guint8 *)buffer)[4] & 0x2) return CUT_BINARY_TYPE_MS_WINDOWS_DLL; return CUT_BINARY_TYPE_UNKNOWN; } static inline gboolean is_valid_char_for_cutter_symbol (GString *name, char *buffer, int i, size_t size, CutBinaryType binary_type) { char c; c = buffer[i]; if (binary_type == CUT_BINARY_TYPE_MACH_O_BUNDLE) { if (name->len == 0 && i > 0 && buffer[i - 1] == '\0' && c == '_') return FALSE; } return g_ascii_isalnum(c) || '_' == c; } static inline gboolean is_valid_symbol_name (GString *name) { return name->len >= 4; } static GList * collect_symbols_scan (CutLoaderPrivate *priv) { FILE *input; GString *name; char buffer[4096]; size_t size; GHashTable *symbol_name_table; GList *symbols; gboolean first_buffer = TRUE; input = g_fopen(priv->so_filename, "rb"); if (!input) return NULL; symbol_name_table = g_hash_table_new(g_str_hash, g_str_equal); name = g_string_new(""); while ((size = fread(buffer, sizeof(*buffer), sizeof(buffer), input)) > 0) { size_t i; if (first_buffer) { priv->binary_type = guess_binary_type(buffer, size); first_buffer = FALSE; } for (i = 0; i < size; i++) { if (is_valid_char_for_cutter_symbol(name, buffer, i, size, priv->binary_type)) { g_string_append_c(name, buffer[i]); } else if (name->len > 0) { if (is_valid_symbol_name(name)) { g_hash_table_insert(symbol_name_table, g_strdup(name->str), NULL); } g_string_truncate(name, 0); } } } if (is_valid_symbol_name(name)) g_hash_table_insert(symbol_name_table, g_strdup(name->str), NULL); g_string_free(name, TRUE); symbols = g_hash_table_get_keys(symbol_name_table); g_hash_table_unref(symbol_name_table); fclose(input); return symbols; } #endif gboolean cut_loader_support_attribute (CutLoader *loader) { CutLoaderPrivate *priv; priv = CUT_LOADER_GET_PRIVATE(loader); if (!priv->enable_convenience_attribute_definition) return FALSE; if (priv->elf_loader) { return cut_elf_loader_support_attribute(priv->elf_loader); } else if (priv->mach_o_loader) { return cut_mach_o_loader_support_attribute(priv->mach_o_loader); } else if (priv->pe_loader) { return cut_pe_loader_support_attribute(priv->pe_loader); } else { #ifdef HAVE_LIBBFD return cut_loader_support_attribute_bfd(loader); #else return cut_loader_support_attribute_scan(loader); #endif } } static GList * collect_symbols (CutLoaderPrivate *priv) { if (priv->elf_loader) { return cut_elf_loader_collect_symbols(priv->elf_loader); } else if (priv->mach_o_loader) { return cut_mach_o_loader_collect_symbols(priv->mach_o_loader); } else if (priv->pe_loader) { return cut_pe_loader_collect_symbols(priv->pe_loader); } else { #ifdef HAVE_LIBBFD return collect_symbols_bfd(priv); #else return collect_symbols_scan(priv); #endif } } static GList * collect_test_functions (CutLoaderPrivate *priv) { GList *node, *test_names = NULL; for (node = priv->symbols; node; node = g_list_next(node)) { gchar *name = node->data; SymbolNames *names; names = detect_test_function_symbol_names(name); if (names) { test_names = g_list_prepend(test_names, names); } } return test_names; } static gboolean is_including_test_name (const gchar *function_name, SymbolNames *names) { gboolean included = FALSE; GString *suffix; gchar *base_name; if (names->cpp) { const gchar *target_namespace_end; GString *target_namespace; GString *test_namespace; guint64 function_name_length; target_namespace = g_string_new(NULL); target_namespace_end = skip_cpp_namespace_gcc(function_name, target_namespace); if (!target_namespace_end) { g_string_free(target_namespace, TRUE); return FALSE; } test_namespace = g_string_new(NULL); skip_cpp_namespace_gcc(names->test_function_name, test_namespace); included = g_str_equal(target_namespace->str, test_namespace->str); g_string_free(target_namespace, TRUE); g_string_free(test_namespace, TRUE); if (!included) return FALSE; function_name_length = g_ascii_strtoull(target_namespace_end, &base_name, 10); if (function_name_length == 0) return FALSE; } else { base_name = (gchar *)function_name; } suffix = g_string_new("_"); g_string_append(suffix, names->test_name + strlen(TEST_NAME_PREFIX)); if (names->cpp) g_string_append(suffix, "Ev"); included = g_str_has_suffix(base_name, suffix->str); g_string_free(suffix, TRUE); return included; } static gboolean is_valid_attribute_function_name (const gchar *function_name, SymbolNames *names) { gchar *base_name; if (!function_name) return FALSE; if (names->cpp) { if (!find_cpp_test_name_gcc(function_name, &base_name, NULL, NULL)) return FALSE; } else { base_name = (gchar *)function_name; } return !g_str_has_prefix(base_name, TEST_NAME_PREFIX) && !g_str_has_prefix(base_name, ATTRIBUTES_SETUP_FUNCTION_NAME_PREFIX) && !g_str_has_prefix(base_name, DATA_SETUP_FUNCTION_NAME_PREFIX) && is_including_test_name(function_name, names); } static gchar * get_attribute_name (const gchar *attribute_function_name, SymbolNames *names) { gchar *base_name; gchar *test_base_name; if (names->cpp) { const gchar *namespace_end; namespace_end = skip_cpp_namespace_gcc(attribute_function_name, NULL); g_ascii_strtoull(namespace_end, &base_name, 10); } else { base_name = (gchar *)attribute_function_name; } test_base_name = g_strrstr(base_name, names->test_name + strlen(TEST_NAME_PREFIX)) - 1; return g_strndup(base_name, test_base_name - base_name); } typedef const gchar *(*CutAttributeItemFunction) (void); static void apply_attributes (CutLoaderPrivate *priv, CutTest *test, SymbolNames *names) { GList *node; if (!test) return; if (!names) return; for (node = priv->symbols; node; node = g_list_next(node)) { gchar *function_name = node->data; if (is_valid_attribute_function_name(function_name, names)) { CutAttributeItemFunction function = NULL; g_module_symbol(priv->module, function_name, (gpointer)&function); if (function) { gchar *name; const gchar *value; name = get_attribute_name(function_name, names); value = function(); cut_test_set_attribute(test, name, value); g_free(name); } } } } static void register_valid_test (CutLoader *loader, CutTestCase *test_case, SymbolNames *names) { CutLoaderPrivate *priv; CutTest *test; CutTestFunction test_function = NULL; CutDataSetupFunction data_setup_function = NULL; CutAttributesSetupFunction attributes_setup_function = NULL; priv = CUT_LOADER_GET_PRIVATE(loader); g_module_symbol(priv->module, names->test_function_name, (gpointer)&test_function); if (!test_function) return; if (names->data_setup_function_name) g_module_symbol(priv->module, names->data_setup_function_name, (gpointer)&data_setup_function); if (names->require_data_setup_function && !data_setup_function) return; if (names->attributes_setup_function_name) g_module_symbol(priv->module, names->attributes_setup_function_name, (gpointer)&attributes_setup_function); if (data_setup_function) { CutTestIterator *test_iterator; CutIteratedTestFunction iterated_test_function; iterated_test_function = (CutIteratedTestFunction)test_function; test_iterator = cut_test_iterator_new(names->test_name, iterated_test_function, data_setup_function); test = CUT_TEST(test_iterator); } else { test = cut_test_new(names->test_name, test_function); } cut_test_set_base_directory(test, priv->base_directory); if (attributes_setup_function) { CutTestContext *test_context; if (data_setup_function) { test_context = cut_test_context_new(NULL, NULL, test_case, CUT_TEST_ITERATOR(test), NULL); } else { test_context = cut_test_context_new(NULL, NULL, test_case, NULL, test); } cut_test_context_current_push(test_context); attributes_setup_function(); cut_test_context_current_pop(); g_object_unref(test_case); } if (cut_loader_support_attribute(loader)) apply_attributes(priv, test, names); cut_test_case_add_test(test_case, test); g_object_unref(test); } static const gchar * mangle_gcc (GString *buffer, const gchar *namespace, const gchar *function) { gchar **components, **component; if (!namespace) return function; g_string_assign(buffer, "_ZN"); components = g_strsplit(namespace, "::", 0); for (component = components; *component; component++) { g_string_append_printf(buffer, "%" G_GSIZE_FORMAT "%s", strlen(*component), *component); } g_strfreev(components); g_string_append_printf(buffer, "%" G_GSIZE_FORMAT "%s", strlen(function), function); g_string_append(buffer, "Ev"); return buffer->str; } static const gchar * mangle_vcc (GString *buffer, const gchar *namespace, const gchar *function) { gchar **components, **component; if (!namespace) return function; g_string_assign(buffer, "@YAXXZ"); components = g_strsplit(namespace, "::", 0); for (component = components; *component; component++) { g_string_prepend(buffer, "@"); g_string_prepend(buffer, *component); } g_strfreev(components); g_string_prepend(buffer, "@"); g_string_prepend(buffer, function); g_string_prepend(buffer, "?"); return buffer->str; } static const gchar * mangle (GString *buffer, const gchar *namespace, const gchar *function, gboolean gcc) { if (!namespace) return function; if (gcc) { return mangle_gcc(buffer, namespace, function); } else { return mangle_vcc(buffer, namespace, function); } } static void cb_complete (CutTestCase *test_case, CutTestContext *test_context, gboolean success, gpointer data) { CutLoader *loader = data; g_object_unref(loader); } static CutTestCase * create_test_case (CutLoader *loader, const gchar *namespace, gboolean gcc) { CutLoaderPrivate *priv; CutTestCase *test_case; CutSetupFunction setup = NULL; CutStartupFunction startup = NULL; CutShutdownFunction shutdown = NULL; CutTeardownFunction teardown = NULL; gchar *test_case_name; GString *buffer; priv = CUT_LOADER_GET_PRIVATE(loader); buffer = g_string_new(NULL); #define MANGLE(function_name) \ mangle(buffer, namespace, function_name, gcc) #define GET_HOOK_FUNCTION(name) \ if (!g_module_symbol(priv->module, MANGLE("cut_" #name), (gpointer)&name)) \ g_module_symbol(priv->module, MANGLE(#name), (gpointer)&name) GET_HOOK_FUNCTION(setup); GET_HOOK_FUNCTION(teardown); if (namespace) { GET_HOOK_FUNCTION(startup); GET_HOOK_FUNCTION(shutdown); } else { g_module_symbol(priv->module, MANGLE("cut_startup"), (gpointer)&startup); g_module_symbol(priv->module, MANGLE("cut_shutdown"), (gpointer)&shutdown); } #undef GET_HOOK_FUNCTION #undef MANGLE g_string_free(buffer, TRUE); if (namespace) { test_case_name = g_strdup(namespace); } else { gchar *filename; filename = g_path_get_basename(priv->so_filename); if (g_str_has_prefix(filename, "lib")) { gchar *string; string = g_strdup(filename + strlen("lib")); g_free(filename); filename = string; } test_case_name = g_strndup(filename, strlen(filename) - strlen(G_MODULE_SUFFIX) -1); g_free(filename); } test_case = cut_test_case_new(test_case_name, setup, teardown, startup, shutdown); g_free(test_case_name); cut_test_set_base_directory(CUT_TEST(test_case), priv->base_directory); g_object_ref(loader); g_signal_connect(test_case, "complete", G_CALLBACK(cb_complete), loader); return test_case; } static gint find_cpp_test_case (gconstpointer value1, gconstpointer value2) { CutTestCase *test_case; SymbolNames *names; test_case = CUT_TEST_CASE(value1); names = (SymbolNames *)value2; if (g_str_equal(cut_test_get_name(CUT_TEST(test_case)), names->namespace)) { return 0; } else { return 1; } } GList * cut_loader_load_test_cases (CutLoader *loader) { CutLoaderPrivate *priv; GList *node; GList *test_names, *test_cases = NULL; CutTestCase *c_test_case = NULL; priv = CUT_LOADER_GET_PRIVATE(loader); if (!priv->so_filename) return NULL; priv->module = g_module_open(priv->so_filename, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL); if (!priv->module) { g_warning("can't load a shared object for test case: %s: %s", priv->so_filename, g_module_error()); return NULL; } priv->elf_loader = cut_elf_loader_new(priv->so_filename); if (!cut_elf_loader_is_elf(priv->elf_loader)) { g_object_unref(priv->elf_loader); priv->elf_loader = NULL; } priv->mach_o_loader = cut_mach_o_loader_new(priv->so_filename); if (!cut_mach_o_loader_is_mach_o(priv->mach_o_loader)) { g_object_unref(priv->mach_o_loader); priv->mach_o_loader = NULL; } priv->pe_loader = cut_pe_loader_new(priv->so_filename); if (!cut_pe_loader_is_dll(priv->pe_loader)) { g_object_unref(priv->pe_loader); priv->pe_loader = NULL; } priv->symbols = collect_symbols(priv); if (!priv->symbols) return NULL; test_names = collect_test_functions(priv); if (!test_names) return NULL; for (node = test_names; node; node = g_list_next(node)) { SymbolNames *names = node->data; CutTestCase *test_case = NULL; if (names->namespace) { GList *test_case_node; test_case_node = g_list_find_custom(test_cases, names, find_cpp_test_case); if (test_case_node) test_case = test_case_node->data; if (!test_case) { test_case = create_test_case(loader, names->namespace, names->gcc); test_cases = g_list_prepend(test_cases, test_case); } } else { if (!c_test_case) { c_test_case = create_test_case(loader, NULL, FALSE); test_cases = g_list_prepend(test_cases, c_test_case); } test_case = c_test_case; } register_valid_test(loader, test_case, names); symbol_names_free(names); } g_list_free(test_names); return test_cases; } CutTestCase * cut_loader_load_test_case (CutLoader *loader) { GList* test_cases; CutTestCase* test_case; test_cases = cut_loader_load_test_cases(loader); if (!test_cases) return NULL; test_case = test_cases->data; g_list_foreach(g_list_next(test_cases), (GFunc)g_object_unref, NULL); g_list_free(test_cases); return test_case; } static gchar * get_suite_prefix (CutLoaderPrivate *priv) { gchar *prefix, *base_name, *original_base_name; gchar *character; original_base_name = base_name = g_path_get_basename(priv->so_filename); if (g_str_has_prefix(base_name, TEST_SUITE_SO_NAME_PREFIX "_") || g_str_has_prefix(base_name, TEST_SUITE_SO_NAME_PREFIX "-")) base_name += strlen(TEST_SUITE_SO_NAME_PREFIX "-"); prefix = g_strndup(base_name, strlen(base_name) - strlen("." G_MODULE_SUFFIX)); g_free(original_base_name); for (character = prefix; *character; character++) { if (*character == '-') *character = '_'; } return prefix; } CutTestSuite * cut_loader_load_test_suite (CutLoader *loader) { CutLoaderPrivate *priv; gchar *prefix, *warmup_function_name, *cooldown_function_name; CutTestSuite *test_suite; CutWarmupFunction warmup = NULL; CutCooldownFunction cooldown = NULL; priv = CUT_LOADER_GET_PRIVATE(loader); if (!priv->so_filename) return NULL; priv->module = g_module_open(priv->so_filename, G_MODULE_BIND_LAZY); if (!priv->module) { g_warning("can't load a shared object for test suite: %s: %s", priv->so_filename, g_module_error()); return NULL; } prefix = get_suite_prefix(priv); warmup_function_name = g_strconcat(prefix, "_", "warmup", NULL); g_module_symbol(priv->module, warmup_function_name, (gpointer)&warmup); g_free(warmup_function_name); cooldown_function_name = g_strconcat(prefix, "_", "cooldown", NULL); g_module_symbol(priv->module, cooldown_function_name, (gpointer)&cooldown); g_free(cooldown_function_name); g_free(prefix); test_suite = cut_test_suite_new(NULL, warmup, cooldown); cut_test_set_base_directory(CUT_TEST(test_suite), priv->base_directory); return test_suite; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-data.c0000644000175000017500000001646011205747026021016 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-test.h" #include "cut-test-container.h" #include "cut-run-context.h" #include "cut-test-result.h" #include "cut-utils.h" #define CUT_TEST_DATA_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_TEST_DATA, CutTestDataPrivate)) typedef struct _CutTestDataPrivate CutTestDataPrivate; struct _CutTestDataPrivate { gchar *name; gpointer value; CutDestroyFunction destroy_function; }; enum { PROP_0, PROP_NAME, PROP_VALUE, PROP_DESTROY_FUNCTION }; G_DEFINE_TYPE(CutTestData, cut_test_data, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_test_data_class_init (CutTestDataClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("name", "Test Data Name", "The name of the test data", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_NAME, spec); spec = g_param_spec_pointer("value", "Test Data Value", "The value of the test data", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_VALUE, spec); spec = g_param_spec_pointer("destroy-function", "Test Data Destroy Function", "The destroy function for the test data's value", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_DESTROY_FUNCTION, spec); g_type_class_add_private(gobject_class, sizeof(CutTestDataPrivate)); } static void cut_test_data_init (CutTestData *test) { CutTestDataPrivate *priv = CUT_TEST_DATA_GET_PRIVATE(test); priv->name = NULL; priv->value = NULL; priv->destroy_function = NULL; } static void free_name (CutTestDataPrivate *priv) { if (priv->name) { g_free(priv->name); priv->name = NULL; } } static void free_value (CutTestDataPrivate *priv) { if (priv->value) { if (priv->destroy_function) priv->destroy_function(priv->value); priv->value = NULL; } } static void dispose (GObject *object) { CutTestDataPrivate *priv = CUT_TEST_DATA_GET_PRIVATE(object); free_name(priv); free_value(priv); G_OBJECT_CLASS(cut_test_data_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutTestDataPrivate *priv = CUT_TEST_DATA_GET_PRIVATE(object); switch (prop_id) { case PROP_NAME: cut_test_data_set_name(CUT_TEST_DATA(object), g_value_get_string(value)); break; case PROP_VALUE: free_value(priv); priv->value = g_value_get_pointer(value); break; case PROP_DESTROY_FUNCTION: priv->destroy_function = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutTestDataPrivate *priv = CUT_TEST_DATA_GET_PRIVATE(object); switch (prop_id) { case PROP_NAME: g_value_set_string(value, priv->name); break; case PROP_VALUE: g_value_set_pointer(value, priv->value); break; case PROP_DESTROY_FUNCTION: g_value_set_pointer(value, priv->destroy_function); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutTestData * cut_test_data_new (const gchar *name, gpointer value, CutDestroyFunction destroy_function) { return g_object_new(CUT_TYPE_TEST_DATA, "name", name, "value", value, "destroy-function", destroy_function, NULL); } CutTestData * cut_test_data_new_empty (void) { return cut_test_data_new(NULL, NULL, NULL); } const gchar * cut_test_data_get_name (CutTestData *test_data) { return CUT_TEST_DATA_GET_PRIVATE(test_data)->name; } void cut_test_data_set_name (CutTestData *test_data, const gchar *name) { CutTestDataPrivate *priv; priv = CUT_TEST_DATA_GET_PRIVATE(test_data); free_name(priv); if (name) priv->name = g_strdup(name); } gpointer cut_test_data_get_value (CutTestData *test_data) { return CUT_TEST_DATA_GET_PRIVATE(test_data)->value; } void cut_test_data_set_value (CutTestData *test_data, gpointer value, CutDestroyFunction destroy_function) { CutTestDataPrivate *priv; priv = CUT_TEST_DATA_GET_PRIVATE(test_data); free_value(priv); priv->value = value; priv->destroy_function = destroy_function; } gchar * cut_test_data_to_xml (CutTestData *test_data) { GString *string; string = g_string_new(NULL); cut_test_data_to_xml_string(test_data, string, 0); return g_string_free(string, FALSE); } void cut_test_data_to_xml_string (CutTestData *test_data, GString *string, guint indent) { CutTestDataPrivate *priv; priv = CUT_TEST_DATA_GET_PRIVATE(test_data); cut_utils_append_indent(string, indent); g_string_append_printf(string, "\n"); if (priv->name) cut_utils_append_xml_element_with_value(string, indent + 2, "name", priv->name); cut_utils_append_indent(string, indent); g_string_append_printf(string, "\n"); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-factory-builder.h0000644000175000017500000000546111205747026022227 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_FACTORY_BUILDER_H__ #define __CUT_FACTORY_BUILDER_H__ #include G_BEGIN_DECLS #define CUT_TYPE_FACTORY_BUILDER (cut_factory_builder_get_type ()) #define CUT_FACTORY_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_FACTORY_BUILDER, CutFactoryBuilder)) #define CUT_FACTORY_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_FACTORY_BUILDER, CutFactoryBuilderClass)) #define CUT_IS_FACTORY_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_FACTORY_BUILDER)) #define CUT_IS_FACTORY_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_FACTORY_BUILDER)) #define CUT_FACTORY_BUILDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_FACTORY_BUILDER, CutFactoryBuilderClass)) typedef struct _CutFactoryBuilder CutFactoryBuilder; typedef struct _CutFactoryBuilderClass CutFactoryBuilderClass; struct _CutFactoryBuilder { GObject object; }; struct _CutFactoryBuilderClass { GObjectClass parent_class; void (*set_option_context) (CutFactoryBuilder *builder, GOptionContext *context); GList *(*build) (CutFactoryBuilder *builder); GList *(*build_all) (CutFactoryBuilder *builder); const gchar *(*get_type_name) (CutFactoryBuilder *builder); }; GType cut_factory_builder_get_type (void) G_GNUC_CONST; const gchar *cut_factory_builder_get_type_name (CutFactoryBuilder *builder); const gchar *cut_factory_builder_get_module_dir (CutFactoryBuilder *builder); void cut_factory_builder_set_option_context (CutFactoryBuilder *builder, GOptionContext *context); GList *cut_factory_builder_build (CutFactoryBuilder *builder); GList *cut_factory_builder_build_all (CutFactoryBuilder *builder); G_END_DECLS #endif /* __CUT_FACTORY_BUILDER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-version.h.in0000644000175000017500000000474711205747026021234 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_VERSION_H__ #define __CUT_VERSION_H__ /** * SECTION: cut-version * @title: Version Information * @short_description: Variables and macros to check the Cutter version * * Cutter provides version information, primarily useful in * configure checks for builds that have a configure * script. Tests will not typically use the features * described here. */ /** * CUTTER_VERSION_MAJOR: * * The major version number of the Cutter. */ #define CUTTER_VERSION_MAJOR @CUTTER_VERSION_MAJOR@ /** * CUTTER_VERSION_MINOR: * * The minor version number of the Cutter. */ #define CUTTER_VERSION_MINOR @CUTTER_VERSION_MINOR@ /** * CUTTER_VERSION_MICRO: * * The micro version number of the Cutter. */ #define CUTTER_VERSION_MICRO @CUTTER_VERSION_MICRO@ /** * CUTTER_VERSION_STRING: * * The version number string of the Cutter with * "#{MAJOR}.#{MINOR}.#{MICRO}" format. */ #define CUTTER_VERSION_STRING "@CUTTER_VERSION@" /** * CUTTER_CHECK_VERSION: * @major: the major version number. * @minor: the minor version number. * @micro: the micro version number. * * Checks the version of the Cutter. Returns true if the * version of the Cutter header files is the same as or * newer than the passed-in version. * * Since: 1.0.7 */ #define CUTTER_CHECK_VERSION(major, minor, micro) \ (CUTTER_VERSION_MAJOR > (major) || \ (CUTTER_VERSION_MAJOR == (major) && \ CUTTER_VERSION_MINOR > (minor)) || \ (CUTTER_VERSION_MAJOR == (major) && \ CUTTER_VERSION_MINOR == (minor) && \ CUTTER_VERSION_MICRO >= (micro))) #endif /* __CUT_VERSION_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-module-impl.h0000644000175000017500000000337211243245111021345 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2006-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_MODULE_IMPL_H__ #define __CUT_MODULE_IMPL_H__ #include G_BEGIN_DECLS #include "cut-module.h" typedef GList *(*CutModuleInitFunc) (GTypeModule *module); typedef void (*CutModuleExitFunc) (void); typedef GObject *(*CutModuleInstantiateFunc) (const gchar *first_property, va_list var_args); #define CUT_MODULE_IMPL_INIT cut_module_impl_init #define CUT_MODULE_IMPL_EXIT cut_module_impl_exit #define CUT_MODULE_IMPL_INSTANTIATE cut_module_impl_instantiate G_MODULE_EXPORT GList *CUT_MODULE_IMPL_INIT (GTypeModule *module); G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void); G_MODULE_EXPORT GObject *CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args); G_END_DECLS #endif /* __CUT_MODULE_IMPL_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-module-factory-utils.c0000644000175000017500000001366611205747026023225 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-utils.h" #include "cut-module.h" #include "cut-module-factory-utils.h" static gchar *module_dir = NULL; static GHashTable *factories = NULL; #ifdef G_OS_WIN32 static gchar *win32_factory_module_dir = NULL; #endif static void unload_modules (gpointer data) { GList *modules = (GList *)data; g_list_foreach(modules, (GFunc)cut_module_unload, NULL); g_list_free(modules); } void cut_module_factory_init (void) { factories = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, unload_modules); } void cut_module_factory_quit (void) { cut_module_factory_unload(); cut_module_factory_set_default_module_dir(NULL); } const gchar * cut_module_factory_get_default_module_dir (void) { return module_dir; } void cut_module_factory_set_default_module_dir (const gchar *dir) { if (module_dir) g_free(module_dir); module_dir = NULL; if (dir) module_dir = g_strdup(dir); } static const gchar * _cut_module_factory_module_dir (void) { const gchar *dir; if (module_dir) return module_dir; dir = g_getenv("CUT_FACTORY_MODULE_DIR"); if (dir) return dir; #ifdef G_OS_WIN32 if (!win32_factory_module_dir) win32_factory_module_dir = cut_win32_build_factory_module_dir_name(NULL); return win32_factory_module_dir; #else return FACTORY_MODULEDIR; #endif } void cut_module_factory_load (const gchar *dir, const gchar *type) { if (g_file_test(dir, G_FILE_TEST_IS_DIR)) { GList *modules; modules = cut_module_load_modules(dir); if (modules) g_hash_table_replace(factories, g_strdup(type), modules); } } void cut_module_factory_load_all (const gchar *base_dir) { GDir *gdir; const gchar *entry; if (!base_dir) base_dir = _cut_module_factory_module_dir(); gdir = g_dir_open(base_dir, 0, NULL); if (!gdir) return; while ((entry = g_dir_read_name(gdir))) { gchar *dir_name; dir_name = g_build_filename(base_dir, entry, NULL); if (g_file_test(dir_name, G_FILE_TEST_IS_DIR)) { GList *modules; modules = cut_module_load_modules(dir_name); if (!modules) { gchar *libs_dir; libs_dir = g_build_filename(dir_name, ".libs", NULL); if (g_file_test(libs_dir, G_FILE_TEST_IS_DIR)) modules = cut_module_load_modules(libs_dir); g_free(libs_dir); } if (modules) g_hash_table_replace(factories, g_strdup(entry), modules); } g_free(dir_name); } g_dir_close(gdir); } CutModule * cut_module_factory_load_module (const gchar *type, const gchar *name) { CutModule *module; GList *modules = NULL; gchar *real_name; gchar *separators[] = {"_", "-", NULL}; gchar **separators_p; modules = g_hash_table_lookup(factories, type); if (!modules) return NULL; for (separators_p = separators; *separators_p; separators_p++) { real_name = g_strconcat(name, *separators_p, "factory", NULL); module = cut_module_find(modules, real_name); if (module) { g_free(real_name); return module; } module = cut_module_load_module(_cut_module_factory_module_dir(), real_name); g_free(real_name); if (module) { if (g_type_module_use(G_TYPE_MODULE(module))) { modules = g_list_prepend(modules, module); g_type_module_unuse(G_TYPE_MODULE(module)); g_hash_table_replace(factories, g_strdup(type), modules); } return module; } } return NULL; } void cut_module_factory_unload (void) { if (!factories) return; g_hash_table_unref(factories); factories = NULL; } GList * cut_module_factory_get_names (const gchar *type) { GList *modules, *orig_names, *node, *names = NULL; modules = g_hash_table_lookup(factories, type); if (!modules) return NULL; orig_names = cut_module_collect_names(modules); for (node = orig_names; node; node = g_list_next(node)) { const gchar *name = node->data; if (g_str_has_suffix(name, "_factory") || g_str_has_suffix(name, "-factory")) { gchar *p; p = g_strrstr(name, "factory") - 1; names = g_list_prepend(names, g_strndup(name, p - name)); } } g_list_free(orig_names); return g_list_reverse(names); } gboolean cut_module_factory_exist_module (const gchar *type, const gchar *name) { GList *names, *list; names = cut_module_factory_get_names(type); if (!names) return FALSE; list= g_list_find_custom(names, name, (GCompareFunc)strcmp); g_list_foreach(names, (GFunc)g_free, NULL); g_list_free(names); return (list != NULL); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-assertions-helper.h0000644000175000017500000007540111424022512022571 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_ASSERTIONS_HELPER_H__ #define __CUT_ASSERTIONS_HELPER_H__ #include #include #ifdef __cplusplus extern "C" { #endif #define cut_test_with_user_message(assertion, set_user_message) do \ { \ jmp_buf *cut_previous_jump_buffer; \ jmp_buf cut_jump_buffer; \ \ cut_test_context_start_user_message_jump(cut_get_current_test_context()); \ cut_previous_jump_buffer = \ cut_test_context_get_jump(cut_get_current_test_context()); \ cut_test_context_set_jump(cut_get_current_test_context(), \ &cut_jump_buffer); \ if (setjmp(cut_jump_buffer) == 0) { \ assertion; \ } \ cut_test_context_set_jump(cut_get_current_test_context(), \ cut_previous_jump_buffer); \ cut_test_context_finish_user_message_jump(cut_get_current_test_context()); \ \ do { \ set_user_message; \ } while (0); \ \ if (cut_test_context_get_have_current_result(cut_get_current_test_context())) { \ if (!cut_test_context_in_user_message_jump(cut_get_current_test_context())) { \ cut_test_context_process_current_result(cut_get_current_test_context()); \ } \ cut_return(); \ } \ } while (0) #define cut_test_register_result(status, system_message, ...) do \ { \ cut_test_context_set_current_result(cut_get_current_test_context(), \ CUT_TEST_RESULT_ ## status, \ system_message); \ do { \ __VA_ARGS__; \ } while (0); \ cut_test_context_process_current_result(cut_get_current_test_context()); \ } while (0) #define cut_test_terminate(status, system_message, ...) do \ { \ cut_test_context_set_current_result(cut_get_current_test_context(), \ CUT_TEST_RESULT_ ## status, \ system_message); \ do { \ __VA_ARGS__; \ } while (0); \ if (!cut_test_context_in_user_message_jump(cut_get_current_test_context())) { \ cut_test_context_process_current_result(cut_get_current_test_context()); \ } \ cut_return(); \ } while (0) void cut_assert_helper (cut_boolean result, const char *expression); void cut_assert_true_helper (cut_boolean result, const char *expression); void cut_assert_false_helper (cut_boolean result, const char *expression); void cut_assert_equal_boolean_helper(cut_boolean expected, cut_boolean actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_boolean_helper (cut_boolean expected, cut_boolean actual, const char *expression_expected, const char *expression_actual); void cut_assert_null_helper (const void *object, const char *expression); void cut_assert_null_string_helper (const char *string, const char *expression); void cut_assert_not_null_helper (const void *object, const char *expression); void cut_assert_equal_int_helper (long expected, long actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_helper(long expected, long actual, const char *expression_expected, const char *expression_actual); #ifdef HAVE_STDINT_H void cut_assert_equal_int_least8_helper (int_least8_t expected, int_least8_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_least8_helper (int_least8_t expected, int_least8_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_int_least16_helper (int_least16_t expected, int_least16_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_least16_helper (int_least16_t expected, int_least16_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_int_least32_helper (int_least32_t expected, int_least32_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_least32_helper (int_least32_t expected, int_least32_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_int_least64_helper (int_least64_t expected, int_least64_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_least64_helper (int_least64_t expected, int_least64_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_int_fast8_helper (int_fast8_t expected, int_fast8_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_fast8_helper (int_fast8_t expected, int_fast8_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_int_fast16_helper (int_fast16_t expected, int_fast16_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_fast16_helper (int_fast16_t expected, int_fast16_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_int_fast32_helper (int_fast32_t expected, int_fast32_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_fast32_helper (int_fast32_t expected, int_fast32_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_int_fast64_helper (int_fast64_t expected, int_fast64_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_int_fast64_helper (int_fast64_t expected, int_fast64_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_intptr_helper (intptr_t expected, intptr_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_intptr_helper (intptr_t expected, intptr_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_intmax_helper (intmax_t expected, intmax_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_intmax_helper (intmax_t expected, intmax_t actual, const char *expression_expected, const char *expression_actual); #endif void cut_assert_equal_uint_helper (unsigned long expected, unsigned long actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_helper (unsigned long expected, unsigned long actual, const char *expression_expected, const char *expression_actual); #ifdef HAVE_STDINT_H void cut_assert_equal_uint_least8_helper (uint_least8_t expected, uint_least8_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_least8_helper (uint_least8_t expected, uint_least8_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uint_least16_helper (uint_least16_t expected, uint_least16_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_least16_helper (uint_least16_t expected, uint_least16_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uint_least32_helper (uint_least32_t expected, uint_least32_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_least32_helper (uint_least32_t expected, uint_least32_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uint_least64_helper (uint_least64_t expected, uint_least64_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_least64_helper (uint_least64_t expected, uint_least64_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uint_fast8_helper (uint_fast8_t expected, uint_fast8_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_fast8_helper (uint_fast8_t expected, uint_fast8_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uint_fast16_helper (uint_fast16_t expected, uint_fast16_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_fast16_helper (uint_fast16_t expected, uint_fast16_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uint_fast32_helper (uint_fast32_t expected, uint_fast32_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_fast32_helper (uint_fast32_t expected, uint_fast32_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uint_fast64_helper (uint_fast64_t expected, uint_fast64_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uint_fast64_helper (uint_fast64_t expected, uint_fast64_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uintptr_helper(uintptr_t expected, uintptr_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uintptr_helper (uintptr_t expected, uintptr_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_uintmax_helper(uintmax_t expected, uintmax_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_uintmax_helper (uintmax_t expected, uintmax_t actual, const char *expression_expected, const char *expression_actual); #endif void cut_assert_equal_size_helper (size_t expected, size_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_size_helper (size_t expected, size_t actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_double_helper (double expected, double error, double actual, const char *expression_expected, const char *expression_error, const char *expression_actual); void cut_assert_not_equal_double_helper (double expected, double error, double actual, const char *expression_expected, const char *expression_error, const char *expression_actual); void cut_assert_equal_char_helper (char expected, char actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_char_helper (char expected, char actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_string_helper (const char *expected, const char *actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_string_helper (const char *expected, const char *actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_substring_helper (const char *expected, const char *actual, size_t length, const char *expression_expected, const char *expression_actual, const char *expression_length); void cut_assert_not_equal_substring_helper (const char *expected, const char *actual, size_t length, const char *expression_expected, const char *expression_actual, const char *expression_length); void cut_assert_equal_memory_helper (const void *expected, size_t expected_size, const void *actual, size_t actual_size, const char *expression_expected, const char *expression_expected_size, const char *expression_actual, const char *expression_actual_size); void cut_assert_not_equal_memory_helper (const void *expected, size_t expected_size, const void *actual, size_t actual_size, const char *expression_expected, const char *expression_expected_size, const char *expression_actual, const char *expression_actual_size); void cut_assert_equal_string_array_helper (char **expected, char **actual, const char *expression_expected, const char *expression_actual); void cut_assert_operator_helper (cut_boolean result, const char *expression_lhs, const char *expression_operator, const char *expression_rhs); void cut_assert_operator_int_helper (cut_boolean result, long lhs, long rhs, const char *expression_lhs, const char *expression_operator, const char *expression_rhs); void cut_assert_operator_uint_helper(cut_boolean result, unsigned long lhs, unsigned long rhs, const char *expression_lhs, const char *expression_operator, const char *expression_rhs); void cut_assert_operator_size_helper(cut_boolean result, size_t lhs, size_t rhs, const char *expression_lhs, const char *expression_operator, const char *expression_rhs); void cut_assert_operator_double_helper (cut_boolean result, double lhs, double rhs, const char *expression_lhs, const char *expression_operator, const char *expression_rhs); void cut_assert_equal_helper (cut_boolean result, const char *expression_function, const char *expression_expected, const char *expression_actual); void cut_assert_errno_helper (void); void cut_assert_exist_path_helper (const char *path, const char *expression_path); void cut_assert_not_exist_path_helper (const char *path, const char *expression_path); void cut_assert_match_helper (const char *pattern, const char *actual, const char *expression_pattern, const char *expression_actual); void cut_assert_equal_pointer_helper (const void *expected, const void *actual, const char *expression_expected, const char *expression_actual); void cut_assert_equal_fixture_data_string_helper (const char *expected, const char *expression_expected, const char *path, ...) CUT_GNUC_NULL_TERMINATED; void cut_assert_equal_file_raw_helper (const char *expected, const char *actual, const char *expression_expected, const char *expression_actual); void cut_assert_not_equal_file_raw_helper (const char *expected, const char *actual, const char *expression_expected, const char *expression_actual); #ifndef CUT_DISABLE_SOCKET_SUPPORT void cut_assert_equal_sockaddr_helper (const struct sockaddr *expected, const struct sockaddr *actual, const char *expression_expected, const char *expression_actual); #endif void cut_error_errno_helper (void); #ifdef __cplusplus } #endif #endif /* __CUT_ASSERTIONS_HELPER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-loader.h0000644000175000017500000000556411273044177020410 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_LOADER_H__ #define __CUT_LOADER_H__ #include #include "cut-test.h" #include "cut-test-case.h" #include "cut-test-suite.h" G_BEGIN_DECLS #define CUT_TYPE_LOADER (cut_loader_get_type ()) #define CUT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_LOADER, CutLoader)) #define CUT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_LOADER, CutLoaderClass)) #define CUT_IS_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_LOADER)) #define CUT_IS_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_LOADER)) #define CUT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_LOADER, CutLoaderClass)) typedef struct _CutLoader CutLoader; typedef struct _CutLoaderClass CutLoaderClass; struct _CutLoader { GObject object; }; struct _CutLoaderClass { GObjectClass parent_class; }; GType cut_loader_get_type (void) G_GNUC_CONST; CutLoader *cut_loader_new (const gchar *soname); gboolean cut_loader_get_keep_opening (CutLoader *loader); void cut_loader_set_keep_opening (CutLoader *loader, gboolean keep_opening); gboolean cut_loader_get_enable_convenience_attribute_definition (CutLoader *loader); void cut_loader_set_enable_convenience_attribute_definition (CutLoader *loader, gboolean enable_convenience_attribute_definition); const gchar *cut_loader_get_base_directory(CutLoader *loader); void cut_loader_set_base_directory(CutLoader *loader, const gchar *base_directory); GList *cut_loader_load_test_cases (CutLoader *loader); CutTestCase *cut_loader_load_test_case (CutLoader *loader); CutTestSuite *cut_loader_load_test_suite (CutLoader *loader); gboolean cut_loader_support_attribute (CutLoader *loader); G_END_DECLS #endif /* __CUT_LOADER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-unified-differ.h0000644000175000017500000000502111424022512021771 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_UNIFIED_DIFFER_H__ #define __CUT_UNIFIED_DIFFER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_UNIFIED_DIFFER (cut_unified_differ_get_type ()) #define CUT_UNIFIED_DIFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_UNIFIED_DIFFER, CutUnifiedDiffer)) #define CUT_UNIFIED_DIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_UNIFIED_DIFFER, CutUnifiedDifferClass)) #define CUT_IS_UNIFIED_DIFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_UNIFIED_DIFFER)) #define CUT_IS_UNIFIED_DIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_UNIFIED_DIFFER)) #define CUT_UNIFIED_DIFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_UNIFIED_DIFFER, CutUnifiedDifferClass)) typedef struct _CutUnifiedDiffer CutUnifiedDiffer; typedef struct _CutUnifiedDifferClass CutUnifiedDifferClass; struct _CutUnifiedDiffer { CutDiffer object; }; struct _CutUnifiedDifferClass { CutDifferClass parent_class; }; GType cut_unified_differ_get_type (void) G_GNUC_CONST; CutDiffer *cut_unified_differ_new (const gchar *from, const gchar *to); void cut_unified_differ_set_from_label (CutDiffer *differ, const gchar *label); const gchar *cut_unified_differ_get_from_label (CutDiffer *differ); void cut_unified_differ_set_to_label (CutDiffer *differ, const gchar *label); const gchar *cut_unified_differ_get_to_label (CutDiffer *differ); G_END_DECLS #endif /* __CUT_UNIFIED_DIFFER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-repository.c0000644000175000017500000002710611407320456021344 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include "cut-repository.h" #include "cut-loader.h" #include "cut-utils.h" #define CUT_REPOSITORY_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_REPOSITORY, CutRepositoryPrivate)) typedef struct _CutRepositoryPrivate CutRepositoryPrivate; struct _CutRepositoryPrivate { gchar *directory; GList *exclude_files_regexs; GList *exclude_dirs_regexs; GList *loaders; gint deep; CutLoader *test_suite_loader; gboolean keep_opening_modules; gboolean enable_convenience_attribute_definition; }; enum { PROP_0, PROP_DIRECTORY }; G_DEFINE_TYPE (CutRepository, cut_repository, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_repository_class_init (CutRepositoryClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("directory", "Directory name", "The directory name in which stores shared object", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_DIRECTORY, spec); g_type_class_add_private(gobject_class, sizeof(CutRepositoryPrivate)); } static void cut_repository_init (CutRepository *repository) { CutRepositoryPrivate *priv = CUT_REPOSITORY_GET_PRIVATE(repository); priv->directory = NULL; priv->loaders = NULL; priv->exclude_files_regexs = NULL; priv->exclude_dirs_regexs = NULL; priv->deep = 0; priv->test_suite_loader = NULL; priv->keep_opening_modules = FALSE; priv->enable_convenience_attribute_definition = FALSE; } static void free_regexs (GList *regexs) { g_list_foreach(regexs, (GFunc)g_regex_unref, NULL); g_list_free(regexs); } static void dispose (GObject *object) { CutRepositoryPrivate *priv = CUT_REPOSITORY_GET_PRIVATE(object); if (priv->directory) { g_free(priv->directory); priv->directory = NULL; } if (priv->loaders) { g_list_foreach(priv->loaders, (GFunc)g_object_unref, NULL); g_list_free(priv->loaders); priv->loaders = NULL; } if (priv->exclude_files_regexs) { free_regexs(priv->exclude_files_regexs); priv->exclude_files_regexs = NULL; } if (priv->exclude_dirs_regexs) { free_regexs(priv->exclude_dirs_regexs); priv->exclude_dirs_regexs = NULL; } if (priv->test_suite_loader) { g_object_unref(priv->test_suite_loader); priv->test_suite_loader = NULL; } G_OBJECT_CLASS(cut_repository_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutRepositoryPrivate *priv = CUT_REPOSITORY_GET_PRIVATE(object); switch (prop_id) { case PROP_DIRECTORY: priv->directory = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutRepositoryPrivate *priv = CUT_REPOSITORY_GET_PRIVATE(object); switch (prop_id) { case PROP_DIRECTORY: g_value_set_string(value, priv->directory); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutRepository * cut_repository_new (const gchar *directory) { return g_object_new(CUT_TYPE_REPOSITORY, "directory", directory, NULL); } gboolean cut_repository_get_keep_opening_modules (CutRepository *repository) { return CUT_REPOSITORY_GET_PRIVATE(repository)->keep_opening_modules; } void cut_repository_set_keep_opening_modules (CutRepository *repository, gboolean keep_opening) { CUT_REPOSITORY_GET_PRIVATE(repository)->keep_opening_modules = keep_opening; } gboolean cut_repository_get_enable_convenience_attribute_definition (CutRepository *repository) { return CUT_REPOSITORY_GET_PRIVATE(repository)->enable_convenience_attribute_definition; } void cut_repository_set_enable_convenience_attribute_definition (CutRepository *repository, gboolean enable_convenience_attribute_definition) { CUT_REPOSITORY_GET_PRIVATE(repository)->enable_convenience_attribute_definition = enable_convenience_attribute_definition; } static gboolean is_test_suite_so_path_name (const gchar *path_name) { gboolean is_test_suite_so = FALSE; gchar *base_name; base_name = g_path_get_basename(path_name); if (g_str_has_prefix(base_name, "suite_") || g_str_has_prefix(base_name, "suite-")) is_test_suite_so = TRUE; g_free(base_name); return is_test_suite_so; } static void update_test_suite_loader (CutRepositoryPrivate *priv, CutLoader *loader, gint deep) { if (!priv->test_suite_loader) { priv->deep = deep; priv->test_suite_loader = g_object_ref(loader); } if (priv->deep > deep) { priv->deep = deep; g_object_unref(priv->test_suite_loader); priv->test_suite_loader = g_object_ref(loader); } } static inline gboolean is_ignore_directory (const gchar *dir_name) { return g_str_equal(dir_name, ".svn") || g_str_equal(dir_name, ".git") || g_str_equal(dir_name, "CVS") || g_str_has_suffix(dir_name, ".dSYM"); } static inline gchar * compute_relative_path (GArray *paths) { gchar *last_component, *relative_path; gboolean is_ignore_library_directory = FALSE; if (paths->len > 0) { last_component = g_array_index(paths, gchar *, paths->len - 1); if (g_str_equal(last_component, ".libs") || g_str_equal(last_component, "_libs")) is_ignore_library_directory = TRUE; } if (is_ignore_library_directory) g_array_index(paths, gchar *, paths->len - 1) = NULL; relative_path = g_build_filenamev((gchar **)(paths->data)); if (is_ignore_library_directory) g_array_index(paths, gchar *, paths->len - 1) = last_component; return relative_path; } static void cut_repository_collect_loader (CutRepository *repository, const gchar *dir_name, GArray *paths) { GDir *dir; const gchar *entry; CutRepositoryPrivate *priv = CUT_REPOSITORY_GET_PRIVATE(repository); if (is_ignore_directory(dir_name)) return; dir = g_dir_open(dir_name, 0, NULL); if (!dir) return; while ((entry = g_dir_read_name(dir))) { gchar *path_name; path_name = g_build_filename(dir_name, entry, NULL); if (g_file_test(path_name, G_FILE_TEST_IS_DIR)) { if (cut_utils_filter_match(priv->exclude_dirs_regexs, entry)) { g_free(path_name); continue; } g_array_append_val(paths, entry); cut_repository_collect_loader(repository, path_name, paths); g_array_remove_index(paths, paths->len - 1); } else { CutLoader *loader; gchar *relative_path; if (cut_utils_filter_match(priv->exclude_files_regexs, entry) || !g_str_has_suffix(entry, "."G_MODULE_SUFFIX)) { g_free(path_name); continue; } loader = cut_loader_new(path_name); relative_path = compute_relative_path(paths); cut_loader_set_base_directory(loader, relative_path); cut_loader_set_keep_opening(loader, priv->keep_opening_modules); cut_loader_set_enable_convenience_attribute_definition( loader, priv->enable_convenience_attribute_definition); if (is_test_suite_so_path_name(path_name)) { update_test_suite_loader(priv, loader, paths->len); } else { priv->loaders = g_list_prepend(priv->loaders, loader); } g_free(relative_path); } g_free(path_name); } g_dir_close(dir); } CutTestSuite * cut_repository_create_test_suite (CutRepository *repository) { CutTestSuite *suite = NULL; CutRepositoryPrivate *priv = CUT_REPOSITORY_GET_PRIVATE(repository); GList *list; if (!priv->directory) return NULL; if (!priv->loaders) { GArray *paths; priv->deep = 0; paths = g_array_new(TRUE, TRUE, sizeof(gchar *)); cut_repository_collect_loader(repository, priv->directory, paths); g_array_free(paths, TRUE); } if (priv->test_suite_loader) suite = cut_loader_load_test_suite(priv->test_suite_loader); if (!suite) suite = cut_test_suite_new_empty(); for (list = priv->loaders; list; list = g_list_next(list)) { CutLoader *loader = CUT_LOADER(list->data); GList *test_cases, *node; test_cases = cut_loader_load_test_cases(loader); for (node = test_cases; node; node = g_list_next(node)) { CutTestCase *test_case = node->data; cut_test_suite_add_test_case(suite, test_case); g_object_unref(test_case); } g_list_free(test_cases); } return suite; } void cut_repository_set_exclude_files (CutRepository *repository, const gchar **files) { CutRepositoryPrivate *priv = CUT_REPOSITORY_GET_PRIVATE(repository); if (priv->exclude_files_regexs) free_regexs(priv->exclude_files_regexs); if (files) priv->exclude_files_regexs = cut_utils_filter_to_regexs(files); } void cut_repository_set_exclude_directories (CutRepository *repository, const gchar **dirs) { CutRepositoryPrivate *priv = CUT_REPOSITORY_GET_PRIVATE(repository); if (priv->exclude_dirs_regexs) free_regexs(priv->exclude_dirs_regexs); if (dirs) priv->exclude_dirs_regexs = cut_utils_filter_to_regexs(dirs); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/main.c0000644000175000017500000000223611243245111017245 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007, 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-main.h" #include int main (int argc, char *argv[]) { gboolean success = TRUE; cut_init(&argc, &argv); success = cut_run(); cut_quit(); return success ? EXIT_SUCCESS : EXIT_FAILURE; } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-suite.h0000644000175000017500000001003711205747026021235 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_SUITE_H__ #define __CUT_TEST_SUITE_H__ #include #include #include G_BEGIN_DECLS #define CUT_TYPE_TEST_SUITE (cut_test_suite_get_type ()) #define CUT_TEST_SUITE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST_SUITE, CutTestSuite)) #define CUT_TEST_SUITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST_SUITE, CutTestSuiteClass)) #define CUT_IS_TEST_SUITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST_SUITE)) #define CUT_IS_TEST_SUITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST_SUITE)) #define CUT_TEST_SUITE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST_SUITE, CutTestSuiteClass)) typedef void (*CutWarmupFunction) (void); typedef void (*CutCooldownFunction) (void); typedef struct _CutTestSuiteClass CutTestSuiteClass; struct _CutTestSuite { CutTestContainer object; }; struct _CutTestSuiteClass { CutTestContainerClass parent_class; void (*ready) (CutTestSuite *suite, guint n_test_cases, guint n_tests); void (*start_test_case) (CutTestSuite *suite, CutTestCase *test_case); void (*complete_test_case) (CutTestSuite *suite, CutTestCase *test_case, gboolean success); }; GType cut_test_suite_get_type (void) G_GNUC_CONST; CutTestSuite *cut_test_suite_new (const gchar *name, CutWarmupFunction warmup, CutCooldownFunction cooldown); CutTestSuite *cut_test_suite_new_empty (void); void cut_test_suite_add_test_case (CutTestSuite *suite, CutTestCase *test_case); gboolean cut_test_suite_run (CutTestSuite *suite, CutRunContext *run_context); gboolean cut_test_suite_run_test_case (CutTestSuite *suite, CutRunContext *run_context, gchar *test_case_name); gboolean cut_test_suite_run_test (CutTestSuite *suite, CutRunContext *run_context, gchar *name); gboolean cut_test_suite_run_test_in_test_case (CutTestSuite *suite, CutRunContext *run_context, gchar *name, gchar *test_case_name); gboolean cut_test_suite_run_with_filter (CutTestSuite *test_suite, CutRunContext *run_context, const gchar **test_case_names, const gchar **test_names); G_END_DECLS #endif /* __CUT_TEST_SUITE_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-features.h0000644000175000017500000000214011525655071020744 0ustar koukou/* cut-features.h * * This is a generated file. Please modify 'configure.ac' */ #ifndef __CUT_FEATURES_H__ #define __CUT_FEATURES_H__ /** * SECTION: cut-features * @title: Available features * @short_description: Available features in the installed Cutter. * * There are some macros to check a feature is available in the * installed Cutter. */ /** * CUT_SUPPORT_GLIB: * * Shows GLib support is available. That is, we can use <gcutter.h>. * It is always defined. */ #define CUT_SUPPORT_GLIB 1 /** * CUT_SUPPORT_GDK_PIXBUF: * * Shows GdkPixbuf support is available. * That is, we can use <gdkcutter-pixbuf.h>. */ #define CUT_SUPPORT_GDK_PIXBUF 1 /** * CUT_SUPPORT_GIO: * * Shows GIO support is available. */ #define CUT_SUPPORT_GIO 1 /** * CUT_SUPPORT_LIBSOUP: * * Shows LibSoup support is available. */ #define CUT_SUPPORT_LIBSOUP 1 /** * CUT_SUPPORT_C99_STDINT_TYPES: * * Shows C99 stdint types support is available. * That is, we can use assertions that use C99 stdint types. * e.g. cut_assert_equal_int_least8(). */ #define CUT_SUPPORT_C99_STDINT_TYPES 1 #endif cutter-testing-framework-1.1.7/cutter/cut-console.h0000644000175000017500000000367311264347622020604 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_CONSOLE_H__ #define __CUT_CONSOLE_H__ #include G_BEGIN_DECLS #define CUT_CONSOLE_COLOR_RED "\033[01;31m" #define CUT_CONSOLE_COLOR_RED_BACK "\033[41m" #define CUT_CONSOLE_COLOR_GREEN "\033[01;32m" #define CUT_CONSOLE_COLOR_GREEN_BACK "\033[01;42m" #define CUT_CONSOLE_COLOR_YELLOW "\033[01;33m" #define CUT_CONSOLE_COLOR_BLUE "\033[01;34m" #define CUT_CONSOLE_COLOR_BLUE_BACK "\033[01;44m" #define CUT_CONSOLE_COLOR_MAGENTA "\033[01;35m" #define CUT_CONSOLE_COLOR_CYAN "\033[01;36m" #define CUT_CONSOLE_COLOR_CYAN_BACK "\033[01;46m" #define CUT_CONSOLE_COLOR_WHITE "\033[01;37m" #define CUT_CONSOLE_COLOR_WHITE_BACK "\033[01;47m" #define CUT_CONSOLE_COLOR_BLACK_BACK "\033[01;40m" #define CUT_CONSOLE_COLOR_NORMAL "\033[00m" gboolean cut_console_guess_color_usability (void); gboolean cut_console_parse_color_arg (const gchar *option_name, const gchar *value, gboolean *use_color, GError **error); G_END_DECLS #endif /* __CUT_CONSOLE_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-sub-process.c0000644000175000017500000003442711205747026021400 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "cut-main.h" #include "cut-sub-process.h" #include "cut-pipeline.h" #include "cut-test-context.h" #define CUT_SUB_PROCESS_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_SUB_PROCESS, CutSubProcessPrivate)) typedef struct _CutSubProcessPrivate CutSubProcessPrivate; struct _CutSubProcessPrivate { CutRunContext *pipeline; CutTestContext *test_context; gboolean running; gboolean is_success; gboolean is_ran; }; enum { PROP_0, PROP_PIPELINE, PROP_TEST_CONTEXT }; G_DEFINE_TYPE(CutSubProcess, cut_sub_process, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_sub_process_class_init (CutSubProcessClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_object("pipeline", "Pipeline", "The pipeline", CUT_TYPE_PIPELINE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject_class, PROP_PIPELINE, spec); spec = g_param_spec_object("test-context", "Test context", "The test context", CUT_TYPE_TEST_CONTEXT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject_class, PROP_TEST_CONTEXT, spec); g_type_class_add_private(gobject_class, sizeof(CutSubProcessPrivate)); } static void cut_sub_process_init (CutSubProcess *sub_process) { CutSubProcessPrivate *priv; priv = CUT_SUB_PROCESS_GET_PRIVATE(sub_process); priv->pipeline = NULL; priv->test_context = NULL; priv->running = FALSE; priv->is_success = TRUE; priv->is_ran = FALSE; } static void dispose (GObject *object) { CutSubProcessPrivate *priv; priv = CUT_SUB_PROCESS_GET_PRIVATE(object); if (priv->running) { if (priv->pipeline) cut_run_context_emit_complete_run(priv->pipeline, FALSE); priv->running = FALSE; } if (priv->pipeline) { g_object_unref(priv->pipeline); priv->pipeline = NULL; } if (priv->test_context) { g_object_unref(priv->test_context); priv->test_context = NULL; } G_OBJECT_CLASS(cut_sub_process_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutSubProcess *sub_process; sub_process = CUT_SUB_PROCESS(object); switch (prop_id) { case PROP_PIPELINE: cut_sub_process_set_pipeline(sub_process, g_value_get_object(value)); break; case PROP_TEST_CONTEXT: cut_sub_process_set_test_context(sub_process, g_value_get_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutSubProcessPrivate *priv = CUT_SUB_PROCESS_GET_PRIVATE(object); switch (prop_id) { case PROP_PIPELINE: g_value_set_object(value, priv->pipeline); break; case PROP_TEST_CONTEXT: g_value_set_object(value, priv->test_context); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutSubProcess * cut_sub_process_new (const char *test_directory, CutTestContext *test_context) { CutSubProcess *sub_process; CutRunContext *parent_run_context = NULL; CutRunContext *pipeline; if (test_context) parent_run_context = cut_test_context_get_run_context(test_context); pipeline = cut_pipeline_new(); cut_run_context_set_source_directory(pipeline, test_directory); cut_run_context_set_test_directory(pipeline, test_directory); if (parent_run_context) { gint max_threads; if (cut_run_context_get_multi_thread(parent_run_context)) cut_run_context_set_multi_thread(pipeline, TRUE); max_threads = cut_run_context_get_max_threads(parent_run_context); cut_run_context_set_max_threads(pipeline, max_threads); cut_run_context_delegate_signals(pipeline, parent_run_context); } sub_process = g_object_new(CUT_TYPE_SUB_PROCESS, "test-context", test_context, "pipeline", pipeline, NULL); g_object_unref(pipeline); return sub_process; } CutRunContext * cut_sub_process_get_pipeline (CutSubProcess *sub_process) { return CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; } void cut_sub_process_set_pipeline (CutSubProcess *sub_process, CutRunContext *pipeline) { CutSubProcessPrivate *priv; priv = CUT_SUB_PROCESS_GET_PRIVATE(sub_process); if (priv->pipeline) g_object_unref(priv->pipeline); if (pipeline) g_object_ref(pipeline); priv->pipeline = pipeline; } CutTestContext * cut_sub_process_get_test_context (CutSubProcess *sub_process) { return CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->test_context; } void cut_sub_process_set_test_context (CutSubProcess *sub_process, CutTestContext *test_context) { CutSubProcessPrivate *priv; priv = CUT_SUB_PROCESS_GET_PRIVATE(sub_process); if (priv->test_context) g_object_unref(priv->test_context); if (test_context) g_object_ref(test_context); priv->test_context = test_context; } gboolean cut_sub_process_run (CutSubProcess *sub_process) { CutSubProcessPrivate *priv; priv = CUT_SUB_PROCESS_GET_PRIVATE(sub_process); if (!priv->is_ran) { priv->running = TRUE; priv->is_success = cut_run_context_start(priv->pipeline); priv->running = FALSE; priv->is_ran = TRUE; } return priv->is_success; } static void cb_complete_run (CutRunContext *pipeline, gboolean success, gpointer user_data) { CutSubProcess *sub_process = user_data; CutSubProcessPrivate *priv; g_signal_handlers_disconnect_by_func(pipeline, G_CALLBACK(cb_complete_run), user_data); priv = CUT_SUB_PROCESS_GET_PRIVATE(sub_process); priv->is_success = success; priv->running = FALSE; priv->is_ran = TRUE; } void cut_sub_process_run_async (CutSubProcess *sub_process) { CutSubProcessPrivate *priv; priv = CUT_SUB_PROCESS_GET_PRIVATE(sub_process); if (!priv->is_ran && !priv->running) { priv->running = TRUE; priv->is_success = TRUE; g_signal_connect(priv->pipeline, "complete-run", G_CALLBACK(cb_complete_run), sub_process); cut_run_context_start_async(priv->pipeline); } } gboolean cut_sub_process_wait (CutSubProcess *sub_process) { CutSubProcessPrivate *priv; priv = CUT_SUB_PROCESS_GET_PRIVATE(sub_process); if (!priv->is_ran) { while (priv->running) cut_run_iteration(); } return priv->is_success; } gboolean cut_sub_process_is_success (CutSubProcess *sub_process) { return CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->is_success; } gboolean cut_sub_process_is_running (CutSubProcess *sub_process) { return CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->running; } const char * cut_sub_process_get_test_directory (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_test_directory(pipeline); } void cut_sub_process_set_test_directory (CutSubProcess *sub_process, const char *test_directory) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_test_directory(pipeline, test_directory); } const char * cut_sub_process_get_source_directory (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_source_directory(pipeline); } void cut_sub_process_set_source_directory (CutSubProcess *sub_process, const char *source_directory) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_source_directory(pipeline, source_directory); } gboolean cut_sub_process_get_multi_thread (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_multi_thread(pipeline); } void cut_sub_process_set_multi_thread (CutSubProcess *sub_process, gboolean multi_thread) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_multi_thread(pipeline, multi_thread); } gint cut_sub_process_get_max_threads (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_max_threads(pipeline); } void cut_sub_process_set_max_threads (CutSubProcess *sub_process, gint max_threads) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_max_threads(pipeline, max_threads); } const char ** cut_sub_process_get_exclude_files (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_exclude_files(pipeline); } void cut_sub_process_set_exclude_files (CutSubProcess *sub_process, const char **files) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_exclude_files(pipeline, files); } const char ** cut_sub_process_get_exclude_directories (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_exclude_directories(pipeline); } void cut_sub_process_set_exclude_directories (CutSubProcess *sub_process, const char **directories) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_exclude_directories(pipeline, directories); } const char ** cut_sub_process_get_target_test_case_names (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_target_test_case_names(pipeline); } void cut_sub_process_set_target_test_case_names (CutSubProcess *sub_process, const char **names) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_target_test_case_names(pipeline, names); } const char ** cut_sub_process_get_target_test_names (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_target_test_names(pipeline); } void cut_sub_process_set_target_test_names (CutSubProcess *sub_process, const char **names) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_target_test_names(pipeline, names); } double cut_sub_process_get_elapsed (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_elapsed(pipeline); } double cut_sub_process_get_total_elapsed (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_total_elapsed(pipeline); } gboolean cut_sub_process_is_crashed (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_is_crashed(pipeline); } gboolean cut_sub_process_get_fatal_failures (CutSubProcess *sub_process) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; return cut_run_context_get_fatal_failures(pipeline); } void cut_sub_process_set_fatal_failures (CutSubProcess *sub_process, gboolean fatal_failures) { CutRunContext *pipeline; pipeline = CUT_SUB_PROCESS_GET_PRIVATE(sub_process)->pipeline; cut_run_context_set_fatal_failures(pipeline, fatal_failures); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-differ.h0000644000175000017500000000716411424022512020362 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_DIFFER_H__ #define __CUT_DIFFER_H__ #include #include #include #include G_BEGIN_DECLS #define CUT_TYPE_DIFFER (cut_differ_get_type ()) #define CUT_DIFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_DIFFER, CutDiffer)) #define CUT_DIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_DIFFER, CutDifferClass)) #define CUT_IS_DIFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_DIFFER)) #define CUT_IS_DIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_DIFFER)) #define CUT_DIFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_DIFFER, CutDifferClass)) typedef struct _CutDiffer CutDiffer; typedef struct _CutDifferClass CutDifferClass; struct _CutDiffer { GObject object; }; struct _CutDifferClass { GObjectClass parent_class; void (*diff) (CutDiffer *differ, CutDiffWriter *writer); gdouble (*get_best_ratio) (CutDiffer *differ); gdouble (*get_cut_off_ratio) (CutDiffer *differ); guint (*get_initial_context_size) (CutDiffer *differ); }; GType cut_differ_get_type (void) G_GNUC_CONST; void cut_differ_diff (CutDiffer *differ, CutDiffWriter *writer); void cut_differ_write_summary (CutDiffer *differ, CutDiffWriter *writer, const GList *operations); gdouble cut_differ_get_best_ratio (CutDiffer *differ); gdouble cut_differ_get_cut_off_ratio(CutDiffer *differ); gchar **cut_differ_get_from (CutDiffer *differ); gchar **cut_differ_get_to (CutDiffer *differ); CutSequenceMatcher * cut_differ_get_sequence_matcher (CutDiffer *differ); void cut_differ_set_context_size (CutDiffer *differ, guint context); guint cut_differ_get_context_size (CutDiffer *differ); gboolean cut_differ_need_diff (CutDiffer *differ); gboolean cut_differ_util_is_space_character (gpointer data, gpointer user_data); guint cut_differ_util_compute_width (const gchar *string, guint begin, guint end); gboolean cut_differ_util_is_same_content (const GList *groups); G_END_DECLS #endif /* __CUT_DIFFER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-enum-types.h0000644000175000017500000000236611424022573021237 0ustar koukou /* Generated data (by glib-mkenums) */ #ifndef __CUT_ENUM_TYPES_H__ #define __CUT_ENUM_TYPES_H__ #include G_BEGIN_DECLS /* enumerations from "cut-public.h" */ GType cut_test_result_status_get_type (void); #define CUT_TYPE_TEST_RESULT_STATUS (cut_test_result_status_get_type()) GType cut_diff_writer_tag_get_type (void); #define CUT_TYPE_DIFF_WRITER_TAG (cut_diff_writer_tag_get_type()) GType cut_file_stream_reader_error_get_type (void); #define CUT_TYPE_FILE_STREAM_READER_ERROR (cut_file_stream_reader_error_get_type()) GType cut_pipeline_error_get_type (void); #define CUT_TYPE_PIPELINE_ERROR (cut_pipeline_error_get_type()) GType cut_order_get_type (void); #define CUT_TYPE_ORDER (cut_order_get_type()) GType cut_stream_reader_error_get_type (void); #define CUT_TYPE_STREAM_READER_ERROR (cut_stream_reader_error_get_type()) GType cut_test_context_error_get_type (void); #define CUT_TYPE_TEST_CONTEXT_ERROR (cut_test_context_error_get_type()) GType cut_verbose_level_get_type (void); #define CUT_TYPE_VERBOSE_LEVEL (cut_verbose_level_get_type()) GType cut_verbose_level_error_get_type (void); #define CUT_TYPE_VERBOSE_LEVEL_ERROR (cut_verbose_level_error_get_type()) G_END_DECLS #endif /* __CUT_ENUM_TYPES_H__ */ /* Generated data ends here */ cutter-testing-framework-1.1.7/cutter/cut-assertions.h0000644000175000017500000026362411424022512021322 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_ASSERTIONS_H__ #define __CUT_ASSERTIONS_H__ #include #ifdef __cplusplus extern "C" { #endif /** * SECTION: cut-assertions * @title: Assertions * @short_description: Checks that your program works as you expect. * * To check that your program works as you expect, you use * cut_assert_XXX() where you want to check expected value * is got. * * e.g.: * |[ * cut_assert_equal_int(3, 1 + 2); * ]| */ /** * cut_assert: * @expression: the expression to be checked. * @...: optional message. See cut_message() for details. * * Passes if @expression is not 0 or %NULL. * * e.g.: * |[ * char *string; * string = malloc(16); * cut_assert(string); * ]| * * |[ * MyObject *object; * object = my_object_new(); * cut_assert(object, cut_message("my_object_new() should not be failed")); * ]| */ #define cut_assert(expression, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_helper((expression) ? CUT_TRUE : CUT_FALSE, \ #expression), \ __VA_ARGS__), \ cut_assert(expression, __VA_ARGS__)); \ } while (0) /** * cut_assert_true: * @expression: the expression to be checked. * @...: optional message. See cut_message() for details. * * Passes if @expression is %CUT_TRUE value (not 0 or %NULL). * * Since: 0.9 */ #define cut_assert_true(expression, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_true_helper((expression) ? CUT_TRUE : CUT_FALSE, \ #expression), \ __VA_ARGS__), \ cut_assert_true(expression, __VA_ARGS__)); \ } while (0) /** * cut_assert_false: * @expression: the expression to be checked. * @...: optional message. See cut_message() for details. * * Passes if @expression is 0 or %NULL. * * Since: 0.9 */ #define cut_assert_false(expression, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_false_helper((expression) ? CUT_TRUE : CUT_FALSE, \ #expression), \ __VA_ARGS__), \ cut_assert_false(expression, __VA_ARGS__)); \ } while (0) /** * cut_assert_equal_boolean: * @expected: the expected boolean. * @actual: the actual boolean. * @...: optional message. See cut_message() for details. * * Passes if both of @expected and @actual are %CUT_TRUE * value or both of @expected and @actual are %CUT_FALSE * value. * * e.g.: * |[ * cut_assert_equal_boolean(CUT_TRUE, CUT_TRUE); -> Pass * cut_assert_equal_boolean(CUT_FALSE, CUT_FALSE); -> Pass * cut_assert_equal_boolean(CUT_TRUE, CUT_FALSE); -> Fail * ]| * * Since: 1.0.7 */ #define cut_assert_equal_boolean(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_boolean_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_boolean(expected, actual)); \ } while (0) /** * cut_assert_not_equal_boolean: * @expected: the expected boolean. * @actual: the actual boolean. * @...: optional message. See cut_message() for details. * * Passes if @expected is %CUT_TRUE value * but @actual is %CUT_FALSE value or @expected is * %CUT_FALSE value but @actual is %CUT_TRUE value. * * e.g.: * |[ * cut_assert_not_equal_boolean(CUT_TRUE, CUT_TRUE); -> Fail * cut_assert_not_equal_boolean(CUT_FALSE, CUT_FALSE); -> Fail * cut_assert_not_equal_boolean(CUT_TRUE, CUT_FALSE); -> Pass * ]| * * Since: 1.0.7 */ #define cut_assert_not_equal_boolean(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_boolean_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_boolean(expected, actual)); \ } while (0) /** * cut_assert_null: * @expression: the expression to be checked. * @...: optional message. See cut_message() for details. * * Passes if @expression is %NULL. */ #define cut_assert_null(expression, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_null_helper((expression), #expression), \ __VA_ARGS__), \ cut_assert_null(expression, __VA_ARGS__)); \ } while (0) /** * cut_assert_null_string: * @string: the string to be checked. * @...: optional message. See cut_message() for details. * * Passes if @string is %NULL. * * Since: 0.3 */ #define cut_assert_null_string(string, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_null_string_helper((string), #string), \ __VA_ARGS__), \ cut_assert_null_string(string, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_null: * @expression: the expression to be checked. * @...: optional message. See cut_message() for details. * * Passes if @expression is not %NULL. */ #define cut_assert_not_null(expression, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_null_helper((expression), #expression), \ __VA_ARGS__), \ cut_assert_not_null(expression, __VA_ARGS__)); \ } while (0) /** * cut_assert_equal_int: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. */ #define cut_assert_equal_int(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_equal_int: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * Since: 1.0.7 */ #define cut_assert_not_equal_int(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int(expected, actual)); \ } while (0) #ifdef CUT_SUPPORT_C99_STDINT_TYPES /** * cut_assert_equal_int_least8: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_int_least8(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_least8_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int_least8(expected, actual)); \ } while (0) /** * cut_assert_not_equal_int_least8: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_int_least8(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_least8_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int_least8(expected, actual)); \ } while (0) /** * cut_assert_equal_int_least16: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_int_least16(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_least16_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int_least16(expected, actual)); \ } while (0) /** * cut_assert_not_equal_int_least16: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_int_least16(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_least16_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int_least16(expected, actual)); \ } while (0) /** * cut_assert_equal_int_least32: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_int_least32(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_least32_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int_least32(expected, actual)); \ } while (0) /** * cut_assert_not_equal_int_least32: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_int_least32(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_least32_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int_least32(expected, actual)); \ } while (0) /** * cut_assert_equal_int_least64: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_int_least64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_least64_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int_least64(expected, actual)); \ } while (0) /** * cut_assert_not_equal_int_least64: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_int_least64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_least64_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int_least64(expected, actual)); \ } while (0) /** * cut_assert_equal_int_fast8: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_int_fast8(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_fast8_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int_fast8(expected, actual)); \ } while (0) /** * cut_assert_not_equal_int_fast8: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_int_fast8(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_fast8_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int_fast8(expected, actual)); \ } while (0) /** * cut_assert_equal_int_fast16: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_int_fast16(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_fast16_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int_fast16(expected, actual)); \ } while (0) /** * cut_assert_not_equal_int_fast16: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_int_fast16(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_fast16_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int_fast16(expected, actual)); \ } while (0) /** * cut_assert_equal_int_fast32: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_int_fast32(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_fast32_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int_fast32(expected, actual)); \ } while (0) /** * cut_assert_not_equal_int_fast32: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_int_fast32(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_fast32_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int_fast32(expected, actual)); \ } while (0) /** * cut_assert_equal_int_fast64: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_int_fast64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_int_fast64_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_int_fast64(expected, actual)); \ } while (0) /** * cut_assert_not_equal_int_fast64: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_int_fast64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_int_fast64_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_int_fast64(expected, actual)); \ } while (0) /** * cut_assert_equal_intptr: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_intptr(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_intptr_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_intptr(expected, actual)); \ } while (0) /** * cut_assert_not_equal_intptr: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_intptr(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_intptr_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_intptr(expected, actual)); \ } while (0) /** * cut_assert_equal_intmax: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_intmax(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_intmax_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_intmax(expected, actual)); \ } while (0) /** * cut_assert_not_equal_intmax: * @expected: an expected integer value. * @actual: an actual integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_intmax(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_intmax_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_intmax(expected, actual)); \ } while (0) #endif /** * cut_assert_equal_uint: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. */ #define cut_assert_equal_uint(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_equal_uint: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * Since: 1.0.7 */ #define cut_assert_not_equal_uint(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint(expected, actual)); \ } while (0) #ifdef CUT_SUPPORT_C99_STDINT_TYPES /** * cut_assert_equal_uint_least8: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uint_least8(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_least8_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint_least8(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uint_least8: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uint_least8(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_least8_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint_least8(expected, actual)); \ } while (0) /** * cut_assert_equal_uint_least16: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uint_least16(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_least16_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint_least16(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uint_least16: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uint_least16(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_least16_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint_least16(expected, actual)); \ } while (0) /** * cut_assert_equal_uint_least32: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uint_least32(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_least32_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint_least32(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uint_least32: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uint_least32(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_least32_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint_least32(expected, actual)); \ } while (0) /** * cut_assert_equal_uint_least64: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uint_least64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_least64_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint_least64(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uint_least64: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uint_least64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_least64_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint_least64(expected, actual)); \ } while (0) /** * cut_assert_equal_uint_fast8: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uint_fast8(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_fast8_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint_fast8(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uint_fast8: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uint_fast8(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_fast8_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint_fast8(expected, actual)); \ } while (0) /** * cut_assert_equal_uint_fast16: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uint_fast16(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_fast16_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint_fast16(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uint_fast16: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uint_fast16(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_fast16_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint_fast16(expected, actual)); \ } while (0) /** * cut_assert_equal_uint_fast32: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uint_fast32(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_fast32_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint_fast32(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uint_fast32: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uint_fast32(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_fast32_helper((expected), \ (actual), \ #expected,\ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint_fast32(expected, actual)); \ } while (0) /** * cut_assert_equal_uint_fast64: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uint_fast64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uint_fast64_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uint_fast64(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uint_fast64: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uint_fast64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uint_fast64_helper((expected), \ (actual), \ #expected, \ #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uint_fast64(expected, actual)); \ } while (0) /** * cut_assert_equal_uintptr: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uintptr(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uintptr_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uintptr(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uintptr: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uintptr(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uintptr_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uintptr(expected, actual)); \ } while (0) /** * cut_assert_equal_uintmax: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_equal_uintmax(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_uintmax_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_uintmax(expected, actual)); \ } while (0) /** * cut_assert_not_equal_uintmax: * @expected: an expected unsigned integer value. * @actual: an actual unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * This function is available only when * CUT_SUPPORT_C99_STDINT_TYPES is defined. * * Since: 1.1.0 */ #define cut_assert_not_equal_uintmax(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_uintmax_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_uintmax(expected, actual)); \ } while (0) #endif /** * cut_assert_equal_size: * @expected: an expected size_t value. * @actual: an actual size_t value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.6 */ #define cut_assert_equal_size(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_size_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_size(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_equal_size: * @expected: an expected size_t value. * @actual: an actual size_t value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * Since: 1.0.7 */ #define cut_assert_not_equal_size(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_size_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_size(expected, actual)); \ } while (0) /** * cut_assert_equal_double: * @expected: an expected float value. * @error: a float value that specifies error range. * @actual: an actual float value. * @...: optional message. See cut_message() for details. * * Passes if (@expected - @error) <= @actual <= (@expected + @error). */ #define cut_assert_equal_double(expected, error, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_double_helper((expected), (error), \ (actual), \ #expected, #error, #actual), \ __VA_ARGS__), \ cut_assert_equal_double(expected, error, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_equal_double: * @expected: an expected float value. * @error: a float value that specifies error range. * @actual: an actual float value. * @...: optional message. See cut_message() for details. * * Passes if @actual < (@expected - @error) && (@expected + @error) < @actual. * * Since: 1.0.7 */ #define cut_assert_not_equal_double(expected, error, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_double_helper( \ (expected), (error), (actual), \ #expected, #error, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_double(expected, error, actual)); \ } while (0) /** * cut_assert_equal_char: * @expected: an expected char value. * @actual: an actual char value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * e.g.: * |[ * cut_assert_equal_char('a', 'a'); -> Pass * cut_assert_equal_char('a', 'b'); -> Fail * ]| * * Since: 1.1.3 */ #define cut_assert_equal_char(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_char_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_char(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_equal_char: * @expected: an expected char value. * @actual: an actual char value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * e.g.: * |[ * cut_assert_not_equal_char('a', 'b'); -> Pass * cut_assert_not_equal_char('a', 'a'); -> Fail * ]| * * Since: 1.1.3 */ #define cut_assert_not_equal_char(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_char_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_char(expected, actual)); \ } while (0) /** * cut_assert_equal_string: * @expected: an expected string value. * @actual: an actual string value. * @...: optional message. See cut_message() for details. * * Passes if both @expected and @actual are %NULL or * strcmp(@expected, @actual) == 0. * * e.g.: * |[ * cut_assert_equal_string("abc", "abc"); -> Pass * cut_assert_equal_string(NULL, NULL); -> Pass * cut_assert_equal_string("abc", "ABC"); -> Fail * cut_assert_equal_string("abc", NULL); -> Fail * cut_assert_equal_string(NULL, "abc"); -> Fail * ]| */ #define cut_assert_equal_string(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_string_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_string(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_equal_string: * @expected: an expected string value. * @actual: an actual string value. * @...: optional message. See cut_message() for details. * * Passes if one of @expected and @actual is %NULL or * strcmp(@expected, @actual) != 0. * * e.g.: * |[ * cut_assert_not_equal_string("abc", NULL); -> Pass * cut_assert_not_equal_string(NULL, "abc"); -> Pass * cut_assert_not_equal_string("abc", "ABC"); -> Pass * cut_assert_not_equal_string("abc", "abc"); -> Fail * cut_assert_not_equal_string(NULL, NULL); -> Fail * ]| * * Since: 1.0.7 */ #define cut_assert_not_equal_string(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_string_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_string(expected, actual)); \ } while (0) /** * cut_assert_equal_string_with_free: * @expected: an expected string value. * @actual: an actual string value that is freed. * @...: optional message. See cut_message() for details. * * Passes if both @expected and @actual are %NULL or * strcmp(@expected, @actual) == 0. * * See also cut_assert_equal_string() for examples. * * Since: 0.3 */ #define cut_assert_equal_string_with_free(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_string_helper(expected, \ cut_take_string(actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_string_with_free(expected, actual, \ __VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_equal_string_or_null: * @expected: an expected string value. * @actual: an actual string value. * @...: optional message. See cut_message() for details. * * Deprecated: 0.3: Use cut_assert_equal_string() instead. */ #define cut_assert_equal_string_or_null(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_string(expected, actual), \ __VA_ARGS__), \ cut_assert_equal_string_or_null(expected, actual, \ __VA_ARGS__)); \ } while (0) #endif /** * cut_assert_equal_substring: * @expected: an expected string value. * @actual: an actual string value. * @length: compared string length. * @...: optional message. See cut_message() for details. * * Passes if (1) both @expected and @actual are %NULL and * @length == 1 or (2) strncmp(@expected, @actual, @length) * == 0. * * e.g.: * |[ * cut_assert_equal_substring("abcdef", "abcDEF", 3); -> Pass * cut_assert_equal_substring(NULL, NULL, 0); -> Pass * cut_assert_equal_substring(NULL, NULL, 3); -> Fail * cut_assert_equal_substring("abc", "ABC", 3); -> Fail * cut_assert_equal_substring("abc", NULL, 3); -> Fail * cut_assert_equal_substring(NULL, "abc", 3); -> Fail * ]| * * Since: 1.0.7 */ #define cut_assert_equal_substring(expected, actual, length, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_substring_helper(expected, actual, length, \ #expected, #actual, \ #length), \ __VA_ARGS__), \ cut_assert_equal_substring(expected, actual, length)); \ } while (0) /** * cut_assert_not_equal_substring: * @expected: an expected string value. * @actual: an actual string value. * @length: compared string length. * @...: optional message. See cut_message() for details. * * Passes if (1) one of @expected and @actual is %NULL or * (2) strncmp(@expected, @actual, @length) != 0. * * e.g.: * |[ * cut_assert_not_equal_substring("abc", "ABC", 3); -> Pass * cut_assert_not_equal_substring("abc", NULL, 3); -> Pass * cut_assert_not_equal_substring(NULL, "abc", 3); -> Pass * cut_assert_not_equal_substring("abcdef", "abcDEF", 3); -> Fail * cut_assert_not_equal_substring(NULL, NULL, 0); -> Fail * cut_assert_not_equal_substring(NULL, NULL, 3); -> Fail * ]| * * Since: 1.0.7 */ #define cut_assert_not_equal_substring(expected, actual, length, \ ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_substring_helper(expected, actual, \ length, \ #expected, #actual, \ #length), \ __VA_ARGS__), \ cut_assert_not_equal_substring(expected, actual, length)); \ } while (0) /** * cut_assert_equal_memory: * @expected: an expected data. * @expected_size: a size of @expected. * @actual: an actual data. * @actual_size: a size of @actual. * @...: optional message. See cut_message() for details. * * Passes if @expected_size == @actual_size and * memcmp(@expected, @actual, @expected_size) == 0. */ #define cut_assert_equal_memory(expected, expected_size, \ actual, actual_size, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_memory_helper(expected, expected_size, \ actual, actual_size, \ #expected, #expected_size, \ #actual, #actual_size), \ __VA_ARGS__), \ cut_assert_equal_memory(expected, expected_size, \ actual, actual_size, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_equal_memory: * @expected: an expected data. * @expected_size: a size of @expected. * @actual: an actual data. * @actual_size: a size of @actual. * @...: optional message. See cut_message() for details. * * Passes if @expected_size != @actual_size or * memcmp(@expected, @actual, @expected_size) != 0. * * Since: 1.0.7 */ #define cut_assert_not_equal_memory(expected, expected_size, \ actual, actual_size, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_memory_helper(expected, expected_size, \ actual, actual_size, \ #expected, \ #expected_size, \ #actual, \ #actual_size), \ __VA_ARGS__), \ cut_assert_not_equal_memory(expected, expected_size, \ actual, actual_size)); \ } while (0) /** * cut_assert_equal_string_array: * @expected: an expected %NULL-terminated array of strings. * @actual: an actual %NULL-terminated array of strings. * @...: optional message. See cut_message() for details. * * Passes if both @expected and @actual are not %NULL and * have same content (strcmp() == 0) strings. */ #define cut_assert_equal_string_array(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_string_array_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_string_array(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_equal_string_array_with_free: * @expected: an expected %NULL-terminated array of strings. * @actual: an actual %NULL-terminated array of strings that are freed. * @...: optional message. See cut_message() for details. * * Passes if both @expected and @actual are not %NULL and * have same content (strcmp() == 0) strings. * * Since: 0.9 */ #define cut_assert_equal_string_array_with_free(expected, actual, \ ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_string_array_helper( \ expected, (char **)cut_take_string_array(actual), \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_string_array_with_free(expected, actual, \ __VA_ARGS__)); \ } while (0) /** * cut_assert_operator: * @lhs: a left hand side value. * @operator: a binary operator. * @rhs: a right hand side value. * @...: optional message. See cut_message() for details. * * Passes if (@lhs @operator @rhs) is TRUE. * * e.g.: * |[ * cut_assert_operator(1, <, 2) -> (1 < 2); * ]| */ #define cut_assert_operator(lhs, operator, rhs, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_operator_helper(((lhs) operator (rhs)), \ #lhs, #operator, #rhs), \ __VA_ARGS__), \ cut_assert_operator(lhs, operator, rhs, __VA_ARGS__)); \ } while (0) /** * cut_assert_operator_int: * @lhs: a left hand side integer value. * @operator: a binary operator. * @rhs: a right hand side integer value. * @...: optional message. See cut_message() for details. * * Passes if (@lhs @operator @rhs) is TRUE. * * e.g.: * |[ * cut_assert_operator_int(1, <, 2) -> (1 < 2); * ]| */ #define cut_assert_operator_int(lhs, operator, rhs, ...) do \ { \ long _lhs = (lhs); \ long _rhs = (rhs); \ \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_operator_int_helper((_lhs operator _rhs), \ _lhs, _rhs, \ #lhs, #operator, #rhs), \ __VA_ARGS__), \ cut_assert_operator_int(lhs, operator, rhs, __VA_ARGS__)); \ } while(0) /** * cut_assert_operator_uint: * @lhs: a left hand side unsigned integer value. * @operator: a binary operator. * @rhs: a right hand side unsigned integer value. * @...: optional message. See cut_message() for details. * * Passes if (@lhs @operator @rhs) is TRUE. * * e.g.: * |[ * cut_assert_operator_uint(1, <, 2) -> (1 < 2); * ]| * * Since: 1.0.5 */ #define cut_assert_operator_uint(lhs, operator, rhs, ...) do \ { \ unsigned long _lhs = (lhs); \ unsigned long _rhs = (rhs); \ \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_operator_uint_helper((_lhs operator _rhs), \ _lhs, _rhs, \ #lhs, #operator, #rhs), \ __VA_ARGS__), \ cut_assert_operator_uint(lhs, operator, rhs, __VA_ARGS__)); \ } while(0) /** * cut_assert_operator_size: * @lhs: a left hand side size_t value. * @operator: a binary operator. * @rhs: a right hand side size_t value. * @...: optional message. See cut_message() for details. * * Passes if (@lhs @operator @rhs) is TRUE. * * e.g.: * |[ * cut_assert_operator_size(1, <, 2) -> (1 < 2); * ]| * * Since: 1.0.5 */ #define cut_assert_operator_size(lhs, operator, rhs, ...) do \ { \ size_t _lhs = (lhs); \ size_t _rhs = (rhs); \ \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_operator_size_helper((_lhs operator _rhs), \ _lhs, _rhs, \ #lhs, #operator, #rhs), \ __VA_ARGS__), \ cut_assert_operator_size(lhs, operator, rhs, __VA_ARGS__)); \ } while(0) /** * cut_assert_operator_double: * @lhs: a left hand side double value. * @operator: a binary operator. * @rhs: a right hand side double value. * @...: optional message. See cut_message() for details. * * Passes if (@lhs @operator @rhs) is TRUE. * * e.g.: * |[ * cut_assert_operator_double(1.1, <, 2.2) -> (1.1 < 2.2); * ]| * * Since: 1.0.5 */ #define cut_assert_operator_double(lhs, operator, rhs, ...) do \ { \ double _lhs = (lhs); \ double _rhs = (rhs); \ \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_operator_double_helper((_lhs operator _rhs), \ _lhs, _rhs, \ #lhs, #operator, #rhs), \ __VA_ARGS__), \ cut_assert_operator_double(lhs, operator, rhs, __VA_ARGS__)); \ } while(0) /** * cut_assert_equal: * @function: a function that compares @actual with @expected. * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @function(@expected, @actual) returns %CUT_TRUE. * * e.g.: * |[ * cut_assert_equal(!strcmp, "abc", "abc"); -> Pass * ]| */ #define cut_assert_equal(function, expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_helper(function(expected, actual), \ #function, #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal(function, expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_errno: * @...: optional message. See cut_message() for details. * * Passes if errno is 0. * * e.g.: * |[ * count = write(stdout, buffer, strlen(buffer)); * cut_assert_errno("Failed to write"); -> Pass when count != -1 * ]| * * Since: 0.8 */ #define cut_assert_errno(...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_errno_helper(), \ __VA_ARGS__), \ cut_assert_errno(__VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_file_exist: * @path: the path to test. * @...: optional message. See cut_message() for details. * * Passes if @path exists. It may or may not be a regular file. * * e.g.: * |[ * cut_assert_file_exist("/tmp"); -> Pass on many environment * cut_assert_file_exist("/non-existent"); -> Fail * ]| * * Since: 0.9 * Deprecated: 1.0.2: Use cut_assert_path_exist() instead. */ #define cut_assert_file_exist(path, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_exist_path(path), \ __VA_ARGS__), \ cut_assert_file_exist(path, __VA_ARGS__)); \ } while (0) /** * cut_assert_path_exist: * @path: the path to test. * @...: optional message. See cut_message() for details. * * Passes if @path exists. It may or may not be a regular file. * * e.g.: * |[ * cut_assert_path_exist("/tmp"); -> Pass on many environment * cut_assert_path_exist("/non-existent"); -> Fail * ]| * * Since: 1.0.2 * Deprecated: 1.1.5: Use cut_assert_exist_path() instead. */ #define cut_assert_path_exist(path, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_exist_path_helper(path, #path), \ __VA_ARGS__), \ cut_assert_path_exist(path, __VA_ARGS__)); \ } while (0) #endif /** * cut_assert_exist_path: * @path: the path to test. * @...: optional message. See cut_message() for details. * * Passes if @path exists. It may or may not be a regular file. * * e.g.: * |[ * cut_assert_exist_path("/tmp"); -> Pass on many environment * cut_assert_exist_path("/non-existent"); -> Fail * ]| * * Since: 1.1.5 */ #define cut_assert_exist_path(path, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_exist_path_helper(path, #path), \ __VA_ARGS__), \ cut_assert_exist_path(path, __VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_path_not_exist: * @path: the path to test. * @...: optional message. See cut_message() for details. * * Passes if @path doesn't exist. * * e.g.: * |[ * cut_assert_path_not_exist("/non-existent"); -> Pass on many environment * cut_assert_path_not_exist("/tmp"); -> Fail * ]| * * Since: 1.0.2 * Deprecated: 1.1.5: Use cut_assert_not_exist_path() instead. */ #define cut_assert_path_not_exist(path, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_exist_path_helper(path, #path), \ __VA_ARGS__), \ cut_assert_path_not_exist(path, __VA_ARGS__)); \ } while (0) #endif /** * cut_assert_not_exist_path: * @path: the path to test. * @...: optional message. See cut_message() for details. * * Passes if @path doesn't exist. * * e.g.: * |[ * cut_assert_not_exist_path("/non-existent"); -> Pass on many environment * cut_assert_not_exist_path("/tmp"); -> Fail * ]| * * Since: 1.1.5 */ #define cut_assert_not_exist_path(path, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_exist_path_helper(path, #path), \ __VA_ARGS__), \ cut_assert_not_exist_path(path, __VA_ARGS__)); \ } while (0) /** * cut_assert_match: * @pattern: the regular expression pattern. * @actual: the string to be matched. * @...: optional message. See cut_message() for details. * * Passes if @pattern matches @string. * * e.g.: * |[ * cut_assert_match("^abc", "abc"); -> Pass * cut_assert_match("^abc", " abc"); -> Fail * ]| * * Since: 1.0 */ #define cut_assert_match(pattern, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_match_helper(pattern, actual, #pattern, #actual),\ __VA_ARGS__), \ cut_assert_match(path, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_match_with_free: * @pattern: the regular expression as string. * @actual: the string to be matched that is freed. * @...: optional message. See cut_message() for details. * * Passes if @pattern matches @string. See cut_assert_match() * for detail. * * Since: 1.0 */ #define cut_assert_match_with_free(pattern, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_match_helper(pattern, cut_take_string(actual), \ #pattern, #actual), \ __VA_ARGS__), \ cut_assert_match_with_free(pattern, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_equal_pointer: * @expected: an expected pointer. * @actual: an actual pointer. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0 */ #define cut_assert_equal_pointer(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_pointer_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_pointer(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_equal_fixture_data_string: * @expected: an expected string. * @path: a first element of the path to the fixture data. * @...: remaining elements in path. %NULL terminated. * * Passes if @expected == cut_get_fixture_data_string(@path, ...). * * Since: 1.0.2 */ #define cut_assert_equal_fixture_data_string(expected, path, ...) \ cut_trace_with_info_expression( \ cut_assert_equal_fixture_data_string_helper(expected, \ #expected, \ path, __VA_ARGS__), \ cut_assert_equal_fixture_data_string(expected, path, \ __VA_ARGS__)) /** * cut_assert_equal_sockaddr: * @expected: an expected socket address. * @actual: an actual socket address. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * This assertion can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT. * * Since: 1.1.1 */ #ifdef CUT_DISABLE_SOCKET_SUPPORT #define cut_assert_equal_sockaddr(expected, actual, ...) \ cut_notify("don't define CUT_DISABLE_SOCKET_SUPPORT " \ "to use cut_assert_equal_sockaddr().") #else #define cut_assert_equal_sockaddr(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_sockaddr_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_sockaddr(expected, actual, __VA_ARGS__)); \ } while (0) #endif /** * cut_assert_equal_file_raw: * @expected: a path. * @actual: a path. * @...: optional message. See cut_message() for details. * * Passes if the content of @expected == the content of @actual. * * Since: 1.1.4 */ #define cut_assert_equal_file_raw(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_equal_file_raw_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_file_raw(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_assert_not_equal_file_raw: * @expected: a path. * @actual: a path. * @...: optional message. See cut_message() for details. * * Passes if the content of @expected != the content of @actual. * * Since: 1.1.4 */ #define cut_assert_not_equal_file_raw(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut_assert_not_equal_file_raw_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_not_equal_file_raw(expected, actual, __VA_ARGS__)); \ } while (0) /** * cut_error: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Raises an error with message. */ #define cut_error(...) do \ { \ cut_trace_with_info_expression( \ cut_test_terminate(ERROR, NULL, cut_message(__VA_ARGS__)), \ cut_error(__VA_ARGS__)); \ } while (0) /** * cut_error_errno: * @...: optional message. See cut_message() for details. * * e.g.: * |[ * void * setup (void) * { * mkdir("tmp", 0700); * cut_error_errno("Failed to make tmp directory"); * -> Error when tmp directory isn't made successfully. * } * ]| * * Since: 1.0.2 */ #define cut_error_errno(...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message(cut_error_errno_helper(), \ __VA_ARGS__), \ cut_error_errno(__VA_ARGS__)); \ } while (0) /** * cut_fail: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Raises a failure with message. */ #define cut_fail(...) do \ { \ cut_trace_with_info_expression( \ cut_test_terminate(FAILURE, NULL, cut_message(__VA_ARGS__)), \ cut_fail(__VA_ARGS__)); \ } while (0) /** * cut_pend: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Marks the test is pending with message. The test is * stopped. */ #define cut_pend(...) do \ { \ cut_trace_with_info_expression( \ cut_test_terminate(PENDING, NULL, cut_message(__VA_ARGS__)), \ cut_pend(__VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_pending: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Marks the test is pending with message. The test is * stopped. * * Deprecated: 0.4: Use cut_pend() instead. */ #define cut_pending(...) do \ { \ cut_trace_with_info_expression( \ cut_test_terminate(PENDING, NULL, cut_message(__VA_ARGS__)), \ cut_pend(__VA_ARGS__)); \ } while (0) #endif /** * cut_notify: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Leaves a notification message. The test is continued. */ #define cut_notify(...) do \ { \ cut_trace_with_info_expression( \ cut_test_register_result(NOTIFICATION, NULL, \ cut_message(__VA_ARGS__)), \ cut_notify(__VA_ARGS__)); \ } while (0) /** * cut_omit: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Omit the test. * * e.g.: * |[ * if (version < 2.0) * cut_omit("Require >= 2.0"); * ]| * * Since: 0.8 */ #define cut_omit(...) do \ { \ cut_trace_with_info_expression( \ cut_test_terminate(OMISSION, NULL, cut_message(__VA_ARGS__)), \ cut_omit(__VA_ARGS__)); \ } while (0) /** * cut_return: * * Finish the test. * * e.g.: * |[ * static void * sub_xxx (void) * { * some_assertions(); * if (no_need_more_test) * cut_return(); * some_assertions(); * } * * void * test_xxx (void) * { * some_assertions(); * cut_trace(sub_xxx()); * some_assertions(); * } * ]| * * Since: 1.0.6 */ #define cut_return() \ cut_test_context_long_jump(cut_get_current_test_context()) #ifdef __cplusplus } #endif #endif /* __CUT_ASSERTIONS_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-contractor.h0000644000175000017500000000454611205747026021315 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_CONTRACTOR_H__ #define __CUT_CONTRACTOR_H__ #include G_BEGIN_DECLS #define CUT_TYPE_CONTRACTOR (cut_contractor_get_type ()) #define CUT_CONTRACTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_CONTRACTOR, CutContractor)) #define CUT_CONTRACTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_CONTRACTOR, CutContractorClass)) #define CUT_IS_CONTRACTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_CONTRACTOR)) #define CUT_IS_CONTRACTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_CONTRACTOR)) #define CUT_CONTRACTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_CONTRACTOR, CutContractorClass)) typedef struct _CutContractor CutContractor; typedef struct _CutContractorClass CutContractorClass; struct _CutContractor { GObject object; }; struct _CutContractorClass { GObjectClass parent_class; }; GType cut_contractor_get_type (void) G_GNUC_CONST; CutContractor *cut_contractor_new (void); GList *cut_contractor_build_factories (CutContractor *contractor); GList *cut_contractor_build_all_factories(CutContractor *contractor); gboolean cut_contractor_has_builder (CutContractor *contractor, const gchar *type_name); void cut_contractor_set_option_context (CutContractor *contractor, GOptionContext *context); G_END_DECLS #endif /* __CUT_CONTRACTOR_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-utils.h0000644000175000017500000003046111523751075021251 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_UTILS_H__ #define __CUT_TEST_UTILS_H__ #ifdef __cplusplus extern "C" { #endif #include /** * SECTION: cut-test-utils * @title: Test Utilities * @short_description: Utilities to write tests more easily. * * To write tests, you need to write codes that * set up/tear down test environment, prepare expected and * actual values and so on. Cutter provides test utilities * to you write your tests more easily. * * The utilities work without GLib support. */ /** * cut_take: * @object: the object to be owned by Cutter. * @destroy_function: the destroy function for the object. * * Passes ownership of @object to Cutter and returns @object * itself. @object is destroyed by @destroy_func. * * Returns: @object owned by Cutter. Don't free it. * * Since: 1.0.5 */ #define cut_take(object, destroy_function) \ cut_test_context_take(cut_get_current_test_context(), \ (object), destroy_function) /** * cut_take_memory: * @memory: the memory to be owned by Cutter. * * Passes ownership of @memory to Cutter and returns @memory * itself. @memory is destroyed by free(). * * Returns: @memory owned by Cutter. Don't free it. * * Since: 1.0.5 */ #define cut_take_memory(memory) \ cut_test_context_take_memory(cut_get_current_test_context(), \ (memory)) /** * cut_take_string: * @string: the string to be owned by Cutter. * * Passes ownership of @string to Cutter and returns @string * itself. * * Returns: @string owned by Cutter. Don't free it. */ #define cut_take_string(string) \ cut_test_context_take_string(cut_get_current_test_context(), \ (string)) /** * cut_take_strdup: * @string: the string to be duplicated. * * Duplicates @string, passes ownership of the duplicated * string to Cutter and returns the duplicated string. * * Returns: a duplicated string owned by Cutter. Don't free it. * * Since: 1.0.5 */ #define cut_take_strdup(string) \ cut_test_context_take_strdup(cut_get_current_test_context(), \ (string)) /** * cut_take_strndup: * @string: the string to be duplicated. * @size: the number of bytes to duplicate. * * Duplicates the first @size bytes of @string, passes * ownership of the duplicated string to Cutter and returns * the duplicated string. The duplicated string is always * %NULL-terminated. * * Returns: a duplicated string owned by Cutter. Don't free it. * * Since: 1.0.5 */ #define cut_take_strndup(string, size) \ cut_test_context_take_strndup(cut_get_current_test_context(), \ (string), (size)) /** * cut_take_memdup: * @memory: the memory to be duplicated. * @size: the number of bytes to duplicate. * * Duplicates @size bytes of @memory, passes ownership of * the duplicated memory to Cutter and returns the * duplicated memory. * * Returns: a duplicated memory owned by Cutter. Don't free it. * * Since: 1.0.5 */ #define cut_take_memdup(memory, size) \ cut_test_context_take_memdup(cut_get_current_test_context(), \ (memory), (size)) /** * cut_take_printf: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Formats a string like printf() but the formatted string * is owned by Cutter. * * Returns: a formatted string owned by Cutter. Don't free it. */ #define cut_take_printf(...) \ cut_test_context_take_printf(cut_get_current_test_context(), \ __VA_ARGS__) /** * cut_take_string_array: * @strings: the array of strings to be owned by Cutter. * * Passes ownership of the array of strings to Cutter and * returns @strings itself. * * Returns: @strings owned by Cutter. Don't free it. */ #define cut_take_string_array(strings) \ cut_test_context_take_string_array(cut_get_current_test_context(), \ (strings)) /** * cut_take_diff: * @from: the original string. * @to: the modified string. * * Computes diff between @from and @to that is owned by Cutter. * * Returns: a diff between @from and @to owned by Cutter. Don't free it. */ #define cut_take_diff(from, to) \ cut_take_string(cut_diff_readable(from, to)) /** * cut_take_replace: * @target: the replace target string. * @pattern: the regular expression pattern as string. * @replacement: text to replace each match with * * Replaces all occurrences of the @pattern with the * @replacement in the @target string. * * Returns: a replaced string owned by Cutter. Don't free it. * * Since: 1.0.6 */ #define cut_take_replace(target, pattern, replacement) \ cut_take_replace_helper( \ target, pattern, replacement, \ (cut_push_backtrace(cut_take_replace(target, \ pattern, \ replacement)), \ cut_pop_backtrace)) /** * cut_take_convert: * @string: the convert target string. It should be %NULL-terminated. * @to_code_set: the code set name which to convert @string. * @from_code_set: the code set name of @string. * * Converts @string code set to @to_code_set from * @from_code_set. * * Returns: a converted string owned by Cutter. Don't free it. * * Since: 1.1.3 */ #define cut_take_convert(string, to_code_set, from_code_set) \ cut_take_convert_helper( \ string, to_code_set, from_code_set, \ (cut_push_backtrace(cut_take_convert(string, \ to_code_set, \ from_code_set)), \ cut_pop_backtrace)) /** * cut_take_inspect_string: * @string: the inspect target string. It should be %NULL or * %NULL-terminated. * * Inspects @string. * * Returns: a inspected string owned by Cutter. Don't free it. * * Since: 1.1.4 */ #define cut_take_inspect_string(string) \ cut_take_string(cut_utils_inspect_string(string)) /** * cut_set_fixture_data_dir: * @path: a first element of the path to the fixture data directory. * @...: remaining elements in path. * %NULL-terminate is required since 1.0.7. * * Set fixture data directory that is used by * cut_get_fixture_data_string() and so on. * * Since: 1.0.2 */ #define cut_set_fixture_data_dir(...) \ cut_test_context_set_fixture_data_dir( \ cut_get_current_test_context(), __VA_ARGS__) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_build_fixture_data_path: * @path: a first element of the path to the fixture data. * @...: remaining elements in path. * %NULL-terminate is required since 1.0.7. * * Builds a path to the fixture data. If @path is relative * path, the path is handled as a relative path from a * directory that is specified by cut_set_fixture_data_dir() * or the current directory. * * Returns: a path to the fixture data. It should be freed * when no longer needed. * * Since: 1.0.2 * * Deprecated: 1.1.6: Use cut_build_fixture_path() instead. */ #define cut_build_fixture_data_path(...) \ strdup(cut_test_context_build_fixture_path( \ cut_get_current_test_context(), __VA_ARGS__)) #endif /** * cut_build_fixture_path: * @path: a first element of the path to the fixture data. * @...: remaining elements in path. * %NULL-terminate is required. * * Builds a path to the fixture data. If @path is relative * path, the path is handled as a relative path from a * directory that is specified by cut_set_fixture_data_dir() * or the current directory. * * Returns: a path to the fixture data. It is owned by * Cutter. Don't free it. * * Since: 1.1.6 */ #define cut_build_fixture_path(...) \ cut_test_context_build_fixture_path( \ cut_get_current_test_context(), __VA_ARGS__) /** * cut_get_fixture_data_string: * @path: a first element of the path to the fixture data. * @...: remaining elements in path. * %NULL-terminate is required since 1.0.7. * * Reads the fixture data at "@path/..." and returns it as a * string that is owned by Cutter. The description of * cut_build_fixture_path() shows how the fixture data path * is determined. * * Returns: a content of the fixture data as string owend by * Cutter. Don't free it. * * Since: 1.0.2 */ #define cut_get_fixture_data_string(...) \ cut_utils_get_fixture_data(cut_get_current_test_context(), \ NULL, NULL, __VA_ARGS__) /** * cut_get_fixture_data: * @size: return location for a size of the fixture data, or %NULL. * @path: a first element of the path to the fixture data. * @...: remaining elements in path. * %NULL-terminate is required. * * Reads the fixture data at "@path/..." and returns it as a * string that is owned by Cutter. The description of * cut_build_fixture_path() shows how the fixture data path * is determined. * * Returns: a content of the fixture data as string owend by * Cutter. Don't free it. * * Since: 1.1.6 */ #define cut_get_fixture_data(size, ...) \ cut_utils_get_fixture_data(cut_get_current_test_context(), \ NULL, size, __VA_ARGS__) /** * cut_remove_path: * @path: a first element of the path to be removed. * @...: remaining elements in path. * %NULL-terminate is required since 1.0.7. * * Removes @path and it's children recursively. It doesn't * report any errors. * * Since: 1.0.2 */ #define cut_remove_path(...) \ cut_utils_remove_path_recursive_force(cut_build_path(__VA_ARGS__)) /** * cut_build_path: * @path: a first element of the path. * @...: remaining elements in path. %NULL terminated. * * Builds path from @path and the following elements. * * Returns: built path owned by Cutter. Don't free it. * * Since: 1.0.7 */ #define cut_build_path(...) \ cut_take_string(cut_utils_build_path(__VA_ARGS__)) /** * cut_build_path_array: * @paths: %NULL-terminated array of strings containing the path elements. * * Builds path from @paths. * * Returns: built path owned by Cutter. Don't free it. * * Since: 1.1.5 */ #define cut_build_path_array(paths) \ cut_take_string(cut_utils_build_path_array(paths)) /** * cut_make_directory: * @path: a first element of the path to be made. * @...: remaining elements in path. %NULL terminated. * * Makes @path and it's parents recursively. It doesn't * report any errors. * * Since: 1.1.1 */ #define cut_make_directory(...) \ cut_utils_make_directory_recursive_force(cut_build_path(__VA_ARGS__)) #ifdef __cplusplus } #endif #endif /* __CUT_TEST_UTILS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-main.c0000644000175000017500000003665011407320456020055 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #ifdef HAVE_LIBBFD # include #endif #ifdef NEED_ENVIRON_DECLARATION char **environ = NULL; #endif #include "cut-main.h" #include "cut-listener.h" #include "cut-analyzer.h" #include "cut-test-runner.h" #include "cut-test-suite.h" #include "cut-ui.h" #include "cut-module-factory.h" #include "cut-contractor.h" #include "cut-utils.h" #include "../gcutter/gcut-main.h" #include "../gcutter/gcut-error.h" #ifdef G_OS_WIN32 # include #endif typedef enum { MODE_TEST, MODE_ANALYZE } RunMode; static gboolean environment_initialized = FALSE; static gboolean initialized = FALSE; static RunMode mode = MODE_TEST; static gchar *test_directory = NULL; static gchar *log_directory = NULL; static gchar *source_directory = NULL; static gchar **test_case_names = NULL; static gchar **test_names = NULL; static gchar **exclude_files = NULL; static gchar **exclude_directories = NULL; static CutOrder test_case_order = CUT_ORDER_NONE_SPECIFIED; static gboolean use_multi_thread = FALSE; static gint max_threads = 10; static gboolean disable_signal_handling = FALSE; static GList *factories = NULL; static CutContractor *contractor = NULL; static gchar **original_argv = NULL; static gchar *cutter_command_path = NULL; static gboolean fatal_failures = FALSE; static gboolean keep_opening_modules = FALSE; static gboolean enable_convenience_attribute_definition = FALSE; static gboolean stop_before_test = FALSE; static gboolean print_version (const gchar *option_name, const gchar *value, gpointer data, GError **error) { g_print("%s\n", VERSION); exit(EXIT_SUCCESS); return TRUE; } static gboolean parse_mode (const gchar *option_name, const gchar *value, gpointer data, GError **error) { if (g_utf8_collate(value, "test") == 0) { mode = MODE_TEST; } else if (g_utf8_collate(value, "analyze") == 0) { mode = MODE_ANALYZE; } else { g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, _("Invalid run mode: %s"), value); return FALSE; } return TRUE; } static gboolean parse_test_case_order (const gchar *option_name, const gchar *value, gpointer data, GError **error) { if (g_utf8_collate(value, "none") == 0) { test_case_order = CUT_ORDER_NONE_SPECIFIED; } else if (g_utf8_collate(value, "name") == 0) { test_case_order = CUT_ORDER_NAME_ASCENDING; } else if (g_utf8_collate(value, "name-desc") == 0) { test_case_order = CUT_ORDER_NAME_DESCENDING; } else { g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, _("Invalid test case order value: %s"), value); return FALSE; } return TRUE; } static const GOptionEntry option_entries[] = { {"version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, print_version, N_("Show version"), NULL}, {"mode", 0, 0, G_OPTION_ARG_CALLBACK, parse_mode, N_("Set run mode (default: test)"), "[test|analyze]"}, {"source-directory", 's', 0, G_OPTION_ARG_STRING, &source_directory, N_("Set directory of source code"), "DIRECTORY"}, {"name", 'n', 0, G_OPTION_ARG_STRING_ARRAY, &test_names, N_("Specify tests"), "TEST_NAME"}, {"test-case", 't', 0, G_OPTION_ARG_STRING_ARRAY, &test_case_names, N_("Specify test cases"), "TEST_CASE_NAME"}, {"multi-thread", 'm', 0, G_OPTION_ARG_NONE, &use_multi_thread, N_("Run test cases and iterated tests with multi-thread"), NULL}, {"max-threads", 0, 0, G_OPTION_ARG_INT, &max_threads, N_("Run test cases and iterated tests with MAX_THREADS threads " "concurrently at a maximum " "(default: 10; -1 is no limit)"), "MAX_THREADS"}, {"disable-signal-handling", 0, 0, G_OPTION_ARG_NONE, &disable_signal_handling, N_("Disable signal handling"), NULL}, {"test-case-order", 0, 0, G_OPTION_ARG_CALLBACK, parse_test_case_order, N_("Sort test case by. Default is 'none'."), "[none|name|name-desc]"}, {"exclude-file", 0, 0, G_OPTION_ARG_STRING_ARRAY, &exclude_files, N_("Skip files"), "FILE"}, {"exclude-directory", 0, 0, G_OPTION_ARG_STRING_ARRAY, &exclude_directories, N_("Skip directories"), "DIRECTORY"}, {"fatal-failures", 0, 0, G_OPTION_ARG_NONE, &fatal_failures, N_("Treat failures as fatal problem"), NULL}, {"keep-opening-modules", 0, 0, G_OPTION_ARG_NONE, &keep_opening_modules, N_("Keep opening loaded modules to resolve symbols for debugging"), NULL}, {"enable-convenience-attribute-definition", 0, 0, G_OPTION_ARG_NONE, &enable_convenience_attribute_definition, N_("Enable convenience but danger " "'#{ATTRIBUTE_NAME}_#{TEST_NAME - 'test_' PREFIX}' " "attribute set function"), NULL}, {"stop-before-test", 0, 0, G_OPTION_ARG_NONE, &stop_before_test, N_("Set breakpoints at each line which invokes test. " "You can step into a test function with your debugger easily."), NULL}, {NULL} }; void cut_init_environment (int *argc, char ***argv) { if (environment_initialized) return; environment_initialized = TRUE; cut_set_cutter_command_path((*argv)[0]); setlocale(LC_ALL, ""); #ifdef G_OS_WIN32 { gchar *locale_dir; locale_dir = g_build_filename(cut_win32_base_path(), "share", "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, locale_dir); g_free(locale_dir); } #else bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); g_type_init(); if (!g_thread_supported()) g_thread_init(NULL); gcut_init(); } void cut_init (int *argc, char ***argv) { int i; GOptionContext *option_context; GOptionGroup *main_group; GError *error = NULL; gchar *program_name, *parameter_string; if (initialized) return; initialized = TRUE; original_argv = g_strdupv(*argv); cut_init_environment(argc, argv); cut_test_context_current_init(); program_name = g_path_get_basename((*argv)[0]); parameter_string = g_strdup_printf(N_("TEST_DIRECTORY\n" " %s --mode=analyze %s LOG_DIRECTORY"), program_name, _("[OPTION...]")); option_context = g_option_context_new(parameter_string); g_free(program_name); g_free(parameter_string); g_option_context_set_help_enabled(option_context, FALSE); g_option_context_set_ignore_unknown_options(option_context, TRUE); contractor = cut_contractor_new(); cut_contractor_set_option_context(contractor, option_context); main_group = g_option_group_new(NULL, NULL, NULL, option_context, NULL); g_option_group_add_entries(main_group, option_entries); g_option_group_set_translation_domain(main_group, GETTEXT_PACKAGE); g_option_context_set_main_group(option_context, main_group); if (!g_option_context_parse(option_context, argc, argv, &error)) { g_print("%s\n", error->message); g_error_free(error); g_option_context_free(option_context); exit(EXIT_FAILURE); } for (i = 1; i < *argc; i++) { if (g_str_has_prefix((*argv)[i], "--help-")) { factories = cut_contractor_build_all_factories(contractor); break; } } if (!factories) factories = cut_contractor_build_factories(contractor); g_option_context_set_help_enabled(option_context, TRUE); g_option_context_set_ignore_unknown_options(option_context, FALSE); if (!g_option_context_parse(option_context, argc, argv, &error)) { g_print("%s\n", error->message); g_error_free(error); g_option_context_free(option_context); exit(EXIT_FAILURE); } if (*argc == 1) { #if GLIB_CHECK_VERSION(2, 14, 0) gchar *help_string; help_string = g_option_context_get_help(option_context, TRUE, NULL); g_print("%s", help_string); g_free(help_string); g_option_context_free(option_context); #else gint help_argc = 2; gchar *help_argv[2]; gchar **help_argv_p; help_argv[0] = (*argv)[0]; help_argv[1] = "--help"; help_argv_p = help_argv; g_option_context_parse(option_context, &help_argc, &help_argv_p, NULL); g_option_context_free(option_context); #endif exit(EXIT_FAILURE); } if (mode == MODE_ANALYZE) log_directory = (*argv)[1]; else test_directory = (*argv)[1]; #ifdef HAVE_LIBBFD bfd_init(); #endif #ifdef G_OS_WIN32 { WSADATA wsa_data; WSAStartup(MAKEWORD(2, 2), &wsa_data); } #endif cut_ui_init(); g_option_context_free(option_context); /* to avoid CutTestContextClass initialization is done * in multi threads. */ g_type_class_unref(g_type_class_ref(CUT_TYPE_TEST_CONTEXT)); } void cut_quit_environment (void) { if (!environment_initialized) return; gcut_quit(); environment_initialized = FALSE; } void cut_quit (void) { if (!initialized) return; cut_ui_quit(); if (contractor) { g_object_unref(contractor); contractor = NULL; } if (original_argv) { g_strfreev(original_argv); original_argv = NULL; } if (cutter_command_path) { g_free(cutter_command_path); cutter_command_path = NULL; } cut_test_context_current_quit(); cut_quit_environment(); #ifdef G_OS_WIN32 WSACleanup(); #endif initialized = FALSE; } CutRunContext * cut_create_run_context (void) { CutRunContext *run_context; run_context = cut_test_runner_new(); cut_run_context_set_test_directory(run_context, test_directory); cut_run_context_set_log_directory(run_context, log_directory); if (source_directory) cut_run_context_set_source_directory(run_context, source_directory); cut_run_context_set_multi_thread(run_context, use_multi_thread); cut_run_context_set_max_threads(run_context, max_threads); cut_run_context_set_handle_signals(run_context, !disable_signal_handling); cut_run_context_set_exclude_files(run_context, (const gchar **)exclude_files); cut_run_context_set_exclude_directories(run_context, (const gchar **)exclude_directories); cut_run_context_set_target_test_case_names(run_context, (const gchar **)test_case_names); cut_run_context_set_target_test_names(run_context, (const gchar **)test_names); cut_run_context_set_test_case_order(run_context, test_case_order); cut_run_context_set_fatal_failures(run_context, fatal_failures); cut_run_context_set_keep_opening_modules(run_context, keep_opening_modules); cut_run_context_set_enable_convenience_attribute_definition(run_context, enable_convenience_attribute_definition); cut_run_context_set_stop_before_test(run_context, stop_before_test); cut_run_context_set_command_line_args(run_context, original_argv); return run_context; } static GList * create_listeners (void) { GList *listeners = NULL, *node; for (node = factories; node; node = g_list_next(node)) { GObject *listener; listener = cut_module_factory_create(CUT_MODULE_FACTORY(node->data)); listeners = g_list_prepend(listeners, listener); } return listeners; } static void add_listeners (CutRunContext *run_context, GList *listeners) { GList *node; for (node = listeners; node; node = g_list_next(node)) { CutListener *listener = CUT_LISTENER(node->data); cut_run_context_add_listener(run_context, listener); } } static void remove_listeners (CutRunContext *run_context, GList *listeners) { GList *node; for (node = listeners; node; node = g_list_next(node)) { CutListener *listener = CUT_LISTENER(node->data); cut_run_context_remove_listener(run_context, listener); g_object_unref(listener); } } static CutUI * get_cut_ui (GList *listeners) { GList *node; for (node = listeners; node; node = g_list_next(node)) { CutListener *listener = node->data; if (CUT_IS_UI(listener)) { return CUT_UI(listener); } } return NULL; } gboolean cut_start_run_context (CutRunContext *run_context) { gboolean success; GList *listeners; CutUI *ui; if (!initialized) { g_warning("not initialized"); return FALSE; } listeners = create_listeners(); add_listeners(run_context, listeners); if (mode == MODE_ANALYZE) ui = NULL; else ui = get_cut_ui(listeners); if (ui) success = cut_ui_run(ui, run_context); else success = cut_run_context_start(run_context); remove_listeners(run_context, listeners); g_list_free(listeners); return success; } gboolean cut_run (void) { CutRunContext *run_context; CutAnalyzer *analyzer; gboolean success = TRUE; if (mode == MODE_ANALYZE) { GError *error = NULL; analyzer = cut_analyzer_new(); success = cut_analyzer_analyze(analyzer, log_directory, &error); if (error) { cut_utils_report_error(error); } g_object_unref(analyzer); } else { run_context = cut_create_run_context(); success = cut_start_run_context(run_context); g_object_unref(run_context); } return success; } gboolean cut_run_iteration (void) { /* static GStaticRecMutex mutex = G_STATIC_REC_MUTEX_INIT; */ gboolean dispatched; /* should lock? */ /* g_static_rec_mutex_lock(&mutex); */ dispatched = g_main_context_iteration(NULL, FALSE); /* g_static_rec_mutex_unlock(&mutex); */ return dispatched; } const gchar * cut_get_cutter_command_path (void) { return cutter_command_path; } void cut_set_cutter_command_path (const gchar *argv0) { if (cutter_command_path) g_free(cutter_command_path); cutter_command_path = NULL; if (argv0 && g_path_is_absolute(argv0)) cutter_command_path = g_strdup(argv0); if (!cutter_command_path && argv0) cutter_command_path = g_find_program_in_path(argv0); if (!cutter_command_path) { gchar *current_dir; current_dir = g_get_current_dir(); cutter_command_path = g_build_filename(current_dir, argv0, NULL); g_free(current_dir); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-unified-differ.c0000644000175000017500000001637311424022512022000 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-unified-differ.h" #include "cut-string-diff-writer.h" #include "cut-utils.h" #define CUT_UNIFIED_DIFFER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_UNIFIED_DIFFER, CutUnifiedDifferPrivate)) typedef struct _CutUnifiedDifferPrivate CutUnifiedDifferPrivate; struct _CutUnifiedDifferPrivate { gchar *from_label; gchar *to_label; }; G_DEFINE_TYPE(CutUnifiedDiffer, cut_unified_differ, CUT_TYPE_DIFFER) static void dispose (GObject *object); static void diff (CutDiffer *differ, CutDiffWriter *writer); static void cut_unified_differ_class_init (CutUnifiedDifferClass *klass) { GObjectClass *gobject_class; CutDifferClass *differ_class; gobject_class = G_OBJECT_CLASS(klass); differ_class = CUT_DIFFER_CLASS(klass); gobject_class->dispose = dispose; differ_class->diff = diff; g_type_class_add_private(gobject_class, sizeof(CutUnifiedDifferPrivate)); } static void cut_unified_differ_init (CutUnifiedDiffer *differ) { CutUnifiedDifferPrivate *priv; priv = CUT_UNIFIED_DIFFER_GET_PRIVATE(differ); priv->from_label = NULL; priv->to_label = NULL; } static void dispose (GObject *object) { CutUnifiedDifferPrivate *priv; priv = CUT_UNIFIED_DIFFER_GET_PRIVATE(object); if (priv->from_label) { g_free(priv->from_label); priv->from_label = NULL; } if (priv->to_label) { g_free(priv->to_label); priv->to_label = NULL; } G_OBJECT_CLASS(cut_unified_differ_parent_class)->dispose(object); } CutDiffer * cut_unified_differ_new (const gchar *from, const gchar *to) { return g_object_new(CUT_TYPE_UNIFIED_DIFFER, "from", from, "to", to, NULL); } void cut_unified_differ_set_from_label (CutDiffer *differ, const gchar *label) { CutUnifiedDifferPrivate *priv; priv = CUT_UNIFIED_DIFFER_GET_PRIVATE(differ); g_free(priv->from_label); priv->from_label = g_strdup(label); } const gchar * cut_unified_differ_get_from_label (CutDiffer *differ) { return CUT_UNIFIED_DIFFER_GET_PRIVATE(differ)->from_label; } void cut_unified_differ_set_to_label (CutDiffer *differ, const gchar *label) { CutUnifiedDifferPrivate *priv; priv = CUT_UNIFIED_DIFFER_GET_PRIVATE(differ); g_free(priv->to_label); priv->to_label = g_strdup(label); } const gchar * cut_unified_differ_get_to_label (CutDiffer *differ) { return CUT_UNIFIED_DIFFER_GET_PRIVATE(differ)->to_label; } static void mark_equal (CutDiffWriter *writer, gchar **lines, gint begin, gint end) { cut_diff_writer_mark_lines(writer, " ", NULL, lines, begin, end, CUT_DIFF_WRITER_TAG_EQUAL_LINE); } static void mark_inserted (CutDiffWriter *writer, gchar **lines, gint begin, gint end) { cut_diff_writer_mark_lines(writer, "+", NULL, lines, begin, end, CUT_DIFF_WRITER_TAG_INSERTED_LINE); } static void mark_deleted (CutDiffWriter *writer, gchar **lines, gint begin, gint end) { cut_diff_writer_mark_lines(writer, "-", NULL, lines, begin, end, CUT_DIFF_WRITER_TAG_DELETED_LINE); } static void write_header (CutUnifiedDifferPrivate *priv, CutDiffWriter *writer) { const gchar *separator, *label; separator = NULL; label = ""; if (priv->from_label && priv->from_label[0]) { separator = " "; label = priv->from_label; } cut_diff_writer_mark_line(writer, "---", separator, label, CUT_DIFF_WRITER_TAG_DELETED_LINE); separator = NULL; label = ""; if (priv->to_label && priv->to_label[0]) { separator = " "; label = priv->to_label; } cut_diff_writer_mark_line(writer, "+++", separator, label, CUT_DIFF_WRITER_TAG_INSERTED_LINE); } static void diff (CutDiffer *differ, CutDiffWriter *writer) { CutUnifiedDifferPrivate *priv; CutSequenceMatcher *matcher; const GList *groups; gchar **from, **to; from = cut_differ_get_from(differ); to = cut_differ_get_to(differ); matcher = cut_differ_get_sequence_matcher(differ); groups = cut_sequence_matcher_get_grouped_operations(matcher); if (cut_differ_util_is_same_content(groups)) return; priv = CUT_UNIFIED_DIFFER_GET_PRIVATE(differ); write_header(priv, writer); for (; groups; groups = g_list_next(groups)) { const GList *operations = groups->data; cut_differ_write_summary(differ, writer, operations); for (; operations; operations = g_list_next(operations)) { CutSequenceMatchOperation *operation = operations->data; switch (operation->type) { case CUT_SEQUENCE_MATCH_OPERATION_EQUAL: mark_equal(writer, from, operation->from_begin, operation->from_end); break; case CUT_SEQUENCE_MATCH_OPERATION_INSERT: mark_inserted(writer, to, operation->to_begin, operation->to_end); break; case CUT_SEQUENCE_MATCH_OPERATION_DELETE: mark_deleted(writer, from, operation->from_begin, operation->from_end); break; case CUT_SEQUENCE_MATCH_OPERATION_REPLACE: mark_deleted(writer, from, operation->from_begin, operation->from_end); mark_inserted(writer, to, operation->to_begin, operation->to_end); break; default: g_error("unknown operation type: %d", operation->type); break; } } } cut_diff_writer_finish(writer); } gchar * cut_diff_unified (const gchar *from, const gchar *to, const gchar *from_label, const gchar *to_label) { CutDiffWriter *writer; CutDiffer *differ; gchar *diff; differ = cut_unified_differ_new(from, to); cut_unified_differ_set_from_label(differ, from_label); cut_unified_differ_set_to_label(differ, to_label); writer = cut_string_diff_writer_new(); cut_differ_diff(differ, writer); diff = g_strdup(cut_string_diff_writer_get_result(writer)); g_object_unref(writer); g_object_unref(differ); return diff; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-case.h0000644000175000017500000001221711205747026021021 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_CASE_H__ #define __CUT_TEST_CASE_H__ #include #include #include G_BEGIN_DECLS #define CUT_TYPE_TEST_CASE (cut_test_case_get_type ()) #define CUT_TEST_CASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST_CASE, CutTestCase)) #define CUT_TEST_CASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST_CASE, CutTestCaseClass)) #define CUT_IS_TEST_CASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST_CASE)) #define CUT_IS_TEST_CASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST_CASE)) #define CUT_TEST_CASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST_CASE, CutTestCaseClass)) typedef void (*CutStartupFunction) (void); typedef void (*CutShutdownFunction) (void); typedef struct _CutTestCaseClass CutTestCaseClass; struct _CutTestCase { CutTestContainer object; }; struct _CutTestCaseClass { CutTestContainerClass parent_class; void (*ready) (CutTestCase *test_case, guint n_tests); void (*start_test) (CutTestCase *test_case, CutTest *test, CutTestContext *test_context); void (*complete_test) (CutTestCase *test_case, CutTest *test, CutTestContext *test_context); void (*start_test_iterator) (CutTestCase *test_case, CutTestIterator *test_iterator, CutTestContext *test_context); void (*complete_test_iterator) (CutTestCase *test_case, CutTestIterator *test_iterator, CutTestContext *test_context, gboolean success); void (*failure_in) (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result); void (*error_in) (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result); void (*pending_in) (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result); void (*notification_in) (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result); void (*omission_in) (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result); void (*crash_in) (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result); }; GType cut_test_case_get_type (void) G_GNUC_CONST; CutTestCase *cut_test_case_new (const gchar *name, CutSetupFunction setup, CutTeardownFunction teardown, CutStartupFunction startup, CutShutdownFunction shutdown); CutTestCase *cut_test_case_new_empty (void); void cut_test_case_add_test (CutTestCase *test_case, CutTest *test); gboolean cut_test_case_run (CutTestCase *test_case, CutRunContext *run_context); gboolean cut_test_case_run_test (CutTestCase *test_case, CutRunContext *run_context, const gchar *name); gboolean cut_test_case_run_with_filter(CutTestCase *test_case, CutRunContext *run_context, const gchar **test_names); void cut_test_case_run_setup (CutTestCase *test_case, CutTestContext *test_context); void cut_test_case_run_teardown (CutTestCase *test_case, CutTestContext *test_context); G_END_DECLS #endif /* __CUT_TEST_CASE_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-stream-factory-builder.h0000644000175000017500000000425511205747026023520 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_STREAMER_FACTORY_BUILDER_H__ #define __CUT_STREAMER_FACTORY_BUILDER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_STREAM_FACTORY_BUILDER (cut_stream_factory_builder_get_type ()) #define CUT_STREAM_FACTORY_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_STREAM_FACTORY_BUILDER, CutStreamFactoryBuilder)) #define CUT_STREAM_FACTORY_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_STREAM_FACTORY_BUILDER, CutStreamFactoryBuilderClass)) #define CUT_IS_STREAM_FACTORY_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_STREAM_FACTORY_BUILDER)) #define CUT_IS_STREAM_FACTORY_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_STREAM_FACTORY_BUILDER)) #define CUT_STREAM_FACTORY_BUILDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_STREAM_FACTORY_BUILDER, CutStreamFactoryBuilderClass)) typedef struct _CutStreamFactoryBuilder CutStreamFactoryBuilder; typedef struct _CutStreamFactoryBuilderClass CutStreamFactoryBuilderClass; struct _CutStreamFactoryBuilder { CutFactoryBuilder object; }; struct _CutStreamFactoryBuilderClass { CutFactoryBuilderClass parent_class; }; GType cut_stream_factory_builder_get_type (void) G_GNUC_CONST; G_END_DECLS #endif /* __CUT_STREAM_FACTORY_BUILDER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-container.h0000644000175000017500000000501411205747026022065 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_CONTAINER_H__ #define __CUT_TEST_CONTAINER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_TEST_CONTAINER (cut_test_container_get_type ()) #define CUT_TEST_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST_CONTAINER, CutTestContainer)) #define CUT_TEST_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST_CONTAINER, CutTestContainerClass)) #define CUT_IS_TEST_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST_CONTAINER)) #define CUT_IS_TEST_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST_CONTAINER)) #define CUT_TEST_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST_CONTAINER, CutTestContainerClass)) typedef struct _CutTestContainer CutTestContainer; typedef struct _CutTestContainerClass CutTestContainerClass; struct _CutTestContainer { CutTest object; }; struct _CutTestContainerClass { CutTestClass parent_class; }; GType cut_test_container_get_type (void) G_GNUC_CONST; void cut_test_container_add_test (CutTestContainer *container, CutTest *test); GList *cut_test_container_get_children (CutTestContainer *container); GList *cut_test_container_filter_children (CutTestContainer *container, const gchar **filter); guint cut_test_container_get_n_tests (CutTestContainer *container, CutRunContext *run_context); G_END_DECLS #endif /* __CUT_TEST_CONTAINER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-macros.h0000644000175000017500000000333211355535202020410 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_MACROS_H__ #define __CUT_MACROS_H__ #ifdef __cplusplus extern "C" { #endif #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) # define CUT_GNUC_PRINTF(format_index, arg_index) \ __attribute__((__format__ (__printf__, format_index, arg_index))) # define CUT_GNUC_NORETURN \ __attribute__((__noreturn__)) #else # define CUT_GNUC_PRINTF(format_index, arg_index) # define CUT_GNUC_NORETURN #endif #if __GNUC__ >= 4 # define CUT_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) #else # define CUT_GNUC_NULL_TERMINATED #endif #ifdef __GNUC__ # define CUT_FUNCTION __PRETTY_FUNCTION__ #else # define CUT_FUNCTION __FUNCTION__ #endif #define CUT_STRINGIFY(macro_or_string) CUT_STRINGIFY_ARG(macro_or_string) #define CUT_STRINGIFY_ARG(contents) #contents #ifdef __cplusplus } #endif #endif /* __CUT_MACROS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-result.h0000644000175000017500000001602411273262222021417 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_RESULT_H__ #define __CUT_TEST_RESULT_H__ #include #include #include #include G_BEGIN_DECLS #define CUT_TYPE_TEST_RESULT (cut_test_result_get_type ()) #define CUT_TEST_RESULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST_RESULT, CutTestResult)) #define CUT_TEST_RESULT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST_RESULT, CutTestResultClass)) #define CUT_IS_TEST_RESULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST_RESULT)) #define CUT_IS_TEST_RESULT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST_RESULT)) #define CUT_TEST_RESULT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST_RESULT, CutTestResultClass)) struct _CutTestResult { GObject object; }; struct _CutTestResultClass { GObjectClass parent_class; }; GType cut_test_result_get_type (void) G_GNUC_CONST; CutTestResult *cut_test_result_new (CutTestResultStatus status, CutTest *test, CutTestIterator *test_iterator, CutTestCase *test_case, CutTestSuite *test_suite, CutTestData *test_data, const gchar *user_message, const gchar *system_message, const GList *backtrace); CutTestResult *cut_test_result_new_empty (void); CutTestResult *cut_test_result_new_from_xml (const gchar *xml, gssize len, GError **error); CutTestResultStatus cut_test_result_get_status (CutTestResult *result); CutTest *cut_test_result_get_test (CutTestResult *result); const gchar *cut_test_result_get_test_name (CutTestResult *result); CutTestIterator *cut_test_result_get_test_iterator (CutTestResult *result); const gchar *cut_test_result_get_test_iterator_name (CutTestResult *result); CutTestCase *cut_test_result_get_test_case (CutTestResult *result); const gchar *cut_test_result_get_test_case_name(CutTestResult *result); CutTestSuite *cut_test_result_get_test_suite (CutTestResult *result); const gchar *cut_test_result_get_test_suite_name(CutTestResult *result); CutTestData *cut_test_result_get_test_data (CutTestResult *result); const gchar *cut_test_result_get_message (CutTestResult *result); const gchar *cut_test_result_get_user_message (CutTestResult *result); const gchar *cut_test_result_get_system_message(CutTestResult *result); const GList *cut_test_result_get_backtrace (CutTestResult *result); void cut_test_result_get_start_time (CutTestResult *result, GTimeVal *start_time); gdouble cut_test_result_get_elapsed (CutTestResult *result); const gchar *cut_test_result_get_expected (CutTestResult *result); const gchar *cut_test_result_get_actual (CutTestResult *result); const gchar *cut_test_result_get_diff (CutTestResult *result); const gchar *cut_test_result_get_folded_diff (CutTestResult *result); void cut_test_result_set_status (CutTestResult *result, CutTestResultStatus status); void cut_test_result_set_test (CutTestResult *result, CutTest *test); void cut_test_result_set_test_iterator (CutTestResult *result, CutTestIterator *test_iterator); void cut_test_result_set_test_case (CutTestResult *result, CutTestCase *test_case); void cut_test_result_set_test_suite (CutTestResult *result, CutTestSuite *test_suite); void cut_test_result_set_test_data (CutTestResult *result, CutTestData *test_data); void cut_test_result_set_message (CutTestResult *result, const gchar *message); void cut_test_result_set_user_message (CutTestResult *result, const gchar *user_message); void cut_test_result_set_system_message (CutTestResult *result, const gchar *system_message); void cut_test_result_set_backtrace (CutTestResult *result, const GList *backtrace); void cut_test_result_set_start_time (CutTestResult *result, GTimeVal *start_time); void cut_test_result_set_elapsed (CutTestResult *result, gdouble elapsed); void cut_test_result_set_expected (CutTestResult *result, const gchar *expected); void cut_test_result_set_actual (CutTestResult *result, const gchar *actual); void cut_test_result_set_diff (CutTestResult *result, const gchar *diff); void cut_test_result_set_folded_diff (CutTestResult *result, const gchar *folded_diff); gchar *cut_test_result_to_xml (CutTestResult *result); void cut_test_result_to_xml_string (CutTestResult *result, GString *string, guint indent); const gchar *cut_test_result_status_to_signal_name (CutTestResultStatus status); gboolean cut_test_result_status_is_critical (CutTestResultStatus status); G_END_DECLS #endif /* __CUT_TEST_RESULT_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-console-diff-writer.c0000644000175000017500000002723211264641627023016 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-console-diff-writer.h" #include "cut-console.h" #define DEFAULT_DELETED_MARK_COLOR CUT_CONSOLE_COLOR_RED #define DEFAULT_INSERTED_MARK_COLOR CUT_CONSOLE_COLOR_GREEN #define DEFAULT_DELETED_LINE_COLOR CUT_CONSOLE_COLOR_RED #define DEFAULT_INSERTED_LINE_COLOR CUT_CONSOLE_COLOR_GREEN #define DEFAULT_DELETED_SEGMENT_COLOR \ CUT_CONSOLE_COLOR_WHITE \ CUT_CONSOLE_COLOR_RED_BACK #define DEFAULT_INSERTED_SEGMENT_COLOR \ CUT_CONSOLE_COLOR_WHITE \ CUT_CONSOLE_COLOR_GREEN_BACK #define CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_CONSOLE_DIFF_WRITER, CutConsoleDiffWriterPrivate)) typedef struct _CutConsoleDiffWriterPrivate CutConsoleDiffWriterPrivate; struct _CutConsoleDiffWriterPrivate { gboolean use_color; gchar *deleted_mark_color; gchar *inserted_mark_color; gchar *deleted_line_color; gchar *inserted_line_color; gchar *deleted_segment_color; gchar *inserted_segment_color; }; enum { PROP_0, PROP_USE_COLOR }; G_DEFINE_TYPE(CutConsoleDiffWriter, cut_console_diff_writer, CUT_TYPE_DIFF_WRITER) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void write (CutDiffWriter *writer, const gchar *console, CutDiffWriterTag tag); static void write_line (CutDiffWriter *writer, const gchar *line, CutDiffWriterTag tag); static void finish (CutDiffWriter *writer); static void cut_console_diff_writer_class_init (CutConsoleDiffWriterClass *klass) { GObjectClass *gobject_class; CutDiffWriterClass *diff_writer_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); diff_writer_class = CUT_DIFF_WRITER_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; diff_writer_class->write = write; diff_writer_class->write_line = write_line; diff_writer_class->finish = finish; spec = g_param_spec_boolean("use-color", "Use color", "Whether use color", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_USE_COLOR, spec); g_type_class_add_private(gobject_class, sizeof(CutConsoleDiffWriterPrivate)); } static void cut_console_diff_writer_init (CutConsoleDiffWriter *writer) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer); priv->deleted_mark_color = g_strdup(DEFAULT_DELETED_MARK_COLOR); priv->inserted_mark_color = g_strdup(DEFAULT_INSERTED_MARK_COLOR); priv->deleted_line_color = g_strdup(DEFAULT_DELETED_LINE_COLOR); priv->inserted_line_color = g_strdup(DEFAULT_INSERTED_LINE_COLOR); priv->deleted_segment_color = g_strdup(DEFAULT_DELETED_SEGMENT_COLOR); priv->inserted_segment_color = g_strdup(DEFAULT_INSERTED_SEGMENT_COLOR); } static void dispose (GObject *object) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(object); if (priv->deleted_mark_color) { g_free(priv->deleted_mark_color); priv->deleted_mark_color = NULL; } if (priv->inserted_mark_color) { g_free(priv->inserted_mark_color); priv->inserted_mark_color = NULL; } if (priv->deleted_line_color) { g_free(priv->deleted_line_color); priv->deleted_line_color = NULL; } if (priv->inserted_line_color) { g_free(priv->inserted_line_color); priv->inserted_line_color = NULL; } if (priv->deleted_segment_color) { g_free(priv->deleted_segment_color); priv->deleted_segment_color = NULL; } if (priv->inserted_segment_color) { g_free(priv->inserted_segment_color); priv->inserted_segment_color = NULL; } G_OBJECT_CLASS(cut_console_diff_writer_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(object); switch (prop_id) { case PROP_USE_COLOR: priv->use_color = g_value_get_boolean(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(object); switch (prop_id) { case PROP_USE_COLOR: g_value_set_boolean(value, priv->use_color); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutDiffWriter * cut_console_diff_writer_new (gboolean use_color) { return g_object_new(CUT_TYPE_CONSOLE_DIFF_WRITER, "use-color", use_color, NULL); } void cut_console_diff_writer_set_deleted_mark_color (CutDiffWriter *writer, const gchar *color) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer); g_free(priv->deleted_mark_color); if (!color) color = DEFAULT_DELETED_MARK_COLOR; priv->deleted_mark_color = g_strdup(color); } const gchar * cut_console_diff_writer_get_deleted_mark_color (CutDiffWriter *writer) { return CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer)->deleted_mark_color; } void cut_console_diff_writer_set_inserted_mark_color (CutDiffWriter *writer, const gchar *color) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer); g_free(priv->inserted_mark_color); if (!color) color = DEFAULT_INSERTED_MARK_COLOR; priv->inserted_mark_color = g_strdup(color); } const gchar * cut_console_diff_writer_get_inserted_mark_color (CutDiffWriter *writer) { return CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer)->inserted_mark_color; } void cut_console_diff_writer_set_deleted_line_color (CutDiffWriter *writer, const gchar *color) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer); g_free(priv->deleted_line_color); if (!color) color = DEFAULT_DELETED_LINE_COLOR; priv->deleted_line_color = g_strdup(color); } const gchar * cut_console_diff_writer_get_deleted_line_color (CutDiffWriter *writer) { return CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer)->deleted_line_color; } void cut_console_diff_writer_set_inserted_line_color (CutDiffWriter *writer, const gchar *color) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer); g_free(priv->inserted_line_color); if (!color) color = DEFAULT_INSERTED_LINE_COLOR; priv->inserted_line_color = g_strdup(color); } const gchar * cut_console_diff_writer_get_inserted_line_color (CutDiffWriter *writer) { return CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer)->inserted_line_color; } void cut_console_diff_writer_set_deleted_segment_color (CutDiffWriter *writer, const gchar *color) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer); g_free(priv->deleted_segment_color); if (!color) color = DEFAULT_DELETED_SEGMENT_COLOR; priv->deleted_segment_color = g_strdup(color); } const gchar * cut_console_diff_writer_get_deleted_segment_color (CutDiffWriter *writer) { return CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer)->deleted_segment_color; } void cut_console_diff_writer_set_inserted_segment_color (CutDiffWriter *writer, const gchar *color) { CutConsoleDiffWriterPrivate *priv; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer); g_free(priv->inserted_segment_color); if (!color) color = DEFAULT_INSERTED_SEGMENT_COLOR; priv->inserted_segment_color = g_strdup(color); } const gchar * cut_console_diff_writer_get_inserted_segment_color (CutDiffWriter *writer) { return CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer)->inserted_segment_color; } static const gchar * tag_to_color (CutConsoleDiffWriterPrivate *priv, CutDiffWriterTag tag) { const gchar *color; switch (tag) { case CUT_DIFF_WRITER_TAG_SUMMARY: color = CUT_CONSOLE_COLOR_CYAN; break; case CUT_DIFF_WRITER_TAG_CONTEXT: color = CUT_CONSOLE_COLOR_WHITE CUT_CONSOLE_COLOR_CYAN_BACK; break; case CUT_DIFF_WRITER_TAG_DELETED_MARK: color = priv->deleted_mark_color; break; case CUT_DIFF_WRITER_TAG_INSERTED_MARK: color = priv->inserted_mark_color; break; case CUT_DIFF_WRITER_TAG_DIFFERENCE_MARK: color = CUT_CONSOLE_COLOR_CYAN; break; case CUT_DIFF_WRITER_TAG_DELETED_LINE: color = priv->deleted_line_color; break; case CUT_DIFF_WRITER_TAG_INSERTED_LINE: color = priv->inserted_line_color; break; case CUT_DIFF_WRITER_TAG_DIFFERENCE_LINE: color = CUT_CONSOLE_COLOR_CYAN; break; case CUT_DIFF_WRITER_TAG_DELETED_SEGMENT: color = priv->deleted_segment_color; break; case CUT_DIFF_WRITER_TAG_INSERTED_SEGMENT: color = priv->inserted_segment_color; break; default: color = NULL; break; } return color; } static void write (CutDiffWriter *writer, const gchar *string, CutDiffWriterTag tag) { CutConsoleDiffWriterPrivate *priv; const gchar *color = NULL; priv = CUT_CONSOLE_DIFF_WRITER_GET_PRIVATE(writer); if (priv->use_color) color = tag_to_color(priv, tag); if (color) g_print("%s%s%s", color, string, CUT_CONSOLE_COLOR_NORMAL); else g_print("%s", string); } static void write_line (CutDiffWriter *writer, const gchar *line, CutDiffWriterTag tag) { write(writer, line, tag); g_print("\n"); } static void finish (CutDiffWriter *writer) { } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-iterator.h0000644000175000017500000000600611205747026021736 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_ITERATOR_H__ #define __CUT_TEST_ITERATOR_H__ #include #include #include G_BEGIN_DECLS #define CUT_TYPE_TEST_ITERATOR (cut_test_iterator_get_type ()) #define CUT_TEST_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST_ITERATOR, CutTestIterator)) #define CUT_TEST_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST_ITERATOR, CutTestIteratorClass)) #define CUT_IS_TEST_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST_ITERATOR)) #define CUT_IS_TEST_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST_ITERATOR)) #define CUT_TEST_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST_ITERATOR, CutTestIteratorClass)) typedef void (*CutDataSetupFunction)(void); typedef struct _CutTestIteratorClass CutTestIteratorClass; struct _CutTestIterator { CutTestContainer object; }; struct _CutTestIteratorClass { CutTestContainerClass parent_class; void (*ready) (CutTestIterator *test_iterator, guint n_tests); void (*start_iterated_test) (CutTestIterator *test_iterator, CutIteratedTest *iterated_test, CutTestContext *test_context); void (*complete_iterated_test) (CutTestIterator *test_iterator, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success); }; GType cut_test_iterator_get_type (void) G_GNUC_CONST; CutTestIterator *cut_test_iterator_new (const gchar *name, CutIteratedTestFunction function, CutDataSetupFunction data_setup_function); CutTestIterator *cut_test_iterator_new_empty (void); void cut_test_iterator_add_test (CutTestIterator *test_iterator, CutIteratedTest *test); G_END_DECLS #endif /* __CUT_TEST_ITERATOR_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-runner.c0000644000175000017500000006305411205747026021417 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-test-runner.h" #include "cut-runner.h" #include "cut-repository.h" #include "cut-test-case.h" #include "cut-test-result.h" #include "cut-enum-types.h" static void runner_init (CutRunnerIface *iface); static CutRunnerIface *parent_runner_iface; G_DEFINE_TYPE_WITH_CODE(CutTestRunner, cut_test_runner, CUT_TYPE_RUN_CONTEXT, G_IMPLEMENT_INTERFACE(CUT_TYPE_RUNNER, runner_init)) static gboolean runner_run (CutRunner *runner); static void cut_test_runner_class_init (CutTestRunnerClass *klass) { } static void cut_test_runner_init (CutTestRunner *runner) { } static void runner_init (CutRunnerIface *iface) { parent_runner_iface = g_type_interface_peek_parent(iface); iface->run_async = NULL; iface->run = runner_run; } CutRunContext * cut_test_runner_new (void) { return g_object_new(CUT_TYPE_TEST_RUNNER, NULL); } static void cb_start_test (CutTest *test, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "start-test", test, test_context); } static void cb_pass_assertion_test (CutTest *test, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "pass-assertion", test, test_context); } static void cb_success_test (CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "success-test", test, test_context, result); } static void cb_failure_test (CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "failure-test", test, test_context, result); } static void cb_error_test (CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "error-test", test, test_context, result); } static void cb_pending_test (CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "pending-test", test, test_context, result); } static void cb_notification_test (CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "notification-test", test, test_context, result); } static void cb_omission_test (CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "omission-test", test, test_context, result); } static void cb_crash_test (CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "crash-test", test, test_context, result); } static void cb_complete_test (CutTest *test, CutTestContext *test_context, gboolean success, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "complete-test", test, test_context, success); } static void connect_to_test (CutRunContext *context, CutTest *test) { #define CONNECT(name) \ g_signal_connect(test, #name, \ G_CALLBACK(cb_ ## name ## _test), context) CONNECT(start); CONNECT(pass_assertion); CONNECT(success); CONNECT(failure); CONNECT(error); CONNECT(pending); CONNECT(notification); CONNECT(omission); CONNECT(crash); CONNECT(complete); #undef CONNECT } static void cb_start_test_test_case (CutTestCase *test_case, CutTest *test, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; connect_to_test(context, test); } static void cb_complete_test_test_case (CutTestCase *test_case, CutTest *test, CutTestContext *test_context, gboolean success, gpointer data) { #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(test, \ G_CALLBACK(cb_ ## \ name ## \ _test), \ data) DISCONNECT(start); DISCONNECT(pass_assertion); DISCONNECT(success); DISCONNECT(failure); DISCONNECT(error); DISCONNECT(pending); DISCONNECT(notification); DISCONNECT(omission); DISCONNECT(crash); DISCONNECT(complete); #undef DISCONNECT } static void cb_success_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "success-test-case", test_case, result); } static void cb_failure_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "failure-test-case", test_case, result); } static void cb_error_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "error-test-case", test_case, result); } static void cb_pending_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "pending-test-case", test_case, result); } static void cb_notification_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "notification-test-case", test_case, result); } static void cb_omission_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "omission-test-case", test_case, result); } static void cb_crash_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "crash-test-case", test_case, result); } static void cb_failure_in_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "failure-in-test-case", test_case, result); } static void cb_error_in_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "error-in-test-case", test_case, result); } static void cb_pending_in_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "pending-in-test-case", test_case, result); } static void cb_notification_in_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "notification-in-test-case", test_case, result); } static void cb_omission_in_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "omission-in-test-case", test_case, result); } static void cb_crash_in_test_case (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "crash-in-test-case", test_case, result); } static void cb_start_test_case (CutTestCase *test_case, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "start-test-case", test_case); } static void cb_ready_test_case (CutTestCase *test_case, guint n_tests, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "ready-test-case", test_case, n_tests); } static void cb_complete_test_case (CutTestCase *test_case, CutTestContext *test_context, gboolean success, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "complete-test-case", test_case, success); } static void cb_ready_test_suite (CutTestSuite *test_suite, guint n_test_cases, guint n_tests, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "ready-test-suite", test_suite, n_test_cases, n_tests); } static void cb_start_test_suite (CutTestSuite *test_suite, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "start-test-suite", test_suite); } static void cb_crash_test_suite (CutTestSuite *test_suite, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "crash-test-suite", test_suite, result); } static void cb_start_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "start-iterated-test", iterated_test, test_context); } static void cb_pass_assertion_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, gpointer data) { cb_pass_assertion_test(CUT_TEST(iterated_test), test_context, data); } static void cb_success_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, CutTestResult *result, gpointer data) { cb_success_test(CUT_TEST(iterated_test), test_context, result, data); } static void cb_failure_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, CutTestResult *result, gpointer data) { cb_failure_test(CUT_TEST(iterated_test), test_context, result, data); } static void cb_error_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, CutTestResult *result, gpointer data) { cb_error_test(CUT_TEST(iterated_test), test_context, result, data); } static void cb_pending_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, CutTestResult *result, gpointer data) { cb_pending_test(CUT_TEST(iterated_test), test_context, result, data); } static void cb_notification_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, CutTestResult *result, gpointer data) { cb_notification_test(CUT_TEST(iterated_test), test_context, result, data); } static void cb_omission_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, CutTestResult *result, gpointer data) { cb_omission_test(CUT_TEST(iterated_test), test_context, result, data); } static void cb_crash_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, CutTestResult *result, gpointer data) { cb_crash_test(CUT_TEST(iterated_test), test_context, result, data); } static void cb_complete_iterated_test (CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "complete-iterated-test", iterated_test, test_context, success); } static void cb_start_iterated_test_test_iterator (CutTestIterator *test_iterator, CutIteratedTest *iterated_test, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; #define CONNECT(name) \ g_signal_connect(iterated_test, #name, \ G_CALLBACK(cb_ ## name ## _iterated_test), \ context) CONNECT(start); CONNECT(complete); CONNECT(pass_assertion); CONNECT(success); CONNECT(failure); CONNECT(error); CONNECT(pending); CONNECT(notification); CONNECT(omission); CONNECT(crash); #undef CONNECT } static void cb_complete_iterated_test_test_iterator (CutTestIterator *test_iterator, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success, gpointer data) { #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(iterated_test, \ G_CALLBACK(cb_ ## \ name ## \ _iterated_test), \ data) DISCONNECT(start); DISCONNECT(complete); DISCONNECT(pass_assertion); DISCONNECT(success); DISCONNECT(failure); DISCONNECT(error); DISCONNECT(pending); DISCONNECT(notification); DISCONNECT(omission); DISCONNECT(crash); #undef DISCONNECT } static void cb_success_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "success-test-iterator", test_iterator, result); } static void cb_failure_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "failure-test-iterator", test_iterator, result); } static void cb_error_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "error-test-iterator", test_iterator, result); } static void cb_pending_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "pending-test-iterator", test_iterator, result); } static void cb_notification_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "notification-test-iterator", test_iterator, result); } static void cb_omission_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "omission-test-iterator", test_iterator, result); } static void cb_crash_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "crash-test-iterator", test_iterator, result); } static void cb_start_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "start-test-iterator", test_iterator); } static void cb_ready_test_iterator (CutTestIterator *test_iterator, guint n_tests, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "ready-test-iterator", test_iterator, n_tests); } static void cb_complete_test_iterator (CutTestIterator *test_iterator, CutTestContext *test_context, gboolean success, gpointer data) { CutRunContext *context = data; g_signal_emit_by_name(context, "complete-test-iterator", test_iterator, success); } static void connect_to_test_iterator (CutRunContext *context, CutTestIterator *test_iterator) { #define CONNECT(name) \ g_signal_connect(test_iterator, #name, \ G_CALLBACK(cb_ ## name ## _test_iterator), context) CONNECT(start_iterated_test); CONNECT(complete_iterated_test); CONNECT(success); CONNECT(failure); CONNECT(error); CONNECT(pending); CONNECT(notification); CONNECT(omission); CONNECT(crash); CONNECT(ready); CONNECT(start); CONNECT(complete); #undef CONNECT } static void cb_start_test_iterator_test_case (CutTestCase *test_case, CutTestIterator *test_iterator, CutTestContext *test_context, gpointer data) { CutRunContext *context = data; connect_to_test_iterator(context, test_iterator); } static void cb_complete_test_iterator_test_case (CutTestCase *test_case, CutTestIterator *test_iterator, CutTestContext *test_context, gboolean success, gpointer data) { CutRunContext *context = data; #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(test_iterator, \ G_CALLBACK(cb_ ## \ name ## \ _test_iterator), \ context) DISCONNECT(start_iterated_test); DISCONNECT(complete_iterated_test); DISCONNECT(success); DISCONNECT(failure); DISCONNECT(error); DISCONNECT(pending); DISCONNECT(notification); DISCONNECT(omission); DISCONNECT(crash); DISCONNECT(ready); DISCONNECT(start); DISCONNECT(complete); #undef DISCONNECT } static void connect_to_test_case (CutRunContext *context, CutTestCase *test_case) { #define CONNECT(name) \ g_signal_connect(test_case, #name, \ G_CALLBACK(cb_ ## name ## _test_case), context) CONNECT(start_test); CONNECT(complete_test); CONNECT(start_test_iterator); CONNECT(complete_test_iterator); CONNECT(success); CONNECT(failure); CONNECT(error); CONNECT(pending); CONNECT(notification); CONNECT(omission); CONNECT(crash); CONNECT(failure_in); CONNECT(error_in); CONNECT(pending_in); CONNECT(notification_in); CONNECT(omission_in); CONNECT(crash_in); CONNECT(ready); CONNECT(start); CONNECT(complete); #undef CONNECT } static void cb_start_test_case_test_suite (CutTestSuite *test_suite, CutTestCase *test_case, gpointer data) { CutRunContext *context = data; connect_to_test_case(context, test_case); } static void cb_complete_test_case_test_suite (CutTestSuite *test_suite, CutTestCase *test_case, gboolean success, gpointer data) { CutRunContext *context = data; #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(test_case, \ G_CALLBACK(cb_ ## \ name ## \ _test_case), \ context) DISCONNECT(start_test); DISCONNECT(complete_test); DISCONNECT(start_test_iterator); DISCONNECT(complete_test_iterator); DISCONNECT(success); DISCONNECT(failure); DISCONNECT(error); DISCONNECT(pending); DISCONNECT(notification); DISCONNECT(omission); DISCONNECT(crash); DISCONNECT(ready); DISCONNECT(start); DISCONNECT(complete); #undef DISCONNECT } static void cb_complete_test_suite (CutTestSuite *test_suite, CutTestContext *test_context, gboolean success, gpointer data) { CutRunContext *context = data; #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(test_suite, \ G_CALLBACK(cb_ ## \ name ## \ _test_suite), \ data) DISCONNECT(ready); DISCONNECT(start); DISCONNECT(crash); DISCONNECT(complete); DISCONNECT(start_test_case); DISCONNECT(complete_test_case); #undef DISCONNECT g_signal_emit_by_name(context, "complete-test-suite", test_suite, success); } static void connect_to_test_suite (CutRunContext *context, CutTestSuite *test_suite) { #define CONNECT(name) \ g_signal_connect(test_suite, #name, \ G_CALLBACK(cb_ ## name ## _test_suite), \ context) CONNECT(ready); CONNECT(start); CONNECT(crash); CONNECT(complete); CONNECT(start_test_case); CONNECT(complete_test_case); #undef CONNECT } static gboolean runner_run (CutRunner *runner) { CutRunContext *context; CutTestSuite *suite; gboolean success; context = CUT_RUN_CONTEXT(runner); suite = cut_run_context_get_test_suite(context); g_signal_emit_by_name(context, "start-run"); success = cut_test_runner_run_test_suite(CUT_TEST_RUNNER(runner), suite); success = cut_run_context_emit_complete_run(context, success); return success; } gboolean cut_test_runner_run_test (CutTestRunner *runner, CutTest *test, CutTestContext *test_context) { CutRunContext *context; context = CUT_RUN_CONTEXT(runner); connect_to_test(context, test); return cut_test_run(test, test_context, context); } gboolean cut_test_runner_run_test_case (CutTestRunner *runner, CutTestCase *test_case) { CutRunContext *context; context = CUT_RUN_CONTEXT(runner); connect_to_test_case(context, test_case); return cut_test_case_run(test_case, context); } gboolean cut_test_runner_run_test_iterator (CutTestRunner *runner, CutTestIterator *test_iterator, CutTestContext *test_context) { CutRunContext *context; context = CUT_RUN_CONTEXT(runner); connect_to_test_iterator(context, test_iterator); return cut_test_run(CUT_TEST(test_iterator), test_context, context); } gboolean cut_test_runner_run_test_suite (CutTestRunner *runner, CutTestSuite *test_suite) { CutRunContext *context; context = CUT_RUN_CONTEXT(runner); connect_to_test_suite(context, test_suite); return cut_test_suite_run(test_suite, context); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-iterator.c0000644000175000017500000004341511205747026021736 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include "cut-test-iterator.h" #include "cut-run-context.h" #include "cut-test-result.h" #include "cut-utils.h" #include "cut-crash-backtrace.h" #include "../gcutter/gcut-error.h" #include "../gcutter/gcut-marshalers.h" #define CUT_TEST_ITERATOR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_TEST_ITERATOR, CutTestIteratorPrivate)) typedef struct _CutTestIteratorPrivate CutTestIteratorPrivate; struct _CutTestIteratorPrivate { CutIteratedTestFunction iterated_test_function; CutDataSetupFunction data_setup_function; }; enum { PROP_0, PROP_ITERATED_TEST_FUNCTION, PROP_DATA_SETUP_FUNCTION }; enum { READY, START_TEST, COMPLETE_TEST, LAST_SIGNAL }; static gint signals[LAST_SIGNAL] = {0}; G_DEFINE_TYPE(CutTestIterator, cut_test_iterator, CUT_TYPE_TEST_CONTAINER) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static gboolean run (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); static void cut_test_iterator_class_init (CutTestIteratorClass *klass) { GObjectClass *gobject_class; CutTestClass *test_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); test_class = CUT_TEST_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; test_class->run = run; spec = g_param_spec_pointer("iterated-test-function", "Iterated Test Function", "The function for iterated test", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_ITERATED_TEST_FUNCTION, spec); spec = g_param_spec_pointer("data-setup-function", "Data Setup Function", "The function for data setup", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_DATA_SETUP_FUNCTION, spec); signals[READY] = g_signal_new("ready", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestIteratorClass, ready), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); signals[START_TEST] = g_signal_new("start-iterated-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestIteratorClass, start_iterated_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT); signals[COMPLETE_TEST] = g_signal_new("complete-iterated-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestIteratorClass, complete_iterated_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_BOOLEAN, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, G_TYPE_BOOLEAN); g_type_class_add_private(gobject_class, sizeof(CutTestIteratorPrivate)); } static void cut_test_iterator_init (CutTestIterator *test_iterator) { CutTestIteratorPrivate *priv = CUT_TEST_ITERATOR_GET_PRIVATE(test_iterator); priv->iterated_test_function = NULL; priv->data_setup_function = NULL; } static void dispose (GObject *object) { G_OBJECT_CLASS(cut_test_iterator_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutTestIteratorPrivate *priv = CUT_TEST_ITERATOR_GET_PRIVATE(object); switch (prop_id) { case PROP_ITERATED_TEST_FUNCTION: priv->iterated_test_function = g_value_get_pointer(value); break; case PROP_DATA_SETUP_FUNCTION: priv->data_setup_function = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutTestIteratorPrivate *priv = CUT_TEST_ITERATOR_GET_PRIVATE(object); switch (prop_id) { case PROP_ITERATED_TEST_FUNCTION: g_value_set_pointer(value, priv->iterated_test_function); break; case PROP_DATA_SETUP_FUNCTION: g_value_set_pointer(value, priv->data_setup_function); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutTestIterator * cut_test_iterator_new (const gchar *name, CutIteratedTestFunction test_function, CutDataSetupFunction data_setup_function) { return g_object_new(CUT_TYPE_TEST_ITERATOR, "element-name", "test-iterator", "name", name, "iterated-test-function", test_function, "data-setup-function", data_setup_function, NULL); } CutTestIterator * cut_test_iterator_new_empty (void) { return cut_test_iterator_new(NULL, NULL, NULL); } void cut_test_iterator_add_test (CutTestIterator *test_iterator, CutIteratedTest *test) { cut_test_container_add_test(CUT_TEST_CONTAINER(test_iterator), CUT_TEST(test)); } typedef struct _RunTestInfo { CutRunContext *run_context; CutTestCase *test_case; CutTestIterator *test_iterator; CutIteratedTest *iterated_test; CutTestContext *test_context; CutTestContext *parent_test_context; } RunTestInfo; static void run_test_without_thread (gpointer data, gpointer user_data) { RunTestInfo *info = data; CutRunContext *run_context; CutTestCase *test_case; CutTestIterator *test_iterator; CutIteratedTest *iterated_test; CutTestContext *test_context, *parent_test_context; gint signum; jmp_buf crash_jump_buffer; CutCrashBacktrace *crash_backtrace = NULL; gboolean *success = user_data; run_context = info->run_context; test_case = info->test_case; test_iterator = info->test_iterator; iterated_test = info->iterated_test; test_context = info->test_context; parent_test_context = info->parent_test_context; if (cut_run_context_is_canceled(run_context)) return; cut_test_context_current_push(test_context); if (cut_run_context_is_multi_thread(run_context) || !cut_run_context_get_handle_signals(run_context)) { signum = 0; } else { crash_backtrace = cut_crash_backtrace_new(&crash_jump_buffer); signum = setjmp(crash_jump_buffer); } switch (signum) { case 0: g_signal_emit_by_name(test_iterator, "start-iterated-test", iterated_test, test_context); cut_test_case_run_setup(test_case, test_context); if (cut_test_context_is_failed(test_context)) { *success = FALSE; } else { if (!cut_test_run(CUT_TEST(iterated_test), test_context, run_context)) *success = FALSE; } if (crash_backtrace) cut_crash_backtrace_free(crash_backtrace); break; #ifndef G_OS_WIN32 case SIGSEGV: case SIGABRT: case SIGTERM: success = FALSE; cut_crash_backtrace_emit(cut_run_context_get_test_suite(run_context), test_case, CUT_TEST(iterated_test), test_iterator, cut_iterated_test_get_data(iterated_test), test_context); break; case SIGINT: cut_run_context_cancel(run_context); break; #endif default: break; } cut_test_case_run_teardown(test_case, test_context); cut_test_context_set_failed(parent_test_context, cut_test_context_is_failed(test_context)); g_signal_emit_by_name(test_iterator, "complete-iterated-test", iterated_test, test_context, *success); cut_test_context_set_test(test_context, NULL); cut_test_context_set_test(parent_test_context, NULL); cut_test_context_current_pop(); g_object_unref(run_context); g_object_unref(test_case); g_object_unref(test_iterator); g_object_unref(iterated_test); g_object_unref(test_context); g_object_unref(parent_test_context); g_free(info); } static void run_test_with_thread_support (CutTestIterator *test_iterator, CutIteratedTest *iterated_test, CutTestContext *test_context, CutRunContext *run_context, GThreadPool *thread_pool, gboolean *success) { RunTestInfo *info; CutTest *test; CutTestCase *test_case; CutTestContext *local_test_context; gboolean is_multi_thread; gboolean need_no_thread_run = TRUE; const gchar *multi_thread_attribute; if (cut_run_context_is_canceled(run_context)) return; test = CUT_TEST(iterated_test); test_case = cut_test_context_get_test_case(test_context); local_test_context = cut_test_context_new(run_context, NULL, test_case, test_iterator, test); is_multi_thread = cut_run_context_is_multi_thread(run_context); multi_thread_attribute = cut_test_get_attribute(CUT_TEST(test_iterator), "multi-thread"); if (multi_thread_attribute && g_str_equal(multi_thread_attribute, "false")) is_multi_thread = FALSE; cut_test_context_set_multi_thread(local_test_context, is_multi_thread); cut_test_context_set_data(local_test_context, cut_iterated_test_get_data(iterated_test)); cut_test_context_set_test(test_context, test); cut_test_context_set_test(local_test_context, test); info = g_new0(RunTestInfo, 1); info->run_context = g_object_ref(run_context); info->test_case = g_object_ref(test_case); info->test_iterator = g_object_ref(test_iterator); info->iterated_test = g_object_ref(iterated_test); info->test_context = local_test_context; info->parent_test_context = g_object_ref(test_context); if (is_multi_thread && thread_pool) { GError *error = NULL; g_thread_pool_push(thread_pool, info, &error); if (error) { cut_utils_report_error(error); } else { need_no_thread_run = FALSE; } } if (need_no_thread_run) run_test_without_thread(info, success); } static void cb_test_status (CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { CutTestResultStatus *status = data; *status = MAX(*status, cut_test_result_get_status(result)); } static void run_iterated_tests (CutTest *test, CutTestContext *test_context, CutRunContext *run_context, CutTestResultStatus *status, gboolean *all_success) { CutTestIteratorPrivate *priv; CutTestIterator *test_iterator; CutTestContainer *test_container; GError *error = NULL; GList *node, *iterated_tests = NULL, *filtered_tests = NULL; const gchar **test_names; guint n_tests; GThreadPool *thread_pool = NULL; thread_pool = g_thread_pool_new(run_test_without_thread, all_success, cut_run_context_get_max_threads(run_context), FALSE, &error); if (error) { cut_utils_report_error(error); return; } priv = CUT_TEST_ITERATOR_GET_PRIVATE(test); test_iterator = CUT_TEST_ITERATOR(test); while (cut_test_context_have_data(test_context)) { CutIteratedTest *iterated_test; CutTestData *test_data; test_data = cut_test_context_get_current_data(test_context); iterated_test = cut_iterated_test_new(cut_test_get_name(test), priv->iterated_test_function, test_data); cut_test_iterator_add_test(test_iterator, iterated_test); g_object_unref(iterated_test); iterated_tests = g_list_prepend(iterated_tests, iterated_test); g_signal_connect(iterated_test, "success", G_CALLBACK(cb_test_status), status); g_signal_connect(iterated_test, "failure", G_CALLBACK(cb_test_status), status); g_signal_connect(iterated_test, "error", G_CALLBACK(cb_test_status), status); g_signal_connect(iterated_test, "pending", G_CALLBACK(cb_test_status), status); g_signal_connect(iterated_test, "notification", G_CALLBACK(cb_test_status), status); g_signal_connect(iterated_test, "omission", G_CALLBACK(cb_test_status), status); cut_test_context_shift_data(test_context); } test_container = CUT_TEST_CONTAINER(test); test_names = cut_run_context_get_target_test_names(run_context); filtered_tests = cut_test_container_filter_children(test_container, test_names); n_tests = cut_test_container_get_n_tests(test_container, run_context); g_signal_emit_by_name(test_iterator, "ready", n_tests); g_signal_emit_by_name(test, "start", NULL); for (node = filtered_tests; node; node = g_list_next(node)) { CutIteratedTest *iterated_test = node->data; run_test_with_thread_support(test_iterator, iterated_test, test_context, run_context, thread_pool, all_success); } g_list_free(filtered_tests); if (thread_pool) g_thread_pool_free(thread_pool, FALSE, TRUE); for (node = iterated_tests; node; node = g_list_next(node)) { CutIteratedTest *iterated_test = node->data; g_signal_handlers_disconnect_by_func(iterated_test, G_CALLBACK(cb_test_status), status); cut_iterated_test_clear_data(iterated_test); } g_list_free(iterated_tests); } static gboolean run (CutTest *test, CutTestContext *test_context, CutRunContext *run_context) { CutTestIterator *test_iterator; CutTestIteratorPrivate *priv; CutTestResult *result; CutTestCase *test_case; CutTestResultStatus status = CUT_TEST_RESULT_SUCCESS; gboolean all_success = TRUE; jmp_buf jump_buffer; test_iterator = CUT_TEST_ITERATOR(test); g_return_val_if_fail(CUT_IS_TEST_ITERATOR(test_iterator), FALSE); priv = CUT_TEST_ITERATOR_GET_PRIVATE(test_iterator); g_return_val_if_fail(priv->data_setup_function != NULL, FALSE); cut_test_context_set_test_iterator(test_context, test_iterator); if (priv->data_setup_function) { cut_test_context_set_jump(test_context, &jump_buffer); if (setjmp(jump_buffer) == 0) { priv->data_setup_function(); } } if (cut_test_context_is_failed(test_context)) { cut_test_context_set_test_iterator(test_context, NULL); return FALSE; } run_iterated_tests(test, test_context, run_context, &status, &all_success); test_case = cut_test_context_get_test_case(test_context); result = cut_test_result_new(status, NULL, test_iterator, test_case, NULL, NULL, NULL, NULL, NULL); cut_test_emit_result_signal(CUT_TEST(test_iterator), test_context, result); g_object_unref(result); g_signal_emit_by_name(test, "complete", NULL, all_success); cut_test_context_set_test_iterator(test_context, NULL); return all_success; } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-stream-reader.h0000644000175000017500000000575311205747026021673 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_STREAM_READER_H__ #define __CUT_STREAM_READER_H__ #include #include G_BEGIN_DECLS #define CUT_STREAM_READER_ERROR (cut_stream_reader_error_quark()) #define CUT_TYPE_STREAM_READER (cut_stream_reader_get_type()) #define CUT_STREAM_READER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), CUT_TYPE_STREAM_READER, CutStreamReader)) #define CUT_STREAM_READER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), CUT_TYPE_STREAM_READER, CutStreamReaderClass)) #define CUT_IS_STREAM_READER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), CUT_TYPE_STREAM_READER)) #define CUT_IS_STREAM_READER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), CUT_TYPE_STREAM_READER)) #define CUT_STREAM_READER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_STREAM_READER, CutStreamReaderClass)) typedef struct _CutStreamReader CutStreamReader; typedef struct _CutStreamReaderClass CutStreamReaderClass; struct _CutStreamReader { CutRunContext object; }; struct _CutStreamReaderClass { CutRunContextClass parent_class; }; typedef enum { CUT_STREAM_READER_ERROR_READ, CUT_STREAM_READER_ERROR_PARSE, CUT_STREAM_READER_ERROR_END_PARSE, CUT_STREAM_READER_ERROR_IO_ERROR } CutStreamReaderError; GQuark cut_stream_reader_error_quark(void); GType cut_stream_reader_get_type (void) G_GNUC_CONST; CutRunContext *cut_stream_reader_new (void); guint cut_stream_reader_watch_io_channel (CutStreamReader *stream_reader, GIOChannel *channel); gboolean cut_stream_reader_read_from_io_channel (CutStreamReader *stream_reader, GIOChannel *channel); gboolean cut_stream_reader_read (CutStreamReader *stream_reader, const gchar *stream, gsize length); gboolean cut_stream_reader_end_read (CutStreamReader *stream_reader); G_END_DECLS #endif /* __CUT_STREAM_READER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-readable-differ.h0000644000175000017500000000473311264342375022134 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_READABLE_DIFFER_H__ #define __CUT_READABLE_DIFFER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_READABLE_DIFFER (cut_readable_differ_get_type ()) #define CUT_READABLE_DIFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_READABLE_DIFFER, CutReadableDiffer)) #define CUT_READABLE_DIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_READABLE_DIFFER, CutReadableDifferClass)) #define CUT_IS_READABLE_DIFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_READABLE_DIFFER)) #define CUT_IS_READABLE_DIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_READABLE_DIFFER)) #define CUT_READABLE_DIFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_READABLE_DIFFER, CutReadableDifferClass)) typedef struct _CutReadableDiffer CutReadableDiffer; typedef struct _CutReadableDifferClass CutReadableDifferClass; struct _CutReadableDiffer { CutDiffer object; }; struct _CutReadableDifferClass { CutDifferClass parent_class; void (*diff_line) (CutDiffer *differ, CutDiffWriter *writer, gchar *from_line, gchar *to_line); }; GType cut_readable_differ_get_type (void) G_GNUC_CONST; CutDiffer *cut_readable_differ_new (const gchar *from, const gchar *to); gboolean cut_diff_readable_is_interested (const gchar *diff); gboolean cut_diff_readable_need_fold (const gchar *diff); G_END_DECLS #endif /* __CUT_READABLE_DIFFER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-verbose-level.c0000644000175000017500000000377411205747026021706 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-verbose-level.h" GQuark cut_verbose_level_error_quark (void) { return g_quark_from_static_string("cut-verbose-level-error-quark"); } CutVerboseLevel cut_verbose_level_parse (const gchar *name, GError **error) { CutVerboseLevel level = CUT_VERBOSE_LEVEL_INVALID; if (name == NULL) { level = CUT_VERBOSE_LEVEL_NORMAL; } else if (g_utf8_collate(name, "s") == 0 || g_utf8_collate(name, "silent") == 0) { level = CUT_VERBOSE_LEVEL_SILENT; } else if (g_utf8_collate(name, "n") == 0 || g_utf8_collate(name, "normal") == 0) { level = CUT_VERBOSE_LEVEL_NORMAL; } else if (g_utf8_collate(name, "v") == 0 || g_utf8_collate(name, "verbose") == 0) { level = CUT_VERBOSE_LEVEL_VERBOSE; } else { if (error) { g_set_error(error, CUT_VERBOSE_LEVEL_ERROR, CUT_VERBOSE_LEVEL_ERROR_BAD_VALUE, "Invalid verbose level name: %s", name); } } return level; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-report.h0000644000175000017500000000652411205747026020450 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_REPORT_H__ #define __CUT_REPORT_H__ #include G_BEGIN_DECLS #define CUT_TYPE_REPORT (cut_report_get_type ()) #define CUT_REPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_REPORT, CutReport)) #define CUT_REPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_REPORT, CutReportClass)) #define CUT_IS_REPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_REPORT)) #define CUT_IS_REPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_REPORT)) #define CUT_REPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_REPORT, CutReportClass)) typedef struct _CutReport CutReport; typedef struct _CutReportClass CutReportClass; struct _CutReport { GObject object; }; struct _CutReportClass { GObjectClass parent_class; gchar *(*get_all_results) (CutReport *report); gchar *(*get_success_results)(CutReport *report); gchar *(*get_error_results) (CutReport *report); gchar *(*get_failure_results)(CutReport *report); gchar *(*get_pending_results)(CutReport *report); gchar *(*get_notification_results) (CutReport *report); gchar *(*get_omission_results)(CutReport *report); gchar *(*get_crash_results) (CutReport *report); gchar *(*get_test_result) (CutReport *report, const gchar *test_name); }; GType cut_report_get_type (void) G_GNUC_CONST; CutReport *cut_report_new (const gchar *name, const gchar *first_property, ...); const gchar *cut_report_get_filename (CutReport *report); gchar *cut_report_get_all_results (CutReport *report); gchar *cut_report_get_test_result (CutReport *report, const gchar *test_name); gchar *cut_report_get_success_results (CutReport *report); gchar *cut_report_get_error_results (CutReport *report); gchar *cut_report_get_failure_results (CutReport *report); gchar *cut_report_get_pending_results (CutReport *report); gchar *cut_report_get_notification_results (CutReport *report); gchar *cut_report_get_omission_results (CutReport *report); gchar *cut_report_get_crash_results (CutReport *report); G_END_DECLS #endif /* __CUT_REPORT_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-private.h0000644000175000017500000000261511205747026020604 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_PRIVATE_H__ #define __CUT_PRIVATE_H__ #include G_BEGIN_DECLS typedef struct _CutRunContext CutRunContext; typedef struct _CutTestRunner CutTestRunner; typedef struct _CutListener CutListener; typedef struct _CutTestSuite CutTestSuite; typedef struct _CutTestCase CutTestCase; typedef struct _CutTestIterator CutTestIterator; typedef struct _CutTest CutTest; typedef struct _CutIteratedTest CutIteratedTest; typedef struct _CutTestResult CutTestResult; G_END_DECLS #endif /* __CUT_PRIVATE_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-colorize-differ.h0000644000175000017500000000420411264326414022210 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_COLORIZE_DIFFER_H__ #define __CUT_COLORIZE_DIFFER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_COLORIZE_DIFFER (cut_colorize_differ_get_type ()) #define CUT_COLORIZE_DIFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_COLORIZE_DIFFER, CutColorizeDiffer)) #define CUT_COLORIZE_DIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_COLORIZE_DIFFER, CutColorizeDifferClass)) #define CUT_IS_COLORIZE_DIFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_COLORIZE_DIFFER)) #define CUT_IS_COLORIZE_DIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_COLORIZE_DIFFER)) #define CUT_COLORIZE_DIFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_COLORIZE_DIFFER, CutColorizeDifferClass)) typedef struct _CutColorizeDiffer CutColorizeDiffer; typedef struct _CutColorizeDifferClass CutColorizeDifferClass; struct _CutColorizeDiffer { CutReadableDiffer object; }; struct _CutColorizeDifferClass { CutReadableDifferClass parent_class; }; GType cut_colorize_differ_get_type (void) G_GNUC_CONST; CutDiffer *cut_colorize_differ_new (const gchar *from, const gchar *to); G_END_DECLS #endif /* __CUT_COLORIZE_DIFFER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-crash-backtrace.c0000644000175000017500000002073711424022512022134 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include "cut-main.h" #include "cut-test-result.h" #include "cut-backtrace-entry.h" #include "cut-utils.h" #include "cut-crash-backtrace.h" static gboolean cut_crash_backtrace_show_on_the_moment = TRUE; static gboolean cut_crash_backtrace_signal_received = FALSE; void cut_crash_backtrace_set_show_on_the_moment (gboolean show_on_the_moment) { cut_crash_backtrace_show_on_the_moment = show_on_the_moment; } gboolean cut_crash_backtrace_get_show_on_the_moment (void) { return cut_crash_backtrace_show_on_the_moment; } void cut_crash_backtrace_reset_signal_received (void) { cut_crash_backtrace_signal_received = FALSE; } #ifdef G_OS_WIN32 CutCrashBacktrace * cut_crash_backtrace_new (jmp_buf *jump_buffer) { return NULL; } void cut_crash_backtrace_free (CutCrashBacktrace *crash_backtrace) { } void cut_crash_backtrace_emit (CutTestSuite *test_suite, CutTestCase *test_case, CutTest *test, CutTestIterator *test_iterator, CutTestData *test_data, CutTestContext *test_context) { } #else static CutCrashBacktrace *current_crash_backtrace = NULL; static gchar crash_backtrace[40960]; static gchar crash_backtrace_read_buffer[4096]; struct _CutCrashBacktrace { CutCrashBacktrace *previous; jmp_buf *jump_buffer; struct sigaction i_will_be_back_action; struct sigaction previous_segv_action; struct sigaction previous_abort_action; struct sigaction previous_terminate_action; struct sigaction previous_interrupt_action; gboolean set_segv_action; gboolean set_abort_action; gboolean set_terminate_action; gboolean set_interrupt_action; }; static void read_backtrace (int in_fd) { gssize i, read_size; gchar *internal_backtrace; crash_backtrace[0] = '\0'; i = 0; while ((read_size = read(in_fd, crash_backtrace_read_buffer, sizeof(crash_backtrace_read_buffer))) > 0) { if (cut_crash_backtrace_show_on_the_moment) { ssize_t written_bytes; written_bytes = write(STDERR_FILENO, crash_backtrace_read_buffer, read_size); if (read_size == written_bytes) break; } if (i + read_size > sizeof(crash_backtrace)) break; memcpy(crash_backtrace + i, crash_backtrace_read_buffer, read_size); i += read_size; } crash_backtrace[i] = '\0'; if (i == 0) return; #define INTERNAL_BACKTRACE_MARK "\n" internal_backtrace = strstr(crash_backtrace, INTERNAL_BACKTRACE_MARK); if (internal_backtrace) { internal_backtrace += strlen(INTERNAL_BACKTRACE_MARK); crash_backtrace[internal_backtrace - crash_backtrace] = '\0'; } #undef INTERNAL_BACKTRACE_MARK } static void collect_backtrace (void) { int fds[2]; int original_stdout_fileno; if (pipe(fds) == -1) { perror("unable to open pipe for collecting stack trace"); return; } original_stdout_fileno = dup(STDOUT_FILENO); dup2(fds[1], STDOUT_FILENO); g_on_error_stack_trace(cut_get_cutter_command_path()); dup2(original_stdout_fileno, STDOUT_FILENO); close(original_stdout_fileno); close(fds[1]); read_backtrace(fds[0]); close(fds[0]); } static void i_will_be_back_handler (int signum) { jmp_buf *jump_buffer; if (cut_crash_backtrace_signal_received) { g_print("signal received on crash\n"); exit(EXIT_FAILURE); } cut_crash_backtrace_signal_received = TRUE; jump_buffer = current_crash_backtrace->jump_buffer; cut_crash_backtrace_free(current_crash_backtrace); if (signum != SIGINT) { collect_backtrace(); } longjmp(*jump_buffer, signum); } CutCrashBacktrace * cut_crash_backtrace_new (jmp_buf *jump_buffer) { CutCrashBacktrace *crash_backtrace; struct sigaction *i_will_be_back_action; struct sigaction *previous_segv_action; struct sigaction *previous_abort_action; struct sigaction *previous_terminate_action; struct sigaction *previous_interrupt_action; crash_backtrace = g_new0(CutCrashBacktrace, 1); crash_backtrace->jump_buffer = jump_buffer; crash_backtrace->set_segv_action = TRUE; crash_backtrace->set_abort_action = TRUE; crash_backtrace->set_terminate_action = TRUE; crash_backtrace->set_interrupt_action = TRUE; i_will_be_back_action = &(crash_backtrace->i_will_be_back_action); previous_segv_action = &(crash_backtrace->previous_segv_action); previous_abort_action = &(crash_backtrace->previous_abort_action); previous_terminate_action = &(crash_backtrace->previous_terminate_action); previous_interrupt_action = &(crash_backtrace->previous_interrupt_action); i_will_be_back_action->sa_handler = i_will_be_back_handler; sigemptyset(&(i_will_be_back_action->sa_mask)); i_will_be_back_action->sa_flags = 0; if (sigaction(SIGSEGV, i_will_be_back_action, previous_segv_action) == -1) crash_backtrace->set_segv_action = FALSE; if (sigaction(SIGABRT, i_will_be_back_action, previous_abort_action) == -1) crash_backtrace->set_abort_action = FALSE; if (sigaction(SIGTERM, i_will_be_back_action, previous_terminate_action) == -1) crash_backtrace->set_terminate_action = FALSE; if (sigaction(SIGINT, i_will_be_back_action, previous_interrupt_action) == -1) crash_backtrace->set_interrupt_action = FALSE; crash_backtrace->previous = current_crash_backtrace; current_crash_backtrace = crash_backtrace; return crash_backtrace; } void cut_crash_backtrace_free (CutCrashBacktrace *crash_backtrace) { if (crash_backtrace->set_interrupt_action) sigaction(SIGINT, &(crash_backtrace->previous_interrupt_action), NULL); if (crash_backtrace->set_terminate_action) sigaction(SIGTERM, &(crash_backtrace->previous_terminate_action), NULL); if (crash_backtrace->set_abort_action) sigaction(SIGABRT, &(crash_backtrace->previous_abort_action), NULL); if (crash_backtrace->set_segv_action) sigaction(SIGSEGV, &(crash_backtrace->previous_segv_action), NULL); current_crash_backtrace = crash_backtrace->previous; g_free(crash_backtrace); } void cut_crash_backtrace_emit (CutTestSuite *test_suite, CutTestCase *test_case, CutTest *test, CutTestIterator *test_iterator, CutTestData *test_data, CutTestContext *test_context) { CutTestResult *result; GList *parsed_backtrace = NULL; CutTest *target; parsed_backtrace = cut_utils_parse_gdb_backtrace(crash_backtrace); crash_backtrace[0] = '\0'; result = cut_test_result_new(CUT_TEST_RESULT_CRASH, test, test_iterator, test_case, test_suite, test_data, NULL, NULL, parsed_backtrace); g_list_foreach(parsed_backtrace, (GFunc)g_object_unref, NULL); g_list_free(parsed_backtrace); if (test) { target = test; } else if (test_iterator) { target = CUT_TEST(test_iterator); } else if (test_case) { target = CUT_TEST(test_case); } else if (test_suite) { target = CUT_TEST(test_suite); } else { target = NULL; } cut_test_emit_result_signal(target, test_context, result); g_object_unref(result); } #endif /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-verbose-level.h0000644000175000017500000000263511205747026021706 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_VERBOSE_LEVEL_H__ #define __CUT_VERBOSE_LEVEL_H__ #include G_BEGIN_DECLS typedef enum { CUT_VERBOSE_LEVEL_INVALID = -1, CUT_VERBOSE_LEVEL_SILENT, CUT_VERBOSE_LEVEL_NORMAL, CUT_VERBOSE_LEVEL_VERBOSE } CutVerboseLevel; #define CUT_VERBOSE_LEVEL_ERROR (cut_verbose_level_error_quark ()) typedef enum { CUT_VERBOSE_LEVEL_ERROR_BAD_VALUE } CutVerboseLevelError; GQuark cut_verbose_level_error_quark (void); CutVerboseLevel cut_verbose_level_parse (const gchar *name, GError **error); G_END_DECLS #endif /* __CUT_VERBOSE_LEVEL_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-context.h0000644000175000017500000001543611523751075021602 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_CONTEXT_H__ #define __CUT_TEST_CONTEXT_H__ #include #include #include #include #include G_BEGIN_DECLS #define CUT_TEST_CONTEXT_ERROR (cut_test_context_error_quark()) #define CUT_TYPE_TEST_CONTEXT (cut_test_context_get_type()) #define CUT_TEST_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST_CONTEXT, CutTestContext)) #define CUT_TEST_TEST_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST_CONTEXT, CutTestContextClass)) #define CUT_IS_TEST_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST_CONTEXT)) #define CUT_IS_TEST_TEST_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST_CONTEXT)) #define CUT_TEST_TEST_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST_CONTEXT, CutTestContextClass)) typedef struct _CutTestContextClass CutTestContextClass; struct _CutTestContext { GObject object; }; struct _CutTestContextClass { GObjectClass parent_class; }; typedef enum { CUT_TEST_CONTEXT_ERROR_FATAL } CutTestContextError; GQuark cut_test_context_error_quark (void); GType cut_test_context_get_type (void) G_GNUC_CONST; void cut_test_context_current_init (void); void cut_test_context_current_quit (void); CutTestContext *cut_test_context_new (CutRunContext *run_context, CutTestSuite *test_suite, CutTestCase *test_case, CutTestIterator *test_iterator, CutTest *test); CutTestContext *cut_test_context_new_empty (void); CutRunContext *cut_test_context_get_run_context (CutTestContext *context); void cut_test_context_set_run_context (CutTestContext *context, CutRunContext *run_context); CutTestSuite *cut_test_context_get_test_suite (CutTestContext *context); void cut_test_context_set_test_suite (CutTestContext *context, CutTestSuite *test_suite); CutTestCase *cut_test_context_get_test_case (CutTestContext *context); void cut_test_context_set_test_case (CutTestContext *context, CutTestCase *test_case); CutTestIterator *cut_test_context_get_test_iterator (CutTestContext *context); void cut_test_context_set_test_iterator (CutTestContext *context, CutTestIterator *test_iterator); CutTest *cut_test_context_get_test (CutTestContext *context); void cut_test_context_set_test (CutTestContext *context, CutTest *test); void cut_test_context_set_multi_thread (CutTestContext *context, gboolean use_multi_thread); gboolean cut_test_context_is_multi_thread (CutTestContext *context); void cut_test_context_set_data (CutTestContext *context, CutTestData *test_data); CutTestData *cut_test_context_get_data (CutTestContext *context, guint index); void cut_test_context_shift_data (CutTestContext *context); gboolean cut_test_context_have_data (CutTestContext *context); CutTestData *cut_test_context_get_current_data (CutTestContext *context); guint cut_test_context_get_n_data (CutTestContext *context); void cut_test_context_set_failed (CutTestContext *context, gboolean failed); gboolean cut_test_context_is_failed (CutTestContext *context); gboolean cut_test_context_need_test_run (CutTestContext *context); void cut_test_context_emit_signal (CutTestContext *context, CutTestResult *result); gchar *cut_test_context_to_xml (CutTestContext *context); void cut_test_context_to_xml_string (CutTestContext *context, GString *string, guint indent); const gchar *cut_test_context_build_fixture_path_va_list (CutTestContext *context, const gchar *path, va_list args); GString *cut_test_context_get_fixture_data (CutTestContext *context, GError **error, const gchar **full_path, const gchar *path, ...) G_GNUC_NULL_TERMINATED; GString *cut_test_context_get_fixture_data_va_list (CutTestContext *context, GError **error, const gchar **full_path, const gchar *path, va_list args); gchar *cut_test_context_build_source_filename (CutTestContext *context, const gchar *filename); G_END_DECLS #endif /* __CUT_TEST_CONTEXT_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-result.c0000644000175000017500000010173311264326162021420 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-test-result.h" #include "cut-enum-types.h" #include "cut-test.h" #include "cut-test-iterator.h" #include "cut-test-case.h" #include "cut-test-suite.h" #include "cut-stream-parser.h" #include "cut-backtrace-entry.h" #include "cut-utils.h" #include "cut-readable-differ.h" #define MAX_DIFF_TARGET_SIZE 8092 #define CUT_TEST_RESULT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_TEST_RESULT, CutTestResultPrivate)) typedef struct _CutTestResultPrivate CutTestResultPrivate; struct _CutTestResultPrivate { CutTestResultStatus status; CutTest *test; CutTestIterator *test_iterator; CutTestCase *test_case; CutTestSuite *test_suite; CutTestData *test_data; gchar *message; gboolean user_set_message; gchar *user_message; gchar *system_message; GList *backtrace; GTimeVal start_time; gdouble elapsed; gchar *expected; gchar *actual; gchar *diff; gchar *folded_diff; gboolean user_set_diff; gboolean user_set_folded_diff; }; enum { PROP_0, PROP_STATUS, PROP_TEST, PROP_TEST_ITERATOR, PROP_TEST_CASE, PROP_TEST_SUITE, PROP_TEST_DATA, PROP_USER_MESSAGE, PROP_SYSTEM_MESSAGE, PROP_BACKTRACE, PROP_ELAPSED, PROP_EXPECTED, PROP_ACTUAL, PROP_DIFF, PROP_FOLDED_DIFF, }; G_DEFINE_TYPE (CutTestResult, cut_test_result, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_test_result_class_init (CutTestResultClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_enum("status", "Status", "The status of the result", CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_SUCCESS, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_STATUS, spec); spec = g_param_spec_object("test", "CutTest object", "A CutTest object", CUT_TYPE_TEST, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST, spec); spec = g_param_spec_object("test-iterator", "CutTestIterator object", "A CutTestIterator object", CUT_TYPE_TEST_ITERATOR, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST_ITERATOR, spec); spec = g_param_spec_object("test-case", "CutTestCase object", "A CutTestCase object", CUT_TYPE_TEST_CASE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST_CASE, spec); spec = g_param_spec_object("test-suite", "CutTestSuite object", "A CutTestSuite object", CUT_TYPE_TEST_SUITE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST_SUITE, spec); spec = g_param_spec_object("test-data", "CutTestData object", "A CutTestData object", CUT_TYPE_TEST_DATA, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST_DATA, spec); spec = g_param_spec_string("user-message", "User Message", "The message from user of the result", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_USER_MESSAGE, spec); spec = g_param_spec_string("system-message", "System Message", "The message from system of the result", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_SYSTEM_MESSAGE, spec); spec = g_param_spec_pointer("backtrace", "backtrace", "The backtrace of the result", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_BACKTRACE, spec); spec = g_param_spec_double("elapsed", "Elapsed time", "The time of the result", 0, G_MAXDOUBLE, 0, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_ELAPSED, spec); spec = g_param_spec_string("expected", "Expected object", "The inspected string of expected object", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_EXPECTED, spec); spec = g_param_spec_string("actual", "Actual object", "The inspected string of actual object", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_ACTUAL, spec); spec = g_param_spec_string("diff", "Difference", "The difference between expected object " "and actual object", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_DIFF, spec); spec = g_param_spec_string("folded-diff", "Folded difference", "The difference between folded expected object " "and folded actual object", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_FOLDED_DIFF, spec); g_type_class_add_private(gobject_class, sizeof(CutTestResultPrivate)); } static void cut_test_result_init (CutTestResult *result) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); priv->status = CUT_TEST_RESULT_SUCCESS; priv->test = NULL; priv->test_iterator = NULL; priv->test_case = NULL; priv->test_suite = NULL; priv->test_data = NULL; priv->message = NULL; priv->user_set_message = FALSE; priv->user_message = NULL; priv->system_message = NULL; priv->backtrace = NULL; priv->start_time.tv_sec = 0; priv->start_time.tv_usec = 0; priv->elapsed = 0.0; priv->expected = NULL; priv->actual = NULL; priv->diff = NULL; priv->folded_diff= NULL; priv->user_set_diff = FALSE; priv->user_set_folded_diff = FALSE; } static void dispose (GObject *object) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(object); if (priv->test) { g_object_unref(priv->test); priv->test = NULL; } if (priv->test_iterator) { g_object_unref(priv->test_iterator); priv->test_iterator = NULL; } if (priv->test_case) { g_object_unref(priv->test_case); priv->test_case = NULL; } if (priv->test_suite) { g_object_unref(priv->test_suite); priv->test_suite = NULL; } if (priv->test_data) { g_object_unref(priv->test_data); priv->test_data = NULL; } if (priv->message) { g_free(priv->message); priv->message = NULL; } if (priv->user_message) { g_free(priv->user_message); priv->user_message = NULL; } if (priv->system_message) { g_free(priv->system_message); priv->system_message = NULL; } if (priv->backtrace) { g_list_foreach(priv->backtrace, (GFunc)g_object_unref, NULL); g_list_free(priv->backtrace); priv->backtrace = NULL; } if (priv->expected) { g_free(priv->expected); priv->expected = NULL; } if (priv->actual) { g_free(priv->actual); priv->actual = NULL; } if (priv->diff) { g_free(priv->diff); priv->diff = NULL; } if (priv->folded_diff) { g_free(priv->folded_diff); priv->folded_diff = NULL; } G_OBJECT_CLASS(cut_test_result_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutTestResult *result; CutTestResultPrivate *priv; result = CUT_TEST_RESULT(object); priv = CUT_TEST_RESULT_GET_PRIVATE(result); switch (prop_id) { case PROP_STATUS: priv->status = g_value_get_enum(value); break; case PROP_TEST: cut_test_result_set_test(result, g_value_get_object(value)); break; case PROP_TEST_ITERATOR: cut_test_result_set_test_iterator(result, g_value_get_object(value)); break; case PROP_TEST_CASE: cut_test_result_set_test_case(result, g_value_get_object(value)); break; case PROP_TEST_SUITE: cut_test_result_set_test_suite(result, g_value_get_object(value)); break; case PROP_TEST_DATA: cut_test_result_set_test_data(result, g_value_get_object(value)); break; case PROP_USER_MESSAGE: cut_test_result_set_user_message(result, g_value_get_string(value)); break; case PROP_SYSTEM_MESSAGE: cut_test_result_set_system_message(result, g_value_get_string(value)); break; case PROP_BACKTRACE: cut_test_result_set_backtrace(result, g_value_get_pointer(value)); break; case PROP_ELAPSED: priv->elapsed = g_value_get_double(value); break; case PROP_EXPECTED: cut_test_result_set_expected(result, g_value_get_string(value)); break; case PROP_ACTUAL: cut_test_result_set_actual(result, g_value_get_string(value)); break; case PROP_DIFF: cut_test_result_set_diff(result, g_value_get_string(value)); break; case PROP_FOLDED_DIFF: cut_test_result_set_folded_diff(result, g_value_get_string(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutTestResult *result; CutTestResultPrivate *priv; result = CUT_TEST_RESULT(object); priv = CUT_TEST_RESULT_GET_PRIVATE(result); switch (prop_id) { case PROP_STATUS: g_value_set_enum(value, priv->status); break; case PROP_TEST: g_value_set_object(value, G_OBJECT(priv->test)); break; case PROP_TEST_ITERATOR: g_value_set_object(value, G_OBJECT(priv->test_iterator)); break; case PROP_TEST_CASE: g_value_set_object(value, G_OBJECT(priv->test_case)); break; case PROP_TEST_SUITE: g_value_set_object(value, G_OBJECT(priv->test_suite)); break; case PROP_TEST_DATA: g_value_set_object(value, G_OBJECT(priv->test_data)); break; case PROP_USER_MESSAGE: g_value_set_string(value, priv->user_message); break; case PROP_SYSTEM_MESSAGE: g_value_set_string(value, priv->system_message); break; case PROP_BACKTRACE: g_value_set_pointer(value, priv->backtrace); break; case PROP_ELAPSED: g_value_set_double(value, priv->elapsed); break; case PROP_EXPECTED: g_value_set_string(value, priv->expected); break; case PROP_ACTUAL: g_value_set_string(value, priv->actual); break; case PROP_DIFF: g_value_set_string(value, cut_test_result_get_diff(result)); break; case PROP_FOLDED_DIFF: g_value_set_string(value, cut_test_result_get_folded_diff(result)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutTestResult * cut_test_result_new (CutTestResultStatus status, CutTest *test, CutTestIterator *test_iterator, CutTestCase *test_case, CutTestSuite *test_suite, CutTestData *test_data, const gchar *user_message, const gchar *system_message, const GList *backtrace) { return g_object_new(CUT_TYPE_TEST_RESULT, "status", status, "test", test, "test-iterator", test_iterator, "test-case", test_case, "test-suite", test_suite, "test-data", test_data, "user-message", user_message, "system-message", system_message, "backtrace", backtrace, NULL); } CutTestResult * cut_test_result_new_empty (void) { return cut_test_result_new(CUT_TEST_RESULT_SUCCESS, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); } static void collect_result (CutStreamParser *parser, CutTestResult *result, gpointer user_data) { CutTestResult **result_store = (CutTestResult **)user_data; *result_store = result; g_object_ref(*result_store); } CutTestResult * cut_test_result_new_from_xml (const gchar *xml, gssize length, GError **error) { CutStreamParser *parser; CutTestResult *result = NULL; if (!xml) return NULL; parser = cut_test_result_parser_new(); g_signal_connect(parser, "result", G_CALLBACK(collect_result), (gpointer)(&result)); cut_stream_parser_parse(parser, xml, length, error); g_signal_handlers_disconnect_by_func(parser, collect_result, (gpointer)&result); g_object_unref(parser); return result; } CutTestResultStatus cut_test_result_get_status (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->status; } static void reset_message (CutTestResultPrivate *priv) { if (priv->user_set_message) return; if (priv->message) { g_free(priv->message); priv->message = NULL; } } const gchar * cut_test_result_get_message (CutTestResult *result) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (!priv->message) { GString *message; const gchar *diff, *folded_diff; message = g_string_new(NULL); if (priv->user_message) g_string_append(message, priv->user_message); if (priv->system_message) { if (message->len > 0) g_string_append(message, "\n"); g_string_append(message, priv->system_message); } if (priv->expected) { if (message->len > 0) g_string_append(message, "\n"); g_string_append_printf(message, "expected: <%s>", priv->expected); } if (priv->actual) { if (message->len > 0) g_string_append(message, "\n"); g_string_append_printf(message, " actual: <%s>", priv->actual); } diff = cut_test_result_get_diff(result); if (diff) { if (message->len > 0) g_string_append(message, "\n\n"); g_string_append(message, "diff:\n"); g_string_append(message, diff); } folded_diff = cut_test_result_get_folded_diff(result); if (folded_diff) { if (message->len > 0) g_string_append(message, "\n\n"); g_string_append(message, "folded diff:\n"); g_string_append(message, folded_diff); } if (message->len > 0) { priv->message = g_string_free(message, FALSE); } else { g_string_free(message, TRUE); } } return priv->message; } CutTest * cut_test_result_get_test (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->test; } CutTestIterator * cut_test_result_get_test_iterator (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->test_iterator; } CutTestCase * cut_test_result_get_test_case (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->test_case; } const gchar * cut_test_result_get_test_name (CutTestResult *result) { CutTestResultPrivate *priv; priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test) return cut_test_get_full_name(priv->test); return NULL; } const gchar * cut_test_result_get_test_iterator_name (CutTestResult *result) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test_iterator) return cut_test_get_name(CUT_TEST(priv->test_iterator)); return NULL; } const gchar * cut_test_result_get_test_case_name (CutTestResult *result) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test_case) return cut_test_get_name(CUT_TEST(priv->test_case)); return NULL; } CutTestSuite * cut_test_result_get_test_suite (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->test_suite; } const gchar * cut_test_result_get_test_suite_name (CutTestResult *result) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test_suite) return cut_test_get_name(CUT_TEST(priv->test_suite)); return NULL; } CutTestData * cut_test_result_get_test_data (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->test_data; } const gchar * cut_test_result_get_user_message (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->user_message; } const gchar * cut_test_result_get_system_message (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->system_message; } const GList * cut_test_result_get_backtrace (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->backtrace; } void cut_test_result_get_start_time (CutTestResult *result, GTimeVal *start_time) { memcpy(start_time, &(CUT_TEST_RESULT_GET_PRIVATE(result)->start_time), sizeof(GTimeVal)); } gdouble cut_test_result_get_elapsed (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->elapsed; } const gchar * cut_test_result_get_expected (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->expected; } const gchar * cut_test_result_get_actual (CutTestResult *result) { return CUT_TEST_RESULT_GET_PRIVATE(result)->actual; } const gchar * cut_test_result_get_diff (CutTestResult *result) { CutTestResultPrivate *priv; priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->diff) return priv->diff; if (priv->expected && priv->actual && strlen(priv->expected) < MAX_DIFF_TARGET_SIZE && strlen(priv->actual) < MAX_DIFF_TARGET_SIZE) { priv->diff = cut_diff_readable(priv->expected, priv->actual); if (!cut_diff_readable_is_interested(priv->diff)) { g_free(priv->diff); priv->diff = NULL; } } return priv->diff; } const gchar * cut_test_result_get_folded_diff (CutTestResult *result) { CutTestResultPrivate *priv; const gchar *diff; priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->folded_diff) return priv->folded_diff; diff = cut_test_result_get_diff(result); if (cut_diff_readable_need_fold(diff)) { priv->folded_diff = cut_diff_readable_folded(priv->expected, priv->actual); } return priv->folded_diff; } gchar * cut_test_result_to_xml (CutTestResult *result) { GString *string; string = g_string_new(NULL); cut_test_result_to_xml_string(result, string, 0); return g_string_free(string, FALSE); } static const gchar * result_status_to_name (CutTestResultStatus status) { switch (status) { case CUT_TEST_RESULT_SUCCESS: return "success"; break; case CUT_TEST_RESULT_NOTIFICATION: return "notification"; break; case CUT_TEST_RESULT_OMISSION: return "omission"; break; case CUT_TEST_RESULT_PENDING: return "pending"; break; case CUT_TEST_RESULT_FAILURE: return "failure"; break; case CUT_TEST_RESULT_ERROR: return "error"; break; case CUT_TEST_RESULT_CRASH: return "crash"; break; default: return "unknown status"; break; } } static void append_backtrace_to_string (GString *string, CutTestResult *result, guint indent) { CutTestResultPrivate *priv; GList *node; priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->backtrace == NULL) return; cut_utils_append_indent(string, indent); g_string_append(string, "\n"); for (node = priv->backtrace; node; node = g_list_next(node)) { CutBacktraceEntry *entry = node->data; cut_backtrace_entry_to_xml_string(entry, string, indent + 2); } cut_utils_append_indent(string, indent); g_string_append(string, "\n"); } static void append_test_result_to_string (GString *string, CutTestResult *result, guint indent) { CutTestResultStatus status; GTimeVal start_time; gchar *elapsed_string, *start_time_string; const gchar *message, *expected, *actual, *diff, *folded_diff; status = cut_test_result_get_status(result); message = cut_test_result_get_message(result); expected = cut_test_result_get_expected(result); actual = cut_test_result_get_actual(result); diff = cut_test_result_get_diff(result); folded_diff = cut_test_result_get_folded_diff(result); cut_utils_append_xml_element_with_value(string, indent, "status", result_status_to_name(status)); if (message) cut_utils_append_xml_element_with_value(string, indent, "detail", message); if (status != CUT_TEST_RESULT_SUCCESS) append_backtrace_to_string(string, result, indent); cut_test_result_get_start_time(result, &start_time); start_time_string = g_time_val_to_iso8601(&start_time); cut_utils_append_xml_element_with_value(string, indent, "start-time", start_time_string); g_free(start_time_string); elapsed_string = cut_utils_double_to_string(cut_test_result_get_elapsed(result)); cut_utils_append_xml_element_with_value(string, indent, "elapsed", elapsed_string); g_free(elapsed_string); if (expected) cut_utils_append_xml_element_with_value(string, indent, "expected", expected); if (actual) cut_utils_append_xml_element_with_value(string, indent, "actual", actual); if (diff) cut_utils_append_xml_element_with_value(string, indent, "diff", diff); if (folded_diff) cut_utils_append_xml_element_with_value(string, indent, "folded-diff", folded_diff); } void cut_test_result_to_xml_string (CutTestResult *result, GString *string, guint indent) { CutTestCase *test_case; CutTestIterator *test_iterator; CutTest *test; CutTestData *test_data; cut_utils_append_indent(string, indent); g_string_append(string, "\n"); test_case = cut_test_result_get_test_case(result); if (test_case) cut_test_to_xml_string(CUT_TEST(test_case), string, indent + 2); test_iterator = cut_test_result_get_test_iterator(result); if (test_iterator) cut_test_to_xml_string(CUT_TEST(test_iterator), string, indent + 2); test = cut_test_result_get_test(result); if (test) cut_test_to_xml_string(test, string, indent + 2); test_data = cut_test_result_get_test_data(result); if (test_data) cut_test_data_to_xml_string(test_data, string, indent + 2); append_test_result_to_string(string, result, indent + 2); cut_utils_append_indent(string, indent); g_string_append(string, "\n"); } const gchar * cut_test_result_status_to_signal_name (CutTestResultStatus status) { const gchar *signal_name = NULL; switch (status) { case CUT_TEST_RESULT_SUCCESS: signal_name = "success"; break; case CUT_TEST_RESULT_NOTIFICATION: signal_name = "notification"; break; case CUT_TEST_RESULT_OMISSION: signal_name = "omission"; break; case CUT_TEST_RESULT_PENDING: signal_name = "pending"; break; case CUT_TEST_RESULT_FAILURE: signal_name = "failure"; break; case CUT_TEST_RESULT_ERROR: signal_name = "error"; break; case CUT_TEST_RESULT_CRASH: signal_name = "crash"; break; default: signal_name = "invalid status"; break; } return signal_name; } gboolean cut_test_result_status_is_critical (CutTestResultStatus status) { return status > CUT_TEST_RESULT_OMISSION; } void cut_test_result_set_status (CutTestResult *result, CutTestResultStatus status) { CUT_TEST_RESULT_GET_PRIVATE(result)->status = status; } void cut_test_result_set_test (CutTestResult *result, CutTest *test) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test) { g_object_unref(priv->test); priv->test = NULL; } if (test) priv->test = g_object_ref(test); } void cut_test_result_set_test_iterator (CutTestResult *result, CutTestIterator *test_iterator) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test_iterator) { g_object_unref(priv->test_iterator); priv->test_iterator = NULL; } if (test_iterator) priv->test_iterator = g_object_ref(test_iterator); } void cut_test_result_set_test_case (CutTestResult *result, CutTestCase *test_case) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test_case) { g_object_unref(priv->test_case); priv->test_case = NULL; } if (test_case) priv->test_case = g_object_ref(test_case); } void cut_test_result_set_test_suite (CutTestResult *result, CutTestSuite *test_suite) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test_suite) { g_object_unref(priv->test_suite); priv->test_suite = NULL; } if (test_suite) priv->test_suite = g_object_ref(test_suite); } void cut_test_result_set_test_data (CutTestResult *result, CutTestData *test_data) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->test_data) { g_object_unref(priv->test_data); priv->test_data = NULL; } if (test_data) priv->test_data = g_object_ref(test_data); } void cut_test_result_set_user_message (CutTestResult *result, const gchar *user_message) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->user_message) { g_free(priv->user_message); priv->user_message = NULL; } if (user_message && user_message[0]) priv->user_message = g_strdup(user_message); reset_message(priv); } void cut_test_result_set_message (CutTestResult *result, const gchar *message) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->message) { g_free(priv->message); priv->message = NULL; } if (message) { priv->message = g_strdup(message); priv->user_set_message = TRUE; } else { priv->user_set_message = FALSE; } } void cut_test_result_set_system_message (CutTestResult *result, const gchar *system_message) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->system_message) { g_free(priv->system_message); priv->system_message = NULL; } if (system_message && system_message[0]) priv->system_message = g_strdup(system_message); reset_message(priv); } void cut_test_result_set_backtrace (CutTestResult *result, const GList *backtrace) { CutTestResultPrivate *priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->backtrace) { g_list_foreach(priv->backtrace, (GFunc)g_object_unref, NULL); g_list_free(priv->backtrace); priv->backtrace = NULL; } priv->backtrace = g_list_copy((GList *)backtrace); g_list_foreach(priv->backtrace, (GFunc)g_object_ref, NULL); } void cut_test_result_set_start_time (CutTestResult *result, GTimeVal *start_time) { memcpy(&(CUT_TEST_RESULT_GET_PRIVATE(result)->start_time), start_time, sizeof(GTimeVal)); } void cut_test_result_set_elapsed (CutTestResult *result, gdouble elapsed) { CUT_TEST_RESULT_GET_PRIVATE(result)->elapsed = elapsed; } static void reset_diff (CutTestResultPrivate *priv) { gboolean need_message_regeneration = FALSE; if (!priv->user_set_diff) { if (priv->diff) g_free(priv->diff); priv->diff = NULL; need_message_regeneration = TRUE; } if (!priv->user_set_folded_diff) { if (priv->folded_diff) g_free(priv->folded_diff); priv->folded_diff = NULL; need_message_regeneration = TRUE; } if (need_message_regeneration) reset_message(priv); } void cut_test_result_set_expected (CutTestResult *result, const gchar *expected) { CutTestResultPrivate *priv; priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->expected) { g_free(priv->expected); priv->expected = NULL; } if (expected) priv->expected = g_strdup(expected); if (priv->expected) reset_diff(priv); } void cut_test_result_set_actual (CutTestResult *result, const gchar *actual) { CutTestResultPrivate *priv; priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->actual) { g_free(priv->actual); priv->actual = NULL; } if (actual) priv->actual = g_strdup(actual); if (priv->actual) reset_diff(priv); } void cut_test_result_set_diff (CutTestResult *result, const gchar *diff) { CutTestResultPrivate *priv; priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->diff) { g_free(priv->diff); priv->diff = NULL; } if (diff && diff[0]) { priv->diff = g_strdup(diff); priv->user_set_diff = TRUE; } else { priv->user_set_diff = FALSE; } } void cut_test_result_set_folded_diff (CutTestResult *result, const gchar *folded_diff) { CutTestResultPrivate *priv; priv = CUT_TEST_RESULT_GET_PRIVATE(result); if (priv->folded_diff) { g_free(priv->folded_diff); priv->folded_diff = NULL; } if (folded_diff && folded_diff[0]) { priv->folded_diff = g_strdup(folded_diff); priv->user_set_folded_diff = TRUE; } else { priv->user_set_folded_diff = FALSE; } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-diff-writer.h0000644000175000017500000001374711407320456021362 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_DIFF_WRITER_H__ #define __CUT_DIFF_WRITER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_DIFF_WRITER (cut_diff_writer_get_type ()) #define CUT_DIFF_WRITER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_DIFF_WRITER, CutDiffWriter)) #define CUT_DIFF_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_DIFF_WRITER, CutDiffWriterClass)) #define CUT_IS_DIFF_WRITER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_DIFF_WRITER)) #define CUT_IS_DIFF_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_DIFF_WRITER)) #define CUT_DIFF_WRITER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_DIFF_WRITER, CutDiffWriterClass)) typedef struct _CutDiffWriter CutDiffWriter; typedef struct _CutDiffWriterClass CutDiffWriterClass; typedef enum { CUT_DIFF_WRITER_TAG_NONE, CUT_DIFF_WRITER_TAG_SUMMARY, CUT_DIFF_WRITER_TAG_CONTEXT, CUT_DIFF_WRITER_TAG_EQUAL_MARK, CUT_DIFF_WRITER_TAG_DELETED_MARK, CUT_DIFF_WRITER_TAG_INSERTED_MARK, CUT_DIFF_WRITER_TAG_DIFFERENCE_MARK, CUT_DIFF_WRITER_TAG_EQUAL_LINE, CUT_DIFF_WRITER_TAG_DELETED_LINE, CUT_DIFF_WRITER_TAG_INSERTED_LINE, CUT_DIFF_WRITER_TAG_DIFFERENCE_LINE, CUT_DIFF_WRITER_TAG_EQUAL_SEGMENT, CUT_DIFF_WRITER_TAG_DELETED_SEGMENT, CUT_DIFF_WRITER_TAG_INSERTED_SEGMENT, CUT_DIFF_WRITER_TAG_DIFFERENCE_SEGMENT } CutDiffWriterTag; struct _CutDiffWriter { GObject object; }; struct _CutDiffWriterClass { GObjectClass parent_class; void (*write) (CutDiffWriter *writer, const gchar *string, CutDiffWriterTag tag); void (*write_line) (CutDiffWriter *writer, const gchar *line, CutDiffWriterTag tag); void (*finish) (CutDiffWriter *writer); }; GType cut_diff_writer_get_type (void) G_GNUC_CONST; void cut_diff_writer_write (CutDiffWriter *writer, const gchar *string, CutDiffWriterTag tag); void cut_diff_writer_write_segment (CutDiffWriter *writer, const gchar *string, guint begin, guint end, CutDiffWriterTag tag); void cut_diff_writer_write_mark (CutDiffWriter *writer, const gchar *mark, const gchar *separator, CutDiffWriterTag tag); void cut_diff_writer_write_line (CutDiffWriter *writer, const gchar *line, CutDiffWriterTag tag); void cut_diff_writer_write_lines (CutDiffWriter *writer, gchar **lines, guint begin, guint end, CutDiffWriterTag tag); void cut_diff_writer_mark_line (CutDiffWriter *writer, const gchar *mark, const gchar *separator, const gchar *line, CutDiffWriterTag tag); void cut_diff_writer_mark_lines (CutDiffWriter *writer, const gchar *mark, const gchar *separator, gchar **lines, guint begin, guint end, CutDiffWriterTag tag); void cut_diff_writer_write_character_n_times (CutDiffWriter *writer, gchar character, guint n, CutDiffWriterTag tag); void cut_diff_writer_write_spaces (CutDiffWriter *writer, const gchar *string, guint begin, guint end, CutDiffWriterTag tag); void cut_diff_writer_finish (CutDiffWriter *writer); G_END_DECLS #endif /* __CUT_DIFF_WRITER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-string-diff-writer.c0000644000175000017500000000750711264632447022665 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-string-diff-writer.h" #include "cut-utils.h" #define CUT_STRING_DIFF_WRITER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_STRING_DIFF_WRITER, CutStringDiffWriterPrivate)) typedef struct _CutStringDiffWriterPrivate CutStringDiffWriterPrivate; struct _CutStringDiffWriterPrivate { GString *result; }; G_DEFINE_TYPE(CutStringDiffWriter, cut_string_diff_writer, CUT_TYPE_DIFF_WRITER) static void dispose (GObject *object); static void write (CutDiffWriter *writer, const gchar *string, CutDiffWriterTag tag); static void write_line (CutDiffWriter *writer, const gchar *line, CutDiffWriterTag tag); static void finish (CutDiffWriter *writer); static void cut_string_diff_writer_class_init (CutStringDiffWriterClass *klass) { GObjectClass *gobject_class; CutDiffWriterClass *diff_writer_class; gobject_class = G_OBJECT_CLASS(klass); diff_writer_class = CUT_DIFF_WRITER_CLASS(klass); gobject_class->dispose = dispose; diff_writer_class->write = write; diff_writer_class->write_line = write_line; diff_writer_class->finish = finish; g_type_class_add_private(gobject_class, sizeof(CutStringDiffWriterPrivate)); } static void cut_string_diff_writer_init (CutStringDiffWriter *writer) { CutStringDiffWriterPrivate *priv; priv = CUT_STRING_DIFF_WRITER_GET_PRIVATE(writer); priv->result = g_string_new(NULL); } static void dispose (GObject *object) { CutStringDiffWriterPrivate *priv; priv = CUT_STRING_DIFF_WRITER_GET_PRIVATE(object); if (priv->result) { g_string_free(priv->result, TRUE); priv->result = NULL; } G_OBJECT_CLASS(cut_string_diff_writer_parent_class)->dispose(object); } CutDiffWriter * cut_string_diff_writer_new (void) { return g_object_new(CUT_TYPE_STRING_DIFF_WRITER, NULL); } const gchar * cut_string_diff_writer_get_result (CutDiffWriter *writer) { return CUT_STRING_DIFF_WRITER_GET_PRIVATE(writer)->result->str; } static void write (CutDiffWriter *writer, const gchar *string, CutDiffWriterTag tag) { CutStringDiffWriterPrivate *priv; priv = CUT_STRING_DIFF_WRITER_GET_PRIVATE(writer); g_string_append(priv->result, string); } static void write_line (CutDiffWriter *writer, const gchar *line, CutDiffWriterTag tag) { CutStringDiffWriterPrivate *priv; priv = CUT_STRING_DIFF_WRITER_GET_PRIVATE(writer); g_string_append(priv->result, line); g_string_append_c(priv->result, '\n'); } static void finish (CutDiffWriter *writer) { CutStringDiffWriterPrivate *priv; priv = CUT_STRING_DIFF_WRITER_GET_PRIVATE(writer); if (priv->result->str[priv->result->len - 1] == '\n') g_string_truncate(priv->result, priv->result->len - 1); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-file-stream-reader.c0000644000175000017500000001622211205747026022574 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-file-stream-reader.h" #include "cut-runner.h" #define CUT_FILE_STREAM_READER_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_FILE_STREAM_READER, \ CutFileStreamReaderPrivate)) typedef struct _CutFileStreamReaderPrivate CutFileStreamReaderPrivate; struct _CutFileStreamReaderPrivate { gchar *file_name; GIOChannel *channel; guint watch_source_id; }; enum { PROP_0, PROP_FILE_NAME }; static CutRunnerIface *parent_runner_iface; static void runner_init (CutRunnerIface *iface); G_DEFINE_TYPE_WITH_CODE(CutFileStreamReader, cut_file_stream_reader, CUT_TYPE_STREAM_READER, G_IMPLEMENT_INTERFACE(CUT_TYPE_RUNNER, runner_init)) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void runner_run_async (CutRunner *runner); static void cut_file_stream_reader_class_init (CutFileStreamReaderClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("file-name", "File name", "The name of the streamed XML file", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_FILE_NAME, spec); g_type_class_add_private(gobject_class, sizeof(CutFileStreamReaderPrivate)); } static void cut_file_stream_reader_init (CutFileStreamReader *file_stream_reader) { CutFileStreamReaderPrivate *priv; priv = CUT_FILE_STREAM_READER_GET_PRIVATE(file_stream_reader); priv->file_name = NULL; priv->channel = NULL; priv->watch_source_id = 0; } static void runner_init (CutRunnerIface *iface) { parent_runner_iface = g_type_interface_peek_parent(iface); iface->run_async = runner_run_async; iface->run = NULL; } static void free_file_name (CutFileStreamReaderPrivate *priv) { if (priv->file_name) { g_free(priv->file_name); priv->file_name = NULL; } } static void remove_watch_func (CutFileStreamReaderPrivate *priv) { g_source_remove(priv->watch_source_id); priv->watch_source_id = 0; } static void dispose (GObject *object) { CutFileStreamReaderPrivate *priv; priv = CUT_FILE_STREAM_READER_GET_PRIVATE(object); free_file_name(priv); if (priv->watch_source_id) remove_watch_func(priv); if (priv->channel) { g_io_channel_unref(priv->channel); priv->channel = NULL; } G_OBJECT_CLASS(cut_file_stream_reader_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutFileStreamReaderPrivate *priv; priv = CUT_FILE_STREAM_READER_GET_PRIVATE(object); switch (prop_id) { case PROP_FILE_NAME: free_file_name(priv); priv->file_name = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutFileStreamReaderPrivate *priv; priv = CUT_FILE_STREAM_READER_GET_PRIVATE(object); switch (prop_id) { case PROP_FILE_NAME: g_value_set_string(value, priv->file_name); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutRunContext * cut_file_stream_reader_new (const gchar *file_name) { return g_object_new(CUT_TYPE_FILE_STREAM_READER, "file-name", file_name, NULL); } GQuark cut_file_stream_reader_error_quark (void) { return g_quark_from_static_string("cut-file-stream-reader-error-quark"); } #define emit_error(file_stream_reader, code, sub_error, ...) do \ { \ CutRunContext *_run_context; \ \ _run_context = CUT_RUN_CONTEXT(file_stream_reader); \ cut_run_context_emit_error(_run_context, \ CUT_FILE_STREAM_READER_ERROR, \ code, sub_error, \ __VA_ARGS__); \ emit_complete_signal(file_stream_reader, FALSE); \ } while (0) static void emit_complete_signal (CutFileStreamReader *file_stream_reader, gboolean success) { g_signal_emit_by_name(file_stream_reader, "complete-run", success); } static void runner_run_async (CutRunner *runner) { CutStreamReader *stream_reader; CutFileStreamReader *file_stream_reader; CutFileStreamReaderPrivate *priv; GError *error = NULL; file_stream_reader = CUT_FILE_STREAM_READER(runner); stream_reader = CUT_STREAM_READER(file_stream_reader); priv = CUT_FILE_STREAM_READER_GET_PRIVATE(file_stream_reader); priv->channel = g_io_channel_new_file(priv->file_name, "r", &error); if (error) { emit_error(file_stream_reader, CUT_FILE_STREAM_READER_ERROR_FILE, error, "can't open file: %s", priv->file_name); return; } g_io_channel_set_close_on_unref(priv->channel, TRUE); priv->watch_source_id = cut_stream_reader_watch_io_channel(stream_reader, priv->channel); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-file-stream-reader.h0000644000175000017500000000456511205747026022610 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_FILE_STREAM_READER_H__ #define __CUT_FILE_STREAM_READER_H__ #include #include G_BEGIN_DECLS #define CUT_FILE_STREAM_READER_ERROR (cut_file_stream_reader_error_quark()) #define CUT_TYPE_FILE_STREAM_READER (cut_file_stream_reader_get_type ()) #define CUT_FILE_STREAM_READER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_FILE_STREAM_READER, CutFileStreamReader)) #define CUT_FILE_STREAM_READER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_FILE_STREAM_READER, CutFileStreamReaderClass)) #define CUT_IS_FILE_STREAM_READER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_FILE_STREAM_READER)) #define CUT_IS_FILE_STREAM_READER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_FILE_STREAM_READER)) #define CUT_FILE_STREAM_READER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_FILE_STREAM_READER, CutFileStreamReaderClass)) typedef struct _CutFileStreamReader CutFileStreamReader; typedef struct _CutFileStreamReaderClass CutFileStreamReaderClass; struct _CutFileStreamReader { CutStreamReader object; }; struct _CutFileStreamReaderClass { CutStreamReaderClass parent_class; }; typedef enum { CUT_FILE_STREAM_READER_ERROR_FILE } CutFileStreamReaderError; GQuark cut_file_stream_reader_error_quark(void); GType cut_file_stream_reader_get_type (void) G_GNUC_CONST; CutRunContext *cut_file_stream_reader_new (const gchar *file_name); G_END_DECLS #endif /* __CUT_FILE_STREAM_READER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-repository.h0000644000175000017500000000616611205747026021356 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_REPOSITORY_H__ #define __CUT_REPOSITORY_H__ #include #include "cut-test.h" #include "cut-test-suite.h" G_BEGIN_DECLS #define CUT_TYPE_REPOSITORY (cut_repository_get_type ()) #define CUT_REPOSITORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_REPOSITORY, CutRepository)) #define CUT_REPOSITORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_REPOSITORY, CutRepositoryClass)) #define CUT_IS_REPOSITORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_REPOSITORY)) #define CUT_IS_REPOSITORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_REPOSITORY)) #define CUT_REPOSITORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_REPOSITORY, CutRepositoryClass)) typedef struct _CutRepository CutRepository; typedef struct _CutRepositoryClass CutRepositoryClass; struct _CutRepository { GObject object; }; struct _CutRepositoryClass { GObjectClass parent_class; }; GType cut_repository_get_type (void) G_GNUC_CONST; CutRepository *cut_repository_new (const gchar *directory); gboolean cut_repository_get_keep_opening_modules (CutRepository *repository); void cut_repository_set_keep_opening_modules (CutRepository *repository, gboolean keep_opening); gboolean cut_repository_get_enable_convenience_attribute_definition (CutRepository *repository); void cut_repository_set_enable_convenience_attribute_definition (CutRepository *repository, gboolean enable_convenience_attribute_definition); CutTestSuite *cut_repository_create_test_suite (CutRepository *repository); void cut_repository_set_exclude_files (CutRepository *repository, const gchar **filenames); void cut_repository_set_exclude_directories (CutRepository *repository, const gchar **directory_names); G_END_DECLS #endif /* __CUT_REPOSITORY_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-runner.h0000644000175000017500000000524511205747026021422 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_RUNNER_H__ #define __CUT_TEST_RUNNER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_TEST_RUNNER (cut_test_runner_get_type ()) #define CUT_TEST_RUNNER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST_RUNNER, CutTestRunner)) #define CUT_TEST_RUNNER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST_RUNNER, CutTestRunnerClass)) #define CUT_IS_TEST_RUNNER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST_RUNNER)) #define CUT_IS_TEST_RUNNER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST_RUNNER)) #define CUT_TEST_RUNNER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST_RUNNER, CutTestRunnerClass)) typedef struct _CutTestRunnerClass CutTestRunnerClass; struct _CutTestRunner { CutRunContext object; }; struct _CutTestRunnerClass { CutRunContextClass parent_class; }; GType cut_test_runner_get_type (void) G_GNUC_CONST; CutRunContext *cut_test_runner_new (void); gboolean cut_test_runner_run_test (CutTestRunner *runner, CutTest *test, CutTestContext *test_context); gboolean cut_test_runner_run_test_case (CutTestRunner *runner, CutTestCase *test_case); gboolean cut_test_runner_run_test_iterator(CutTestRunner *runner, CutTestIterator *test_iterator, CutTestContext *test_context); gboolean cut_test_runner_run_test_suite (CutTestRunner *runner, CutTestSuite *test_suite); G_END_DECLS #endif /* __CUT_TEST_RUNNER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-elf-loader.c0000644000175000017500000003041011205747026021131 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #ifdef HAVE_ELF_H # include #endif #include #include "cut-elf-loader.h" #define CUT_ELF_LOADER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_ELF_LOADER, CutELFLoaderPrivate)) typedef enum { ARCHITECTURE_UNKNOWN, ARCHITECTURE_32BIT, ARCHITECTURE_64BIT } ArchitectureBit; typedef struct _CutELFLoaderPrivate CutELFLoaderPrivate; struct _CutELFLoaderPrivate { gchar *so_filename; gchar *content; gsize length; ArchitectureBit bit; }; enum { PROP_0, PROP_SO_FILENAME }; G_DEFINE_TYPE(CutELFLoader, cut_elf_loader, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_elf_loader_class_init (CutELFLoaderClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("so-filename", ".so filename", "The filename of shared object", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_SO_FILENAME, spec); g_type_class_add_private(gobject_class, sizeof(CutELFLoaderPrivate)); } static void cut_elf_loader_init (CutELFLoader *loader) { CutELFLoaderPrivate *priv = CUT_ELF_LOADER_GET_PRIVATE(loader); priv->so_filename = NULL; priv->content = NULL; priv->length = 0; priv->bit = ARCHITECTURE_UNKNOWN; } static void dispose (GObject *object) { CutELFLoaderPrivate *priv = CUT_ELF_LOADER_GET_PRIVATE(object); if (priv->so_filename) { g_free(priv->so_filename); priv->so_filename = NULL; } if (priv->content) { g_free(priv->content); priv->content = NULL; } G_OBJECT_CLASS(cut_elf_loader_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutELFLoaderPrivate *priv = CUT_ELF_LOADER_GET_PRIVATE(object); switch (prop_id) { case PROP_SO_FILENAME: if (priv->so_filename) g_free(priv->so_filename); priv->so_filename = g_value_dup_string(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutELFLoaderPrivate *priv = CUT_ELF_LOADER_GET_PRIVATE(object); switch (prop_id) { case PROP_SO_FILENAME: g_value_set_string(value, priv->so_filename); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutELFLoader * cut_elf_loader_new (const gchar *so_filename) { return g_object_new(CUT_TYPE_ELF_LOADER, "so-filename", so_filename, NULL); } gboolean cut_elf_loader_is_elf (CutELFLoader *loader) { #ifdef HAVE_ELF_H CutELFLoaderPrivate *priv; GError *error = NULL; unsigned char ident[EI_NIDENT]; priv = CUT_ELF_LOADER_GET_PRIVATE(loader); if (!g_file_get_contents(priv->so_filename, &priv->content, &priv->length, &error)) { g_warning("can't read shared library file: %s", error->message); g_error_free(error); return FALSE; } if (priv->length >= sizeof(ident)) memcpy(ident, priv->content, sizeof(ident)); if ((ident[EI_MAG0] == ELFMAG0) && (ident[EI_MAG1] == ELFMAG1) && (ident[EI_MAG2] == ELFMAG2) && (ident[EI_MAG3] == ELFMAG3)) { switch (ident[EI_CLASS]) { case ELFCLASS32: priv->bit = ARCHITECTURE_32BIT; break; case ELFCLASS64: priv->bit = ARCHITECTURE_64BIT; break; default: g_warning("unknown ELF class: 0x%x", ident[EI_CLASS]); g_free(priv->content); priv->content = NULL; break; } } else { g_free(priv->content); priv->content = NULL; } if (priv->content) { uint16_t type; memcpy(&type, priv->content + sizeof(ident), sizeof(type)); if (type != ET_DYN) { g_warning("not dynamic library: 0x%x", type); g_free(priv->content); priv->content = NULL; } } return priv->content != NULL; #else return FALSE; #endif } gboolean cut_elf_loader_support_attribute (CutELFLoader *loader) { #ifdef HAVE_ELF_H return TRUE; #else return FALSE; #endif } #ifdef HAVE_ELF_H static gboolean collect_symbol_information (CutELFLoaderPrivate *priv, gsize *symbol_section_offset, gsize *symbol_entry_size, guint *n_entries, gsize *name_section_offset, uint16_t *text_section_header_index) { gboolean collected = FALSE; gsize section_offset = 0; Elf32_Ehdr *header_32 = NULL; Elf64_Ehdr *header_64 = NULL; uint16_t i, n_headers; uint16_t section_header_size; const gchar *section_names; Elf32_Shdr *dynstr_32 = NULL; Elf32_Shdr *dynsym_32 = NULL; Elf64_Shdr *dynstr_64 = NULL; Elf64_Shdr *dynsym_64 = NULL; uint16_t _text_section_header_index = 0; if (priv->bit == ARCHITECTURE_32BIT) { Elf32_Shdr *section_name_header; gsize section_name_header_offset; header_32 = (Elf32_Ehdr *)priv->content; section_offset = header_32->e_shoff; section_header_size = header_32->e_shentsize; n_headers = header_32->e_shnum; section_name_header_offset = header_32->e_shoff + (header_32->e_shstrndx * header_32->e_shentsize); section_name_header = (Elf32_Shdr *)(priv->content + section_name_header_offset); section_names = priv->content + section_name_header->sh_offset; } else { Elf64_Shdr *section_name_header; gsize section_name_header_offset; header_64 = (Elf64_Ehdr *)priv->content; section_offset = header_64->e_shoff; section_header_size = header_64->e_shentsize; n_headers = header_64->e_shnum; section_name_header_offset = header_64->e_shoff + (header_64->e_shstrndx * header_64->e_shentsize); section_name_header = (Elf64_Shdr *)(priv->content + section_name_header_offset); section_names = priv->content + section_name_header->sh_offset; } for (i = 0; i < n_headers; i++) { Elf32_Shdr *section_header_32 = NULL; Elf64_Shdr *section_header_64 = NULL; gsize offset; const gchar *section_name; offset = section_offset + (section_header_size * i); if (priv->bit == ARCHITECTURE_32BIT) { section_header_32 = (Elf32_Shdr *)(priv->content + offset); section_name = section_names + section_header_32->sh_name; } else { section_header_64 = (Elf64_Shdr *)(priv->content + offset); section_name = section_names + section_header_64->sh_name; } if (g_str_equal(section_name, ".dynstr")) { if (priv->bit == ARCHITECTURE_32BIT) { dynstr_32 = section_header_32; } else { dynstr_64 = section_header_64; } } else if (g_str_equal(section_name, ".dynsym")) { if (priv->bit == ARCHITECTURE_32BIT) { dynsym_32 = section_header_32; } else { dynsym_64 = section_header_64; } } else if (g_str_equal(section_name, ".text")) { _text_section_header_index = i; } } if (priv->bit == ARCHITECTURE_32BIT) { if (dynsym_32 && dynstr_32 && _text_section_header_index > 0) { collected = TRUE; *symbol_section_offset = dynsym_32->sh_offset;; *symbol_entry_size = dynsym_32->sh_entsize; if (*symbol_entry_size > 0) *n_entries = dynsym_32->sh_size / *symbol_entry_size; else *n_entries = 0; *name_section_offset = dynstr_32->sh_offset; *text_section_header_index = _text_section_header_index; } } else { if (dynsym_64 && dynstr_64 && _text_section_header_index > 0) { collected = TRUE; *symbol_section_offset = dynsym_64->sh_offset;; *symbol_entry_size = dynsym_64->sh_entsize; if (*symbol_entry_size > 0) *n_entries = dynsym_64->sh_size / *symbol_entry_size; else *n_entries = 0; *name_section_offset = dynstr_64->sh_offset; *text_section_header_index = _text_section_header_index; } } return collected; } #endif GList * cut_elf_loader_collect_symbols (CutELFLoader *loader) { #ifdef HAVE_ELF_H CutELFLoaderPrivate *priv; GList *symbols = NULL; gsize symbol_section_offset; gsize symbol_entry_size; guint i, n_entries; gsize name_section_offset; uint16_t text_section_header_index; priv = CUT_ELF_LOADER_GET_PRIVATE(loader); if (!collect_symbol_information(priv, &symbol_section_offset, &symbol_entry_size, &n_entries, &name_section_offset, &text_section_header_index)) return NULL; for (i = 0; i < n_entries; i++) { Elf32_Sym *symbol_32; Elf64_Sym *symbol_64; uint32_t name_index; unsigned char info, bind; uint16_t section_header_index; gsize offset; offset = symbol_section_offset + (i * symbol_entry_size); if (priv->bit == ARCHITECTURE_32BIT) { symbol_32 = (Elf32_Sym *)(priv->content + offset); name_index = symbol_32->st_name; info = symbol_32->st_info; bind = ELF32_ST_BIND(info); section_header_index = symbol_32->st_shndx; } else { symbol_64 = (Elf64_Sym *)(priv->content + offset); name_index = symbol_64->st_name; info = symbol_64->st_info; bind = ELF64_ST_BIND(info); section_header_index = symbol_64->st_shndx; } if ((info & STT_FUNC) && (bind & STB_GLOBAL) && (section_header_index == text_section_header_index)) { const gchar *name; name = priv->content + name_section_offset + name_index; symbols = g_list_prepend(symbols, g_strdup(name)); } } return symbols; #else return NULL; #endif } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-sub-process-group.c0000644000175000017500000001655611205747026022535 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "cut-main.h" #include "cut-sub-process-group.h" #include "cut-sub-process.h" #include "cut-test-context.h" #define CUT_SUB_PROCESS_GROUP_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_SUB_PROCESS_GROUP, CutSubProcessGroupPrivate)) typedef struct _CutSubProcessGroupPrivate CutSubProcessGroupPrivate; struct _CutSubProcessGroupPrivate { GList *sub_processes; CutTestContext *test_context; gint n_uncompleted_processes; gboolean all_success; }; enum { PROP_0, PROP_TEST_CONTEXT }; G_DEFINE_TYPE(CutSubProcessGroup, cut_sub_process_group, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_sub_process_group_class_init (CutSubProcessGroupClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_object("test-context", "Test context", "The test context", CUT_TYPE_TEST_CONTEXT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject_class, PROP_TEST_CONTEXT, spec); g_type_class_add_private(gobject_class, sizeof(CutSubProcessGroupPrivate)); } static void cut_sub_process_group_init (CutSubProcessGroup *sub_process_group) { CutSubProcessGroupPrivate *priv; priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(sub_process_group); priv->sub_processes = NULL; priv->test_context = NULL; priv->n_uncompleted_processes = 0; priv->all_success = TRUE; } static void dispose (GObject *object) { CutSubProcessGroupPrivate *priv; priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(object); if (priv->sub_processes) { g_list_foreach(priv->sub_processes, (GFunc)g_object_unref, NULL); g_list_free(priv->sub_processes); priv->sub_processes = NULL; } if (priv->test_context) { g_object_unref(priv->test_context); priv->test_context = NULL; } G_OBJECT_CLASS(cut_sub_process_group_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutSubProcessGroup *sub_process_group; sub_process_group = CUT_SUB_PROCESS_GROUP(object); switch (prop_id) { case PROP_TEST_CONTEXT: cut_sub_process_group_set_test_context(sub_process_group, g_value_get_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutSubProcessGroupPrivate *priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(object); switch (prop_id) { case PROP_TEST_CONTEXT: g_value_set_object(value, priv->test_context); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutSubProcessGroup * cut_sub_process_group_new (CutTestContext *test_context) { return g_object_new(CUT_TYPE_SUB_PROCESS_GROUP, "test-context", test_context, NULL); } CutTestContext * cut_sub_process_group_get_test_context (CutSubProcessGroup *sub_process_group) { return CUT_SUB_PROCESS_GROUP_GET_PRIVATE(sub_process_group)->test_context; } void cut_sub_process_group_set_test_context (CutSubProcessGroup *sub_process_group, CutTestContext *test_context) { CutSubProcessGroupPrivate *priv; priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(sub_process_group); if (priv->test_context) g_object_unref(priv->test_context); if (test_context) g_object_ref(test_context); priv->test_context = test_context; } static void cb_complete_run (CutRunContext *pipeline, gboolean success, gpointer user_data) { CutSubProcessGroup *group = user_data; CutSubProcessGroupPrivate *priv; priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(group); priv->n_uncompleted_processes--; if (!success) priv->all_success = FALSE; g_signal_handlers_disconnect_by_func(pipeline, (GFunc)cb_complete_run, user_data); } void cut_sub_process_group_add (CutSubProcessGroup *sub_process_group, CutSubProcess *sub_process) { CutSubProcessGroupPrivate *priv; CutRunContext *pipeline; priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(sub_process_group); g_object_ref(sub_process); priv->n_uncompleted_processes++; pipeline = cut_sub_process_get_pipeline(sub_process); g_signal_connect(pipeline, "complete-run", G_CALLBACK(cb_complete_run), sub_process_group); priv->sub_processes = g_list_prepend(priv->sub_processes, sub_process); } gboolean cut_sub_process_group_run (CutSubProcessGroup *sub_process_group) { CutSubProcessGroupPrivate *priv; GList *node; priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(sub_process_group); for (node = priv->sub_processes; node; node = g_list_next(node)) { CutSubProcess *sub_process = node->data; if (!cut_sub_process_run(sub_process)) priv->all_success = FALSE; } return priv->all_success; } void cut_sub_process_group_run_async (CutSubProcessGroup *sub_process_group) { CutSubProcessGroupPrivate *priv; priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(sub_process_group); g_list_foreach(priv->sub_processes, (GFunc)cut_sub_process_run_async, NULL); } gboolean cut_sub_process_group_wait (CutSubProcessGroup *sub_process_group) { CutSubProcessGroupPrivate *priv; priv = CUT_SUB_PROCESS_GROUP_GET_PRIVATE(sub_process_group); while (priv->n_uncompleted_processes > 0) cut_run_iteration(); return priv->all_success; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-module.c0000644000175000017500000002440011205747026020406 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2006 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * $Id: cut-module.c 1206 2007-04-20 10:29:28Z ktou $ */ #include #include #include #include "cut-module.h" #include "cut-module-impl.h" #define CUT_MODULE_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_MODULE, CutModulePrivate)) typedef struct _CutModulePrivate CutModulePrivate; struct _CutModulePrivate { GModule *library; gchar *mod_path; GList *registered_types; CutModuleInitFunc init; CutModuleExitFunc exit; CutModuleInstantiateFunc instantiate; }; G_DEFINE_TYPE(CutModule, cut_module, G_TYPE_TYPE_MODULE) static void finalize (GObject *object); static gboolean load (GTypeModule *module); static void unload (GTypeModule *module); static void _cut_module_show_error (GModule *module); static GModule *_cut_module_open (const gchar *mod_path); static void _cut_module_close (GModule *module); static gboolean _cut_module_load_func (GModule *module, const gchar *func_name, gpointer *symbol); static gboolean _cut_module_match_name (const gchar *mod_path, const gchar *name); static void cut_module_class_init (CutModuleClass *klass) { GObjectClass *gobject_class; GTypeModuleClass *type_module_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->finalize = finalize; type_module_class = G_TYPE_MODULE_CLASS(klass); type_module_class->load = load; type_module_class->unload = unload; g_type_class_add_private(gobject_class, sizeof(CutModulePrivate)); } static void cut_module_init (CutModule *module) { CutModulePrivate *priv = CUT_MODULE_GET_PRIVATE(module); priv->library = NULL; priv->mod_path = NULL; priv->registered_types = NULL; } static void finalize (GObject *object) { CutModulePrivate *priv = CUT_MODULE_GET_PRIVATE(object); g_free(priv->mod_path); priv->mod_path = NULL; g_list_free(priv->registered_types); priv->registered_types = NULL; G_OBJECT_CLASS(cut_module_parent_class)->finalize(object); } static gboolean load (GTypeModule *module) { CutModulePrivate *priv = CUT_MODULE_GET_PRIVATE(module); priv->library = _cut_module_open(priv->mod_path); if (!priv->library) return FALSE; if (!_cut_module_load_func(priv->library, G_STRINGIFY(CUT_MODULE_IMPL_INIT), (gpointer)&priv->init) || !_cut_module_load_func(priv->library, G_STRINGIFY(CUT_MODULE_IMPL_EXIT), (gpointer)&priv->exit) || !_cut_module_load_func(priv->library, G_STRINGIFY(CUT_MODULE_IMPL_INSTANTIATE), (gpointer)&priv->instantiate)) { _cut_module_close(priv->library); priv->library = NULL; return FALSE; } g_list_free(priv->registered_types); priv->registered_types = priv->init(module); return TRUE; } static void unload (GTypeModule *module) { CutModulePrivate *priv = CUT_MODULE_GET_PRIVATE(module); priv->exit(); _cut_module_close(priv->library); priv->library = NULL; priv->init = NULL; priv->exit = NULL; priv->instantiate = NULL; g_list_free(priv->registered_types); priv->registered_types = NULL; } GList * cut_module_collect_registered_types (GList *modules) { GList *results = NULL; GList *node; for (node = modules; node; node = g_list_next(node)) { CutModule *module = node->data; GTypeModule *g_type_module; g_type_module = G_TYPE_MODULE(module); if (g_type_module_use(g_type_module)) { CutModulePrivate *priv; GList *node; priv = CUT_MODULE_GET_PRIVATE(module); for (node = priv->registered_types; node; node = g_list_next(node)) { results = g_list_prepend(results, node->data); } g_type_module_unuse(g_type_module); } } return results; } GList * cut_module_collect_names (GList *modules) { GList *results = NULL; GList *node; for (node = modules; node; node = g_list_next(node)) { CutModule *module; module = node->data; results = g_list_prepend(results, G_TYPE_MODULE(module)->name); } return results; } static void _cut_module_show_error (GModule *module) { const gchar *module_error_message; module_error_message = g_module_error(); if (!module_error_message) return; if (module) { g_warning("%s: %s", g_module_name(module), module_error_message); } else { g_warning("%s", module_error_message); } } CutModule * cut_module_find (GList *modules, const gchar *name) { GList *node; for (node = modules; node; node = g_list_next(node)) { CutModule *module = node->data; CutModulePrivate *priv; priv = CUT_MODULE_GET_PRIVATE(module); if (_cut_module_match_name(priv->mod_path, name)) return module; } return NULL; } GObject * cut_module_instantiate (CutModule *module, const gchar *first_property, va_list var_args) { GObject *object = NULL; CutModulePrivate *priv; priv = CUT_MODULE_GET_PRIVATE(module); if (g_type_module_use(G_TYPE_MODULE(module))) { object = priv->instantiate(first_property, var_args); g_type_module_unuse(G_TYPE_MODULE(module)); } return object; } static GModule * _cut_module_open (const gchar *mod_path) { GModule *module; module = g_module_open(mod_path, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL); if (!module) { _cut_module_show_error(NULL); } return module; } static void _cut_module_close (GModule *module) { if (module && g_module_close(module)) { _cut_module_show_error(NULL); } } static gchar * _cut_module_module_file_name (const gchar *name) { return g_strconcat(name, "." G_MODULE_SUFFIX, NULL); } static gboolean _cut_module_load_func (GModule *module, const gchar *func_name, gpointer *symbol) { g_return_val_if_fail(module, FALSE); if (g_module_symbol(module, func_name, symbol)) { return TRUE; } else { _cut_module_show_error(module); return FALSE; } } CutModule * cut_module_load_module (const gchar *base_dir, const gchar *name) { gchar *mod_base_name, *mod_path; CutModule *module = NULL; mod_base_name = g_build_filename(base_dir, name, NULL); if (g_str_has_suffix(mod_base_name, G_MODULE_SUFFIX)) { mod_path = mod_base_name; } else { mod_path = _cut_module_module_file_name(mod_base_name); g_free(mod_base_name); } if (g_file_test(mod_path, G_FILE_TEST_EXISTS)) { CutModulePrivate *priv; gchar *mod_name; module = g_object_new(CUT_TYPE_MODULE, NULL); priv = CUT_MODULE_GET_PRIVATE(module); priv->mod_path = g_strdup(mod_path); mod_name = g_strdup(name); if (g_str_has_suffix(mod_name, "."G_MODULE_SUFFIX)) { guint last_index; last_index = strlen(mod_name) - strlen("."G_MODULE_SUFFIX); mod_name[last_index] = '\0'; } g_type_module_set_name(G_TYPE_MODULE(module), mod_name); g_free(mod_name); } g_free(mod_path); return module; } GList * cut_module_load_modules (const gchar *base_dir) { return cut_module_load_modules_unique(base_dir, NULL); } GList * cut_module_load_modules_unique (const gchar *base_dir, GList *exist_modules) { GDir *dir; GSList *sorted_entries = NULL; GSList *node = NULL; GList *modules = NULL; const gchar *entry; dir = g_dir_open(base_dir, 0, NULL); if (!dir) return exist_modules; while ((entry = g_dir_read_name(dir))) { sorted_entries = g_slist_prepend(sorted_entries, g_strdup(entry)); } sorted_entries = g_slist_sort(sorted_entries, (GCompareFunc)strcmp); for (node = sorted_entries; node; node = g_slist_next(node)) { CutModule *module; GTypeModule *g_module; entry = node->data; module = cut_module_load_module(base_dir, entry); if (!module) continue; g_module = G_TYPE_MODULE(module); if (cut_module_find(exist_modules, g_module->name)) cut_module_unload(module); else modules = g_list_prepend(modules, module); } g_slist_foreach(sorted_entries, (GFunc)g_free, NULL); g_slist_free(sorted_entries); g_dir_close(dir); return g_list_concat(modules, exist_modules); } static gboolean _cut_module_match_name (const gchar *mod_path, const gchar *name) { gboolean matched; gchar *module_base_name, *normalized_matched_name; module_base_name = g_path_get_basename(mod_path); normalized_matched_name = g_strconcat(name, "." G_MODULE_SUFFIX, NULL); matched = (0 == strcmp(module_base_name, normalized_matched_name)); g_free(module_base_name); g_free(normalized_matched_name); return matched; } void cut_module_unload (CutModule *module) { GTypeModule *type_module; g_return_if_fail(CUT_IS_MODULE(module)); type_module = G_TYPE_MODULE(module); if (type_module->type_infos || type_module->interface_infos) return; g_object_unref(module); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-utils.c0000644000175000017500000006336211523751075020275 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #ifdef G_OS_WIN32 # include # include # define close _close #endif #include #include "cut-utils.h" #include "cut-sub-process.h" #include "cut-sub-process-group.h" #include "cut-readable-differ.h" #include "cut-main.h" #include "cut-backtrace-entry.h" #include "../gcutter/gcut-public.h" #include "../gcutter/gcut-error.h" #include "../gcutter/gcut-assertions-helper.h" #ifndef CUT_DISABLE_SOCKET_SUPPORT # ifdef CUT_HAVE_WINSOCK2_H # include # include # else # include # include # include # include # ifdef HAVE_SYS_UN_H # include # endif # endif #endif gchar * cut_utils_create_regex_pattern (const gchar *string) { gchar *pattern; if (!string) { pattern = g_strdup(".*"); } else if (strlen(string) > 1 && g_str_has_prefix(string, "/") && g_str_has_suffix(string, "/")) { pattern = g_strndup(string + 1, strlen(string) - 2); } else { gchar *escaped_string; escaped_string = g_regex_escape_string(string, -1); pattern = g_strdup_printf("^%s$", escaped_string); g_free(escaped_string); } return pattern; } GList * cut_utils_filter_to_regexs (const gchar **filter) { GList *regexs = NULL; for (; *filter; filter++) { GRegex *regex; gchar *pattern; GError *error = NULL; if (*filter[0] == '\0') continue; pattern = cut_utils_create_regex_pattern(*filter); regex = g_regex_new(pattern, 0, 0, &error); if (regex) { regexs = g_list_prepend(regexs, regex); } else { cut_utils_report_error(error); } g_free(pattern); } return regexs; } gboolean cut_utils_filter_match (GList *regexs, const gchar *name) { GList *node; for (node = regexs; node; node = g_list_next(node)) { GRegex *regex = node->data; if (g_regex_match(regex, name, 0, NULL)) return TRUE; } return FALSE; } gchar * cut_utils_inspect_memory (const void *memory, size_t size) { const guchar *binary = memory; GString *buffer; size_t i, n_printable_characters; size_t max_size = 1024; if (memory == NULL || size == 0) return g_strdup("(null)"); buffer = g_string_sized_new(size * strlen("0xXX") + (size - 1) * strlen(" ") + strlen(": ") + size); max_size = MIN(size, max_size); n_printable_characters = 0; for (i = 0; i < max_size; i++) { g_string_append_printf(buffer, "0x%02x ", binary[i]); if (g_ascii_isprint(binary[i])) n_printable_characters++; } if (size > max_size) g_string_append(buffer, "... "); if (n_printable_characters >= max_size * 0.3) { g_string_overwrite(buffer, buffer->len - 1, ": "); for (i = 0; i < max_size; i++) { if (g_ascii_isprint(binary[i])) { g_string_append_c(buffer, binary[i]); } else { g_string_append_c(buffer, '.'); } } if (size > max_size) g_string_append(buffer, "..."); } else { g_string_truncate(buffer, buffer->len - 1); } return g_string_free(buffer, FALSE); } gboolean cut_utils_equal_string (const gchar *string1, const gchar *string2) { if (string1 == string2) return TRUE; if (string1 == NULL || string2 == NULL) return FALSE; return g_str_equal(string1, string2); } gboolean cut_utils_equal_substring (const gchar *string1, const gchar *string2, size_t length) { if (string1 == string2) return TRUE; if (string1 == NULL || string2 == NULL) return FALSE; return strncmp(string1, string2, length) == 0; } gboolean cut_utils_equal_double (gdouble double1, gdouble double2, gdouble error) { return fabs(double1 - double2) <= error; } gboolean cut_utils_equal_string_array (gchar **strings1, gchar **strings2) { gint i, length; if (!strings1 && !strings2) return TRUE; if (!strings1 || !strings2) return FALSE; length = g_strv_length(strings1); if (length != g_strv_length(strings2)) return FALSE; for (i = 0; i < length; i++) { if (strcmp(strings1[i], strings2[i])) return FALSE; } return TRUE; } static void cut_utils_inspect_string_to_gstring (GString *inspected, const gchar *string) { if (!string) { g_string_append(inspected, "(null)"); return; } g_string_append_c(inspected, '"'); for (; string[0]; string++) { switch (string[0]) { case '"': g_string_append(inspected, "\\\""); break; case '\\': g_string_append(inspected, "\\\\"); break; default: g_string_append_c(inspected, string[0]); break; } } g_string_append_c(inspected, '"'); } gchar * cut_utils_inspect_string_array (gchar **strings) { GString *inspected; gchar **string, **next_string; if (!strings) return g_strdup("(null)"); inspected = g_string_new("["); string = strings; while (*string) { cut_utils_inspect_string_to_gstring(inspected, *string); next_string = string + 1; if (*next_string) g_string_append(inspected, ", "); string = next_string; } g_string_append(inspected, "]"); return g_string_free(inspected, FALSE); } gchar * cut_utils_inspect_string (const gchar *string) { GString *inspected; inspected = g_string_new(NULL); cut_utils_inspect_string_to_gstring(inspected, string); return g_string_free(inspected, FALSE); } #ifndef CUT_DISABLE_SOCKET_SUPPORT gboolean cut_utils_equal_sockaddr (const struct sockaddr *address1, const struct sockaddr *address2) { if (address1 == address2) return TRUE; if (!address1 || !address2) return FALSE; if (address1->sa_family != address2->sa_family) return FALSE; switch (address1->sa_family) { #ifdef HAVE_SYS_UN_H case AF_UNIX: { struct sockaddr_un *address_unix1 = (struct sockaddr_un *)address1; struct sockaddr_un *address_unix2 = (struct sockaddr_un *)address2; return cut_utils_equal_string(address_unix1->sun_path, address_unix2->sun_path); break; } #endif case AF_INET: { struct sockaddr_in *address_inet1 = (struct sockaddr_in *)address1; struct sockaddr_in *address_inet2 = (struct sockaddr_in *)address2; if (address_inet1->sin_addr.s_addr != address_inet2->sin_addr.s_addr) return FALSE; if (address_inet1->sin_port != address_inet2->sin_port) return FALSE; return TRUE; break; } case AF_INET6: { struct sockaddr_in6 *address_inet6_1 = (struct sockaddr_in6 *)address1; struct sockaddr_in6 *address_inet6_2 = (struct sockaddr_in6 *)address2; if (memcmp(address_inet6_1->sin6_addr.s6_addr, address_inet6_2->sin6_addr.s6_addr, sizeof(address_inet6_1->sin6_addr.s6_addr)) != 0) return FALSE; if (address_inet6_1->sin6_port != address_inet6_2->sin6_port) return FALSE; return TRUE; break; } case AF_UNSPEC: return TRUE; break; default: return FALSE; break; } return FALSE; } #ifdef G_OS_WIN32 # if !defined(NTDDI_VERSION) || (NTDDI_VERSION < NTDDI_LONGHORN) static const char * inet_ntop (int address_family, const void *source, char *destination, socklen_t destination_length) { DWORD socket_address_length; DWORD winsock_destination_length = destination_length; switch (address_family) { case AF_INET: socket_address_length = sizeof(struct sockaddr_in); break; case AF_INET6: socket_address_length = sizeof(struct sockaddr_in6); break; default: return NULL; break; } if (WSAAddressToString((LPSOCKADDR)source, socket_address_length, NULL, destination, &winsock_destination_length)) { return NULL; } else { return destination; } } # endif #endif gchar * cut_utils_inspect_sockaddr (const struct sockaddr *address) { gchar *spec = NULL; if (!address) return g_strdup("(null)"); switch (address->sa_family) { #ifdef HAVE_SYS_UN_H case AF_UNIX: { struct sockaddr_un *address_unix = (struct sockaddr_un *)address; spec = g_strdup_printf("unix:%s", address_unix->sun_path); break; } #endif case AF_INET: { struct sockaddr_in *address_inet = (struct sockaddr_in *)address; gchar ip_address_string[INET_ADDRSTRLEN]; if (inet_ntop(AF_INET, &address_inet->sin_addr, (gchar *)ip_address_string, INET_ADDRSTRLEN)) { spec = g_strdup_printf("inet:%s:%d", ip_address_string, g_ntohs(address_inet->sin_port)); } break; } case AF_INET6: { struct sockaddr_in6 *address_inet6 = (struct sockaddr_in6 *)address; gchar ip_address_string[INET6_ADDRSTRLEN]; if (inet_ntop(AF_INET6, &address_inet6->sin6_addr, (gchar *)ip_address_string, INET6_ADDRSTRLEN)) { spec = g_strdup_printf("inet6:[%s]:%d", ip_address_string, g_ntohs(address_inet6->sin6_port)); } break; } case AF_UNSPEC: spec = g_strdup("unknown"); break; default: spec = g_strdup_printf("unexpected:%d", address->sa_family); break; } return spec; } #endif gboolean cut_utils_path_exist (const gchar *path) { return g_file_test(path, G_FILE_TEST_EXISTS); } gboolean cut_utils_regex_match (const gchar *pattern, const gchar *string) { return g_regex_match_simple(pattern, string, G_REGEX_MULTILINE, 0); } gchar * cut_utils_regex_replace (const gchar *pattern, const gchar *string, const gchar *replacement, GError **error) { GRegex *regex; gchar *replaced; regex = g_regex_new(pattern, G_REGEX_MULTILINE, 0, error); if (!regex) return NULL; replaced = g_regex_replace(regex, string, -1, 0, replacement, 0, error); g_regex_unref(regex); return replaced; } const gchar * cut_utils_get_fixture_data (CutTestContext *context, const gchar **fixture_data_path, gsize *size, const char *path, ...) { const gchar *data; va_list args; va_start(args, path); data = cut_utils_get_fixture_data_va_list(context, fixture_data_path, size, path, args); va_end(args); return data; } const gchar * cut_utils_get_fixture_data_va_list (CutTestContext *context, const gchar **fixture_data_path, gsize *size, const gchar *path, va_list args) { GString *fixture_data; fixture_data = gcut_utils_get_fixture_data_va_list(context, fixture_data_path, path, args); if (!fixture_data) return NULL; if (size) *size = fixture_data->len; return fixture_data->str; } void cut_utils_append_indent (GString *string, guint size) { guint i; for (i = 0; i < size; i++) g_string_append_c(string, ' '); } void cut_utils_append_xml_element_with_value (GString *string, guint indent, const gchar *element_name, const gchar *value) { gchar *escaped; cut_utils_append_indent(string, indent); escaped = g_markup_printf_escaped("<%s>%s\n", element_name, value, element_name); g_string_append(string, escaped); g_free(escaped); } void cut_utils_append_xml_element_with_boolean_value (GString *string, guint indent, const gchar *element_name, gboolean boolean) { cut_utils_append_xml_element_with_value(string, indent, element_name, boolean ? "true" : "false"); } gchar ** cut_utils_strv_concat (const gchar **string_array, ...) { guint length, i; guint args_length = 0; va_list args; gchar *string; gchar **new_string_array; if (!string_array) return NULL; length = g_strv_length((gchar **)string_array); va_start(args, string_array); string = va_arg(args, gchar*); while (string) { args_length++; string = va_arg(args, gchar*); } va_end(args); new_string_array = g_new(gchar*, length + args_length + 1); for (i = 0; i < length; i++) { new_string_array[i] = g_strdup(string_array[i]); } va_start(args, string_array); string = va_arg(args, gchar*); while (string) { new_string_array[i] = g_strdup(string); i++; string = va_arg(args, gchar*); } va_end(args); new_string_array[i] = NULL; return new_string_array; } void cut_utils_close_pipe (int *pipe, CutPipeMode mode) { if (pipe[mode] == -1) return; close(pipe[mode]); pipe[mode] = -1; } const gchar * cut_utils_get_cutter_command_path (void) { const gchar *cutter_command; cutter_command = g_getenv("CUTTER"); if (cutter_command) return cutter_command; cutter_command = cut_get_cutter_command_path(); if (cutter_command) return cutter_command; return g_get_prgname(); } gchar * cut_utils_build_path (const gchar *path, ...) { char *built_path; va_list args; va_start(args, path); built_path = cut_utils_build_path_va_list(path, args); va_end(args); return built_path; } gchar * cut_utils_build_path_va_list (const gchar *path, va_list args) { GArray *elements; gchar *element, *concatenated_path; if (!path) return NULL; elements = g_array_new(TRUE, FALSE, sizeof(char *)); g_array_append_val(elements, path); while ((element = va_arg(args, gchar *))) { g_array_append_val(elements, element); } concatenated_path = cut_utils_build_path_array((const gchar **)(elements->data)); g_array_free(elements, TRUE); return concatenated_path; } gchar * cut_utils_build_path_array (const gchar **paths) { return g_build_filenamev((gchar **)paths); } gchar * cut_utils_expand_path (const gchar *path) { if (!path) return NULL; if (g_path_is_absolute(path)) { return g_strdup(path); } else { gchar *current_dir, *full_path; current_dir = g_get_current_dir(); full_path = g_build_filename(current_dir, path, NULL); g_free(current_dir); return full_path; } } gchar * cut_utils_expand_path_va_list (const gchar *path, va_list args) { gchar *concatenated_path, *expanded_path; if (!path) return NULL; concatenated_path = cut_utils_build_path_va_list(path, args); expanded_path = cut_utils_expand_path(concatenated_path); g_free(concatenated_path); return expanded_path; } gboolean cut_utils_remove_path (const char *path, GError **error) { if (!g_file_test(path, G_FILE_TEST_EXISTS)) { g_set_error(error, G_FILE_ERROR, G_FILE_ERROR_NOENT, "path doesn't exist: %s", path); return FALSE; } if (g_file_test(path, G_FILE_TEST_IS_DIR)) { if (g_rmdir(path) == -1) { g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errno), "can't remove directory: %s", path); return FALSE; } } else { if (g_unlink(path) == -1) { g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errno), "can't remove path: %s", path); return FALSE; } } return TRUE; } gboolean cut_utils_remove_path_recursive (const char *path, GError **error) { if (g_file_test(path, G_FILE_TEST_IS_DIR)) { GDir *dir; const gchar *name; gboolean success = TRUE; dir = g_dir_open(path, 0, error); if (!dir) return FALSE; while ((name = g_dir_read_name(dir))) { gchar *full_path; full_path = g_build_filename(path, name, NULL); success = cut_utils_remove_path_recursive(full_path, error); g_free(full_path); if (!success) break; } g_dir_close(dir); if (!success) return FALSE; } return cut_utils_remove_path(path, error); } void cut_utils_remove_path_recursive_force (const gchar *path) { cut_utils_remove_path_recursive(path, NULL); } void cut_utils_make_directory_recursive_force (const gchar *path) { g_mkdir_with_parents(path, 0700); } gchar * cut_utils_append_diff (const gchar *message, const gchar *from, const gchar *to) { gchar *diff, *result; diff = cut_diff_readable(from, to); if (cut_diff_readable_is_interested(diff)) { result = g_strdup_printf("%s\n" "\n" "diff:\n" "%s", message, diff); if (cut_diff_readable_need_fold(diff)) { gchar *folded_diff, *original_result; original_result = result; folded_diff = cut_diff_readable_folded(from, to); result = g_strdup_printf("%s\n" "\n" "folded diff:\n" "%s", original_result, folded_diff); g_free(original_result); g_free(folded_diff); } } else { result = g_strdup(message); } g_free(diff); return result; } gchar * cut_utils_fold (const gchar *string) { GRegex *fold_re; GArray *folded_lines; gchar **lines, **line; gchar *folded_string; guint i; fold_re = g_regex_new("(.{78})", 0, 0, NULL); folded_lines = g_array_new(TRUE, FALSE, sizeof(gchar *)); lines = g_regex_split_simple("\r?\n", string, 0, 0); for (line = lines; *line; line++) { gchar *folded_line; folded_line = g_regex_replace(fold_re, *line, -1, 0, "\\1\n", 0, NULL); g_array_append_val(folded_lines, folded_line); } g_strfreev(lines); folded_string = g_strjoinv("\n", (gchar **)(folded_lines->data)); for (i = 0; i < folded_lines->len; i++) { gchar *folded_line; folded_line = g_array_index(folded_lines, gchar *, i); g_free(folded_line); } g_array_free(folded_lines, TRUE); g_regex_unref(fold_re); return folded_string; } CutSubProcess * cut_utils_take_new_sub_process (const char *test_directory, CutTestContext *test_context) { CutSubProcess *sub_process; sub_process = cut_sub_process_new(test_directory, test_context); cut_test_context_take_g_object(test_context, G_OBJECT(sub_process)); return sub_process; } CutSubProcessGroup * cut_utils_take_new_sub_process_group (CutTestContext *test_context) { CutSubProcessGroup *group; group = cut_sub_process_group_new(test_context); cut_test_context_take_g_object(test_context, G_OBJECT(group)); return group; } typedef enum { GDB_BACKTRACE_START, GDB_BACKTRACE_IN, GDB_BACKTRACE_FUNCTION, GDB_BACKTRACE_ARGUMENTS, GDB_BACKTRACE_ARGUMENTS_END, GDB_BACKTRACE_AT, GDB_BACKTRACE_LINE } GdbBacktraceState; GList * cut_utils_parse_gdb_backtrace (const gchar *gdb_backtrace) { GList *backtraces = NULL; while (gdb_backtrace && gdb_backtrace[0]) { CutBacktraceEntry *entry; gchar *file = NULL; guint line = 0; gchar *function = NULL; gchar *info = NULL; const gchar *start_point = NULL; GdbBacktraceState state = GDB_BACKTRACE_START; while (gdb_backtrace[0] && gdb_backtrace[0] != '\n') { switch (state) { case GDB_BACKTRACE_START: if (gdb_backtrace[0] == 'i' && gdb_backtrace[1] == 'n') { gdb_backtrace++; state = GDB_BACKTRACE_IN; } break; case GDB_BACKTRACE_IN: if (start_point) { if (gdb_backtrace[0] == ' ') { function = g_strndup(start_point, gdb_backtrace - start_point); state = GDB_BACKTRACE_ARGUMENTS; start_point = NULL; } } else { if (gdb_backtrace[0] != ' ') start_point = gdb_backtrace; } break; case GDB_BACKTRACE_ARGUMENTS: if (gdb_backtrace[0] == ')') state = GDB_BACKTRACE_ARGUMENTS_END; break; case GDB_BACKTRACE_ARGUMENTS_END: if (gdb_backtrace[0] == 'a' && gdb_backtrace[1] == 't') { gdb_backtrace ++; state = GDB_BACKTRACE_AT; } break; case GDB_BACKTRACE_AT: if (start_point) { if (gdb_backtrace[0] == ':') { file = g_strndup(start_point, gdb_backtrace - start_point); state = GDB_BACKTRACE_LINE; start_point = NULL; } } else { if (gdb_backtrace[0] != ' ') start_point = gdb_backtrace; } break; case GDB_BACKTRACE_LINE: if (start_point) { if (gdb_backtrace[1] == '\n') { line = atoi(start_point); start_point = NULL; } } else { start_point = gdb_backtrace; } break; default: break; } gdb_backtrace++; } entry = cut_backtrace_entry_new(file ? file : "unknown", line, function, info); backtraces = g_list_append(backtraces, entry); if (file) g_free(file); if (function) g_free(function); if (info) g_free(info); gdb_backtrace++; } return backtraces; } gchar * cut_utils_double_to_string (gdouble value) { gint i; gchar *string; string = g_strdup_printf("%f", value); for (i = 0; string[i]; i++) { if (string[i] == ',') string[i] = '.'; } return string; } gint cut_utils_compare_string (gconstpointer data1, gconstpointer data2) { if (data1 == NULL && data2 == NULL) return 0; if (data1 == NULL) return -1; if (data2 == NULL) return 1; return strcmp(data1, data2); } gint cut_utils_compare_direct (gconstpointer data1, gconstpointer data2) { guint value1, value2; value1 = GPOINTER_TO_UINT(data1); value2 = GPOINTER_TO_UINT(data2); if (value1 == value2) { return 0; } else if (value1 < value2) { return -1; } else { return 1; } } #ifdef G_OS_WIN32 static gchar *win32_base_path = NULL; const gchar * cut_win32_base_path (void) { if (win32_base_path) return win32_base_path; win32_base_path = g_win32_get_package_installation_directory_of_module(NULL); return win32_base_path; } gchar * cut_win32_build_module_dir_name (const gchar *type) { return g_build_filename(cut_win32_base_path(), "lib", PACKAGE, "module", type, NULL); } gchar * cut_win32_build_factory_module_dir_name (const gchar *type) { gchar *module_dir, *factory_module_dir; module_dir = cut_win32_build_module_dir_name("factory"); factory_module_dir = g_build_filename(module_dir, type, NULL); g_free(module_dir); return factory_module_dir; } gboolean cut_win32_kill_process (GPid pid, guint exit_code) { return TerminateProcess(pid, exit_code) ? TRUE : FALSE; } #endif /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-public.h0000644000175000017500000003037211523751075020413 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_PUBLIC_H__ #define __CUT_PUBLIC_H__ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #ifdef CUT_HAVE_INTTYPES_H # include #elif defined(CUT_HAVE_STDINT_H) # include #endif #ifndef CUT_DISABLE_SOCKET_SUPPORT # ifdef CUT_HAVE_WINSOCK2_H # include # include # else # include # ifdef CUT_HAVE_SYS_UN_H # include # endif # endif #endif #include #include #include typedef struct _CutTestContext CutTestContext; typedef enum { CUT_TEST_RESULT_INVALID = -1, CUT_TEST_RESULT_SUCCESS, CUT_TEST_RESULT_NOTIFICATION, CUT_TEST_RESULT_OMISSION, CUT_TEST_RESULT_PENDING, CUT_TEST_RESULT_FAILURE, CUT_TEST_RESULT_ERROR, CUT_TEST_RESULT_CRASH, CUT_TEST_RESULT_LAST } CutTestResultStatus; void cut_test_context_current_push(CutTestContext *context); CutTestContext *cut_test_context_current_pop (void); CutTestContext *cut_test_context_current_peek(void); void cut_test_context_keep_user_message (CutTestContext *context); void cut_test_context_set_user_message (CutTestContext *context, const char *format, ...) CUT_GNUC_PRINTF(2, 3); void cut_test_context_set_user_message_backward_compatibility (CutTestContext *context, const char *format, ...); void cut_test_context_set_user_message_va_list (CutTestContext *context, const char *format, va_list args); void cut_test_context_check_optional_assertion_message (CutTestContext *context); void cut_test_context_set_expected (CutTestContext *context, const char *expected); void cut_test_context_set_actual (CutTestContext *context, const char *actual); void cut_test_context_pass_assertion (CutTestContext *context); void cut_test_context_set_current_result (CutTestContext *context, CutTestResultStatus status, const char *system_message); void cut_test_context_set_current_result_user_message (CutTestContext *context, const char *user_message); void cut_test_context_process_current_result (CutTestContext *context); cut_boolean cut_test_context_get_have_current_result (CutTestContext *context); void cut_test_context_register_result (CutTestContext *context, CutTestResultStatus status, const char *system_message); void cut_test_context_start_user_message_jump (CutTestContext *context); void cut_test_context_finish_user_message_jump (CutTestContext *context); cut_boolean cut_test_context_in_user_message_jump (CutTestContext *context); void cut_test_context_set_jump (CutTestContext *context, jmp_buf *buffer); jmp_buf *cut_test_context_get_jump (CutTestContext *context); void cut_test_context_long_jump (CutTestContext *context) CUT_GNUC_NORETURN; const void *cut_test_context_take (CutTestContext *context, void *object, CutDestroyFunction destroy_function); const void *cut_test_context_take_memory (CutTestContext *context, void *memory); const char *cut_test_context_take_string (CutTestContext *context, char *string); const char *cut_test_context_take_strdup (CutTestContext *context, const char *string); const char *cut_test_context_take_strndup (CutTestContext *context, const char *string, size_t size); const void *cut_test_context_take_memdup (CutTestContext *context, const void *memory, size_t size); const char *cut_test_context_take_printf (CutTestContext *context, const char *format, ...) CUT_GNUC_PRINTF(2, 3); const char **cut_test_context_take_string_array (CutTestContext *context, char **strings); char *cut_utils_inspect_memory (const void *memory, size_t size); cut_boolean cut_utils_equal_string (const char *string1, const char *string2); cut_boolean cut_utils_equal_substring (const char *string1, const char *string2, size_t length); cut_boolean cut_utils_equal_double (double double1, double double2, double error); cut_boolean cut_utils_equal_string_array (char **strings1, char **strings2); char *cut_utils_inspect_string_array (char **strings); char *cut_utils_inspect_string (const char *string); #ifndef CUT_DISABLE_SOCKET_SUPPORT cut_boolean cut_utils_equal_sockaddr (const struct sockaddr *address1, const struct sockaddr *address2); char *cut_utils_inspect_sockaddr (const struct sockaddr *address); #endif cut_boolean cut_utils_path_exist (const char *path); char *cut_utils_build_path (const char *path, ...) CUT_GNUC_NULL_TERMINATED; char *cut_utils_build_path_va_list (const char *path, va_list args); char *cut_utils_build_path_array (const char **paths); void cut_utils_remove_path_recursive_force (const char *path); void cut_utils_make_directory_recursive_force (const char *path); cut_boolean cut_utils_regex_match (const char *pattern, const char *string); char *cut_utils_fold (const char *string); char *cut_utils_append_diff (const char *message, const char *from, const char *to); const char *cut_test_context_build_fixture_path (CutTestContext *context, const char *path, ...) CUT_GNUC_NULL_TERMINATED; const char *cut_utils_get_fixture_data (CutTestContext *context, const char **fixture_path, size_t *size, const char *path, ...) CUT_GNUC_NULL_TERMINATED; const char *cut_utils_get_fixture_data_va_list (CutTestContext *context, const char **fixture_path, size_t *size, const char *path, va_list args); void cut_test_context_add_data (CutTestContext *context, const char *first_data_name, ...) CUT_GNUC_NULL_TERMINATED; void cut_test_context_set_attributes (CutTestContext *context, const char *first_attribute_name, ...) CUT_GNUC_NULL_TERMINATED; int cut_test_context_trap_fork (CutTestContext *context); int cut_test_context_wait_process (CutTestContext *context, int pid, unsigned int usec_timeout); const char *cut_test_context_get_forked_stdout_message (CutTestContext *context, int pid); const char *cut_test_context_get_forked_stderr_message (CutTestContext *context, int pid); void cut_test_context_set_fixture_data_dir (CutTestContext *context, const char *path, ...) CUT_GNUC_NULL_TERMINATED; void cut_test_context_push_backtrace (CutTestContext *context, const char *relative_path, const char *file_name, unsigned int line, const char *function_name, const char *info); void cut_test_context_pop_backtrace (CutTestContext *context); void cut_test_context_get_last_backtrace (CutTestContext *context, const char **filename, unsigned int *line, const char **function_name, const char **info); char *cut_diff_readable (const char *from, const char *to); char *cut_diff_readable_folded (const char *from, const char *to); char *cut_diff_unified (const char *from, const char *to, const char *from_label, const char *to_label); CutSubProcess *cut_utils_take_new_sub_process (const char *test_directory, CutTestContext *test_context); CutSubProcessGroup *cut_utils_take_new_sub_process_group (CutTestContext *test_context); #ifdef __cplusplus } #endif #endif /* __CUT_PUBLIC_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-helper.c0000644000175000017500000000373611424022512020376 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "cut-helper.h" #include "cut-run-context.h" void cut_pop_backtrace (void) { cut_test_context_pop_backtrace(cut_get_current_test_context()); } const char * cut_get_test_directory (void) { CutRunContext *run_context; CutTestContext *test_context; CutTestCase *test_case; test_context = cut_get_current_test_context(); if (!test_context) return NULL; test_case = cut_test_context_get_test_case(test_context); if (!test_case) return NULL; run_context = cut_test_context_get_run_context(test_context); return cut_build_path(cut_run_context_get_test_directory(run_context), cut_test_get_base_directory(CUT_TEST(test_case)), NULL); } const char * cut_get_source_directory (void) { CutRunContext *run_context; CutTestContext *test_context; test_context = cut_get_current_test_context(); if (!test_context) return NULL; run_context = cut_test_context_get_run_context(test_context); return cut_run_context_get_source_directory(run_context); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-multi-process.h0000644000175000017500000003532111205747026021740 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_MULTI_PROCESS_H__ #define __CUT_MULTI_PROCESS_H__ #include #ifdef __cplusplus extern "C" { #endif /** * SECTION: cut-multi-process * @title: Multi Process * @short_description: Utilities to run your tests on multi * processes. * * If your test target supports multi-process and/or * multi-thread, you need to test them. You can use * #CutSubProcess and #CutSubProcessGroup to do it. * * #CutSubProcess runs your test on another process and * forwards results of it to a test on your main * process. You will get results of test on another process * as results of test on your main process. * * #CutSubProcessGroup is a convenience object to run some * #CutSubProcess. * * Since: 1.0.4 */ /** * CutSubProcess: * * An object to represent sub cutter process. It contains * sub cutter process's parameters and results of sub cutter * process. * * e.g.: * |[ * CutSubProcess *sub_process; * * sub_process = cut_take_new_sub_process("test-dir"); * cut_sub_process_set_multi_thread(sub_process, TRUE); * cut_assert_true(cut_sub_process_run(sub_process)); * ]| * * Since: 1.0.4 */ typedef struct _CutSubProcess CutSubProcess; /** * CutSubProcessGroup: * * An object to run sub cutter processes. This is just for * convenience. * * e.g.: * |[ * CutSubProcess *sub_process1, *sub_process2, *sub_process3; * CutSubProcessGroup *group; * * sub_process1 = cut_take_new_sub_process("test-dir1"); * sub_process2 = cut_take_new_sub_process("test-dir2"); * sub_process3 = cut_take_new_sub_process("test-dir3"); * * group = cut_take_new_sub_process_group(); * cut_sub_process_group_add(group, sub_process1); * cut_sub_process_group_add(group, sub_process2); * cut_sub_process_group_add(group, sub_process3); * cut_assert_true(cut_sub_process_group_run(group)); * ]| * * Since: 1.0.4 */ typedef struct _CutSubProcessGroup CutSubProcessGroup; /** * cut_take_new_sub_process: * @test_directory: a directory includes sub process test. * * Creates sub cutter process that runs tests under * @test_directory and returns it. A created sub process * is owned by Cutter. * * Returns: a #CutSubProcess. * * Since: 1.0.4 */ #define cut_take_new_sub_process(test_directory) \ cut_utils_take_new_sub_process(test_directory, \ cut_get_current_test_context()) /** * cut_sub_process_run: * @sub_process: a #CutSubProcess. * * Runs sub cutter process. * * Returns: %CUT_TRUE if @sub_process is completed * successfully, %CUT_FALSE otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_run (CutSubProcess *sub_process); /** * cut_sub_process_run_async: * @sub_process: a #CutSubProcess. * * Runs sub cutter process asynchronously. The result of * @sub_process can be gotten by cut_sub_process_wait(). * * Since: 1.0.4 */ void cut_sub_process_run_async (CutSubProcess *sub_process); /** * cut_sub_process_wait: * @sub_process: a #CutSubProcess. * * Waits for sub cutter process that is ran asynchronously * to complete and returns the result. * * Returns: %CUT_TRUE if @sub_process is completed * successfully, %CUT_FALSE otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_wait (CutSubProcess *sub_process); /** * cut_sub_process_is_success: * @sub_process: a #CutSubProcess. * * Returns whether @sub_process is completed successfully or * not. * * Returns: %CUT_TRUE if @sub_process is completed * successfully, %CUT_FALSE otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_is_success (CutSubProcess *sub_process); /** * cut_sub_process_is_running: * @sub_process: a #CutSubProcess. * * Returns whether @sub_process is running or not. * * Returns: %CUT_TRUE if @sub_process is running, %CUT_FALSE * otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_is_running (CutSubProcess *sub_process); /** * cut_sub_process_get_test_directory: * @sub_process: a #CutSubProcess. * * Returns a test directory that has tests to be ran. * * Returns: a test directory. * * Since: 1.0.4 */ const char *cut_sub_process_get_test_directory (CutSubProcess *sub_process); /** * cut_sub_process_set_test_directory: * @sub_process: a #CutSubProcess. * @test_directory: a test directory. * * Sets @test_directory as a test directory that has tests * to be ran. This is same as TEST_DIRECTORY required * command line argument. * * Since: 1.0.4 */ void cut_sub_process_set_test_directory (CutSubProcess *sub_process, const char *test_directory); /** * cut_sub_process_get_source_directory: * @sub_process: a #CutSubProcess. * * Returns a source directory that has source files. * * Returns: a source directory. * * Since: 1.0.4 */ const char *cut_sub_process_get_source_directory (CutSubProcess *sub_process); /** * cut_sub_process_set_source_directory: * @sub_process: a #CutSubProcess. * @source_directory: a source directory. * * Sets @source_directory as a source directory that has * source files. This is same as --source-directory command * line option. * * Since: 1.0.4 */ void cut_sub_process_set_source_directory (CutSubProcess *sub_process, const char *source_directory); /** * cut_sub_process_get_multi_thread: * @sub_process: a #CutSubProcess. * * Returns whether @sub_process is ran in multi-thread mode. * * Returns: %CUT_TRUE if @sub_process is ran in multi-thread * mode, %CUT_FALSE otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_get_multi_thread (CutSubProcess *sub_process); /** * cut_sub_process_set_multi_thread: * @sub_process: a #CutSubProcess. * @multi_thread: %CUT_TRUE to be ran in multi-thread mode. * * Sets whether @sub_process is ran in multi-thread mode or * not. This is same as --multi-thread command line option. * * Since: 1.0.4 */ void cut_sub_process_set_multi_thread (CutSubProcess *sub_process, cut_boolean multi_thread); /** * cut_sub_process_get_max_threads: * @sub_process: a #CutSubProcess. * * Returns how many threads are used concurrently at a * maximum in @sub_process. * * Returns: max number of threads used concurrently at a * maximum in @sub_process. * * Since: 1.0.5 */ int cut_sub_process_get_max_threads (CutSubProcess *sub_process); /** * cut_sub_process_set_max_threads: * @sub_process: a #CutSubProcess. * @max_threads: max number of threads used concurrently at * a maximum. * * Sets how many threads are used concurrently at a * maximum in @sub_process. -1 means no limit. This is same * as --max-threads command line option. * * Since: 1.0.5 */ void cut_sub_process_set_max_threads (CutSubProcess *sub_process, int max_threads); /** * cut_sub_process_get_exclude_files: * @sub_process: a #CutSubProcess. * * Returns file names that are excluded from target test * files. * * Returns: file names that are excluded from target test files. * * Since: 1.0.4 */ const char **cut_sub_process_get_exclude_files (CutSubProcess *sub_process); /** * cut_sub_process_set_exclude_files: * @sub_process: a #CutSubProcess. * @files: file names that are excluded from target test * files. * * Sets file names that are excluded from target test files. * This is same as --exclude-file command line option. * * Since: 1.0.4 */ void cut_sub_process_set_exclude_files (CutSubProcess *sub_process, const char **files); /** * cut_sub_process_get_exclude_directories: * @sub_process: a #CutSubProcess. * * Returns directory names that are excluded from target * test directories. * * Returns: directory names that are excluded from target * test directories. * * Since: 1.0.4 */ const char **cut_sub_process_get_exclude_directories (CutSubProcess *sub_process); /** * cut_sub_process_set_exclude_directories: * @sub_process: a #CutSubProcess. * @directories: directory names that are excluded from * target test directories. * * Sets directory names that are excluded from target test * directories. This is same as --exclude-directory command line * option. * * Since: 1.0.4 */ void cut_sub_process_set_exclude_directories (CutSubProcess *sub_process, const char **directories); /** * cut_sub_process_get_target_test_case_names: * @sub_process: a #CutSubProcess. * * Returns test case names that are ran. * * Returns: test case names that are ran. * * Since: 1.0.4 */ const char **cut_sub_process_get_target_test_case_names (CutSubProcess *sub_process); /** * cut_sub_process_set_target_test_case_names: * @sub_process: a #CutSubProcess. * @names: test case names that are ran. * * Sets test case names that are ran. This is same as * --test-case command line option. * * Since: 1.0.4 */ void cut_sub_process_set_target_test_case_names (CutSubProcess *sub_process, const char **names); /** * cut_sub_process_get_target_test_names: * @sub_process: a #CutSubProcess. * * Returns test names that are ran. * * Returns: test names that are ran. * * Since: 1.0.4 */ const char **cut_sub_process_get_target_test_names (CutSubProcess *sub_process); /** * cut_sub_process_set_target_test_names: * @sub_process: a #CutSubProcess. * @names: test names that are ran. * * Sets test names that are ran. This is same as --test * command line option. * * Since: 1.0.4 */ void cut_sub_process_set_target_test_names (CutSubProcess *sub_process, const char **names); /** * cut_sub_process_get_elapsed: * @sub_process: a #CutSubProcess. * * Gets the time while @sub_process was running. * * Returns: the time while @sub_process was running. * * Since: 1.0.4 */ double cut_sub_process_get_elapsed (CutSubProcess *sub_process); /** * cut_sub_process_get_total_elapsed: * @sub_process: a #CutSubProcess. * * Gets the sum of times that are used by each test. * * Returns: the sum of times that are used by each test. * * Since: 1.0.4 */ double cut_sub_process_get_total_elapsed (CutSubProcess *sub_process); /** * cut_sub_process_is_crashed: * @sub_process: a #CutSubProcess. * * Returns whether @sub_process was crashed or not. * * Returns: %CUT_TRUE if @sub_process was crashed, %CUT_FALSE * otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_is_crashed (CutSubProcess *sub_process); /** * cut_sub_process_get_fatal_failures: * @sub_process: a #CutSubProcess. * * Returns whether @sub_process is ran in fatal-failures * mode. See cut_sub_process_set_fatal_failures() more * details of fatal-failures mode. * * Returns: %CUT_TRUE if @sub_process is ran in fatal-failures * mode, %CUT_FALSE otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_get_fatal_failures (CutSubProcess *sub_process); /** * cut_sub_process_set_fatal_failures: * @sub_process: a #CutSubProcess. * @fatal_failures: %CUT_TRUE to be ran in fatal-failures mode. * * Sets whether @sub_process is ran in fatal-failures mode or * not. In this mode, all failures are treated as fatal * problems. It means that test is aborted on failure. On * some environments, breakpoint is set. * * This is same as --fatal-failures command line option. * * Since: 1.0.4 */ void cut_sub_process_set_fatal_failures (CutSubProcess *sub_process, cut_boolean fatal_failures); /** * cut_take_new_sub_process_group: * * Creates a group of sub cutter process. A created group * is owned by Cutter. * * Returns: a #CutSubProcessGroup. * * Since: 1.0.4 */ #define cut_take_new_sub_process_group() \ cut_utils_take_new_sub_process_group(cut_get_current_test_context()) /** * cut_sub_process_group_add: * @group: a #CutSubProcessGroup. * @sub_process: a #CutSubProcess. * * Adds @sub_process to @group. * * Since: 1.0.4 */ void cut_sub_process_group_add (CutSubProcessGroup *group, CutSubProcess *sub_process); /** * cut_sub_process_group_run: * @group: a #CutSubProcessGroup. * * Runs all sub cutter processes of @group and returns the * result of them. * * Returns: %CUT_TRUE if all sub cutter processes of @group * are completed successfully, %CUT_FALSE otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_group_run (CutSubProcessGroup *group); /** * cut_sub_process_group_run_async: * @group: a #CutSubProcessGroup. * * Runs all sub cutter processes of @group * asynchronously. The result of them can be gotten by * cut_sub_process_group_wait(). * * Since: 1.0.4 */ void cut_sub_process_group_run_async (CutSubProcessGroup *group); /** * cut_sub_process_group_wait: * @group: a #CutSubProcessGroup. * * Waits for all sub cutter processes of @group that are ran * asynchronously to complete and returns the result. * * Returns: %CUT_TRUE if all sub cutter processes of @group * are completed successfully, %CUT_FALSE otherwise. * * Since: 1.0.4 */ cut_boolean cut_sub_process_group_wait (CutSubProcessGroup *group); #ifdef __cplusplus } #endif #endif /* __CUT_MULTI_PROCESS_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-stream-reader.c0000644000175000017500000001573211205747026021664 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-stream-reader.h" #include "cut-runner.h" #include "cut-stream-parser.h" #include #define CUT_STREAM_READER_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_STREAM_READER, \ CutStreamReaderPrivate)) typedef struct _CutStreamReaderPrivate CutStreamReaderPrivate; struct _CutStreamReaderPrivate { CutStreamParser *parser; gboolean error_emitted; }; G_DEFINE_TYPE(CutStreamReader, cut_stream_reader, CUT_TYPE_RUN_CONTEXT) static void dispose (GObject *object); static void cut_stream_reader_class_init (CutStreamReaderClass *klass) { GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; g_type_class_add_private(gobject_class, sizeof(CutStreamReaderPrivate)); } static void cut_stream_reader_init (CutStreamReader *stream_reader) { CutStreamReaderPrivate *priv; priv = CUT_STREAM_READER_GET_PRIVATE(stream_reader); priv->parser = cut_stream_parser_new(CUT_RUN_CONTEXT(stream_reader)); priv->error_emitted = FALSE; } static void dispose (GObject *object) { CutStreamReaderPrivate *priv; priv = CUT_STREAM_READER_GET_PRIVATE(object); if (priv->parser) { CutStreamParser *parser; parser = priv->parser; priv->parser = NULL; g_object_unref(parser); } G_OBJECT_CLASS(cut_stream_reader_parent_class)->dispose(object); } CutRunContext * cut_stream_reader_new (void) { return g_object_new(CUT_TYPE_STREAM_READER, NULL); } GQuark cut_stream_reader_error_quark (void) { return g_quark_from_static_string("cut-stream-reader-error-quark"); } #define emit_error(stream_reader, code, sub_error, ...) do \ { \ CutStreamReader *_stream_reader; \ CutStreamReaderPrivate *_priv; \ CutRunContext *_run_context; \ \ _stream_reader = (stream_reader); \ _priv = CUT_STREAM_READER_GET_PRIVATE(_stream_reader); \ _run_context = CUT_RUN_CONTEXT(_stream_reader); \ cut_run_context_emit_error(_run_context, \ CUT_STREAM_READER_ERROR, \ code, sub_error, \ __VA_ARGS__); \ _priv->error_emitted = TRUE; \ cut_run_context_emit_complete_run(_run_context, FALSE); \ } while (0) static gboolean watch_func (GIOChannel *channel, GIOCondition condition, gpointer data) { CutStreamReader *stream_reader = data; gboolean keep_callback = TRUE; if (!CUT_IS_STREAM_READER(data)) return FALSE; if (condition & (G_IO_IN | G_IO_PRI)) { keep_callback = cut_stream_reader_read_from_io_channel(stream_reader, channel); } if (cut_run_context_is_completed(CUT_RUN_CONTEXT(stream_reader))) return FALSE; if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) { gchar *message; message = gcut_io_inspect_condition(condition); emit_error(stream_reader, CUT_STREAM_READER_ERROR_IO_ERROR, NULL, "%s", message); g_free(message); keep_callback = FALSE; } return keep_callback; } guint cut_stream_reader_watch_io_channel (CutStreamReader *stream_reader, GIOChannel *channel) { return g_io_add_watch(channel, G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL, watch_func, stream_reader); } #define BUFFER_SIZE 4096 gboolean cut_stream_reader_read_from_io_channel (CutStreamReader *stream_reader, GIOChannel *channel) { CutStreamReaderPrivate *priv; priv = CUT_STREAM_READER_GET_PRIVATE(stream_reader); while (!priv->error_emitted) { GIOStatus status; gboolean eof = FALSE; gchar stream[BUFFER_SIZE + 1]; gsize length = 0; GError *error = NULL; status = g_io_channel_read_chars(channel, stream, BUFFER_SIZE, &length, &error); if (status == G_IO_STATUS_EOF) eof = TRUE; if (error) { emit_error(stream_reader, CUT_STREAM_READER_ERROR_READ, error, "failed to read stream"); break; } if (length <= 0) break; if (!cut_stream_reader_read(stream_reader, stream, length)) break; if (eof) { cut_stream_reader_end_read(stream_reader); break; } } return !priv->error_emitted; } gboolean cut_stream_reader_read (CutStreamReader *stream_reader, const gchar *stream, gsize length) { CutStreamReaderPrivate *priv; GError *error = NULL; priv = CUT_STREAM_READER_GET_PRIVATE(stream_reader); cut_stream_parser_parse(priv->parser, stream, length, &error); if (error) emit_error(stream_reader, CUT_STREAM_READER_ERROR_PARSE, error, "failed to parse stream"); return !priv->error_emitted; } gboolean cut_stream_reader_end_read (CutStreamReader *stream_reader) { CutStreamReaderPrivate *priv; GError *error = NULL; priv = CUT_STREAM_READER_GET_PRIVATE(stream_reader); if (priv->error_emitted) return FALSE; cut_stream_parser_end_parse(priv->parser, &error); if (error) emit_error(stream_reader, CUT_STREAM_READER_ERROR_END_PARSE, error, "failed to end parse stream"); return !priv->error_emitted; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-version.h0000644000175000017500000000463511525654647020636 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_VERSION_H__ #define __CUT_VERSION_H__ /** * SECTION: cut-version * @title: Version Information * @short_description: Variables and macros to check the Cutter version * * Cutter provides version information, primarily useful in * configure checks for builds that have a configure * script. Tests will not typically use the features * described here. */ /** * CUTTER_VERSION_MAJOR: * * The major version number of the Cutter. */ #define CUTTER_VERSION_MAJOR 1 /** * CUTTER_VERSION_MINOR: * * The minor version number of the Cutter. */ #define CUTTER_VERSION_MINOR 1 /** * CUTTER_VERSION_MICRO: * * The micro version number of the Cutter. */ #define CUTTER_VERSION_MICRO 7 /** * CUTTER_VERSION_STRING: * * The version number string of the Cutter with * "#{MAJOR}.#{MINOR}.#{MICRO}" format. */ #define CUTTER_VERSION_STRING "1.1.7" /** * CUTTER_CHECK_VERSION: * @major: the major version number. * @minor: the minor version number. * @micro: the micro version number. * * Checks the version of the Cutter. Returns true if the * version of the Cutter header files is the same as or * newer than the passed-in version. * * Since: 1.0.7 */ #define CUTTER_CHECK_VERSION(major, minor, micro) \ (CUTTER_VERSION_MAJOR > (major) || \ (CUTTER_VERSION_MAJOR == (major) && \ CUTTER_VERSION_MINOR > (minor)) || \ (CUTTER_VERSION_MAJOR == (major) && \ CUTTER_VERSION_MINOR == (minor) && \ CUTTER_VERSION_MICRO >= (micro))) #endif /* __CUT_VERSION_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-iterated-test.c0000644000175000017500000001603611264300063021674 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-iterated-test.h" #include "cut-test-container.h" #include "cut-run-context.h" #include "cut-test-result.h" #include "cut-utils.h" #define CUT_ITERATED_TEST_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_ITERATED_TEST, CutIteratedTestPrivate)) typedef struct _CutIteratedTestPrivate CutIteratedTestPrivate; struct _CutIteratedTestPrivate { CutIteratedTestFunction iterated_test_function; CutTestData *data; }; enum { PROP_0, PROP_ITERATED_TEST_FUNCTION, PROP_DATA }; G_DEFINE_TYPE(CutIteratedTest, cut_iterated_test, CUT_TYPE_TEST) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static gboolean is_available (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); static void invoke (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); static void cut_iterated_test_class_init (CutIteratedTestClass *klass) { GObjectClass *gobject_class; CutTestClass *test_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; test_class = CUT_TEST_CLASS(klass); test_class->is_available = is_available; test_class->invoke = invoke; spec = g_param_spec_pointer("iterated-test-function", "Iterated Test Function", "The function for iterated test", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_ITERATED_TEST_FUNCTION, spec); spec = g_param_spec_object("data", "Data", "The test data for iterated test", CUT_TYPE_TEST_DATA, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_DATA, spec); g_type_class_add_private(gobject_class, sizeof(CutIteratedTestPrivate)); } static void cut_iterated_test_init (CutIteratedTest *test) { CutIteratedTestPrivate *priv = CUT_ITERATED_TEST_GET_PRIVATE(test); priv->iterated_test_function = NULL; priv->data = NULL; } static void dispose (GObject *object) { CutIteratedTestPrivate *priv = CUT_ITERATED_TEST_GET_PRIVATE(object); priv->iterated_test_function = NULL; if (priv->data) { g_object_unref(priv->data); priv->data = NULL; } G_OBJECT_CLASS(cut_iterated_test_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutIteratedTestPrivate *priv = CUT_ITERATED_TEST_GET_PRIVATE(object); switch (prop_id) { case PROP_ITERATED_TEST_FUNCTION: priv->iterated_test_function = g_value_get_pointer(value); break; case PROP_DATA: cut_iterated_test_set_data(CUT_ITERATED_TEST(object), g_value_get_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutIteratedTestPrivate *priv = CUT_ITERATED_TEST_GET_PRIVATE(object); switch (prop_id) { case PROP_ITERATED_TEST_FUNCTION: g_value_set_pointer(value, priv->iterated_test_function); break; case PROP_DATA: g_value_set_object(value, priv->data); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutIteratedTest * cut_iterated_test_new (const gchar *name, CutIteratedTestFunction function, CutTestData *data) { return g_object_new(CUT_TYPE_ITERATED_TEST, "element-name", "iterated-test", "name", name, "iterated-test-function", function, "data", data, NULL); } CutIteratedTest * cut_iterated_test_new_empty (void) { return cut_iterated_test_new(NULL, NULL, NULL); } CutTestData * cut_iterated_test_get_data (CutIteratedTest *test) { return CUT_ITERATED_TEST_GET_PRIVATE(test)->data; } void cut_iterated_test_set_data (CutIteratedTest *test, CutTestData *data) { CutIteratedTestPrivate *priv; priv = CUT_ITERATED_TEST_GET_PRIVATE(test); if (priv->data) g_object_unref(priv->data); priv->data = data; if (priv->data) g_object_ref(priv->data); } void cut_iterated_test_clear_data (CutIteratedTest *test) { CutIteratedTestPrivate *priv; priv = CUT_ITERATED_TEST_GET_PRIVATE(test); if (priv->data) cut_test_data_set_value(priv->data, NULL, NULL); } static gboolean is_available (CutTest *test, CutTestContext *test_context, CutRunContext *run_context) { CutIteratedTestPrivate *priv; priv = CUT_ITERATED_TEST_GET_PRIVATE(test); return priv->iterated_test_function && priv->data; } static void invoke (CutTest *test, CutTestContext *test_context, CutRunContext *run_context) { CutIteratedTestPrivate *priv; gconstpointer value; priv = CUT_ITERATED_TEST_GET_PRIVATE(test); value = cut_test_data_get_value(priv->data); if (cut_run_context_get_stop_before_test(run_context)) G_BREAKPOINT(); priv->iterated_test_function(value); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-stream-parser.h0000644000175000017500000000521711205747026021720 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_STREAM_PARSER_H__ #define __CUT_STREAM_PARSER_H__ #include #include #include G_BEGIN_DECLS #define CUT_TYPE_STREAM_PARSER (cut_stream_parser_get_type ()) #define CUT_STREAM_PARSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_STREAM_PARSER, CutStreamParser)) #define CUT_STREAM_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_STREAM_PARSER, CutStreamParserClass)) #define CUT_IS_STREAM_PARSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_STREAM_PARSER)) #define CUT_IS_STREAM_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_STREAM_PARSER)) #define CUT_STREAM_PARSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_STREAM_PARSER, CutStreamParserClass)) typedef struct _CutStreamParser CutStreamParser; typedef struct _CutStreamParserClass CutStreamParserClass; struct _CutStreamParser { GObject object; }; struct _CutStreamParserClass { GObjectClass parent_class; void (*result) (CutStreamParser *stream_parser, CutTestResult *result); }; GType cut_stream_parser_get_type (void) G_GNUC_CONST; CutStreamParser *cut_stream_parser_new (CutRunContext *run_context); CutStreamParser *cut_test_result_parser_new (void); gboolean cut_stream_parser_parse (CutStreamParser *parser, const gchar *text, gsize text_len, GError **error); gboolean cut_stream_parser_end_parse (CutStreamParser *stream_parser, GError **error); G_END_DECLS #endif /* __CUT_STREAM_PARSER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-config.h0000644000175000017500000000044511525655071020401 0ustar koukou/* cut-config.h * * This is a generated file. Please modify 'configure.ac' */ #ifndef __CUT_CONFIG_H__ #define __CUT_CONFIG_H__ #define CUT_HAVE_STDINT_H 1 #define CUT_HAVE_INTTYPES_H 1 /* #undef CUT_HAVE_WINSOCK2_H */ #define CUT_HAVE_SYS_SOCKET_H 1 #define CUT_HAVE_SYS_UN_H 1 #endif cutter-testing-framework-1.1.7/cutter/cut-diff.c0000644000175000017500000001336111523751075020037 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "cut-main.h" #include "cut-colorize-differ.h" #include "cut-unified-differ.h" #include "cut-console.h" #include "cut-console-diff-writer.h" static gboolean use_color = FALSE; static gboolean unified_diff = FALSE; static gint context_lines = -1; static gchar **labels = NULL; static gboolean print_version (const gchar *option_name, const gchar *value, gpointer data, GError **error) { g_print("%s\n", VERSION); exit(EXIT_SUCCESS); return TRUE; } static gboolean parse_color_arg (const gchar *option_name, const gchar *value, gpointer data, GError **error) { return cut_console_parse_color_arg(option_name, value, &use_color, error); } static const GOptionEntry option_entries[] = { {"version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, print_version, N_("Show version"), NULL}, {"color", 'c', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, parse_color_arg, N_("Output diff with colors"), "[yes|true|no|false|auto]"}, {"unified", 'u', 0, G_OPTION_ARG_NONE, &unified_diff, N_("Use unified diff format"), NULL}, {"context-lines", '\0', 0, G_OPTION_ARG_INT, &context_lines, N_("Use LINES as diff context lines"), "LINES"}, {"label", 'L', 0, G_OPTION_ARG_STRING_ARRAY, &labels, N_("Use LABEL as label"), "LABEL"}, {NULL} }; static gboolean pre_parse (GOptionContext *context, GOptionGroup *group, gpointer data, GError **error) { use_color = cut_console_guess_color_usability(); return TRUE; } static void print_diff_header (CutDiffWriter *writer, const gchar *from_label, const gchar *to_label) { cut_diff_writer_mark_line(writer, "---", " ", from_label, CUT_DIFF_WRITER_TAG_DELETED_MARK); cut_diff_writer_mark_line(writer, "+++", " ", to_label, CUT_DIFF_WRITER_TAG_INSERTED_MARK); } static gboolean print_diff (const gchar *from, const gchar *to) { GError *error = NULL; gchar *from_contents, *to_contents; CutDiffer *differ; CutDiffWriter *writer; const gchar *from_label = from; const gchar *to_label = to; if (!g_file_get_contents(from, &from_contents, NULL, &error)) { g_print("%s\n", error->message); g_error_free(error); return FALSE; } if (!g_file_get_contents(to, &to_contents, NULL, &error)) { g_print("%s\n", error->message); g_error_free(error); g_free(from_contents); return FALSE; } if (labels[0]) { from_label = labels[0]; if (labels[1]) { to_label = labels[1]; } } writer = cut_console_diff_writer_new(use_color); if (unified_diff) { differ = cut_unified_differ_new(from_contents, to_contents); cut_unified_differ_set_from_label(differ, from_label); cut_unified_differ_set_to_label(differ, to_label); } else { if (use_color) { differ = cut_colorize_differ_new(from_contents, to_contents); } else { differ = cut_readable_differ_new(from_contents, to_contents); } print_diff_header(writer, from_label, to_label); } if (context_lines > 0) cut_differ_set_context_size(differ, context_lines); cut_differ_diff(differ, writer); g_object_unref(writer); g_object_unref(differ); return TRUE; } int main (int argc, char *argv[]) { gboolean success = TRUE; GOptionContext *option_context; GOptionGroup *main_group; GError *error = NULL; cut_init_environment(&argc, &argv); option_context = g_option_context_new(N_("FILE_FROM FILE_TO")); g_option_context_set_help_enabled(option_context, TRUE); g_option_context_set_ignore_unknown_options(option_context, FALSE); main_group = g_option_group_new(NULL, NULL, NULL, option_context, NULL); g_option_group_add_entries(main_group, option_entries); g_option_group_set_parse_hooks(main_group, pre_parse, NULL); g_option_group_set_translation_domain(main_group, GETTEXT_PACKAGE); g_option_context_set_main_group(option_context, main_group); if (!g_option_context_parse(option_context, &argc, &argv, &error)) { g_print("%s\n", error->message); g_error_free(error); g_option_context_free(option_context); exit(EXIT_FAILURE); } if (argc != 3) { gint help_argc = 2; gchar *help_argv[2]; gchar **help_argv_p; help_argv[0] = argv[0]; help_argv[1] = "--help"; help_argv_p = help_argv; g_option_context_parse(option_context, &help_argc, &help_argv_p, NULL); g_option_context_free(option_context); exit(EXIT_FAILURE); } success = print_diff(argv[1], argv[2]); cut_quit_environment(); return success ? EXIT_SUCCESS : EXIT_FAILURE; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-backtrace-entry.h0000644000175000017500000000765611205747026022222 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_BACKTRACE_ENTRY_H__ #define __CUT_BACKTRACE_ENTRY_H__ #include G_BEGIN_DECLS #define CUT_TYPE_BACKTRACE_ENTRY (cut_backtrace_entry_get_type ()) #define CUT_BACKTRACE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_BACKTRACE_ENTRY, CutBacktraceEntry)) #define CUT_BACKTRACE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_BACKTRACE_ENTRY, CutBacktraceEntryClass)) #define CUT_IS_BACKTRACE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_BACKTRACE_ENTRY)) #define CUT_IS_BACKTRACE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_BACKTRACE_ENTRY)) #define CUT_BACKTRACE_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_BACKTRACE_ENTRY, CutBacktraceEntryClass)) typedef struct _CutBacktraceEntry CutBacktraceEntry; typedef struct _CutBacktraceEntryClass CutBacktraceEntryClass; struct _CutBacktraceEntry { GObject object; }; struct _CutBacktraceEntryClass { GObjectClass parent_class; }; GType cut_backtrace_entry_get_type (void) G_GNUC_CONST; CutBacktraceEntry *cut_backtrace_entry_new (const gchar *file, guint line, const gchar *function, const gchar *info); CutBacktraceEntry *cut_backtrace_entry_new_empty (void); const gchar *cut_backtrace_entry_get_file (CutBacktraceEntry *entry); void cut_backtrace_entry_set_file (CutBacktraceEntry *entry, const gchar *file); guint cut_backtrace_entry_get_line (CutBacktraceEntry *entry); void cut_backtrace_entry_set_line (CutBacktraceEntry *entry, guint line); const gchar *cut_backtrace_entry_get_function (CutBacktraceEntry *entry); void cut_backtrace_entry_set_function (CutBacktraceEntry *entry, const gchar *function); const gchar *cut_backtrace_entry_get_info (CutBacktraceEntry *entry); void cut_backtrace_entry_set_info (CutBacktraceEntry *entry, const gchar *info); gchar *cut_backtrace_entry_to_xml (CutBacktraceEntry *entry); void cut_backtrace_entry_to_xml_string (CutBacktraceEntry *entry, GString *string, guint indent); gchar *cut_backtrace_entry_format (CutBacktraceEntry *entry); void cut_backtrace_entry_format_string (CutBacktraceEntry *entry, GString *string); G_END_DECLS #endif /* __CUT_BACKTRACE_ENTRY_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-process.c0000644000175000017500000002327211355531407020605 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #ifdef HAVE_SYS_WAIT_H # include #endif #include #include #include #include "cut-process.h" #include "cut-experimental.h" #include "cut-utils.h" #ifdef G_OS_WIN32 # include # define pipe(phandles) _pipe(phandles, 4096, _O_BINARY) #else # include #endif #define CUT_PROCESS_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_PROCESS, CutProcessPrivate)) typedef struct _CutProcessPrivate CutProcessPrivate; struct _CutProcessPrivate { #ifdef G_OS_WIN32 void *dummy; #else pid_t pid; gchar *stdout_string; gchar *stderr_string; GString *cutter_string; GIOChannel *child_io; GIOChannel *parent_io; GIOChannel *stdout_read_io; GIOChannel *stderr_read_io; #endif }; enum { STDOUT, STDERR, CUTTER_PIPE }; G_DEFINE_TYPE (CutProcess, cut_process, G_TYPE_OBJECT) static void dispose (GObject *object); static void cut_process_class_init (CutProcessClass *klass) { GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; g_type_class_add_private(gobject_class, sizeof(CutProcessPrivate)); } #ifndef G_OS_WIN32 static int sane_dup2 (int fd1, int fd2) { int ret; do ret = dup2(fd1, fd2); while (ret < 0 && errno == EINTR); return ret; } static GIOChannel * create_io_channel (int pipe, GIOFlags flag) { GIOChannel *channel; channel = g_io_channel_unix_new(pipe); g_io_channel_set_encoding(channel, NULL, NULL); g_io_channel_set_flags(channel, flag, NULL); g_io_channel_set_close_on_unref(channel, TRUE); return channel; } static GIOChannel * create_read_io_channel (int pipe) { return create_io_channel(pipe, G_IO_FLAG_IS_READABLE); } static GIOChannel * create_write_io_channel (int pipe) { return create_io_channel(pipe, G_IO_FLAG_IS_WRITEABLE); } static gboolean read_from_child (GIOChannel *source, GIOCondition *condition, gpointer data) { CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(data); GIOStatus status; gsize bytes_read; gchar buffer[4096]; status = g_io_channel_read_chars(source, buffer, sizeof(buffer), &bytes_read, NULL); g_string_append_len(priv->cutter_string, buffer, bytes_read); if (status == G_IO_STATUS_EOF) return FALSE; return TRUE; } static pid_t prepare_pipes (CutProcess *process) { CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(process); pid_t pid; int fork_errno = 0; int stdout_pipe[2]; int stderr_pipe[2]; int cutter_pipe[2]; priv->pid = 0; if (pipe(stdout_pipe) < 0 || pipe(stderr_pipe) < 0 || pipe(cutter_pipe) < 0) { return -1; } pid = fork(); if (pid == -1) fork_errno = errno; if (pid == 0) { cut_utils_close_pipe(stdout_pipe, CUT_READ); cut_utils_close_pipe(stderr_pipe, CUT_READ); cut_utils_close_pipe(cutter_pipe, CUT_READ); if (sane_dup2(stdout_pipe[CUT_WRITE], STDOUT_FILENO) < 0 || sane_dup2(stderr_pipe[CUT_WRITE], STDERR_FILENO) < 0) { } priv->child_io = create_write_io_channel(cutter_pipe[CUT_WRITE]); if (stdout_pipe[CUT_WRITE] >= 3) cut_utils_close_pipe(stdout_pipe, CUT_WRITE); if (stderr_pipe[CUT_WRITE] >= 3) cut_utils_close_pipe(stderr_pipe, CUT_WRITE); } else { priv->pid = pid; cut_utils_close_pipe(stdout_pipe, CUT_WRITE); cut_utils_close_pipe(stderr_pipe, CUT_WRITE); cut_utils_close_pipe(cutter_pipe, CUT_WRITE); priv->parent_io = create_read_io_channel(cutter_pipe[CUT_READ]); priv->stdout_read_io = create_read_io_channel(stdout_pipe[CUT_READ]); priv->stderr_read_io = create_read_io_channel(stderr_pipe[CUT_READ]); } errno = fork_errno; return pid; } static void ensure_collect_result (CutProcess *process, unsigned int usec_timeout) { CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(process); /* workaround since g_io_add_watch() does not work I expect. */ while (read_from_child(priv->parent_io, NULL, process)) ; } #endif static void cut_process_init (CutProcess *process) { #ifndef G_OS_WIN32 CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(process); priv->pid = 0; priv->stdout_string = NULL; priv->stderr_string = NULL; priv->cutter_string = g_string_new(NULL); priv->child_io = NULL; priv->parent_io = NULL; #endif } static void dispose (GObject *object) { #ifndef G_OS_WIN32 CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(object); if (priv->pid) { kill(priv->pid, SIGKILL); priv->pid = 0; } if (priv->stdout_string) { g_free(priv->stdout_string); priv->stdout_string = NULL; } if (priv->stderr_string) { g_free(priv->stderr_string); priv->stderr_string = NULL; } if (priv->cutter_string) { g_string_free(priv->cutter_string, TRUE); priv->cutter_string = NULL; } if (priv->child_io) { g_io_channel_unref(priv->child_io); priv->child_io = NULL; } if (priv->parent_io) { g_io_channel_unref(priv->parent_io); priv->parent_io = NULL; } if (priv->stdout_read_io) { g_io_channel_unref(priv->stdout_read_io); priv->stdout_read_io = NULL; } if (priv->stderr_read_io) { g_io_channel_unref(priv->stderr_read_io); priv->stderr_read_io = NULL; } #endif G_OBJECT_CLASS(cut_process_parent_class)->dispose(object); } CutProcess * cut_process_new () { return g_object_new(CUT_TYPE_PROCESS, NULL); } int cut_process_fork (CutProcess *process) { #ifdef G_OS_WIN32 errno = ENOSYS; return -1; #else return prepare_pipes(process); #endif } int cut_process_wait (CutProcess *process, unsigned int usec_timeout) { #ifdef G_OS_WIN32 return 0; #else int status; pid_t pid; pid = CUT_PROCESS_GET_PRIVATE(process)->pid; if (pid == 0) return 0; while (waitpid(pid, &status, 0) == -1 && errno == EINTR) /* do nothing */; ensure_collect_result(process, usec_timeout); return status; #endif } int cut_process_get_pid (CutProcess *process) { #ifdef G_OS_WIN32 return 0; #else return CUT_PROCESS_GET_PRIVATE(process)->pid; #endif } #ifndef G_OS_WIN32 static gchar * read_from_channel (GIOChannel *source) { GIOStatus status; gsize bytes_read; gchar *buffer = NULL; status = g_io_channel_read_to_end(source, &buffer, &bytes_read, NULL); return buffer; } #endif const gchar * cut_process_get_stdout_message (CutProcess *process) { #ifdef G_OS_WIN32 return ""; #else CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(process); if (priv->stdout_string) g_free(priv->stdout_string); priv->stdout_string = read_from_channel(priv->stdout_read_io); return (const gchar*)priv->stdout_string; #endif } const gchar * cut_process_get_stderr_message (CutProcess *process) { #ifdef G_OS_WIN32 return ""; #else CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(process); if (priv->stderr_string) g_free(priv->stderr_string); priv->stderr_string = read_from_channel(priv->stderr_read_io); return (const gchar*)priv->stderr_string; #endif } gboolean cut_process_send_test_result_to_parent (CutProcess *process, CutTestResult *result) { #ifdef G_OS_WIN32 return TRUE; #else CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(process); gchar *xml, *buffer; gsize bytes_written, length; GError *error = NULL; xml = cut_test_result_to_xml(result); if (!xml) return FALSE; length = strlen(xml); buffer = xml; while (length > 0) { g_io_channel_write_chars(priv->child_io, buffer, length, &bytes_written, &error); if (error) { g_error_free (error); return FALSE; } buffer += bytes_written; length -= bytes_written; } g_io_channel_flush(priv->child_io, NULL); g_free(xml); return TRUE; #endif } const gchar * cut_process_get_result_from_child (CutProcess *process) { #ifdef G_OS_WIN32 return ""; #else return CUT_PROCESS_GET_PRIVATE(process)->cutter_string->str; #endif } void cut_process_exit (CutProcess *process) { #ifndef G_OS_WIN32 CutProcessPrivate *priv = CUT_PROCESS_GET_PRIVATE(process); g_io_channel_unref(priv->child_io); priv->child_io = NULL; #endif _exit(EXIT_SUCCESS); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test.h0000644000175000017500000001505411205747026020112 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_H__ #define __CUT_TEST_H__ #include #include #include G_BEGIN_DECLS #define CUT_TYPE_TEST (cut_test_get_type ()) #define CUT_TEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST, CutTest)) #define CUT_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST, CutTestClass)) #define CUT_IS_TEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST)) #define CUT_IS_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST)) #define CUT_TEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST, CutTestClass)) typedef struct _CutTestClass CutTestClass; typedef struct _CutTestResultClass CutTestResultClass; typedef void (*CutTestFunction) (void); typedef void (*CutAttributesSetupFunction)(void); typedef void (*CutSetupFunction) (void); typedef void (*CutTeardownFunction) (void); struct _CutTest { GObject object; }; struct _CutTestClass { GObjectClass parent_class; void (*start) (CutTest *test, CutTestContext *context); void (*pass_assertion) (CutTest *test, CutTestContext *context); void (*success) (CutTest *test, CutTestContext *context, CutTestResult *result); void (*failure) (CutTest *test, CutTestContext *context, CutTestResult *result); void (*error) (CutTest *test, CutTestContext *context, CutTestResult *result); void (*pending) (CutTest *test, CutTestContext *context, CutTestResult *result); void (*notification) (CutTest *test, CutTestContext *context, CutTestResult *result); void (*omission) (CutTest *test, CutTestContext *context, CutTestResult *result); void (*crash) (CutTest *test, CutTestContext *context, CutTestResult *result); void (*complete) (CutTest *test, CutTestContext *context, gboolean success); gdouble (*get_elapsed) (CutTest *test); void (*set_elapsed) (CutTest *test, gdouble elapsed); gboolean (*run) (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); gboolean (*is_available) (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); void (*invoke) (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); void (*emit_result_signal) (CutTest *test, CutTestContext *test_context, CutTestResult *result); }; GType cut_test_get_type (void) G_GNUC_CONST; CutTest *cut_test_new (const gchar *name, CutTestFunction function); CutTest *cut_test_new_empty (void); gboolean cut_test_run (CutTest *test, CutTestContext *test_context, CutRunContext *run_context); const gchar *cut_test_get_name (CutTest *test); void cut_test_set_name (CutTest *test, const gchar *name); const gchar *cut_test_get_full_name (CutTest *test); const gchar *cut_test_get_description (CutTest *test); void cut_test_get_start_time (CutTest *test, GTimeVal *start_time); void cut_test_set_start_time (CutTest *test, GTimeVal *start_time); gdouble cut_test_get_elapsed (CutTest *test); void cut_test_set_elapsed (CutTest *test, gdouble elapsed); const gchar *cut_test_get_attribute (CutTest *test, const gchar *name); void cut_test_set_attribute (CutTest *test, const gchar *name, const gchar *value); GHashTable *cut_test_get_attributes (CutTest *test); const gchar *cut_test_get_base_directory (CutTest *test); void cut_test_set_base_directory (CutTest *test, const gchar *base_directory); gchar *cut_test_to_xml (CutTest *test); void cut_test_to_xml_string (CutTest *test, GString *string, guint indent); void cut_test_set_result_elapsed (CutTest *test, CutTestResult *result); void cut_test_emit_result_signal (CutTest *test, CutTestContext *test_context, CutTestResult *result); G_END_DECLS #endif /* __CUT_TEST_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-string-diff-writer.h0000644000175000017500000000434011264334641022655 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_STRING_DIFF_WRITER_H__ #define __CUT_STRING_DIFF_WRITER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_STRING_DIFF_WRITER (cut_string_diff_writer_get_type ()) #define CUT_STRING_DIFF_WRITER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_STRING_DIFF_WRITER, CutStringDiffWriter)) #define CUT_STRING_DIFF_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_STRING_DIFF_WRITER, CutStringDiffWriterClass)) #define CUT_IS_STRING_DIFF_WRITER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_STRING_DIFF_WRITER)) #define CUT_IS_STRING_DIFF_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_STRING_DIFF_WRITER)) #define CUT_STRING_DIFF_WRITER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_STRING_DIFF_WRITER, CutStringDiffWriterClass)) typedef struct _CutStringDiffWriter CutStringDiffWriter; typedef struct _CutStringDiffWriterClass CutStringDiffWriterClass; struct _CutStringDiffWriter { CutDiffWriter object; }; struct _CutStringDiffWriterClass { CutDiffWriterClass parent_class; }; GType cut_string_diff_writer_get_type (void) G_GNUC_CONST; CutDiffWriter *cut_string_diff_writer_new (void); const gchar *cut_string_diff_writer_get_result (CutDiffWriter *writer); G_END_DECLS #endif /* __CUT_STRING_DIFF_WRITER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-listener.c0000644000175000017500000000377511205747026020762 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-listener.h" GType cut_listener_get_type (void) { static GType listener_type = 0; if (!listener_type) { const GTypeInfo listener_info = { sizeof(CutListenerClass), /* class_size */ NULL, /* base_init */ NULL, /* base_finalize */ }; listener_type = g_type_register_static(G_TYPE_INTERFACE, "CutListener", &listener_info, 0); } return listener_type; } void cut_listener_attach_to_run_context (CutListener *listener, CutRunContext *run_context) { if (CUT_LISTENER_GET_CLASS(listener)->attach_to_run_context) CUT_LISTENER_GET_CLASS(listener)->attach_to_run_context(listener, run_context); } void cut_listener_detach_from_run_context (CutListener *listener, CutRunContext *run_context) { if (CUT_LISTENER_GET_CLASS(listener)->detach_from_run_context) CUT_LISTENER_GET_CLASS(listener)->detach_from_run_context(listener, run_context); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-main.h0000644000175000017500000000306711264343373020062 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_MAIN_H__ #define __CUT_MAIN_H__ #include #include #include G_BEGIN_DECLS void cut_init_environment (int *argc, char ***argv); void cut_quit_environment (void); void cut_init (int *argc, char ***argv); void cut_quit (void); gboolean cut_run (void); gboolean cut_run_iteration (void); void cut_set_cutter_command_path (const char *argv0); const char *cut_get_cutter_command_path (void); CutRunContext *cut_create_run_context(void); gboolean cut_start_run_context (CutRunContext *run_context); G_END_DECLS #endif /* __CUT_MAIN_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-experimental.h0000644000175000017500000000706511205747026021633 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_EXPERIMENTAL_H__ #define __CUT_EXPERIMENTAL_H__ #ifdef __cplusplus extern "C" { #endif /** * SECTION: cut-experimental * @title: Experimental * @short_description: Experimental API. * * This API may be changed in the future. */ /** * cut_fork: * * Makes child process. * * e.g.: * |[ * int pid; * pid = cut_fork(); * cut_assert_errno(); * * if (pid == 0) { * do_something_for_child_process(); * _exit(EXIT_SUCCESS); * } * * do_something_for_parent_process(); * ]| * * Returns: Process ID. * * Since: 0.8 */ #define cut_fork() \ cut_test_context_trap_fork(cut_get_current_test_context()) /** * cut_wait_process: * @pid: Process ID to wait. * @usec_timeout: Timeout in usec. * * Waits a process specified by @pid. * * e.g.: * |[ * int pid; * pid = cut_fork(); * cut_assert_errno(); * * if (pid == 0) { * do_something_for_child_process(); * _exit(EXIT_SUCCESS); * } * * do_something_for_parent_process(); * cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); * ]| * * Since: 0.8 */ #define cut_wait_process(pid, usec_timeout) \ cut_test_context_wait_process(cut_get_current_test_context(), \ pid, usec_timeout) /** * cut_fork_get_stdout_message: * @pid: Process ID. * * Reads a message from a process specified by @pid. * * e.g.: * |[ * int pid; * pid = cut_fork(); * cut_assert_errno(); * * if (pid == 0) { * g_print("I'm a child."); * _exit(EXIT_SUCCESS); * } * * cut_assert_equal_string("I'm a child.", cut_fork_get_stdout_message(pid)); * cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); * ]| * * Returns: a message read from stdout of a process specified by @pid. * * Since: 0.8 */ #define cut_fork_get_stdout_message(pid) \ cut_test_context_get_forked_stdout_message( \ cut_get_current_test_context(), pid) /** * cut_fork_get_stderr_message: * @pid: Process ID. * * Reads a message from a process specified by @pid. * * e.g.: * |[ * int pid; * pid = cut_fork(); * cut_assert_errno(); * * if (pid == 0) { * g_print("I'm a child."); * _exit(EXIT_SUCCESS); * } * * cut_assert_equal_string("I'm a child.", cut_fork_get_stderr_message(pid)); * cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); * ]| * * Returns: a message read from stderr of a process specified by @pid. * * Since: 0.8 */ #define cut_fork_get_stderr_message(pid) \ cut_test_context_get_forked_stderr_message( \ cut_get_current_test_context(), pid) #ifdef __cplusplus } #endif #endif /* __CUT_EXPERIMENTAL_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-data.h0000644000175000017500000000600611205747026021016 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_DATA_H__ #define __CUT_TEST_DATA_H__ #include #include #include G_BEGIN_DECLS #define CUT_TYPE_TEST_DATA (cut_test_data_get_type ()) #define CUT_TEST_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST_DATA, CutTestData)) #define CUT_TEST_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST_DATA, CutTestDataClass)) #define CUT_IS_TEST_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST_DATA)) #define CUT_IS_TEST_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST_DATA)) #define CUT_TEST_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST_DATA, CutTestDataClass)) typedef struct _CutTestData CutTestData; typedef struct _CutTestDataClass CutTestDataClass; struct _CutTestData { GObject object; }; struct _CutTestDataClass { GObjectClass parent_class; }; GType cut_test_data_get_type (void) G_GNUC_CONST; CutTestData *cut_test_data_new (const gchar *name, gpointer value, CutDestroyFunction destroy_function); CutTestData *cut_test_data_new_empty (void); const gchar *cut_test_data_get_name (CutTestData *test_data); void cut_test_data_set_name (CutTestData *test_data, const gchar *name_data); gpointer cut_test_data_get_value (CutTestData *test_data); void cut_test_data_set_value (CutTestData *test_data, gpointer value, CutDestroyFunction destroy_function); gchar *cut_test_data_to_xml (CutTestData *test_data); void cut_test_data_to_xml_string (CutTestData *test_data, GString *string, guint indent); G_END_DECLS #endif /* __CUT_TEST_DATA_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-module-factory.h0000644000175000017500000000572511243245111022057 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_MODULE_FACTORY_H__ #define __CUT_MODULE_FACTORY_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_MODULE_FACTORY (cut_module_factory_get_type ()) #define CUT_MODULE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_MODULE_FACTORY, CutModuleFactory)) #define CUT_MODULE_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_MODULE_FACTORY, CutModuleFactoryClass)) #define CUT_IS_MODULE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_MODULE_FACTORY)) #define CUT_IS_MODULE_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_MODULE_FACTORY)) #define CUT_MODULE_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_MODULE_FACTORY, CutModuleFactoryClass)) typedef struct _CutModuleFactory CutModuleFactory; typedef struct _CutModuleFactoryClass CutModuleFactoryClass; struct _CutModuleFactory { GObject object; }; struct _CutModuleFactoryClass { GObjectClass parent_class; void (*set_option_group) (CutModuleFactory *factory, GOptionContext *context); GObject *(*create) (CutModuleFactory *factory); }; GType cut_module_factory_get_type (void) G_GNUC_CONST; CutModuleFactory *cut_module_factory_new (const gchar *type, const gchar *name, const gchar *first_property, ...); CutModuleFactory *cut_module_factory_new_valist (const gchar *type, const gchar *name, const gchar *first_property, va_list var_args); void cut_module_factory_set_option_group (CutModuleFactory *factory, GOptionContext *context); GObject *cut_module_factory_create (CutModuleFactory *factory); G_END_DECLS #endif /* __CUT_MODULE_FACTORY_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-report-factory-builder.c0000644000175000017500000002225311205747026023531 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-utils.h" #include "cut-report-factory-builder.h" #include "cut-module-factory.h" #include "cut-module-factory-utils.h" static CutReportFactoryBuilder *the_builder = NULL; #ifdef G_OS_WIN32 static gchar *win32_report_factory_module_dir = NULL; #endif #define CUT_REPORT_FACTORY_BUILDER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_REPORT_FACTORY_BUILDER, CutReportFactoryBuilderPrivate)) typedef struct _CutReportFactoryBuilderPrivate CutReportFactoryBuilderPrivate; struct _CutReportFactoryBuilderPrivate { GList *names; gchar **filenames; GOptionEntry *option_entries; }; static GObject *constructor (GType type, guint n_props, GObjectConstructParam *props); static void dispose (GObject *object); static void set_option_context (CutFactoryBuilder *builder, GOptionContext *context); static GList *build (CutFactoryBuilder *builder); static GList *build_all (CutFactoryBuilder *builder); static const gchar *get_type_name (CutFactoryBuilder *builder); G_DEFINE_TYPE(CutReportFactoryBuilder, cut_report_factory_builder, CUT_TYPE_FACTORY_BUILDER) static void cut_report_factory_builder_class_init (CutReportFactoryBuilderClass *klass) { GObjectClass *gobject_class; CutFactoryBuilderClass *builder_class; gobject_class = G_OBJECT_CLASS(klass); builder_class = CUT_FACTORY_BUILDER_CLASS(klass); gobject_class->constructor = constructor; gobject_class->dispose = dispose; builder_class->set_option_context = set_option_context; builder_class->build = build; builder_class->build_all = build_all; builder_class->get_type_name = get_type_name; g_type_class_add_private(gobject_class, sizeof(CutReportFactoryBuilderPrivate)); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object; if (!the_builder) { GObjectClass *klass; klass = G_OBJECT_CLASS(cut_report_factory_builder_parent_class); object = klass->constructor(type, n_props, props); the_builder = CUT_REPORT_FACTORY_BUILDER(object); } else { object = g_object_ref(the_builder); } return object; } static void cut_report_factory_builder_init (CutReportFactoryBuilder *builder) { CutReportFactoryBuilderPrivate *priv; const gchar *dir; priv = CUT_REPORT_FACTORY_BUILDER_GET_PRIVATE(builder); priv->names = NULL; priv->filenames = NULL; priv->option_entries = NULL; dir = g_getenv("CUT_REPORT_FACTORY_MODULE_DIR"); if (!dir) { #ifdef G_OS_WIN32 if (!win32_report_factory_module_dir) win32_report_factory_module_dir = cut_win32_build_factory_module_dir_name("report"); dir = win32_report_factory_module_dir; #else dir = REPORT_FACTORY_MODULEDIR; #endif } g_object_set(G_OBJECT(builder), "module-dir", dir, NULL); cut_module_factory_load(dir, "report"); } static void free_option_entries (CutReportFactoryBuilderPrivate *priv, GOptionEntry *entries) { GList *node; guint n_reports, i; n_reports = g_list_length(priv->names); for (i = 0, node = priv->names; i < n_reports && node; i++, node = g_list_next(node)) { g_free((gchar *)entries[i].long_name); g_free((gchar *)entries[i].description); } g_free(entries); } static void dispose (GObject *object) { CutReportFactoryBuilderPrivate *priv; priv = CUT_REPORT_FACTORY_BUILDER_GET_PRIVATE(object); if (priv->option_entries) { free_option_entries(priv, priv->option_entries); priv->option_entries = NULL; } if (priv->names) { g_list_foreach(priv->names, (GFunc)g_free, NULL); g_list_free(priv->names); priv->names = NULL; } if (priv->filenames) { g_strfreev(priv->filenames); priv->filenames = NULL; } G_OBJECT_CLASS(cut_report_factory_builder_parent_class)->dispose(object); } static GOptionEntry * create_option_entries (CutFactoryBuilder *builder) { GList *node; guint n_reports, i; GOptionEntry *entries; CutReportFactoryBuilderPrivate *priv; priv = CUT_REPORT_FACTORY_BUILDER_GET_PRIVATE(builder); if (!priv->names) priv->names = cut_module_factory_get_names("report"); if (!priv->names) return NULL; n_reports = g_list_length(priv->names); entries = g_new0(GOptionEntry, n_reports + 1); priv->filenames = g_new0(gchar*, n_reports + 1); priv->filenames[n_reports] = NULL; for (i = 0, node = priv->names; i < n_reports && node; i++, node = g_list_next(node)) { const gchar *name = node->data; entries[i].long_name = g_strconcat(name, "-report", NULL); entries[i].arg = G_OPTION_ARG_STRING; entries[i].arg_data = &priv->filenames[i]; entries[i].description = g_strdup_printf(_("Set filename of %s report"), name); entries[i].arg_description = "FILE"; } return entries; } static void set_option_context (CutFactoryBuilder *builder, GOptionContext *context) { GOptionGroup *group; GOptionEntry *entries; CutReportFactoryBuilderPrivate *priv; priv = CUT_REPORT_FACTORY_BUILDER_GET_PRIVATE(builder); group = g_option_group_new(("report"), _("Report Options"), _("Show report options"), builder, NULL); entries = create_option_entries(builder); if (!entries) return; g_option_group_add_entries(group, entries); g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); g_option_context_add_group(context, group); priv->option_entries = entries; } static CutModuleFactory * build_factory (CutFactoryBuilder *builder, const gchar *report_type, const gchar *first_property, ...) { CutModuleFactory *factory = NULL; if (cut_module_factory_exist_module("report", report_type)) { GOptionContext *option_context; va_list var_args; va_start(var_args, first_property); factory = cut_module_factory_new_valist("report", report_type, first_property, var_args); va_end(var_args); g_object_get(builder, "option-context", &option_context, NULL); cut_module_factory_set_option_group(factory, option_context); } return factory; } static GList * build (CutFactoryBuilder *builder) { GList *factories = NULL; CutReportFactoryBuilderPrivate *priv; const gchar **filename; GList *node; priv = CUT_REPORT_FACTORY_BUILDER_GET_PRIVATE(builder); for (filename = (const gchar **)priv->filenames, node = priv->names; node; filename++, node = g_list_next(node)) { CutModuleFactory *factory; const gchar *report_type; if (!*filename) continue; report_type = node->data; factory = build_factory(builder, report_type, "filename", *filename, NULL); if (factory) factories = g_list_prepend(factories, factory); } return g_list_reverse(factories); } static GList * build_all (CutFactoryBuilder *builder) { GList *factories = NULL, *node; GList *factory_names; factory_names = cut_module_factory_get_names("report"); for (node = factory_names; node; node = g_list_next(node)) { CutModuleFactory *module_factory; GOptionContext *option_context; module_factory = cut_module_factory_new("report", node->data, NULL); g_object_get(builder, "option-context", &option_context, NULL); cut_module_factory_set_option_group(module_factory, option_context); factories = g_list_prepend(factories, module_factory); } return g_list_reverse(factories); } static const gchar * get_type_name (CutFactoryBuilder *builder) { return "report"; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-ui-factory-builder.h0000644000175000017500000000410511205747026022634 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_UI_FACTORY_BUILDER_H__ #define __CUT_UI_FACTORY_BUILDER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_UI_FACTORY_BUILDER (cut_ui_factory_builder_get_type ()) #define CUT_UI_FACTORY_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_UI_FACTORY_BUILDER, CutUIFactoryBuilder)) #define CUT_UI_FACTORY_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_UI_FACTORY_BUILDER, CutUIFactoryBuilderClass)) #define CUT_IS_UI_FACTORY_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_UI_FACTORY_BUILDER)) #define CUT_IS_UI_FACTORY_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_UI_FACTORY_BUILDER)) #define CUT_UI_FACTORY_BUILDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_UI_FACTORY_BUILDER, CutUIFactoryBuilderClass)) typedef struct _CutUIFactoryBuilder CutUIFactoryBuilder; typedef struct _CutUIFactoryBuilderClass CutUIFactoryBuilderClass; struct _CutUIFactoryBuilder { CutFactoryBuilder object; }; struct _CutUIFactoryBuilderClass { CutFactoryBuilderClass parent_class; }; GType cut_ui_factory_builder_get_type (void) G_GNUC_CONST; G_END_DECLS #endif /* __CUT_UI_FACTORY_BUILDER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-module-factory.c0000644000175000017500000000571511205747026022063 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-module.h" #include "cut-module-factory.h" #include "cut-module-factory-utils.h" #include "cut-factory-builder.h" #define cut_module_factory_init init G_DEFINE_ABSTRACT_TYPE(CutModuleFactory, cut_module_factory, G_TYPE_OBJECT) #undef cut_module_factory_init static void cut_module_factory_class_init (CutModuleFactoryClass *klass) { klass->set_option_group = NULL; } static void init (CutModuleFactory *factory) { } CutModuleFactory * cut_module_factory_new_valist (const gchar *type, const gchar *name, const gchar *first_property, va_list var_args) { CutModule *module; GObject *factory; module = cut_module_factory_load_module(type, name); g_return_val_if_fail(module != NULL, NULL); factory = cut_module_instantiate(module, first_property, var_args); return CUT_MODULE_FACTORY(factory); } CutModuleFactory * cut_module_factory_new (const gchar *type, const gchar *name, const gchar *first_property, ...) { CutModule *module; GObject *factory; va_list var_args; module = cut_module_factory_load_module(type, name); if (!module) return NULL; va_start(var_args, first_property); factory = cut_module_instantiate(module, first_property, var_args); va_end(var_args); return CUT_MODULE_FACTORY(factory); } void cut_module_factory_set_option_group (CutModuleFactory *factory, GOptionContext *context) { CutModuleFactoryClass *klass; g_return_if_fail(CUT_IS_MODULE_FACTORY(factory)); klass = CUT_MODULE_FACTORY_GET_CLASS(factory); g_return_if_fail(klass->set_option_group); klass->set_option_group(factory, context); } GObject * cut_module_factory_create (CutModuleFactory *factory) { CutModuleFactoryClass *klass; g_return_val_if_fail(CUT_IS_MODULE_FACTORY(factory), NULL); klass = CUT_MODULE_FACTORY_GET_CLASS(factory); g_return_val_if_fail(klass->create, NULL); return klass->create(factory); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-pipeline.h0000644000175000017500000000447411205747026020744 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_PIPELINE_H__ #define __CUT_PIPELINE_H__ #include #include G_BEGIN_DECLS #define CUT_PIPELINE_ERROR (cut_pipeline_error_quark()) #define CUT_TYPE_PIPELINE (cut_pipeline_get_type ()) #define CUT_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_PIPELINE, CutPipeline)) #define CUT_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_PIPELINE, CutPipelineClass)) #define CUT_IS_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_PIPELINE)) #define CUT_IS_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_PIPELINE)) #define CUT_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_PIPELINE, CutPipelineClass)) typedef struct _CutPipeline CutPipeline; typedef struct _CutPipelineClass CutPipelineClass; struct _CutPipeline { CutStreamReader object; }; struct _CutPipelineClass { CutStreamReaderClass parent_class; }; typedef enum { CUT_PIPELINE_ERROR_PIPE, CUT_PIPELINE_ERROR_COMMAND_LINE, CUT_PIPELINE_ERROR_SPAWN, CUT_PIPELINE_ERROR_CHILD_PID, CUT_PIPELINE_ERROR_IO_ERROR } CutPipelineError; GQuark cut_pipeline_error_quark(void); GType cut_pipeline_get_type (void) G_GNUC_CONST; CutRunContext *cut_pipeline_new (void); CutRunContext *cut_pipeline_new_from_run_context (CutRunContext *run_context); G_END_DECLS #endif /* __CUT_PIPELINE_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-pipeline.c0000644000175000017500000003576011523776717020755 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #ifdef HAVE_SYS_WAIT_H # include #endif #include "cut-pipeline.h" #include "cut-test-result.h" #include "cut-runner.h" #include "cut-experimental.h" #include "cut-utils.h" #ifdef G_OS_WIN32 # include # define pipe(phandles) _pipe(phandles, 4096, _O_BINARY) #else # include #endif #define CUT_PIPELINE_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_PIPELINE, CutPipelinePrivate)) typedef struct _CutPipelinePrivate CutPipelinePrivate; struct _CutPipelinePrivate { GPid pid; guint process_source_id; guint child_out_source_id; GIOChannel *child_out; gint child_pipe[2]; }; static CutRunnerIface *parent_runner_iface; static void runner_init (CutRunnerIface *iface); G_DEFINE_TYPE_WITH_CODE(CutPipeline, cut_pipeline, CUT_TYPE_STREAM_READER, G_IMPLEMENT_INTERFACE(CUT_TYPE_RUNNER, runner_init)) static void dispose (GObject *object); static void runner_run_async (CutRunner *runner); static void cut_pipeline_class_init (CutPipelineClass *klass) { GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; g_type_class_add_private(gobject_class, sizeof(CutPipelinePrivate)); } static void cut_pipeline_init (CutPipeline *pipeline) { CutPipelinePrivate *priv = CUT_PIPELINE_GET_PRIVATE(pipeline); priv->process_source_id = 0; priv->child_out_source_id = 0; priv->pid = 0; priv->child_out = NULL; priv->child_pipe[0] = -1; priv->child_pipe[1] = -1; } static void runner_init (CutRunnerIface *iface) { parent_runner_iface = g_type_interface_peek_parent(iface); iface->run_async = runner_run_async; iface->run = NULL; } static void remove_child_watch_func (CutPipelinePrivate *priv) { g_source_remove(priv->process_source_id); priv->process_source_id = 0; } static void remove_child_out_watch_func (CutPipelinePrivate *priv) { g_source_remove(priv->child_out_source_id); priv->child_out_source_id = 0; } static void close_child (CutPipelinePrivate *priv) { g_spawn_close_pid(priv->pid); priv->pid = 0; } static void unref_child_out_channel (CutPipelinePrivate *priv) { g_io_channel_unref(priv->child_out); priv->child_out = NULL; } static void dispose (GObject *object) { CutPipelinePrivate *priv = CUT_PIPELINE_GET_PRIVATE(object); if (priv->process_source_id) remove_child_watch_func(priv); if (priv->child_out_source_id) remove_child_out_watch_func(priv); if (priv->pid) close_child(priv); if (priv->child_out) unref_child_out_channel(priv); G_OBJECT_CLASS(cut_pipeline_parent_class)->dispose(object); } CutRunContext * cut_pipeline_new (void) { return g_object_new(CUT_TYPE_PIPELINE, NULL); } CutRunContext * cut_pipeline_new_from_run_context (CutRunContext *run_context) { return g_object_new(CUT_TYPE_PIPELINE, "test-directory", cut_run_context_get_test_directory(run_context), "use-multi-thread", cut_run_context_get_multi_thread(run_context), "max-threads", cut_run_context_get_max_threads(run_context), "handle-signals", cut_run_context_get_handle_signals(run_context), "exclude-files", cut_run_context_get_exclude_files(run_context), "exclude-directories", cut_run_context_get_exclude_directories(run_context), "target-test-case-names", cut_run_context_get_target_test_case_names(run_context), "target-test-names", cut_run_context_get_target_test_names(run_context), "test-case-order", cut_run_context_get_test_case_order(run_context), "source-directory", cut_run_context_get_source_directory(run_context), "command-line-args", cut_run_context_get_command_line_args(run_context), "fatal-failures", cut_run_context_get_fatal_failures(run_context), "keep-opening-modules", cut_run_context_get_keep_opening_modules(run_context), "enable-convenience-attribute-definition", cut_run_context_get_enable_convenience_attribute_definition(run_context), NULL); } GQuark cut_pipeline_error_quark (void) { return g_quark_from_static_string("cut-pipeline-error-quark"); } #define emit_error(pipeline, code, error, ...) do \ { \ CutPipeline *_pipeline; \ CutPipelinePrivate *_priv; \ CutRunContext *_run_context; \ \ _pipeline = (pipeline); \ _priv = CUT_PIPELINE_GET_PRIVATE(_pipeline); \ _run_context = CUT_RUN_CONTEXT(_pipeline); \ cut_run_context_emit_error(_run_context, CUT_PIPELINE_ERROR, \ code, error, \ __VA_ARGS__); \ cut_run_context_emit_complete_run(_run_context, FALSE); \ } while (0) static void reap_child (CutPipeline *pipeline, GPid pid) { CutPipelinePrivate *priv = CUT_PIPELINE_GET_PRIVATE(pipeline); if (priv->pid != pid) return; remove_child_watch_func(priv); remove_child_out_watch_func(priv); unref_child_out_channel(priv); close_child(priv); } static gboolean read_stream (CutPipeline *pipeline, GIOChannel *channel) { return cut_stream_reader_read_from_io_channel(CUT_STREAM_READER(pipeline), channel); } static void child_watch_func (GPid pid, gint status, gpointer data) { CutPipeline *pipeline = data; CutPipelinePrivate *priv; priv = CUT_PIPELINE_GET_PRIVATE(pipeline); read_stream(pipeline, priv->child_out); reap_child(pipeline, pid); } static GIOChannel * create_child_out_channel (CutPipeline *pipeline) { GIOChannel *channel; CutStreamReader *reader; CutPipelinePrivate *priv; priv = CUT_PIPELINE_GET_PRIVATE(pipeline); if (priv->child_pipe[CUT_READ] == -1) return NULL; #ifndef G_OS_WIN32 channel = g_io_channel_unix_new(priv->child_pipe[CUT_READ]); #else channel = g_io_channel_win32_new_fd(priv->child_pipe[CUT_READ]); #endif if (!channel) return NULL; g_io_channel_set_close_on_unref(channel, TRUE); reader = CUT_STREAM_READER(pipeline); /* FIXME: should connect "error" or "complete-run" * signal and cleanup resource. */ priv->child_out_source_id = cut_stream_reader_watch_io_channel(reader, channel); return channel; } static gchar ** create_command_line_args_from_argv (CutPipeline *pipeline, const gchar **argv) { CutPipelinePrivate *priv; CutRunContext *run_context; gchar **new_argv; gchar **copy; const gchar *test_directory; gchar *stream_fd; guint i; guint length; priv = CUT_PIPELINE_GET_PRIVATE(pipeline); run_context = CUT_RUN_CONTEXT(pipeline); length = g_strv_length((gchar **)argv); /* remove the last argument in which test directory is stored */ copy = g_new(gchar *, length); for (i = 0; i < length - 1; i++) { copy[i] = g_strdup(argv[i]); } copy[i] = NULL; stream_fd = g_strdup_printf("--stream-fd=%d", priv->child_pipe[CUT_WRITE]); test_directory = cut_run_context_get_test_directory(run_context); new_argv = cut_utils_strv_concat((const gchar **)copy, "--ui=console", "-v", "s", "--notify", "no", "--stream=xml", stream_fd, test_directory, NULL); g_free(stream_fd); g_strfreev(copy); return new_argv; } static void append_arg (GArray *argv, const gchar *arg) { gchar *dupped_arg; dupped_arg = g_strdup(arg); g_array_append_val(argv, dupped_arg); } static void append_arg_printf (GArray *argv, const gchar *format, ...) { gchar *arg; va_list args; va_start(args, format); arg = g_strdup_vprintf(format, args); va_end(args); g_array_append_val(argv, arg); } static gchar ** create_command_line_args_from_parameters (CutPipeline *pipeline) { CutPipelinePrivate *priv; CutRunContext *run_context; GArray *argv; const gchar *directory; const gchar **strings; priv = CUT_PIPELINE_GET_PRIVATE(pipeline); run_context = CUT_RUN_CONTEXT(pipeline); argv = g_array_new(TRUE, TRUE, sizeof(gchar *)); append_arg(argv, cut_utils_get_cutter_command_path()); append_arg(argv, "--verbose=silent"); append_arg(argv, "--notify=no"); append_arg(argv, "--stream=xml"); append_arg_printf(argv, "--stream-fd=%d", priv->child_pipe[CUT_WRITE]); directory = cut_run_context_get_source_directory(run_context); if (directory) append_arg_printf(argv, "--source-directory=%s", directory); if (cut_run_context_get_multi_thread(run_context)) append_arg(argv, "--multi-thread"); append_arg_printf(argv, "--max-threads=%d", cut_run_context_get_max_threads(run_context)); strings = cut_run_context_get_exclude_files(run_context); while (strings && *strings) { append_arg_printf(argv, "--exclude-file=%s", *strings); strings++; } strings = cut_run_context_get_exclude_directories(run_context); while (strings && *strings) { append_arg_printf(argv, "--exclude-directory=%s", *strings); strings++; } strings = cut_run_context_get_target_test_case_names(run_context); while (strings && *strings) { append_arg_printf(argv, "--test-case=%s", *strings); strings++; } strings = cut_run_context_get_target_test_names(run_context); while (strings && *strings) { append_arg_printf(argv, "--name=%s", *strings); strings++; } if (cut_run_context_get_fatal_failures(run_context)) append_arg(argv, "--fatal-failures"); append_arg(argv, cut_run_context_get_test_directory(run_context)); return (gchar **)(g_array_free(argv, FALSE)); } static gchar ** create_command_line_args (CutPipeline *pipeline) { CutRunContext *run_context; const gchar **original_argv; gchar **new_args = NULL; run_context = CUT_RUN_CONTEXT(pipeline); g_return_val_if_fail(cut_run_context_get_test_directory(run_context) != NULL, NULL); original_argv = cut_run_context_get_command_line_args(run_context); if (original_argv) { new_args = create_command_line_args_from_argv(pipeline, original_argv); } else { new_args = create_command_line_args_from_parameters(pipeline); } return new_args; } #ifndef G_OS_WIN32 static void setup_child (gpointer user_data) { CutPipeline *pipeline = user_data; CutPipelinePrivate *priv; priv = CUT_PIPELINE_GET_PRIVATE(pipeline); cut_utils_close_pipe(priv->child_pipe, CUT_READ); } #endif static void run_async (CutPipeline *pipeline) { gchar **command_line_args; gboolean result; GError *error = NULL; CutPipelinePrivate *priv; priv = CUT_PIPELINE_GET_PRIVATE(pipeline); if (pipe(priv->child_pipe) < 0) { emit_error(pipeline, CUT_PIPELINE_ERROR_PIPE, NULL, "failed to create pipe: %s", g_strerror(errno)); return; } command_line_args = create_command_line_args(pipeline); if (!command_line_args) { emit_error(pipeline, CUT_PIPELINE_ERROR_COMMAND_LINE, NULL, "failed to generate command line"); return; } result = g_spawn_async_with_pipes(NULL, command_line_args, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_LEAVE_DESCRIPTORS_OPEN | G_SPAWN_DO_NOT_REAP_CHILD, #ifndef G_OS_WIN32 setup_child, #else NULL, #endif pipeline, &priv->pid, NULL, NULL, NULL, &error); g_strfreev(command_line_args); cut_utils_close_pipe(priv->child_pipe, CUT_WRITE); if (!result) { emit_error(pipeline, CUT_PIPELINE_ERROR_SPAWN, error, "failed to spawn child process"); return; } if (priv->pid == (GPid)0) { emit_error(pipeline, CUT_PIPELINE_ERROR_CHILD_PID, error, "failed to get child PID"); return; } priv->child_out = create_child_out_channel(pipeline); if (!priv->child_out) { emit_error(pipeline, CUT_PIPELINE_ERROR_PIPE, error, "failed to connect to child pipe"); return; } priv->process_source_id = g_child_watch_add(priv->pid, child_watch_func, pipeline); } static void runner_run_async (CutRunner *runner) { CutPipeline *pipeline; pipeline = CUT_PIPELINE(runner); run_async(pipeline); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-crash-backtrace.h0000644000175000017500000000376411400051173022141 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_CRASH_BACKTRACE_H__ #define __CUT_CRASH_BACKTRACE_H__ #include #include #include #include #include G_BEGIN_DECLS typedef struct _CutCrashBacktrace CutCrashBacktrace; void cut_crash_backtrace_set_show_on_the_moment (gboolean show_on_the_moment); gboolean cut_crash_backtrace_get_show_on_the_moment (void); void cut_crash_backtrace_reset_signal_received (void); CutCrashBacktrace *cut_crash_backtrace_new (jmp_buf *jump_buffer); void cut_crash_backtrace_free (CutCrashBacktrace *crash_backtrace); void cut_crash_backtrace_emit (CutTestSuite *test_suite, CutTestCase *test_case, CutTest *test, CutTestIterator *test_iterator, CutTestData *test_data, CutTestContext *test_context); G_END_DECLS #endif /* __CUT_BACKTRACE_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-utils-helper.c0000644000175000017500000000362711400051173022507 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "cut-utils.h" #include "cut-test-utils.h" #include const gchar * cut_take_replace_helper (const gchar *target, const gchar *pattern, const gchar *replacement, CutCallbackFunction callback) { gchar *replaced; GError *error = NULL; replaced = cut_utils_regex_replace(pattern, target, replacement, &error); gcut_assert_error_helper(error, "error"); if (callback) callback(); return cut_take_string(replaced); } const gchar * cut_take_convert_helper (const gchar *string, const gchar *to_code_set, const gchar *from_code_set, CutCallbackFunction callback) { gchar *converted; GError *error = NULL; converted = g_convert(string, -1, to_code_set, from_code_set, NULL, NULL, &error); gcut_assert_error_helper(error, "error"); if (callback) callback(); return cut_take_string(converted); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-ui.h0000644000175000017500000000400611205747026017543 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_UI_H__ #define __CUT_UI_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_UI (cut_ui_get_type ()) #define CUT_UI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_UI, CutUI)) #define CUT_UI_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), CUT_TYPE_UI, CutUIClass)) #define CUT_IS_UI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_UI)) #define CUT_IS_UI_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), CUT_TYPE_UI)) #define CUT_UI_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), CUT_TYPE_UI, CutUIClass)) typedef struct _CutUI CutUI; /* Dummy typedef */ typedef struct _CutUIClass CutUIClass; struct _CutUIClass { GTypeInterface base_iface; gboolean (*run) (CutUI *ui, CutRunContext *run_context); }; GType cut_ui_get_type (void) G_GNUC_CONST; void cut_ui_init (void); void cut_ui_quit (void); GObject *cut_ui_new (const gchar *name, const gchar *first_property, ...); gboolean cut_ui_run (CutUI *ui, CutRunContext *run_context); G_END_DECLS #endif /* __CUT_UI_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/Makefile.in0000644000175000017500000011352111525654633020242 0ustar koukou# 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@ 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@ bin_PROGRAMS = cutter$(EXEEXT) cut-diff$(EXEEXT) @GLIB_2_12_TRUE@am__append_1 = \ @GLIB_2_12_TRUE@ $(top_builddir)/glib-compatible/libglib-compatible.la @OS_WIN32_TRUE@am__append_2 = -mwindows @HAVE_GIO_TRUE@am__append_3 = $(GIO_LIBS) subdir = cutter DIST_COMMON = $(cutter_include_HEADERS) $(pkginclude_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/cut-version.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = cut-version.h CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(cutter_includedir)" "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @HAVE_GIO_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) libcutter_la_DEPENDENCIES = $(top_builddir)/gcutter/libgcutter.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__append_1) $(am__DEPENDENCIES_2) am__objects_1 = am__objects_2 = cut-enum-types.lo am__objects_3 = cut-analyzer.lo cut-assertions-helper.lo \ cut-backtrace-entry.lo cut-colorize-differ.lo \ cut-console-diff-writer.lo cut-console.lo cut-contractor.lo \ cut-crash-backtrace.lo cut-diff-writer.lo cut-differ.lo \ cut-elf-loader.lo cut-factory-builder.lo \ cut-file-stream-reader.lo cut-helper.lo cut-iterated-test.lo \ cut-listener.lo cut-loader.lo cut-mach-o-loader.lo cut-main.lo \ cut-module-factory-utils.lo cut-module-factory.lo \ cut-module.lo cut-pe-loader.lo cut-pipeline.lo cut-process.lo \ cut-readable-differ.lo cut-report-factory-builder.lo \ cut-report.lo cut-repository.lo cut-run-context.lo \ cut-runner.lo cut-sequence-matcher.lo \ cut-stream-factory-builder.lo cut-stream-parser.lo \ cut-stream-reader.lo cut-stream.lo cut-string-diff-writer.lo \ cut-sub-process-group.lo cut-sub-process.lo cut-test-case.lo \ cut-test-container.lo cut-test-context.lo cut-test-data.lo \ cut-test-iterator.lo cut-test-result.lo cut-test-runner.lo \ cut-test-suite.lo cut-test-utils-helper.lo cut-test.lo \ cut-ui-factory-builder.lo cut-ui.lo cut-unified-differ.lo \ cut-utils.lo cut-verbose-level.lo am_libcutter_la_OBJECTS = $(am__objects_1) $(am__objects_1) \ $(am__objects_1) $(am__objects_2) $(am__objects_3) libcutter_la_OBJECTS = $(am_libcutter_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libcutter_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libcutter_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(bin_PROGRAMS) am_cut_diff_OBJECTS = cut-diff.$(OBJEXT) cut_diff_OBJECTS = $(am_cut_diff_OBJECTS) cut_diff_DEPENDENCIES = $(builddir)/libcutter.la $(am__DEPENDENCIES_1) am_cutter_OBJECTS = main.$(OBJEXT) cutter_OBJECTS = $(am_cutter_OBJECTS) cutter_DEPENDENCIES = $(builddir)/libcutter.la $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libcutter_la_SOURCES) $(cut_diff_SOURCES) \ $(cutter_SOURCES) DIST_SOURCES = $(libcutter_la_SOURCES) $(cut_diff_SOURCES) \ $(cutter_SOURCES) HEADERS = $(cutter_include_HEADERS) $(pkginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) AM_CFLAGS = \ -DLOCALEDIR=\""$(localedir)"\" \ $(CUTTER_CFLAGS) \ $(COVERAGE_CFLAGS) CLEANFILES = *.gcno *.gcda lib_LTLIBRARIES = libcutter.la cutter_public_headers = \ cut-assertions-helper.h \ cut-assertions.h \ cut-experimental.h \ cut-features.h \ cut-helper.h \ cut-macros.h \ cut-multi-process.h \ cut-public.h \ cut-test-utils-helper.h \ cut-test-utils.h \ cut-types.h \ cut-version.h \ cut-config.h libcutter_public_headers = \ cut-analyzer.h \ cut-backtrace-entry.h \ cut-colorize-differ.h \ cut-console-diff-writer.h \ cut-console.h \ cut-contractor.h \ cut-diff-writer.h \ cut-differ.h \ cut-factory-builder.h \ cut-file-stream-reader.h \ cut-iterated-test.h \ cut-listener-utils.h \ cut-listener.h \ cut-main.h \ cut-module-factory-utils.h \ cut-module-factory.h \ cut-pipeline.h \ cut-private.h \ cut-process.h \ cut-readable-differ.h \ cut-report-factory-builder.h \ cut-report.h \ cut-run-context.h \ cut-runner.h \ cut-stream-factory-builder.h \ cut-stream-parser.h \ cut-stream-reader.h \ cut-stream.h \ cut-string-diff-writer.h \ cut-sub-process-group.h \ cut-sub-process.h \ cut-test-case.h \ cut-test-container.h \ cut-test-context.h \ cut-test-data.h \ cut-test-iterator.h \ cut-test-result.h \ cut-test-runner.h \ cut-test-suite.h \ cut-test.h \ cut-ui-factory-builder.h \ cut-ui.h \ cut-unified-differ.h \ cut-verbose-level.h noinst_headers = \ cut-crash-backtrace.h \ cut-elf-loader.h \ cut-loader.h \ cut-mach-o-loader.h \ cut-module-impl.h \ cut-module.h \ cut-pe-loader.h \ cut-repository.h \ cut-sequence-matcher.h \ cut-utils.h pkginclude_HEADERS = \ cutter.h cutter_includedir = $(pkgincludedir)/cutter cutter_include_HEADERS = \ $(cutter_public_headers) \ $(libcutter_public_headers) \ $(enum_source_prefix).h enum_source_prefix = cut-enum-types enum_sources_h = \ cut-public.h \ $(libcutter_public_headers) # We can't use $(enum_source_prefix) here. :< enum_sources = \ cut-enum-types.c \ cut-enum-types.h MAINTAINERCLEANFILES = \ stamp-$(enum_source_prefix)-c \ stamp-$(enum_source_prefix)-h BUILT_SOURCES = $(enum_sources) cutter_SOURCES = main.c cut_diff_SOURCES = cut-diff.c libcutter_sources = \ cut-analyzer.c \ cut-assertions-helper.c \ cut-backtrace-entry.c \ cut-colorize-differ.c \ cut-console-diff-writer.c \ cut-console.c \ cut-contractor.c \ cut-crash-backtrace.c \ cut-diff-writer.c \ cut-differ.c \ cut-elf-loader.c \ cut-factory-builder.c \ cut-file-stream-reader.c \ cut-helper.c \ cut-iterated-test.c \ cut-listener.c \ cut-loader.c \ cut-mach-o-loader.c \ cut-main.c \ cut-module-factory-utils.c \ cut-module-factory.c \ cut-module.c \ cut-pe-loader.c \ cut-pipeline.c \ cut-process.c \ cut-readable-differ.c \ cut-report-factory-builder.c \ cut-report.c \ cut-repository.c \ cut-run-context.c \ cut-runner.c \ cut-sequence-matcher.c \ cut-stream-factory-builder.c \ cut-stream-parser.c \ cut-stream-reader.c \ cut-stream.c \ cut-string-diff-writer.c \ cut-sub-process-group.c \ cut-sub-process.c \ cut-test-case.c \ cut-test-container.c \ cut-test-context.c \ cut-test-data.c \ cut-test-iterator.c \ cut-test-result.c \ cut-test-runner.c \ cut-test-suite.c \ cut-test-utils-helper.c \ cut-test.c \ cut-ui-factory-builder.c \ cut-ui.c \ cut-unified-differ.c \ cut-utils.c \ cut-verbose-level.c libcutter_la_SOURCES = \ $(cutter_public_headers) \ $(libcutter_public_headers) \ $(noinst_headers) \ $(enum_sources) \ $(libcutter_sources) libcutter_la_LDFLAGS = -version-info $(LT_VERSION_INFO) -no-undefined \ $(am__append_2) libcutter_la_LIBADD = $(top_builddir)/gcutter/libgcutter.la \ $(GLIB_LIBS) $(BFD_LIBS) $(WINDOWS_LIBS) $(am__append_1) \ $(am__append_3) cutter_LDADD = \ $(builddir)/libcutter.la \ $(GLIB_LIBS) cut_diff_LDADD = \ $(builddir)/libcutter.la \ $(GLIB_LIBS) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign cutter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign cutter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): cut-version.h: $(top_builddir)/config.status $(srcdir)/cut-version.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libcutter.la: $(libcutter_la_OBJECTS) $(libcutter_la_DEPENDENCIES) $(AM_V_CCLD)$(libcutter_la_LINK) -rpath $(libdir) $(libcutter_la_OBJECTS) $(libcutter_la_LIBADD) $(LIBS) 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 || test -f $$p1; \ 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list cut-diff$(EXEEXT): $(cut_diff_OBJECTS) $(cut_diff_DEPENDENCIES) @rm -f cut-diff$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cut_diff_OBJECTS) $(cut_diff_LDADD) $(LIBS) cutter$(EXEEXT): $(cutter_OBJECTS) $(cutter_DEPENDENCIES) @rm -f cutter$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cutter_OBJECTS) $(cutter_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-analyzer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-assertions-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-backtrace-entry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-colorize-differ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-console-diff-writer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-console.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-contractor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-crash-backtrace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-diff-writer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-diff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-differ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-elf-loader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-enum-types.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-factory-builder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-file-stream-reader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-iterated-test.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-listener.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-loader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-mach-o-loader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-main.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-module-factory-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-module-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-module.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-pe-loader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-pipeline.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-readable-differ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-report-factory-builder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-report.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-repository.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-run-context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-runner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-sequence-matcher.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-stream-factory-builder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-stream-parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-stream-reader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-stream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-string-diff-writer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-sub-process-group.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-sub-process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-case.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-container.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-iterator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-result.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-runner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-suite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test-utils-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-test.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-ui-factory-builder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-ui.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-unified-differ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cut-verbose-level.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-cutter_includeHEADERS: $(cutter_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(cutter_includedir)" || $(MKDIR_P) "$(DESTDIR)$(cutter_includedir)" @list='$(cutter_include_HEADERS)'; test -n "$(cutter_includedir)" || 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_HEADER) $$files '$(DESTDIR)$(cutter_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(cutter_includedir)" || exit $$?; \ done uninstall-cutter_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(cutter_include_HEADERS)'; test -n "$(cutter_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(cutter_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(cutter_includedir)" && rm -f $$files install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) install-binPROGRAMS: install-libLTLIBRARIES installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(cutter_includedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-cutter_includeHEADERS \ install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-cutter_includeHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libLTLIBRARIES clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-cutter_includeHEADERS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-pkgincludeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-cutter_includeHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS $(enum_source_prefix).c: stamp-$(enum_source_prefix)-c $(enum_source_prefix).h @true stamp-$(enum_source_prefix)-c: $(enum_sources_h) Makefile $(AM_V_GEN)(cd $(srcdir) && \ include_headers="" && \ for h in $(enum_sources_h); do \ include_headers="$${include_headers}#include \"$${h}\"\n"; \ done && \ $(GLIB_MKENUMS) \ --fhead "#include \"$(enum_source_prefix).h\"\n$${include_headers}" \ --fprod "\n/* enumerations from \"@filename@\" */" \ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ --vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \ $(enum_sources_h)) > tmp-$(enum_source_prefix).c && \ (cmp -s tmp-$(enum_source_prefix).c $(enum_source_prefix).c || \ cp tmp-$(enum_source_prefix).c $(enum_source_prefix).c ) && \ rm -f tmp-$(enum_source_prefix).c && \ echo timestamp > $(@F) $(enum_source_prefix).h: stamp-$(enum_source_prefix)-h @true stamp-$(enum_source_prefix)-h: $(enum_sources_h) Makefile $(AM_V_GEN) (cd $(srcdir) && \ mark="__`echo $(enum_source_prefix) | sed -e 's/-/_/g' | tr a-z A-Z`_H__" && \ $(GLIB_MKENUMS) \ --fhead "#ifndef $${mark}\n#define $${mark}\n\n#include \n\nG_BEGIN_DECLS\n" \ --fprod "/* enumerations from \"@filename@\" */\n" \ --vhead "GType @enum_name@_get_type (void);\n#define CUT_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ --ftail "G_END_DECLS\n\n#endif /* $${mark} */" \ $(enum_sources_h)) > tmp-$(enum_source_prefix).h && \ (cmp -s tmp-$(enum_source_prefix).h $(enum_source_prefix).h || \ cp tmp-$(enum_source_prefix).h $(enum_source_prefix).h) && \ rm -f tmp-$(enum_source_prefix).h && \ echo timestamp > $(@F) echo-private-headers: @for header in $(noinst_headers); do \ echo $(abs_srcdir)/$${header}; \ done echo-public-headers: @for header in $(cutter_include_HEADERS); do \ if test "$${header}" = "$(enum_source_prefix).h"; then \ echo $(abs_builddir)/$(enum_source_prefix).h; \ else \ echo $(abs_srcdir)/$${header}; \ fi; \ done echo-libcutter-sources: @echo $(libcutter_sources) $(enum_source_prefix).c # 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: cutter-testing-framework-1.1.7/cutter/cut-module-factory-utils.h0000644000175000017500000000353111205747026023220 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_MODULE_FACTORY_UTILS_H__ #define __CUT_MODULE_FACTORY_UTILS_H__ #include #include G_BEGIN_DECLS void cut_module_factory_init (void); void cut_module_factory_quit (void); const gchar *cut_module_factory_get_default_module_dir (void); void cut_module_factory_set_default_module_dir (const gchar *dir); void cut_module_factory_load (const gchar *dir, const gchar *type); void cut_module_factory_load_all (const gchar *base_dir); void cut_module_factory_unload (void); GList *cut_module_factory_get_names (const gchar *type); gboolean cut_module_factory_exist_module(const gchar *type, const gchar *name); CutModule *cut_module_factory_load_module (const gchar *type, const gchar *name); G_END_DECLS #endif /* __CUT_MODULE_FACTORY_UTILS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-sub-process.h0000644000175000017500000000502411205747026021374 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_SUB_PROCESS_H__ #define __CUT_SUB_PROCESS_H__ #include #include #include G_BEGIN_DECLS #define CUT_TYPE_SUB_PROCESS (cut_sub_process_get_type ()) #define CUT_SUB_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_SUB_PROCESS, CutSubProcess)) #define CUT_SUB_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_SUB_PROCESS, CutSubProcessClass)) #define CUT_IS_SUB_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_SUB_PROCESS)) #define CUT_IS_SUB_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_SUB_PROCESS)) #define CUT_SUB_PROCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_SUB_PROCESS, CutSubProcessClass)) typedef struct _CutSubProcessClass CutSubProcessClass; struct _CutSubProcess { GObject object; }; struct _CutSubProcessClass { GObjectClass parent_class; }; GType cut_sub_process_get_type (void) G_GNUC_CONST; CutSubProcess *cut_sub_process_new (const char *test_directory, CutTestContext *test_context); CutRunContext *cut_sub_process_get_pipeline (CutSubProcess *sub_process); void cut_sub_process_set_pipeline (CutSubProcess *sub_process, CutRunContext *run_context); CutTestContext *cut_sub_process_get_test_context (CutSubProcess *sub_process); void cut_sub_process_set_test_context (CutSubProcess *sub_process, CutTestContext *test_context); G_END_DECLS #endif /* __CUT_SUB_PROCESS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-run-context.c0000644000175000017500000026571411407320456021424 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-run-context.h" #include "cut-runner.h" #include "cut-listener.h" #include "cut-repository.h" #include "cut-test-case.h" #include "cut-test-result.h" #include "cut-enum-types.h" #include #ifdef ERROR # undef ERROR /* for Windows */ #endif #if !GLIB_CHECK_VERSION(2, 18, 0) # define g_set_error_literal(error, domain, code, message) \ g_set_error(error, domain, code, "%s", message) #endif #define CUT_RUN_CONTEXT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_RUN_CONTEXT, CutRunContextPrivate)) typedef struct _CutRunContextPrivate CutRunContextPrivate; struct _CutRunContextPrivate { guint n_tests; guint n_assertions; guint n_successes; guint n_failures; guint n_errors; guint n_pendings; guint n_notifications; guint n_omissions; gdouble elapsed; GTimer *timer; GList *results; GList *reversed_results; gboolean use_multi_thread; gboolean is_multi_thread; gboolean max_threads; gboolean handle_signals; GMutex *mutex; gboolean crashed; gchar *backtrace; gchar *test_directory; gchar **exclude_files; gchar **exclude_directories; gchar *source_directory; gchar *log_directory; gchar **target_test_case_names; gchar **target_test_names; gboolean canceled; CutTestSuite *test_suite; GList *listeners; CutOrder test_case_order; gchar **command_line_args; gboolean completed; gboolean fatal_failures; gboolean keep_opening_modules; gboolean enable_convenience_attribute_definition; gboolean stop_before_test; }; enum { PROP_0, PROP_N_TESTS, PROP_N_ASSERTIONS, PROP_N_SUCCESSES, PROP_N_FAILURES, PROP_N_ERRORS, PROP_N_PENDINGS, PROP_N_NOTIFICATIONS, PROP_N_OMISSIONS, PROP_USE_MULTI_THREAD, PROP_IS_MULTI_THREAD, PROP_MAX_THREADS, PROP_HANDLE_SIGNALS, PROP_TEST_CASE_ORDER, PROP_TEST_DIRECTORY, PROP_SOURCE_DIRECTORY, PROP_LOG_DIRECTORY, PROP_TARGET_TEST_CASE_NAMES, PROP_TARGET_TEST_NAMES, PROP_EXCLUDE_FILES, PROP_EXCLUDE_DIRECTORIES, PROP_COMMAND_LINE_ARGS, PROP_FATAL_FAILURES, PROP_KEEP_OPENING_MODULES, PROP_ENABLE_CONVENIENCE_ATTRIBUTE_DEFINITION, PROP_STOP_BEFORE_TEST }; enum { START_SIGNAL, START_RUN, READY_TEST_SUITE, START_TEST_SUITE, READY_TEST_CASE, START_TEST_CASE, READY_TEST_ITERATOR, START_TEST_ITERATOR, START_TEST, START_ITERATED_TEST, PASS_ASSERTION, SUCCESS_TEST, FAILURE_TEST, ERROR_TEST, PENDING_TEST, NOTIFICATION_TEST, OMISSION_TEST, CRASH_TEST, SUCCESS_TEST_ITERATOR, FAILURE_TEST_ITERATOR, ERROR_TEST_ITERATOR, PENDING_TEST_ITERATOR, NOTIFICATION_TEST_ITERATOR, OMISSION_TEST_ITERATOR, CRASH_TEST_ITERATOR, SUCCESS_TEST_CASE, FAILURE_TEST_CASE, ERROR_TEST_CASE, PENDING_TEST_CASE, NOTIFICATION_TEST_CASE, OMISSION_TEST_CASE, CRASH_TEST_CASE, FAILURE_IN_TEST_CASE, ERROR_IN_TEST_CASE, PENDING_IN_TEST_CASE, NOTIFICATION_IN_TEST_CASE, OMISSION_IN_TEST_CASE, CRASH_IN_TEST_CASE, CRASH_TEST_SUITE, COMPLETE_ITERATED_TEST, COMPLETE_TEST, COMPLETE_TEST_ITERATOR, COMPLETE_TEST_CASE, COMPLETE_TEST_SUITE, COMPLETE_RUN, ERROR, LAST_SIGNAL }; static gint signals[LAST_SIGNAL] = {0}; static CutRunnerIface *parent_runner_iface; static GQuark detail_delegate; static void runner_init (CutRunnerIface *iface); G_DEFINE_ABSTRACT_TYPE_WITH_CODE(CutRunContext, cut_run_context, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(CUT_TYPE_RUNNER, runner_init)); static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void start_run (CutRunContext *context); static void start_iterated_test (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context); static void start_test (CutRunContext *context, CutTest *test, CutTestContext *test_context); static void pass_assertion (CutRunContext *context, CutTest *test, CutTestContext *test_context); static void success_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); static void failure_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); static void error_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); static void pending_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); static void notification_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); static void omission_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); static void crash_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); static void complete_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, gboolean success); static void complete_iterated_test (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success); static void failure_in_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); static void error_in_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); static void pending_in_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); static void notification_in_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); static void omission_in_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); static void crash_in_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); static void crash_test_suite (CutRunContext *context, CutTestSuite *test_suite, CutTestResult *result); static void complete_run (CutRunContext *context, gboolean success); static gboolean runner_run (CutRunner *runner); static void cut_run_context_class_init (CutRunContextClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; klass->start_run = start_run; klass->start_iterated_test = start_iterated_test; klass->start_test = start_test; klass->pass_assertion = pass_assertion; klass->success_test = success_test; klass->failure_test = failure_test; klass->error_test = error_test; klass->pending_test = pending_test; klass->notification_test = notification_test; klass->omission_test = omission_test; klass->crash_test = crash_test; klass->complete_test = complete_test; klass->complete_iterated_test = complete_iterated_test; klass->failure_in_test_case = failure_in_test_case; klass->error_in_test_case = error_in_test_case; klass->pending_in_test_case = pending_in_test_case; klass->notification_in_test_case = notification_in_test_case; klass->omission_in_test_case = omission_in_test_case; klass->crash_in_test_case = crash_in_test_case; klass->crash_test_suite = crash_test_suite; klass->complete_run = complete_run; spec = g_param_spec_uint("n-tests", "Number of tests", "The number of tests of the run context", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_N_TESTS, spec); spec = g_param_spec_uint("n-assertions", "Number of assertions", "The number of assertions of the run context", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_N_ASSERTIONS, spec); spec = g_param_spec_uint("n-successes", "Number of successes", "The number of successes of the run context", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_N_SUCCESSES, spec); spec = g_param_spec_uint("n-failures", "Number of failures", "The number of failures of the run context", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_N_FAILURES, spec); spec = g_param_spec_uint("n-errors", "Number of errors", "The number of errors of the run context", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_N_ERRORS, spec); spec = g_param_spec_uint("n-pendings", "Number of pendings", "The number of pendings of the run context", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_N_PENDINGS, spec); spec = g_param_spec_uint("n-notifications", "Number of notifications", "The number of notifications of the run context", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_N_NOTIFICATIONS, spec); spec = g_param_spec_uint("n-omissions", "Number of omissions", "The number of omissions of the run context", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_N_OMISSIONS, spec); spec = g_param_spec_boolean("use-multi-thread", "Use multi thread", "Whether use multi thread or not in the run context", FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_USE_MULTI_THREAD, spec); spec = g_param_spec_boolean("is-multi-thread", "Is multi thread?", "Whether the run context is running tests with multi thread", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_IS_MULTI_THREAD, spec); spec = g_param_spec_int("max-threads", "Max number of threads", "How many threads are used concurrently at a maximum", -1, G_MAXINT32, 10, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_MAX_THREADS, spec); spec = g_param_spec_boolean("handle-signals", "Whether handle signals", "Whether the run context handles signals", TRUE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_HANDLE_SIGNALS, spec); spec = g_param_spec_enum("test-case-order", "Test case order", "Sort key for test case", CUT_TYPE_ORDER, CUT_ORDER_NONE_SPECIFIED, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_TEST_CASE_ORDER, spec); spec = g_param_spec_string("test-directory", "Test directory", "The directory name in which test cases are stored", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TEST_DIRECTORY, spec); spec = g_param_spec_string("source-directory", "Source directory", "The directory name in which source files are stored", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_SOURCE_DIRECTORY, spec); spec = g_param_spec_string("log-directory", "Log directory", "The directory name in which log files are stored", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_LOG_DIRECTORY, spec); spec = g_param_spec_pointer("target-test-case-names", "Test case names", "The names of the target test case", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TARGET_TEST_CASE_NAMES, spec); spec = g_param_spec_pointer("target-test-names", "Test names", "The names of the target test", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_TARGET_TEST_NAMES, spec); spec = g_param_spec_pointer("exclude-files", "Exclude files", "The file names of excluding from the target", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_EXCLUDE_FILES, spec); spec = g_param_spec_pointer("exclude-directories", "Exclude directories", "The directory names of excluding from target", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_EXCLUDE_DIRECTORIES, spec); spec = g_param_spec_pointer("command-line-args", "Command line arguments", "The argument strings from command line", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_COMMAND_LINE_ARGS, spec); spec = g_param_spec_boolean("fatal-failures", "Fatal failures", "Treat failures as fatal problem", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_FATAL_FAILURES, spec); spec = g_param_spec_boolean("keep-opening-modules", "Keep opening modules", "Keep opening loaded modules to resolve symbols " "for debugging", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_KEEP_OPENING_MODULES, spec); spec = g_param_spec_boolean("enable-convenience-attribute-definition", "Enable convenience attribute definition", "Enable convenience but dangerous " "'#{ATTRIBUTE_NAME}_#{TEST_NAME - 'test_' PREFIX}' " "attribute set function", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_ENABLE_CONVENIENCE_ATTRIBUTE_DEFINITION, spec); spec = g_param_spec_boolean("stop-before-test", "Stops before a test", "Set breakpoint before invoking a test", FALSE, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_STOP_BEFORE_TEST, spec); signals[START_RUN] = g_signal_new("start-run", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, start_run), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); signals[READY_TEST_SUITE] = g_signal_new ("ready-test-suite", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, ready_test_suite), NULL, NULL, _gcut_marshal_VOID__OBJECT_UINT_UINT, G_TYPE_NONE, 3, CUT_TYPE_TEST_SUITE, G_TYPE_UINT, G_TYPE_UINT); signals[START_TEST_SUITE] = g_signal_new ("start-test-suite", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, start_test_suite), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CUT_TYPE_TEST_SUITE); signals[READY_TEST_CASE] = g_signal_new ("ready-test-case", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, ready_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_UINT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, G_TYPE_UINT); signals[START_TEST_CASE] = g_signal_new ("start-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, start_test_case), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CUT_TYPE_TEST_CASE); signals[READY_TEST_ITERATOR] = g_signal_new ("ready-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, ready_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_UINT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, G_TYPE_UINT); signals[START_TEST_ITERATOR] = g_signal_new ("start-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, start_test_iterator), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CUT_TYPE_TEST_ITERATOR); signals[START_TEST] = g_signal_new ("start-test", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, start_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT); signals[START_ITERATED_TEST] = g_signal_new("start-iterated-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, start_iterated_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_ITERATED_TEST, CUT_TYPE_TEST_CONTEXT); signals[PASS_ASSERTION] = g_signal_new ("pass-assertion", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, pass_assertion), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT); signals[SUCCESS_TEST] = g_signal_new ("success-test", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, success_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); signals[FAILURE_TEST] = g_signal_new ("failure-test", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, failure_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); signals[ERROR_TEST] = g_signal_new ("error-test", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, error_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); signals[PENDING_TEST] = g_signal_new ("pending-test", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, pending_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); signals[NOTIFICATION_TEST] = g_signal_new ("notification-test", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (CutRunContextClass, notification_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); signals[OMISSION_TEST] = g_signal_new("omission-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, omission_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); signals[CRASH_TEST] = g_signal_new("crash-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, crash_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); signals[COMPLETE_ITERATED_TEST] = g_signal_new("complete-iterated-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, complete_iterated_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_BOOLEAN, G_TYPE_NONE, 3, CUT_TYPE_ITERATED_TEST, CUT_TYPE_TEST_CONTEXT, G_TYPE_BOOLEAN); signals[COMPLETE_TEST] = g_signal_new("complete-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, complete_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_BOOLEAN, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, G_TYPE_BOOLEAN); signals[SUCCESS_TEST_ITERATOR] = g_signal_new("success-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, success_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_RESULT); signals[FAILURE_TEST_ITERATOR] = g_signal_new("failure-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, failure_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_RESULT); signals[ERROR_TEST_ITERATOR] = g_signal_new("error-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, error_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_RESULT); signals[PENDING_TEST_ITERATOR] = g_signal_new("pending-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, pending_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_RESULT); signals[NOTIFICATION_TEST_ITERATOR] = g_signal_new("notification-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, notification_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_RESULT); signals[OMISSION_TEST_ITERATOR] = g_signal_new("omission-test-iterator", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, omission_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_RESULT); signals[CRASH_TEST_ITERATOR] = g_signal_new("crash-test-iterator", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, crash_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_RESULT); signals[COMPLETE_TEST_ITERATOR] = g_signal_new("complete-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, complete_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, G_TYPE_BOOLEAN); signals[SUCCESS_TEST_CASE] = g_signal_new("success-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, success_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[FAILURE_TEST_CASE] = g_signal_new("failure-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, failure_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[ERROR_TEST_CASE] = g_signal_new("error-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, error_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[PENDING_TEST_CASE] = g_signal_new("pending-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, pending_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[NOTIFICATION_TEST_CASE] = g_signal_new("notification-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, notification_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[OMISSION_TEST_CASE] = g_signal_new("omission-test-case", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, omission_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[CRASH_TEST_CASE] = g_signal_new("crash-test-case", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, crash_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[FAILURE_IN_TEST_CASE] = g_signal_new("failure-in-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, failure_in_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[ERROR_IN_TEST_CASE] = g_signal_new("error-in-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, error_in_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[PENDING_IN_TEST_CASE] = g_signal_new("pending-in-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, pending_in_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[NOTIFICATION_IN_TEST_CASE] = g_signal_new("notification-in-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, notification_in_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[OMISSION_IN_TEST_CASE] = g_signal_new("omission-in-test-case", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, omission_in_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[CRASH_IN_TEST_CASE] = g_signal_new("crash-in-test-case", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, crash_in_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, CUT_TYPE_TEST_RESULT); signals[COMPLETE_TEST_CASE] = g_signal_new("complete-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, complete_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, G_TYPE_BOOLEAN); signals[CRASH_TEST_SUITE] = g_signal_new("crash-test-suite", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, crash_test_suite), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_SUITE, CUT_TYPE_TEST_RESULT); signals[COMPLETE_TEST_SUITE] = g_signal_new("complete-test-suite", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, complete_test_suite), NULL, NULL, _gcut_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2, CUT_TYPE_TEST_SUITE, G_TYPE_BOOLEAN); signals[COMPLETE_RUN] = g_signal_new("complete-run", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, complete_run), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); signals[ERROR] = g_signal_new("error", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET(CutRunContextClass, error), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); g_type_class_add_private(gobject_class, sizeof(CutRunContextPrivate)); } static void cut_run_context_init (CutRunContext *context) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); priv->n_tests = 0; priv->n_assertions = 0; priv->n_successes = 0; priv->n_failures = 0; priv->n_errors = 0; priv->n_pendings = 0; priv->n_notifications = 0; priv->n_omissions = 0; priv->elapsed = 0.0; priv->timer = NULL; priv->results = NULL; priv->reversed_results = NULL; priv->use_multi_thread = FALSE; priv->is_multi_thread = FALSE; priv->max_threads = 10; priv->handle_signals = TRUE; priv->mutex = g_mutex_new(); priv->crashed = FALSE; priv->test_directory = NULL; priv->source_directory = NULL; priv->log_directory = NULL; priv->exclude_files = NULL; priv->exclude_directories = NULL; priv->target_test_case_names = NULL; priv->target_test_names = NULL; priv->canceled = FALSE; priv->test_suite = NULL; priv->listeners = NULL; priv->command_line_args = NULL; priv->completed = FALSE; priv->fatal_failures = FALSE; priv->keep_opening_modules = FALSE; priv->enable_convenience_attribute_definition = FALSE; priv->stop_before_test = FALSE; } static void remove_listener (CutListener *listener, CutRunContext *context) { cut_listener_detach_from_run_context(listener, context); g_object_unref(listener); } static void dispose (GObject *object) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(object); if (priv->timer) { g_timer_destroy(priv->timer); priv->timer = NULL; } if (priv->results) { g_list_foreach(priv->results, (GFunc)g_object_unref, NULL); g_list_free(priv->results); priv->results = NULL; } if (priv->reversed_results) { g_list_free(priv->reversed_results); priv->reversed_results = NULL; } if (priv->mutex) { g_mutex_free(priv->mutex); priv->mutex = NULL; } if (priv->test_suite) { g_object_unref(priv->test_suite); priv->test_suite = NULL; } if (priv->listeners) { g_list_foreach(priv->listeners, (GFunc)remove_listener, CUT_RUN_CONTEXT(object)); g_list_free(priv->listeners); priv->listeners = NULL; } g_free(priv->backtrace); priv->backtrace = NULL; g_free(priv->source_directory); priv->source_directory = NULL; g_free(priv->log_directory); priv->log_directory = NULL; g_free(priv->test_directory); priv->test_directory = NULL; g_strfreev(priv->exclude_files); priv->exclude_files = NULL; g_strfreev(priv->exclude_directories); priv->exclude_directories = NULL; g_strfreev(priv->target_test_case_names); priv->target_test_case_names = NULL; g_strfreev(priv->target_test_names); priv->target_test_names = NULL; g_strfreev(priv->command_line_args); priv->command_line_args = NULL; G_OBJECT_CLASS(cut_run_context_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(object); switch (prop_id) { case PROP_N_TESTS: priv->n_tests = g_value_get_uint(value); break; case PROP_N_ASSERTIONS: priv->n_assertions = g_value_get_uint(value); break; case PROP_N_SUCCESSES: priv->n_successes = g_value_get_uint(value); break; case PROP_N_FAILURES: priv->n_failures = g_value_get_uint(value); break; case PROP_N_ERRORS: priv->n_errors = g_value_get_uint(value); break; case PROP_N_PENDINGS: priv->n_pendings = g_value_get_uint(value); break; case PROP_N_NOTIFICATIONS: priv->n_notifications = g_value_get_uint(value); break; case PROP_N_OMISSIONS: priv->n_omissions = g_value_get_uint(value); break; case PROP_USE_MULTI_THREAD: priv->use_multi_thread = g_value_get_boolean(value); break; case PROP_IS_MULTI_THREAD: priv->is_multi_thread = g_value_get_boolean(value); break; case PROP_MAX_THREADS: priv->max_threads = g_value_get_int(value); break; case PROP_HANDLE_SIGNALS: priv->handle_signals = g_value_get_boolean(value); break; case PROP_TEST_CASE_ORDER: priv->test_case_order = g_value_get_enum(value); break; case PROP_TEST_DIRECTORY: priv->test_directory = g_value_dup_string(value); break; case PROP_SOURCE_DIRECTORY: priv->source_directory = g_value_dup_string(value); break; case PROP_LOG_DIRECTORY: priv->log_directory = g_value_dup_string(value); break; case PROP_TARGET_TEST_CASE_NAMES: priv->target_test_case_names = g_strdupv(g_value_get_pointer(value)); break; case PROP_TARGET_TEST_NAMES: priv->target_test_names = g_strdupv(g_value_get_pointer(value)); break; case PROP_EXCLUDE_FILES: priv->exclude_files = g_strdupv(g_value_get_pointer(value)); break; case PROP_EXCLUDE_DIRECTORIES: priv->exclude_directories = g_strdupv(g_value_get_pointer(value)); break; case PROP_COMMAND_LINE_ARGS: priv->command_line_args = g_strdupv(g_value_get_pointer(value)); break; case PROP_FATAL_FAILURES: priv->fatal_failures = g_value_get_boolean(value); break; case PROP_KEEP_OPENING_MODULES: priv->keep_opening_modules = g_value_get_boolean(value); break; case PROP_ENABLE_CONVENIENCE_ATTRIBUTE_DEFINITION: priv->enable_convenience_attribute_definition = g_value_get_boolean(value); break; case PROP_STOP_BEFORE_TEST: priv->stop_before_test = g_value_get_boolean(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(object); switch (prop_id) { case PROP_N_TESTS: g_value_set_uint(value, priv->n_tests); break; case PROP_N_ASSERTIONS: g_value_set_uint(value, priv->n_assertions); break; case PROP_N_SUCCESSES: g_value_set_uint(value, priv->n_successes); break; case PROP_N_FAILURES: g_value_set_uint(value, priv->n_failures); break; case PROP_N_ERRORS: g_value_set_uint(value, priv->n_errors); break; case PROP_N_PENDINGS: g_value_set_uint(value, priv->n_pendings); break; case PROP_N_NOTIFICATIONS: g_value_set_uint(value, priv->n_notifications); break; case PROP_N_OMISSIONS: g_value_set_uint(value, priv->n_omissions); break; case PROP_USE_MULTI_THREAD: g_value_set_boolean(value, priv->use_multi_thread); break; case PROP_IS_MULTI_THREAD: g_value_set_boolean(value, priv->is_multi_thread); break; case PROP_MAX_THREADS: g_value_set_int(value, priv->max_threads); break; case PROP_HANDLE_SIGNALS: g_value_set_boolean(value, priv->handle_signals); break; case PROP_TEST_CASE_ORDER: g_value_set_enum(value, priv->test_case_order); break; case PROP_TEST_DIRECTORY: g_value_set_string(value, priv->test_directory); break; case PROP_SOURCE_DIRECTORY: g_value_set_string(value, priv->source_directory); break; case PROP_LOG_DIRECTORY: g_value_set_string(value, priv->log_directory); break; case PROP_TARGET_TEST_CASE_NAMES: g_value_set_pointer(value, priv->target_test_case_names); break; case PROP_TARGET_TEST_NAMES: g_value_set_pointer(value, priv->target_test_names); break; case PROP_EXCLUDE_FILES: g_value_set_pointer(value, priv->exclude_files); break; case PROP_EXCLUDE_DIRECTORIES: g_value_set_pointer(value, priv->exclude_directories); break; case PROP_COMMAND_LINE_ARGS: g_value_set_pointer(value, priv->command_line_args); break; case PROP_FATAL_FAILURES: g_value_set_boolean(value, priv->fatal_failures); break; case PROP_KEEP_OPENING_MODULES: g_value_set_boolean(value, priv->keep_opening_modules); break; case PROP_ENABLE_CONVENIENCE_ATTRIBUTE_DEFINITION: g_value_set_boolean(value, priv->enable_convenience_attribute_definition); break; case PROP_STOP_BEFORE_TEST: g_value_set_boolean(value, priv->stop_before_test); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void runner_init (CutRunnerIface *iface) { parent_runner_iface = g_type_interface_peek_parent(iface); iface->run = runner_run; } static gboolean runner_run (CutRunner *runner) { if (parent_runner_iface->run) return parent_runner_iface->run(runner); return FALSE; } static void start_run (CutRunContext *context) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->completed = FALSE; if (priv->timer) g_timer_destroy(priv->timer); priv->timer = g_timer_new(); g_mutex_unlock(priv->mutex); } static void start_test (CutRunContext *context, CutTest *test, CutTestContext *test_context) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->n_tests++; g_mutex_unlock(priv->mutex); } static void start_iterated_test (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->n_tests++; g_mutex_unlock(priv->mutex); } static void pass_assertion (CutRunContext *context, CutTest *test, CutTestContext *test_context) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->n_assertions++; g_mutex_unlock(priv->mutex); } static void register_success_result (CutRunContext *context, CutTestResult *result) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->results = g_list_prepend(priv->results, g_object_ref(result)); priv->n_successes++; g_mutex_unlock(priv->mutex); } static void register_failure_result (CutRunContext *context, CutTestResult *result) { CutRunContextPrivate *priv= CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->results = g_list_prepend(priv->results, g_object_ref(result)); priv->n_failures++; g_mutex_unlock(priv->mutex); } static void register_error_result (CutRunContext *context, CutTestResult *result) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->results = g_list_prepend(priv->results, g_object_ref(result)); priv->n_errors++; g_mutex_unlock(priv->mutex); } static void register_pending_result (CutRunContext *context, CutTestResult *result) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->results = g_list_prepend(priv->results, g_object_ref(result)); priv->n_pendings++; g_mutex_unlock(priv->mutex); } static void register_notification_result (CutRunContext *context, CutTestResult *result) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->results = g_list_prepend(priv->results, g_object_ref(result)); priv->n_notifications++; g_mutex_unlock(priv->mutex); } static void register_omission_result (CutRunContext *context, CutTestResult *result) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->results = g_list_prepend(priv->results, g_object_ref(result)); priv->n_omissions++; g_mutex_unlock(priv->mutex); } static void register_crash_result (CutRunContext *context, CutTestResult *result) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); priv->crashed = TRUE; g_mutex_lock(priv->mutex); priv->results = g_list_prepend(priv->results, g_object_ref(result)); g_mutex_unlock(priv->mutex); } static void success_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result) { register_success_result(context, result); } static void failure_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result) { register_failure_result(context, result); } static void error_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result) { register_error_result(context, result); } static void pending_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result) { register_pending_result(context, result); } static void notification_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result) { register_notification_result(context, result); } static void omission_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result) { register_omission_result(context, result); } static void crash_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result) { register_crash_result(context, result); } static void failure_in_test_case (CutRunContext *context, CutTestCase *test, CutTestResult *result) { register_failure_result(context, result); } static void error_in_test_case (CutRunContext *context, CutTestCase *test, CutTestResult *result) { register_error_result(context, result); } static void pending_in_test_case (CutRunContext *context, CutTestCase *test, CutTestResult *result) { register_pending_result(context, result); } static void notification_in_test_case (CutRunContext *context, CutTestCase *test, CutTestResult *result) { register_notification_result(context, result); } static void omission_in_test_case (CutRunContext *context, CutTestCase *test, CutTestResult *result) { register_omission_result(context, result); } static void crash_in_test_case (CutRunContext *context, CutTestCase *test, CutTestResult *result) { register_crash_result(context, result); } static void crash_test_suite (CutRunContext *context, CutTestSuite *test_suite, CutTestResult *result) { register_crash_result(context, result); } static void complete_iterated_test (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->elapsed += cut_test_get_elapsed(CUT_TEST(iterated_test)); g_mutex_unlock(priv->mutex); } static void complete_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, gboolean success) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->elapsed += cut_test_get_elapsed(test); g_mutex_unlock(priv->mutex); } static void complete_run (CutRunContext *context, gboolean success) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); if (priv->timer) g_timer_stop(priv->timer); priv->completed = TRUE; g_mutex_unlock(priv->mutex); } void cut_run_context_set_test_directory (CutRunContext *context, const gchar *directory) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_free(priv->test_directory); priv->test_directory = g_strdup(directory); } const gchar * cut_run_context_get_test_directory (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->test_directory; } void cut_run_context_set_source_directory (CutRunContext *context, const gchar *directory) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_free(priv->source_directory); priv->source_directory = g_strdup(directory); } const gchar * cut_run_context_get_source_directory (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->source_directory; } void cut_run_context_set_log_directory (CutRunContext *context, const gchar *directory) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_free(priv->log_directory); priv->log_directory = g_strdup(directory); } const gchar * cut_run_context_get_log_directory (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->log_directory; } void cut_run_context_set_multi_thread (CutRunContext *context, gboolean use_multi_thread) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->use_multi_thread = use_multi_thread; if (use_multi_thread) priv->is_multi_thread = TRUE; g_mutex_unlock(priv->mutex); } gboolean cut_run_context_get_multi_thread (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->use_multi_thread; } gboolean cut_run_context_is_multi_thread (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->is_multi_thread; } void cut_run_context_set_max_threads (CutRunContext *context, gint max_threads) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); priv->max_threads = max_threads; } gint cut_run_context_get_max_threads (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->max_threads; } void cut_run_context_set_handle_signals (CutRunContext *context, gboolean handle_signals) { CUT_RUN_CONTEXT_GET_PRIVATE(context)->handle_signals = handle_signals; } gboolean cut_run_context_get_handle_signals (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->handle_signals; } void cut_run_context_set_exclude_files (CutRunContext *context, const gchar **files) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_strfreev(priv->exclude_files); priv->exclude_files = g_strdupv((gchar **)files); } const gchar ** cut_run_context_get_exclude_files (CutRunContext *context) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); return (const gchar **)priv->exclude_files; } void cut_run_context_set_exclude_directories (CutRunContext *context, const gchar **directories) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_strfreev(priv->exclude_directories); priv->exclude_directories = g_strdupv((gchar **)directories); } const gchar ** cut_run_context_get_exclude_directories (CutRunContext *context) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); return (const gchar **)priv->exclude_directories; } void cut_run_context_set_target_test_case_names (CutRunContext *context, const gchar **names) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_strfreev(priv->target_test_case_names); priv->target_test_case_names = g_strdupv((gchar **)names); } const gchar ** cut_run_context_get_target_test_case_names (CutRunContext *context) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); return (const gchar **)priv->target_test_case_names; } void cut_run_context_set_target_test_names (CutRunContext *context, const gchar **names) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_strfreev(priv->target_test_names); priv->target_test_names = g_strdupv((gchar **)names); } const gchar ** cut_run_context_get_target_test_names (CutRunContext *context) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); return (const gchar **)priv->target_test_names; } guint cut_run_context_get_n_tests (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->n_tests; } guint cut_run_context_get_n_assertions (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->n_assertions; } guint cut_run_context_get_n_successes (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->n_successes; } guint cut_run_context_get_n_failures (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->n_failures; } guint cut_run_context_get_n_errors (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->n_errors; } guint cut_run_context_get_n_pendings (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->n_pendings; } guint cut_run_context_get_n_notifications (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->n_notifications; } guint cut_run_context_get_n_omissions (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->n_omissions; } CutTestResultStatus cut_run_context_get_status (CutRunContext *context) { CutRunContextPrivate *priv; CutTestResultStatus status; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); if (priv->crashed) { status = CUT_TEST_RESULT_CRASH; } else if (priv->n_errors > 0) { status = CUT_TEST_RESULT_ERROR; } else if (priv->n_failures > 0) { status = CUT_TEST_RESULT_FAILURE; } else if (priv->n_pendings > 0) { status = CUT_TEST_RESULT_PENDING; } else if (priv->n_omissions > 0) { status = CUT_TEST_RESULT_OMISSION; } else if (priv->n_notifications > 0) { status = CUT_TEST_RESULT_NOTIFICATION; } else { status = CUT_TEST_RESULT_SUCCESS; } return status; } gdouble cut_run_context_get_elapsed (CutRunContext *context) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); if (priv->timer) return g_timer_elapsed(priv->timer, NULL); else return 0.0; } gdouble cut_run_context_get_total_elapsed (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->elapsed; } const GList * cut_run_context_get_results (CutRunContext *context) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); if (priv->reversed_results) g_list_free(priv->reversed_results); priv->reversed_results = g_list_reverse(g_list_copy(priv->results)); return priv->reversed_results; } gboolean cut_run_context_is_crashed (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->crashed; } void cut_run_context_cancel (CutRunContext *context) { CUT_RUN_CONTEXT_GET_PRIVATE(context)->canceled = TRUE; } gboolean cut_run_context_is_canceled (CutRunContext *context) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); return priv->canceled || priv->crashed; } CutTestSuite * cut_run_context_create_test_suite (CutRunContext *context) { CutRunContextPrivate *priv; CutRepository *repository; CutTestSuite *suite; const gchar **exclude_files, **exclude_directories; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); repository = cut_repository_new(priv->test_directory); cut_repository_set_keep_opening_modules(repository, priv->keep_opening_modules); cut_repository_set_enable_convenience_attribute_definition(repository, priv->enable_convenience_attribute_definition); exclude_files = (const gchar **)priv->exclude_files; cut_repository_set_exclude_files(repository, exclude_files); exclude_directories = (const gchar **)priv->exclude_directories; cut_repository_set_exclude_directories(repository, exclude_directories); suite = cut_repository_create_test_suite(repository); g_object_unref(repository); return suite; } CutTestSuite * cut_run_context_get_test_suite (CutRunContext *context) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); if (!priv->test_suite) priv->test_suite = cut_run_context_create_test_suite(context); return priv->test_suite; } void cut_run_context_set_test_suite (CutRunContext *context, CutTestSuite *suite) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); if (priv->test_suite) g_object_unref(priv->test_suite); if (suite) g_object_ref(suite); priv->test_suite = suite; } void cut_run_context_add_listener (CutRunContext *context, CutListener *listener) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); priv->listeners = g_list_prepend(priv->listeners, g_object_ref(listener)); } void cut_run_context_remove_listener (CutRunContext *context, CutListener *listener) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); priv->listeners = g_list_remove(priv->listeners, listener); remove_listener(listener, context); } static void attach_listener (CutListener *listener, CutRunContext *context) { cut_listener_attach_to_run_context(listener, context); } void cut_run_context_attach_listeners (CutRunContext *context) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_list_foreach(priv->listeners, (GFunc)attach_listener, context); } static void detach_listener (CutListener *listener, CutRunContext *context) { cut_listener_detach_from_run_context(listener, context); } void cut_run_context_detach_listeners (CutRunContext *context) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_list_foreach(priv->listeners, (GFunc)detach_listener, context); } gchar * cut_run_context_build_source_filename (CutRunContext *context, const gchar *filename) { const gchar *source_directory; gchar *source_filename; source_directory = cut_run_context_get_source_directory(context); if (source_directory) { source_filename = g_build_filename(source_directory, filename, NULL); } else { source_filename = g_strdup(filename); } return source_filename; } void cut_run_context_set_test_case_order (CutRunContext *context, CutOrder order) { CutRunContextPrivate *priv; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_mutex_lock(priv->mutex); priv->test_case_order = order; g_mutex_unlock(priv->mutex); } CutOrder cut_run_context_get_test_case_order (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->test_case_order; } static gint compare_test_cases_by_name (gconstpointer a, gconstpointer b, gpointer user_data) { CutTestCase *test_case1, *test_case2; const gchar *test_case_name1, *test_case_name2; gboolean ascending; test_case1 = CUT_TEST_CASE(a); test_case2 = CUT_TEST_CASE(b); test_case_name1 = cut_test_get_name(CUT_TEST(test_case1)); test_case_name2 = cut_test_get_name(CUT_TEST(test_case2)); ascending = *(gboolean *)user_data; if (ascending) return strcmp(test_case_name1, test_case_name2); else return strcmp(test_case_name2, test_case_name1); } GList * cut_run_context_sort_test_cases (CutRunContext *context, GList *test_cases) { CutRunContextPrivate *priv; GList *sorted_test_cases = NULL; gboolean ascending; priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); switch (priv->test_case_order) { case CUT_ORDER_NONE_SPECIFIED: sorted_test_cases = test_cases; break; case CUT_ORDER_NAME_ASCENDING: ascending = TRUE; sorted_test_cases = g_list_sort_with_data(test_cases, compare_test_cases_by_name, &ascending); break; case CUT_ORDER_NAME_DESCENDING: ascending = FALSE; sorted_test_cases = g_list_sort_with_data(test_cases, compare_test_cases_by_name, &ascending); break; } return sorted_test_cases; } gboolean cut_run_context_start (CutRunContext *context) { gboolean success; CUT_RUN_CONTEXT_GET_PRIVATE(context)->elapsed = 0.0; cut_run_context_attach_listeners(context); success = cut_runner_run(CUT_RUNNER(context)); cut_run_context_detach_listeners(context); return success; } static void cb_complete_run (CutRunContext *context, gboolean success, gpointer user_data) { g_signal_handlers_disconnect_by_func(context, G_CALLBACK(cb_complete_run), user_data); cut_run_context_detach_listeners(context); } void cut_run_context_start_async (CutRunContext *context) { CUT_RUN_CONTEXT_GET_PRIVATE(context)->elapsed = 0.0; cut_run_context_attach_listeners(context); g_signal_connect(context, "complete-run", G_CALLBACK(cb_complete_run), NULL); cut_runner_run_async(CUT_RUNNER(context)); } gboolean cut_run_context_emit_complete_run (CutRunContext *context, gboolean success) { CutTestResultStatus status; status = cut_run_context_get_status(context); if (cut_test_result_status_is_critical(status)) success = FALSE; g_signal_emit_by_name(context, "complete-run", success); return success; } void cut_run_context_emit_error (CutRunContext *context, GQuark domain, gint code, GError *sub_error, const gchar *format, ...) { GString *message; va_list var_args; GError *error = NULL; message = g_string_new(NULL); va_start(var_args, format); g_string_append_vprintf(message, format, var_args); va_end(var_args); if (sub_error) { g_string_append_printf(message, ": %s:%d", g_quark_to_string(sub_error->domain), sub_error->code); if (sub_error->message) g_string_append_printf(message, ": %s", sub_error->message); g_error_free(sub_error); } g_set_error_literal(&error, domain, code, message->str); g_string_free(message, TRUE); g_signal_emit(context, signals[ERROR], 0, error); g_error_free(error); } void cut_run_context_set_command_line_args (CutRunContext *context, gchar **args) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); g_strfreev(priv->command_line_args); priv->command_line_args = g_strdupv(args); } const gchar ** cut_run_context_get_command_line_args (CutRunContext *context) { CutRunContextPrivate *priv = CUT_RUN_CONTEXT_GET_PRIVATE(context); return (const gchar **)priv->command_line_args; } static void cb_delegate_ready_test_case (CutRunContext *context, CutTestCase *test_case, guint n_tests, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[READY_TEST_CASE], detail_delegate, test_case, n_tests); } static void cb_delegate_start_test_case (CutRunContext *context, CutTestCase *test_case, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[START_TEST_CASE], detail_delegate, test_case); } static void cb_delegate_ready_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, guint n_tests, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[READY_TEST_ITERATOR], detail_delegate, test_iterator, n_tests); } static void cb_delegate_start_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[START_TEST_ITERATOR], detail_delegate, test_iterator); } static void cb_delegate_start_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[START_TEST], detail_delegate, test, test_context); } static void cb_delegate_start_iterated_test (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[START_ITERATED_TEST], detail_delegate, iterated_test, test_context); } static void cb_delegate_pass_assertion (CutRunContext *context, CutTest *test, CutTestContext *test_context, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[PASS_ASSERTION], detail_delegate, test, test_context); } static void cb_delegate_success_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[SUCCESS_TEST], detail_delegate, test, test_context, result); } static void cb_delegate_failure_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[FAILURE_TEST], detail_delegate, test, test_context, result); } static void cb_delegate_error_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[ERROR_TEST], detail_delegate, test, test_context, result); } static void cb_delegate_pending_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[PENDING_TEST], detail_delegate, test, test_context, result); } static void cb_delegate_notification_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[NOTIFICATION_TEST], detail_delegate, test, test_context, result); } static void cb_delegate_omission_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[OMISSION_TEST], detail_delegate, test, test_context, result); } static void cb_delegate_crash_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[CRASH_TEST], detail_delegate, test, test_context, result); } static void cb_delegate_complete_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, gboolean success, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[COMPLETE_TEST], detail_delegate, test, test_context, success); } static void cb_delegate_complete_iterated_test (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[COMPLETE_ITERATED_TEST], detail_delegate, iterated_test, test_context, success); } static void cb_delegate_success_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[SUCCESS_TEST_ITERATOR], detail_delegate, test_iterator, result); } static void cb_delegate_failure_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[FAILURE_TEST_ITERATOR], detail_delegate, test_iterator, result); } static void cb_delegate_error_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[ERROR_TEST_ITERATOR], detail_delegate, test_iterator, result); } static void cb_delegate_pending_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[PENDING_TEST_ITERATOR], detail_delegate, test_iterator, result); } static void cb_delegate_notification_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[NOTIFICATION_TEST_ITERATOR], detail_delegate, test_iterator, result); } static void cb_delegate_omission_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[OMISSION_TEST_ITERATOR], detail_delegate, test_iterator, result); } static void cb_delegate_crash_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[CRASH_TEST_ITERATOR], detail_delegate, test_iterator, result); } static void cb_delegate_complete_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, gboolean success, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[COMPLETE_TEST_ITERATOR], detail_delegate, test_iterator, success); } static void cb_delegate_success_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[SUCCESS_TEST_CASE], detail_delegate, test_case, result); } static void cb_delegate_failure_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[FAILURE_TEST_CASE], detail_delegate, test_case, result); } static void cb_delegate_error_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[ERROR_TEST_CASE], detail_delegate, test_case, result); } static void cb_delegate_pending_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[PENDING_TEST_CASE], detail_delegate, test_case, result); } static void cb_delegate_notification_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[NOTIFICATION_TEST_CASE], detail_delegate, test_case, result); } static void cb_delegate_omission_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[OMISSION_TEST_CASE], detail_delegate, test_case, result); } static void cb_delegate_crash_test_case (CutRunContext *context, CutTestCase *test_case, CutTestResult *result, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[CRASH_TEST_CASE], detail_delegate, test_case, result); } static void cb_delegate_complete_test_case (CutRunContext *context, CutTestCase *test_case, gboolean success, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[COMPLETE_TEST_CASE], detail_delegate, test_case, success); } static void cb_delegate_error (CutRunContext *context, GError *error, gpointer user_data) { CutRunContext *other_context = user_data; g_signal_emit(other_context, signals[ERROR], detail_delegate, error); } static void cb_delegate_complete_run (CutRunContext *context, gboolean success, gpointer user_data) { CutRunContext *other_context = user_data; #define DISCONNECT_DELEGATE_SIGNAL(name) \ g_signal_handlers_disconnect_by_func(context, \ cb_delegate_ ## name, \ other_context) DISCONNECT_DELEGATE_SIGNAL(ready_test_case); DISCONNECT_DELEGATE_SIGNAL(start_test_case); DISCONNECT_DELEGATE_SIGNAL(ready_test_iterator); DISCONNECT_DELEGATE_SIGNAL(start_test_iterator); DISCONNECT_DELEGATE_SIGNAL(start_test); DISCONNECT_DELEGATE_SIGNAL(start_iterated_test); DISCONNECT_DELEGATE_SIGNAL(pass_assertion); DISCONNECT_DELEGATE_SIGNAL(success_test); DISCONNECT_DELEGATE_SIGNAL(failure_test); DISCONNECT_DELEGATE_SIGNAL(error_test); DISCONNECT_DELEGATE_SIGNAL(pending_test); DISCONNECT_DELEGATE_SIGNAL(notification_test); DISCONNECT_DELEGATE_SIGNAL(omission_test); DISCONNECT_DELEGATE_SIGNAL(crash_test); DISCONNECT_DELEGATE_SIGNAL(complete_test); DISCONNECT_DELEGATE_SIGNAL(complete_iterated_test); DISCONNECT_DELEGATE_SIGNAL(success_test_iterator); DISCONNECT_DELEGATE_SIGNAL(failure_test_iterator); DISCONNECT_DELEGATE_SIGNAL(error_test_iterator); DISCONNECT_DELEGATE_SIGNAL(pending_test_iterator); DISCONNECT_DELEGATE_SIGNAL(notification_test_iterator); DISCONNECT_DELEGATE_SIGNAL(omission_test_iterator); DISCONNECT_DELEGATE_SIGNAL(crash_test_iterator); DISCONNECT_DELEGATE_SIGNAL(complete_test_iterator); DISCONNECT_DELEGATE_SIGNAL(success_test_case); DISCONNECT_DELEGATE_SIGNAL(failure_test_case); DISCONNECT_DELEGATE_SIGNAL(error_test_case); DISCONNECT_DELEGATE_SIGNAL(pending_test_case); DISCONNECT_DELEGATE_SIGNAL(notification_test_case); DISCONNECT_DELEGATE_SIGNAL(omission_test_case); DISCONNECT_DELEGATE_SIGNAL(crash_test_case); DISCONNECT_DELEGATE_SIGNAL(complete_test_case); DISCONNECT_DELEGATE_SIGNAL(error); DISCONNECT_DELEGATE_SIGNAL(complete_run); #undef DISCONNECT_DELEGATE_SIGNAL } void cut_run_context_delegate_signals (CutRunContext *context, CutRunContext *other_context) { detail_delegate = g_quark_from_static_string("delegate"); #define CONNECT_DELEGATE_SIGNAL(name) \ g_signal_connect(context, #name, \ G_CALLBACK(cb_delegate_ ## name), \ other_context) CONNECT_DELEGATE_SIGNAL(ready_test_case); CONNECT_DELEGATE_SIGNAL(start_test_case); CONNECT_DELEGATE_SIGNAL(ready_test_iterator); CONNECT_DELEGATE_SIGNAL(start_test_iterator); CONNECT_DELEGATE_SIGNAL(start_test); CONNECT_DELEGATE_SIGNAL(start_iterated_test); CONNECT_DELEGATE_SIGNAL(pass_assertion); CONNECT_DELEGATE_SIGNAL(success_test); CONNECT_DELEGATE_SIGNAL(failure_test); CONNECT_DELEGATE_SIGNAL(error_test); CONNECT_DELEGATE_SIGNAL(pending_test); CONNECT_DELEGATE_SIGNAL(notification_test); CONNECT_DELEGATE_SIGNAL(omission_test); CONNECT_DELEGATE_SIGNAL(crash_test); CONNECT_DELEGATE_SIGNAL(complete_test); CONNECT_DELEGATE_SIGNAL(complete_iterated_test); CONNECT_DELEGATE_SIGNAL(success_test_iterator); CONNECT_DELEGATE_SIGNAL(failure_test_iterator); CONNECT_DELEGATE_SIGNAL(error_test_iterator); CONNECT_DELEGATE_SIGNAL(pending_test_iterator); CONNECT_DELEGATE_SIGNAL(notification_test_iterator); CONNECT_DELEGATE_SIGNAL(omission_test_iterator); CONNECT_DELEGATE_SIGNAL(crash_test_iterator); CONNECT_DELEGATE_SIGNAL(complete_test_iterator); CONNECT_DELEGATE_SIGNAL(success_test_case); CONNECT_DELEGATE_SIGNAL(failure_test_case); CONNECT_DELEGATE_SIGNAL(error_test_case); CONNECT_DELEGATE_SIGNAL(pending_test_case); CONNECT_DELEGATE_SIGNAL(notification_test_case); CONNECT_DELEGATE_SIGNAL(omission_test_case); CONNECT_DELEGATE_SIGNAL(crash_test_case); CONNECT_DELEGATE_SIGNAL(complete_test_case); CONNECT_DELEGATE_SIGNAL(error); CONNECT_DELEGATE_SIGNAL(complete_run); #undef CONNECT_DELEGATE_SIGNAL } gboolean cut_run_context_is_completed (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->completed; } void cut_run_context_set_fatal_failures (CutRunContext *context, gboolean fatal_failures) { CUT_RUN_CONTEXT_GET_PRIVATE(context)->fatal_failures = fatal_failures; } gboolean cut_run_context_get_fatal_failures (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->fatal_failures; } void cut_run_context_set_keep_opening_modules (CutRunContext *context, gboolean keep_opening) { CUT_RUN_CONTEXT_GET_PRIVATE(context)->keep_opening_modules = keep_opening; } gboolean cut_run_context_get_keep_opening_modules (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->keep_opening_modules; } void cut_run_context_set_enable_convenience_attribute_definition (CutRunContext *context, gboolean enable_convenience_attribute_definition) { CUT_RUN_CONTEXT_GET_PRIVATE(context)->enable_convenience_attribute_definition = enable_convenience_attribute_definition; } gboolean cut_run_context_get_enable_convenience_attribute_definition (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->enable_convenience_attribute_definition; } void cut_run_context_set_stop_before_test (CutRunContext *context, gboolean stop) { CUT_RUN_CONTEXT_GET_PRIVATE(context)->stop_before_test = stop; } gboolean cut_run_context_get_stop_before_test (CutRunContext *context) { return CUT_RUN_CONTEXT_GET_PRIVATE(context)->stop_before_test; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-runner.h0000644000175000017500000000360311205747026020441 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_RUNNER_H__ #define __CUT_RUNNER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_RUNNER (cut_runner_get_type ()) #define CUT_RUNNER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_RUNNER, CutRunner)) #define CUT_RUNNER_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), CUT_TYPE_RUNNER, CutRunnerIface)) #define CUT_IS_RUNNER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_RUNNER)) #define CUT_RUNNER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CUT_TYPE_RUNNER, CutRunnerIface)) typedef struct _CutRunner CutRunner; /* Dummy typedef */ typedef struct _CutRunnerIface CutRunnerIface; struct _CutRunnerIface { GTypeInterface base_iface; gboolean (*run) (CutRunner *runner); void (*run_async) (CutRunner *runner); }; GType cut_runner_get_type (void) G_GNUC_CONST; gboolean cut_runner_run (CutRunner *runner); void cut_runner_run_async (CutRunner *runner); G_END_DECLS #endif /* __CUT_RUNNER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-backtrace-entry.c0000644000175000017500000002641211205747026022204 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-backtrace-entry.h" #include "cut-utils.h" #define CUT_BACKTRACE_ENTRY_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_BACKTRACE_ENTRY, CutBacktraceEntryPrivate)) typedef struct _CutBacktraceEntryPrivate CutBacktraceEntryPrivate; struct _CutBacktraceEntryPrivate { gchar *file; guint line; gchar *function; gchar *info; }; enum { PROP_0, PROP_FILE, PROP_LINE, PROP_FUNCTION, PROP_INFO }; G_DEFINE_TYPE(CutBacktraceEntry, cut_backtrace_entry, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_backtrace_entry_class_init (CutBacktraceEntryClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("file", "File", "The file name of the backtrace entry", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_FILE, spec); spec = g_param_spec_uint("line", "Line number", "The line number of the backtrace entry", 0, G_MAXUINT32, 0, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_LINE, spec); spec = g_param_spec_string("function", "Function", "The function name of the backtrace entry", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_FUNCTION, spec); spec = g_param_spec_string("info", "Information", "The information of the backtrace entry", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_INFO, spec); g_type_class_add_private(gobject_class, sizeof(CutBacktraceEntryPrivate)); } static void cut_backtrace_entry_init (CutBacktraceEntry *entry) { CutBacktraceEntryPrivate *priv; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry); priv->file = NULL; priv->line = 0; priv->function = NULL; priv->info = NULL; } static void dispose (GObject *object) { CutBacktraceEntryPrivate *priv; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(object); if (priv->file) { g_free(priv->file); priv->file = NULL; } if (priv->function) { g_free(priv->function); priv->function = NULL; } if (priv->info) { g_free(priv->info); priv->info = NULL; } G_OBJECT_CLASS(cut_backtrace_entry_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutBacktraceEntryPrivate *priv; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(object); switch (prop_id) { case PROP_FILE: cut_backtrace_entry_set_file(CUT_BACKTRACE_ENTRY(object), g_value_get_string(value)); break; case PROP_LINE: priv->line = g_value_get_uint(value); break; case PROP_FUNCTION: cut_backtrace_entry_set_function(CUT_BACKTRACE_ENTRY(object), g_value_get_string(value)); break; case PROP_INFO: cut_backtrace_entry_set_info(CUT_BACKTRACE_ENTRY(object), g_value_get_string(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutBacktraceEntryPrivate *priv; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(object); switch (prop_id) { case PROP_FILE: g_value_set_string(value, priv->file); break; case PROP_LINE: g_value_set_uint(value, priv->line); break; case PROP_FUNCTION: g_value_set_string(value, priv->function); break; case PROP_INFO: g_value_set_string(value, priv->info); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutBacktraceEntry * cut_backtrace_entry_new (const gchar *file, guint line, const gchar *function, const gchar *info) { return g_object_new(CUT_TYPE_BACKTRACE_ENTRY, "file", file, "line", line, "function", function, "info", info, NULL); } CutBacktraceEntry * cut_backtrace_entry_new_empty (void) { return cut_backtrace_entry_new(NULL, 0, NULL, NULL); } const gchar * cut_backtrace_entry_get_file (CutBacktraceEntry *entry) { return CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry)->file; } void cut_backtrace_entry_set_file (CutBacktraceEntry *entry, const gchar *file) { CutBacktraceEntryPrivate *priv; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry); if (priv->file) { g_free(priv->file); priv->file = NULL; } if (file) priv->file = g_strdup(file); } guint cut_backtrace_entry_get_line (CutBacktraceEntry *entry) { return CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry)->line; } void cut_backtrace_entry_set_line (CutBacktraceEntry *entry, guint line) { CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry)->line = line; } const gchar * cut_backtrace_entry_get_function (CutBacktraceEntry *entry) { return CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry)->function; } void cut_backtrace_entry_set_function (CutBacktraceEntry *entry, const gchar *function) { CutBacktraceEntryPrivate *priv; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry); if (priv->function) { g_free(priv->function); priv->function = NULL; } if (function) priv->function = g_strdup(function); } const gchar * cut_backtrace_entry_get_info (CutBacktraceEntry *entry) { return CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry)->info; } void cut_backtrace_entry_set_info (CutBacktraceEntry *entry, const gchar *info) { CutBacktraceEntryPrivate *priv; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry); if (priv->info) { g_free(priv->info); priv->info = NULL; } if (info) priv->info = g_strdup(info); } gchar * cut_backtrace_entry_to_xml (CutBacktraceEntry *entry) { GString *string; string = g_string_new(NULL); cut_backtrace_entry_to_xml_string(entry, string, 0); return g_string_free(string, FALSE); } static void append_element_valist (GString *string, guint indent, const gchar *element_name, va_list var_args) { const gchar *name; name = element_name; while (name) { const gchar *value = va_arg(var_args, gchar *); if (value) cut_utils_append_xml_element_with_value(string, indent, name, value); name = va_arg(var_args, gchar *); } } static void append_element_with_children (GString *string, guint indent, const gchar *element_name, const gchar *first_child_element, ...) { gchar *escaped; va_list var_args; escaped = g_markup_escape_text(element_name, -1); cut_utils_append_indent(string, indent); g_string_append_printf(string, "<%s>\n", escaped); va_start(var_args, first_child_element); append_element_valist(string, indent + 2, first_child_element, var_args); va_end(var_args); cut_utils_append_indent(string, indent); g_string_append_printf(string, "\n", escaped); g_free(escaped); } void cut_backtrace_entry_to_xml_string (CutBacktraceEntry *entry, GString *string, guint indent) { CutBacktraceEntryPrivate *priv; gchar *line_string = NULL; gchar *info_string = NULL; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry); if (priv->file == NULL && priv->function == NULL) return; if (priv->line > 0) line_string = g_strdup_printf("%d", priv->line); if (priv->function) info_string = g_strdup_printf("%s()", priv->function); if (priv->info) { if (info_string) { gchar *function_string = info_string; info_string = g_strconcat(function_string, ": ", priv->info, NULL); g_free(function_string); } else { info_string = g_strdup(priv->info); } } append_element_with_children(string, indent, "entry", "file", priv->file, "line", line_string, "info", info_string, NULL); if (line_string) g_free(line_string); if (info_string) g_free(info_string); } gchar * cut_backtrace_entry_format (CutBacktraceEntry *entry) { GString *string; string = g_string_new(NULL); cut_backtrace_entry_format_string(entry, string); return g_string_free(string, FALSE); } void cut_backtrace_entry_format_string (CutBacktraceEntry *entry, GString *string) { CutBacktraceEntryPrivate *priv; priv = CUT_BACKTRACE_ENTRY_GET_PRIVATE(entry); g_string_append_printf(string, "%s:%d", priv->file ? priv->file : "(null)", priv->line); if (priv->function) g_string_append_printf(string, ": %s()", priv->function); if (priv->info) g_string_append_printf(string, ": %s", priv->info); if (priv->function == NULL && priv->info == NULL) g_string_append(string, ":"); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-elf-loader.h0000644000175000017500000000422111205747026021137 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_ELF_LOADER_H__ #define __CUT_ELF_LOADER_H__ #include G_BEGIN_DECLS #define CUT_TYPE_ELF_LOADER (cut_elf_loader_get_type ()) #define CUT_ELF_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_ELF_LOADER, CutELFLoader)) #define CUT_ELF_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_ELF_LOADER, CutELFLoaderClass)) #define CUT_IS_ELF_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_ELF_LOADER)) #define CUT_IS_ELF_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_ELF_LOADER)) #define CUT_ELF_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_ELF_LOADER, CutELFLoaderClass)) typedef struct _CutELFLoader CutELFLoader; typedef struct _CutELFLoaderClass CutELFLoaderClass; struct _CutELFLoader { GObject object; }; struct _CutELFLoaderClass { GObjectClass parent_class; }; GType cut_elf_loader_get_type (void) G_GNUC_CONST; CutELFLoader *cut_elf_loader_new (const gchar *so_filename); gboolean cut_elf_loader_is_elf (CutELFLoader *loader); gboolean cut_elf_loader_support_attribute (CutELFLoader *loader); GList *cut_elf_loader_collect_symbols (CutELFLoader *loader); G_END_DECLS #endif /* __CUT_ELF_LOADER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-utils-helper.h0000644000175000017500000000312611400051173022506 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_TEST_UTILS_HELPER_H__ #define __CUT_TEST_UTILS_HELPER_H__ #ifdef __cplusplus extern "C" { #endif #include const char *cut_take_replace_helper (const char *target, const char *pattern, const char *replacement, CutCallbackFunction callback); const char *cut_take_convert_helper (const char *string, const char *to_code_set, const char *from_code_set, CutCallbackFunction callback); #ifdef __cplusplus } #endif #endif /* __CUT_TEST_UTILS_HELPER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-run-context.h0000644000175000017500000004346411264277763021442 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_RUN_CONTEXT_H__ #define __CUT_RUN_CONTEXT_H__ #include #include #include #include G_BEGIN_DECLS #define CUT_TYPE_RUN_CONTEXT (cut_run_context_get_type ()) #define CUT_RUN_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_RUN_CONTEXT, CutRunContext)) #define CUT_RUN_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_RUN_CONTEXT, CutRunContextClass)) #define CUT_IS_RUN_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_RUN_CONTEXT)) #define CUT_IS_RUN_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_RUN_CONTEXT)) #define CUT_RUN_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_RUN_CONTEXT, CutRunContextClass)) typedef enum { CUT_ORDER_NONE_SPECIFIED, CUT_ORDER_NAME_ASCENDING, CUT_ORDER_NAME_DESCENDING } CutOrder; typedef struct _CutRunContextClass CutRunContextClass; struct _CutRunContext { GObject object; }; struct _CutRunContextClass { GObjectClass parent_class; void (*start_run) (CutRunContext *context); void (*ready_test_suite) (CutRunContext *context, CutTestSuite *test_suite, guint n_test_cases, guint n_tests); void (*start_test_suite) (CutRunContext *context, CutTestSuite *test_suite); void (*ready_test_case) (CutRunContext *context, CutTestCase *test_case, guint n_tests); void (*start_test_case) (CutRunContext *context, CutTestCase *test_case); void (*ready_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, guint n_tests); void (*start_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator); void (*start_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context); void (*start_iterated_test) (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context); void (*pass_assertion) (CutRunContext *context, CutTest *test, CutTestContext *test_context); void (*success_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); void (*failure_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); void (*error_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); void (*pending_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); void (*notification_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); void (*omission_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); void (*crash_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context, CutTestResult *result); void (*complete_test) (CutRunContext *context, CutTest *test, CutTestContext *test_context, gboolean success); void (*complete_iterated_test) (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success); void (*success_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result); void (*failure_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result); void (*error_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result); void (*pending_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result); void (*notification_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result); void (*omission_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result); void (*crash_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, CutTestResult *result); void (*complete_test_iterator) (CutRunContext *context, CutTestIterator *test_iterator, gboolean success); void (*success_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*failure_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*error_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*pending_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*notification_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*omission_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*crash_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*failure_in_test_case)(CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*error_in_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*pending_in_test_case)(CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*notification_in_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*omission_in_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*crash_in_test_case) (CutRunContext *context, CutTestCase *test_case, CutTestResult *result); void (*complete_test_case) (CutRunContext *context, CutTestCase *test_case, gboolean success); void (*crash_test_suite) (CutRunContext *context, CutTestSuite *test_suite, CutTestResult *result); void (*complete_test_suite) (CutRunContext *context, CutTestSuite *test_suite, gboolean success); void (*complete_run) (CutRunContext *context, gboolean success); void (*error) (CutRunContext *context, GError *error); }; GType cut_run_context_get_type (void) G_GNUC_CONST; void cut_run_context_set_test_directory (CutRunContext *context, const gchar *directory); const gchar *cut_run_context_get_test_directory (CutRunContext *context); void cut_run_context_set_source_directory (CutRunContext *context, const gchar *directory); const gchar *cut_run_context_get_source_directory (CutRunContext *context); void cut_run_context_set_log_directory (CutRunContext *context, const gchar *directory); const gchar *cut_run_context_get_log_directory (CutRunContext *context); void cut_run_context_set_multi_thread (CutRunContext *context, gboolean use_multi_thread); gboolean cut_run_context_get_multi_thread (CutRunContext *context); gboolean cut_run_context_is_multi_thread (CutRunContext *context); void cut_run_context_set_max_threads (CutRunContext *context, gint max_threads); gint cut_run_context_get_max_threads (CutRunContext *context); void cut_run_context_set_handle_signals (CutRunContext *context, gboolean handle_signals); gboolean cut_run_context_get_handle_signals (CutRunContext *context); void cut_run_context_set_exclude_files (CutRunContext *context, const gchar **filenames); const gchar **cut_run_context_get_exclude_files (CutRunContext *context); void cut_run_context_set_exclude_directories (CutRunContext *context, const gchar **directory_names); const gchar **cut_run_context_get_exclude_directories (CutRunContext *context); void cut_run_context_set_target_test_case_names (CutRunContext *context, const gchar **names); const gchar **cut_run_context_get_target_test_case_names(CutRunContext *context); void cut_run_context_set_target_test_names(CutRunContext *context, const gchar **names); const gchar **cut_run_context_get_target_test_names(CutRunContext *context); guint cut_run_context_get_n_tests (CutRunContext *context); guint cut_run_context_get_n_successes (CutRunContext *context); guint cut_run_context_get_n_assertions (CutRunContext *context); guint cut_run_context_get_n_failures (CutRunContext *context); guint cut_run_context_get_n_errors (CutRunContext *context); guint cut_run_context_get_n_pendings (CutRunContext *context); guint cut_run_context_get_n_notifications (CutRunContext *context); guint cut_run_context_get_n_omissions (CutRunContext *context); CutTestResultStatus cut_run_context_get_status (CutRunContext *context); gdouble cut_run_context_get_elapsed (CutRunContext *context); gdouble cut_run_context_get_total_elapsed (CutRunContext *context); const GList *cut_run_context_get_results (CutRunContext *context); gboolean cut_run_context_is_crashed (CutRunContext *context); void cut_run_context_cancel (CutRunContext *context); gboolean cut_run_context_is_canceled (CutRunContext *context); CutTestSuite *cut_run_context_create_test_suite (CutRunContext *context); CutTestSuite *cut_run_context_get_test_suite (CutRunContext *context); void cut_run_context_set_test_suite (CutRunContext *context, CutTestSuite *suite); void cut_run_context_set_test_case_order (CutRunContext *context, CutOrder order); CutOrder cut_run_context_get_test_case_order (CutRunContext *context); GList *cut_run_context_sort_test_cases (CutRunContext *context, GList *test_cases); void cut_run_context_add_listener (CutRunContext *context, CutListener *listener); void cut_run_context_remove_listener (CutRunContext *context, CutListener *listener); void cut_run_context_attach_listeners (CutRunContext *context); void cut_run_context_detach_listeners (CutRunContext *context); gchar *cut_run_context_build_source_filename(CutRunContext *context, const gchar *filename); gboolean cut_run_context_start (CutRunContext *context); void cut_run_context_start_async (CutRunContext *context); gboolean cut_run_context_emit_complete_run (CutRunContext *context, gboolean success); void cut_run_context_emit_error (CutRunContext *context, GQuark domain, gint code, GError *sub_error, const gchar *format, ...) G_GNUC_PRINTF(5, 6); void cut_run_context_set_command_line_args(CutRunContext *context, gchar **args); const gchar **cut_run_context_get_command_line_args(CutRunContext *context); void cut_run_context_delegate_signals (CutRunContext *context, CutRunContext *other_context); gboolean cut_run_context_is_completed (CutRunContext *context); void cut_run_context_set_fatal_failures (CutRunContext *context, gboolean fatal_failures); gboolean cut_run_context_get_fatal_failures (CutRunContext *context); void cut_run_context_set_keep_opening_modules (CutRunContext *context, gboolean keep_opening); gboolean cut_run_context_get_keep_opening_modules (CutRunContext *context); void cut_run_context_set_enable_convenience_attribute_definition (CutRunContext *context, gboolean enable_convenience_attribute_definition); gboolean cut_run_context_get_enable_convenience_attribute_definition (CutRunContext *context); void cut_run_context_set_stop_before_test (CutRunContext *context, gboolean stop); gboolean cut_run_context_get_stop_before_test (CutRunContext *context); G_END_DECLS #endif /* __CUT_RUN_CONTEXT_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-case.c0000644000175000017500000005600311355531407021015 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include "cut-test-case.h" #include "cut-test.h" #include "cut-run-context.h" #include "cut-test-result.h" #include "cut-crash-backtrace.h" #include #define CUT_TEST_CASE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_TEST_CASE, CutTestCasePrivate)) typedef struct _CutTestCasePrivate CutTestCasePrivate; struct _CutTestCasePrivate { CutSetupFunction setup; CutTeardownFunction teardown; CutStartupFunction startup; CutShutdownFunction shutdown; }; enum { PROP_0, PROP_SETUP_FUNCTION, PROP_TEARDOWN_FUNCTION, PROP_STARTUP_FUNCTION, PROP_SHUTDOWN_FUNCTION }; enum { READY, START_TEST, COMPLETE_TEST, START_TEST_ITERATOR, COMPLETE_TEST_ITERATOR, SUCCESS_IN, FAILURE_IN, ERROR_IN, PENDING_IN, NOTIFICATION_IN, OMISSION_IN, CRASH_IN, LAST_SIGNAL }; static gint cut_test_case_signals[LAST_SIGNAL] = {0}; G_DEFINE_TYPE (CutTestCase, cut_test_case, CUT_TYPE_TEST_CONTAINER) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void emit_result_signal (CutTest *test, CutTestContext *test_context, CutTestResult *result); static void cut_test_case_class_init (CutTestCaseClass *klass) { GObjectClass *gobject_class; CutTestClass *test_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); test_class = CUT_TEST_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; test_class->emit_result_signal = emit_result_signal; spec = g_param_spec_pointer("setup-function", "Setup Function", "The function for setup", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_SETUP_FUNCTION, spec); spec = g_param_spec_pointer("teardown-function", "Teardown Function", "The function for teardown", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_TEARDOWN_FUNCTION, spec); spec = g_param_spec_pointer("startup-function", "Startup Function", "The function for initialization of TestCase", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_STARTUP_FUNCTION, spec); spec = g_param_spec_pointer("shutdown-function", "Shutdown Function", "The function for finalization of TestCase", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_SHUTDOWN_FUNCTION, spec); cut_test_case_signals[READY] = g_signal_new("ready", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, ready), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); cut_test_case_signals[START_TEST] = g_signal_new("start-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, start_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT); cut_test_case_signals[COMPLETE_TEST] = g_signal_new("complete-test", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, complete_test), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_BOOLEAN, G_TYPE_NONE, 3, CUT_TYPE_TEST, CUT_TYPE_TEST_CONTEXT, G_TYPE_BOOLEAN); cut_test_case_signals[START_TEST_ITERATOR] = g_signal_new("start-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, start_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_CONTEXT); cut_test_case_signals[COMPLETE_TEST_ITERATOR] = g_signal_new("complete-test-iterator", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, complete_test_iterator), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT_BOOLEAN, G_TYPE_NONE, 3, CUT_TYPE_TEST_ITERATOR, CUT_TYPE_TEST_CONTEXT, G_TYPE_BOOLEAN); cut_test_case_signals[FAILURE_IN] = g_signal_new("failure-in", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, failure_in), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_case_signals[ERROR_IN] = g_signal_new("error-in", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, error_in), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_case_signals[PENDING_IN] = g_signal_new("pending-in", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, pending_in), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_case_signals[NOTIFICATION_IN] = g_signal_new("notification-in", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, notification_in), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_case_signals[OMISSION_IN] = g_signal_new("omission-in", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, omission_in), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); cut_test_case_signals[CRASH_IN] = g_signal_new("crash-in", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestCaseClass, crash_in), NULL, NULL, _gcut_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, CUT_TYPE_TEST_CONTEXT, CUT_TYPE_TEST_RESULT); g_type_class_add_private(gobject_class, sizeof(CutTestCasePrivate)); } static void cut_test_case_init (CutTestCase *test_case) { CutTestCasePrivate *priv = CUT_TEST_CASE_GET_PRIVATE(test_case); priv->setup = NULL; priv->teardown = NULL; priv->startup = NULL; priv->shutdown = NULL; } static void dispose (GObject *object) { G_OBJECT_CLASS(cut_test_case_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutTestCasePrivate *priv = CUT_TEST_CASE_GET_PRIVATE(object); switch (prop_id) { case PROP_SETUP_FUNCTION: priv->setup = g_value_get_pointer(value); break; case PROP_TEARDOWN_FUNCTION: priv->teardown = g_value_get_pointer(value); break; case PROP_STARTUP_FUNCTION: priv->startup = g_value_get_pointer(value); break; case PROP_SHUTDOWN_FUNCTION: priv->shutdown = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutTestCasePrivate *priv = CUT_TEST_CASE_GET_PRIVATE(object); switch (prop_id) { case PROP_SETUP_FUNCTION: g_value_set_pointer(value, priv->setup); break; case PROP_TEARDOWN_FUNCTION: g_value_set_pointer(value, priv->teardown); break; case PROP_STARTUP_FUNCTION: g_value_set_pointer(value, priv->startup); break; case PROP_SHUTDOWN_FUNCTION: g_value_set_pointer(value, priv->shutdown); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutTestCase * cut_test_case_new (const gchar *name, CutSetupFunction setup, CutTeardownFunction teardown, CutStartupFunction startup, CutShutdownFunction shutdown) { return g_object_new(CUT_TYPE_TEST_CASE, "name", name, "element-name", "test-case", "setup-function", setup, "teardown-function", teardown, "startup-function", startup, "shutdown-function", shutdown, NULL); } CutTestCase * cut_test_case_new_empty (void) { return cut_test_case_new(NULL, NULL, NULL, NULL, NULL); } static GList * get_filtered_tests (CutTestCase *test_case, const gchar **test_names) { CutTestContainer *container; container = CUT_TEST_CONTAINER(test_case); if (test_names && *test_names) { return cut_test_container_filter_children(container, test_names); } else { return g_list_copy(cut_test_container_get_children(container)); } } void cut_test_case_add_test (CutTestCase *test_case, CutTest *test) { cut_test_container_add_test(CUT_TEST_CONTAINER(test_case), test); } void cut_test_case_run_setup (CutTestCase *test_case, CutTestContext *test_context) { CutTestCasePrivate *priv; priv = CUT_TEST_CASE_GET_PRIVATE(test_case); if (priv->setup) { jmp_buf jump_buffer; cut_test_context_set_jump(test_context, &jump_buffer); if (setjmp(jump_buffer) == 0) { priv->setup(); } } } void cut_test_case_run_teardown (CutTestCase *test_case, CutTestContext *test_context) { CutTestCasePrivate *priv; priv = CUT_TEST_CASE_GET_PRIVATE(test_case); if (priv->teardown) { jmp_buf jump_buffer; cut_test_context_set_jump(test_context, &jump_buffer); if (setjmp(jump_buffer) == 0) { priv->teardown(); } } } static gboolean run_test (CutTestCase *test_case, CutTest *test, CutTestContext *test_context, CutRunContext *run_context) { gboolean success = TRUE; if (CUT_IS_TEST_ITERATOR(test)) { g_signal_emit_by_name(test_case, "start-test-iterator", test, test_context); } else { g_signal_emit_by_name(test_case, "start-test", test, test_context); cut_test_case_run_setup(test_case, test_context); } if (cut_test_context_is_failed(test_context)) { success = FALSE; } else if (cut_test_context_need_test_run(test_context)) { success = cut_test_run(test, test_context, run_context); } if (CUT_IS_TEST_ITERATOR(test)) { g_signal_emit_by_name(test_case, "complete-test-iterator", test, test_context, success); } else { cut_test_case_run_teardown(test_case, test_context); g_signal_emit_by_name(test_case, "complete-test", test, test_context, success); } return success; } static gboolean run (CutTestCase *test_case, CutTest *test, CutRunContext *run_context) { CutTestContext *test_context; gboolean success = TRUE; gboolean is_multi_thread; CutTestSuite *test_suite; if (cut_run_context_is_canceled(run_context)) return TRUE; test_suite = cut_run_context_get_test_suite(run_context); is_multi_thread = cut_run_context_is_multi_thread(run_context); test_context = cut_test_context_new(run_context, test_suite, test_case, NULL, NULL); cut_test_context_set_multi_thread(test_context, is_multi_thread); cut_test_context_current_push(test_context); cut_test_context_set_test(test_context, test); success = run_test(test_case, test, test_context, run_context); cut_test_context_set_test(test_context, NULL); g_object_unref(test_context); cut_test_context_current_pop(); /* FIXME: We want to use the code: g_object_unref(cut_test_context_current_pop()); We need to hide cut_set_current_test_context() from user. */ return success; } static void cb_test_status (CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { CutTestResultStatus *status = data; *status = MAX(*status, cut_test_result_get_status(result)); } static void cut_test_case_run_startup (CutTestCase *test_case, CutTestContext *test_context) { CutTestCasePrivate *priv; priv = CUT_TEST_CASE_GET_PRIVATE(test_case); if (priv->startup) { jmp_buf jump_buffer; cut_test_context_set_jump(test_context, &jump_buffer); if (setjmp(jump_buffer) == 0) { priv->startup(); } } } static void cut_test_case_run_shutdown (CutTestCase *test_case, CutTestContext *test_context) { CutTestCasePrivate *priv; priv = CUT_TEST_CASE_GET_PRIVATE(test_case); if (priv->shutdown) { jmp_buf jump_buffer; cut_test_context_set_jump(test_context, &jump_buffer); if (setjmp(jump_buffer) == 0) { priv->shutdown(); } } } static void emit_result_signal (CutTest *test, CutTestContext *test_context, CutTestResult *result) { const gchar *status_signal_name = NULL; gchar *signal_name; CutTestResultStatus status; status = cut_test_result_get_status(result); status_signal_name = cut_test_result_status_to_signal_name(status); signal_name = g_strdup_printf("%s-in", status_signal_name); g_signal_emit_by_name(test, signal_name, test_context, result); g_free(signal_name); } static void cut_test_case_emit_result_signal (CutTestCase *test_case, CutTestResult *result) { const gchar *status_signal_name = NULL; CutTestResultStatus status; cut_test_set_result_elapsed(CUT_TEST(test_case), result); status = cut_test_result_get_status(result); status_signal_name = cut_test_result_status_to_signal_name(status); g_signal_emit_by_name(test_case, status_signal_name, NULL, result); } static gboolean run_tests (CutTestCase *test_case, CutRunContext *run_context, const GList *tests, CutTestResultStatus *status) { const GList *list; gboolean all_success = TRUE; for (list = tests; list; list = g_list_next(list)) { CutTest *test = list->data; if (!test) continue; if (CUT_IS_TEST(test)) { g_signal_connect(test, "success", G_CALLBACK(cb_test_status), status); g_signal_connect(test, "failure", G_CALLBACK(cb_test_status), status); g_signal_connect(test, "error", G_CALLBACK(cb_test_status), status); g_signal_connect(test, "pending", G_CALLBACK(cb_test_status), status); g_signal_connect(test, "notification", G_CALLBACK(cb_test_status), status); g_signal_connect(test, "omission", G_CALLBACK(cb_test_status), status); g_signal_connect(test, "crash", G_CALLBACK(cb_test_status), status); if (!run(test_case, test, run_context)) all_success = FALSE; g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_test_status), status); } else { g_warning("This object is not CutTest object"); } } return all_success; } static void cb_test_case_status_in (CutTestCase *test_case, CutTestContext *test_context, CutTestResult *result, gpointer data) { CutTestResultStatus *status = data; *status = MAX(*status, cut_test_result_get_status(result)); } static gboolean cut_test_case_run_tests (CutTestCase *test_case, CutRunContext *run_context, const GList *tests) { CutTestCasePrivate *priv; CutTestContext *test_context; gboolean all_success = TRUE; CutTestResult *result; CutTestResultStatus status = CUT_TEST_RESULT_SUCCESS; gint signum; jmp_buf jump_buffer; CutTestSuite *test_suite; CutCrashBacktrace *crash_backtrace = NULL; g_signal_emit_by_name(test_case, "ready", g_list_length((GList *)tests)); g_signal_emit_by_name(CUT_TEST(test_case), "start", NULL); priv = CUT_TEST_CASE_GET_PRIVATE(test_case); test_suite = cut_run_context_get_test_suite(run_context); test_context = cut_test_context_new(run_context, test_suite, test_case, NULL, NULL); cut_test_context_current_push(test_context); #define CONNECT(event) \ g_signal_connect(test_case, #event "-in", \ G_CALLBACK(cb_test_case_status_in), \ &status) CONNECT(failure); CONNECT(error); CONNECT(pending); CONNECT(notification); CONNECT(omission); CONNECT(crash); #undef CONNECT if (cut_run_context_is_multi_thread(run_context) || !cut_run_context_get_handle_signals(run_context)) { signum = 0; } else { crash_backtrace = cut_crash_backtrace_new(&jump_buffer); signum = setjmp(jump_buffer); } switch (signum) { case 0: cut_test_case_run_startup(test_case, test_context); if (cut_test_context_is_failed(test_context)) { all_success = FALSE; } else { if (status != CUT_TEST_RESULT_OMISSION) all_success = run_tests(test_case, run_context, tests, &status); } if (crash_backtrace) cut_crash_backtrace_free(crash_backtrace); break; #ifndef G_OS_WIN32 case SIGSEGV: case SIGABRT: case SIGTERM: all_success = FALSE; cut_crash_backtrace_emit(test_suite, test_case, NULL, NULL, NULL, test_context); break; case SIGINT: cut_run_context_cancel(run_context); break; #endif default: break; } cut_test_case_run_shutdown(test_case, test_context); g_signal_handlers_disconnect_by_func(test_case, G_CALLBACK(cb_test_case_status_in), &status); result = cut_test_result_new(status, NULL, NULL, test_case, NULL, NULL, NULL, NULL, NULL); cut_test_case_emit_result_signal(test_case, result); g_object_unref(result); g_signal_emit_by_name(CUT_TEST(test_case), "complete", NULL, all_success); g_object_unref(test_context); cut_test_context_current_pop(); /* FIXME: We want to use the code: g_object_unref(cut_test_context_current_pop()); We need to hide cut_set_current_test_context() from user. */ return all_success; } gboolean cut_test_case_run_test (CutTestCase *test_case, CutRunContext *run_context, const gchar *name) { const gchar *test_names[] = {NULL, NULL}; g_return_val_if_fail(CUT_IS_TEST_CASE(test_case), FALSE); test_names[0] = name; return cut_test_case_run_with_filter(test_case, run_context, test_names); } gboolean cut_test_case_run_with_filter (CutTestCase *test_case, CutRunContext *run_context, const gchar **test_names) { GList *filtered_tests; gboolean success = TRUE; filtered_tests = get_filtered_tests(test_case, test_names); if (!filtered_tests) return TRUE; success = cut_test_case_run_tests(test_case, run_context, filtered_tests); g_list_free(filtered_tests); return success; } gboolean cut_test_case_run (CutTestCase *test_case, CutRunContext *run_context) { const gchar **test_names; test_names = cut_run_context_get_target_test_names(run_context); return cut_test_case_run_with_filter(test_case, run_context, test_names); } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-sub-process-group.h0000644000175000017500000000452311205747026022531 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_SUB_PROCESS_GROUP_H__ #define __CUT_SUB_PROCESS_GROUP_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_SUB_PROCESS_GROUP (cut_sub_process_group_get_type ()) #define CUT_SUB_PROCESS_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_SUB_PROCESS_GROUP, CutSubProcessGroup)) #define CUT_SUB_PROCESS_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_SUB_PROCESS_GROUP, CutSubProcessGroupClass)) #define CUT_IS_SUB_PROCESS_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_SUB_PROCESS_GROUP)) #define CUT_IS_SUB_PROCESS_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_SUB_PROCESS_GROUP)) #define CUT_SUB_PROCESS_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_SUB_PROCESS_GROUP, CutSubProcessGroupClass)) typedef struct _CutSubProcessGroupClass CutSubProcessGroupClass; struct _CutSubProcessGroup { GObject object; }; struct _CutSubProcessGroupClass { GObjectClass parent_class; }; GType cut_sub_process_group_get_type (void) G_GNUC_CONST; CutSubProcessGroup *cut_sub_process_group_new (CutTestContext *test_context); CutTestContext *cut_sub_process_group_get_test_context (CutSubProcessGroup *sub_process_group); void cut_sub_process_group_set_test_context (CutSubProcessGroup *sub_process_group, CutTestContext *test_context); G_END_DECLS #endif /* __CUT_SUB_PROCESS_GROUP_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-differ.c0000644000175000017500000002467711424022512020365 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include "cut-differ.h" #include "cut-string-diff-writer.h" #include "cut-utils.h" #define CUT_DIFFER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_DIFFER, CutDifferPrivate)) typedef struct _CutDifferPrivate CutDifferPrivate; struct _CutDifferPrivate { gchar **from; gchar **to; CutSequenceMatcher *matcher; }; enum { PROP_0, PROP_FROM, PROP_TO }; G_DEFINE_TYPE(CutDiffer, cut_differ, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static gdouble get_best_ratio (CutDiffer *differ); static gdouble get_cut_off_ratio (CutDiffer *differ); static void cut_differ_class_init (CutDifferClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; klass->get_best_ratio = get_best_ratio; klass->get_cut_off_ratio = get_cut_off_ratio; spec = g_param_spec_string("from", "Original text", "The original text", NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_FROM, spec); spec = g_param_spec_string("to", "Modified text", "The modified text", NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_TO, spec); g_type_class_add_private(gobject_class, sizeof(CutDifferPrivate)); } static void cut_differ_init (CutDiffer *differ) { CutDifferPrivate *priv; priv = CUT_DIFFER_GET_PRIVATE(differ); priv->from = NULL; priv->to = NULL; priv->matcher = NULL; } static void dispose (GObject *object) { CutDifferPrivate *priv; priv = CUT_DIFFER_GET_PRIVATE(object); if (priv->matcher) { g_object_unref(priv->matcher); priv->matcher = NULL; } if (priv->from) { g_strfreev(priv->from); priv->from = NULL; } if (priv->to) { g_strfreev(priv->to); priv->to = NULL; } G_OBJECT_CLASS(cut_differ_parent_class)->dispose(object); } static gchar ** split_to_lines (const gchar *string) { return g_regex_split_simple("\r?\n", string, 0, 0); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutDifferPrivate *priv = CUT_DIFFER_GET_PRIVATE(object); switch (prop_id) { case PROP_FROM: priv->from = split_to_lines(g_value_get_string(value)); break; case PROP_TO: priv->to = split_to_lines(g_value_get_string(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static gdouble get_best_ratio (CutDiffer *differ) { return 0.74; } static gdouble get_cut_off_ratio (CutDiffer *differ) { return 0.75; } void cut_differ_diff (CutDiffer *differ, CutDiffWriter *writer) { CUT_DIFFER_GET_CLASS(differ)->diff(differ, writer); } void cut_differ_write_summary (CutDiffer *differ, CutDiffWriter *writer, const GList *operations) { GString *format; CutSequenceMatchOperation *first_operation, *last_operation; gint deleted_lines, inserted_lines; first_operation = operations->data; while (g_list_next(operations)) { operations = g_list_next(operations); } last_operation = operations->data; format = g_string_new("@@ "); g_string_append_printf(format, "-%d", first_operation->from_begin + 1); deleted_lines = last_operation->from_end - first_operation->from_begin; if (deleted_lines > 1) g_string_append_printf(format, ",%d", deleted_lines); g_string_append_printf(format, " +%d", first_operation->to_begin + 1); inserted_lines = last_operation->to_end - first_operation->to_begin; if (inserted_lines > 1) g_string_append_printf(format, ",%d", inserted_lines); g_string_append(format, " @@"); cut_diff_writer_write_line(writer, format->str, CUT_DIFF_WRITER_TAG_SUMMARY); g_string_free(format, TRUE); } gdouble cut_differ_get_best_ratio (CutDiffer *differ) { return CUT_DIFFER_GET_CLASS(differ)->get_best_ratio(differ); } gdouble cut_differ_get_cut_off_ratio (CutDiffer *differ) { return CUT_DIFFER_GET_CLASS(differ)->get_cut_off_ratio(differ); } gchar ** cut_differ_get_from (CutDiffer *differ) { return CUT_DIFFER_GET_PRIVATE(differ)->from; } gchar ** cut_differ_get_to (CutDiffer *differ) { return CUT_DIFFER_GET_PRIVATE(differ)->to; } CutSequenceMatcher * cut_differ_get_sequence_matcher (CutDiffer *differ) { CutDifferPrivate *priv; priv = CUT_DIFFER_GET_PRIVATE(differ); if (!priv->matcher) { CutDifferClass *klass; gchar **from, **to; from = cut_differ_get_from(differ); to = cut_differ_get_to(differ); priv->matcher = cut_sequence_matcher_string_new(from, to); klass = CUT_DIFFER_GET_CLASS(differ); if (klass->get_initial_context_size) { guint context_size; context_size = klass->get_initial_context_size(differ); cut_sequence_matcher_set_context_size(priv->matcher, context_size); } } return priv->matcher; } void cut_differ_set_context_size (CutDiffer *differ, guint context_size) { CutSequenceMatcher *matcher; matcher = cut_differ_get_sequence_matcher(differ); return cut_sequence_matcher_set_context_size(matcher, context_size); } guint cut_differ_get_context_size (CutDiffer *differ) { CutSequenceMatcher *matcher; matcher = cut_differ_get_sequence_matcher(differ); return cut_sequence_matcher_get_context_size(matcher); } gboolean cut_differ_need_diff (CutDiffer *differ) { CutSequenceMatcher *matcher; const GList *operations; gboolean have_equal = FALSE; gboolean have_insert_or_delete = FALSE; gdouble best_ratio; gchar **from, **to; best_ratio = cut_differ_get_best_ratio(differ); from = cut_differ_get_from(differ); to = cut_differ_get_to(differ); matcher = cut_differ_get_sequence_matcher(differ); for (operations = cut_sequence_matcher_get_operations(matcher); operations; operations = g_list_next(operations)) { CutSequenceMatchOperation *operation = operations->data; gint from_begin, from_end, from_index; gint to_begin, to_end, to_index; switch (operation->type) { case CUT_SEQUENCE_MATCH_OPERATION_EQUAL: have_equal = TRUE; if (have_insert_or_delete) return TRUE; break; case CUT_SEQUENCE_MATCH_OPERATION_REPLACE: from_begin = operation->from_begin; from_end = operation->from_end; to_begin = operation->to_begin; to_end = operation->to_end; for (from_index = from_begin; from_index < from_end; from_index++) { for (to_index = to_begin; to_index < to_end; to_index++) { CutSequenceMatcher *char_matcher; const gchar *from_line, *to_line; gdouble ratio; from_line = from[from_index]; to_line = to[to_index]; char_matcher = cut_sequence_matcher_char_new_full( from_line, to_line, cut_differ_util_is_space_character, NULL); ratio = cut_sequence_matcher_get_ratio(char_matcher); g_object_unref(char_matcher); if (ratio > best_ratio) return TRUE; } } break; case CUT_SEQUENCE_MATCH_OPERATION_INSERT: case CUT_SEQUENCE_MATCH_OPERATION_DELETE: have_insert_or_delete = TRUE; if (have_equal) return TRUE; break; default: break; } } return FALSE; } gboolean cut_differ_util_is_space_character (gpointer data, gpointer user_data) { gint character; character = GPOINTER_TO_INT(data); return character == ' ' || character == '\t'; } guint cut_differ_util_compute_width (const gchar *string, guint begin, guint end) { const gchar *last; guint width = 0; last = g_utf8_offset_to_pointer(string, end); for (string = g_utf8_offset_to_pointer(string, begin); string < last; string = g_utf8_next_char(string)) { if (g_unichar_iswide_cjk(g_utf8_get_char(string))) { width += 2; } else if (string[0] == '\t') { width += 8; } else { width++; } } return width; } gboolean cut_differ_util_is_same_content (const GList *groups) { const GList *group; CutSequenceMatchOperation *operation; if (g_list_next(groups)) return FALSE; group = groups->data; if (group && g_list_next(group)) return FALSE; operation = group->data; return operation->type == CUT_SEQUENCE_MATCH_OPERATION_EQUAL && operation->from_begin == operation->to_begin && operation->from_end == operation->to_end; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-helper.h0000644000175000017500000004134611424022512020402 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_HELPER_H__ #define __CUT_HELPER_H__ #include #ifdef __cplusplus extern "C" { #endif /** * SECTION: cut-helper * @title: Assertion writing helper * @short_description: Symbols in this section help you * writing your own assertions. * * You will need to write your own assertions for writing * easy to read test. Symbols in this section help you * writing your own assertions. * * e.g.: * * my-assertions.h: * |[ * #ifndef __MY_ASSERTIONS_H__ * #define __MY_ASSERTIONS_H__ * * #include * * #ifdef __cplusplus * extern "C" { * #endif * * #define my_assert_equal_int(expected, actual) \ * cut_trace_with_info_expression( \ * my_assert_equal_int_helper((expected), (actual), \ * # expected, # actual), \ * my_assert_equal_int(expected, actual, __VA_ARGS__)) * * void my_assert_equal_int_help (long expected, * long actual, * const char *expression_expected, * const char *expression_actual); * * #ifdef __cplusplus * } * #endif * * #endif * ]| * * my-assertions.c: * |[ * #include "my-assertions.h" * * void * my_assert_equal_int_helper (long expected, * long actual, * const char *expression_expected, * const char *expression_actual) * { * if (expected == actual) { * cut_test_pass(); * } else { * cut_test_fail(cut_take_printf("<%s == %s>\n" * "expected: <%ld>\n" * " actual: <%ld>", * expression_expected, * expression_actual, * expected, actual)); * } * } * ]| * * Makefile.am: * |[ * AM_CFLAGS = $(CUTTER_CFLAGS) * LIBS = $(CUTTER_LIBS) * noinst_LTLIBRARIES = libmy-assertions.la * libmy_assertions_la_SOURCES = my-assertions.c my-assertions.h * AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined * ]| */ /** * cut_test_pass: * * Call cut_test_pass() if an assertion is * passed. cut_test_pass() counts up n-assertions. * * Since: 1.0.5 */ #define cut_test_pass() \ cut_test_context_pass_assertion(cut_get_current_test_context()) /** * cut_test_fail: * @system_message: a failure message from testing system. * @...: optional format string, followed by parameters to insert * into the format string. (as with printf()) This is * deprecated since 0.1.6. Use cut_set_message() instead. * * Call cut_test_fail() if an assertion is failed. * cut_test_fail() counts up n-failures and terminate the * current test. * * Since: 1.0.5 */ #define cut_test_fail(system_message) \ cut_test_terminate(FAILURE, system_message) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_test_fail_va_list: * @system_message: a failure message from testing * system. * @user_message_format: a failure message from user. * * See cut_test_fail() for cut_test_fail_va_list()'s * behavior. @user_message_format is the prior variable of * variable length arguments. * * e.g.: * |[ * void * my_assert(cut_boolean result, * const gchar *user_message_format, * ...) * { * if (result) { * cut_test_pass(); * } else { * cut_test_fail_va_list("Fail!", user_message_format); * } * } * ]| * * Since: 1.0.5 * Deprecated: 1.0.6: Use cut_test_fail() instead. */ #define cut_test_fail_va_list(system_message, ...) do \ { \ cut_test_with_user_message( \ cut_test_terminate(FAILURE, system_message), \ __VA_ARGS__); \ } while (0) #endif /** * CUT_RELATIVE_PATH: * * Define this macro in a source code or build option * (e.g. -DCUT_RELATIVE_PATH=\""sub/dir/"\") if the source * code is built as shared library and used it as helper * library of your test. If this path isn't set, you can't * get correct path from cut_trace() and * cut_trace_with_info_expression(). * * Here is an example structure for explain: * * |[ * --- core-lib/ --- XXX.c # Your core library * | +- ... * | +- YYY.c * +- util-lib/ --- AAA.c # Your utility library * | +- ... * | +- BBB.c * | * +- test/ --- core/ --- test-XXX.c # Tests for your core library * | +- ... * | +- test-YYY.c * +- util/ --- test-AAA.c # Tests for your utility library * | +- ... * | +- test-BBB.c * +- lib/ --- my-assertions.c # Your library of tests. * +- my-assertions.h # This library will be used * | # as shared library of your * | # tests (test/core/test-*.so * | # and test/util/test-*.so) * +- ... * * % cutter --source-directory=test test * ]| * * In the above example structure, you need to define * %CUT_RELATIVE_PATH as "lib" in test/lib/my-assertions.c * because my-assertions.c is in lib/ directory from source * directory "test" specified by command line option * --source-directory. * * Here are example code and build option: * * |[ * test/lib/my-assertions.c: * #define CUT_RELATIVE_PATH "lib" * #include * * build option: * % gcc -DCUT_RELATIVE_PATH="\"lib\"" ... * ]| * * Since: 1.0.6 */ #ifndef CUT_RELATIVE_PATH # define CUT_RELATIVE_PATH NULL #endif /** * cut_push_backtrace: * @expression: an expression to be traced. * * Pushes @expression and the current source place to the * backtrace stack. * * Normally, you don't need to use it directory. cut_trace() * is enough. * * Since: 1.0.6 */ #define cut_push_backtrace(expression) \ cut_test_context_push_backtrace(cut_get_current_test_context(), \ CUT_RELATIVE_PATH, \ __FILE__, __LINE__, \ CUT_FUNCTION, \ #expression) /** * cut_pop_backtrace: * * Pops a backtrace from the backtrace stack. * * Normally, you don't need to use it directory. cut_trace() * is enough. * * Since: 1.0.6 */ void cut_pop_backtrace(void); /** * cut_trace: * @expression: an expression to be traced. * * Mark the current file, line, function and @expression and * show it when assertion is failed in * @expression. Most of @expression will be function call. * * Note that you can't get return value of @expression. * * Here is an example of cut_trace(). If * cut_assert_not_null(object) is failed, you will get a * backtrace that contains two line; * cut_assert_not_null(object) and create_my_object("my-name"). * * e.g.: * |[ * static MyObject *object; * * static void * create_my_object(const char *name) * { * object = my_object_new(name); * cut_assert_not_null(object); * } * * void * test_my_object_name(void) * { * cut_trace(create_my_object("my-name")); * cut_assert_equal_string("my-name", * my_object_get_name(object)); * } * ]| * * You will use cut_trace() with macro for test readability: * |[ * static MyObject *object; * * static void * create_my_object_helper(const char *name) * { * object = my_object_new(name); * cut_assert_not_null(object); * } * * #define create_my_object(...) \ * cut_trace(create_my_object_helper(__VA_ARGS__)) * * void * test_my_object_name(void) * { * create_my_object("my-name"); * cut_assert_equal_string("my-name", * my_object_get_name(object)); * } * ]| * * Since: 1.0.5 */ #define cut_trace(expression) do \ { \ cut_push_backtrace(expression); \ do { \ expression; \ } while (0); \ cut_pop_backtrace(); \ } while (0) /** * cut_trace_with_info_expression: * @expression: an expression to be traced. * @info_expression: a traced expression. * * It's difference between cut_trace() and * cut_trace_with_info_expression() that traced expression * is the same expression as @expression or * not. cut_trace_with_info_expression() is useful when you * want to hide some information in @expression for * backtrace readability. * * Here is an example of * cut_trace_with_info_expression(). If * cut_assert_not_null(object) is failed, you will get a * backtrace that contains two line: * * cut_assert_not_null(object) * create_my_object("my-name") not * create_my_object_helper("my-name") * * If you use cut_trace() instead of * cut_trace_with_info_expression(), you will get * create_my_object_helper("my-name"). You may be confused * about 'Where is create_my_object_helper("my-name") from? * test_my_object_name() uses create_my_object("my-name") * but does not use create_my_object_helper("my-name").'. * * e.g.: * |[ * static MyObject *object; * * static void * create_my_object_helper(const char *name) * { * object = my_object_new(name); * cut_assert_not_null(object); * } * * #define create_my_object(...) \ * cut_trace_with_info_expression( \ * create_my_object_helper(__VA_ARGS__), \ * create_my_object(__VA_ARGS__)) * * void * test_my_object_name(void) * { * create_my_object("my-name"); * cut_assert_equal_string("my-name", * my_object_get_name(object)); * } * ]| * * Since: 1.0.5 */ #define cut_trace_with_info_expression(expression, info_expression) do \ { \ CutTestContext *_cut_test_context; \ \ _cut_test_context = cut_get_current_test_context(); \ cut_test_context_push_backtrace(_cut_test_context, \ CUT_RELATIVE_PATH, \ __FILE__, __LINE__, \ CUT_FUNCTION, \ #info_expression); \ do { \ expression; \ } while (0); \ cut_test_context_pop_backtrace(_cut_test_context); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_append_diff: * @message: the string to be appended diff. * @from: the original string. * @to: the modified string. * * Computes diff between @from and @to and append the diff * to @message. Returned string is owned by Cutter. * * Returns: @message with diff between @from and @to or same * as @message if the diff not interested. Don't free it. * * Since: 1.0.3 * * Deprecated: 1.0.9: Use cut_set_expected() and * cut_set_actual() instead. */ #define cut_append_diff(message, from, to) \ cut_take_string(cut_utils_append_diff(message, from, to)) #endif /** * cut_set_expected: * @expected: the inspected expected object. * * Sets an inspected expected object to be used by the next * assertion. * * If both of expected and actual object are set and diff of * them is needed, the diff is generated automatically. * * See also cut_set_actual(). * * Since: 1.0.9 */ #define cut_set_expected(expected) \ cut_test_context_set_expected(cut_get_current_test_context(), \ expected) /** * cut_set_actual: * @actual: the inspected actual object. * * Sets an inspected actual object to be used by the next * assertion. * * If both of expected and actual object are set and diff of * them is needed, the diff is generated automatically. * * See also cut_set_expected(). * * Since: 1.0.9 */ #define cut_set_actual(actual) \ cut_test_context_set_actual(cut_get_current_test_context(), \ actual) /** * cut_inspect_string_array: * @strings: the array of strings to be inspected. * * Formats @strings as human readable string that is owned by Cutter. * * Returns: a inspected string owned by Cutter. Don't free it. */ #define cut_inspect_string_array(strings) \ cut_take_string(cut_utils_inspect_string_array(strings)) /** * cut_equal_string: * @string1: a string. * @string2: a string. * * Compare @string1 to @string2. @string1 and/or @string2 * maybe %NULL. * * Returns: %CUT_TRUE if both @string1 and @string2 are %NULL or * have the same contents; %CUT_FALSE otherwise. * * Since: 1.0.5 */ #define cut_equal_string(string1, string2) \ cut_utils_equal_string(string1, string2) /** * cut_equal_double: * @double1: a double value. * @double2: a double value. * @error: a double value that specifies error range. * * Compare @double1 to @double2 with @error range. * * Returns: %CUT_TRUE if |@double1 - @double2| <= @error; * %CUT_FALSE otherwise. * * Since: 1.0.5 */ #define cut_equal_double(double1, double2, error) \ cut_utils_equal_double(double1, double2, error) /** * cut_equal_sockaddr: * @address1: a socket address. * @address2: a socket address. * * Compare @address1 to @address2. * * This function can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT. * * Returns: %CUT_TRUE if @address1 == @address2, * %CUT_FALSE otherwise. * * Since: 1.1.1 */ #ifdef CUT_DISABLE_SOCKET_SUPPORT #define cut_equal_sockaddr(address1, address2) CUT_FALSE #else #define cut_equal_sockaddr(address1, address2) \ cut_utils_equal_sockaddr(address1, address2) #endif /** * cut_inspect_sockaddr: * @address: the socket address to be inspected. * * Formats @address as human readable string that is owned * by Cutter. * * This function can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT. * * Returns: a inspected socket address owned by Cutter. Don't free it. * * Since: 1.1.1 */ #ifdef CUT_DISABLE_SOCKET_SUPPORT #define cut_inspect_sockaddr(address) \ cut_take_strdup("don't define CUT_DISABLE_SOCKET_SUPPORT " \ "to use cut_inspect_sockaddr().") #else #define cut_inspect_sockaddr(address) \ cut_take_string(cut_utils_inspect_sockaddr(address)) #endif /** * cut_get_test_directory: * * Gets the test directory name which is specified by command line. * * Returns: a string owned by Cutter that must not be modified or freed. * * Since: 1.1.4 */ const char *cut_get_test_directory(void); /** * cut_get_source_directory: * * Gets the source directory name which is specified by command line. * * Returns: a string owned by Cutter that must not be modified or freed. * * Since: 1.1.5 */ const char *cut_get_source_directory(void); #ifdef __cplusplus } #endif #endif /* __CUT_HELPER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/Makefile.am0000644000175000017500000001507211424022512020212 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) AM_CFLAGS = \ -DLOCALEDIR=\""$(localedir)"\" \ $(CUTTER_CFLAGS) \ $(COVERAGE_CFLAGS) CLEANFILES = *.gcno *.gcda lib_LTLIBRARIES = libcutter.la cutter_public_headers = \ cut-assertions-helper.h \ cut-assertions.h \ cut-experimental.h \ cut-features.h \ cut-helper.h \ cut-macros.h \ cut-multi-process.h \ cut-public.h \ cut-test-utils-helper.h \ cut-test-utils.h \ cut-types.h \ cut-version.h \ cut-config.h libcutter_public_headers = \ cut-analyzer.h \ cut-backtrace-entry.h \ cut-colorize-differ.h \ cut-console-diff-writer.h \ cut-console.h \ cut-contractor.h \ cut-diff-writer.h \ cut-differ.h \ cut-factory-builder.h \ cut-file-stream-reader.h \ cut-iterated-test.h \ cut-listener-utils.h \ cut-listener.h \ cut-main.h \ cut-module-factory-utils.h \ cut-module-factory.h \ cut-pipeline.h \ cut-private.h \ cut-process.h \ cut-readable-differ.h \ cut-report-factory-builder.h \ cut-report.h \ cut-run-context.h \ cut-runner.h \ cut-stream-factory-builder.h \ cut-stream-parser.h \ cut-stream-reader.h \ cut-stream.h \ cut-string-diff-writer.h \ cut-sub-process-group.h \ cut-sub-process.h \ cut-test-case.h \ cut-test-container.h \ cut-test-context.h \ cut-test-data.h \ cut-test-iterator.h \ cut-test-result.h \ cut-test-runner.h \ cut-test-suite.h \ cut-test.h \ cut-ui-factory-builder.h \ cut-ui.h \ cut-unified-differ.h \ cut-verbose-level.h noinst_headers = \ cut-crash-backtrace.h \ cut-elf-loader.h \ cut-loader.h \ cut-mach-o-loader.h \ cut-module-impl.h \ cut-module.h \ cut-pe-loader.h \ cut-repository.h \ cut-sequence-matcher.h \ cut-utils.h pkginclude_HEADERS = \ cutter.h cutter_includedir=$(pkgincludedir)/cutter cutter_include_HEADERS = \ $(cutter_public_headers) \ $(libcutter_public_headers) \ $(enum_source_prefix).h enum_source_prefix = cut-enum-types enum_sources_h = \ cut-public.h \ $(libcutter_public_headers) # We can't use $(enum_source_prefix) here. :< enum_sources = \ cut-enum-types.c \ cut-enum-types.h MAINTAINERCLEANFILES = \ stamp-$(enum_source_prefix)-c \ stamp-$(enum_source_prefix)-h BUILT_SOURCES = $(enum_sources) bin_PROGRAMS = cutter cut-diff cutter_SOURCES = main.c cut_diff_SOURCES = cut-diff.c libcutter_sources = \ cut-analyzer.c \ cut-assertions-helper.c \ cut-backtrace-entry.c \ cut-colorize-differ.c \ cut-console-diff-writer.c \ cut-console.c \ cut-contractor.c \ cut-crash-backtrace.c \ cut-diff-writer.c \ cut-differ.c \ cut-elf-loader.c \ cut-factory-builder.c \ cut-file-stream-reader.c \ cut-helper.c \ cut-iterated-test.c \ cut-listener.c \ cut-loader.c \ cut-mach-o-loader.c \ cut-main.c \ cut-module-factory-utils.c \ cut-module-factory.c \ cut-module.c \ cut-pe-loader.c \ cut-pipeline.c \ cut-process.c \ cut-readable-differ.c \ cut-report-factory-builder.c \ cut-report.c \ cut-repository.c \ cut-run-context.c \ cut-runner.c \ cut-sequence-matcher.c \ cut-stream-factory-builder.c \ cut-stream-parser.c \ cut-stream-reader.c \ cut-stream.c \ cut-string-diff-writer.c \ cut-sub-process-group.c \ cut-sub-process.c \ cut-test-case.c \ cut-test-container.c \ cut-test-context.c \ cut-test-data.c \ cut-test-iterator.c \ cut-test-result.c \ cut-test-runner.c \ cut-test-suite.c \ cut-test-utils-helper.c \ cut-test.c \ cut-ui-factory-builder.c \ cut-ui.c \ cut-unified-differ.c \ cut-utils.c \ cut-verbose-level.c libcutter_la_SOURCES = \ $(cutter_public_headers) \ $(libcutter_public_headers) \ $(noinst_headers) \ $(enum_sources) \ $(libcutter_sources) libcutter_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ -no-undefined libcutter_la_LIBADD = \ $(top_builddir)/gcutter/libgcutter.la \ $(GLIB_LIBS) \ $(BFD_LIBS) \ $(WINDOWS_LIBS) if GLIB_2_12 libcutter_la_LIBADD += \ $(top_builddir)/glib-compatible/libglib-compatible.la endif if OS_WIN32 libcutter_la_LDFLAGS += -mwindows endif if HAVE_GIO libcutter_la_LIBADD += $(GIO_LIBS) endif cutter_LDADD = \ $(builddir)/libcutter.la \ $(GLIB_LIBS) cut_diff_LDADD = \ $(builddir)/libcutter.la \ $(GLIB_LIBS) $(enum_source_prefix).c: stamp-$(enum_source_prefix)-c $(enum_source_prefix).h @true stamp-$(enum_source_prefix)-c: $(enum_sources_h) Makefile $(AM_V_GEN)(cd $(srcdir) && \ include_headers="" && \ for h in $(enum_sources_h); do \ include_headers="$${include_headers}#include \"$${h}\"\n"; \ done && \ $(GLIB_MKENUMS) \ --fhead "#include \"$(enum_source_prefix).h\"\n$${include_headers}" \ --fprod "\n/* enumerations from \"@filename@\" */" \ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ --vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \ $(enum_sources_h)) > tmp-$(enum_source_prefix).c && \ (cmp -s tmp-$(enum_source_prefix).c $(enum_source_prefix).c || \ cp tmp-$(enum_source_prefix).c $(enum_source_prefix).c ) && \ rm -f tmp-$(enum_source_prefix).c && \ echo timestamp > $(@F) $(enum_source_prefix).h: stamp-$(enum_source_prefix)-h @true stamp-$(enum_source_prefix)-h: $(enum_sources_h) Makefile $(AM_V_GEN) (cd $(srcdir) && \ mark="__`echo $(enum_source_prefix) | sed -e 's/-/_/g' | tr a-z A-Z`_H__" && \ $(GLIB_MKENUMS) \ --fhead "#ifndef $${mark}\n#define $${mark}\n\n#include \n\nG_BEGIN_DECLS\n" \ --fprod "/* enumerations from \"@filename@\" */\n" \ --vhead "GType @enum_name@_get_type (void);\n#define CUT_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ --ftail "G_END_DECLS\n\n#endif /* $${mark} */" \ $(enum_sources_h)) > tmp-$(enum_source_prefix).h && \ (cmp -s tmp-$(enum_source_prefix).h $(enum_source_prefix).h || \ cp tmp-$(enum_source_prefix).h $(enum_source_prefix).h) && \ rm -f tmp-$(enum_source_prefix).h && \ echo timestamp > $(@F) echo-private-headers: @for header in $(noinst_headers); do \ echo $(abs_srcdir)/$${header}; \ done echo-public-headers: @for header in $(cutter_include_HEADERS); do \ if test "$${header}" = "$(enum_source_prefix).h"; then \ echo $(abs_builddir)/$(enum_source_prefix).h; \ else \ echo $(abs_srcdir)/$${header}; \ fi; \ done echo-libcutter-sources: @echo $(libcutter_sources) $(enum_source_prefix).c cutter-testing-framework-1.1.7/cutter/cut-stream.h0000644000175000017500000000413611205747026020425 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_STREAMER_H__ #define __CUT_STREAMER_H__ #include G_BEGIN_DECLS #define CUT_TYPE_STREAM (cut_stream_get_type ()) #define CUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_STREAM, CutStream)) #define CUT_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_STREAM, CutStreamClass)) #define CUT_IS_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_STREAM)) #define CUT_IS_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_STREAM)) #define CUT_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_STREAM, CutStreamClass)) typedef gboolean (*CutStreamFunction) (const gchar *message, GError **error, gpointer user_data); typedef struct _CutStream CutStream; typedef struct _CutStreamClass CutStreamClass; struct _CutStream { GObject object; }; struct _CutStreamClass { GObjectClass parent_class; }; GType cut_stream_get_type (void) G_GNUC_CONST; CutStream *cut_stream_new (const gchar *name, const gchar *first_property, ...); G_END_DECLS #endif /* __CUT_STREAM_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-analyzer.h0000644000175000017500000000420711205747026020756 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_ANALYZER_H__ #define __CUT_ANALYZER_H__ #include G_BEGIN_DECLS #define CUT_TYPE_ANALYZER (cut_analyzer_get_type ()) #define CUT_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_ANALYZER, CutAnalyzer)) #define CUT_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_ANALYZER, CutAnalyzerClass)) #define CUT_IS_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_ANALYZER)) #define CUT_IS_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_ANALYZER)) #define CUT_ANALYZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_ANALYZER, CutAnalyzerClass)) typedef struct _CutAnalyzer CutAnalyzer; typedef struct _CutAnalyzerClass CutAnalyzerClass; struct _CutAnalyzer { GObject object; }; struct _CutAnalyzerClass { GObjectClass parent_class; }; GType cut_analyzer_get_type (void) G_GNUC_CONST; CutAnalyzer *cut_analyzer_new (void); gboolean cut_analyzer_analyze (CutAnalyzer *analyzer, const gchar *log_directory, GError **error); const GList *cut_analyzer_get_run_contexts (CutAnalyzer *analyzer); G_END_DECLS #endif /* __CUT_ANALYZER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-assertions-helper.c0000644000175000017500000017457611523751075022616 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #if defined(HAVE_STDINT_H) && !defined(HAVE_INTTYPES_H) # if !defined(G_GINTPTR_MODIFIER) # if GLIB_SIZEOF_VOID_P == 8 # define G_GINTPTR_MODIFIER "l" # define G_GINTPTR_FORMAT "li" # define G_GUINTPTR_FORMAT "lu" # else # define G_GINTPTR_MODIFIER "" # define G_GINTPTR_FORMAT "i" # define G_GUINTPTR_FORMAT "u" # endif # endif # define PRIdLEAST8 "d" # define PRIdLEAST16 "d" # define PRIdLEAST32 G_GINT32_FORMAT # define PRIdLEAST64 G_GINT64_FORMAT # define PRIdFAST8 "d" # define PRIdFAST16 G_GINTPTR_MODIFIER "d" # define PRIdFAST32 G_GINTPTR_MODIFIER "d" # define PRIdFAST64 G_GINT64_FORMAT # define PRIdMAX G_GINT64_FORMAT # define PRIdPTR G_GINTPTR_FORMAT # define PRIuLEAST8 "u" # define PRIuLEAST16 "u" # define PRIuLEAST32 G_GUINT32_FORMAT # define PRIuLEAST64 G_GUINT64_FORMAT # define PRIuFAST8 "u" # define PRIuFAST16 G_GINTPTR_MODIFIER "u" # define PRIuFAST32 G_GINTPTR_MODIFIER "u" # define PRIuFAST64 G_GUINT64_FORMAT # define PRIuMAX G_GUINT64_FORMAT # define PRIuPTR G_GUINTPTR_FORMAT #endif #include #include "cut-helper.h" #include void cut_assert_helper (cut_boolean result, const char *expression) { if (result) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s> is neither FALSE nor NULL", expression)); } } void cut_assert_true_helper (cut_boolean result, const char *expression) { if (result) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s> is TRUE value", expression)); } } void cut_assert_false_helper (cut_boolean result, const char *expression) { if (result) { cut_test_fail(cut_take_printf("expected: <%s> is FALSE/NULL", expression)); } else { cut_test_pass(); } } void cut_assert_equal_boolean_helper (cut_boolean expected, cut_boolean actual, const char *expression_expected, const char *expression_actual) { if ((expected && actual) || (!expected && !actual)) { cut_test_pass(); } else { cut_set_expected(expected ? "true" : "false"); cut_set_actual(actual ? "true" : "false"); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_boolean_helper (cut_boolean expected, cut_boolean actual, const char *expression_expected, const char *expression_actual) { if ((expected && actual) || (!expected && !actual)) { cut_set_expected(expected ? "true" : "false"); cut_set_actual(actual ? "true" : "false"); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } else { cut_test_pass(); } } void cut_assert_null_helper (const void *object, const char *expression) { if (object == NULL) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s> is NULL", expression)); } } void cut_assert_null_string_helper (const char *string, const char *expression) { if (string == NULL) { cut_test_pass(); } else { cut_set_expected(""); cut_set_actual(string); cut_test_fail(cut_take_printf("<%s> is NULL", expression)); } } void cut_assert_not_null_helper (const void *object, const char *expression) { if (object != NULL) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s> is not NULL", expression)); } } void cut_assert_equal_int_helper (long expected, long actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%ld", expected)); cut_set_actual(cut_take_printf("%ld", actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_helper (long expected, long actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%ld", expected)); cut_set_actual(cut_take_printf("%ld", actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } #ifdef CUT_SUPPORT_C99_STDINT_TYPES void cut_assert_equal_int_least8_helper (int_least8_t expected, int_least8_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdLEAST8, expected)); cut_set_actual(cut_take_printf("%" PRIdLEAST8, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_least8_helper (int_least8_t expected, int_least8_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdLEAST8, expected)); cut_set_actual(cut_take_printf("%" PRIdLEAST8, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_int_least16_helper (int_least16_t expected, int_least16_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdLEAST16, expected)); cut_set_actual(cut_take_printf("%" PRIdLEAST16, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_least16_helper (int_least16_t expected, int_least16_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdLEAST16, expected)); cut_set_actual(cut_take_printf("%" PRIdLEAST16, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_int_least32_helper (int_least32_t expected, int_least32_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdLEAST32, expected)); cut_set_actual(cut_take_printf("%" PRIdLEAST32, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_least32_helper (int_least32_t expected, int_least32_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdLEAST32, expected)); cut_set_actual(cut_take_printf("%" PRIdLEAST32, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_int_least64_helper (int_least64_t expected, int_least64_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdLEAST64, expected)); cut_set_actual(cut_take_printf("%" PRIdLEAST64, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_least64_helper (int_least64_t expected, int_least64_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdLEAST64, expected)); cut_set_actual(cut_take_printf("%" PRIdLEAST64, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_int_fast8_helper (int_fast8_t expected, int_fast8_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdFAST8, expected)); cut_set_actual(cut_take_printf("%" PRIdFAST8, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_fast8_helper (int_fast8_t expected, int_fast8_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdFAST8, expected)); cut_set_actual(cut_take_printf("%" PRIdFAST8, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_int_fast16_helper (int_fast16_t expected, int_fast16_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdFAST16, expected)); cut_set_actual(cut_take_printf("%" PRIdFAST16, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_fast16_helper (int_fast16_t expected, int_fast16_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdFAST16, expected)); cut_set_actual(cut_take_printf("%" PRIdFAST16, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_int_fast32_helper (int_fast32_t expected, int_fast32_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdFAST32, expected)); cut_set_actual(cut_take_printf("%" PRIdFAST32, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_fast32_helper (int_fast32_t expected, int_fast32_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdFAST32, expected)); cut_set_actual(cut_take_printf("%" PRIdFAST32, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_int_fast64_helper (int_fast64_t expected, int_fast64_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdFAST64, expected)); cut_set_actual(cut_take_printf("%" PRIdFAST64, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_int_fast64_helper (int_fast64_t expected, int_fast64_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdFAST64, expected)); cut_set_actual(cut_take_printf("%" PRIdFAST64, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_intptr_helper (intptr_t expected, intptr_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdPTR, expected)); cut_set_actual(cut_take_printf("%" PRIdPTR, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_intptr_helper (intptr_t expected, intptr_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdPTR, expected)); cut_set_actual(cut_take_printf("%" PRIdPTR, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_intmax_helper (intmax_t expected, intmax_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdMAX, expected)); cut_set_actual(cut_take_printf("%" PRIdMAX, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_intmax_helper (intmax_t expected, intmax_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIdMAX, expected)); cut_set_actual(cut_take_printf("%" PRIdMAX, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } #endif void cut_assert_equal_uint_helper (unsigned long expected, unsigned long actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%lu", expected)); cut_set_actual(cut_take_printf("%lu", actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_helper (unsigned long expected, unsigned long actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%lu", expected)); cut_set_actual(cut_take_printf("%lu", actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } #ifdef CUT_SUPPORT_C99_STDINT_TYPES void cut_assert_equal_uint_least8_helper (uint_least8_t expected, uint_least8_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuLEAST8, expected)); cut_set_actual(cut_take_printf("%" PRIuLEAST8, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_least8_helper (uint_least8_t expected, uint_least8_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuLEAST8, expected)); cut_set_actual(cut_take_printf("%" PRIuLEAST8, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uint_least16_helper (uint_least16_t expected, uint_least16_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuLEAST16, expected)); cut_set_actual(cut_take_printf("%" PRIuLEAST16, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_least16_helper (uint_least16_t expected, uint_least16_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuLEAST16, expected)); cut_set_actual(cut_take_printf("%" PRIuLEAST16, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uint_least32_helper (uint_least32_t expected, uint_least32_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuLEAST32, expected)); cut_set_actual(cut_take_printf("%" PRIuLEAST32, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_least32_helper (uint_least32_t expected, uint_least32_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuLEAST32, expected)); cut_set_actual(cut_take_printf("%" PRIuLEAST32, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uint_least64_helper (uint_least64_t expected, uint_least64_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuLEAST64, expected)); cut_set_actual(cut_take_printf("%" PRIuLEAST64, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_least64_helper (uint_least64_t expected, uint_least64_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuLEAST64, expected)); cut_set_actual(cut_take_printf("%" PRIuLEAST64, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uint_fast8_helper (uint_fast8_t expected, uint_fast8_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuFAST8, expected)); cut_set_actual(cut_take_printf("%" PRIuFAST8, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_fast8_helper (uint_fast8_t expected, uint_fast8_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuFAST8, expected)); cut_set_actual(cut_take_printf("%" PRIuFAST8, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uint_fast16_helper (uint_fast16_t expected, uint_fast16_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuFAST16, expected)); cut_set_actual(cut_take_printf("%" PRIuFAST16, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_fast16_helper (uint_fast16_t expected, uint_fast16_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuFAST16, expected)); cut_set_actual(cut_take_printf("%" PRIuFAST16, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uint_fast32_helper (uint_fast32_t expected, uint_fast32_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuFAST32, expected)); cut_set_actual(cut_take_printf("%" PRIuFAST32, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_fast32_helper (uint_fast32_t expected, uint_fast32_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuFAST32, expected)); cut_set_actual(cut_take_printf("%" PRIuFAST32, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uint_fast64_helper (uint_fast64_t expected, uint_fast64_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuFAST64, expected)); cut_set_actual(cut_take_printf("%" PRIuFAST64, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uint_fast64_helper (uint_fast64_t expected, uint_fast64_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuFAST64, expected)); cut_set_actual(cut_take_printf("%" PRIuFAST64, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uintptr_helper (uintptr_t expected, uintptr_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuPTR, expected)); cut_set_actual(cut_take_printf("%" PRIuPTR, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uintptr_helper (uintptr_t expected, uintptr_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuPTR, expected)); cut_set_actual(cut_take_printf("%" PRIuPTR, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_uintmax_helper (uintmax_t expected, uintmax_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuMAX, expected)); cut_set_actual(cut_take_printf("%" PRIuMAX, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_uintmax_helper (uintmax_t expected, uintmax_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" PRIuMAX, expected)); cut_set_actual(cut_take_printf("%" PRIuMAX, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } #endif void cut_assert_equal_size_helper (size_t expected, size_t actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" G_GSIZE_FORMAT, expected)); cut_set_actual(cut_take_printf("%" G_GSIZE_FORMAT, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_size_helper (size_t expected, size_t actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" G_GSIZE_FORMAT, expected)); cut_set_actual(cut_take_printf("%" G_GSIZE_FORMAT, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_double_helper (double expected, double error, double actual, const char *expression_expected, const char *expression_error, const char *expression_actual) { if (cut_utils_equal_double(expected, actual, error)) { cut_test_pass(); } else { double min, max; const gchar *relation; if (error > 0) { min = expected - error; max = expected + error; } else { min = expected + error; max = expected - error; } if (actual < min) relation = "actual < min < max"; else relation = "min < max < actual"; cut_test_fail(cut_take_printf("<%s-%s <= %s <= %s+%s>\n" "expected: <%g>\n" " error: <%g>\n" " min: <%g>\n" " max: <%g>\n" " actual: <%g>\n" "relation: <%s>", expression_expected, expression_error, expression_actual, expression_expected, expression_error, expected, error, min, max, actual, relation)); } } void cut_assert_not_equal_double_helper (double expected, double error, double actual, const char *expression_expected, const char *expression_error, const char *expression_actual) { if (!cut_utils_equal_double(expected, actual, error)) { cut_test_pass(); } else { double min, max; if (error > 0) { min = expected - error; max = expected + error; } else { min = expected + error; max = expected - error; } cut_test_fail(cut_take_printf("<(%s < %s-%s) && (%s+%s < %s)>\n" "expected: <%g>\n" " error: <%g>\n" " min: <%g>\n" " max: <%g>\n" " actual: <%g>\n" "relation: ", expression_actual, expression_expected, expression_error, expression_expected, expression_error, expression_actual, expected, error, min, max, actual)); } } static const gchar * taken_inspect_char (char value) { const gchar *inspected; GString *inspected_buffer; inspected_buffer = g_string_new(NULL); gcut_inspect_char(inspected_buffer, &value, NULL); inspected = cut_take_strdup(inspected_buffer->str); g_string_free(inspected_buffer, TRUE); return inspected; } void cut_assert_equal_char_helper (char expected, char actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(taken_inspect_char(expected)); cut_set_actual(taken_inspect_char(actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void cut_assert_not_equal_char_helper (const char expected, const char actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(taken_inspect_char(expected)); cut_set_actual(taken_inspect_char(actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void cut_assert_equal_string_helper (const char *expected, const char *actual, const char *expression_expected, const char *expression_actual) { if (expected == NULL) { if (actual == NULL) { cut_test_pass(); } else { cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(actual)); cut_test_fail(cut_take_printf("<%s == NULL>", expression_actual)); } } else { if (cut_utils_equal_string(expected, actual)) { cut_test_pass(); } else { cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } } void cut_assert_not_equal_string_helper (const char *expected, const char *actual, const char *expression_expected, const char *expression_actual) { if (expected == NULL) { if (actual) { cut_test_pass(); } else { cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(actual)); cut_test_fail(cut_take_printf("<%s != NULL>", expression_actual)); } } else { if (!cut_utils_equal_string(expected, actual)) { cut_test_pass(); } else { cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } } void cut_assert_equal_substring_helper (const char *expected, const char *actual, size_t length, const char *expression_expected, const char *expression_actual, const char *expression_length) { if (expected == NULL) { if (actual == NULL) { cut_test_pass(); } else { const gchar *actual_substring; actual_substring = cut_take_string(g_strndup(actual, length)); cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(actual_substring)); cut_test_fail(cut_take_printf("<%s == NULL>", expression_actual)); } } else { if (cut_utils_equal_substring(expected, actual, length)) { cut_test_pass(); } else { const gchar *actual_substring = NULL; actual_substring = cut_take_string(g_strndup(actual, length)); cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(actual_substring)); cut_test_fail(cut_take_printf("<%s == (%s)[0..%s]>", expression_expected, expression_actual, expression_length)); } } } void cut_assert_not_equal_substring_helper (const char *expected, const char *actual, size_t length, const char *expression_expected, const char *expression_actual, const char *expression_length) { if (expected == NULL) { if (actual) { cut_test_pass(); } else { const gchar *actual_substring; actual_substring = cut_take_string(g_strndup(actual, length)); cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(actual_substring)); cut_test_fail(cut_take_printf("<%s != NULL>", expression_actual)); } } else { if (!cut_utils_equal_substring(expected, actual, length)) { cut_test_pass(); } else { const gchar *actual_substring; actual_substring = cut_take_string(g_strndup(actual, length)); cut_set_expected(cut_take_inspect_string(expected)); cut_set_actual(cut_take_inspect_string(actual_substring)); cut_test_fail(cut_take_printf("<%s != (%s)[0..%s]>", expression_expected, expression_actual, expression_length)); } } } void cut_assert_equal_memory_helper (const void *expected, size_t expected_size, const void *actual, size_t actual_size, const char *expression_expected, const char *expression_expected_size, const char *expression_actual, const char *expression_actual_size) { if (expected_size == actual_size && memcmp(expected, actual, expected_size) == 0) { cut_test_pass(); } else { const char *message; const char *inspected_expected; const char *inspected_actual; inspected_expected = cut_take_string(cut_utils_inspect_memory(expected, expected_size)); inspected_actual = cut_take_string(cut_utils_inspect_memory(actual, actual_size)); message = cut_take_printf( "<%s(size: %s) == %s(size: %s)>", expression_expected, expression_expected_size, expression_actual, expression_actual_size); cut_set_expected(cut_take_printf("%s (size: %" G_GSIZE_FORMAT ")", inspected_expected, expected_size)); cut_set_actual(cut_take_printf("%s (size: %" G_GSIZE_FORMAT ")", inspected_actual, actual_size)); cut_test_fail(message); } } void cut_assert_not_equal_memory_helper (const void *expected, size_t expected_size, const void *actual, size_t actual_size, const char *expression_expected, const char *expression_expected_size, const char *expression_actual, const char *expression_actual_size) { if ((expected_size != actual_size) || memcmp(expected, actual, expected_size) != 0) { cut_test_pass(); } else { const char *message; const char *inspected_expected; const char *inspected_actual; inspected_expected = cut_take_string(cut_utils_inspect_memory(expected, expected_size)); inspected_actual = cut_take_string(cut_utils_inspect_memory(actual, actual_size)); message = cut_take_printf( "<%s(size: %s) != %s(size: %s)>", expression_expected, expression_expected_size, expression_actual, expression_actual_size); cut_set_expected(cut_take_printf("%s (size: %" G_GSIZE_FORMAT ")", inspected_expected, expected_size)); cut_set_actual(cut_take_printf("%s (size: %" G_GSIZE_FORMAT ")", inspected_actual, actual_size)); cut_test_fail(message); } } void cut_assert_equal_string_array_helper (char **expected, char **actual, const char *expression_expected, const char *expression_actual) { if (expected && actual && cut_utils_equal_string_array(expected, actual)) { cut_test_pass(); } else { const gchar *inspected_expected; const gchar *inspected_actual; const gchar *message; inspected_expected = cut_inspect_string_array(expected); inspected_actual = cut_inspect_string_array(actual); message = cut_take_printf("<%s == %s>", expression_expected, expression_actual); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(message); } } void cut_assert_operator_helper (cut_boolean result, const char *expression_lhs, const char *expression_operator, const char *expression_rhs) { if (result) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s %s %s> is TRUE", expression_lhs, expression_operator, expression_rhs)); } } void cut_assert_operator_int_helper (cut_boolean result, long lhs, long rhs, const char *expression_lhs, const char *expression_operator, const char *expression_rhs) { if (result) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s> %s <%s>\n" " actual: <%ld> %s <%ld>", expression_lhs, expression_operator, expression_rhs, lhs, expression_operator, rhs)); } } void cut_assert_operator_uint_helper (cut_boolean result, unsigned long lhs, unsigned long rhs, const char *expression_lhs, const char *expression_operator, const char *expression_rhs) { if (result) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s> %s <%s>\n" " actual: <%lu> %s <%lu>", expression_lhs, expression_operator, expression_rhs, lhs, expression_operator, rhs)); } } void cut_assert_operator_size_helper (cut_boolean result, size_t lhs, size_t rhs, const char *expression_lhs, const char *expression_operator, const char *expression_rhs) { if (result) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s> %s <%s>\n" " actual: " "<%" G_GSIZE_FORMAT ">" " %s " "<%" G_GSIZE_FORMAT ">", expression_lhs, expression_operator, expression_rhs, lhs, expression_operator, rhs)); } } void cut_assert_operator_double_helper (cut_boolean result, double lhs, double rhs, const char *expression_lhs, const char *expression_operator, const char *expression_rhs) { if (result) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s> %s <%s>\n" " actual: <%g> %s <%g>", expression_lhs, expression_operator, expression_rhs, lhs, expression_operator, rhs)); } } void cut_assert_equal_helper (cut_boolean result, const char *expression_function, const char *expression_expected, const char *expression_actual) { if (result) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <%s(%s, %s)> is TRUE", expression_function, expression_expected, expression_actual)); } } void cut_assert_errno_helper (void) { int current_errno = errno; if (current_errno == 0) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("expected: <0> (errno)\n" " actual: <%d> (%s)", current_errno, g_strerror(current_errno))); } } void cut_assert_exist_path_helper (const char *path, const char *expression_path) { if (!path) { cut_test_fail(cut_take_printf("<%s>\n" "expected: <%s> " "should not be NULL", expression_path, path)); } else if (cut_utils_path_exist(path)) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("<%s>\n" "expected: <%s> exists", expression_path, path)); } } void cut_assert_not_exist_path_helper (const char *path, const char *expression_path) { if (!path) { cut_test_fail(cut_take_printf("<%s>\n" "expected: <%s> " "should not be NULL", expression_path, path)); } else if (!cut_utils_path_exist(path)) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("<%s>\n" "expected: <%s> " "doesn't exist", expression_path, path)); } } void cut_assert_match_helper (const char *pattern, const char *actual, const char *expression_pattern, const char *expression_actual) { if (cut_utils_regex_match(pattern, actual)) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("<%s> =~ <%s>\n" " pattern: <%s>\n" " actual: <%s>", expression_pattern, expression_actual, pattern, actual)); } } void cut_assert_equal_pointer_helper (const void *expected, const void *actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("<%s == %s>\n" "expected: <%p>\n" " actual: <%p>", expression_expected, expression_actual, expected, actual)); } } void cut_assert_equal_fixture_data_string_helper (const char *expected, const char *expression_expected, const char *path, ...) { GError *error = NULL; const gchar *data; const gchar *full_path; va_list args; va_start(args, path); data = cut_utils_get_fixture_data_va_list( cut_get_current_test_context(), &full_path, NULL, path, args); cut_test_context_keep_user_message(cut_get_current_test_context()); gcut_assert_error_helper(error, expression_expected); cut_assert_equal_string_helper(expected, data, expression_expected, full_path); } void cut_assert_equal_file_raw_helper (const char *expected, const char *actual, const char *expression_expected, const char *expression_actual) { GError *error = NULL; gchar *expected_data = NULL; gchar *actual_data = NULL; gsize expected_size; gsize actual_size; g_file_get_contents(expected, &expected_data, &expected_size, &error); gcut_assert_error_helper(error, expression_expected); cut_take_string(expected_data); g_file_get_contents(actual, &actual_data, &actual_size, &error); gcut_assert_error_helper(error, expression_actual); cut_take_string(actual_data); if ((expected_size == actual_size) && memcmp(expected_data, actual_data, expected_size) == 0) { cut_test_pass(); } else { const char *message; const char *inspected_expected; const char *inspected_actual; inspected_expected = cut_take_string(cut_utils_inspect_memory(expected_data, expected_size)); inspected_actual = cut_take_string(cut_utils_inspect_memory(actual_data, actual_size)); message = cut_take_printf("", expression_expected, expression_actual); cut_set_expected(cut_take_printf("path: <%s>\n" "%s (size: %" G_GSIZE_FORMAT ")", expected, inspected_expected, expected_size)); cut_set_actual(cut_take_printf("path: <%s>\n" "%s (size: %" G_GSIZE_FORMAT ")", actual, inspected_actual, actual_size)); cut_test_fail(message); } } void cut_assert_not_equal_file_raw_helper (const char *expected, const char *actual, const char *expression_expected, const char *expression_actual) { GError *error = NULL; gchar *expected_data = NULL; gchar *actual_data = NULL; gsize expected_size; gsize actual_size; g_file_get_contents(expected, &expected_data, &expected_size, &error); gcut_assert_error_helper(error, expression_expected); cut_take_string(expected_data); g_file_get_contents(actual, &actual_data, &actual_size, &error); gcut_assert_error_helper(error, expression_actual); cut_take_string(actual_data); if ((expected_size != actual_size) || memcmp(expected_data, actual_data, expected_size) != 0) { cut_test_pass(); } else { const char *message; const char *inspected_expected; const char *inspected_actual; inspected_expected = cut_take_string(cut_utils_inspect_memory(expected_data, expected_size)); inspected_actual = cut_take_string(cut_utils_inspect_memory(actual_data, actual_size)); message = cut_take_printf("", expression_expected, expression_actual); cut_set_expected(cut_take_printf("path: <%s>\n" "%s (size: %" G_GSIZE_FORMAT ")", expected, inspected_expected, expected_size)); cut_set_actual(cut_take_printf("path: <%s>\n" "%s (size: %" G_GSIZE_FORMAT ")", actual, inspected_actual, actual_size)); cut_test_fail(message); } } #ifndef CUT_DISABLE_SOCKET_SUPPORT void cut_assert_equal_sockaddr_helper (const struct sockaddr *expected, const struct sockaddr *actual, const char *expression_expected, const char *expression_actual) { if (cut_equal_sockaddr(expected, actual)) { cut_test_pass(); } else { cut_set_expected(cut_inspect_sockaddr(expected)); cut_set_actual(cut_inspect_sockaddr(actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } #endif void cut_error_errno_helper (void) { int current_errno = errno; if (current_errno != 0) { cut_test_terminate(ERROR, cut_take_printf("<%d> (%s)", current_errno, g_strerror(current_errno))); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-factory-builder.c0000644000175000017500000001515611205747026022224 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "cut-factory-builder.h" #include "cut-report-factory-builder.h" #include "cut-ui-factory-builder.h" #define CUT_FACTORY_BUILDER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_FACTORY_BUILDER, CutFactoryBuilderPrivate)) typedef struct _CutFactoryBuilderPrivate CutFactoryBuilderPrivate; struct _CutFactoryBuilderPrivate { gchar *module_dir; GOptionContext *option_context; GList *factories; }; enum { PROP_0, PROP_MODULE_DIR, PROP_OPTION_CONTEXT }; G_DEFINE_ABSTRACT_TYPE(CutFactoryBuilder, cut_factory_builder, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_factory_builder_class_init (CutFactoryBuilderClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_string("module-dir", "The name of the directory", "The name of the directory in which includes target factory", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_MODULE_DIR, spec); spec = g_param_spec_pointer("option-context", "GOptionContext", "GOptionContext", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_OPTION_CONTEXT, spec); g_type_class_add_private(gobject_class, sizeof(CutFactoryBuilderPrivate)); } static void cut_factory_builder_init (CutFactoryBuilder *builder) { CutFactoryBuilderPrivate *priv = CUT_FACTORY_BUILDER_GET_PRIVATE(builder); priv->module_dir = NULL; priv->option_context = NULL; priv->factories = NULL; } static void dispose (GObject *object) { CutFactoryBuilderPrivate *priv = CUT_FACTORY_BUILDER_GET_PRIVATE(object); if (priv->module_dir) { g_free(priv->module_dir); priv->module_dir = NULL; } if (priv->factories) { g_list_free(priv->factories); priv->factories = NULL; } priv->option_context = NULL; G_OBJECT_CLASS(cut_factory_builder_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutFactoryBuilderPrivate *priv = CUT_FACTORY_BUILDER_GET_PRIVATE(object); switch (prop_id) { case PROP_MODULE_DIR: if (priv->module_dir) g_free(priv->module_dir); priv->module_dir = g_value_dup_string(value); break; case PROP_OPTION_CONTEXT: priv->option_context = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutFactoryBuilderPrivate *priv = CUT_FACTORY_BUILDER_GET_PRIVATE(object); switch (prop_id) { case PROP_MODULE_DIR: g_value_set_string(value, priv->module_dir); break; case PROP_OPTION_CONTEXT: g_value_set_pointer(value, priv->option_context); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } const gchar * cut_factory_builder_get_type_name (CutFactoryBuilder *builder) { CutFactoryBuilderClass *klass; g_return_val_if_fail(CUT_IS_FACTORY_BUILDER(builder), NULL); klass = CUT_FACTORY_BUILDER_GET_CLASS(builder); if (klass->get_type_name) return klass->get_type_name(builder); return NULL; } const gchar * cut_factory_builder_get_module_dir (CutFactoryBuilder *builder) { return CUT_FACTORY_BUILDER_GET_PRIVATE(builder)->module_dir; } void cut_factory_builder_set_option_context (CutFactoryBuilder *builder, GOptionContext *context) { CutFactoryBuilderClass *klass; CutFactoryBuilderPrivate *priv = CUT_FACTORY_BUILDER_GET_PRIVATE(builder); g_return_if_fail(CUT_IS_FACTORY_BUILDER(builder)); klass = CUT_FACTORY_BUILDER_GET_CLASS(builder); g_return_if_fail(klass->set_option_context); priv->option_context = context; klass->set_option_context(builder, context); } GList * cut_factory_builder_build (CutFactoryBuilder *builder) { CutFactoryBuilderClass *klass; CutFactoryBuilderPrivate *priv = CUT_FACTORY_BUILDER_GET_PRIVATE(builder); g_return_val_if_fail(CUT_IS_FACTORY_BUILDER(builder), NULL); klass = CUT_FACTORY_BUILDER_GET_CLASS(builder); g_return_val_if_fail(klass->build, NULL); priv->factories = klass->build(builder); return priv->factories; } GList * cut_factory_builder_build_all (CutFactoryBuilder *builder) { CutFactoryBuilderClass *klass; CutFactoryBuilderPrivate *priv = CUT_FACTORY_BUILDER_GET_PRIVATE(builder); g_return_val_if_fail(CUT_IS_FACTORY_BUILDER(builder), NULL); klass = CUT_FACTORY_BUILDER_GET_CLASS(builder); g_return_val_if_fail(klass->build_all, NULL); priv->factories = klass->build_all(builder); return priv->factories; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-diff-writer.c0000644000175000017500000001335711407320456021352 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-sequence-matcher.h" #include "cut-diff-writer.h" #include "cut-utils.h" G_DEFINE_TYPE(CutDiffWriter, cut_diff_writer, G_TYPE_OBJECT) static void dispose (GObject *object); static void cut_diff_writer_class_init (CutDiffWriterClass *klass) { GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; } static void cut_diff_writer_init (CutDiffWriter *writer) { } static void dispose (GObject *object) { G_OBJECT_CLASS(cut_diff_writer_parent_class)->dispose(object); } void cut_diff_writer_write (CutDiffWriter *writer, const gchar *string, CutDiffWriterTag tag) { CUT_DIFF_WRITER_GET_CLASS(writer)->write(writer, string, tag); } void cut_diff_writer_write_segment (CutDiffWriter *writer, const gchar *string, guint begin, guint end, CutDiffWriterTag tag) { GString *segment; const gchar *segment_begin, *segment_end; segment_begin = g_utf8_offset_to_pointer(string, begin); segment_end = g_utf8_offset_to_pointer(string, end); segment = g_string_new(NULL); g_string_append_len(segment, segment_begin, segment_end - segment_begin); cut_diff_writer_write(writer, segment->str, tag); g_string_free(segment, TRUE); } void cut_diff_writer_write_mark (CutDiffWriter *writer, const gchar *mark, const gchar *separator, CutDiffWriterTag tag) { cut_diff_writer_write(writer, mark, tag); if (separator && separator[0]) cut_diff_writer_write(writer, separator, CUT_DIFF_WRITER_TAG_NONE); } void cut_diff_writer_write_line (CutDiffWriter *writer, const gchar *line, CutDiffWriterTag tag) { CUT_DIFF_WRITER_GET_CLASS(writer)->write_line(writer, line, tag); } void cut_diff_writer_write_lines (CutDiffWriter *writer, gchar **lines, guint begin, guint end, CutDiffWriterTag tag) { guint i; for (i = begin; i < end; i++) { cut_diff_writer_write_line(writer, lines[i], tag); } } void cut_diff_writer_mark_line (CutDiffWriter *writer, const gchar *mark, const gchar *separator, const gchar *line, CutDiffWriterTag tag) { cut_diff_writer_write_mark(writer, mark, separator, tag); cut_diff_writer_write_line(writer, line, tag); } void cut_diff_writer_mark_lines (CutDiffWriter *writer, const gchar *mark, const gchar *separator, gchar **lines, guint begin, guint end, CutDiffWriterTag tag) { guint i; for (i = begin; i < end; i++) { cut_diff_writer_mark_line(writer, mark, separator, lines[i], tag); } } void cut_diff_writer_write_character_n_times (CutDiffWriter *writer, gchar character, guint n, CutDiffWriterTag tag) { GString *string; guint i; string = g_string_new(NULL); for (i = 0; i < n; i++) { g_string_append_c(string, character); } cut_diff_writer_write(writer, string->str, tag); g_string_free(string, TRUE); } void cut_diff_writer_write_spaces (CutDiffWriter *writer, const gchar *string, guint begin, guint end, CutDiffWriterTag tag) { GString *buffer; const gchar *last; buffer = g_string_new(NULL); last = g_utf8_offset_to_pointer(string, end); for (string = g_utf8_offset_to_pointer(string, begin); string < last; string = g_utf8_next_char(string)) { if (g_unichar_iswide_cjk(g_utf8_get_char(string))) { g_string_append(buffer, " "); } else if (string[0] == '\t') { g_string_append_c(buffer, '\t'); } else { g_string_append_c(buffer, ' '); } } cut_diff_writer_write(writer, buffer->str, tag); g_string_free(buffer, TRUE); } void cut_diff_writer_finish (CutDiffWriter *writer) { CUT_DIFF_WRITER_GET_CLASS(writer)->finish(writer); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-ui.c0000644000175000017500000000465711205747026017552 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-ui.h" #include "cut-module.h" #include "cut-listener-utils.h" CUT_DEFINE_LISTENER_MODULE(ui, UI) void cut_ui_init (void) { } static void cut_ui_set_default_module_dir (const gchar *dir) { if (ui_module_dir) g_free(ui_module_dir); ui_module_dir = NULL; if (dir) ui_module_dir = g_strdup(dir); } static void cut_ui_unload (void) { g_list_foreach(uis, (GFunc)cut_module_unload, NULL); g_list_free(uis); uis = NULL; } void cut_ui_quit (void) { cut_ui_unload(); cut_ui_set_default_module_dir(NULL); } GObject * cut_ui_new (const gchar *name, const gchar *first_property, ...) { CutModule *module; GObject *ui; va_list var_args; module = cut_ui_load_module(name); g_return_val_if_fail(module != NULL, NULL); va_start(var_args, first_property); ui = cut_module_instantiate(module, first_property, var_args); va_end(var_args); return ui; } GType cut_ui_get_type (void) { static GType ui_type = 0; if (!ui_type) { const GTypeInfo ui_info = { sizeof(CutUIClass), /* class_size */ NULL, /* base_init */ NULL, /* base_finalize */ }; ui_type = g_type_register_static(G_TYPE_INTERFACE, "CutUI", &ui_info, 0); } return ui_type; } gboolean cut_ui_run (CutUI *ui, CutRunContext *run_context) { if (CUT_UI_GET_CLASS(ui)->run) return CUT_UI_GET_CLASS(ui)->run(ui, run_context); return FALSE; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-stream.c0000644000175000017500000000327011205747026020416 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 g新部 Hiroyuki Ikezoe * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cut-stream.h" #include "cut-module.h" #include "cut-listener-utils.h" G_DEFINE_ABSTRACT_TYPE (CutStream, cut_stream, G_TYPE_OBJECT) CUT_DEFINE_LISTENER_MODULE(stream, STREAM) static void cut_stream_class_init (CutStreamClass *klass) { } static void cut_stream_init (CutStream *stream) { } CutStream * cut_stream_new (const gchar *name, const gchar *first_property, ...) { CutModule *module; GObject *stream; va_list var_args; module = cut_stream_load_module(name); g_return_val_if_fail(module != NULL, NULL); va_start(var_args, first_property); stream = cut_module_instantiate(module, first_property, var_args); va_end(var_args); return CUT_STREAM(stream); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-test-suite.c0000644000175000017500000003664311205747026021243 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include "cut-test-suite.h" #include "cut-test.h" #include "cut-test-case.h" #include "cut-run-context.h" #include "cut-main.h" #include "cut-utils.h" #include "cut-test-result.h" #include "cut-backtrace-entry.h" #include "cut-crash-backtrace.h" #include "../gcutter/gcut-marshalers.h" #include "../gcutter/gcut-error.h" #define CUT_TEST_SUITE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CUT_TYPE_TEST_SUITE, CutTestSuitePrivate)) typedef struct _CutTestSuitePrivate CutTestSuitePrivate; struct _CutTestSuitePrivate { CutWarmupFunction warmup; CutCooldownFunction cooldown; }; enum { PROP_0, PROP_WARMUP_FUNCTION, PROP_COOLDOWN_FUNCTION }; enum { READY, START_TEST_CASE, COMPLETE_TEST_CASE, LAST_SIGNAL }; static gint cut_test_suite_signals[LAST_SIGNAL] = {0}; G_DEFINE_TYPE (CutTestSuite, cut_test_suite, CUT_TYPE_TEST_CONTAINER) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void cut_test_suite_class_init (CutTestSuiteClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_pointer("warmup-function", "Warmup Function", "The function for warmup", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_WARMUP_FUNCTION, spec); spec = g_param_spec_pointer("cooldown-function", "Cooldown Function", "The function for cooldown", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_COOLDOWN_FUNCTION, spec); cut_test_suite_signals[READY] = g_signal_new("ready", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestSuiteClass, ready), NULL, NULL, _gcut_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); cut_test_suite_signals[START_TEST_CASE] = g_signal_new("start-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestSuiteClass, start_test_case), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CUT_TYPE_TEST_CASE); cut_test_suite_signals[COMPLETE_TEST_CASE] = g_signal_new("complete-test-case", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutTestSuiteClass, complete_test_case), NULL, NULL, _gcut_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2, CUT_TYPE_TEST_CASE, G_TYPE_BOOLEAN); g_type_class_add_private(gobject_class, sizeof(CutTestSuitePrivate)); } static void cut_test_suite_init (CutTestSuite *test_suite) { CutTestSuitePrivate *priv = CUT_TEST_SUITE_GET_PRIVATE(test_suite); priv->warmup = NULL; priv->cooldown = NULL; } static void dispose (GObject *object) { G_OBJECT_CLASS(cut_test_suite_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutTestSuitePrivate *priv = CUT_TEST_SUITE_GET_PRIVATE(object); switch (prop_id) { case PROP_WARMUP_FUNCTION: priv->warmup = g_value_get_pointer(value); break; case PROP_COOLDOWN_FUNCTION: priv->cooldown = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutTestSuitePrivate *priv = CUT_TEST_SUITE_GET_PRIVATE(object); switch (prop_id) { case PROP_WARMUP_FUNCTION: g_value_set_pointer(value, priv->warmup); break; case PROP_COOLDOWN_FUNCTION: g_value_set_pointer(value, priv->cooldown); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutTestSuite * cut_test_suite_new (const gchar *name, CutWarmupFunction warmup, CutCooldownFunction cooldown) { return g_object_new(CUT_TYPE_TEST_SUITE, "element-name", "test-suite", "name", name, "warmup-function", warmup, "cooldown-function", cooldown, NULL); } CutTestSuite * cut_test_suite_new_empty (void) { return cut_test_suite_new(NULL, NULL, NULL); } typedef struct _RunTestInfo { CutTestSuite *test_suite; CutTestCase *test_case; CutRunContext *run_context; gchar **test_names; } RunTestInfo; static void run (gpointer data, gpointer user_data) { RunTestInfo *info = data; CutTestSuite *test_suite; CutTestCase *test_case; CutRunContext *run_context; gchar **test_names; gboolean *success = user_data; test_suite = info->test_suite; test_case = info->test_case; run_context = info->run_context; test_names = info->test_names; g_signal_emit_by_name(test_suite, "start-test-case", test_case); if (!cut_test_case_run_with_filter(test_case, run_context, (const gchar**)test_names)) *success = FALSE; g_signal_emit_by_name(test_suite, "complete-test-case", test_case, *success); g_object_unref(test_suite); g_object_unref(test_case); g_object_unref(run_context); g_strfreev(test_names); g_free(info); } static void run_with_thread_support (CutTestSuite *test_suite, CutTestCase *test_case, CutRunContext *run_context, const gchar **test_names, GThreadPool *thread_pool, gboolean *success) { RunTestInfo *info; gboolean need_no_thread_run = TRUE; if (cut_run_context_is_canceled(run_context)) return; info = g_new0(RunTestInfo, 1); info->test_suite = g_object_ref(test_suite); info->test_case = g_object_ref(test_case); info->run_context = g_object_ref(run_context); info->test_names = g_strdupv((gchar **)test_names); if (thread_pool) { GError *error = NULL; g_thread_pool_push(thread_pool, info, &error); if (error) { gchar *inspected; inspected = gcut_error_inspect(error); g_warning("%s", inspected); g_free(inspected); g_error_free(error); } else { need_no_thread_run = FALSE; } } if (need_no_thread_run) run(info, success); } static void emit_ready_signal (CutTestSuite *test_suite, GList *test_cases, CutRunContext *run_context) { GList *node; guint n_test_cases, n_tests; n_test_cases = 0; n_tests = 0; for (node = test_cases; node; node = g_list_next(node)) { CutTestCase *test_case = node->data; n_test_cases++; n_tests += cut_test_container_get_n_tests(CUT_TEST_CONTAINER(test_case), run_context); } g_signal_emit_by_name(test_suite, "ready", n_test_cases, n_tests); } static gboolean cut_test_suite_run_test_cases (CutTestSuite *test_suite, CutRunContext *run_context, GList *test_cases, const gchar **test_names) { CutTestSuitePrivate *priv; GList *node; GThreadPool *thread_pool = NULL; GList *sorted_test_cases; gboolean try_thread; gboolean all_success = TRUE; gint signum; jmp_buf jump_buffer; CutCrashBacktrace *crash_backtrace = NULL; priv = CUT_TEST_SUITE_GET_PRIVATE(test_suite); sorted_test_cases = g_list_copy(test_cases); sorted_test_cases = cut_run_context_sort_test_cases(run_context, sorted_test_cases); try_thread = cut_run_context_get_multi_thread(run_context); if (try_thread) { GError *error = NULL; gint max_threads; max_threads = cut_run_context_get_max_threads(run_context); thread_pool = g_thread_pool_new(run, &all_success, max_threads, FALSE, &error); if (error) { cut_utils_report_error(error); } } if (cut_run_context_get_handle_signals(run_context)) { crash_backtrace = cut_crash_backtrace_new(&jump_buffer); signum = setjmp(jump_buffer); } else { signum = 0; } switch (signum) { case 0: emit_ready_signal(test_suite, sorted_test_cases, run_context); g_signal_emit_by_name(test_suite, "start", NULL); if (priv->warmup) priv->warmup(); for (node = sorted_test_cases; node; node = g_list_next(node)) { CutTestCase *test_case = node->data; if (!test_case) continue; if (CUT_IS_TEST_CASE(test_case)) { run_with_thread_support(test_suite, test_case, run_context, test_names, thread_pool, &all_success); } else { g_warning("This object is not test case!"); } } if (thread_pool) g_thread_pool_free(thread_pool, FALSE, TRUE); if (all_success) { CutTestResult *result; result = cut_test_result_new(CUT_TEST_RESULT_SUCCESS, NULL, NULL, NULL, test_suite, NULL, NULL, NULL, NULL); cut_test_emit_result_signal(CUT_TEST(test_suite), NULL, result); g_object_unref(result); } if (crash_backtrace) cut_crash_backtrace_free(crash_backtrace); break; #ifndef G_OS_WIN32 case SIGSEGV: case SIGABRT: case SIGTERM: all_success = FALSE; cut_crash_backtrace_emit(test_suite, NULL, NULL, NULL, NULL, NULL); break; case SIGINT: cut_run_context_cancel(run_context); break; #endif default: break; } if (priv->cooldown) priv->cooldown(); g_signal_emit_by_name(CUT_TEST(test_suite), "complete", NULL, all_success); g_list_free(sorted_test_cases); return all_success; } gboolean cut_test_suite_run (CutTestSuite *suite, CutRunContext *run_context) { const gchar **test_case_names; const gchar **test_names; test_case_names = cut_run_context_get_target_test_case_names(run_context); test_names = cut_run_context_get_target_test_names(run_context); return cut_test_suite_run_with_filter(suite, run_context, test_case_names, test_names); } gboolean cut_test_suite_run_test_case (CutTestSuite *suite, CutRunContext *run_context, gchar *test_case_name) { gchar *test_case_names[] = {NULL, NULL}; g_return_val_if_fail(CUT_IS_TEST_SUITE(suite), FALSE); test_case_names[0] = test_case_name; return cut_test_suite_run_with_filter(suite, run_context, (const gchar **)test_case_names, NULL); } gboolean cut_test_suite_run_test (CutTestSuite *suite, CutRunContext *run_context, gchar *test_name) { GList *test_cases; const gchar *test_names[] = {NULL, NULL}; g_return_val_if_fail(CUT_IS_TEST_SUITE(suite), FALSE); test_names[0] = test_name; test_cases = cut_test_container_get_children(CUT_TEST_CONTAINER(suite)); return cut_test_suite_run_test_cases(suite, run_context, test_cases, test_names); } gboolean cut_test_suite_run_test_in_test_case (CutTestSuite *suite, CutRunContext *run_context, gchar *test_name, gchar *test_case_name) { gchar *test_names[] = {NULL, NULL}; gchar *test_case_names[] = {NULL, NULL}; g_return_val_if_fail(CUT_IS_TEST_SUITE(suite), FALSE); test_names[0] = test_name; test_case_names[0] = test_case_name; return cut_test_suite_run_with_filter(suite, run_context, (const gchar **)test_case_names, (const gchar **)test_names); } gboolean cut_test_suite_run_with_filter (CutTestSuite *test_suite, CutRunContext *run_context, const gchar **test_case_names, const gchar **test_names) { CutTestContainer *container; GList *filtered_test_cases = NULL; gboolean success = TRUE; container = CUT_TEST_CONTAINER(test_suite); if (test_case_names && *test_case_names) { filtered_test_cases = cut_test_container_filter_children(container, test_case_names); } else { CutTestContainer *container; container = CUT_TEST_CONTAINER(test_suite); filtered_test_cases = g_list_copy(cut_test_container_get_children(container)); } if (!filtered_test_cases) return success; success = cut_test_suite_run_test_cases(test_suite, run_context, filtered_test_cases, test_names); g_list_free(filtered_test_cases); return success; } void cut_test_suite_add_test_case (CutTestSuite *suite, CutTestCase *test_case) { g_return_if_fail(CUT_IS_TEST_CASE(test_case)); g_return_if_fail(CUT_IS_TEST_SUITE(suite)); cut_test_container_add_test(CUT_TEST_CONTAINER(suite), CUT_TEST(test_case)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-iterated-test.h0000644000175000017500000000511311205747026021704 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_ITERATED_TEST_H__ #define __CUT_ITERATED_TEST_H__ #include #include #include G_BEGIN_DECLS #define CUT_TYPE_ITERATED_TEST (cut_iterated_test_get_type ()) #define CUT_ITERATED_TEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_ITERATED_TEST, CutIteratedTest)) #define CUT_ITERATED_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_ITERATED_TEST, CutIteratedTestClass)) #define CUT_IS_ITERATED_TEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_ITERATED_TEST)) #define CUT_IS_ITERATED_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_ITERATED_TEST)) #define CUT_ITERATED_TEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_ITERATED_TEST, CutIteratedTestClass)) typedef void (*CutIteratedTestFunction) (gconstpointer data); typedef struct _CutIteratedTestClass CutIteratedTestClass; struct _CutIteratedTest { CutTest object; }; struct _CutIteratedTestClass { CutTestClass parent_class; }; GType cut_iterated_test_get_type (void) G_GNUC_CONST; CutIteratedTest *cut_iterated_test_new (const gchar *name, CutIteratedTestFunction function, CutTestData *data); CutIteratedTest *cut_iterated_test_new_empty (void); CutTestData *cut_iterated_test_get_data (CutIteratedTest *test); void cut_iterated_test_set_data (CutIteratedTest *test, CutTestData *data); void cut_iterated_test_clear_data (CutIteratedTest *test); G_END_DECLS #endif /* __CUT_ITERATED_TEST_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-mach-o-loader.h0000644000175000017500000000434711205747026021546 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_MACH_O_LOADER_H__ #define __CUT_MACH_O_LOADER_H__ #include G_BEGIN_DECLS #define CUT_TYPE_MACH_O_LOADER (cut_mach_o_loader_get_type ()) #define CUT_MACH_O_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_MACH_O_LOADER, CutMachOLoader)) #define CUT_MACH_O_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_MACH_O_LOADER, CutMachOLoaderClass)) #define CUT_IS_MACH_O_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_MACH_O_LOADER)) #define CUT_IS_MACH_O_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_MACH_O_LOADER)) #define CUT_MACH_O_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_MACH_O_LOADER, CutMachOLoaderClass)) typedef struct _CutMachOLoader CutMachOLoader; typedef struct _CutMachOLoaderClass CutMachOLoaderClass; struct _CutMachOLoader { GObject object; }; struct _CutMachOLoaderClass { GObjectClass parent_class; }; GType cut_mach_o_loader_get_type (void) G_GNUC_CONST; CutMachOLoader *cut_mach_o_loader_new (const gchar *so_filename); gboolean cut_mach_o_loader_is_mach_o (CutMachOLoader *loader); gboolean cut_mach_o_loader_support_attribute (CutMachOLoader *loader); GList *cut_mach_o_loader_collect_symbols (CutMachOLoader *loader); G_END_DECLS #endif /* __CUT_MACH_O_LOADER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-report-factory-builder.h0000644000175000017500000000425111205747026023534 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_REPORT_FACTORY_BUILDER_H__ #define __CUT_REPORT_FACTORY_BUILDER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_REPORT_FACTORY_BUILDER (cut_report_factory_builder_get_type ()) #define CUT_REPORT_FACTORY_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_REPORT_FACTORY_BUILDER, CutReportFactoryBuilder)) #define CUT_REPORT_FACTORY_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_REPORT_FACTORY_BUILDER, CutReportFactoryBuilderClass)) #define CUT_IS_REPORT_FACTORY_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_REPORT_FACTORY_BUILDER)) #define CUT_IS_REPORT_FACTORY_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_REPORT_FACTORY_BUILDER)) #define CUT_REPORT_FACTORY_BUILDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_REPORT_FACTORY_BUILDER, CutReportFactoryBuilderClass)) typedef struct _CutReportFactoryBuilder CutReportFactoryBuilder; typedef struct _CutReportFactoryBuilderClass CutReportFactoryBuilderClass; struct _CutReportFactoryBuilder { CutFactoryBuilder object; }; struct _CutReportFactoryBuilderClass { CutFactoryBuilderClass parent_class; }; GType cut_report_factory_builder_get_type (void) G_GNUC_CONST; G_END_DECLS #endif /* __CUT_REPORT_FACTORY_BUILDER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-ui-factory-builder.c0000644000175000017500000001406211261376767022646 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "cut-utils.h" #include "cut-ui-factory-builder.h" #include "cut-module-factory.h" #include "cut-module-factory-utils.h" static gchar *ui_name = NULL; static CutUIFactoryBuilder *the_builder = NULL; #ifdef G_OS_WIN32 static gchar *win32_ui_factory_module_dir = NULL; #endif static GObject *constructor (GType type, guint n_props, GObjectConstructParam *props); static void set_option_context (CutFactoryBuilder *builder, GOptionContext *context); static GList *build (CutFactoryBuilder *builder); static GList *build_all (CutFactoryBuilder *builder); static const gchar *get_type_name (CutFactoryBuilder *builder); G_DEFINE_TYPE(CutUIFactoryBuilder, cut_ui_factory_builder, CUT_TYPE_FACTORY_BUILDER) static void cut_ui_factory_builder_class_init (CutUIFactoryBuilderClass *klass) { GObjectClass *gobject_class; CutFactoryBuilderClass *builder_class; gobject_class = G_OBJECT_CLASS(klass); builder_class = CUT_FACTORY_BUILDER_CLASS(klass); gobject_class->constructor = constructor; builder_class->set_option_context = set_option_context; builder_class->build = build; builder_class->build_all = build_all; builder_class->get_type_name = get_type_name; } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object; if (!the_builder) { GObjectClass *klass; klass = G_OBJECT_CLASS(cut_ui_factory_builder_parent_class); object = klass->constructor(type, n_props, props); the_builder = CUT_UI_FACTORY_BUILDER(object); } else { object = g_object_ref(the_builder); } return object; } static void cut_ui_factory_builder_init (CutUIFactoryBuilder *builder) { const gchar *dir; dir = g_getenv("CUT_UI_FACTORY_MODULE_DIR"); if (!dir) { #ifdef G_OS_WIN32 if (!win32_ui_factory_module_dir) win32_ui_factory_module_dir = cut_win32_build_factory_module_dir_name("ui"); dir = win32_ui_factory_module_dir; #else dir = UI_FACTORY_MODULEDIR; #endif } g_object_set(G_OBJECT(builder), "module-dir", dir, NULL); } static void set_option_context (CutFactoryBuilder *builder, GOptionContext *context) { static gchar *arg_description = NULL; GOptionGroup *group; GOptionEntry entries[] = { {"ui", 'u', 0, G_OPTION_ARG_STRING, &ui_name, N_("Specify UI"), NULL}, {NULL} }; if (!arg_description) { GString *available_uis; GList *names, *node; available_uis = g_string_new("["); names = cut_module_factory_get_names("ui"); for (node = names; node; node = g_list_next(node)) { const gchar *name = node->data; g_string_append(available_uis, name); if (g_list_next(node)) g_string_append(available_uis, "|"); } g_string_append(available_uis, "]"); arg_description = g_string_free(available_uis, FALSE); g_list_foreach(names, (GFunc)g_free, NULL); g_list_free(names); } entries[0].arg_description = arg_description; group = g_option_group_new(("ui"), _("UI Options"), _("Show UI options"), builder, NULL); g_option_group_add_entries(group, entries); g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); g_option_context_add_group(context, group); } static GList * build (CutFactoryBuilder *builder) { GList *factories = NULL; CutModuleFactory *module_factory; if (!ui_name) ui_name = "console"; if (cut_module_factory_exist_module("ui", ui_name)) { GOptionContext *option_context; module_factory = cut_module_factory_new("ui", ui_name, NULL); g_object_get(builder, "option-context", &option_context, NULL); cut_module_factory_set_option_group(module_factory, option_context); factories = g_list_prepend(factories, module_factory); } return g_list_reverse(factories); } static GList * build_all (CutFactoryBuilder *builder) { GList *factories = NULL, *node; GList *factory_names; factory_names = cut_module_factory_get_names("ui"); for (node = factory_names; node; node = g_list_next(node)) { CutModuleFactory *module_factory; GOptionContext *option_context; module_factory = cut_module_factory_new("ui", node->data, NULL); g_object_get(builder, "option-context", &option_context, NULL); cut_module_factory_set_option_group(module_factory, option_context); factories = g_list_prepend(factories, module_factory); } return g_list_reverse(factories); } static const gchar * get_type_name (CutFactoryBuilder *builder) { return "ui"; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cutter.h0000644000175000017500000003251111400051173017631 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUTTER_H__ #define __CUTTER_H__ #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /** * SECTION: cutter * @title: Cutter * @short_description: A Unit Testing Framework for C and C++. * @see_also: Assertions * * Cutter is a Unit Testing Framework for C and C++ and has * the following features: * * * Easy to use. Cutter doesn't introduce any magic macros * like CUTTER_DEFINE_TEST_START and CUTTER_DEFINE_TEST_END * into your test program. You can write your test program * like normal program. You only use cut_assert_XXX() to * check that your program works as you expect. * |[ * #include * #include "my-stack.h" * * void * test_my_stack (void) * { * MyStack *stack = my_stack_new(); * * cut_assert_not_null(stack); * cut_assert(my_stack_is_empty(stack)); * cut_assert_equal_int(0, my_stack_get_size(stack)); * * my_stack_push(stack, 10); * cut_assert(!my_stack_is_empty(stack)); * cut_assert_equal_int(1, my_stack_get_size(stack)); * * my_stack_push(stack, 20); * cut_assert_equal_int(2, my_stack_get_size(stack)); * * cut_assert_equal(20, my_stack_pop(stack)); * cut_assert(!my_stack_is_empty(stack)); * cut_assert_equal_int(1, my_stack_get_size(stack)); * * cut_assert_equal(10, my_stack_pop(stack)); * cut_assert(my_stack_is_empty(stack)); * cut_assert_equal_int(0, my_stack_get_size(stack)); * } * ]| * * * Simple but useful output. Cutter works quietly if tests * are running without any problems by default. The * following is an output of self test: * |[ * ........................................................... * * Finished in 0.213021 seconds * * 59 test(s), 246 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 notification(s) * ]| * Cutter just outputs "." for a passed test and a summary * at the end. Cutter doesn't output each test name, how * many assertions are used for a test and so because we * don't need the information on success. * * Cutter outputs many information on failure: * |[ * .....................F..................................... * * 1) Failure: test_error * <"Strange" == cut_test_result_get_test_name(result)> * expected: <Strange!!!> * but was: <dummy-error-test> * test/test-cut-assertions.c:240: cut_assert_test_result() * * Finished in 0.223657 seconds * * 59 test(s), 242 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) * ]| * The above result is happened because I add a strange * expected staring in Cutter's self test: * |[ * cut_assert_equal_string("Strange!!!", cut_test_result_get_test_name(result)); * ]| * The strange assertion is written in the 240th line in * test/test-cut-assertions.c and the line is in the * cut_assert_test_result() function. The function is called * in test_error test. We expected * cut_test_result_get_test_name(result) should return * "Strange!!!" but got "dummy-error-name". We can get the * above information from Cutter output. This will help your * debug. * * Cutter's output format is pragmatic. ' but was:' is * indented and aligned with the above 'expected:'. This * helps that you find difference between expected value and * actual value by your eyes easily. The problem line is * formated as 'FILENAME:LINE: FUNCTION' to integrate * Emacs. In Emacs's compilation-mode, if the format is * appeared in *compilation* buffer, we can jump to FILENAME * at LINE with next-error command. (C-x `) This helps that you * find the problem line rapidly. * * Cutter supports not only easy test writing but also easy * debugging. * * */ #ifndef CUTTER_DISABLE_DEPRECATED /** * setup: * * If you define setup() in your test program, cutter will * call your setup() before each your test is run. If you * define cut_setup(), setup() is ignored. * * Deprecated: 1.0.7: Use cut_setup() instead. */ void setup(void); #endif /** * cut_setup: * * If you define cut_setup() in your test program, cutter * will call your cut_setup() before each your test is * run. cut_setup() has priority over setup(). * * Since: 1.0.6 */ void cut_setup(void); #ifndef CUTTER_DISABLE_DEPRECATED /** * teardown: * * If you define teardown() in your test program, cutter will * call your teardown() after each your test is run even if * a test is failed. If you define cut_teardown(), * teardown() is ignored. * * Deprecated: 1.0.7: Use cut_teardown() instead. */ void teardown(void); #endif /** * cut_teardown: * * If you define cut_teardown() in your test program, cutter * will call your cut_teardown() after each your test is run * even if a test is failed. cut_teardown() has priority * over teardown(). * * Since: 1.0.6 */ void cut_teardown(void); /** * cut_startup: * * If you define cut_startup() in your test program, cutter * will call your cut_startup() before each your test case * is run. cut_startup() has priority over startup(). * * Since: 1.0.6 */ void cut_startup(void); /** * cut_shutdown: * * If you define shutdown() in your test program, cutter * will call your shutdown() after each your test case is * run. cut_shutdown() has priority over shutdown(). * * Since: 1.0.6 */ void cut_shutdown(void); /** * cut_add_data: * @first_data_name: The first data name. * @...: The data and destroy function of the first data, * followed optionally by more * name/data/destroy_function(#CutDestroyFunction) * triples. The variable arguments should be terminated * by %NULL since 1.0.6. * * Adds data to use data driven test. * * e.g.: * |[ * #include * * void data_translate (void); * void test_translate (const void *data); * * static const char* * translate (int input) * { * switch(input) { * case 1: * return "first"; * case 111: * return "a hundred eleven"; * default: * return "unsupported"; * } * } * * typedef struct _TranslateTestData * { * char *translated; * int input; * } TranslateTestData; * * static TranslateTestData * * translate_test_data_new (char *translated, int input) * { * TranslateTestData *data; * * data = malloc(sizeof(TranslateTestData)); * data->translated = strdup(translated); * data->input = input; * * return data; * } * * static void * translate_test_data_free (TranslateTestData *data) * { * free(data->translated); * free(data); * } * * void * data_translate(void) * { * cut_add_data("simple data", * translate_test_data_new("first", 1), * translate_test_data_free, * "complex data", * translate_test_data_new("a hundred eleven", 111), * translate_test_data_free, * NULL); * } * * void * test_translate(const void *data) * { * const TranslateTestData *test_data = data; * * cut_assert_equal_string(test_data->translated, * translate(test_data->input)); * } * ]| * * Since: 1.0.3 */ #define cut_add_data(first_data_name, ...) \ cut_add_data_backward_compatibility(cut_get_current_test_context(), \ first_data_name, __VA_ARGS__) #if !defined(CUTTER_DISABLE_DEPRECATED) && defined(__GNUC__) #define cut_add_data_backward_compatibility(context, ...) \ cut_test_context_add_data(context, ## __VA_ARGS__, NULL) #else #define cut_add_data_backward_compatibility(context, ...) \ cut_test_context_add_data(context, __VA_ARGS__) #endif /** * cut_set_attributes: * @first_attribute_name: The first attribute name. * @...: The value of the first attribute, followed * optionally by more name/value pairs. * %NULL-terminate is required since 1.0.7. * * Sets attributes of the test. * * e.g.: * |[ * #include * * void attributes_repeat (void); * void test_repeat (void); * * void * attributes_repeat(void) * { * cut_set_attributes("description", "a test for repeat function", * "bug", "111", * "priority", "high", * NULL); * } * * void * test_repeat(void) * { * cut_assert_equal_string_with_free("XXX", repeat("X", 3)); * } * ]| * * Since: 1.0.4 */ #define cut_set_attributes(first_attribute_name, ...) \ cut_test_context_set_attributes(cut_get_current_test_context(), \ first_attribute_name, \ __VA_ARGS__) /** * cut_get_current_test_context: * * Returns the current test context. The current test * context is a thread local object. It means that you don't * need to care this if you don't create a new thread in your * test. This is only needed to care if you create a new * thread. You need to pass the current test context in your * test thread to the current test context in a created * thread. * * e.g.: * |[ * int * your_thread_function(void *data) * { * CutTestContext *test_context = data; * cut_set_current_test_context(test_context); * ... * } * * void * run_your_thread(void) * { * int result; * pthread_t your_thread; * * result = pthread_create(&your_thread, NULL, * your_thread_function, * cut_get_current_test_context()); * ... * } * ]| * * Returns: a #CutTestContext. * * Since: 1.0.4 */ #define cut_get_current_test_context() \ cut_test_context_current_peek() /** * cut_set_current_test_context: * @test_context: the #CutTestContext to be the current test * context. * * Set @test_context as the current test context. See * cut_get_current_test_context() for more details. * * Since: 1.0.4 */ #define cut_set_current_test_context(test_context) \ cut_test_context_current_push(test_context) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_set_message: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Sets a message to be used by the next assertion. * * Since: 1.0.6 * Deprecated: 1.1.0: Use cut_message() instead. */ #define cut_set_message(...) \ cut_test_context_set_user_message(cut_get_current_test_context(), \ __VA_ARGS__) /** * cut_set_message_va_list: * @format: the message format. See the printf() documentation. * @args: the parameters to insert into the format string. * * Sets a message to be used by the next assertion. * * Since: 1.0.6 * Deprecated: 1.1.0: Use cut_message() instead. */ #define cut_set_message_va_list(format, args) \ cut_test_context_set_user_message_va_list( \ cut_get_current_test_context(), format, args) /** * cut_keep_message: * * Keeps the current message set by cut_set_message() or * cut_set_message_va_list() after the next assertion. * * Since: 1.0.6 * Deprecated: 1.1.0: Use cut_message() instead. */ #define cut_keep_message() \ cut_test_context_keep_user_message(cut_get_current_test_context()) #endif /** * cut_message: * @format: the message format. See the printf() documentation. * @...: the parameters to insert into the format string. * * Specifies optional assertion message. * * e.g.: * |[ * cut_assert_equal_string("abc", "def", * cut_message("should fail!")); * ]| * * Since: 1.1.0 */ #define cut_message(...) \ cut_test_context_set_current_result_user_message( \ cut_get_current_test_context(), \ cut_take_printf(__VA_ARGS__)) /** * CUT_EXPORT: * * Marks a function as a exported function. This is needed * for just Windows environment. If you want to run your * tests on Windows, you need to use this. Otherwise, you * don't need to use this. * * e.g.: * |[ * CUT_EXPORT void * test_add (void) * { * ... * } * ]| * * Since: 1.1.2 */ #ifdef _WIN32 # define CUT_EXPORT __declspec(dllexport) #else # define CUT_EXPORT #endif #ifdef __cplusplus } #endif #endif /* __CUTTER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-stream-parser.c0000644000175000017500000024635611407320456021724 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include "cut-stream-parser.h" #include "cut-backtrace-entry.h" typedef enum { IN_TOP_LEVEL, IN_TOP_LEVEL_RESULT, IN_STREAM, IN_STREAM_SUCCESS, IN_TEST_SUITE, IN_TEST_CASE, IN_TEST_ITERATOR, IN_TEST, IN_ITERATED_TEST, IN_TEST_DATA, IN_TEST_NAME, IN_TEST_DESCRIPTION, IN_TEST_OPTION, IN_TEST_START_TIME, IN_TEST_ELAPSED, IN_TEST_DATA_NAME, IN_TEST_OPTION_NAME, IN_TEST_OPTION_VALUE, IN_TEST_CONTEXT, IN_TEST_CONTEXT_FAILED, IN_READY_TEST_SUITE, IN_READY_TEST_SUITE_N_TEST_CASES, IN_READY_TEST_SUITE_N_TESTS, IN_START_TEST_SUITE, IN_READY_TEST_CASE, IN_READY_TEST_CASE_N_TESTS, IN_READY_TEST_ITERATOR, IN_READY_TEST_ITERATOR_N_TESTS, IN_START_TEST_CASE, IN_START_TEST_ITERATOR, IN_START_TEST, IN_START_ITERATED_TEST, IN_PASS_ASSERTION, IN_TEST_RESULT, IN_RESULT, IN_RESULT_STATUS, IN_RESULT_DETAIL, IN_RESULT_BACKTRACE, IN_RESULT_BACKTRACE_ENTRY, IN_RESULT_BACKTRACE_ENTRY_FILE, IN_RESULT_BACKTRACE_ENTRY_LINE, IN_RESULT_BACKTRACE_ENTRY_INFO, IN_RESULT_START_TIME, IN_RESULT_ELAPSED, IN_COMPLETE_ITERATED_TEST, IN_COMPLETE_TEST, IN_TEST_ITERATOR_RESULT, IN_TEST_CASE_RESULT, IN_COMPLETE_TEST_ITERATOR, IN_COMPLETE_TEST_CASE, IN_COMPLETE_TEST_SUITE, IN_COMPLETE_SUCCESS } ParseState; #define CUT_STREAM_PARSER_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_STREAM_PARSER, \ CutStreamParserPrivate)) typedef struct _ReadyTestSuite ReadyTestSuite; struct _ReadyTestSuite { CutTestSuite *test_suite; gint n_test_cases; gint n_tests; }; typedef struct _ReadyTestCase ReadyTestCase; struct _ReadyTestCase { CutTestCase *test_case; gint n_tests; }; typedef struct _ReadyTestIterator ReadyTestIterator; struct _ReadyTestIterator { CutTestIterator *test_iterator; gint n_tests; }; typedef struct _StartTest StartTest; struct _StartTest { CutTest *test; CutTestContext *test_context; }; typedef struct _StartIteratedTest StartIteratedTest; struct _StartIteratedTest { CutIteratedTest *iterated_test; CutTestContext *test_context; }; typedef struct _PassAssertion PassAssertion; struct _PassAssertion { CutTest *test; CutTestContext *test_context; }; typedef struct _TestResult TestResult; struct _TestResult { CutTest *test; CutTestContext *test_context; CutTestResult *result; }; typedef struct _CompleteIteratedTest CompleteIteratedTest; struct _CompleteIteratedTest { CutIteratedTest *iterated_test; CutTestContext *test_context; }; typedef struct _CompleteTest CompleteTest; struct _CompleteTest { CutTest *test; CutTestContext *test_context; }; typedef struct _TestIteratorResult TestIteratorResult; struct _TestIteratorResult { CutTestIterator *test_iterator; CutTestResult *result; }; typedef struct _TestCaseResult TestCaseResult; struct _TestCaseResult { CutTestCase *test_case; CutTestResult *result; }; typedef struct _CutStreamParserPrivate CutStreamParserPrivate; struct _CutStreamParserPrivate { GMarkupParseContext *context; CutRunContext *run_context; GQueue *states; GQueue *iterated_tests; GQueue *tests; GQueue *test_iterators; GQueue *test_cases; GQueue *test_suites; GQueue *test_contexts; GQueue *test_data; ReadyTestSuite *ready_test_suite; ReadyTestCase *ready_test_case; ReadyTestIterator *ready_test_iterator; StartTest *start_test; StartIteratedTest *start_iterated_test; PassAssertion *pass_assertion; TestResult *test_result; CompleteIteratedTest *complete_iterated_test; CompleteTest *complete_test; TestIteratorResult *test_iterator_result; TestCaseResult *test_case_result; CutTestResult *result; GList *backtrace; CutBacktraceEntry *backtrace_entry; gchar *option_name; gchar *option_value; gboolean complete_success; gboolean stream_success; GQueue *element_stack; }; #define PUSH_STATE(priv, state) \ (g_queue_push_head((priv)->states, GINT_TO_POINTER(state))) #define POP_STATE(priv) \ (GPOINTER_TO_INT(g_queue_pop_head((priv)->states))) #define DROP_STATE(priv) \ (g_queue_pop_head((priv)->states)) #define PEEK_STATE(priv) \ (GPOINTER_TO_INT(g_queue_peek_head((priv)->states))) #define PEEK_NTH_STATE(priv, n) \ (GPOINTER_TO_INT(g_queue_peek_nth((priv)->states, n))) #define PUSH_TEST(priv, test) \ (g_queue_push_head((priv)->tests, g_object_ref(test))) #define POP_TEST(priv) \ (g_queue_pop_head((priv)->tests)) #define DROP_TEST(priv) \ (g_object_unref(POP_TEST(priv))) #define PEEK_TEST(priv) \ (g_queue_peek_head((priv)->tests)) #define PUSH_TEST_ITERATOR(priv, test_iterator) \ (g_queue_push_head((priv)->test_iterators, g_object_ref(test_iterator))) #define POP_TEST_ITERATOR(priv) \ (g_queue_pop_head((priv)->test_iterators)) #define DROP_TEST_ITERATOR(priv) \ (g_object_unref(POP_TEST_ITERATOR(priv))) #define PEEK_TEST_ITERATOR(priv) \ (g_queue_peek_head((priv)->test_iterators)) #define PUSH_TEST_CASE(priv, test_case) \ (g_queue_push_head((priv)->test_cases, g_object_ref(test_case))) #define POP_TEST_CASE(priv) \ (g_queue_pop_head((priv)->test_cases)) #define DROP_TEST_CASE(priv) \ (g_object_unref(POP_TEST_CASE(priv))) #define PEEK_TEST_CASE(priv) \ (g_queue_peek_head((priv)->test_cases)) #define PUSH_TEST_SUITE(priv, test_suite) \ (g_queue_push_head((priv)->test_suites, g_object_ref(test_suite))) #define POP_TEST_SUITE(priv) \ (g_queue_pop_head((priv)->test_suites)) #define DROP_TEST_SUITE(priv) \ (g_object_unref(POP_TEST_SUITE(priv))) #define PEEK_TEST_SUITE(priv) \ (g_queue_peek_head((priv)->test_suites)) #define PUSH_TEST_CONTEXT(priv, test_context) \ (g_queue_push_head((priv)->test_contexts, g_object_ref(test_context))) #define POP_TEST_CONTEXT(priv) \ (g_queue_pop_head((priv)->test_contexts)) #define DROP_TEST_CONTEXT(priv) \ (g_object_unref(POP_TEST_CONTEXT(priv))) #define PEEK_TEST_CONTEXT(priv) \ (g_queue_peek_head((priv)->test_contexts)) #define PUSH_TEST_DATA(priv, current_test_data) \ (g_queue_push_head((priv)->test_data, g_object_ref(current_test_data))) #define POP_TEST_DATA(priv) \ (g_queue_pop_head((priv)->test_data)) #define DROP_TEST_DATA(priv) \ (g_object_unref(POP_TEST_DATA(priv))) #define PEEK_TEST_DATA(priv) \ (g_queue_peek_head((priv)->test_data)) enum { PROP_0, PROP_RUN_CONTEXT, }; enum { RESULT, LAST_SIGNAL }; static gint signals[LAST_SIGNAL] = {0}; G_DEFINE_TYPE(CutStreamParser, cut_stream_parser, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void start_element_handler (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error); static void end_element_handler (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error); static void text_handler (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error); static void error_handler (GMarkupParseContext *context, GError *error, gpointer user_data); static GMarkupParser markup_parser = { start_element_handler, end_element_handler, text_handler, NULL, error_handler, }; static void cut_stream_parser_class_init (CutStreamParserClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_object("run-context", "run context", "The run context of the stream parser", CUT_TYPE_RUN_CONTEXT, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_RUN_CONTEXT, spec); signals[RESULT] = g_signal_new("result", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(CutStreamParserClass, result), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, CUT_TYPE_TEST_RESULT); g_type_class_add_private(gobject_class, sizeof(CutStreamParserPrivate)); } static void cut_stream_parser_init (CutStreamParser *stream_parser) { CutStreamParserPrivate *priv = CUT_STREAM_PARSER_GET_PRIVATE(stream_parser); priv->context = g_markup_parse_context_new(&markup_parser, G_MARKUP_TREAT_CDATA_AS_TEXT, stream_parser, NULL); priv->run_context = NULL; priv->states = g_queue_new(); PUSH_STATE(priv, IN_TOP_LEVEL); priv->iterated_tests = g_queue_new(); priv->tests = g_queue_new(); priv->test_cases = g_queue_new(); priv->test_iterators = g_queue_new(); priv->test_suites = g_queue_new(); priv->test_contexts = g_queue_new(); priv->test_data = g_queue_new(); priv->ready_test_suite = NULL; priv->ready_test_case = NULL; priv->ready_test_iterator = NULL; priv->start_test = NULL; priv->start_iterated_test = NULL; priv->pass_assertion = NULL; priv->complete_iterated_test = NULL; priv->complete_test = NULL; priv->test_result = NULL; priv->test_iterator_result = NULL; priv->test_case_result = NULL; priv->result = NULL; priv->backtrace = NULL; priv->backtrace_entry = NULL; priv->option_name = NULL; priv->option_value = NULL; priv->complete_success = TRUE; priv->stream_success = TRUE; priv->element_stack = g_queue_new(); } static ReadyTestSuite * ready_test_suite_new (void) { return g_slice_new0(ReadyTestSuite); } static void ready_test_suite_free (ReadyTestSuite *ready_test_suite) { if (ready_test_suite->test_suite) g_object_unref(ready_test_suite->test_suite); g_slice_free(ReadyTestSuite, ready_test_suite); } static ReadyTestCase * ready_test_case_new (void) { return g_slice_new0(ReadyTestCase); } static void ready_test_case_free (ReadyTestCase *ready_test_case) { if (ready_test_case->test_case) g_object_unref(ready_test_case->test_case); g_slice_free(ReadyTestCase, ready_test_case); } static ReadyTestIterator * ready_test_iterator_new (void) { return g_slice_new0(ReadyTestIterator); } static void ready_test_iterator_free (ReadyTestIterator *ready_test_iterator) { if (ready_test_iterator->test_iterator) g_object_unref(ready_test_iterator->test_iterator); g_slice_free(ReadyTestIterator, ready_test_iterator); } static StartTest * start_test_new (void) { return g_slice_new0(StartTest); } static void start_test_free (StartTest *start_test) { if (start_test->test) g_object_unref(start_test->test); if (start_test->test_context) g_object_unref(start_test->test_context); g_slice_free(StartTest, start_test); } static StartIteratedTest * start_iterated_test_new (void) { return g_slice_new0(StartIteratedTest); } static void start_iterated_test_free (StartIteratedTest *start_iterated_test) { if (start_iterated_test->iterated_test) g_object_unref(start_iterated_test->iterated_test); if (start_iterated_test->test_context) g_object_unref(start_iterated_test->test_context); g_slice_free(StartIteratedTest, start_iterated_test); } static PassAssertion * pass_assertion_new (void) { return g_slice_new0(PassAssertion); } static void pass_assertion_free (PassAssertion *pass_assertion) { if (pass_assertion->test) g_object_unref(pass_assertion->test); if (pass_assertion->test_context) g_object_unref(pass_assertion->test_context); g_slice_free(PassAssertion, pass_assertion); } static TestResult * test_result_new (void) { return g_slice_new0(TestResult); } static void test_result_free (TestResult *test_result) { if (test_result->test) g_object_unref(test_result->test); if (test_result->test_context) g_object_unref(test_result->test_context); if (test_result->result) g_object_unref(test_result->result); g_slice_free(TestResult, test_result); } static CompleteIteratedTest * complete_iterated_test_new (void) { return g_slice_new0(CompleteIteratedTest); } static void complete_iterated_test_free (CompleteIteratedTest *complete_iterated_test) { if (complete_iterated_test->iterated_test) g_object_unref(complete_iterated_test->iterated_test); if (complete_iterated_test->test_context) g_object_unref(complete_iterated_test->test_context); g_slice_free(CompleteIteratedTest, complete_iterated_test); } static CompleteTest * complete_test_new (void) { return g_slice_new0(CompleteTest); } static void complete_test_free (CompleteTest *complete_test) { if (complete_test->test) g_object_unref(complete_test->test); if (complete_test->test_context) g_object_unref(complete_test->test_context); g_slice_free(CompleteTest, complete_test); } static TestIteratorResult * test_iterator_result_new (void) { return g_slice_new0(TestIteratorResult); } static void test_iterator_result_free (TestIteratorResult *test_iterator_result) { if (test_iterator_result->test_iterator) g_object_unref(test_iterator_result->test_iterator); if (test_iterator_result->result) g_object_unref(test_iterator_result->result); g_slice_free(TestIteratorResult, test_iterator_result); } static TestCaseResult * test_case_result_new (void) { return g_slice_new0(TestCaseResult); } static void test_case_result_free (TestCaseResult *test_case_result) { if (test_case_result->test_case) g_object_unref(test_case_result->test_case); if (test_case_result->result) g_object_unref(test_case_result->result); g_slice_free(TestCaseResult, test_case_result); } static void run_context_weak_notify (gpointer data, GObject *where_the_object_was) { CutStreamParser *parser = data; CutStreamParserPrivate *priv; priv = CUT_STREAM_PARSER_GET_PRIVATE(parser); priv->run_context = NULL; } static void dispose (GObject *object) { CutStreamParserPrivate *priv = CUT_STREAM_PARSER_GET_PRIVATE(object); if (priv->context) { g_markup_parse_context_free(priv->context); priv->context = NULL; } if (priv->run_context) { g_object_weak_unref(G_OBJECT(priv->run_context), run_context_weak_notify, object); priv->run_context = NULL; } if (priv->states) { g_queue_free(priv->states); priv->states = NULL; } if (priv->iterated_tests) { g_queue_foreach(priv->iterated_tests, (GFunc)g_object_unref, NULL); g_queue_free(priv->iterated_tests); priv->iterated_tests = NULL; } if (priv->tests) { g_queue_foreach(priv->tests, (GFunc)g_object_unref, NULL); g_queue_free(priv->tests); priv->tests = NULL; } if (priv->test_cases) { g_queue_foreach(priv->test_cases, (GFunc)g_object_unref, NULL); g_queue_free(priv->test_cases); priv->test_cases = NULL; } if (priv->test_suites) { g_queue_foreach(priv->test_suites, (GFunc)g_object_unref, NULL); g_queue_free(priv->test_suites); priv->test_suites = NULL; } if (priv->test_contexts) { g_queue_foreach(priv->test_contexts, (GFunc)g_object_unref, NULL); g_queue_free(priv->test_contexts); priv->test_contexts = NULL; } if (priv->test_data) { g_queue_foreach(priv->test_data, (GFunc)g_object_unref, NULL); g_queue_free(priv->test_data); priv->test_data = NULL; } if (priv->ready_test_suite) { ready_test_suite_free(priv->ready_test_suite); priv->ready_test_suite = NULL; } if (priv->ready_test_case) { ready_test_case_free(priv->ready_test_case); priv->ready_test_case = NULL; } if (priv->start_test) { start_test_free(priv->start_test); priv->start_test = NULL; } if (priv->start_iterated_test) { start_iterated_test_free(priv->start_iterated_test); priv->start_iterated_test = NULL; } if (priv->pass_assertion) { pass_assertion_free(priv->pass_assertion); priv->pass_assertion = NULL; } if (priv->test_result) { test_result_free(priv->test_result); priv->test_result = NULL; } if (priv->complete_iterated_test) { complete_iterated_test_free(priv->complete_iterated_test); priv->complete_iterated_test = NULL; } if (priv->complete_test) { complete_test_free(priv->complete_test); priv->complete_test = NULL; } if (priv->test_case_result) { test_case_result_free(priv->test_case_result); priv->test_case_result = NULL; } if (priv->result) { g_object_unref(priv->result); priv->result = NULL; } if (priv->backtrace) { g_list_foreach(priv->backtrace, (GFunc)g_object_unref, NULL); g_list_free(priv->backtrace); priv->backtrace = NULL; } if (priv->backtrace_entry) { g_object_unref(priv->backtrace_entry); priv->backtrace_entry = NULL; } if (priv->option_name) { g_free(priv->option_name); priv->option_name = NULL; } if (priv->option_value) { g_free(priv->option_value); priv->option_value = NULL; } if (priv->element_stack) { g_queue_foreach(priv->element_stack, (GFunc)g_free, NULL); g_queue_free(priv->element_stack); priv->element_stack = NULL; } G_OBJECT_CLASS(cut_stream_parser_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { CutStreamParserPrivate *priv = CUT_STREAM_PARSER_GET_PRIVATE(object); switch (prop_id) { case PROP_RUN_CONTEXT: priv->run_context = g_value_get_object(value); if (priv->run_context) g_object_weak_ref(G_OBJECT(priv->run_context), run_context_weak_notify, object); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CutStreamParserPrivate *priv = CUT_STREAM_PARSER_GET_PRIVATE(object); switch (prop_id) { case PROP_RUN_CONTEXT: g_value_set_object(value, priv->run_context); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } CutStreamParser * cut_stream_parser_new (CutRunContext *run_context) { return g_object_new(CUT_TYPE_STREAM_PARSER, "run-context", run_context, NULL); } CutStreamParser * cut_test_result_parser_new (void) { CutStreamParser *parser; CutStreamParserPrivate *priv; parser = cut_stream_parser_new(NULL); priv = CUT_STREAM_PARSER_GET_PRIVATE(parser); DROP_STATE(priv); PUSH_STATE(priv, IN_TOP_LEVEL_RESULT); return parser; } gboolean cut_stream_parser_parse (CutStreamParser *stream_parser, const gchar *text, gsize text_len, GError **error) { CutStreamParserPrivate *priv = CUT_STREAM_PARSER_GET_PRIVATE(stream_parser); if (text_len < 0) text_len = strlen(text); return g_markup_parse_context_parse(priv->context, text, text_len, error); } gboolean cut_stream_parser_end_parse (CutStreamParser *stream_parser, GError **error) { CutStreamParserPrivate *priv = CUT_STREAM_PARSER_GET_PRIVATE(stream_parser); return g_markup_parse_context_end_parse(priv->context, error); } static gchar * element_path (const GList *elements) { GString *string; const GList *node; string = g_string_new(NULL); for (node = elements; node; node = g_list_next(node)) { g_string_append(string, "/"); g_string_append(string, node->data); } return g_string_free(string, FALSE); } static void set_parse_error (CutStreamParserPrivate *priv, GMarkupParseContext *context, GError **error, const gchar *format, ...) { gint line = 0, chr = 0; gchar *message, *path; va_list var_args; va_start(var_args, format); message = g_strdup_vprintf(format, var_args); va_end(var_args); g_markup_parse_context_get_position(context, &line, &chr); path = element_path(priv->element_stack->head); g_set_error(error, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE, "Error on line %d char %d: %s: %s", line, chr, path, message); g_free(path); g_free(message); } static void invalid_element (CutStreamParserPrivate *priv, GMarkupParseContext *context, GError **error) { set_parse_error(priv, context, error, "invalid element"); } static const gchar * get_parent_element (CutStreamParserPrivate *priv, GMarkupParseContext *context) { GList *tail; tail = priv->element_stack->tail; if (!tail) return NULL; if (!g_list_previous(tail)) return NULL; return g_list_previous(tail)->data; } static void start_top_level (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("stream", element_name)) { PUSH_STATE(priv, IN_STREAM); if (priv->run_context) g_signal_emit_by_name(priv->run_context, "start-run"); } else { invalid_element(priv, context, error); } } static void start_stream (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("pass-assertion", element_name)) { PUSH_STATE(priv, IN_PASS_ASSERTION); priv->pass_assertion = pass_assertion_new(); } else if (g_str_equal("test-result", element_name)) { PUSH_STATE(priv, IN_TEST_RESULT); priv->test_result = test_result_new(); } else if (g_str_equal("ready-test-suite", element_name)) { PUSH_STATE(priv, IN_READY_TEST_SUITE); priv->ready_test_suite = ready_test_suite_new(); } else if (g_str_equal("start-test-suite", element_name)) { PUSH_STATE(priv, IN_START_TEST_SUITE); PUSH_TEST_SUITE(priv, cut_test_suite_new_empty()); } else if (g_str_equal("ready-test-case", element_name)) { PUSH_STATE(priv, IN_READY_TEST_CASE); priv->ready_test_case = ready_test_case_new();; } else if (g_str_equal("start-test-case", element_name)) { PUSH_STATE(priv, IN_START_TEST_CASE); PUSH_TEST_CASE(priv, cut_test_case_new_empty()); } else if (g_str_equal("ready-test-iterator", element_name)) { PUSH_STATE(priv, IN_READY_TEST_ITERATOR); priv->ready_test_iterator = ready_test_iterator_new();; } else if (g_str_equal("start-test-iterator", element_name)) { PUSH_STATE(priv, IN_START_TEST_ITERATOR); PUSH_TEST_ITERATOR(priv, cut_test_iterator_new_empty()); } else if (g_str_equal("start-test", element_name)) { PUSH_STATE(priv, IN_START_TEST); priv->start_test = start_test_new(); } else if (g_str_equal("start-iterated-test", element_name)) { PUSH_STATE(priv, IN_START_ITERATED_TEST); priv->start_iterated_test = start_iterated_test_new(); } else if (g_str_equal("complete-iterated-test", element_name)) { PUSH_STATE(priv, IN_COMPLETE_ITERATED_TEST); priv->complete_iterated_test = complete_iterated_test_new(); } else if (g_str_equal("complete-test", element_name)) { PUSH_STATE(priv, IN_COMPLETE_TEST); priv->complete_test = complete_test_new(); } else if (g_str_equal("test-iterator-result", element_name)) { PUSH_STATE(priv, IN_TEST_ITERATOR_RESULT); priv->test_iterator_result = test_iterator_result_new(); } else if (g_str_equal("complete-test-iterator", element_name)) { PUSH_STATE(priv, IN_COMPLETE_TEST_ITERATOR); } else if (g_str_equal("test-case-result", element_name)) { PUSH_STATE(priv, IN_TEST_CASE_RESULT); priv->test_case_result = test_case_result_new(); } else if (g_str_equal("complete-test-case", element_name)) { PUSH_STATE(priv, IN_COMPLETE_TEST_CASE); } else if (g_str_equal("complete-test-suite", element_name)) { PUSH_STATE(priv, IN_COMPLETE_TEST_SUITE); } else if (g_str_equal("success", element_name)) { PUSH_STATE(priv, IN_STREAM_SUCCESS); } else { invalid_element(priv, context, error); } } static void start_ready_test_suite (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-suite", element_name)) { PUSH_STATE(priv, IN_TEST_SUITE); priv->ready_test_suite->test_suite = cut_test_suite_new_empty(); PUSH_TEST_SUITE(priv, priv->ready_test_suite->test_suite); } else if (g_str_equal("n-test-cases", element_name)) { PUSH_STATE(priv, IN_READY_TEST_SUITE_N_TEST_CASES); } else if (g_str_equal("n-tests", element_name)) { PUSH_STATE(priv, IN_READY_TEST_SUITE_N_TESTS); } else { invalid_element(priv, context, error); } } static void start_start_test_suite (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-suite", element_name)) { PUSH_STATE(priv, IN_TEST_SUITE); PUSH_TEST_SUITE(priv, cut_test_suite_new_empty()); } else { invalid_element(priv, context, error); } } static void start_ready_test_case (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-case", element_name)) { PUSH_STATE(priv, IN_TEST_CASE); priv->ready_test_case->test_case = cut_test_case_new_empty(); PUSH_TEST_CASE(priv, priv->ready_test_case->test_case); } else if (g_str_equal("n-tests", element_name)) { PUSH_STATE(priv, IN_READY_TEST_CASE_N_TESTS); } else { invalid_element(priv, context, error); } } static void start_start_test_case (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-case", element_name)) { PUSH_STATE(priv, IN_TEST_CASE); PUSH_TEST_CASE(priv, cut_test_case_new_empty()); } else { invalid_element(priv, context, error); } } static void start_ready_test_iterator (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-iterator", element_name)) { PUSH_STATE(priv, IN_TEST_ITERATOR); priv->ready_test_iterator->test_iterator = cut_test_iterator_new_empty(); PUSH_TEST_ITERATOR(priv, priv->ready_test_iterator->test_iterator); } else if (g_str_equal("n-tests", element_name)) { PUSH_STATE(priv, IN_READY_TEST_ITERATOR_N_TESTS); } else { invalid_element(priv, context, error); } } static void start_start_test_iterator (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-iterator", element_name)) { PUSH_STATE(priv, IN_TEST_ITERATOR); PUSH_TEST_ITERATOR(priv, cut_test_iterator_new_empty()); } else { invalid_element(priv, context, error); } } static void start_start_test (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test", element_name)) { PUSH_STATE(priv, IN_TEST); priv->start_test->test = cut_test_new_empty(); PUSH_TEST(priv, priv->start_test->test); } else if (g_str_equal("test-context", element_name)) { PUSH_STATE(priv, IN_TEST_CONTEXT); priv->start_test->test_context = cut_test_context_new_empty(); PUSH_TEST_CONTEXT(priv, priv->start_test->test_context); } else { invalid_element(priv, context, error); } } static void start_start_iterated_test (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("iterated-test", element_name)) { PUSH_STATE(priv, IN_ITERATED_TEST); priv->start_iterated_test->iterated_test = cut_iterated_test_new_empty(); PUSH_TEST(priv, CUT_TEST(priv->start_iterated_test->iterated_test)); } else if (g_str_equal("test-context", element_name)) { PUSH_STATE(priv, IN_TEST_CONTEXT); priv->start_iterated_test->test_context = cut_test_context_new_empty(); PUSH_TEST_CONTEXT(priv, priv->start_iterated_test->test_context); } else { invalid_element(priv, context, error); } } static void start_pass_assertion (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test", element_name)) { PUSH_STATE(priv, IN_TEST); priv->pass_assertion->test = cut_test_new_empty(); PUSH_TEST(priv, priv->pass_assertion->test); } else if (g_str_equal("iterated-test", element_name)) { PUSH_STATE(priv, IN_ITERATED_TEST); priv->pass_assertion->test = CUT_TEST(cut_iterated_test_new_empty()); PUSH_TEST(priv, priv->pass_assertion->test); } else if (g_str_equal("test-context", element_name)) { PUSH_STATE(priv, IN_TEST_CONTEXT); priv->pass_assertion->test_context = cut_test_context_new_empty(); PUSH_TEST_CONTEXT(priv, priv->pass_assertion->test_context); } else { invalid_element(priv, context, error); } } static void start_test_result (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test", element_name)) { PUSH_STATE(priv, IN_TEST); priv->test_result->test = cut_test_new_empty(); PUSH_TEST(priv, priv->test_result->test); } else if (g_str_equal("iterated-test", element_name)) { PUSH_STATE(priv, IN_ITERATED_TEST); priv->test_result->test = CUT_TEST(cut_iterated_test_new_empty()); PUSH_TEST(priv, priv->test_result->test); } else if (g_str_equal("test-context", element_name)) { PUSH_STATE(priv, IN_TEST_CONTEXT); priv->test_result->test_context = cut_test_context_new_empty(); PUSH_TEST_CONTEXT(priv, priv->test_result->test_context); } else if (g_str_equal("result", element_name)) { PUSH_STATE(priv, IN_RESULT); priv->test_result->result = cut_test_result_new_empty(); priv->result = g_object_ref(priv->test_result->result); } else { invalid_element(priv, context, error); } } static void start_top_level_result (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("result", element_name)) { PUSH_STATE(priv, IN_RESULT); priv->result = cut_test_result_new_empty(); } else { invalid_element(priv, context, error); } } static void start_result (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-case", element_name)) { CutTestCase *test_case; PUSH_STATE(priv, IN_TEST_CASE); test_case = cut_test_case_new_empty(); cut_test_result_set_test_case(priv->result, test_case); PUSH_TEST_CASE(priv, test_case); g_object_unref(test_case); } else if (g_str_equal("test-iterator", element_name)) { CutTestIterator *test_iterator; PUSH_STATE(priv, IN_TEST_ITERATOR); test_iterator = cut_test_iterator_new_empty(); cut_test_result_set_test_iterator(priv->result, test_iterator); PUSH_TEST_ITERATOR(priv, test_iterator); g_object_unref(test_iterator); } else if (g_str_equal("test", element_name) || g_str_equal("iterated-test", element_name)) { CutTest *test; PUSH_STATE(priv, IN_TEST); if (g_str_equal("iterated-test", element_name)) test = CUT_TEST(cut_iterated_test_new_empty()); else test = cut_test_new_empty(); cut_test_result_set_test(priv->result, test); PUSH_TEST(priv, test); g_object_unref(test); } else if (g_str_equal("test-data", element_name)) { CutTestData *test_data; PUSH_STATE(priv, IN_TEST_DATA); test_data = cut_test_data_new_empty(); cut_test_result_set_test_data(priv->result, test_data); PUSH_TEST_DATA(priv, test_data); g_object_unref(test_data); } else if (g_str_equal("status", element_name)) { PUSH_STATE(priv, IN_RESULT_STATUS); } else if (g_str_equal("detail", element_name)) { PUSH_STATE(priv, IN_RESULT_DETAIL); } else if (g_str_equal("backtrace", element_name)) { PUSH_STATE(priv, IN_RESULT_BACKTRACE); } else if (g_str_equal("start-time", element_name)) { PUSH_STATE(priv, IN_RESULT_START_TIME); } else if (g_str_equal("elapsed", element_name)) { PUSH_STATE(priv, IN_RESULT_ELAPSED); } else { invalid_element(priv, context, error); } } static void start_complete_iterated_test (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("iterated-test", element_name)) { PUSH_STATE(priv, IN_ITERATED_TEST); priv->complete_iterated_test->iterated_test = cut_iterated_test_new_empty(); PUSH_TEST(priv, CUT_TEST(priv->complete_iterated_test->iterated_test)); } else if (g_str_equal("test-context", element_name)) { PUSH_STATE(priv, IN_TEST_CONTEXT); priv->complete_iterated_test->test_context = cut_test_context_new_empty(); PUSH_TEST_CONTEXT(priv, priv->complete_iterated_test->test_context); } else if (g_str_equal("success", element_name)) { PUSH_STATE(priv, IN_COMPLETE_SUCCESS); } else { invalid_element(priv, context, error); } } static void start_complete_test (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test", element_name)) { PUSH_STATE(priv, IN_TEST); priv->complete_test->test = cut_test_new_empty(); PUSH_TEST(priv, priv->complete_test->test); } else if (g_str_equal("test-context", element_name)) { PUSH_STATE(priv, IN_TEST_CONTEXT); priv->complete_test->test_context = cut_test_context_new_empty(); PUSH_TEST_CONTEXT(priv, priv->complete_test->test_context); } else if (g_str_equal("success", element_name)) { PUSH_STATE(priv, IN_COMPLETE_SUCCESS); } else { invalid_element(priv, context, error); } } static void start_test_iterator_result (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-iterator", element_name)) { PUSH_STATE(priv, IN_TEST_ITERATOR); priv->test_iterator_result->test_iterator = cut_test_iterator_new_empty(); PUSH_TEST_ITERATOR(priv, priv->test_iterator_result->test_iterator); } else if (g_str_equal("result", element_name)) { PUSH_STATE(priv, IN_RESULT); priv->test_iterator_result->result = cut_test_result_new_empty(); priv->result = g_object_ref(priv->test_iterator_result->result); } else { invalid_element(priv, context, error); } } static void start_complete_test_iterator (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-iterator", element_name)) { PUSH_STATE(priv, IN_TEST_ITERATOR); PUSH_TEST_ITERATOR(priv, cut_test_iterator_new_empty()); } else if (g_str_equal("success", element_name)) { PUSH_STATE(priv, IN_COMPLETE_SUCCESS); } else { invalid_element(priv, context, error); } } static void start_test_case_result (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-case", element_name)) { PUSH_STATE(priv, IN_TEST_CASE); priv->test_case_result->test_case = cut_test_case_new_empty(); PUSH_TEST_CASE(priv, priv->test_case_result->test_case); } else if (g_str_equal("result", element_name)) { PUSH_STATE(priv, IN_RESULT); priv->test_case_result->result = cut_test_result_new_empty(); priv->result = g_object_ref(priv->test_case_result->result); } else { invalid_element(priv, context, error); } } static void start_complete_test_case (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-case", element_name)) { PUSH_STATE(priv, IN_TEST_CASE); PUSH_TEST_CASE(priv, cut_test_case_new_empty()); } else if (g_str_equal("success", element_name)) { PUSH_STATE(priv, IN_COMPLETE_SUCCESS); } else { invalid_element(priv, context, error); } } static void start_complete_test_suite (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-suite", element_name)) { PUSH_STATE(priv, IN_TEST_SUITE); PUSH_TEST_SUITE(priv, cut_test_suite_new_empty()); } else if (g_str_equal("success", element_name)) { PUSH_STATE(priv, IN_COMPLETE_SUCCESS); } else { invalid_element(priv, context, error); } } static void start_test_object (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("name", element_name)) { PUSH_STATE(priv, IN_TEST_NAME); } else if (g_str_equal("description", element_name)) { PUSH_STATE(priv, IN_TEST_DESCRIPTION); } else if (g_str_equal("option", element_name)) { PUSH_STATE(priv, IN_TEST_OPTION); } else if (g_str_equal("start-time", element_name)) { PUSH_STATE(priv, IN_TEST_START_TIME); } else if (g_str_equal("elapsed", element_name)) { PUSH_STATE(priv, IN_TEST_ELAPSED); } else { invalid_element(priv, context, error); } } static void start_test_option (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("name", element_name)) { PUSH_STATE(priv, IN_TEST_OPTION_NAME); } else if (g_str_equal("value", element_name)) { PUSH_STATE(priv, IN_TEST_OPTION_VALUE); } else { invalid_element(priv, context, error); } } static void start_result_backtrace (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("entry", element_name)) { PUSH_STATE(priv, IN_RESULT_BACKTRACE_ENTRY); priv->backtrace_entry = cut_backtrace_entry_new_empty(); } else { invalid_element(priv, context, error); } } static void start_result_backtrace_entry (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("file", element_name)) { PUSH_STATE(priv, IN_RESULT_BACKTRACE_ENTRY_FILE); } else if (g_str_equal("line", element_name)) { PUSH_STATE(priv, IN_RESULT_BACKTRACE_ENTRY_LINE); } else if (g_str_equal("info", element_name)) { PUSH_STATE(priv, IN_RESULT_BACKTRACE_ENTRY_INFO); } else { invalid_element(priv, context, error); } } static void start_test_context (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("test-suite", element_name)) { CutTestSuite *test_suite; PUSH_STATE(priv, IN_TEST_SUITE); test_suite = cut_test_suite_new_empty(); cut_test_context_set_test_suite(PEEK_TEST_CONTEXT(priv), test_suite); PUSH_TEST_SUITE(priv, test_suite); g_object_unref(test_suite); } else if (g_str_equal("test-case", element_name)) { CutTestCase *test_case; PUSH_STATE(priv, IN_TEST_CASE); test_case = cut_test_case_new_empty(); cut_test_context_set_test_case(PEEK_TEST_CONTEXT(priv), test_case); PUSH_TEST_CASE(priv, test_case); g_object_unref(test_case); } else if (g_str_equal("test-iterator", element_name)) { CutTestIterator *test_iterator; PUSH_STATE(priv, IN_TEST_ITERATOR); test_iterator = cut_test_iterator_new_empty(); cut_test_context_set_test_iterator(PEEK_TEST_CONTEXT(priv), test_iterator); PUSH_TEST_ITERATOR(priv, test_iterator); g_object_unref(test_iterator); } else if (g_str_equal("test", element_name)) { CutTest *test; PUSH_STATE(priv, IN_TEST); test = cut_test_new_empty(); cut_test_context_set_test(PEEK_TEST_CONTEXT(priv), test); PUSH_TEST(priv, test); g_object_unref(test); } else if (g_str_equal("iterated-test", element_name)) { CutIteratedTest *iterated_test; PUSH_STATE(priv, IN_ITERATED_TEST); iterated_test = cut_iterated_test_new_empty(); cut_test_context_set_test(PEEK_TEST_CONTEXT(priv), CUT_TEST(iterated_test)); PUSH_TEST(priv, CUT_TEST(iterated_test)); g_object_unref(iterated_test); } else if (g_str_equal("test-data", element_name)) { CutTestData *test_data; PUSH_STATE(priv, IN_TEST_DATA); test_data = cut_test_data_new_empty(); cut_test_context_set_data(PEEK_TEST_CONTEXT(priv), test_data); PUSH_TEST_DATA(priv, test_data); g_object_unref(test_data); } else if (g_str_equal("failed", element_name)) { PUSH_STATE(priv, IN_TEST_CONTEXT_FAILED); } else { invalid_element(priv, context, error); } } static void start_test_data (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (g_str_equal("name", element_name)) { PUSH_STATE(priv, IN_TEST_DATA_NAME); } else { invalid_element(priv, context, error); } } static void start_element_handler (GMarkupParseContext *context, const gchar *element_name, const gchar **attr_names, const gchar **attr_values, gpointer user_data, GError **error) { CutStreamParser *parser = user_data; CutStreamParserPrivate *priv; ParseState state; priv = CUT_STREAM_PARSER_GET_PRIVATE(parser); g_queue_push_tail(priv->element_stack, g_strdup(element_name)); state = PEEK_STATE(priv); switch (state) { case IN_TOP_LEVEL: start_top_level(priv, context, element_name, error); break; case IN_STREAM: start_stream(priv, context, element_name, error); break; case IN_READY_TEST_SUITE: start_ready_test_suite(priv, context, element_name, error); break; case IN_START_TEST_SUITE: start_start_test_suite(priv, context, element_name, error); break; case IN_READY_TEST_CASE: start_ready_test_case(priv, context, element_name, error); break; case IN_START_TEST_CASE: start_start_test_case(priv, context, element_name, error); break; case IN_READY_TEST_ITERATOR: start_ready_test_iterator(priv, context, element_name, error); break; case IN_START_TEST_ITERATOR: start_start_test_iterator(priv, context, element_name, error); break; case IN_START_TEST: start_start_test(priv, context, element_name, error); break; case IN_START_ITERATED_TEST: start_start_iterated_test(priv, context, element_name, error); break; case IN_PASS_ASSERTION: start_pass_assertion(priv, context, element_name, error); break; case IN_TEST_RESULT: start_test_result(priv, context, element_name, error); break; case IN_TOP_LEVEL_RESULT: start_top_level_result(priv, context, element_name, error); break; case IN_RESULT: start_result(priv, context, element_name, error); break; case IN_COMPLETE_ITERATED_TEST: start_complete_iterated_test(priv, context, element_name, error); break; case IN_COMPLETE_TEST: start_complete_test(priv, context, element_name, error); break; case IN_TEST_ITERATOR_RESULT: start_test_iterator_result(priv, context, element_name, error); break; case IN_COMPLETE_TEST_ITERATOR: start_complete_test_iterator(priv, context, element_name, error); break; case IN_TEST_CASE_RESULT: start_test_case_result(priv, context, element_name, error); break; case IN_COMPLETE_TEST_CASE: start_complete_test_case(priv, context, element_name, error); break; case IN_COMPLETE_TEST_SUITE: start_complete_test_suite(priv, context, element_name, error); break; case IN_TEST_SUITE: case IN_TEST_CASE: case IN_TEST_ITERATOR: case IN_TEST: case IN_ITERATED_TEST: start_test_object(priv, context, element_name, error); break; case IN_TEST_OPTION: start_test_option(priv, context, element_name, error); break; case IN_RESULT_BACKTRACE: start_result_backtrace(priv, context, element_name, error); break; case IN_RESULT_BACKTRACE_ENTRY: start_result_backtrace_entry(priv, context, element_name, error); break; case IN_TEST_CONTEXT: start_test_context(priv, context, element_name, error); break; case IN_TEST_DATA: start_test_data(priv, context, element_name, error); break; default: invalid_element(priv, context, error); break; } } static void end_top_level_result (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (priv->result) { g_object_unref(priv->result); priv->result = NULL; } } static void end_stream (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (priv->run_context) cut_run_context_emit_complete_run(priv->run_context, priv->stream_success); } static void end_result (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (priv->result) g_signal_emit_by_name(parser, "result", priv->result); } static void end_test_context (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { CutTestContext *test_context; test_context = PEEK_TEST_CONTEXT(priv); if (cut_test_context_get_test_suite(test_context)) DROP_TEST_SUITE(priv); if (cut_test_context_get_test_case(test_context)) DROP_TEST_CASE(priv); if (cut_test_context_get_test_iterator(test_context)) DROP_TEST_ITERATOR(priv); if (cut_test_context_get_test(test_context)) DROP_TEST(priv); if (cut_test_context_have_data(test_context)) DROP_TEST_DATA(priv); } static void end_test_option (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->option_name) { set_parse_error(priv, context, error, "option name is not set"); } else if (!priv->option_value) { set_parse_error(priv, context, error, "option value is not set"); } else { cut_test_set_attribute(PEEK_TEST(priv), priv->option_name, priv->option_value); } if (priv->option_name) { g_free(priv->option_name); priv->option_name = NULL; } if (priv->option_value) { g_free(priv->option_value); priv->option_value = NULL; } } static void end_result_backtrace (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->backtrace) return; priv->backtrace = g_list_reverse(priv->backtrace); if (priv->result) cut_test_result_set_backtrace(priv->result, priv->backtrace); g_list_foreach(priv->backtrace, (GFunc)g_object_unref, NULL); g_list_free(priv->backtrace); priv->backtrace = NULL; } static void end_result_backtrace_entry (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->backtrace_entry) return; /* should check file name, line, info? */ priv->backtrace = g_list_prepend(priv->backtrace, priv->backtrace_entry); priv->backtrace_entry = NULL; } static void end_ready_test_suite (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->ready_test_suite) return; if (priv->run_context) { g_signal_emit_by_name(priv->run_context, "ready-test-suite", priv->ready_test_suite->test_suite, priv->ready_test_suite->n_test_cases, priv->ready_test_suite->n_tests); } if (priv->ready_test_suite->test_suite) DROP_TEST_SUITE(priv); ready_test_suite_free(priv->ready_test_suite); priv->ready_test_suite = NULL; } static void end_start_test_suite (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { CutTestSuite *test_suite; test_suite = POP_TEST_SUITE(priv); if (!test_suite) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "start-test-suite", test_suite); g_object_unref(test_suite); } static void end_ready_test_case (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->ready_test_case) return; if (priv->run_context) { g_signal_emit_by_name(priv->run_context, "ready-test-case", priv->ready_test_case->test_case, priv->ready_test_case->n_tests); } if (priv->ready_test_case->test_case) DROP_TEST_CASE(priv); ready_test_case_free(priv->ready_test_case); priv->ready_test_case = NULL; } static void end_start_test_case (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { CutTestCase *test_case; test_case = POP_TEST_CASE(priv); if (!test_case) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "start-test-case", test_case); g_object_unref(test_case); } static void end_ready_test_iterator (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->ready_test_iterator) return; if (priv->run_context) { g_signal_emit_by_name(priv->run_context, "ready-test-iterator", priv->ready_test_iterator->test_iterator, priv->ready_test_iterator->n_tests); } if (priv->ready_test_iterator->test_iterator) DROP_TEST_ITERATOR(priv); ready_test_iterator_free(priv->ready_test_iterator); priv->ready_test_iterator = NULL; } static void end_start_test_iterator (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { CutTestIterator *test_iterator; test_iterator = POP_TEST_ITERATOR(priv); if (!test_iterator) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "start-test-iterator", test_iterator); g_object_unref(test_iterator); } static void end_start_test (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->start_test) return; if (priv->run_context) { g_signal_emit_by_name(priv->run_context, "start-test", priv->start_test->test, priv->start_test->test_context); } if (priv->start_test->test) DROP_TEST(priv); if (priv->start_test->test_context) DROP_TEST_CONTEXT(priv); start_test_free(priv->start_test); priv->start_test = NULL; } static void end_start_iterated_test (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->start_iterated_test) return; if (priv->run_context) { g_signal_emit_by_name(priv->run_context, "start-iterated-test", priv->start_iterated_test->iterated_test, priv->start_iterated_test->test_context); } if (priv->start_iterated_test->iterated_test) DROP_TEST(priv); if (priv->start_iterated_test->test_context) DROP_TEST_CONTEXT(priv); start_iterated_test_free(priv->start_iterated_test); priv->start_iterated_test = NULL; } static void end_pass_assertion (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->pass_assertion) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "pass-assertion", priv->pass_assertion->test, priv->pass_assertion->test_context); if (priv->pass_assertion->test) DROP_TEST(priv); if (priv->pass_assertion->test_context) DROP_TEST_CONTEXT(priv); pass_assertion_free(priv->pass_assertion); priv->pass_assertion = NULL; } static void end_test_result (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->test_result) return; if (priv->run_context) { CutTestResult *result; CutTestResultStatus status; const gchar *signal_name; gchar *full_signal_name; result = priv->test_result->result; status = cut_test_result_get_status(result); signal_name = cut_test_result_status_to_signal_name(status); full_signal_name = g_strdup_printf("%s-test", signal_name); g_signal_emit_by_name(priv->run_context, full_signal_name, priv->test_result->test, priv->test_result->test_context, result); g_free(full_signal_name); } if (priv->test_result->test) DROP_TEST(priv); if (priv->test_result->test_context) DROP_TEST_CONTEXT(priv); test_result_free(priv->test_result); priv->test_result = NULL; priv->result = NULL; } static void end_complete_iterated_test (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->complete_iterated_test) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "complete-iterated-test", priv->complete_iterated_test->iterated_test, priv->complete_iterated_test->test_context, priv->complete_success); if (priv->complete_iterated_test->iterated_test) DROP_TEST(priv); if (priv->complete_iterated_test->test_context) DROP_TEST_CONTEXT(priv); complete_iterated_test_free(priv->complete_iterated_test); priv->complete_iterated_test = NULL; } static void end_complete_test (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->complete_test) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "complete-test", priv->complete_test->test, priv->complete_test->test_context, priv->complete_success); if (priv->complete_test->test) DROP_TEST(priv); if (priv->complete_test->test_context) DROP_TEST_CONTEXT(priv); complete_test_free(priv->complete_test); priv->complete_test = NULL; priv->complete_success = TRUE; } static void end_test_iterator_result (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->test_iterator_result) return; if (priv->run_context) { CutTestResult *result; CutTestResultStatus status; const gchar *signal_name; gchar *full_signal_name; result = priv->test_iterator_result->result; status = cut_test_result_get_status(result); signal_name = cut_test_result_status_to_signal_name(status); full_signal_name = g_strdup_printf("%s-test-iterator", signal_name); g_signal_emit_by_name(priv->run_context, full_signal_name, priv->test_iterator_result->test_iterator, priv->test_iterator_result->result); g_free(full_signal_name); } if (priv->test_iterator_result->test_iterator) DROP_TEST_ITERATOR(priv); test_iterator_result_free(priv->test_iterator_result); priv->test_iterator_result = NULL; g_object_unref(priv->result); priv->result = NULL; } static void end_complete_test_iterator (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { CutTestIterator *test_iterator; test_iterator = POP_TEST_ITERATOR(priv); if (!test_iterator) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "complete-test-iterator", test_iterator, priv->complete_success); g_object_unref(test_iterator); priv->complete_success = TRUE; } static void end_test_case_result (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { if (!priv->test_case_result) return; if (priv->run_context) { CutTestResult *result; CutTestResultStatus status; const gchar *signal_name; gchar *full_signal_name; result = priv->test_case_result->result; status = cut_test_result_get_status(result); signal_name = cut_test_result_status_to_signal_name(status); full_signal_name = g_strdup_printf("%s-test-case", signal_name); g_signal_emit_by_name(priv->run_context, full_signal_name, priv->test_case_result->test_case, priv->test_case_result->result); g_free(full_signal_name); } if (priv->test_case_result->test_case) DROP_TEST_CASE(priv); test_case_result_free(priv->test_case_result); priv->test_case_result = NULL; g_object_unref(priv->result); priv->result = NULL; } static void end_complete_test_case (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { CutTestCase *test_case; test_case = POP_TEST_CASE(priv); if (!test_case) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "complete-test-case", test_case, priv->complete_success); g_object_unref(test_case); priv->complete_success = TRUE; } static void end_complete_test_suite (CutStreamParser *parser, CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *element_name, GError **error) { CutTestSuite *test_suite; test_suite = POP_TEST_SUITE(priv); if (!test_suite) return; if (priv->run_context) g_signal_emit_by_name(priv->run_context, "complete-test-suite", test_suite, priv->complete_success); g_object_unref(test_suite); priv->complete_success = TRUE; } static void end_element_handler (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { CutStreamParser *parser = user_data; CutStreamParserPrivate *priv; const gchar *parent_name; ParseState state; priv = CUT_STREAM_PARSER_GET_PRIVATE(parser); parent_name = get_parent_element(priv, context); state = POP_STATE(priv); switch (state) { case IN_TOP_LEVEL_RESULT: end_top_level_result(parser, priv, context, element_name, error); break; case IN_STREAM: end_stream(parser, priv, context, element_name, error); break; case IN_RESULT: end_result(parser, priv, context, element_name, error); break; case IN_TEST_CONTEXT: end_test_context(parser, priv, context, element_name, error); break; case IN_TEST_OPTION: end_test_option(parser, priv, context, element_name, error); break; case IN_RESULT_BACKTRACE: end_result_backtrace(parser, priv, context, element_name, error); break; case IN_RESULT_BACKTRACE_ENTRY: end_result_backtrace_entry(parser, priv, context, element_name, error); break; case IN_READY_TEST_SUITE: end_ready_test_suite(parser, priv, context, element_name, error); break; case IN_START_TEST_SUITE: end_start_test_suite(parser, priv, context, element_name, error); break; case IN_READY_TEST_CASE: end_ready_test_case(parser, priv, context, element_name, error); break; case IN_START_TEST_CASE: end_start_test_case(parser, priv, context, element_name, error); break; case IN_READY_TEST_ITERATOR: end_ready_test_iterator(parser, priv, context, element_name, error); break; case IN_START_TEST_ITERATOR: end_start_test_iterator(parser, priv, context, element_name, error); break; case IN_START_TEST: end_start_test(parser, priv, context, element_name, error); break; case IN_START_ITERATED_TEST: end_start_iterated_test(parser, priv, context, element_name, error); break; case IN_PASS_ASSERTION: end_pass_assertion(parser, priv, context, element_name, error); break; case IN_TEST_RESULT: end_test_result(parser, priv, context, element_name, error); break; case IN_COMPLETE_ITERATED_TEST: end_complete_iterated_test(parser, priv, context, element_name, error); break; case IN_COMPLETE_TEST: end_complete_test(parser, priv, context, element_name, error); break; case IN_TEST_ITERATOR_RESULT: end_test_iterator_result(parser, priv, context, element_name, error); break; case IN_COMPLETE_TEST_ITERATOR: end_complete_test_iterator(parser, priv, context, element_name, error); break; case IN_TEST_CASE_RESULT: end_test_case_result(parser, priv, context, element_name, error); break; case IN_COMPLETE_TEST_CASE: end_complete_test_case(parser, priv, context, element_name, error); break; case IN_COMPLETE_TEST_SUITE: end_complete_test_suite(parser, priv, context, element_name, error); break; default: break; } g_free(g_queue_pop_tail(priv->element_stack)); } static CutTestResultStatus result_name_to_status (const gchar *name) { if (g_str_equal(name, "success")) return CUT_TEST_RESULT_SUCCESS; else if (g_str_equal(name, "failure")) return CUT_TEST_RESULT_FAILURE; else if (g_str_equal(name, "error")) return CUT_TEST_RESULT_ERROR; else if (g_str_equal(name, "pending")) return CUT_TEST_RESULT_PENDING; else if (g_str_equal(name, "notification")) return CUT_TEST_RESULT_NOTIFICATION; else if (g_str_equal(name, "omission")) return CUT_TEST_RESULT_OMISSION; else if (g_str_equal(name, "crash")) return CUT_TEST_RESULT_CRASH; return CUT_TEST_RESULT_INVALID; } static gboolean is_integer (const gchar *str) { gint i = 0; if (!str) return FALSE; while (str[i]) { if (!g_ascii_isdigit(str[i])) return FALSE; i++; } return TRUE; } static gboolean is_boolean (const gchar *str) { if (!str) return FALSE; return g_ascii_strcasecmp(str, "true") == 0 || g_ascii_strcasecmp(str, "false") == 0; } static gboolean string_to_boolean (const gchar *string) { return g_ascii_strcasecmp("true", string) == 0; } static CutTest * target_test_object (CutStreamParserPrivate *priv, ParseState parent_state) { CutTest *target = NULL; switch (parent_state) { case IN_TEST_SUITE: target = CUT_TEST(PEEK_TEST_SUITE(priv)); break; case IN_TEST_CASE: target = CUT_TEST(PEEK_TEST_CASE(priv)); break; case IN_TEST_ITERATOR: target = CUT_TEST(PEEK_TEST_ITERATOR(priv)); break; case IN_TEST: case IN_ITERATED_TEST: target = PEEK_TEST(priv); break; default: break; } return target; } static void text_test_name (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { CutTest *target; target = target_test_object(priv, PEEK_NTH_STATE(priv, 1)); if (target) { cut_test_set_name(target, text); } else { set_parse_error(priv, context, error, "can't find test name target"); } } static void text_test_description (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { CutTest *target; target = target_test_object(priv, PEEK_NTH_STATE(priv, 1)); if (target) { cut_test_set_attribute(target, "description", text); } else { set_parse_error(priv, context, error, "can't find test description target"); } } static void text_test_option_name (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (priv->option_name) { set_parse_error(priv, context, error, "multiple option name: %s", text); } else { priv->option_name = g_strdup(text); } } static void text_test_option_value (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (priv->option_value) { set_parse_error(priv, context, error, "multiple option value: %s", text); } else { priv->option_value = g_strdup(text); } } static void text_test_start_time (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { CutTest *target; target = target_test_object(priv, PEEK_NTH_STATE(priv, 1)); if (target) { GTimeVal start_time; if (g_time_val_from_iso8601(text, &start_time)) { cut_test_set_start_time(target, &start_time); } else { set_parse_error(priv, context, error, "invalid start-time value (not ISO 8601 format): %s", text); } } else { set_parse_error(priv, context, error, "can't find test start time target"); } } static void text_test_elapsed (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { CutTest *target; target = target_test_object(priv, PEEK_NTH_STATE(priv, 1)); if (target) { gdouble elapsed; gchar *end_position; elapsed = g_ascii_strtod(text, &end_position); if (text != end_position && end_position[0] == '\0') { cut_test_set_elapsed(target, elapsed); } else { set_parse_error(priv, context, error, "invalid elapsed value: %s", text); } } else { set_parse_error(priv, context, error, "can't find test elapsed target"); } } static void text_result_status (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { CutTestResultStatus status; status = result_name_to_status(text); if (status == CUT_TEST_RESULT_INVALID) { set_parse_error(priv, context, error, "invalid status: %s", text); } else { cut_test_result_set_status(priv->result, status); } } static void text_result_detail (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { cut_test_result_set_message(priv->result, text); } static void text_result_backtrace_entry_file (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { cut_backtrace_entry_set_file(priv->backtrace_entry, text); } static void text_result_backtrace_entry_line (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (is_integer(text)) { cut_backtrace_entry_set_line(priv->backtrace_entry, atoi(text)); } else { set_parse_error(priv, context, error, "invalid line number: %s", text); } } static void text_result_backtrace_entry_info (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { const gchar *info_start; info_start = strstr(text, "():"); if (info_start) { gchar *function; function = g_strndup(text, info_start - text); info_start += strlen("():"); while (info_start[0] && info_start[0] == ' ') info_start++; cut_backtrace_entry_set_function(priv->backtrace_entry, function); cut_backtrace_entry_set_info(priv->backtrace_entry, info_start); g_free(function); } else if (g_str_has_suffix(text, "()")) { gchar *function; function = g_strndup(text, strlen(text) - 2); cut_backtrace_entry_set_function(priv->backtrace_entry, function); g_free(function); } else { cut_backtrace_entry_set_info(priv->backtrace_entry, text); } } static void text_result_start_time (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { GTimeVal start_time; if (g_time_val_from_iso8601(text, &start_time)) { cut_test_result_set_start_time(priv->result, &start_time); } else { set_parse_error(priv, context, error, "invalid start-time value (not ISO 8601 format): %s", text); } } static void text_result_elapsed (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { gdouble elapsed; gchar *end_position; elapsed = g_ascii_strtod(text, &end_position); if (text != end_position && end_position[0] == '\0') { cut_test_result_set_elapsed(priv->result, elapsed); } else { set_parse_error(priv, context, error, "invalid elapsed value: %s", text); } } static void text_ready_test_suite_n_test_cases (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (is_integer(text)) { priv->ready_test_suite->n_test_cases = atoi(text); } else { set_parse_error(priv, context, error, "invalid # of test cases: %s", text); } } static void text_ready_test_suite_n_tests (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (is_integer(text)) { priv->ready_test_suite->n_tests = atoi(text); } else { set_parse_error(priv, context, error, "invalid # of tests: %s", text); } } static void text_ready_test_case_n_tests (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (is_integer(text)) { priv->ready_test_case->n_tests = atoi(text); } else { set_parse_error(priv, context, error, "invalid # of tests: %s", text); } } static void text_ready_test_iterator_n_tests (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (is_integer(text)) { priv->ready_test_iterator->n_tests = atoi(text); } else { set_parse_error(priv, context, error, "invalid # of tests: %s", text); } } static void text_test_data_name (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { CutTestData *test_data; test_data = PEEK_TEST_DATA(priv); cut_test_data_set_name(test_data, text); } static void text_test_context_failed (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (is_boolean(text)) { cut_test_context_set_failed(PEEK_TEST_CONTEXT(priv), string_to_boolean(text)); } else { set_parse_error(priv, context, error, "invalid boolean value: %s", text); } } static void text_complete_success (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (is_boolean(text)) { priv->complete_success = string_to_boolean(text); } else { set_parse_error(priv, context, error, "invalid boolean value: %s", text); } } static void text_stream_success (CutStreamParserPrivate *priv, GMarkupParseContext *context, const gchar *text, gsize text_len, GError **error) { if (is_boolean(text)) { priv->stream_success = string_to_boolean(text); } else { set_parse_error(priv, context, error, "invalid boolean value: %s", text); } } static void text_handler (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { CutStreamParser *parser = user_data; CutStreamParserPrivate *priv; const gchar *element; ParseState state; priv = CUT_STREAM_PARSER_GET_PRIVATE(parser); element = g_markup_parse_context_get_element(context); state = PEEK_STATE(priv); switch (state) { case IN_TEST_NAME: text_test_name(priv, context, text, text_len, error); break; case IN_TEST_DESCRIPTION: text_test_description(priv, context, text, text_len, error); break; case IN_TEST_OPTION_NAME: text_test_option_name(priv, context, text, text_len, error); break; case IN_TEST_OPTION_VALUE: text_test_option_value(priv, context, text, text_len, error); break; case IN_TEST_START_TIME: text_test_start_time(priv, context, text, text_len, error); break; case IN_TEST_ELAPSED: text_test_elapsed(priv, context, text, text_len, error); break; case IN_RESULT_STATUS: text_result_status(priv, context, text, text_len, error); break; case IN_RESULT_DETAIL: text_result_detail(priv, context, text, text_len, error); break; case IN_RESULT_BACKTRACE_ENTRY_FILE: text_result_backtrace_entry_file(priv, context, text, text_len, error); break; case IN_RESULT_BACKTRACE_ENTRY_LINE: text_result_backtrace_entry_line(priv, context, text, text_len, error); break; case IN_RESULT_BACKTRACE_ENTRY_INFO: text_result_backtrace_entry_info(priv, context, text, text_len, error); break; case IN_RESULT_START_TIME: text_result_start_time(priv, context, text, text_len, error); break; case IN_RESULT_ELAPSED: text_result_elapsed(priv, context, text, text_len, error); break; case IN_READY_TEST_SUITE_N_TEST_CASES: text_ready_test_suite_n_test_cases(priv, context, text, text_len, error); break; case IN_READY_TEST_SUITE_N_TESTS: text_ready_test_suite_n_tests(priv, context, text, text_len, error); break; case IN_READY_TEST_CASE_N_TESTS: text_ready_test_case_n_tests(priv, context, text, text_len, error); break; case IN_READY_TEST_ITERATOR_N_TESTS: text_ready_test_iterator_n_tests(priv, context, text, text_len, error); break; case IN_TEST_DATA_NAME: text_test_data_name(priv, context, text, text_len, error); break; case IN_TEST_CONTEXT_FAILED: text_test_context_failed(priv, context, text, text_len, error); break; case IN_COMPLETE_SUCCESS: text_complete_success(priv, context, text, text_len, error); case IN_STREAM_SUCCESS: text_stream_success(priv, context, text, text_len, error); break; default: break; } } static void error_handler (GMarkupParseContext *context, GError *error, gpointer user_data) { /* should emit error signal to run_context? */ } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-listener.h0000644000175000017500000000441111205747026020753 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_LISTENER_H__ #define __CUT_LISTENER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_LISTENER (cut_listener_get_type ()) #define CUT_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_LISTENER, CutListener)) #define CUT_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_LISTENER, CutListenerClass)) #define CUT_IS_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_LISTENER)) #define CUT_IS_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_LISTENER)) #define CUT_LISTENER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), CUT_TYPE_LISTENER, CutListenerClass)) typedef struct _CutListenerClass CutListenerClass; struct _CutListenerClass { GTypeInterface base_iface; void (*attach_to_run_context) (CutListener *listener, CutRunContext *run_context); void (*detach_from_run_context) (CutListener *listener, CutRunContext *run_context); }; GType cut_listener_get_type (void) G_GNUC_CONST; void cut_listener_attach_to_run_context (CutListener *listener, CutRunContext *run_context); void cut_listener_detach_from_run_context(CutListener *listener, CutRunContext *run_context); G_END_DECLS #endif /* __CUT_LISTENER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-sequence-matcher.h0000644000175000017500000001500711424022512022347 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_SEQUENCE_MATCHER_H__ #define __CUT_SEQUENCE_MATCHER_H__ #include #include G_BEGIN_DECLS #define CUT_TYPE_SEQUENCE_MATCHER (cut_sequence_matcher_get_type ()) #define CUT_SEQUENCE_MATCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_SEQUENCE_MATCHER, CutSequenceMatcher)) #define CUT_SEQUENCE_MATCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_SEQUENCE_MATCHER, CutSequenceMatcherClass)) #define CUT_IS_SEQUENCE_MATCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_SEQUENCE_MATCHER)) #define CUT_IS_SEQUENCE_MATCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_SEQUENCE_MATCHER)) #define CUT_SEQUENCE_MATCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_SEQUENCE_MATCHER, CutSequenceMatcherClass)) typedef struct _CutSequenceMatcher CutSequenceMatcher; typedef struct _CutSequenceMatcherClass CutSequenceMatcherClass; typedef struct _CutSequenceMatchInfo CutSequenceMatchInfo; typedef struct _CutSequenceMatchOperation CutSequenceMatchOperation; typedef gboolean (*CutJunkFilterFunc) (gpointer data, gpointer user_data); typedef enum { CUT_SEQUENCE_MATCH_OPERATION_EQUAL, CUT_SEQUENCE_MATCH_OPERATION_INSERT, CUT_SEQUENCE_MATCH_OPERATION_DELETE, CUT_SEQUENCE_MATCH_OPERATION_REPLACE } CutSequenceMatchOperationType; struct _CutSequenceMatcher { GObject object; }; struct _CutSequenceMatcherClass { GObjectClass parent_class; }; struct _CutSequenceMatchInfo { guint from_index; guint to_index; guint size; }; struct _CutSequenceMatchOperation { CutSequenceMatchOperationType type; guint from_begin; guint from_end; guint to_begin; guint to_end; }; CutSequenceMatchInfo *cut_sequence_match_info_new(guint begin, guint end, guint size); void cut_sequence_match_info_free (CutSequenceMatchInfo *info); CutSequenceMatchOperation *cut_sequence_match_operation_new (CutSequenceMatchOperationType type, guint from_begin, guint from_end, guint to_begin, guint to_end); void cut_sequence_match_operation_free (CutSequenceMatchOperation *operation); GType cut_sequence_matcher_get_type(void) G_GNUC_CONST; CutSequenceMatcher *cut_sequence_matcher_new (GSequence *from, GSequence *to, GSequenceIterCompareFunc compare_func, gpointer compare_func_user_data, GHashFunc content_hash_func, GEqualFunc content_equal_func, CutJunkFilterFunc junk_filter_func, gpointer user_data); CutSequenceMatcher *cut_sequence_matcher_char_new(const gchar *from, const gchar *to); CutSequenceMatcher *cut_sequence_matcher_char_new_full (const gchar *from, const gchar *to, CutJunkFilterFunc junk_filter_func, gpointer junk_filter_func_user_data); CutSequenceMatcher *cut_sequence_matcher_string_new (gchar **from, gchar **to); CutSequenceMatcher *cut_sequence_matcher_string_new_full (gchar **from, gchar **to, CutJunkFilterFunc junk_filter_func, gpointer junk_filter_func_user_data); const GList *cut_sequence_matcher_get_to_index (CutSequenceMatcher *matcher, gpointer to_content); CutSequenceMatchInfo *cut_sequence_matcher_get_longest_match (CutSequenceMatcher *matcher, guint from_begin, guint from_end, guint to_begin, guint to_end); const GList *cut_sequence_matcher_get_matches (CutSequenceMatcher *matcher); const GList *cut_sequence_matcher_get_blocks (CutSequenceMatcher *matcher); const GList *cut_sequence_matcher_get_operations (CutSequenceMatcher *matcher); const GList *cut_sequence_matcher_get_grouped_operations (CutSequenceMatcher *matcher); gdouble cut_sequence_matcher_get_ratio (CutSequenceMatcher *matcher); guint cut_sequence_matcher_get_context_size (CutSequenceMatcher *matcher); void cut_sequence_matcher_set_context_size (CutSequenceMatcher *matcher, guint context_size); G_END_DECLS #endif /* __CUT_SEQUENCE_MATCHER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-listener-utils.h0000644000175000017500000001104311205747026022110 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUT_LISTENER_UTILS_H__ #define __CUT_LISTENER_UTILS_H__ #include #include "cut-utils.h" G_BEGIN_DECLS #ifdef G_OS_WIN32 # define CUT_DEFINE_ADDITIONAL_LISTENER_VARIABLES(name) \ static gchar *win32_ ## name ## _module_dir = NULL; # define CUT_LISTENER_RETURN_DEFAULT_MODULE_DIR(name, NAME) do \ { \ if (!win32_ ## name ## _module_dir) \ win32_ ## name ## _module_dir = \ cut_win32_build_module_dir_name(#name); \ return win32_ ## name ## _module_dir; \ } while (0) #else # define CUT_DEFINE_ADDITIONAL_LISTENER_VARIABLES(name) # define CUT_LISTENER_RETURN_DEFAULT_MODULE_DIR(name, NAME) \ return NAME ## _MODULEDIR #endif #define CUT_DEFINE_LISTENER_MODULE(name, NAME) \ static GList *name ## s = NULL; \ static gchar *name ## _module_dir = NULL; \ CUT_DEFINE_ADDITIONAL_LISTENER_VARIABLES(name) \ \ static const gchar * \ _cut_ ## name ## _module_dir (void) \ { \ const gchar *dir; \ \ if (name ## _module_dir) \ return name ## _module_dir; \ \ dir = g_getenv("CUT_" #NAME "_MODULE_DIR"); \ if (dir) \ return dir; \ \ CUT_LISTENER_RETURN_DEFAULT_MODULE_DIR(name, NAME); \ } \ \ static CutModule * \ cut_ ## name ## _load_module (const gchar *name) \ { \ CutModule *module; \ \ module = cut_module_find(name ## s, name); \ if (module) \ return module; \ \ module = cut_module_load_module(_cut_ ## name ## _module_dir(), \ name); \ if (module) { \ if (g_type_module_use(G_TYPE_MODULE(module))) { \ name ## s = g_list_prepend(name ## s, module); \ g_type_module_unuse(G_TYPE_MODULE(module)); \ } \ } \ \ return module; \ } G_END_DECLS #endif /* __CUT_LISTENER_UTILS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cutter/cut-analyzer.c0000644000175000017500000000772411407320456020756 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "cut-analyzer.h" #include "cut-file-stream-reader.h" #define CUT_ANALYZER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), CUT_TYPE_ANALYZER, CutAnalyzerPrivate)) typedef struct _CutAnalyzerPrivate CutAnalyzerPrivate; struct _CutAnalyzerPrivate { GList *run_contexts; }; G_DEFINE_TYPE(CutAnalyzer, cut_analyzer, G_TYPE_OBJECT) static void dispose (GObject *object); static void cut_analyzer_class_init (CutAnalyzerClass *klass) { GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; g_type_class_add_private(gobject_class, sizeof(CutAnalyzerPrivate)); } static void cut_analyzer_init (CutAnalyzer *analyzer) { CutAnalyzerPrivate *priv = CUT_ANALYZER_GET_PRIVATE(analyzer); priv->run_contexts = FALSE; } static void dispose (GObject *object) { CutAnalyzerPrivate *priv = CUT_ANALYZER_GET_PRIVATE(object); if (priv->run_contexts) { g_list_foreach(priv->run_contexts, (GFunc)g_object_unref, NULL); g_list_free(priv->run_contexts); priv->run_contexts = NULL; } G_OBJECT_CLASS(cut_analyzer_parent_class)->dispose(object); } CutAnalyzer * cut_analyzer_new (void) { return g_object_new(CUT_TYPE_ANALYZER, NULL); } static void error_cb (CutRunContext *context, GError *error, gpointer user_data) { GError **user_error = user_data; *user_error = g_error_copy(error); } gboolean cut_analyzer_analyze (CutAnalyzer *analyzer, const gchar *log_directory, GError **error) { CutAnalyzerPrivate *priv; GDir *log_dir; const gchar *name; GList *names = NULL; GList *node; gboolean success =TRUE; priv = CUT_ANALYZER_GET_PRIVATE(analyzer); log_dir = g_dir_open(log_directory, 0, error); if (!log_dir) return FALSE; while ((name = g_dir_read_name(log_dir))) { if (g_regex_match_simple("^\\d{4}(?:-\\d{2}){5}\\.xml$", name, 0, 0)) { gchar *file_name; file_name = g_build_filename(log_directory, name, NULL); names = g_list_prepend(names, file_name); } } g_dir_close(log_dir); names = g_list_reverse(g_list_sort(names, (GCompareFunc)g_utf8_collate)); for (node = names; node && success; node = g_list_next(node)) { gchar *file_name = node->data; CutRunContext *reader; GError *local_error = NULL; reader = cut_file_stream_reader_new(file_name); g_signal_connect(reader, "error", G_CALLBACK(error_cb), &local_error); priv->run_contexts = g_list_append(priv->run_contexts, reader); cut_run_context_start(reader); if (local_error) { success = FALSE; g_propagate_error(error, local_error); } } if (names) { g_list_foreach(names, (GFunc)g_free, NULL); g_list_free(names); } return success; } const GList * cut_analyzer_get_run_contexts (CutAnalyzer *analyzer) { return CUT_ANALYZER_GET_PRIVATE(analyzer)->run_contexts; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/config/0000755000175000017500000000000011525707410016121 5ustar koukoucutter-testing-framework-1.1.7/config/config.sub0000755000175000017500000010224011205747062020105 0ustar koukou#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2009-04-17' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 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) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -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 \ | 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 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; 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-* \ | 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-* \ | 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-* \ | 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 ;; 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 ;; 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. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -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*) # 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 ;; -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: cutter-testing-framework-1.1.7/config/install-sh0000755000175000017500000003246411205747062020140 0ustar koukou#!/bin/sh # install - install a program, script, or datafile scriptversion=2006-12-25.00 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. 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-end: "$" # End: cutter-testing-framework-1.1.7/config/ltmain.sh0000755000175000017500000073337711345735714020000 0ustar koukou# Generated from ltmain.m4sh. # ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 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. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print informational messages (default) # --version print version information # -h, --help print short or long help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=ltmain.sh PACKAGE=libtool VERSION="2.2.6b Debian-2.2.6b-2" TIMESTAMP="" package_revision=1.3017 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs 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 BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # NLS nuisances: We save the old values to restore during execute mode. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done $lt_unset CDPATH : ${CP="cp -f"} : ${ECHO="echo"} : ${EGREP="/bin/grep -E"} : ${FGREP="/bin/grep -F"} : ${GREP="/bin/grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="/bin/sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # Generated shell functions inserted here. # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: # In the unlikely event $progname began with a '-', it would play havoc with # func_echo (imagine progname=-n), so we prepend ./ in that case: func_dirname_and_basename "$progpath" progname=$func_basename_result case $progname in -*) progname=./$progname ;; esac # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname${mode+: }$mode: $*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` done my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "X$my_tmpdir" | $Xsed } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "X$1" | $Xsed \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_version # Echo version message to standard output and exit. func_version () { $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $SED -n '/^# Usage:/,/# -h/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" $ECHO $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help # Echo long help message to standard output and exit. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p }' < "$progpath" exit $? } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1" exit_cmd=exit } exit_cmd=: # Check that we have a working $ECHO. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then # Yippee, $ECHO works! : else # Restart under the correct shell, and then maybe $ECHO will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 in # Valid mode arguments: clean) ;; compile) ;; execute) ;; finish) ;; install) ;; link) ;; relink) ;; uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } ## ----------- ## ## Main. ## ## ----------- ## $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$mode' for more information." } # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case "$@ " in " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command="$command -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$mode'" ;; esac $ECHO $ECHO "Try \`$progname --help' for more information about other modes." exit $? } # Now that we've collected a possible --mode arg, show help if necessary $opt_help && func_mode_help # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_quote_for_eval "$file" args="$args $func_quote_for_eval_result" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" $ECHO "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS $ECHO "X----------------------------------------------------------------------" | $Xsed $ECHO "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done $ECHO $ECHO "If you ever happen to want to link against installed libraries" $ECHO "in a given directory, LIBDIR, you must either use libtool, and" $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" $ECHO "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" $ECHO " during execution" fi if test -n "$runpath_var"; then $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" $ECHO " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $ECHO $ECHO "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" $ECHO "pages." ;; *) $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac $ECHO "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS } test "$mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $ECHO "X$nonopt" | $GREP shtool >/dev/null; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog="$install_prog$func_quote_for_eval_result" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_prog $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" fi $ECHO >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; " case $host in *cygwin* | *mingw* | *cegcc* ) $ECHO >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ extern $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags="$symtab_cflags $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper_part1 [arg=no] # # Emit the first part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part1 () { func_emit_wrapper_part1_arg1=no if test -n "$1" ; then func_emit_wrapper_part1_arg1=$1 fi $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs 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 BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then ECHO=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then # Yippee, \$ECHO works! : else # Restart under the correct shell, and then maybe \$ECHO will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $ECHO "\ # Find the directory that this script lives in. thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done " } # end: func_emit_wrapper_part1 # func_emit_wrapper_part2 [arg=no] # # Emit the second part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part2 () { func_emit_wrapper_part2_arg1=no if test -n "$1" ; then func_emit_wrapper_part2_arg1=$1 fi $ECHO "\ # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # end: func_emit_wrapper_part2 # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=no if test -n "$1" ; then func_emit_wrapper_arg1=$1 fi # split this up so that func_emit_cwrapperexe_src # can call each part independently. func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_path_tmp1=`( cmd //c echo "$1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_tmp1=`cygpath -w "$1"` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result="" fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # Path separators are also converted from $build format to # $host format. If ARG begins or ends with a path separator # character, it is preserved (but converted to $host format) # on output. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_to_host_pathlist_tmp2="$1" # Once set for this call, this variable should not be # reassigned. It is used in tha fallback case. func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e 's|^:*||' -e 's|:*$||'` case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" fi fi fi IFS=: done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result" ; then func_error "Could not determine the host path(s) corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" ;; esac ;; esac fi } # end: func_to_host_pathlist # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include # define setmode _setmode #else # include # include # ifdef __CYGWIN__ # include # define HAVE_SETENV # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif # endif #endif #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif #ifdef _MSC_VER # define S_IXUSR _S_IEXEC # define stat _stat # ifndef _INTPTR_T_DEFINED # define intptr_t int # endif #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifdef __CYGWIN__ # define FOPEN_WB "wb" #endif #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #undef LTWRAPPER_DEBUGPRINTF #if defined DEBUGWRAPPER # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args static void ltwrapper_debugprintf (const char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } #else # define LTWRAPPER_DEBUGPRINTF(args) #endif const char *program_name = NULL; void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_fatal (const char *message, ...); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_opt_process_env_set (const char *arg); void lt_opt_process_env_prepend (const char *arg); void lt_opt_process_env_append (const char *arg); int lt_split_name_value (const char *arg, char** name, char** value); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); static const char *script_text_part1 = EOF func_emit_wrapper_part1 yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ "/' -e 's/$/\\n"/' echo ";" cat <"))); for (i = 0; i < newargc; i++) { LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", tmp_pathspec)); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { char *errstr = strerror (errno); lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal ("Could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } void lt_setenv (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", (name ? name : ""), (value ? value : ""))); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } int lt_split_name_value (const char *arg, char** name, char** value) { const char *p; int len; if (!arg || !*arg) return 1; p = strchr (arg, (int)'='); if (!p) return 1; *value = xstrdup (++p); len = strlen (arg) - strlen (*value); *name = XMALLOC (char, len); strncpy (*name, arg, len-1); (*name)[len - 1] = '\0'; return 0; } void lt_opt_process_env_set (const char *arg) { char *name = NULL; char *value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); } lt_setenv (name, value); XFREE (name); XFREE (value); } void lt_opt_process_env_prepend (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); } new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_opt_process_env_append (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); } new_value = lt_extend_str (getenv (name), value, 1); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_update_exe_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF } # end: func_emit_cwrapperexe_src # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs="$deplibs $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname '-L' '' "$arg" dir=$func_stripname_result if test -z "$dir"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$linker_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$deplibs $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $ECHO $ECHO "*** Warning: Trying to link with static lib archive $deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because the file extensions .$libext of this argument makes me believe" $ECHO "*** that it is just a static archive that I should not use here." else $ECHO $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath="$temp_rpath$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then $ECHO if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $ECHO $ECHO "*** And there doesn't seem to be a static archive available" $ECHO "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $ECHO $ECHO "*** Warning: This system can not link to static lib archive $lib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $ECHO "*** But as you try to build a module library, libtool will still create " $ECHO "*** a static module, that should work as long as the dlopening application" $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_dirname "$deplib" "" "." dir="$func_dirname_result" # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else $ECHO $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` done fi if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | $GREP . >/dev/null; then $ECHO if test "X$deplibs_check_method" = "Xnone"; then $ECHO "*** Warning: inter-library dependencies are not supported in this platform." else $ECHO "*** Warning: inter-library dependencies are not known to be supported." fi $ECHO "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $ECHO $ECHO "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" $ECHO "*** a static module, that should work as long as the dlopening" $ECHO "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $ECHO "*** The inter-library dependencies that have been dropped here will be" $ECHO "*** automatically added whenever a program is linked with this library" $ECHO "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $ECHO $ECHO "*** Since this library must not contain undefined symbols," $ECHO "*** because either the platform does not support them or" $ECHO "*** it was explicitly requested with -no-undefined," $ECHO "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles="$delfiles $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$ECHO "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" $ECHO 'INPUT (' > $output for obj in $save_libobjs do $ECHO "$obj" >> $output done $ECHO ')' >> $output delfiles="$delfiles $output" elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=$obj func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$delfiles $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *cegcc) # Disable wrappers for cegcc, we are cross compiling anyway. wrappers_required=no ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $ECHO for shipping. if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$oldobjs $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else $ECHO "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$newdlfiles $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles="$newdlprefiles $libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$mode" = link || test "$mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles="$rmfiles $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 cutter-testing-framework-1.1.7/config/depcomp0000755000175000017500000004271311205747062017507 0ustar koukou#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2007-03-29.01 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 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, 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 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 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 $1 != '--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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: cutter-testing-framework-1.1.7/config/config.guess0000755000175000017500000013226411205747062020453 0ustar koukou#! /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 # Free Software Foundation, Inc. timestamp='2009-04-27' # 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 to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 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 __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *: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: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 __LP64__ >/dev/null 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*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd | genuineintel) 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 ;; 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 ;; 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 ;; 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:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu 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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; padre:Linux:*:*) echo sparc-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 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-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:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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.0*:*) 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.0*:*) 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 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: cutter-testing-framework-1.1.7/config/missing0000755000175000017500000002557711205747062017542 0ustar koukou#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2006-05-10.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 # 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, 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. 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] 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 # 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). 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 $1 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 1 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-end: "$" # End: cutter-testing-framework-1.1.7/USERS0000644000175000017500000000231011400065250015463 0ustar koukou# -*- rd -*- = Users --- Projects and developers that use Cutter == List * (()): self test. * (()): full-text search engine. * (()): full-text search engine and column store. * (()): a MySQL pluggable storage engine for groonga. * (()): a milter to use milters effectively. * (()): a browser. * (()): a GTK+ widget library to use HTML rendering engine of Internet Explorer. * (()): a GUI tool for setting various pointing devices. * (()): Based on (()), Open Source Near Field Communication (NFC) Library, this project intent to provide useful tools for POSIX compliant operating systems. # * (()): # PDF rendering library. # cutter-testing-framework-1.1.7/USERS.ja0000644000175000017500000000275111400065250016065 0ustar koukou# -*- rd -*- = 利用者 --- Cutterを使っているプロジェクト・開発者 == 一覧 * (()): セルフテスト * (()): 全文検索エンジン * (()): 全文検索エンジンとカラムストア * (()): バックエンドにgroongaを使うMySQLのストレージエンジン * (()): milterを効果的に使うためのmilter * ((<風博士|URL:http://kazehakase.sourceforge.jp/ja/>)): ブラウザ * (()): インターネットエクスプローラのHTMLレンダリングエンジンを 使うためのGTK+用のウィジェットライブラリ * (()): ポインティングデバイスを設定するためのGUIツール * (()): オープンソース近距離無線通信(NFC)ライブラリ (())を用いた、POSIX準 拠OS用の便利なツールを提供するプロジェクト。 # * (()): PDF # レンダリングライブラリ * ((<海野さん|URL:http://uhideyuki.sakura.ne.jp/uDiary/?category=Cutter>)) cutter-testing-framework-1.1.7/yum/0000755000175000017500000000000011525707422015471 5ustar koukoucutter-testing-framework-1.1.7/yum/Makefile.in0000644000175000017500000003356411525654637017562 0ustar koukou# 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@ 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@ subdir = yum DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SERVER_PATH = $(SF_USER),$(SF_PROJECT_ID)@$(SF_HTDOCS) DISTRIBUTIONS = fedora centos ARCHITECTURES = i386 x86_64 CHROOT_BASE = /var/lib/chroot all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign yum/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign yum/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am release: remove-existing-packages build sign update upload remove-existing-packages: for distribution in $(DISTRIBUTIONS); do \ find $${distribution} -not -path '*/.svn/*' \ -name "*.rpm" -delete; \ done sign: ./sign-rpm.sh '$(DISTRIBUTIONS)' update: ./update-repository.sh '$(DISTRIBUTIONS)' upload: for distribution in $(DISTRIBUTIONS); do \ rsync -avz --delete \ --exclude .gitignore --exclude .svn \ $${distribution}/ $(SERVER_PATH)/$${distribution}; \ done download: for distribution in $(DISTRIBUTIONS); do \ rsync -avz \ $(SERVER_PATH)/$${distribution}/ $${distribution}; \ done build: build-in-chroot build-repository-rpm build-in-chroot: ./build-in-chroot.sh \ $(PACKAGE) $(VERSION) $(CHROOT_BASE) \ '$(ARCHITECTURES)' '$(DISTRIBUTIONS)' build-repository-rpm: RPM-GPG-KEY-cutter ./build-repository-rpm.sh \ $(PACKAGE) '$(PACKAGE_TITLE)' '$(DISTRIBUTIONS)' RPM-GPG-KEY-cutter: ./gpg-public-key.sh > $@ # 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: cutter-testing-framework-1.1.7/yum/Makefile.am0000644000175000017500000000215011523751076017525 0ustar koukouSERVER_PATH = $(SF_USER),$(SF_PROJECT_ID)@$(SF_HTDOCS) DISTRIBUTIONS = fedora centos ARCHITECTURES = i386 x86_64 CHROOT_BASE = /var/lib/chroot release: remove-existing-packages build sign update upload remove-existing-packages: for distribution in $(DISTRIBUTIONS); do \ find $${distribution} -not -path '*/.svn/*' \ -name "*.rpm" -delete; \ done sign: ./sign-rpm.sh '$(DISTRIBUTIONS)' update: ./update-repository.sh '$(DISTRIBUTIONS)' upload: for distribution in $(DISTRIBUTIONS); do \ rsync -avz --delete \ --exclude .gitignore --exclude .svn \ $${distribution}/ $(SERVER_PATH)/$${distribution}; \ done download: for distribution in $(DISTRIBUTIONS); do \ rsync -avz \ $(SERVER_PATH)/$${distribution}/ $${distribution}; \ done build: build-in-chroot build-repository-rpm build-in-chroot: ./build-in-chroot.sh \ $(PACKAGE) $(VERSION) $(CHROOT_BASE) \ '$(ARCHITECTURES)' '$(DISTRIBUTIONS)' build-repository-rpm: RPM-GPG-KEY-cutter ./build-repository-rpm.sh \ $(PACKAGE) '$(PACKAGE_TITLE)' '$(DISTRIBUTIONS)' RPM-GPG-KEY-cutter: ./gpg-public-key.sh > $@ cutter-testing-framework-1.1.7/glib-compatible/0000755000175000017500000000000011525707411017707 5ustar koukoucutter-testing-framework-1.1.7/glib-compatible/gstring.c0000644000175000017500000000776611407320461021543 0ustar koukou/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ #define _GNU_SOURCE #include #include #include #include "gstring.h" #define MY_MAXSIZE ((gsize)-1) static inline gsize nearest_power (gsize base, gsize num) { if (num > MY_MAXSIZE / 2) { return MY_MAXSIZE; } else { gsize n = base; while (n < num) n <<= 1; return n; } } static void g_string_maybe_expand (GString* string, gsize len) { if (string->len + len >= string->allocated_len) { string->allocated_len = nearest_power (1, string->len + len + 1); string->str = g_realloc (string->str, string->allocated_len); } } /** * g_string_overwrite: * @string: a #GString * @pos: the position at which to start overwriting * @val: the string that will overwrite the @string starting at @pos * * Overwrites part of a string, lengthening it if necessary. * * Return value: @string * * Since: 2.14 **/ GString * g_string_overwrite (GString *string, gsize pos, const gchar *val) { g_return_val_if_fail (val != NULL, string); return g_string_overwrite_len (string, pos, val, strlen (val)); } /** * g_string_overwrite_len: * @string: a #GString * @pos: the position at which to start overwriting * @val: the string that will overwrite the @string starting at @pos * @len: the number of bytes to write from @val * * Overwrites part of a string, lengthening it if necessary. * This function will work with embedded nuls. * * Return value: @string * * Since: 2.14 **/ GString * g_string_overwrite_len (GString *string, gsize pos, const gchar *val, gssize len) { gsize end; g_return_val_if_fail (string != NULL, NULL); if (!len) return string; g_return_val_if_fail (val != NULL, string); g_return_val_if_fail (pos <= string->len, string); if (len < 0) len = strlen (val); end = pos + len; if (end > string->len) g_string_maybe_expand (string, end - string->len); memcpy (string->str + pos, val, len); if (end > string->len) { string->str[end] = '\0'; string->len = end; } return string; } /** * g_string_append_vprintf: * @string: a #GString * @format: the string format. See the printf() documentation * @args: the list of arguments to insert in the output * * Appends a formatted string onto the end of a #GString. * This function is is similar to g_string_append_printf() * except that the arguments to the format string are passed * as a va_list. * * Since: 2.14 */ void g_string_append_vprintf (GString *string, const gchar *format, va_list args) { gchar *buf; gint len; g_return_if_fail (string != NULL); g_return_if_fail (format != NULL); len = vasprintf (&buf, format, args); if (len >= 0) { g_string_maybe_expand (string, len); memcpy (string->str + string->len, buf, len + 1); string->len += len; g_free (buf); } } cutter-testing-framework-1.1.7/glib-compatible/gregex.h0000644000175000017500000001705011407320461021337 0ustar koukou/* GRegex -- regular expression API wrapper around PCRE. * * Copyright (C) 1999, 2000 Scott Wimer * Copyright (C) 2004, Matthias Clasen * Copyright (C) 2005 - 2007, Marco Barisione * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __G_REGEX_H__ #define __G_REGEX_H__ #include #include G_BEGIN_DECLS typedef enum { G_REGEX_ERROR_COMPILE, G_REGEX_ERROR_OPTIMIZE, G_REGEX_ERROR_REPLACE, G_REGEX_ERROR_MATCH } GRegexError; #define G_REGEX_ERROR g_regex_error_quark () GQuark g_regex_error_quark (void); /* Remember to update G_REGEX_COMPILE_MASK in gregex.c after * adding a new flag. */ typedef enum { G_REGEX_CASELESS = 1 << 0, G_REGEX_MULTILINE = 1 << 1, G_REGEX_DOTALL = 1 << 2, G_REGEX_EXTENDED = 1 << 3, G_REGEX_ANCHORED = 1 << 4, G_REGEX_DOLLAR_ENDONLY = 1 << 5, G_REGEX_UNGREEDY = 1 << 9, G_REGEX_RAW = 1 << 11, G_REGEX_NO_AUTO_CAPTURE = 1 << 12, G_REGEX_OPTIMIZE = 1 << 13, G_REGEX_DUPNAMES = 1 << 19, G_REGEX_NEWLINE_CR = 1 << 20, G_REGEX_NEWLINE_LF = 1 << 21, G_REGEX_NEWLINE_CRLF = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF } GRegexCompileFlags; /* Remember to update G_REGEX_MATCH_MASK in gregex.c after * adding a new flag. */ typedef enum { G_REGEX_MATCH_ANCHORED = 1 << 4, G_REGEX_MATCH_NOTBOL = 1 << 7, G_REGEX_MATCH_NOTEOL = 1 << 8, G_REGEX_MATCH_NOTEMPTY = 1 << 10, G_REGEX_MATCH_PARTIAL = 1 << 15, G_REGEX_MATCH_NEWLINE_CR = 1 << 20, G_REGEX_MATCH_NEWLINE_LF = 1 << 21, G_REGEX_MATCH_NEWLINE_CRLF = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_LF, G_REGEX_MATCH_NEWLINE_ANY = 1 << 22 } GRegexMatchFlags; typedef struct _GRegex GRegex; typedef struct _GMatchInfo GMatchInfo; typedef gboolean (*GRegexEvalCallback) (const GMatchInfo *match_info, GString *result, gpointer user_data); GRegex *g_regex_new (const gchar *pattern, GRegexCompileFlags compile_options, GRegexMatchFlags match_options, GError **error); GRegex *g_regex_ref (GRegex *regex); void g_regex_unref (GRegex *regex); const gchar *g_regex_get_pattern (const GRegex *regex); gint g_regex_get_max_backref (const GRegex *regex); gint g_regex_get_capture_count (const GRegex *regex); gint g_regex_get_string_number (const GRegex *regex, const gchar *name); gchar *g_regex_escape_string (const gchar *string, gint length); /* Matching. */ gboolean g_regex_match_simple (const gchar *pattern, const gchar *string, GRegexCompileFlags compile_options, GRegexMatchFlags match_options); gboolean g_regex_match (const GRegex *regex, const gchar *string, GRegexMatchFlags match_options, GMatchInfo **match_info); gboolean g_regex_match_full (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, GRegexMatchFlags match_options, GMatchInfo **match_info, GError **error); gboolean g_regex_match_all (const GRegex *regex, const gchar *string, GRegexMatchFlags match_options, GMatchInfo **match_info); gboolean g_regex_match_all_full (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, GRegexMatchFlags match_options, GMatchInfo **match_info, GError **error); /* String splitting. */ gchar **g_regex_split_simple (const gchar *pattern, const gchar *string, GRegexCompileFlags compile_options, GRegexMatchFlags match_options); gchar **g_regex_split (const GRegex *regex, const gchar *string, GRegexMatchFlags match_options); gchar **g_regex_split_full (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, GRegexMatchFlags match_options, gint max_tokens, GError **error); /* String replacement. */ gchar *g_regex_replace (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, const gchar *replacement, GRegexMatchFlags match_options, GError **error); gchar *g_regex_replace_literal (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, const gchar *replacement, GRegexMatchFlags match_options, GError **error); gchar *g_regex_replace_eval (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, GRegexMatchFlags match_options, GRegexEvalCallback eval, gpointer user_data, GError **error); gboolean g_regex_check_replacement (const gchar *replacement, gboolean *has_references, GError **error); /* Match info */ GRegex *g_match_info_get_regex (const GMatchInfo *match_info); const gchar *g_match_info_get_string (const GMatchInfo *match_info); void g_match_info_free (GMatchInfo *match_info); gboolean g_match_info_next (GMatchInfo *match_info, GError **error); gboolean g_match_info_matches (const GMatchInfo *match_info); gint g_match_info_get_match_count (const GMatchInfo *match_info); gboolean g_match_info_is_partial_match (const GMatchInfo *match_info); gchar *g_match_info_expand_references(const GMatchInfo *match_info, const gchar *string_to_expand, GError **error); gchar *g_match_info_fetch (const GMatchInfo *match_info, gint match_num); gboolean g_match_info_fetch_pos (const GMatchInfo *match_info, gint match_num, gint *start_pos, gint *end_pos); gchar *g_match_info_fetch_named (const GMatchInfo *match_info, const gchar *name); gboolean g_match_info_fetch_named_pos (const GMatchInfo *match_info, const gchar *name, gint *start_pos, gint *end_pos); gchar **g_match_info_fetch_all (const GMatchInfo *match_info); G_END_DECLS #endif /* __G_REGEX_H__ */ cutter-testing-framework-1.1.7/glib-compatible/gstring.h0000644000175000017500000000300011407320461021521 0ustar koukou/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ #include G_BEGIN_DECLS GString* g_string_overwrite (GString *string, gsize pos, const gchar *val); GString* g_string_overwrite_len (GString *string, gsize pos, const gchar *val, gssize len); void g_string_append_vprintf (GString *string, const gchar *format, va_list args); G_END_DECLS cutter-testing-framework-1.1.7/glib-compatible/glibintl.h0000644000175000017500000000127311407320461021662 0ustar koukou#ifndef __GLIBINTL_H__ #define __GLIBINTL_H__ #ifndef SIZEOF_CHAR #error "config.h must be included prior to glibintl.h" #endif #ifdef ENABLE_NLS gchar *_glib_gettext (const gchar *str) G_GNUC_FORMAT (1); #include #define _(String) _glib_gettext(String) #ifdef gettext_noop #define N_(String) gettext_noop(String) #else #define N_(String) (String) #endif #else /* NLS is disabled */ #define _(String) (String) #define N_(String) (String) #define textdomain(String) (String) #define gettext(String) (String) #define dgettext(Domain,String) (String) #define dcgettext(Domain,String,Type) (String) #define bindtextdomain(Domain,Directory) (Domain) #endif #endif /* __GLIBINTL_H__ */ cutter-testing-framework-1.1.7/glib-compatible/COPYING0000644000175000017500000006131411407320461020742 0ustar koukou GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library 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 Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey 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 library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! cutter-testing-framework-1.1.7/glib-compatible/glib-compatible.c0000644000175000017500000000245411407320461023105 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "glib-compatible.h" #if !GLIB_CHECK_VERSION(2, 14, 0) static void collect_hash_key (gpointer key, gpointer value, gpointer user_data) { GList **keys = user_data; *keys = g_list_append(*keys, key); } GList * gcompatible_hash_table_get_keys (GHashTable *hash_table) { GList *keys = NULL; g_hash_table_foreach(hash_table, collect_hash_key, &keys); return keys; } #endif /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/glib-compatible/gsequence.h0000644000175000017500000001601211407320461022032 0ustar koukou/* GLIB - Library of useful routines for C programming * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 * Soeren Sandmann (sandmann@daimi.au.dk) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #ifndef __G_SEQUENCE_H__ #define __G_SEQUENCE_H__ typedef struct _GSequence GSequence; typedef struct _GSequenceNode GSequenceIter; typedef gint (* GSequenceIterCompareFunc) (GSequenceIter *a, GSequenceIter *b, gpointer data); /* GSequence */ GSequence * g_sequence_new (GDestroyNotify data_destroy); void g_sequence_free (GSequence *seq); gint g_sequence_get_length (GSequence *seq); void g_sequence_foreach (GSequence *seq, GFunc func, gpointer user_data); void g_sequence_foreach_range (GSequenceIter *begin, GSequenceIter *end, GFunc func, gpointer user_data); void g_sequence_sort (GSequence *seq, GCompareDataFunc cmp_func, gpointer cmp_data); void g_sequence_sort_iter (GSequence *seq, GSequenceIterCompareFunc cmp_func, gpointer cmp_data); /* Getting iters */ GSequenceIter *g_sequence_get_begin_iter (GSequence *seq); GSequenceIter *g_sequence_get_end_iter (GSequence *seq); GSequenceIter *g_sequence_get_iter_at_pos (GSequence *seq, gint pos); GSequenceIter *g_sequence_append (GSequence *seq, gpointer data); GSequenceIter *g_sequence_prepend (GSequence *seq, gpointer data); GSequenceIter *g_sequence_insert_before (GSequenceIter *iter, gpointer data); void g_sequence_move (GSequenceIter *src, GSequenceIter *dest); void g_sequence_swap (GSequenceIter *a, GSequenceIter *b); GSequenceIter *g_sequence_insert_sorted (GSequence *seq, gpointer data, GCompareDataFunc cmp_func, gpointer cmp_data); GSequenceIter *g_sequence_insert_sorted_iter (GSequence *seq, gpointer data, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data); void g_sequence_sort_changed (GSequenceIter *iter, GCompareDataFunc cmp_func, gpointer cmp_data); void g_sequence_sort_changed_iter (GSequenceIter *iter, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data); void g_sequence_remove (GSequenceIter *iter); void g_sequence_remove_range (GSequenceIter *begin, GSequenceIter *end); void g_sequence_move_range (GSequenceIter *dest, GSequenceIter *begin, GSequenceIter *end); GSequenceIter *g_sequence_search (GSequence *seq, gpointer data, GCompareDataFunc cmp_func, gpointer cmp_data); GSequenceIter *g_sequence_search_iter (GSequence *seq, gpointer data, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data); /* Dereferencing */ gpointer g_sequence_get (GSequenceIter *iter); void g_sequence_set (GSequenceIter *iter, gpointer data); /* Operations on GSequenceIter * */ gboolean g_sequence_iter_is_begin (GSequenceIter *iter); gboolean g_sequence_iter_is_end (GSequenceIter *iter); GSequenceIter *g_sequence_iter_next (GSequenceIter *iter); GSequenceIter *g_sequence_iter_prev (GSequenceIter *iter); gint g_sequence_iter_get_position (GSequenceIter *iter); GSequenceIter *g_sequence_iter_move (GSequenceIter *iter, gint delta); GSequence * g_sequence_iter_get_sequence (GSequenceIter *iter); /* Search */ gint g_sequence_iter_compare (GSequenceIter *a, GSequenceIter *b); GSequenceIter *g_sequence_range_get_midpoint (GSequenceIter *begin, GSequenceIter *end); #endif /* __G_SEQUENCE_H__ */ cutter-testing-framework-1.1.7/glib-compatible/gunicode.h0000644000175000017500000001101011407320461021641 0ustar koukou/* gunicode.h - Unicode manipulation functions * * Copyright (C) 1999, 2000 Tom Tromey * Copyright 2000, 2005 Red Hat, Inc. * * The Gnome Library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * The Gnome Library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with the Gnome Library; see the file COPYING.LIB. If not, * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ typedef enum { /* ISO 15924 code */ G_UNICODE_SCRIPT_INVALID_CODE = -1, G_UNICODE_SCRIPT_COMMON = 0, /* Zyyy */ G_UNICODE_SCRIPT_INHERITED, /* Qaai */ G_UNICODE_SCRIPT_ARABIC, /* Arab */ G_UNICODE_SCRIPT_ARMENIAN, /* Armn */ G_UNICODE_SCRIPT_BENGALI, /* Beng */ G_UNICODE_SCRIPT_BOPOMOFO, /* Bopo */ G_UNICODE_SCRIPT_CHEROKEE, /* Cher */ G_UNICODE_SCRIPT_COPTIC, /* Qaac */ G_UNICODE_SCRIPT_CYRILLIC, /* Cyrl (Cyrs) */ G_UNICODE_SCRIPT_DESERET, /* Dsrt */ G_UNICODE_SCRIPT_DEVANAGARI, /* Deva */ G_UNICODE_SCRIPT_ETHIOPIC, /* Ethi */ G_UNICODE_SCRIPT_GEORGIAN, /* Geor (Geon, Geoa) */ G_UNICODE_SCRIPT_GOTHIC, /* Goth */ G_UNICODE_SCRIPT_GREEK, /* Grek */ G_UNICODE_SCRIPT_GUJARATI, /* Gujr */ G_UNICODE_SCRIPT_GURMUKHI, /* Guru */ G_UNICODE_SCRIPT_HAN, /* Hani */ G_UNICODE_SCRIPT_HANGUL, /* Hang */ G_UNICODE_SCRIPT_HEBREW, /* Hebr */ G_UNICODE_SCRIPT_HIRAGANA, /* Hira */ G_UNICODE_SCRIPT_KANNADA, /* Knda */ G_UNICODE_SCRIPT_KATAKANA, /* Kana */ G_UNICODE_SCRIPT_KHMER, /* Khmr */ G_UNICODE_SCRIPT_LAO, /* Laoo */ G_UNICODE_SCRIPT_LATIN, /* Latn (Latf, Latg) */ G_UNICODE_SCRIPT_MALAYALAM, /* Mlym */ G_UNICODE_SCRIPT_MONGOLIAN, /* Mong */ G_UNICODE_SCRIPT_MYANMAR, /* Mymr */ G_UNICODE_SCRIPT_OGHAM, /* Ogam */ G_UNICODE_SCRIPT_OLD_ITALIC, /* Ital */ G_UNICODE_SCRIPT_ORIYA, /* Orya */ G_UNICODE_SCRIPT_RUNIC, /* Runr */ G_UNICODE_SCRIPT_SINHALA, /* Sinh */ G_UNICODE_SCRIPT_SYRIAC, /* Syrc (Syrj, Syrn, Syre) */ G_UNICODE_SCRIPT_TAMIL, /* Taml */ G_UNICODE_SCRIPT_TELUGU, /* Telu */ G_UNICODE_SCRIPT_THAANA, /* Thaa */ G_UNICODE_SCRIPT_THAI, /* Thai */ G_UNICODE_SCRIPT_TIBETAN, /* Tibt */ G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */ G_UNICODE_SCRIPT_YI, /* Yiii */ G_UNICODE_SCRIPT_TAGALOG, /* Tglg */ G_UNICODE_SCRIPT_HANUNOO, /* Hano */ G_UNICODE_SCRIPT_BUHID, /* Buhd */ G_UNICODE_SCRIPT_TAGBANWA, /* Tagb */ /* Unicode-4.0 additions */ G_UNICODE_SCRIPT_BRAILLE, /* Brai */ G_UNICODE_SCRIPT_CYPRIOT, /* Cprt */ G_UNICODE_SCRIPT_LIMBU, /* Limb */ G_UNICODE_SCRIPT_OSMANYA, /* Osma */ G_UNICODE_SCRIPT_SHAVIAN, /* Shaw */ G_UNICODE_SCRIPT_LINEAR_B, /* Linb */ G_UNICODE_SCRIPT_TAI_LE, /* Tale */ G_UNICODE_SCRIPT_UGARITIC, /* Ugar */ /* Unicode-4.1 additions */ G_UNICODE_SCRIPT_NEW_TAI_LUE, /* Talu */ G_UNICODE_SCRIPT_BUGINESE, /* Bugi */ G_UNICODE_SCRIPT_GLAGOLITIC, /* Glag */ G_UNICODE_SCRIPT_TIFINAGH, /* Tfng */ G_UNICODE_SCRIPT_SYLOTI_NAGRI, /* Sylo */ G_UNICODE_SCRIPT_OLD_PERSIAN, /* Xpeo */ G_UNICODE_SCRIPT_KHAROSHTHI, /* Khar */ /* Unicode-5.0 additions */ G_UNICODE_SCRIPT_UNKNOWN, /* Zzzz */ G_UNICODE_SCRIPT_BALINESE, /* Bali */ G_UNICODE_SCRIPT_CUNEIFORM, /* Xsux */ G_UNICODE_SCRIPT_PHOENICIAN, /* Phnx */ G_UNICODE_SCRIPT_PHAGS_PA, /* Phag */ G_UNICODE_SCRIPT_NKO /* Nkoo */ } GUnicodeScript; GUnicodeScript g_unichar_get_script (gunichar ch) G_GNUC_CONST; G_END_DECLS cutter-testing-framework-1.1.7/glib-compatible/gscripttable.h0000644000175000017500000071124411407320461022547 0ustar koukou/* gscripttable.h: Generated by gen-script-table.pl * * Date: Tue Jul 25 01:42:49 2006 * Source: Scripts-5.0.0.txt * * Do not edit. */ #define G_EASY_SCRIPTS_RANGE 8192 static const guchar g_script_easy_table[8192] = { G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, }; static const struct { gunichar start; guint16 chars; guint16 script; } g_script_table[] = { { 0x2000, 12, G_UNICODE_SCRIPT_COMMON }, { 0x200c, 2, G_UNICODE_SCRIPT_INHERITED }, { 0x200e, 86, G_UNICODE_SCRIPT_COMMON }, { 0x206a, 7, G_UNICODE_SCRIPT_COMMON }, { 0x2071, 1, G_UNICODE_SCRIPT_LATIN }, { 0x2074, 11, G_UNICODE_SCRIPT_COMMON }, { 0x207f, 1, G_UNICODE_SCRIPT_LATIN }, { 0x2080, 15, G_UNICODE_SCRIPT_COMMON }, { 0x2090, 5, G_UNICODE_SCRIPT_LATIN }, { 0x20a0, 22, G_UNICODE_SCRIPT_COMMON }, { 0x20d0, 32, G_UNICODE_SCRIPT_INHERITED }, { 0x2100, 38, G_UNICODE_SCRIPT_COMMON }, { 0x2126, 1, G_UNICODE_SCRIPT_GREEK }, { 0x2127, 3, G_UNICODE_SCRIPT_COMMON }, { 0x212a, 2, G_UNICODE_SCRIPT_LATIN }, { 0x212c, 6, G_UNICODE_SCRIPT_COMMON }, { 0x2132, 1, G_UNICODE_SCRIPT_LATIN }, { 0x2133, 27, G_UNICODE_SCRIPT_COMMON }, { 0x214e, 1, G_UNICODE_SCRIPT_LATIN }, { 0x2153, 49, G_UNICODE_SCRIPT_COMMON }, { 0x2184, 1, G_UNICODE_SCRIPT_LATIN }, { 0x2190, 600, G_UNICODE_SCRIPT_COMMON }, { 0x2400, 39, G_UNICODE_SCRIPT_COMMON }, { 0x2440, 11, G_UNICODE_SCRIPT_COMMON }, { 0x2460, 573, G_UNICODE_SCRIPT_COMMON }, { 0x26a0, 19, G_UNICODE_SCRIPT_COMMON }, { 0x2701, 4, G_UNICODE_SCRIPT_COMMON }, { 0x2706, 4, G_UNICODE_SCRIPT_COMMON }, { 0x270c, 28, G_UNICODE_SCRIPT_COMMON }, { 0x2729, 35, G_UNICODE_SCRIPT_COMMON }, { 0x274d, 1, G_UNICODE_SCRIPT_COMMON }, { 0x274f, 4, G_UNICODE_SCRIPT_COMMON }, { 0x2756, 1, G_UNICODE_SCRIPT_COMMON }, { 0x2758, 7, G_UNICODE_SCRIPT_COMMON }, { 0x2761, 52, G_UNICODE_SCRIPT_COMMON }, { 0x2798, 24, G_UNICODE_SCRIPT_COMMON }, { 0x27b1, 14, G_UNICODE_SCRIPT_COMMON }, { 0x27c0, 11, G_UNICODE_SCRIPT_COMMON }, { 0x27d0, 28, G_UNICODE_SCRIPT_COMMON }, { 0x27f0, 16, G_UNICODE_SCRIPT_COMMON }, { 0x2800, 256, G_UNICODE_SCRIPT_BRAILLE }, { 0x2900, 539, G_UNICODE_SCRIPT_COMMON }, { 0x2b20, 4, G_UNICODE_SCRIPT_COMMON }, { 0x2c00, 47, G_UNICODE_SCRIPT_GLAGOLITIC }, { 0x2c30, 47, G_UNICODE_SCRIPT_GLAGOLITIC }, { 0x2c60, 13, G_UNICODE_SCRIPT_LATIN }, { 0x2c74, 4, G_UNICODE_SCRIPT_LATIN }, { 0x2c80, 107, G_UNICODE_SCRIPT_COPTIC }, { 0x2cf9, 7, G_UNICODE_SCRIPT_COPTIC }, { 0x2d00, 38, G_UNICODE_SCRIPT_GEORGIAN }, { 0x2d30, 54, G_UNICODE_SCRIPT_TIFINAGH }, { 0x2d6f, 1, G_UNICODE_SCRIPT_TIFINAGH }, { 0x2d80, 23, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2da0, 7, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2da8, 7, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2db0, 7, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2db8, 7, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2dc0, 7, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2dc8, 7, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2dd0, 7, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2dd8, 7, G_UNICODE_SCRIPT_ETHIOPIC }, { 0x2e00, 24, G_UNICODE_SCRIPT_COMMON }, { 0x2e1c, 2, G_UNICODE_SCRIPT_COMMON }, { 0x2e80, 26, G_UNICODE_SCRIPT_HAN }, { 0x2e9b, 89, G_UNICODE_SCRIPT_HAN }, { 0x2f00, 214, G_UNICODE_SCRIPT_HAN }, { 0x2ff0, 12, G_UNICODE_SCRIPT_COMMON }, { 0x3000, 5, G_UNICODE_SCRIPT_COMMON }, { 0x3005, 1, G_UNICODE_SCRIPT_HAN }, { 0x3006, 1, G_UNICODE_SCRIPT_COMMON }, { 0x3007, 1, G_UNICODE_SCRIPT_HAN }, { 0x3008, 25, G_UNICODE_SCRIPT_COMMON }, { 0x3021, 9, G_UNICODE_SCRIPT_HAN }, { 0x302a, 6, G_UNICODE_SCRIPT_INHERITED }, { 0x3030, 8, G_UNICODE_SCRIPT_COMMON }, { 0x3038, 4, G_UNICODE_SCRIPT_HAN }, { 0x303c, 4, G_UNICODE_SCRIPT_COMMON }, { 0x3041, 86, G_UNICODE_SCRIPT_HIRAGANA }, { 0x3099, 2, G_UNICODE_SCRIPT_INHERITED }, { 0x309b, 2, G_UNICODE_SCRIPT_COMMON }, { 0x309d, 3, G_UNICODE_SCRIPT_HIRAGANA }, { 0x30a0, 1, G_UNICODE_SCRIPT_COMMON }, { 0x30a1, 90, G_UNICODE_SCRIPT_KATAKANA }, { 0x30fb, 2, G_UNICODE_SCRIPT_COMMON }, { 0x30fd, 3, G_UNICODE_SCRIPT_KATAKANA }, { 0x3105, 40, G_UNICODE_SCRIPT_BOPOMOFO }, { 0x3131, 94, G_UNICODE_SCRIPT_HANGUL }, { 0x3190, 16, G_UNICODE_SCRIPT_COMMON }, { 0x31a0, 24, G_UNICODE_SCRIPT_BOPOMOFO }, { 0x31c0, 16, G_UNICODE_SCRIPT_COMMON }, { 0x31f0, 16, G_UNICODE_SCRIPT_KATAKANA }, { 0x3200, 31, G_UNICODE_SCRIPT_HANGUL }, { 0x3220, 36, G_UNICODE_SCRIPT_COMMON }, { 0x3250, 16, G_UNICODE_SCRIPT_COMMON }, { 0x3260, 30, G_UNICODE_SCRIPT_HANGUL }, { 0x327e, 129, G_UNICODE_SCRIPT_COMMON }, { 0x3300, 256, G_UNICODE_SCRIPT_COMMON }, { 0x3400, 6582, G_UNICODE_SCRIPT_HAN }, { 0x4dc0, 64, G_UNICODE_SCRIPT_COMMON }, { 0x4e00, 20924, G_UNICODE_SCRIPT_HAN }, { 0xa000, 1165, G_UNICODE_SCRIPT_YI }, { 0xa490, 55, G_UNICODE_SCRIPT_YI }, { 0xa700, 27, G_UNICODE_SCRIPT_COMMON }, { 0xa720, 2, G_UNICODE_SCRIPT_COMMON }, { 0xa800, 44, G_UNICODE_SCRIPT_SYLOTI_NAGRI }, { 0xa840, 56, G_UNICODE_SCRIPT_PHAGS_PA }, { 0xac00, 11172, G_UNICODE_SCRIPT_HANGUL }, { 0xf900, 302, G_UNICODE_SCRIPT_HAN }, { 0xfa30, 59, G_UNICODE_SCRIPT_HAN }, { 0xfa70, 106, G_UNICODE_SCRIPT_HAN }, { 0xfb00, 7, G_UNICODE_SCRIPT_LATIN }, { 0xfb13, 5, G_UNICODE_SCRIPT_ARMENIAN }, { 0xfb1d, 26, G_UNICODE_SCRIPT_HEBREW }, { 0xfb38, 5, G_UNICODE_SCRIPT_HEBREW }, { 0xfb3e, 1, G_UNICODE_SCRIPT_HEBREW }, { 0xfb40, 2, G_UNICODE_SCRIPT_HEBREW }, { 0xfb43, 2, G_UNICODE_SCRIPT_HEBREW }, { 0xfb46, 10, G_UNICODE_SCRIPT_HEBREW }, { 0xfb50, 98, G_UNICODE_SCRIPT_ARABIC }, { 0xfbd3, 363, G_UNICODE_SCRIPT_ARABIC }, { 0xfd3e, 2, G_UNICODE_SCRIPT_COMMON }, { 0xfd50, 64, G_UNICODE_SCRIPT_ARABIC }, { 0xfd92, 54, G_UNICODE_SCRIPT_ARABIC }, { 0xfdf0, 13, G_UNICODE_SCRIPT_ARABIC }, { 0xfdfd, 1, G_UNICODE_SCRIPT_COMMON }, { 0xfe00, 16, G_UNICODE_SCRIPT_INHERITED }, { 0xfe10, 10, G_UNICODE_SCRIPT_COMMON }, { 0xfe20, 4, G_UNICODE_SCRIPT_INHERITED }, { 0xfe30, 35, G_UNICODE_SCRIPT_COMMON }, { 0xfe54, 19, G_UNICODE_SCRIPT_COMMON }, { 0xfe68, 4, G_UNICODE_SCRIPT_COMMON }, { 0xfe70, 5, G_UNICODE_SCRIPT_ARABIC }, { 0xfe76, 135, G_UNICODE_SCRIPT_ARABIC }, { 0xfeff, 1, G_UNICODE_SCRIPT_COMMON }, { 0xff01, 32, G_UNICODE_SCRIPT_COMMON }, { 0xff21, 26, G_UNICODE_SCRIPT_LATIN }, { 0xff3b, 6, G_UNICODE_SCRIPT_COMMON }, { 0xff41, 26, G_UNICODE_SCRIPT_LATIN }, { 0xff5b, 11, G_UNICODE_SCRIPT_COMMON }, { 0xff66, 10, G_UNICODE_SCRIPT_KATAKANA }, { 0xff70, 1, G_UNICODE_SCRIPT_COMMON }, { 0xff71, 45, G_UNICODE_SCRIPT_KATAKANA }, { 0xff9e, 2, G_UNICODE_SCRIPT_COMMON }, { 0xffa0, 31, G_UNICODE_SCRIPT_HANGUL }, { 0xffc2, 6, G_UNICODE_SCRIPT_HANGUL }, { 0xffca, 6, G_UNICODE_SCRIPT_HANGUL }, { 0xffd2, 6, G_UNICODE_SCRIPT_HANGUL }, { 0xffda, 3, G_UNICODE_SCRIPT_HANGUL }, { 0xffe0, 7, G_UNICODE_SCRIPT_COMMON }, { 0xffe8, 7, G_UNICODE_SCRIPT_COMMON }, { 0xfff9, 5, G_UNICODE_SCRIPT_COMMON }, { 0x10000, 12, G_UNICODE_SCRIPT_LINEAR_B }, { 0x1000d, 26, G_UNICODE_SCRIPT_LINEAR_B }, { 0x10028, 19, G_UNICODE_SCRIPT_LINEAR_B }, { 0x1003c, 2, G_UNICODE_SCRIPT_LINEAR_B }, { 0x1003f, 15, G_UNICODE_SCRIPT_LINEAR_B }, { 0x10050, 14, G_UNICODE_SCRIPT_LINEAR_B }, { 0x10080, 123, G_UNICODE_SCRIPT_LINEAR_B }, { 0x10100, 3, G_UNICODE_SCRIPT_COMMON }, { 0x10107, 45, G_UNICODE_SCRIPT_COMMON }, { 0x10137, 9, G_UNICODE_SCRIPT_COMMON }, { 0x10140, 75, G_UNICODE_SCRIPT_GREEK }, { 0x10300, 31, G_UNICODE_SCRIPT_OLD_ITALIC }, { 0x10320, 4, G_UNICODE_SCRIPT_OLD_ITALIC }, { 0x10330, 27, G_UNICODE_SCRIPT_GOTHIC }, { 0x10380, 30, G_UNICODE_SCRIPT_UGARITIC }, { 0x1039f, 1, G_UNICODE_SCRIPT_UGARITIC }, { 0x103a0, 36, G_UNICODE_SCRIPT_OLD_PERSIAN }, { 0x103c8, 14, G_UNICODE_SCRIPT_OLD_PERSIAN }, { 0x10400, 80, G_UNICODE_SCRIPT_DESERET }, { 0x10450, 48, G_UNICODE_SCRIPT_SHAVIAN }, { 0x10480, 30, G_UNICODE_SCRIPT_OSMANYA }, { 0x104a0, 10, G_UNICODE_SCRIPT_OSMANYA }, { 0x10800, 6, G_UNICODE_SCRIPT_CYPRIOT }, { 0x10808, 1, G_UNICODE_SCRIPT_CYPRIOT }, { 0x1080a, 44, G_UNICODE_SCRIPT_CYPRIOT }, { 0x10837, 2, G_UNICODE_SCRIPT_CYPRIOT }, { 0x1083c, 1, G_UNICODE_SCRIPT_CYPRIOT }, { 0x1083f, 1, G_UNICODE_SCRIPT_CYPRIOT }, { 0x10900, 26, G_UNICODE_SCRIPT_PHOENICIAN }, { 0x1091f, 1, G_UNICODE_SCRIPT_PHOENICIAN }, { 0x10a00, 4, G_UNICODE_SCRIPT_KHAROSHTHI }, { 0x10a05, 2, G_UNICODE_SCRIPT_KHAROSHTHI }, { 0x10a0c, 8, G_UNICODE_SCRIPT_KHAROSHTHI }, { 0x10a15, 3, G_UNICODE_SCRIPT_KHAROSHTHI }, { 0x10a19, 27, G_UNICODE_SCRIPT_KHAROSHTHI }, { 0x10a38, 3, G_UNICODE_SCRIPT_KHAROSHTHI }, { 0x10a3f, 9, G_UNICODE_SCRIPT_KHAROSHTHI }, { 0x10a50, 9, G_UNICODE_SCRIPT_KHAROSHTHI }, { 0x12000, 879, G_UNICODE_SCRIPT_CUNEIFORM }, { 0x12400, 99, G_UNICODE_SCRIPT_CUNEIFORM }, { 0x12470, 4, G_UNICODE_SCRIPT_CUNEIFORM }, { 0x1d000, 246, G_UNICODE_SCRIPT_COMMON }, { 0x1d100, 39, G_UNICODE_SCRIPT_COMMON }, { 0x1d12a, 61, G_UNICODE_SCRIPT_COMMON }, { 0x1d167, 3, G_UNICODE_SCRIPT_INHERITED }, { 0x1d16a, 17, G_UNICODE_SCRIPT_COMMON }, { 0x1d17b, 8, G_UNICODE_SCRIPT_INHERITED }, { 0x1d183, 2, G_UNICODE_SCRIPT_COMMON }, { 0x1d185, 7, G_UNICODE_SCRIPT_INHERITED }, { 0x1d18c, 30, G_UNICODE_SCRIPT_COMMON }, { 0x1d1aa, 4, G_UNICODE_SCRIPT_INHERITED }, { 0x1d1ae, 48, G_UNICODE_SCRIPT_COMMON }, { 0x1d200, 70, G_UNICODE_SCRIPT_GREEK }, { 0x1d300, 87, G_UNICODE_SCRIPT_COMMON }, { 0x1d360, 18, G_UNICODE_SCRIPT_COMMON }, { 0x1d400, 85, G_UNICODE_SCRIPT_COMMON }, { 0x1d456, 71, G_UNICODE_SCRIPT_COMMON }, { 0x1d49e, 2, G_UNICODE_SCRIPT_COMMON }, { 0x1d4a2, 1, G_UNICODE_SCRIPT_COMMON }, { 0x1d4a5, 2, G_UNICODE_SCRIPT_COMMON }, { 0x1d4a9, 4, G_UNICODE_SCRIPT_COMMON }, { 0x1d4ae, 12, G_UNICODE_SCRIPT_COMMON }, { 0x1d4bb, 1, G_UNICODE_SCRIPT_COMMON }, { 0x1d4bd, 7, G_UNICODE_SCRIPT_COMMON }, { 0x1d4c5, 65, G_UNICODE_SCRIPT_COMMON }, { 0x1d507, 4, G_UNICODE_SCRIPT_COMMON }, { 0x1d50d, 8, G_UNICODE_SCRIPT_COMMON }, { 0x1d516, 7, G_UNICODE_SCRIPT_COMMON }, { 0x1d51e, 28, G_UNICODE_SCRIPT_COMMON }, { 0x1d53b, 4, G_UNICODE_SCRIPT_COMMON }, { 0x1d540, 5, G_UNICODE_SCRIPT_COMMON }, { 0x1d546, 1, G_UNICODE_SCRIPT_COMMON }, { 0x1d54a, 7, G_UNICODE_SCRIPT_COMMON }, { 0x1d552, 340, G_UNICODE_SCRIPT_COMMON }, { 0x1d6a8, 292, G_UNICODE_SCRIPT_COMMON }, { 0x1d7ce, 50, G_UNICODE_SCRIPT_COMMON }, { 0x20000, 42711, G_UNICODE_SCRIPT_HAN }, { 0x2f800, 542, G_UNICODE_SCRIPT_HAN }, { 0xe0001, 1, G_UNICODE_SCRIPT_COMMON }, { 0xe0020, 96, G_UNICODE_SCRIPT_COMMON }, { 0xe0100, 240, G_UNICODE_SCRIPT_INHERITED }, }; cutter-testing-framework-1.1.7/glib-compatible/glib-compatible.h0000644000175000017500000000245411407320461023112 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GLIB_COMPATIBLE_H__ #define __GLIB_COMPATIBLE_H__ #include #if !GLIB_CHECK_VERSION(2, 14, 0) # include "gsequence.h" # include "gregex.h" # include "gstring.h" #endif G_BEGIN_DECLS #if !GLIB_CHECK_VERSION(2, 14, 0) # define g_hash_table_get_keys(hash_table) \ gcompatible_hash_table_get_keys(hash_table) GList *gcompatible_hash_table_get_keys (GHashTable *hash_table); #endif G_END_DECLS #endif /* __GLIB_COMPATIBLE_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/glib-compatible/gsequence.c0000644000175000017500000012135411407320461022033 0ustar koukou/* GLIB - Library of useful routines for C programming * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 * Soeren Sandmann (sandmann@daimi.au.dk) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include "gsequence.h" typedef struct _GSequenceNode GSequenceNode; struct _GSequence { GSequenceNode * end_node; GDestroyNotify data_destroy_notify; gboolean access_prohibited; /* The 'real_sequence' is used when temporary sequences are created * to hold nodes that are being rearranged. The 'real_sequence' of such * a temporary sequence points to the sequence that is actually being * manipulated. The only reason we need this is so that when the * sort/sort_changed/search_iter() functions call out to the application * g_sequence_iter_get_sequence() will return the correct sequence. */ GSequence * real_sequence; }; struct _GSequenceNode { gint n_nodes; GSequenceNode * parent; GSequenceNode * left; GSequenceNode * right; gpointer data; /* For the end node, this field points * to the sequence */ }; /* * Declaration of GSequenceNode methods */ static GSequenceNode *node_new (gpointer data); static GSequenceNode *node_get_first (GSequenceNode *node); static GSequenceNode *node_get_last (GSequenceNode *node); static GSequenceNode *node_get_prev (GSequenceNode *node); static GSequenceNode *node_get_next (GSequenceNode *node); static gint node_get_pos (GSequenceNode *node); static GSequenceNode *node_get_by_pos (GSequenceNode *node, gint pos); static GSequenceNode *node_find_closest (GSequenceNode *haystack, GSequenceNode *needle, GSequenceNode *end, GSequenceIterCompareFunc cmp, gpointer user_data); static gint node_get_length (GSequenceNode *node); static void node_free (GSequenceNode *node, GSequence *seq); static void node_cut (GSequenceNode *split); static void node_insert_before (GSequenceNode *node, GSequenceNode *new); static void node_unlink (GSequenceNode *node); static void node_join (GSequenceNode *left, GSequenceNode *right); static void node_insert_sorted (GSequenceNode *node, GSequenceNode *new, GSequenceNode *end, GSequenceIterCompareFunc cmp_func, gpointer cmp_data); /* * Various helper functions */ static void check_seq_access (GSequence *seq) { if (G_UNLIKELY (seq->access_prohibited)) { g_warning ("Accessing a sequence while it is " "being sorted or searched is not allowed"); } } static GSequence * get_sequence (GSequenceNode *node) { return (GSequence *)node_get_last (node)->data; } static void check_iter_access (GSequenceIter *iter) { check_seq_access (get_sequence (iter)); } static gboolean is_end (GSequenceIter *iter) { GSequence *seq; if (iter->right) return FALSE; if (!iter->parent) return TRUE; if (iter->parent->right != iter) return FALSE; seq = get_sequence (iter); return seq->end_node == iter; } typedef struct { GCompareDataFunc cmp_func; gpointer cmp_data; GSequenceNode *end_node; } SortInfo; /* This function compares two iters using a normal compare * function and user_data passed in in a SortInfo struct */ static gint iter_compare (GSequenceIter *node1, GSequenceIter *node2, gpointer data) { const SortInfo *info = data; gint retval; if (node1 == info->end_node) return 1; if (node2 == info->end_node) return -1; retval = info->cmp_func (node1->data, node2->data, info->cmp_data); return retval; } /* * Public API */ /** * g_sequence_new: * @data_destroy: a #GDestroyNotify function, or %NULL * * Creates a new GSequence. The @data_destroy function, if non-%NULL will * be called on all items when the sequence is destroyed and on items that * are removed from the sequence. * * Return value: a new #GSequence * * Since: 2.14 **/ GSequence * g_sequence_new (GDestroyNotify data_destroy) { GSequence *seq = g_new (GSequence, 1); seq->data_destroy_notify = data_destroy; seq->end_node = node_new (seq); seq->access_prohibited = FALSE; seq->real_sequence = seq; return seq; } /** * g_sequence_free: * @seq: a #GSequence * * Frees the memory allocated for @seq. If @seq has a data destroy * function associated with it, that function is called on all items in * @seq. * * Since: 2.14 **/ void g_sequence_free (GSequence *seq) { g_return_if_fail (seq != NULL); check_seq_access (seq); node_free (seq->end_node, seq); g_free (seq); } /** * g_sequence_foreach_range: * @begin: a #GSequenceIter * @end: a #GSequenceIter * @func: a #GFunc * @user_data: user data passed to @func * * Calls @func for each item in the range (@begin, @end) passing * @user_data to the function. * * Since: 2.14 **/ void g_sequence_foreach_range (GSequenceIter *begin, GSequenceIter *end, GFunc func, gpointer user_data) { GSequence *seq; GSequenceIter *iter; g_return_if_fail (func != NULL); g_return_if_fail (begin != NULL); g_return_if_fail (end != NULL); seq = get_sequence (begin); seq->access_prohibited = TRUE; iter = begin; while (iter != end) { GSequenceIter *next = node_get_next (iter); func (iter->data, user_data); iter = next; } seq->access_prohibited = FALSE; } /** * g_sequence_foreach: * @seq: a #GSequence * @func: the function to call for each item in @seq * @user_data: user data passed to @func * * Calls @func for each item in the sequence passing @user_data * to the function. * * Since: 2.14 **/ void g_sequence_foreach (GSequence *seq, GFunc func, gpointer user_data) { GSequenceIter *begin, *end; check_seq_access (seq); begin = g_sequence_get_begin_iter (seq); end = g_sequence_get_end_iter (seq); g_sequence_foreach_range (begin, end, func, user_data); } /** * g_sequence_range_get_midpoint: * @begin: a #GSequenceIter * @end: a #GSequenceIter * * Finds an iterator somewhere in the range (@begin, @end). This * iterator will be close to the middle of the range, but is not * guaranteed to be exactly in the middle. * * The @begin and @end iterators must both point to the same sequence and * @begin must come before or be equal to @end in the sequence. * * Return value: A #GSequenceIter pointing somewhere in the * (@begin, @end) range. * * Since: 2.14 **/ GSequenceIter * g_sequence_range_get_midpoint (GSequenceIter *begin, GSequenceIter *end) { int begin_pos, end_pos, mid_pos; g_return_val_if_fail (begin != NULL, NULL); g_return_val_if_fail (end != NULL, NULL); g_return_val_if_fail (get_sequence (begin) == get_sequence (end), NULL); begin_pos = node_get_pos (begin); end_pos = node_get_pos (end); g_return_val_if_fail (end_pos >= begin_pos, NULL); mid_pos = begin_pos + (end_pos - begin_pos) / 2; return node_get_by_pos (begin, mid_pos); } /** * g_sequence_iter_compare: * @a: a #GSequenceIter * @b: a #GSequenceIter * * Returns a negative number if @a comes before @b, 0 if they are equal, * and a positive number if @a comes after @b. * * The @a and @b iterators must point into the same sequence. * * Return value: A negative number if @a comes before @b, 0 if they are * equal, and a positive number if @a comes after @b. * * Since: 2.14 **/ gint g_sequence_iter_compare (GSequenceIter *a, GSequenceIter *b) { gint a_pos, b_pos; g_return_val_if_fail (a != NULL, 0); g_return_val_if_fail (b != NULL, 0); g_return_val_if_fail (get_sequence (a) == get_sequence (b), 0); check_iter_access (a); check_iter_access (b); a_pos = node_get_pos (a); b_pos = node_get_pos (b); if (a_pos == b_pos) return 0; else if (a_pos > b_pos) return 1; else return -1; } /** * g_sequence_append: * @seq: a #GSequencePointer * @data: the data for the new item * * Adds a new item to the end of @seq. * * Return value: an iterator pointing to the new item * * Since: 2.14 **/ GSequenceIter * g_sequence_append (GSequence *seq, gpointer data) { GSequenceNode *node; g_return_val_if_fail (seq != NULL, NULL); check_seq_access (seq); node = node_new (data); node_insert_before (seq->end_node, node); return node; } /** * g_sequence_prepend: * @seq: a #GSequence * @data: the data for the new item * * Adds a new item to the front of @seq * * Return value: an iterator pointing to the new item * * Since: 2.14 **/ GSequenceIter * g_sequence_prepend (GSequence *seq, gpointer data) { GSequenceNode *node, *first; g_return_val_if_fail (seq != NULL, NULL); check_seq_access (seq); node = node_new (data); first = node_get_first (seq->end_node); node_insert_before (first, node); return node; } /** * g_sequence_insert_before: * @iter: a #GSequenceIter * @data: the data for the new item * * Inserts a new item just before the item pointed to by @iter. * * Return value: an iterator pointing to the new item * * Since: 2.14 **/ GSequenceIter * g_sequence_insert_before (GSequenceIter *iter, gpointer data) { GSequenceNode *node; g_return_val_if_fail (iter != NULL, NULL); check_iter_access (iter); node = node_new (data); node_insert_before (iter, node); return node; } /** * g_sequence_remove: * @iter: a #GSequenceIter * * Removes the item pointed to by @iter. It is an error to pass the * end iterator to this function. * * If the sequnce has a data destroy function associated with it, this * function is called on the data for the removed item. * * Since: 2.14 **/ void g_sequence_remove (GSequenceIter *iter) { GSequence *seq; g_return_if_fail (iter != NULL); g_return_if_fail (!is_end (iter)); check_iter_access (iter); seq = get_sequence (iter); node_unlink (iter); node_free (iter, seq); } /** * g_sequence_remove_range: * @begin: a #GSequenceIter * @end: a #GSequenceIter * * Removes all items in the (@begin, @end) range. * * If the sequence has a data destroy function associated with it, this * function is called on the data for the removed items. * * Since: 2.14 **/ void g_sequence_remove_range (GSequenceIter *begin, GSequenceIter *end) { g_return_if_fail (get_sequence (begin) == get_sequence (end)); check_iter_access (begin); check_iter_access (end); g_sequence_move_range (NULL, begin, end); } /** * g_sequence_move_range: * @dest: a #GSequenceIter * @begin: a #GSequenceIter * @end: a #GSequenceIter * * Inserts the (@begin, @end) range at the destination pointed to by ptr. * The @begin and @end iters must point into the same sequence. It is * allowed for @dest to point to a different sequence than the one pointed * into by @begin and @end. * * If @dest is NULL, the range indicated by @begin and @end is * removed from the sequence. If @dest iter points to a place within * the (@begin, @end) range, the range does not move. * * Since: 2.14 **/ void g_sequence_move_range (GSequenceIter *dest, GSequenceIter *begin, GSequenceIter *end) { GSequence *src_seq; GSequenceNode *first; g_return_if_fail (begin != NULL); g_return_if_fail (end != NULL); check_iter_access (begin); check_iter_access (end); if (dest) check_iter_access (dest); src_seq = get_sequence (begin); g_return_if_fail (src_seq == get_sequence (end)); /* Dest points to begin or end? */ if (dest == begin || dest == end) return; /* begin comes after end? */ if (g_sequence_iter_compare (begin, end) >= 0) return; /* dest points somewhere in the (begin, end) range? */ if (dest && get_sequence (dest) == src_seq && g_sequence_iter_compare (dest, begin) > 0 && g_sequence_iter_compare (dest, end) < 0) { return; } src_seq = get_sequence (begin); first = node_get_first (begin); node_cut (begin); node_cut (end); if (first != begin) node_join (first, end); if (dest) { first = node_get_first (dest); node_cut (dest); node_join (begin, dest); if (dest != first) node_join (first, begin); } else { node_free (begin, src_seq); } } /** * g_sequence_sort: * @seq: a #GSequence * @cmp_func: the #GCompareDataFunc used to sort @seq. This function is * passed two items of @seq and should return 0 if they are equal, * a negative value fi the first comes before the second, and a * positive value if the second comes before the first. * @cmp_data: user data passed to @cmp_func * * Sorts @seq using @cmp_func. * * Since: 2.14 **/ void g_sequence_sort (GSequence *seq, GCompareDataFunc cmp_func, gpointer cmp_data) { SortInfo info = { cmp_func, cmp_data, seq->end_node }; check_seq_access (seq); g_sequence_sort_iter (seq, iter_compare, &info); } /** * g_sequence_insert_sorted: * @seq: a #GSequence * @data: the data to insert * @cmp_func: the #GCompareDataFunc used to compare items in the sequence. It * is called with two items of the @seq and @user_data. It should * return 0 if the items are equal, a negative value if the first * item comes before the second, and a positive value if the second * item comes before the first. * @cmp_data: user data passed to @cmp_func. * * Inserts @data into @sequence using @func to determine the new position. * The sequence must already be sorted according to @cmp_func; otherwise the * new position of @data is undefined. * * Return value: a #GSequenceIter pointing to the new item. * * Since: 2.14 **/ GSequenceIter * g_sequence_insert_sorted (GSequence *seq, gpointer data, GCompareDataFunc cmp_func, gpointer cmp_data) { SortInfo info = { cmp_func, cmp_data, NULL }; g_return_val_if_fail (seq != NULL, NULL); g_return_val_if_fail (cmp_func != NULL, NULL); info.end_node = seq->end_node; check_seq_access (seq); return g_sequence_insert_sorted_iter (seq, data, iter_compare, &info); } /** * g_sequence_sort_changed: * @iter: A #GSequenceIter * @cmp_func: the #GCompareDataFunc used to compare items in the sequence. It * is called with two items of the @seq and @user_data. It should * return 0 if the items are equal, a negative value if the first * item comes before the second, and a positive value if the second * item comes before the first. * @cmp_data: user data passed to @cmp_func. * * Moves the data pointed to a new position as indicated by @cmp_func. This * function should be called for items in a sequence already sorted according * to @cmp_func whenever some aspect of an item changes so that @cmp_func * may return different values for that item. * * Since: 2.14 **/ void g_sequence_sort_changed (GSequenceIter *iter, GCompareDataFunc cmp_func, gpointer cmp_data) { SortInfo info = { cmp_func, cmp_data, NULL }; g_return_if_fail (!is_end (iter)); info.end_node = get_sequence (iter)->end_node; check_iter_access (iter); g_sequence_sort_changed_iter (iter, iter_compare, &info); } /** * g_sequence_search: * @seq: a #GSequence * @data: data for the new item * @cmp_func: the #GCompareDataFunc used to compare items in the sequence. It * is called with two items of the @seq and @user_data. It should * return 0 if the items are equal, a negative value if the first * item comes before the second, and a positive value if the second * item comes before the first. * @cmp_data: user data passed to @cmp_func. * * Returns an iterator pointing to the position where @data would * be inserted according to @cmp_func and @cmp_data. * * Return value: an #GSequenceIter pointing to the position where @data * would have been inserted according to @cmp_func and @cmp_data. * * Since: 2.14 **/ GSequenceIter * g_sequence_search (GSequence *seq, gpointer data, GCompareDataFunc cmp_func, gpointer cmp_data) { SortInfo info = { cmp_func, cmp_data, NULL }; g_return_val_if_fail (seq != NULL, NULL); info.end_node = seq->end_node; check_seq_access (seq); return g_sequence_search_iter (seq, data, iter_compare, &info); } /** * g_sequence_sort_iter: * @seq: a #GSequence * @cmp_func: the #GSequenceItercompare used to compare iterators in the * sequence. It is called with two iterators pointing into @seq. It should * return 0 if the iterators are equal, a negative value if the first * iterator comes before the second, and a positive value if the second * iterator comes before the first. * @cmp_data: user data passed to @cmp_func * * Like g_sequence_sort(), but uses a #GSequenceIterCompareFunc instead * of a GCompareDataFunc as the compare function * * Since: 2.14 **/ void g_sequence_sort_iter (GSequence *seq, GSequenceIterCompareFunc cmp_func, gpointer cmp_data) { GSequence *tmp; GSequenceNode *begin, *end; g_return_if_fail (seq != NULL); g_return_if_fail (cmp_func != NULL); check_seq_access (seq); begin = g_sequence_get_begin_iter (seq); end = g_sequence_get_end_iter (seq); tmp = g_sequence_new (NULL); tmp->real_sequence = seq; g_sequence_move_range (g_sequence_get_begin_iter (tmp), begin, end); seq->access_prohibited = TRUE; tmp->access_prohibited = TRUE; while (g_sequence_get_length (tmp) > 0) { GSequenceNode *node = g_sequence_get_begin_iter (tmp); node_insert_sorted (seq->end_node, node, seq->end_node, cmp_func, cmp_data); } tmp->access_prohibited = FALSE; seq->access_prohibited = FALSE; g_sequence_free (tmp); } /** * g_sequence_sort_changed_iter: * @iter: a #GSequenceIter * @iter_cmp: the #GSequenceItercompare used to compare iterators in the * sequence. It is called with two iterators pointing into @seq. It should * return 0 if the iterators are equal, a negative value if the first * iterator comes before the second, and a positive value if the second * iterator comes before the first. * @cmp_data: user data passed to @cmp_func * * Like g_sequence_sort_changed(), but uses * a #GSequenceIterCompareFunc instead of a #GCompareDataFunc as * the compare function. * * Since: 2.14 **/ void g_sequence_sort_changed_iter (GSequenceIter *iter, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data) { GSequence *seq, *tmp_seq; GSequenceIter *next, *prev; g_return_if_fail (iter != NULL); g_return_if_fail (!is_end (iter)); g_return_if_fail (iter_cmp != NULL); check_iter_access (iter); /* If one of the neighbours is equal to iter, then * don't move it. This ensures that sort_changed() is * a stable operation. */ next = node_get_next (iter); prev = node_get_prev (iter); if (prev != iter && iter_cmp (prev, iter, cmp_data) == 0) return; if (!is_end (next) && iter_cmp (next, iter, cmp_data) == 0) return; seq = get_sequence (iter); seq->access_prohibited = TRUE; tmp_seq = g_sequence_new (NULL); tmp_seq->real_sequence = seq; node_unlink (iter); node_insert_before (tmp_seq->end_node, iter); node_insert_sorted (seq->end_node, iter, seq->end_node, iter_cmp, cmp_data); g_sequence_free (tmp_seq); seq->access_prohibited = FALSE; } /** * g_sequence_insert_sorted_iter: * @seq: a #GSequence * @data: data for the new item * @iter_cmp: the #GSequenceItercompare used to compare iterators in the * sequence. It is called with two iterators pointing into @seq. It should * return 0 if the iterators are equal, a negative value if the first * iterator comes before the second, and a positive value if the second * iterator comes before the first. * @cmp_data: user data passed to @cmp_func * * Like g_sequence_insert_sorted(), but uses * a #GSequenceIterCompareFunc instead of a #GCompareDataFunc as * the compare function. * * Return value: a #GSequenceIter pointing to the new item * * Since: 2.14 **/ GSequenceIter * g_sequence_insert_sorted_iter (GSequence *seq, gpointer data, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data) { GSequenceNode *new_node; GSequence *tmp_seq; g_return_val_if_fail (seq != NULL, NULL); g_return_val_if_fail (iter_cmp != NULL, NULL); check_seq_access (seq); seq->access_prohibited = TRUE; /* Create a new temporary sequence and put the new node into * that. The reason for this is that the user compare function * will be called with the new node, and if it dereferences, * "is_end" will be called on it. But that will crash if the * node is not actually in a sequence. * * node_insert_sorted() makes sure the node is unlinked before * is is inserted. * * The reason we need the "iter" versions at all is that that * is the only kind of compare functions GtkTreeView can use. */ tmp_seq = g_sequence_new (NULL); tmp_seq->real_sequence = seq; new_node = g_sequence_append (tmp_seq, data); node_insert_sorted (seq->end_node, new_node, seq->end_node, iter_cmp, cmp_data); g_sequence_free (tmp_seq); seq->access_prohibited = FALSE; return new_node; } /** * g_sequence_search_iter: * @seq: a #GSequence * @data: data for the new item * @iter_cmp: the #GSequenceIterCompare function used to compare iterators * in the sequence. It is called with two iterators pointing into @seq. * It should return 0 if the iterators are equal, a negative value if the * first iterator comes before the second, and a positive value if the * second iterator comes before the first. * @cmp_data: user data passed to @iter_cmp * * Like g_sequence_search(), but uses * a #GSequenceIterCompareFunc instead of a #GCompareDataFunc as * the compare function. * * Return value: a #GSequenceIter pointing to the position in @seq * where @data would have been inserted according to @iter_cmp and @cmp_data. * * Since: 2.14 **/ GSequenceIter * g_sequence_search_iter (GSequence *seq, gpointer data, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data) { GSequenceNode *node; GSequenceNode *dummy; GSequence *tmp_seq; g_return_val_if_fail (seq != NULL, NULL); check_seq_access (seq); seq->access_prohibited = TRUE; tmp_seq = g_sequence_new (NULL); tmp_seq->real_sequence = seq; dummy = g_sequence_append (tmp_seq, data); node = node_find_closest (seq->end_node, dummy, seq->end_node, iter_cmp, cmp_data); g_sequence_free (tmp_seq); seq->access_prohibited = FALSE; return node; } /** * g_sequence_iter_get_sequence: * @iter: a #GSequenceIter * * Returns the #GSequence that @iter points into. * * Return value: the #GSequence that @iter points into. * * Since: 2.14 **/ GSequence * g_sequence_iter_get_sequence (GSequenceIter *iter) { GSequence *seq; g_return_val_if_fail (iter != NULL, NULL); seq = get_sequence (iter); /* For temporary sequences, this points to the sequence that * is actually being manipulated */ return seq->real_sequence; } /** * g_sequence_get: * @iter: a #GSequenceIter * * Returns the data that @iter points to. * * Return value: the data that @iter points to * * Since: 2.14 **/ gpointer g_sequence_get (GSequenceIter *iter) { g_return_val_if_fail (iter != NULL, NULL); g_return_val_if_fail (!is_end (iter), NULL); return iter->data; } /** * g_sequence_set: * @iter: a #GSequenceIter * @data: new data for the item * * Changes the data for the item pointed to by @iter to be @data. If * the sequence has a data destroy function associated with it, that * function is called on the existing data that @iter pointed to. * * Since: 2.14 **/ void g_sequence_set (GSequenceIter *iter, gpointer data) { GSequence *seq; g_return_if_fail (iter != NULL); g_return_if_fail (!is_end (iter)); seq = get_sequence (iter); /* If @data is identical to iter->data, it is destroyed * here. This will work right in case of ref-counted objects. Also * it is similar to what ghashtables do. * * For non-refcounted data it's a little less convenient, but * code relying on self-setting not destroying would be * pretty dubious anyway ... */ if (seq->data_destroy_notify) seq->data_destroy_notify (iter->data); iter->data = data; } /** * g_sequence_get_length: * @seq: a #GSequence * * Returns the length of @seq * * Return value: the length of @seq * * Since: 2.14 **/ gint g_sequence_get_length (GSequence *seq) { return node_get_length (seq->end_node) - 1; } /** * g_sequence_get_end_iter: * @seq: a #GSequence * * Returns the end iterator for @seg * * Return value: the end iterator for @seq * * Since: 2.14 **/ GSequenceIter * g_sequence_get_end_iter (GSequence *seq) { g_return_val_if_fail (seq != NULL, NULL); return seq->end_node; } /** * g_sequence_get_begin_iter: * @seq: a #GSequence * * Returns the begin iterator for @seq. * * Return value: the begin iterator for @seq. * * Since: 2.14 **/ GSequenceIter * g_sequence_get_begin_iter (GSequence *seq) { g_return_val_if_fail (seq != NULL, NULL); return node_get_first (seq->end_node); } static int clamp_position (GSequence *seq, int pos) { gint len = g_sequence_get_length (seq); if (pos > len || pos < 0) pos = len; return pos; } /* * if pos > number of items or -1, will return end pointer */ /** * g_sequence_get_iter_at_pos: * @seq: a #GSequence * @pos: a position in @seq, or -1 for the end. * * Returns the iterator at position @pos. If @pos is negative or larger * than the number of items in @seq, the end iterator is returned. * * Return value: The #GSequenceIter at position @pos * * Since: 2.14 **/ GSequenceIter * g_sequence_get_iter_at_pos (GSequence *seq, gint pos) { g_return_val_if_fail (seq != NULL, NULL); pos = clamp_position (seq, pos); return node_get_by_pos (seq->end_node, pos); } /** * g_sequence_move: * @src: a #GSequenceIter pointing to the item to move * @dest: a #GSequenceIter pointing to the position to which * the item is moved. * * Moves the item pointed to by @src to the position indicated by @dest. * After calling this function @dest will point to the position immediately * after @src. It is allowed for @src and @dest to point into different * sequences. * * Since: 2.14 **/ void g_sequence_move (GSequenceIter *src, GSequenceIter *dest) { g_return_if_fail (src != NULL); g_return_if_fail (dest != NULL); g_return_if_fail (!is_end (src)); if (src == dest) return; node_unlink (src); node_insert_before (dest, src); } /* GSequenceIter */ /** * g_sequence_iter_is_end: * @iter: a #GSequenceIter * * Returns whether @iter is the end iterator * * Return value: Whether @iter is the end iterator. * * Since: 2.14 **/ gboolean g_sequence_iter_is_end (GSequenceIter *iter) { g_return_val_if_fail (iter != NULL, FALSE); return is_end (iter); } /** * g_sequence_iter_is_begin: * @iter: a #GSequenceIter * * Returns whether @iter is the begin iterator * * Return value: whether @iter is the begin iterator * * Since: 2.14 **/ gboolean g_sequence_iter_is_begin (GSequenceIter *iter) { g_return_val_if_fail (iter != NULL, FALSE); return (node_get_prev (iter) == iter); } /** * g_sequence_iter_get_position: * @iter: a #GSequenceIter * * Returns the position of @iter * * Return value: the position of @iter * * Since: 2.14 **/ gint g_sequence_iter_get_position (GSequenceIter *iter) { g_return_val_if_fail (iter != NULL, -1); return node_get_pos (iter); } /** * g_sequence_iter_next: * @iter: a #GSequenceIter * * Returns an iterator pointing to the next position after @iter. If * @iter is the end iterator, the end iterator is returned. * * Return value: a #GSequenceIter pointing to the next position after @iter. * * Since: 2.14 **/ GSequenceIter * g_sequence_iter_next (GSequenceIter *iter) { g_return_val_if_fail (iter != NULL, NULL); return node_get_next (iter); } /** * g_sequence_iter_prev: * @iter: a #GSequenceIter * * Returns an iterator pointing to the previous position before @iter. If * @iter is the begin iterator, the begin iterator is returned. * * Return value: a #GSequenceIter pointing to the previous position before * @iter. * * Since: 2.14 **/ GSequenceIter * g_sequence_iter_prev (GSequenceIter *iter) { g_return_val_if_fail (iter != NULL, NULL); return node_get_prev (iter); } /** * g_sequence_iter_move: * @iter: a #GSequenceIter * @delta: A positive or negative number indicating how many positions away * from @iter the returned #GSequenceIter will be. * * Returns the #GSequenceIter which is @delta positions away from @iter. * If @iter is closer than -@delta positions to the beginning of the sequence, * the begin iterator is returned. If @iter is closer than @delta positions * to the end of the sequence, the end iterator is returned. * * Return value: a #GSequenceIter which is @delta positions away from @iter. * * Since: 2.14 **/ GSequenceIter * g_sequence_iter_move (GSequenceIter *iter, gint delta) { gint new_pos; g_return_val_if_fail (iter != NULL, NULL); new_pos = node_get_pos (iter) + delta; new_pos = clamp_position (get_sequence (iter), new_pos); return node_get_by_pos (iter, new_pos); } /** * g_sequence_swap: * @a: a #GSequenceIter * @b: a #GSequenceIter * * Swaps the items pointed to by @a and @b. It is allowed for @a and @b * to point into difference sequences. * * Since: 2.14 **/ void g_sequence_swap (GSequenceIter *a, GSequenceIter *b) { GSequenceNode *leftmost, *rightmost, *rightmost_next; int a_pos, b_pos; g_return_if_fail (!g_sequence_iter_is_end (a)); g_return_if_fail (!g_sequence_iter_is_end (b)); if (a == b) return; a_pos = g_sequence_iter_get_position (a); b_pos = g_sequence_iter_get_position (b); if (a_pos > b_pos) { leftmost = b; rightmost = a; } else { leftmost = a; rightmost = b; } rightmost_next = node_get_next (rightmost); /* The situation is now like this: * * ..., leftmost, ......., rightmost, rightmost_next, ... * */ g_sequence_move (rightmost, leftmost); g_sequence_move (leftmost, rightmost_next); } /* * Implementation of a treap * * */ static guint get_priority (GSequenceNode *node) { guint key = GPOINTER_TO_UINT (node); /* This hash function is based on one found on Thomas Wang's * web page at * * http://www.concentric.net/~Ttwang/tech/inthash.htm * */ key = (key << 15) - key - 1; key = key ^ (key >> 12); key = key + (key << 2); key = key ^ (key >> 4); key = key + (key << 3) + (key << 11); key = key ^ (key >> 16); /* We rely on 0 being less than all other priorities */ return key? key : 1; } static GSequenceNode * find_root (GSequenceNode *node) { while (node->parent) node = node->parent; return node; } static GSequenceNode * node_new (gpointer data) { GSequenceNode *node = g_slice_new0 (GSequenceNode); node->n_nodes = 1; node->data = data; node->left = NULL; node->right = NULL; node->parent = NULL; return node; } static GSequenceNode * node_get_first (GSequenceNode *node) { node = find_root (node); while (node->left) node = node->left; return node; } static GSequenceNode * node_get_last (GSequenceNode *node) { node = find_root (node); while (node->right) node = node->right; return node; } #define NODE_LEFT_CHILD(n) (((n)->parent) && ((n)->parent->left) == (n)) #define NODE_RIGHT_CHILD(n) (((n)->parent) && ((n)->parent->right) == (n)) static GSequenceNode * node_get_next (GSequenceNode *node) { GSequenceNode *n = node; if (n->right) { n = n->right; while (n->left) n = n->left; } else { while (NODE_RIGHT_CHILD (n)) n = n->parent; if (n->parent) n = n->parent; else n = node; } return n; } static GSequenceNode * node_get_prev (GSequenceNode *node) { GSequenceNode *n = node; if (n->left) { n = n->left; while (n->right) n = n->right; } else { while (NODE_LEFT_CHILD (n)) n = n->parent; if (n->parent) n = n->parent; else n = node; } return n; } #define N_NODES(n) ((n)? (n)->n_nodes : 0) static gint node_get_pos (GSequenceNode *node) { int n_smaller = 0; if (node->left) n_smaller = node->left->n_nodes; while (node) { if (NODE_RIGHT_CHILD (node)) n_smaller += N_NODES (node->parent->left) + 1; node = node->parent; } return n_smaller; } static GSequenceNode * node_get_by_pos (GSequenceNode *node, gint pos) { int i; node = find_root (node); while ((i = N_NODES (node->left)) != pos) { if (i < pos) { node = node->right; pos -= (i + 1); } else { node = node->left; } } return node; } static GSequenceNode * node_find_closest (GSequenceNode *haystack, GSequenceNode *needle, GSequenceNode *end, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data) { GSequenceNode *best; gint c; haystack = find_root (haystack); do { best = haystack; /* iter_cmp can't be passed the end node, since the function may * be user-supplied */ if (haystack == end) c = 1; else c = iter_cmp (haystack, needle, cmp_data); /* In the following we don't break even if c == 0. Instaed we go on * searching along the 'bigger' nodes, so that we find the last one * that is equal to the needle. */ if (c > 0) haystack = haystack->left; else haystack = haystack->right; } while (haystack != NULL); /* If the best node is smaller or equal to the data, then move one step * to the right to make sure the best one is strictly bigger than the data */ if (best != end && c <= 0) best = node_get_next (best); return best; } static gint node_get_length (GSequenceNode *node) { node = find_root (node); return node->n_nodes; } static void real_node_free (GSequenceNode *node, GSequence *seq) { if (node) { real_node_free (node->left, seq); real_node_free (node->right, seq); if (seq && seq->data_destroy_notify && node != seq->end_node) seq->data_destroy_notify (node->data); g_slice_free (GSequenceNode, node); } } static void node_free (GSequenceNode *node, GSequence *seq) { node = find_root (node); real_node_free (node, seq); } static void node_update_fields (GSequenceNode *node) { int n_nodes = 1; n_nodes += N_NODES (node->left); n_nodes += N_NODES (node->right); node->n_nodes = n_nodes; } static void node_rotate (GSequenceNode *node) { GSequenceNode *tmp, *old; g_assert (node->parent); g_assert (node->parent != node); if (NODE_LEFT_CHILD (node)) { /* rotate right */ tmp = node->right; node->right = node->parent; node->parent = node->parent->parent; if (node->parent) { if (node->parent->left == node->right) node->parent->left = node; else node->parent->right = node; } g_assert (node->right); node->right->parent = node; node->right->left = tmp; if (node->right->left) node->right->left->parent = node->right; old = node->right; } else { /* rotate left */ tmp = node->left; node->left = node->parent; node->parent = node->parent->parent; if (node->parent) { if (node->parent->right == node->left) node->parent->right = node; else node->parent->left = node; } g_assert (node->left); node->left->parent = node; node->left->right = tmp; if (node->left->right) node->left->right->parent = node->left; old = node->left; } node_update_fields (old); node_update_fields (node); } static void node_update_fields_deep (GSequenceNode *node) { if (node) { node_update_fields (node); node_update_fields_deep (node->parent); } } static void rotate_down (GSequenceNode *node, guint priority) { guint left, right; left = node->left ? get_priority (node->left) : 0; right = node->right ? get_priority (node->right) : 0; while (priority < left || priority < right) { if (left > right) node_rotate (node->left); else node_rotate (node->right); left = node->left ? get_priority (node->left) : 0; right = node->right ? get_priority (node->right) : 0; } } static void node_cut (GSequenceNode *node) { while (node->parent) node_rotate (node); if (node->left) node->left->parent = NULL; node->left = NULL; node_update_fields (node); rotate_down (node, get_priority (node)); } static void node_join (GSequenceNode *left, GSequenceNode *right) { GSequenceNode *fake = node_new (NULL); fake->left = find_root (left); fake->right = find_root (right); fake->left->parent = fake; fake->right->parent = fake; node_update_fields (fake); node_unlink (fake); node_free (fake, NULL); } static void node_insert_before (GSequenceNode *node, GSequenceNode *new) { new->left = node->left; if (new->left) new->left->parent = new; new->parent = node; node->left = new; node_update_fields_deep (new); while (new->parent && get_priority (new) > get_priority (new->parent)) node_rotate (new); rotate_down (new, get_priority (new)); } static void node_unlink (GSequenceNode *node) { rotate_down (node, 0); if (NODE_RIGHT_CHILD (node)) node->parent->right = NULL; else if (NODE_LEFT_CHILD (node)) node->parent->left = NULL; if (node->parent) node_update_fields_deep (node->parent); node->parent = NULL; } static void node_insert_sorted (GSequenceNode *node, GSequenceNode *new, GSequenceNode *end, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data) { GSequenceNode *closest; closest = node_find_closest (node, new, end, iter_cmp, cmp_data); node_unlink (new); node_insert_before (closest, new); } cutter-testing-framework-1.1.7/glib-compatible/gregex.c0000644000175000017500000022704111407320461021335 0ustar koukou/* GRegex -- regular expression API wrapper around PCRE. * * Copyright (C) 1999, 2000 Scott Wimer * Copyright (C) 2004, Matthias Clasen * Copyright (C) 2005 - 2007, Marco Barisione * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "glib.h" #include "glibintl.h" #include "gregex.h" #ifdef USE_SYSTEM_PCRE #include #else #include "pcre/pcre.h" #endif /* PCRE 7.3 does not contain the definition of PCRE_ERROR_NULLWSLIMIT */ #ifndef PCRE_ERROR_NULLWSLIMIT #define PCRE_ERROR_NULLWSLIMIT (-22) #endif /* Mask of all the possible values for GRegexCompileFlags. */ #define G_REGEX_COMPILE_MASK (G_REGEX_CASELESS | \ G_REGEX_MULTILINE | \ G_REGEX_DOTALL | \ G_REGEX_EXTENDED | \ G_REGEX_ANCHORED | \ G_REGEX_DOLLAR_ENDONLY | \ G_REGEX_UNGREEDY | \ G_REGEX_RAW | \ G_REGEX_NO_AUTO_CAPTURE | \ G_REGEX_OPTIMIZE | \ G_REGEX_DUPNAMES | \ G_REGEX_NEWLINE_CR | \ G_REGEX_NEWLINE_LF | \ G_REGEX_NEWLINE_CRLF) /* Mask of all the possible values for GRegexMatchFlags. */ #define G_REGEX_MATCH_MASK (G_REGEX_MATCH_ANCHORED | \ G_REGEX_MATCH_NOTBOL | \ G_REGEX_MATCH_NOTEOL | \ G_REGEX_MATCH_NOTEMPTY | \ G_REGEX_MATCH_PARTIAL | \ G_REGEX_MATCH_NEWLINE_CR | \ G_REGEX_MATCH_NEWLINE_LF | \ G_REGEX_MATCH_NEWLINE_CRLF | \ G_REGEX_MATCH_NEWLINE_ANY) /* if the string is in UTF-8 use g_utf8_ functions, else use * use just +/- 1. */ #define NEXT_CHAR(re, s) (((re)->compile_opts & PCRE_UTF8) ? \ g_utf8_next_char (s) : \ ((s) + 1)) #define PREV_CHAR(re, s) (((re)->compile_opts & PCRE_UTF8) ? \ g_utf8_prev_char (s) : \ ((s) - 1)) struct _GMatchInfo { GRegex *regex; /* the regex */ GRegexMatchFlags match_opts; /* options used at match time on the regex */ gint matches; /* number of matching sub patterns */ gint pos; /* position in the string where last match left off */ gint *offsets; /* array of offsets paired 0,1 ; 2,3 ; 3,4 etc */ gint n_offsets; /* number of offsets */ gint *workspace; /* workspace for pcre_dfa_exec() */ gint n_workspace; /* number of workspace elements */ const gchar *string; /* string passed to the match function */ gssize string_len; /* length of string */ }; struct _GRegex { volatile gint ref_count; /* the ref count for the immutable part */ gchar *pattern; /* the pattern */ pcre *pcre_re; /* compiled form of the pattern */ GRegexCompileFlags compile_opts; /* options used at compile time on the pattern */ GRegexMatchFlags match_opts; /* options used at match time on the regex */ pcre_extra *extra; /* data stored when G_REGEX_OPTIMIZE is used */ }; /* TRUE if ret is an error code, FALSE otherwise. */ #define IS_PCRE_ERROR(ret) ((ret) < PCRE_ERROR_NOMATCH && (ret) != PCRE_ERROR_PARTIAL) typedef struct _InterpolationData InterpolationData; static gboolean interpolation_list_needs_match (GList *list); static gboolean interpolate_replacement (const GMatchInfo *match_info, GString *result, gpointer data); static GList *split_replacement (const gchar *replacement, GError **error); static void free_interpolation_data (InterpolationData *data); static const gchar * match_error (gint errcode) { switch (errcode) { case PCRE_ERROR_NOMATCH: /* not an error */ break; case PCRE_ERROR_NULL: /* NULL argument, this should not happen in GRegex */ g_warning ("A NULL argument was passed to PCRE"); break; case PCRE_ERROR_BADOPTION: return "bad options"; case PCRE_ERROR_BADMAGIC: return _("corrupted object"); case PCRE_ERROR_UNKNOWN_OPCODE: return N_("internal error or corrupted object"); case PCRE_ERROR_NOMEMORY: return _("out of memory"); case PCRE_ERROR_NOSUBSTRING: /* not used by pcre_exec() */ break; case PCRE_ERROR_MATCHLIMIT: return _("backtracking limit reached"); case PCRE_ERROR_CALLOUT: /* callouts are not implemented */ break; case PCRE_ERROR_BADUTF8: case PCRE_ERROR_BADUTF8_OFFSET: /* we do not check if strings are valid */ break; case PCRE_ERROR_PARTIAL: /* not an error */ break; case PCRE_ERROR_BADPARTIAL: return _("the pattern contains items not supported for partial matching"); case PCRE_ERROR_INTERNAL: return _("internal error"); case PCRE_ERROR_BADCOUNT: /* negative ovecsize, this should not happen in GRegex */ g_warning ("A negative ovecsize was passed to PCRE"); break; case PCRE_ERROR_DFA_UITEM: return _("the pattern contains items not supported for partial matching"); case PCRE_ERROR_DFA_UCOND: return _("back references as conditions are not supported for partial matching"); case PCRE_ERROR_DFA_UMLIMIT: /* the match_field field is not used in GRegex */ break; case PCRE_ERROR_DFA_WSSIZE: /* handled expanding the workspace */ break; case PCRE_ERROR_DFA_RECURSE: case PCRE_ERROR_RECURSIONLIMIT: return _("recursion limit reached"); case PCRE_ERROR_NULLWSLIMIT: return _("workspace limit for empty substrings reached"); case PCRE_ERROR_BADNEWLINE: return _("invalid combination of newline flags"); default: break; } return _("unknown error"); } static const gchar * compile_error (gint errcode, const gchar *default_msg) { switch (errcode) { case 1: return _("\\ at end of pattern"); case 2: return _("\\c at end of pattern"); case 3: return _("unrecognized character follows \\"); case 37: return _("case changing escapes are not allowed here"); case 4: return _("numbers out of order in {} quantifier"); case 5: return _("number too big in {} quantifier"); case 6: return _("missing terminating ] for character class"); case 7: return _("invalid escape sequence in character class"); case 8: return _("range out of order in character class"); case 9: return _("nothing to repeat"); case 12: return _("unrecognized character after (?"); case 24: return _("unrecognized character after (?<"); case 41: return _("unrecognized character after (?P"); case 13: return _("POSIX named classes are supported only within a class"); case 14: return _("(?R or (?[+-]digits must be followed by )"); case 15: return _("reference to non-existent subpattern"); case 18: return _("missing ) after comment"); case 20: return _("regular expression too large"); case 21: return _("failed to get memory"); case 25: return _("lookbehind assertion is not fixed length"); case 26: return _("malformed number or name after (?("); case 27: return _("conditional group contains more than two branches"); case 28: return _("assertion expected after (?("); case 30: return _("unknown POSIX class name"); case 31: return _("POSIX collating elements are not supported"); case 34: return _("character value in \\x{...} sequence is too large"); case 35: return _("invalid condition (?(0)"); case 36: return _("\\C not allowed in lookbehind assertion"); case 40: return _("recursive call could loop indefinitely"); case 42: return _("missing terminator in subpattern name"); case 43: return _("two named subpatterns have the same name"); case 46: return _("malformed \\P or \\p sequence"); case 47: return _("unknown property name after \\P or \\p"); case 48: return _("subpattern name is too long (maximum 32 characters)"); case 49: return _("too many named subpatterns (maximum 10,000)"); case 51: return _("octal value is greater than \\377"); case 54: return _("DEFINE group contains more than one branch"); case 55: return _("repeating a DEFINE group is not allowed"); case 56: return _("inconsistent NEWLINE options"); case 57: return _("\\g is not followed by a braced name or an optionally " "braced non-zero number"); case 11: return _("unexpected repeat"); case 23: return _("code overflow"); case 52: return _("overran compiling workspace"); case 53: return _("previously-checked referenced subpattern not found"); case 16: /* This should not happen as we never pass a NULL erroffset */ g_warning ("erroffset passed as NULL"); break; case 17: /* This should not happen as we check options before passing them * to pcre_compile2() */ g_warning ("unknown option bit(s) set"); break; case 32: case 44: case 45: /* These errors should not happen as we are using an UTF8-enabled PCRE * and we do not check if strings are valid */ g_warning (default_msg); break; } return default_msg; } /* GMatchInfo */ static GMatchInfo * match_info_new (const GRegex *regex, const gchar *string, gint string_len, gint start_position, gint match_options, gboolean is_dfa) { GMatchInfo *match_info; if (string_len < 0) string_len = strlen (string); match_info = g_new0 (GMatchInfo, 1); match_info->regex = g_regex_ref ((GRegex *)regex); match_info->string = string; match_info->string_len = string_len; match_info->matches = PCRE_ERROR_NOMATCH; match_info->pos = start_position; match_info->match_opts = match_options; if (is_dfa) { /* These values should be enough for most cases, if they are not * enough g_regex_match_all_full() will expand them. */ match_info->n_offsets = 24; match_info->n_workspace = 100; match_info->workspace = g_new (gint, match_info->n_workspace); } else { gint capture_count; pcre_fullinfo (regex->pcre_re, regex->extra, PCRE_INFO_CAPTURECOUNT, &capture_count); match_info->n_offsets = (capture_count + 1) * 3; } match_info->offsets = g_new0 (gint, match_info->n_offsets); return match_info; } /** * g_match_info_get_regex: * @match_info: a #GMatchInfo * * Returns #GRegex object used in @match_info. It belongs to Glib * and must not be freed. Use g_regex_ref() if you need to keep it * after you free @match_info object. * * Returns: #GRegex object used in @match_info * * Since: 2.14 */ GRegex * g_match_info_get_regex (const GMatchInfo *match_info) { g_return_val_if_fail (match_info != NULL, NULL); return match_info->regex; } /** * g_match_info_get_string: * @match_info: a #GMatchInfo * * Returns the string searched with @match_info. This is the * string passed to g_regex_match() or g_regex_replace() so * you may not free it before calling this function. * * Returns: the string searched with @match_info * * Since: 2.14 */ const gchar * g_match_info_get_string (const GMatchInfo *match_info) { g_return_val_if_fail (match_info != NULL, NULL); return match_info->string; } /** * g_match_info_free: * @match_info: a #GMatchInfo * * Frees all the memory associated with the #GMatchInfo structure. * * Since: 2.14 */ void g_match_info_free (GMatchInfo *match_info) { if (match_info) { g_regex_unref (match_info->regex); g_free (match_info->offsets); g_free (match_info->workspace); g_free (match_info); } } /** * g_match_info_next: * @match_info: a #GMatchInfo structure * @error: location to store the error occuring, or %NULL to ignore errors * * Scans for the next match using the same parameters of the previous * call to g_regex_match_full() or g_regex_match() that returned * @match_info. * * The match is done on the string passed to the match function, so you * cannot free it before calling this function. * * Returns: %TRUE is the string matched, %FALSE otherwise * * Since: 2.14 */ gboolean g_match_info_next (GMatchInfo *match_info, GError **error) { gint opts; g_return_val_if_fail (match_info != NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); g_return_val_if_fail (match_info->pos >= 0, FALSE); opts = match_info->regex->match_opts | match_info->match_opts; match_info->matches = pcre_exec (match_info->regex->pcre_re, match_info->regex->extra, match_info->string, match_info->string_len, match_info->pos, match_info->regex->match_opts | match_info->match_opts, match_info->offsets, match_info->n_offsets); if (IS_PCRE_ERROR (match_info->matches)) { g_set_error (error, G_REGEX_ERROR, G_REGEX_ERROR_MATCH, _("Error while matching regular expression %s: %s"), match_info->regex->pattern, match_error (match_info->matches)); return FALSE; } /* avoid infinite loops if the pattern is an empty string or something * equivalent */ if (match_info->pos == match_info->offsets[1]) { if (match_info->pos > match_info->string_len) { /* we have reached the end of the string */ match_info->pos = -1; match_info->matches = PCRE_ERROR_NOMATCH; return FALSE; } match_info->pos = NEXT_CHAR (match_info->regex, &match_info->string[match_info->pos]) - match_info->string; } else { match_info->pos = match_info->offsets[1]; } return match_info->matches >= 0; } /** * g_match_info_matches: * @match_info: a #GMatchInfo structure * * Returns whether the previous match operation succeeded. * * Returns: %TRUE if the previous match operation succeeded, * %FALSE otherwise * * Since: 2.14 */ gboolean g_match_info_matches (const GMatchInfo *match_info) { g_return_val_if_fail (match_info != NULL, FALSE); return match_info->matches >= 0; } /** * g_match_info_get_match_count: * @match_info: a #GMatchInfo structure * * Retrieves the number of matched substrings (including substring 0, * that is the whole matched text), so 1 is returned if the pattern * has no substrings in it and 0 is returned if the match failed. * * If the last match was obtained using the DFA algorithm, that is * using g_regex_match_all() or g_regex_match_all_full(), the retrieved * count is not that of the number of capturing parentheses but that of * the number of matched substrings. * * Returns: Number of matched substrings, or -1 if an error occurred * * Since: 2.14 */ gint g_match_info_get_match_count (const GMatchInfo *match_info) { g_return_val_if_fail (match_info, -1); if (match_info->matches == PCRE_ERROR_NOMATCH) /* no match */ return 0; else if (match_info->matches < PCRE_ERROR_NOMATCH) /* error */ return -1; else /* match */ return match_info->matches; } /** * g_match_info_is_partial_match: * @match_info: a #GMatchInfo structure * * Usually if the string passed to g_regex_match*() matches as far as * it goes, but is too short to match the entire pattern, %FALSE is * returned. There are circumstances where it might be helpful to * distinguish this case from other cases in which there is no match. * * Consider, for example, an application where a human is required to * type in data for a field with specific formatting requirements. An * example might be a date in the form ddmmmyy, defined by the pattern * "^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$". * If the application sees the user’s keystrokes one by one, and can * check that what has been typed so far is potentially valid, it is * able to raise an error as soon as a mistake is made. * * GRegex supports the concept of partial matching by means of the * #G_REGEX_MATCH_PARTIAL flag. When this is set the return code for * g_regex_match() or g_regex_match_full() is, as usual, %TRUE * for a complete match, %FALSE otherwise. But, when these functions * return %FALSE, you can check if the match was partial calling * g_match_info_is_partial_match(). * * When using partial matching you cannot use g_match_info_fetch*(). * * Because of the way certain internal optimizations are implemented * the partial matching algorithm cannot be used with all patterns. * So repeated single characters such as "a{2,4}" and repeated single * meta-sequences such as "\d+" are not permitted if the maximum number * of occurrences is greater than one. Optional items such as "\d?" * (where the maximum is one) are permitted. Quantifiers with any values * are permitted after parentheses, so the invalid examples above can be * coded thus "(a){2,4}" and "(\d)+". If #G_REGEX_MATCH_PARTIAL is set * for a pattern that does not conform to the restrictions, matching * functions return an error. * * Returns: %TRUE if the match was partial, %FALSE otherwise * * Since: 2.14 */ gboolean g_match_info_is_partial_match (const GMatchInfo *match_info) { g_return_val_if_fail (match_info != NULL, FALSE); return match_info->matches == PCRE_ERROR_PARTIAL; } /** * g_match_info_expand_references: * @match_info: a #GMatchInfo or %NULL * @string_to_expand: the string to expand * @error: location to store the error occuring, or %NULL to ignore errors * * Returns a new string containing the text in @string_to_expand with * references and escape sequences expanded. References refer to the last * match done with @string against @regex and have the same syntax used by * g_regex_replace(). * * The @string_to_expand must be UTF-8 encoded even if #G_REGEX_RAW was * passed to g_regex_new(). * * The backreferences are extracted from the string passed to the match * function, so you cannot call this function after freeing the string. * * @match_info may be %NULL in which case @string_to_expand must not * contain references. For instance "foo\n" does not refer to an actual * pattern and '\n' merely will be replaced with \n character, * while to expand "\0" (whole match) one needs the result of a match. * Use g_regex_check_replacement() to find out whether @string_to_expand * contains references. * * Returns: the expanded string, or %NULL if an error occurred * * Since: 2.14 */ gchar * g_match_info_expand_references (const GMatchInfo *match_info, const gchar *string_to_expand, GError **error) { GString *result; GList *list; GError *tmp_error = NULL; g_return_val_if_fail (string_to_expand != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); list = split_replacement (string_to_expand, &tmp_error); if (tmp_error != NULL) { g_propagate_error (error, tmp_error); return NULL; } if (!match_info && interpolation_list_needs_match (list)) { g_critical ("String '%s' contains references to the match, can't " "expand references without GMatchInfo object", string_to_expand); return NULL; } result = g_string_sized_new (strlen (string_to_expand)); interpolate_replacement (match_info, result, list); g_list_foreach (list, (GFunc)free_interpolation_data, NULL); g_list_free (list); return g_string_free (result, FALSE); } /** * g_match_info_fetch: * @match_info: #GMatchInfo structure * @match_num: number of the sub expression * * Retrieves the text matching the @match_num'th capturing * parentheses. 0 is the full text of the match, 1 is the first paren * set, 2 the second, and so on. * * If @match_num is a valid sub pattern but it didn't match anything * (e.g. sub pattern 1, matching "b" against "(a)?b") then an empty * string is returned. * * If the match was obtained using the DFA algorithm, that is using * g_regex_match_all() or g_regex_match_all_full(), the retrieved * string is not that of a set of parentheses but that of a matched * substring. Substrings are matched in reverse order of length, so * 0 is the longest match. * * The string is fetched from the string passed to the match function, * so you cannot call this function after freeing the string. * * Returns: The matched substring, or %NULL if an error occurred. * You have to free the string yourself * * Since: 2.14 */ gchar * g_match_info_fetch (const GMatchInfo *match_info, gint match_num) { /* we cannot use pcre_get_substring() because it allocates the * string using pcre_malloc(). */ gchar *match = NULL; gint start, end; g_return_val_if_fail (match_info != NULL, NULL); g_return_val_if_fail (match_num >= 0, NULL); /* match_num does not exist or it didn't matched, i.e. matching "b" * against "(a)?b" then group 0 is empty. */ if (!g_match_info_fetch_pos (match_info, match_num, &start, &end)) match = NULL; else if (start == -1) match = g_strdup (""); else match = g_strndup (&match_info->string[start], end - start); return match; } /** * g_match_info_fetch_pos: * @match_info: #GMatchInfo structure * @match_num: number of the sub expression * @start_pos: pointer to location where to store the start position * @end_pos: pointer to location where to store the end position * * Retrieves the position of the @match_num'th capturing * parentheses. 0 is the full text of the match, 1 is the first * paren set, 2 the second, and so on. * * If @match_num is a valid sub pattern but it didn't match anything * (e.g. sub pattern 1, matching "b" against "(a)?b") then @start_pos * and @end_pos are set to -1 and %TRUE is returned. * * If the match was obtained using the DFA algorithm, that is using * g_regex_match_all() or g_regex_match_all_full(), the retrieved * position is not that of a set of parentheses but that of a matched * substring. Substrings are matched in reverse order of length, so * 0 is the longest match. * * Returns: %TRUE if the position was fetched, %FALSE otherwise. If * the position cannot be fetched, @start_pos and @end_pos are left * unchanged * * Since: 2.14 */ gboolean g_match_info_fetch_pos (const GMatchInfo *match_info, gint match_num, gint *start_pos, gint *end_pos) { g_return_val_if_fail (match_info != NULL, FALSE); g_return_val_if_fail (match_num >= 0, FALSE); /* make sure the sub expression number they're requesting is less than * the total number of sub expressions that were matched. */ if (match_num >= match_info->matches) return FALSE; if (start_pos != NULL) *start_pos = match_info->offsets[2 * match_num]; if (end_pos != NULL) *end_pos = match_info->offsets[2 * match_num + 1]; return TRUE; } /* * Returns number of first matched subpattern with name @name. * There may be more than one in case when DUPNAMES is used, * and not all subpatterns with that name match; * pcre_get_stringnumber() does not work in that case. */ static gint get_matched_substring_number (const GMatchInfo *match_info, const gchar *name) { gint entrysize; gchar *first, *last; guchar *entry; if (!(match_info->regex->compile_opts & G_REGEX_DUPNAMES)) return pcre_get_stringnumber (match_info->regex->pcre_re, name); /* This code is copied from pcre_get.c: get_first_set() */ entrysize = pcre_get_stringtable_entries (match_info->regex->pcre_re, name, &first, &last); if (entrysize <= 0) return entrysize; for (entry = (guchar*) first; entry <= (guchar*) last; entry += entrysize) { gint n = (entry[0] << 8) + entry[1]; if (match_info->offsets[n*2] >= 0) return n; } return (first[0] << 8) + first[1]; } /** * g_match_info_fetch_named: * @match_info: #GMatchInfo structure * @name: name of the subexpression * * Retrieves the text matching the capturing parentheses named @name. * * If @name is a valid sub pattern name but it didn't match anything * (e.g. sub pattern "X", matching "b" against "(?P<X>a)?b") * then an empty string is returned. * * The string is fetched from the string passed to the match function, * so you cannot call this function after freeing the string. * * Returns: The matched substring, or %NULL if an error occurred. * You have to free the string yourself * * Since: 2.14 */ gchar * g_match_info_fetch_named (const GMatchInfo *match_info, const gchar *name) { /* we cannot use pcre_get_named_substring() because it allocates the * string using pcre_malloc(). */ gint num; g_return_val_if_fail (match_info != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); num = get_matched_substring_number (match_info, name); if (num < 0) return NULL; else return g_match_info_fetch (match_info, num); } /** * g_match_info_fetch_named_pos: * @match_info: #GMatchInfo structure * @name: name of the subexpression * @start_pos: pointer to location where to store the start position * @end_pos: pointer to location where to store the end position * * Retrieves the position of the capturing parentheses named @name. * * If @name is a valid sub pattern name but it didn't match anything * (e.g. sub pattern "X", matching "b" against "(?P<X>a)?b") * then @start_pos and @end_pos are set to -1 and %TRUE is returned. * * Returns: %TRUE if the position was fetched, %FALSE otherwise. If * the position cannot be fetched, @start_pos and @end_pos are left * unchanged * * Since: 2.14 */ gboolean g_match_info_fetch_named_pos (const GMatchInfo *match_info, const gchar *name, gint *start_pos, gint *end_pos) { gint num; g_return_val_if_fail (match_info != NULL, FALSE); g_return_val_if_fail (name != NULL, FALSE); num = get_matched_substring_number (match_info, name); if (num < 0) return FALSE; return g_match_info_fetch_pos (match_info, num, start_pos, end_pos); } /** * g_match_info_fetch_all: * @match_info: a #GMatchInfo structure * * Bundles up pointers to each of the matching substrings from a match * and stores them in an array of gchar pointers. The first element in * the returned array is the match number 0, i.e. the entire matched * text. * * If a sub pattern didn't match anything (e.g. sub pattern 1, matching * "b" against "(a)?b") then an empty string is inserted. * * If the last match was obtained using the DFA algorithm, that is using * g_regex_match_all() or g_regex_match_all_full(), the retrieved * strings are not that matched by sets of parentheses but that of the * matched substring. Substrings are matched in reverse order of length, * so the first one is the longest match. * * The strings are fetched from the string passed to the match function, * so you cannot call this function after freeing the string. * * Returns: a %NULL-terminated array of gchar * pointers. It must be * freed using g_strfreev(). If the previous match failed %NULL is * returned * * Since: 2.14 */ gchar ** g_match_info_fetch_all (const GMatchInfo *match_info) { /* we cannot use pcre_get_substring_list() because the returned value * isn't suitable for g_strfreev(). */ gchar **result; gint i; g_return_val_if_fail (match_info != NULL, NULL); if (match_info->matches < 0) return NULL; result = g_new (gchar *, match_info->matches + 1); for (i = 0; i < match_info->matches; i++) result[i] = g_match_info_fetch (match_info, i); result[i] = NULL; return result; } /* GRegex */ GQuark g_regex_error_quark (void) { static GQuark error_quark = 0; if (error_quark == 0) error_quark = g_quark_from_static_string ("g-regex-error-quark"); return error_quark; } /** * g_regex_ref: * @regex: a #GRegex * * Increases reference count of @regex by 1. * * Returns: @regex * * Since: 2.14 */ GRegex * g_regex_ref (GRegex *regex) { g_return_val_if_fail (regex != NULL, NULL); g_atomic_int_inc (®ex->ref_count); return regex; } /** * g_regex_unref: * @regex: a #GRegex * * Decreases reference count of @regex by 1. When reference count drops * to zero, it frees all the memory associated with the regex structure. * * Since: 2.14 */ void g_regex_unref (GRegex *regex) { g_return_if_fail (regex != NULL); if (g_atomic_int_exchange_and_add (®ex->ref_count, -1) - 1 == 0) { g_free (regex->pattern); if (regex->pcre_re != NULL) pcre_free (regex->pcre_re); if (regex->extra != NULL) pcre_free (regex->extra); g_free (regex); } } /** * g_regex_new: * @pattern: the regular expression * @compile_options: compile options for the regular expression * @match_options: match options for the regular expression * @error: return location for a #GError * * Compiles the regular expression to an internal form, and does * the initial setup of the #GRegex structure. * * The error code of @error is G_REGEX_ERROR_COMPILE, but * future versions will add more specific error codes. * * Returns: a #GRegex structure. Call g_regex_unref() when you * are done with it * * Since: 2.14 */ GRegex * g_regex_new (const gchar *pattern, GRegexCompileFlags compile_options, GRegexMatchFlags match_options, GError **error) { GRegex *regex; pcre *re; const gchar *errmsg; gint erroffset; gint errcode; gboolean optimize = FALSE; static gboolean initialized = FALSE; unsigned long int pcre_compile_options; g_return_val_if_fail (pattern != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); g_return_val_if_fail ((compile_options & ~G_REGEX_COMPILE_MASK) == 0, NULL); g_return_val_if_fail ((match_options & ~G_REGEX_MATCH_MASK) == 0, NULL); if (!initialized) { gint support; const gchar *msg; pcre_config (PCRE_CONFIG_UTF8, &support); if (!support) { msg = N_("PCRE library is compiled without UTF8 support"); g_critical (msg); g_set_error (error, G_REGEX_ERROR, G_REGEX_ERROR_COMPILE, gettext (msg)); return NULL; } pcre_config (PCRE_CONFIG_UNICODE_PROPERTIES, &support); if (!support) { msg = N_("PCRE library is compiled without UTF8 properties support"); g_critical (msg); g_set_error (error, G_REGEX_ERROR, G_REGEX_ERROR_COMPILE, gettext (msg)); return NULL; } initialized = TRUE; } /* G_REGEX_OPTIMIZE has the same numeric value of PCRE_NO_UTF8_CHECK, * as we do not need to wrap PCRE_NO_UTF8_CHECK. */ if (compile_options & G_REGEX_OPTIMIZE) optimize = TRUE; /* In GRegex the string are, by default, UTF-8 encoded. PCRE * instead uses UTF-8 only if required with PCRE_UTF8. */ if (compile_options & G_REGEX_RAW) { /* disable utf-8 */ compile_options &= ~G_REGEX_RAW; } else { /* enable utf-8 */ compile_options |= PCRE_UTF8 | PCRE_NO_UTF8_CHECK; match_options |= PCRE_NO_UTF8_CHECK; } /* PCRE_NEWLINE_ANY is the default for the internal PCRE but * not for the system one. */ if (!(compile_options & G_REGEX_NEWLINE_CR) && !(compile_options & G_REGEX_NEWLINE_LF)) { compile_options |= PCRE_NEWLINE_ANY; } /* compile the pattern */ re = pcre_compile2 (pattern, compile_options, &errcode, &errmsg, &erroffset, NULL); /* if the compilation failed, set the error member and return * immediately */ if (re == NULL) { GError *tmp_error; /* Get the translatable error message instead of just using the * English one */ errmsg = compile_error (errcode, errmsg); /* PCRE uses byte offsets but we want to show character offsets */ erroffset = g_utf8_pointer_to_offset (pattern, &pattern[erroffset]); tmp_error = g_error_new (G_REGEX_ERROR, G_REGEX_ERROR_COMPILE, _("Error while compiling regular " "expression %s at char %d: %s"), pattern, erroffset, errmsg); g_propagate_error (error, tmp_error); return NULL; } /* For options set at the beginning of the pattern, pcre puts them into * compile options, e.g. "(?i)foo" will make the pcre structure store * PCRE_CASELESS even though it wasn't explicitly given for compilation. */ pcre_fullinfo (re, NULL, PCRE_INFO_OPTIONS, &pcre_compile_options); compile_options = pcre_compile_options; if (!(compile_options & G_REGEX_DUPNAMES)) { gboolean jchanged = FALSE; pcre_fullinfo (re, NULL, PCRE_INFO_JCHANGED, &jchanged); if (jchanged) compile_options |= G_REGEX_DUPNAMES; } regex = g_new0 (GRegex, 1); regex->ref_count = 1; regex->pattern = g_strdup (pattern); regex->pcre_re = re; regex->compile_opts = compile_options; regex->match_opts = match_options; if (optimize) { regex->extra = pcre_study (regex->pcre_re, 0, &errmsg); if (errmsg != NULL) { GError *tmp_error = g_error_new (G_REGEX_ERROR, G_REGEX_ERROR_OPTIMIZE, _("Error while optimizing " "regular expression %s: %s"), regex->pattern, errmsg); g_propagate_error (error, tmp_error); return NULL; } } return regex; } /** * g_regex_get_pattern: * @regex: a #GRegex structure * * Gets the pattern string associated with @regex, i.e. a copy of * the string passed to g_regex_new(). * * Returns: the pattern of @regex * * Since: 2.14 */ const gchar * g_regex_get_pattern (const GRegex *regex) { g_return_val_if_fail (regex != NULL, NULL); return regex->pattern; } /** * g_regex_get_max_backref: * @regex: a #GRegex * * Returns the number of the highest back reference * in the pattern, or 0 if the pattern does not contain * back references. * * Returns: the number of the highest back reference * * Since: 2.14 */ gint g_regex_get_max_backref (const GRegex *regex) { gint value; pcre_fullinfo (regex->pcre_re, regex->extra, PCRE_INFO_BACKREFMAX, &value); return value; } /** * g_regex_get_capture_count: * @regex: a #GRegex * * Returns the number of capturing subpatterns in the pattern. * * Returns: the number of capturing subpatterns * * Since: 2.14 */ gint g_regex_get_capture_count (const GRegex *regex) { gint value; pcre_fullinfo (regex->pcre_re, regex->extra, PCRE_INFO_CAPTURECOUNT, &value); return value; } /** * g_regex_match_simple: * @pattern: the regular expression * @string: the string to scan for matches * @compile_options: compile options for the regular expression * @match_options: match options * * Scans for a match in @string for @pattern. * * This function is equivalent to g_regex_match() but it does not * require to compile the pattern with g_regex_new(), avoiding some * lines of code when you need just to do a match without extracting * substrings, capture counts, and so on. * * If this function is to be called on the same @pattern more than * once, it's more efficient to compile the pattern once with * g_regex_new() and then use g_regex_match(). * * Returns: %TRUE is the string matched, %FALSE otherwise * * Since: 2.14 */ gboolean g_regex_match_simple (const gchar *pattern, const gchar *string, GRegexCompileFlags compile_options, GRegexMatchFlags match_options) { GRegex *regex; gboolean result; regex = g_regex_new (pattern, compile_options, 0, NULL); if (!regex) return FALSE; result = g_regex_match_full (regex, string, -1, 0, match_options, NULL, NULL); g_regex_unref (regex); return result; } /** * g_regex_match: * @regex: a #GRegex structure from g_regex_new() * @string: the string to scan for matches * @match_options: match options * @match_info: pointer to location where to store the #GMatchInfo, * or %NULL if you do not need it * * Scans for a match in string for the pattern in @regex. * The @match_options are combined with the match options specified * when the @regex structure was created, letting you have more * flexibility in reusing #GRegex structures. * * A #GMatchInfo structure, used to get information on the match, * is stored in @match_info if not %NULL. Note that if @match_info * is not %NULL then it is created even if the function returns %FALSE, * i.e. you must free it regardless if regular expression actually matched. * * To retrieve all the non-overlapping matches of the pattern in * string you can use g_match_info_next(). * * * static void * print_uppercase_words (const gchar *string) * { * /* Print all uppercase-only words. */ * GRegex *regex; * GMatchInfo *match_info; *   * regex = g_regex_new ("[A-Z]+", 0, 0, NULL); * g_regex_match (regex, string, 0, &match_info); * while (g_match_info_matches (match_info)) * { * gchar *word = g_match_info_fetch (match_info, 0); * g_print ("Found: %s\n", word); * g_free (word); * g_match_info_next (match_info, NULL); * } * g_match_info_free (match_info); * g_regex_unref (regex); * } * * * Returns: %TRUE is the string matched, %FALSE otherwise * * Since: 2.14 */ gboolean g_regex_match (const GRegex *regex, const gchar *string, GRegexMatchFlags match_options, GMatchInfo **match_info) { return g_regex_match_full (regex, string, -1, 0, match_options, match_info, NULL); } /** * g_regex_match_full: * @regex: a #GRegex structure from g_regex_new() * @string: the string to scan for matches * @string_len: the length of @string, or -1 if @string is nul-terminated * @start_position: starting index of the string to match * @match_options: match options * @match_info: pointer to location where to store the #GMatchInfo, * or %NULL if you do not need it * @error: location to store the error occuring, or %NULL to ignore errors * * Scans for a match in string for the pattern in @regex. * The @match_options are combined with the match options specified * when the @regex structure was created, letting you have more * flexibility in reusing #GRegex structures. * * Setting @start_position differs from just passing over a shortened * string and setting #G_REGEX_MATCH_NOTBOL in the case of a pattern * that begins with any kind of lookbehind assertion, such as "\b". * * A #GMatchInfo structure, used to get information on the match, is * stored in @match_info if not %NULL. Note that if @match_info is * not %NULL then it is created even if the function returns %FALSE, * i.e. you must free it regardless if regular expression actually * matched. * * @string is not copied and is used in #GMatchInfo internally. If * you use any #GMatchInfo method (except g_match_info_free()) after * freeing or modifying @string then the behaviour is undefined. * * To retrieve all the non-overlapping matches of the pattern in * string you can use g_match_info_next(). * * * static void * print_uppercase_words (const gchar *string) * { * /* Print all uppercase-only words. */ * GRegex *regex; * GMatchInfo *match_info; * GError *error = NULL; *   * regex = g_regex_new ("[A-Z]+", 0, 0, NULL); * g_regex_match_full (regex, string, -1, 0, 0, &match_info, &error); * while (g_match_info_matches (match_info)) * { * gchar *word = g_match_info_fetch (match_info, 0); * g_print ("Found: %s\n", word); * g_free (word); * g_match_info_next (match_info, &error); * } * g_match_info_free (match_info); * g_regex_unref (regex); * if (error != NULL) * { * g_printerr ("Error while matching: %s\n", error->message); * g_error_free (error); * } * } * * * Returns: %TRUE is the string matched, %FALSE otherwise * * Since: 2.14 */ gboolean g_regex_match_full (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, GRegexMatchFlags match_options, GMatchInfo **match_info, GError **error) { GMatchInfo *info; gboolean match_ok; g_return_val_if_fail (regex != NULL, FALSE); g_return_val_if_fail (string != NULL, FALSE); g_return_val_if_fail (start_position >= 0, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); g_return_val_if_fail ((match_options & ~G_REGEX_MATCH_MASK) == 0, FALSE); info = match_info_new (regex, string, string_len, start_position, match_options, FALSE); match_ok = g_match_info_next (info, error); if (match_info != NULL) *match_info = info; else g_match_info_free (info); return match_ok; } /** * g_regex_match_all: * @regex: a #GRegex structure from g_regex_new() * @string: the string to scan for matches * @match_options: match options * @match_info: pointer to location where to store the #GMatchInfo, * or %NULL if you do not need it * * Using the standard algorithm for regular expression matching only * the longest match in the string is retrieved. This function uses * a different algorithm so it can retrieve all the possible matches. * For more documentation see g_regex_match_all_full(). * * A #GMatchInfo structure, used to get information on the match, is * stored in @match_info if not %NULL. Note that if @match_info is * not %NULL then it is created even if the function returns %FALSE, * i.e. you must free it regardless if regular expression actually * matched. * * Returns: %TRUE is the string matched, %FALSE otherwise * * Since: 2.14 */ gboolean g_regex_match_all (const GRegex *regex, const gchar *string, GRegexMatchFlags match_options, GMatchInfo **match_info) { return g_regex_match_all_full (regex, string, -1, 0, match_options, match_info, NULL); } /** * g_regex_match_all_full: * @regex: a #GRegex structure from g_regex_new() * @string: the string to scan for matches * @string_len: the length of @string, or -1 if @string is nul-terminated * @start_position: starting index of the string to match * @match_options: match options * @match_info: pointer to location where to store the #GMatchInfo, * or %NULL if you do not need it * @error: location to store the error occuring, or %NULL to ignore errors * * Using the standard algorithm for regular expression matching only * the longest match in the string is retrieved, it is not possibile * to obtain all the available matches. For instance matching * "<a> <b> <c>" against the pattern "<.*>" * you get "<a> <b> <c>". * * This function uses a different algorithm (called DFA, i.e. deterministic * finite automaton), so it can retrieve all the possible matches, all * starting at the same point in the string. For instance matching * "<a> <b> <c>" against the pattern "<.*>" * you would obtain three matches: "<a> <b> <c>", * "<a> <b>" and "<a>". * * The number of matched strings is retrieved using * g_match_info_get_match_count(). To obtain the matched strings and * their position you can use, respectively, g_match_info_fetch() and * g_match_info_fetch_pos(). Note that the strings are returned in * reverse order of length; that is, the longest matching string is * given first. * * Note that the DFA algorithm is slower than the standard one and it * is not able to capture substrings, so backreferences do not work. * * Setting @start_position differs from just passing over a shortened * string and setting #G_REGEX_MATCH_NOTBOL in the case of a pattern * that begins with any kind of lookbehind assertion, such as "\b". * * A #GMatchInfo structure, used to get information on the match, is * stored in @match_info if not %NULL. Note that if @match_info is * not %NULL then it is created even if the function returns %FALSE, * i.e. you must free it regardless if regular expression actually * matched. * * Returns: %TRUE is the string matched, %FALSE otherwise * * Since: 2.14 */ gboolean g_regex_match_all_full (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, GRegexMatchFlags match_options, GMatchInfo **match_info, GError **error) { GMatchInfo *info; gboolean done; g_return_val_if_fail (regex != NULL, FALSE); g_return_val_if_fail (string != NULL, FALSE); g_return_val_if_fail (start_position >= 0, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); g_return_val_if_fail ((match_options & ~G_REGEX_MATCH_MASK) == 0, FALSE); info = match_info_new (regex, string, string_len, start_position, match_options, TRUE); done = FALSE; while (!done) { done = TRUE; info->matches = pcre_dfa_exec (regex->pcre_re, regex->extra, info->string, info->string_len, info->pos, regex->match_opts | match_options, info->offsets, info->n_offsets, info->workspace, info->n_workspace); if (info->matches == PCRE_ERROR_DFA_WSSIZE) { /* info->workspace is too small. */ info->n_workspace *= 2; info->workspace = g_realloc (info->workspace, info->n_workspace * sizeof (gint)); done = FALSE; } else if (info->matches == 0) { /* info->offsets is too small. */ info->n_offsets *= 2; info->offsets = g_realloc (info->offsets, info->n_offsets * sizeof (gint)); done = FALSE; } else if (IS_PCRE_ERROR (info->matches)) { g_set_error (error, G_REGEX_ERROR, G_REGEX_ERROR_MATCH, _("Error while matching regular expression %s: %s"), regex->pattern, match_error (info->matches)); } } /* set info->pos to -1 so that a call to g_match_info_next() fails. */ info->pos = -1; if (match_info != NULL) *match_info = info; else g_match_info_free (info); return info->matches >= 0; } /** * g_regex_get_string_number: * @regex: #GRegex structure * @name: name of the subexpression * * Retrieves the number of the subexpression named @name. * * Returns: The number of the subexpression or -1 if @name * does not exists * * Since: 2.14 */ gint g_regex_get_string_number (const GRegex *regex, const gchar *name) { gint num; g_return_val_if_fail (regex != NULL, -1); g_return_val_if_fail (name != NULL, -1); num = pcre_get_stringnumber (regex->pcre_re, name); if (num == PCRE_ERROR_NOSUBSTRING) num = -1; return num; } /** * g_regex_split_simple: * @pattern: the regular expression * @string: the string to scan for matches * @compile_options: compile options for the regular expression * @match_options: match options * * Breaks the string on the pattern, and returns an array of * the tokens. If the pattern contains capturing parentheses, * then the text for each of the substrings will also be returned. * If the pattern does not match anywhere in the string, then the * whole string is returned as the first token. * * This function is equivalent to g_regex_split() but it does * not require to compile the pattern with g_regex_new(), avoiding * some lines of code when you need just to do a split without * extracting substrings, capture counts, and so on. * * If this function is to be called on the same @pattern more than * once, it's more efficient to compile the pattern once with * g_regex_new() and then use g_regex_split(). * * As a special case, the result of splitting the empty string "" * is an empty vector, not a vector containing a single string. * The reason for this special case is that being able to represent * a empty vector is typically more useful than consistent handling * of empty elements. If you do need to represent empty elements, * you'll need to check for the empty string before calling this * function. * * A pattern that can match empty strings splits @string into * separate characters wherever it matches the empty string between * characters. For example splitting "ab c" using as a separator * "\s*", you will get "a", "b" and "c". * * Returns: a %NULL-terminated gchar ** array. Free it using g_strfreev() * * Since: 2.14 **/ gchar ** g_regex_split_simple (const gchar *pattern, const gchar *string, GRegexCompileFlags compile_options, GRegexMatchFlags match_options) { GRegex *regex; gchar **result; regex = g_regex_new (pattern, compile_options, 0, NULL); if (!regex) return NULL; result = g_regex_split_full (regex, string, -1, 0, match_options, 0, NULL); g_regex_unref (regex); return result; } /** * g_regex_split: * @regex: a #GRegex structure * @string: the string to split with the pattern * @match_options: match time option flags * * Breaks the string on the pattern, and returns an array of the tokens. * If the pattern contains capturing parentheses, then the text for each * of the substrings will also be returned. If the pattern does not match * anywhere in the string, then the whole string is returned as the first * token. * * As a special case, the result of splitting the empty string "" is an * empty vector, not a vector containing a single string. The reason for * this special case is that being able to represent a empty vector is * typically more useful than consistent handling of empty elements. If * you do need to represent empty elements, you'll need to check for the * empty string before calling this function. * * A pattern that can match empty strings splits @string into separate * characters wherever it matches the empty string between characters. * For example splitting "ab c" using as a separator "\s*", you will get * "a", "b" and "c". * * Returns: a %NULL-terminated gchar ** array. Free it using g_strfreev() * * Since: 2.14 **/ gchar ** g_regex_split (const GRegex *regex, const gchar *string, GRegexMatchFlags match_options) { return g_regex_split_full (regex, string, -1, 0, match_options, 0, NULL); } /** * g_regex_split_full: * @regex: a #GRegex structure * @string: the string to split with the pattern * @string_len: the length of @string, or -1 if @string is nul-terminated * @start_position: starting index of the string to match * @match_options: match time option flags * @max_tokens: the maximum number of tokens to split @string into. * If this is less than 1, the string is split completely * @error: return location for a #GError * * Breaks the string on the pattern, and returns an array of the tokens. * If the pattern contains capturing parentheses, then the text for each * of the substrings will also be returned. If the pattern does not match * anywhere in the string, then the whole string is returned as the first * token. * * As a special case, the result of splitting the empty string "" is an * empty vector, not a vector containing a single string. The reason for * this special case is that being able to represent a empty vector is * typically more useful than consistent handling of empty elements. If * you do need to represent empty elements, you'll need to check for the * empty string before calling this function. * * A pattern that can match empty strings splits @string into separate * characters wherever it matches the empty string between characters. * For example splitting "ab c" using as a separator "\s*", you will get * "a", "b" and "c". * * Setting @start_position differs from just passing over a shortened * string and setting #G_REGEX_MATCH_NOTBOL in the case of a pattern * that begins with any kind of lookbehind assertion, such as "\b". * * Returns: a %NULL-terminated gchar ** array. Free it using g_strfreev() * * Since: 2.14 **/ gchar ** g_regex_split_full (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, GRegexMatchFlags match_options, gint max_tokens, GError **error) { GError *tmp_error = NULL; GMatchInfo *match_info; GList *list, *last; gint i; gint token_count; gboolean match_ok; /* position of the last separator. */ gint last_separator_end; /* was the last match 0 bytes long? */ gboolean last_match_is_empty; /* the returned array of char **s */ gchar **string_list; g_return_val_if_fail (regex != NULL, NULL); g_return_val_if_fail (string != NULL, NULL); g_return_val_if_fail (start_position >= 0, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); g_return_val_if_fail ((match_options & ~G_REGEX_MATCH_MASK) == 0, NULL); if (max_tokens <= 0) max_tokens = G_MAXINT; if (string_len < 0) string_len = strlen (string); /* zero-length string */ if (string_len - start_position == 0) return g_new0 (gchar *, 1); if (max_tokens == 1) { string_list = g_new0 (gchar *, 2); string_list[0] = g_strndup (&string[start_position], string_len - start_position); return string_list; } list = NULL; token_count = 0; last_separator_end = start_position; last_match_is_empty = FALSE; match_ok = g_regex_match_full (regex, string, string_len, start_position, match_options, &match_info, &tmp_error); while (tmp_error == NULL) { if (match_ok) { last_match_is_empty = (match_info->offsets[0] == match_info->offsets[1]); /* we need to skip empty separators at the same position of the end * of another separator. e.g. the string is "a b" and the separator * is " *", so from 1 to 2 we have a match and at position 2 we have * an empty match. */ if (last_separator_end != match_info->offsets[1]) { gchar *token; gint match_count; token = g_strndup (string + last_separator_end, match_info->offsets[0] - last_separator_end); list = g_list_prepend (list, token); token_count++; /* if there were substrings, these need to be added to * the list. */ match_count = g_match_info_get_match_count (match_info); if (match_count > 1) { for (i = 1; i < match_count; i++) list = g_list_prepend (list, g_match_info_fetch (match_info, i)); } } } else { /* if there was no match, copy to end of string. */ if (!last_match_is_empty) { gchar *token = g_strndup (string + last_separator_end, match_info->string_len - last_separator_end); list = g_list_prepend (list, token); } /* no more tokens, end the loop. */ break; } /* -1 to leave room for the last part. */ if (token_count >= max_tokens - 1) { /* we have reached the maximum number of tokens, so we copy * the remaining part of the string. */ if (last_match_is_empty) { /* the last match was empty, so we have moved one char * after the real position to avoid empty matches at the * same position. */ match_info->pos = PREV_CHAR (regex, &string[match_info->pos]) - string; } /* the if is needed in the case we have terminated the available * tokens, but we are at the end of the string, so there are no * characters left to copy. */ if (string_len > match_info->pos) { gchar *token = g_strndup (string + match_info->pos, string_len - match_info->pos); list = g_list_prepend (list, token); } /* end the loop. */ break; } last_separator_end = match_info->pos; if (last_match_is_empty) /* if the last match was empty, g_match_info_next() has moved * forward to avoid infinite loops, but we still need to copy that * character. */ last_separator_end = PREV_CHAR (regex, &string[last_separator_end]) - string; match_ok = g_match_info_next (match_info, &tmp_error); } g_match_info_free (match_info); if (tmp_error != NULL) { g_propagate_error (error, tmp_error); g_list_foreach (list, (GFunc)g_free, NULL); g_list_free (list); match_info->pos = -1; return NULL; } string_list = g_new (gchar *, g_list_length (list) + 1); i = 0; for (last = g_list_last (list); last; last = g_list_previous (last)) string_list[i++] = last->data; string_list[i] = NULL; g_list_free (list); return string_list; } enum { REPL_TYPE_STRING, REPL_TYPE_CHARACTER, REPL_TYPE_SYMBOLIC_REFERENCE, REPL_TYPE_NUMERIC_REFERENCE, REPL_TYPE_CHANGE_CASE }; typedef enum { CHANGE_CASE_NONE = 1 << 0, CHANGE_CASE_UPPER = 1 << 1, CHANGE_CASE_LOWER = 1 << 2, CHANGE_CASE_UPPER_SINGLE = 1 << 3, CHANGE_CASE_LOWER_SINGLE = 1 << 4, CHANGE_CASE_SINGLE_MASK = CHANGE_CASE_UPPER_SINGLE | CHANGE_CASE_LOWER_SINGLE, CHANGE_CASE_LOWER_MASK = CHANGE_CASE_LOWER | CHANGE_CASE_LOWER_SINGLE, CHANGE_CASE_UPPER_MASK = CHANGE_CASE_UPPER | CHANGE_CASE_UPPER_SINGLE } ChangeCase; struct _InterpolationData { gchar *text; gint type; gint num; gchar c; ChangeCase change_case; }; static void free_interpolation_data (InterpolationData *data) { g_free (data->text); g_free (data); } static const gchar * expand_escape (const gchar *replacement, const gchar *p, InterpolationData *data, GError **error) { const gchar *q, *r; gint x, d, h, i; const gchar *error_detail; gint base = 0; GError *tmp_error = NULL; p++; switch (*p) { case 't': p++; data->c = '\t'; data->type = REPL_TYPE_CHARACTER; break; case 'n': p++; data->c = '\n'; data->type = REPL_TYPE_CHARACTER; break; case 'v': p++; data->c = '\v'; data->type = REPL_TYPE_CHARACTER; break; case 'r': p++; data->c = '\r'; data->type = REPL_TYPE_CHARACTER; break; case 'f': p++; data->c = '\f'; data->type = REPL_TYPE_CHARACTER; break; case 'a': p++; data->c = '\a'; data->type = REPL_TYPE_CHARACTER; break; case 'b': p++; data->c = '\b'; data->type = REPL_TYPE_CHARACTER; break; case '\\': p++; data->c = '\\'; data->type = REPL_TYPE_CHARACTER; break; case 'x': p++; x = 0; if (*p == '{') { p++; do { h = g_ascii_xdigit_value (*p); if (h < 0) { error_detail = _("hexadecimal digit or '}' expected"); goto error; } x = x * 16 + h; p++; } while (*p != '}'); p++; } else { for (i = 0; i < 2; i++) { h = g_ascii_xdigit_value (*p); if (h < 0) { error_detail = _("hexadecimal digit expected"); goto error; } x = x * 16 + h; p++; } } data->type = REPL_TYPE_STRING; data->text = g_new0 (gchar, 8); g_unichar_to_utf8 (x, data->text); break; case 'l': p++; data->type = REPL_TYPE_CHANGE_CASE; data->change_case = CHANGE_CASE_LOWER_SINGLE; break; case 'u': p++; data->type = REPL_TYPE_CHANGE_CASE; data->change_case = CHANGE_CASE_UPPER_SINGLE; break; case 'L': p++; data->type = REPL_TYPE_CHANGE_CASE; data->change_case = CHANGE_CASE_LOWER; break; case 'U': p++; data->type = REPL_TYPE_CHANGE_CASE; data->change_case = CHANGE_CASE_UPPER; break; case 'E': p++; data->type = REPL_TYPE_CHANGE_CASE; data->change_case = CHANGE_CASE_NONE; break; case 'g': p++; if (*p != '<') { error_detail = _("missing '<' in symbolic reference"); goto error; } q = p + 1; do { p++; if (!*p) { error_detail = _("unfinished symbolic reference"); goto error; } } while (*p != '>'); if (p - q == 0) { error_detail = _("zero-length symbolic reference"); goto error; } if (g_ascii_isdigit (*q)) { x = 0; do { h = g_ascii_digit_value (*q); if (h < 0) { error_detail = _("digit expected"); p = q; goto error; } x = x * 10 + h; q++; } while (q != p); data->num = x; data->type = REPL_TYPE_NUMERIC_REFERENCE; } else { r = q; do { if (!g_ascii_isalnum (*r)) { error_detail = _("illegal symbolic reference"); p = r; goto error; } r++; } while (r != p); data->text = g_strndup (q, p - q); data->type = REPL_TYPE_SYMBOLIC_REFERENCE; } p++; break; case '0': /* if \0 is followed by a number is an octal number representing a * character, else it is a numeric reference. */ if (g_ascii_digit_value (*g_utf8_next_char (p)) >= 0) { base = 8; p = g_utf8_next_char (p); } case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': x = 0; d = 0; for (i = 0; i < 3; i++) { h = g_ascii_digit_value (*p); if (h < 0) break; if (h > 7) { if (base == 8) break; else base = 10; } if (i == 2 && base == 10) break; x = x * 8 + h; d = d * 10 + h; p++; } if (base == 8 || i == 3) { data->type = REPL_TYPE_STRING; data->text = g_new0 (gchar, 8); g_unichar_to_utf8 (x, data->text); } else { data->type = REPL_TYPE_NUMERIC_REFERENCE; data->num = d; } break; case 0: error_detail = _("stray final '\\'"); goto error; break; default: error_detail = _("unknown escape sequence"); goto error; } return p; error: /* G_GSSIZE_FORMAT doesn't work with gettext, so we use %lu */ tmp_error = g_error_new (G_REGEX_ERROR, G_REGEX_ERROR_REPLACE, _("Error while parsing replacement " "text \"%s\" at char %lu: %s"), replacement, (gulong)(p - replacement), error_detail); g_propagate_error (error, tmp_error); return NULL; } static GList * split_replacement (const gchar *replacement, GError **error) { GList *list = NULL; InterpolationData *data; const gchar *p, *start; start = p = replacement; while (*p) { if (*p == '\\') { data = g_new0 (InterpolationData, 1); start = p = expand_escape (replacement, p, data, error); if (p == NULL) { g_list_foreach (list, (GFunc)free_interpolation_data, NULL); g_list_free (list); free_interpolation_data (data); return NULL; } list = g_list_prepend (list, data); } else { p++; if (*p == '\\' || *p == '\0') { if (p - start > 0) { data = g_new0 (InterpolationData, 1); data->text = g_strndup (start, p - start); data->type = REPL_TYPE_STRING; list = g_list_prepend (list, data); } } } } return g_list_reverse (list); } /* Change the case of c based on change_case. */ #define CHANGE_CASE(c, change_case) \ (((change_case) & CHANGE_CASE_LOWER_MASK) ? \ g_unichar_tolower (c) : \ g_unichar_toupper (c)) static void string_append (GString *string, const gchar *text, ChangeCase *change_case) { gunichar c; if (text[0] == '\0') return; if (*change_case == CHANGE_CASE_NONE) { g_string_append (string, text); } else if (*change_case & CHANGE_CASE_SINGLE_MASK) { c = g_utf8_get_char (text); g_string_append_unichar (string, CHANGE_CASE (c, *change_case)); g_string_append (string, g_utf8_next_char (text)); *change_case = CHANGE_CASE_NONE; } else { while (*text != '\0') { c = g_utf8_get_char (text); g_string_append_unichar (string, CHANGE_CASE (c, *change_case)); text = g_utf8_next_char (text); } } } static gboolean interpolate_replacement (const GMatchInfo *match_info, GString *result, gpointer data) { GList *list; InterpolationData *idata; gchar *match; ChangeCase change_case = CHANGE_CASE_NONE; for (list = data; list; list = list->next) { idata = list->data; switch (idata->type) { case REPL_TYPE_STRING: string_append (result, idata->text, &change_case); break; case REPL_TYPE_CHARACTER: g_string_append_c (result, CHANGE_CASE (idata->c, change_case)); if (change_case & CHANGE_CASE_SINGLE_MASK) change_case = CHANGE_CASE_NONE; break; case REPL_TYPE_NUMERIC_REFERENCE: match = g_match_info_fetch (match_info, idata->num); if (match) { string_append (result, match, &change_case); g_free (match); } break; case REPL_TYPE_SYMBOLIC_REFERENCE: match = g_match_info_fetch_named (match_info, idata->text); if (match) { string_append (result, match, &change_case); g_free (match); } break; case REPL_TYPE_CHANGE_CASE: change_case = idata->change_case; break; } } return FALSE; } /* whether actual match_info is needed for replacement, i.e. * whether there are references */ static gboolean interpolation_list_needs_match (GList *list) { while (list != NULL) { InterpolationData *data = list->data; if (data->type == REPL_TYPE_SYMBOLIC_REFERENCE || data->type == REPL_TYPE_NUMERIC_REFERENCE) { return TRUE; } list = list->next; } return FALSE; } /** * g_regex_replace: * @regex: a #GRegex structure * @string: the string to perform matches against * @string_len: the length of @string, or -1 if @string is nul-terminated * @start_position: starting index of the string to match * @replacement: text to replace each match with * @match_options: options for the match * @error: location to store the error occuring, or %NULL to ignore errors * * Replaces all occurances of the pattern in @regex with the * replacement text. Backreferences of the form '\number' or * '\g<number>' in the replacement text are interpolated by the * number-th captured subexpression of the match, '\g<name>' refers * to the captured subexpression with the given name. '\0' refers to the * complete match, but '\0' followed by a number is the octal representation * of a character. To include a literal '\' in the replacement, write '\\'. * There are also escapes that changes the case of the following text: * * * \l * * Convert to lower case the next character * * * \u * * Convert to upper case the next character * * * \L * * Convert to lower case till \E * * * \U * * Convert to upper case till \E * * * \E * * End case modification * * * * * If you do not need to use backreferences use g_regex_replace_literal(). * * The @replacement string must be UTF-8 encoded even if #G_REGEX_RAW was * passed to g_regex_new(). If you want to use not UTF-8 encoded stings * you can use g_regex_replace_literal(). * * Setting @start_position differs from just passing over a shortened * string and setting #G_REGEX_MATCH_NOTBOL in the case of a pattern that * begins with any kind of lookbehind assertion, such as "\b". * * Returns: a newly allocated string containing the replacements * * Since: 2.14 */ gchar * g_regex_replace (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, const gchar *replacement, GRegexMatchFlags match_options, GError **error) { gchar *result; GList *list; GError *tmp_error = NULL; g_return_val_if_fail (regex != NULL, NULL); g_return_val_if_fail (string != NULL, NULL); g_return_val_if_fail (start_position >= 0, NULL); g_return_val_if_fail (replacement != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); g_return_val_if_fail ((match_options & ~G_REGEX_MATCH_MASK) == 0, NULL); list = split_replacement (replacement, &tmp_error); if (tmp_error != NULL) { g_propagate_error (error, tmp_error); return NULL; } result = g_regex_replace_eval (regex, string, string_len, start_position, match_options, interpolate_replacement, (gpointer)list, &tmp_error); if (tmp_error != NULL) g_propagate_error (error, tmp_error); g_list_foreach (list, (GFunc)free_interpolation_data, NULL); g_list_free (list); return result; } static gboolean literal_replacement (const GMatchInfo *match_info, GString *result, gpointer data) { g_string_append (result, data); return FALSE; } /** * g_regex_replace_literal: * @regex: a #GRegex structure * @string: the string to perform matches against * @string_len: the length of @string, or -1 if @string is nul-terminated * @start_position: starting index of the string to match * @replacement: text to replace each match with * @match_options: options for the match * @error: location to store the error occuring, or %NULL to ignore errors * * Replaces all occurances of the pattern in @regex with the * replacement text. @replacement is replaced literally, to * include backreferences use g_regex_replace(). * * Setting @start_position differs from just passing over a * shortened string and setting #G_REGEX_MATCH_NOTBOL in the * case of a pattern that begins with any kind of lookbehind * assertion, such as "\b". * * Returns: a newly allocated string containing the replacements * * Since: 2.14 */ gchar * g_regex_replace_literal (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, const gchar *replacement, GRegexMatchFlags match_options, GError **error) { g_return_val_if_fail (replacement != NULL, NULL); g_return_val_if_fail ((match_options & ~G_REGEX_MATCH_MASK) == 0, NULL); return g_regex_replace_eval (regex, string, string_len, start_position, match_options, literal_replacement, (gpointer)replacement, error); } /** * g_regex_replace_eval: * @regex: a #GRegex structure from g_regex_new() * @string: string to perform matches against * @string_len: the length of @string, or -1 if @string is nul-terminated * @start_position: starting index of the string to match * @match_options: options for the match * @eval: a function to call for each match * @user_data: user data to pass to the function * @error: location to store the error occuring, or %NULL to ignore errors * * Replaces occurances of the pattern in regex with the output of * @eval for that occurance. * * Setting @start_position differs from just passing over a shortened * string and setting #G_REGEX_MATCH_NOTBOL in the case of a pattern * that begins with any kind of lookbehind assertion, such as "\b". * * Returns: a newly allocated string containing the replacements * * Since: 2.14 */ gchar * g_regex_replace_eval (const GRegex *regex, const gchar *string, gssize string_len, gint start_position, GRegexMatchFlags match_options, GRegexEvalCallback eval, gpointer user_data, GError **error) { GMatchInfo *match_info; GString *result; gint str_pos = 0; gboolean done = FALSE; GError *tmp_error = NULL; g_return_val_if_fail (regex != NULL, NULL); g_return_val_if_fail (string != NULL, NULL); g_return_val_if_fail (start_position >= 0, NULL); g_return_val_if_fail (eval != NULL, NULL); g_return_val_if_fail ((match_options & ~G_REGEX_MATCH_MASK) == 0, NULL); if (string_len < 0) string_len = strlen (string); result = g_string_sized_new (string_len); /* run down the string making matches. */ g_regex_match_full (regex, string, string_len, start_position, match_options, &match_info, &tmp_error); while (!done && g_match_info_matches (match_info)) { g_string_append_len (result, string + str_pos, match_info->offsets[0] - str_pos); done = (*eval) (match_info, result, user_data); str_pos = match_info->offsets[1]; g_match_info_next (match_info, &tmp_error); } g_match_info_free (match_info); if (tmp_error != NULL) { g_propagate_error (error, tmp_error); g_string_free (result, TRUE); return NULL; } g_string_append_len (result, string + str_pos, string_len - str_pos); return g_string_free (result, FALSE); } /** * g_regex_check_replacement: * @replacement: the replacement string * @has_references: location to store information about * references in @replacement or %NULL * @error: location to store error * * Checks whether @replacement is a valid replacement string * (see g_regex_replace()), i.e. that all escape sequences in * it are valid. * * If @has_references is not %NULL then @replacement is checked * for pattern references. For instance, replacement text 'foo\n' * does not contain references and may be evaluated without information * about actual match, but '\0\1' (whole match followed by first * subpattern) requires valid #GMatchInfo object. * * Returns: whether @replacement is a valid replacement string * * Since: 2.14 */ gboolean g_regex_check_replacement (const gchar *replacement, gboolean *has_references, GError **error) { GList *list; GError *tmp = NULL; list = split_replacement (replacement, &tmp); if (tmp) { g_propagate_error (error, tmp); return FALSE; } if (has_references) *has_references = interpolation_list_needs_match (list); g_list_foreach (list, (GFunc) free_interpolation_data, NULL); g_list_free (list); return TRUE; } /** * g_regex_escape_string: * @string: the string to escape * @length: the length of @string, or -1 if @string is nul-terminated * * Escapes the special characters used for regular expressions * in @string, for instance "a.b*c" becomes "a\.b\*c". This * function is useful to dynamically generate regular expressions. * * @string can contain nul characters that are replaced with "\0", * in this case remember to specify the correct length of @string * in @length. * * Returns: a newly-allocated escaped string * * Since: 2.14 */ gchar * g_regex_escape_string (const gchar *string, gint length) { GString *escaped; const char *p, *piece_start, *end; g_return_val_if_fail (string != NULL, NULL); if (length < 0) length = strlen (string); end = string + length; p = piece_start = string; escaped = g_string_sized_new (length + 1); while (p < end) { switch (*p) { case '\0': case '\\': case '|': case '(': case ')': case '[': case ']': case '{': case '}': case '^': case '$': case '*': case '+': case '?': case '.': if (p != piece_start) /* copy the previous piece. */ g_string_append_len (escaped, piece_start, p - piece_start); g_string_append_c (escaped, '\\'); if (*p == '\0') g_string_append_c (escaped, '0'); else g_string_append_c (escaped, *p); piece_start = ++p; break; default: p = g_utf8_next_char (p); break; } } if (piece_start < end) g_string_append_len (escaped, piece_start, end - piece_start); return g_string_free (escaped, FALSE); } cutter-testing-framework-1.1.7/glib-compatible/Makefile.in0000644000175000017500000006124111525654634021770 0ustar koukou# 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@ 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@ @GLIB_2_12_TRUE@am__append_1 = \ @GLIB_2_12_TRUE@ -DSIZEOF_CHAR=1 @GLIB_2_12_TRUE@am__append_2 = \ @GLIB_2_12_TRUE@ gregex.c \ @GLIB_2_12_TRUE@ gregex.h \ @GLIB_2_12_TRUE@ glibintl.h \ @GLIB_2_12_TRUE@ gsequence.c \ @GLIB_2_12_TRUE@ gsequence.h \ @GLIB_2_12_TRUE@ gstring.c \ @GLIB_2_12_TRUE@ gstring.h \ @GLIB_2_12_TRUE@ guniprop.c \ @GLIB_2_12_TRUE@ gunicode.h \ @GLIB_2_12_TRUE@ gscripttable.h subdir = glib-compatible DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) @GLIB_2_12_TRUE@libglib_compatible_la_DEPENDENCIES = $(top_builddir)/glib-compatible/pcre/libpcre.la am__libglib_compatible_la_SOURCES_DIST = glib-compatible.c \ glib-compatible.h gregex.c gregex.h glibintl.h gsequence.c \ gsequence.h gstring.c gstring.h guniprop.c gunicode.h \ gscripttable.h @GLIB_2_12_TRUE@am__objects_1 = gregex.lo gsequence.lo gstring.lo \ @GLIB_2_12_TRUE@ guniprop.lo am_libglib_compatible_la_OBJECTS = glib-compatible.lo $(am__objects_1) libglib_compatible_la_OBJECTS = $(am_libglib_compatible_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libglib_compatible_la_SOURCES) DIST_SOURCES = $(am__libglib_compatible_la_SOURCES_DIST) 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = \ pcre INCLUDES = \ -I$(top_srcdir) AM_CFLAGS = $(GLIB_CFLAGS) $(am__append_1) noinst_LTLIBRARIES = libglib-compatible.la libglib_compatible_la_SOURCES = glib-compatible.c glib-compatible.h \ $(am__append_2) @GLIB_2_12_TRUE@libglib_compatible_la_LIBADD = \ @GLIB_2_12_TRUE@ $(top_builddir)/glib-compatible/pcre/libpcre.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign glib-compatible/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign glib-compatible/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libglib-compatible.la: $(libglib_compatible_la_OBJECTS) $(libglib_compatible_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libglib_compatible_la_OBJECTS) $(libglib_compatible_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glib-compatible.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gregex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstring.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/guniprop.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/glib-compatible/pcre/0000755000175000017500000000000011525707411020640 5ustar koukoucutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_get.c0000644000175000017500000003561511407320460022600 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains some convenience functions for extracting substrings from the subject string after a regex match has succeeded. The original idea for these functions came from Scott Wimer. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Find number for named string * *************************************************/ /* This function is used by the get_first_set() function below, as well as being generally available. It assumes that names are unique. Arguments: code the compiled regex stringname the name whose number is required Returns: the number of the named parentheses, or a negative number (PCRE_ERROR_NOSUBSTRING) if not found */ int pcre_get_stringnumber(const pcre *code, const char *stringname) { int rc; int entrysize; int top, bot; uschar *nametable; if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0) return rc; if (top <= 0) return PCRE_ERROR_NOSUBSTRING; if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0) return rc; if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0) return rc; bot = 0; while (top > bot) { int mid = (top + bot) / 2; uschar *entry = nametable + entrysize*mid; int c = strcmp(stringname, (char *)(entry + 2)); if (c == 0) return (entry[0] << 8) + entry[1]; if (c > 0) bot = mid + 1; else top = mid; } return PCRE_ERROR_NOSUBSTRING; } /************************************************* * Find (multiple) entries for named string * *************************************************/ /* This is used by the get_first_set() function below, as well as being generally available. It is used when duplicated names are permitted. Arguments: code the compiled regex stringname the name whose entries required firstptr where to put the pointer to the first entry lastptr where to put the pointer to the last entry Returns: the length of each entry, or a negative number (PCRE_ERROR_NOSUBSTRING) if not found */ int pcre_get_stringtable_entries(const pcre *code, const char *stringname, char **firstptr, char **lastptr) { int rc; int entrysize; int top, bot; uschar *nametable, *lastentry; if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0) return rc; if (top <= 0) return PCRE_ERROR_NOSUBSTRING; if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0) return rc; if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0) return rc; lastentry = nametable + entrysize * (top - 1); bot = 0; while (top > bot) { int mid = (top + bot) / 2; uschar *entry = nametable + entrysize*mid; int c = strcmp(stringname, (char *)(entry + 2)); if (c == 0) { uschar *first = entry; uschar *last = entry; while (first > nametable) { if (strcmp(stringname, (char *)(first - entrysize + 2)) != 0) break; first -= entrysize; } while (last < lastentry) { if (strcmp(stringname, (char *)(last + entrysize + 2)) != 0) break; last += entrysize; } *firstptr = (char *)first; *lastptr = (char *)last; return entrysize; } if (c > 0) bot = mid + 1; else top = mid; } return PCRE_ERROR_NOSUBSTRING; } /************************************************* * Find first set of multiple named strings * *************************************************/ /* This function allows for duplicate names in the table of named substrings. It returns the number of the first one that was set in a pattern match. Arguments: code the compiled regex stringname the name of the capturing substring ovector the vector of matched substrings Returns: the number of the first that is set, or the number of the last one if none are set, or a negative number on error */ static int get_first_set(const pcre *code, const char *stringname, int *ovector) { const real_pcre *re = (const real_pcre *)code; int entrysize; char *first, *last; uschar *entry; if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0) return pcre_get_stringnumber(code, stringname); entrysize = pcre_get_stringtable_entries(code, stringname, &first, &last); if (entrysize <= 0) return entrysize; for (entry = (uschar *)first; entry <= (uschar *)last; entry += entrysize) { int n = (entry[0] << 8) + entry[1]; if (ovector[n*2] >= 0) return n; } return (first[0] << 8) + first[1]; } /************************************************* * Copy captured string to given buffer * *************************************************/ /* This function copies a single captured substring into a given buffer. Note that we use memcpy() rather than strncpy() in case there are binary zeros in the string. Arguments: subject the subject string that was matched ovector pointer to the offsets table stringcount the number of substrings that were captured (i.e. the yield of the pcre_exec call, unless that was zero, in which case it should be 1/3 of the offset table size) stringnumber the number of the required substring buffer where to put the substring size the size of the buffer Returns: if successful: the length of the copied string, not including the zero that is put on the end; can be zero if not successful: PCRE_ERROR_NOMEMORY (-6) buffer too small PCRE_ERROR_NOSUBSTRING (-7) no such captured substring */ int pcre_copy_substring(const char *subject, int *ovector, int stringcount, int stringnumber, char *buffer, int size) { int yield; if (stringnumber < 0 || stringnumber >= stringcount) return PCRE_ERROR_NOSUBSTRING; stringnumber *= 2; yield = ovector[stringnumber+1] - ovector[stringnumber]; if (size < yield + 1) return PCRE_ERROR_NOMEMORY; memcpy(buffer, subject + ovector[stringnumber], yield); buffer[yield] = 0; return yield; } /************************************************* * Copy named captured string to given buffer * *************************************************/ /* This function copies a single captured substring into a given buffer, identifying it by name. If the regex permits duplicate names, the first substring that is set is chosen. Arguments: code the compiled regex subject the subject string that was matched ovector pointer to the offsets table stringcount the number of substrings that were captured (i.e. the yield of the pcre_exec call, unless that was zero, in which case it should be 1/3 of the offset table size) stringname the name of the required substring buffer where to put the substring size the size of the buffer Returns: if successful: the length of the copied string, not including the zero that is put on the end; can be zero if not successful: PCRE_ERROR_NOMEMORY (-6) buffer too small PCRE_ERROR_NOSUBSTRING (-7) no such captured substring */ int pcre_copy_named_substring(const pcre *code, const char *subject, int *ovector, int stringcount, const char *stringname, char *buffer, int size) { int n = get_first_set(code, stringname, ovector); if (n <= 0) return n; return pcre_copy_substring(subject, ovector, stringcount, n, buffer, size); } /************************************************* * Copy all captured strings to new store * *************************************************/ /* This function gets one chunk of store and builds a list of pointers and all of the captured substrings in it. A NULL pointer is put on the end of the list. Arguments: subject the subject string that was matched ovector pointer to the offsets table stringcount the number of substrings that were captured (i.e. the yield of the pcre_exec call, unless that was zero, in which case it should be 1/3 of the offset table size) listptr set to point to the list of pointers Returns: if successful: 0 if not successful: PCRE_ERROR_NOMEMORY (-6) failed to get store */ int pcre_get_substring_list(const char *subject, int *ovector, int stringcount, const char ***listptr) { int i; int size = sizeof(char *); int double_count = stringcount * 2; char **stringlist; char *p; for (i = 0; i < double_count; i += 2) size += sizeof(char *) + ovector[i+1] - ovector[i] + 1; stringlist = (char **)(pcre_malloc)(size); if (stringlist == NULL) return PCRE_ERROR_NOMEMORY; *listptr = (const char **)stringlist; p = (char *)(stringlist + stringcount + 1); for (i = 0; i < double_count; i += 2) { int len = ovector[i+1] - ovector[i]; memcpy(p, subject + ovector[i], len); *stringlist++ = p; p += len; *p++ = 0; } *stringlist = NULL; return 0; } /************************************************* * Free store obtained by get_substring_list * *************************************************/ /* This function exists for the benefit of people calling PCRE from non-C programs that can call its functions, but not free() or (pcre_free)() directly. Argument: the result of a previous pcre_get_substring_list() Returns: nothing */ void pcre_free_substring_list(const char **pointer) { (pcre_free)((void *)pointer); } /************************************************* * Copy captured string to new store * *************************************************/ /* This function copies a single captured substring into a piece of new store Arguments: subject the subject string that was matched ovector pointer to the offsets table stringcount the number of substrings that were captured (i.e. the yield of the pcre_exec call, unless that was zero, in which case it should be 1/3 of the offset table size) stringnumber the number of the required substring stringptr where to put a pointer to the substring Returns: if successful: the length of the string, not including the zero that is put on the end; can be zero if not successful: PCRE_ERROR_NOMEMORY (-6) failed to get store PCRE_ERROR_NOSUBSTRING (-7) substring not present */ int pcre_get_substring(const char *subject, int *ovector, int stringcount, int stringnumber, const char **stringptr) { int yield; char *substring; if (stringnumber < 0 || stringnumber >= stringcount) return PCRE_ERROR_NOSUBSTRING; stringnumber *= 2; yield = ovector[stringnumber+1] - ovector[stringnumber]; substring = (char *)(pcre_malloc)(yield + 1); if (substring == NULL) return PCRE_ERROR_NOMEMORY; memcpy(substring, subject + ovector[stringnumber], yield); substring[yield] = 0; *stringptr = substring; return yield; } /************************************************* * Copy named captured string to new store * *************************************************/ /* This function copies a single captured substring, identified by name, into new store. If the regex permits duplicate names, the first substring that is set is chosen. Arguments: code the compiled regex subject the subject string that was matched ovector pointer to the offsets table stringcount the number of substrings that were captured (i.e. the yield of the pcre_exec call, unless that was zero, in which case it should be 1/3 of the offset table size) stringname the name of the required substring stringptr where to put the pointer Returns: if successful: the length of the copied string, not including the zero that is put on the end; can be zero if not successful: PCRE_ERROR_NOMEMORY (-6) couldn't get memory PCRE_ERROR_NOSUBSTRING (-7) no such captured substring */ int pcre_get_named_substring(const pcre *code, const char *subject, int *ovector, int stringcount, const char *stringname, const char **stringptr) { int n = get_first_set(code, stringname, ovector); if (n <= 0) return n; return pcre_get_substring(subject, ovector, stringcount, n, stringptr); } /************************************************* * Free store obtained by get_substring * *************************************************/ /* This function exists for the benefit of people calling PCRE from non-C programs that can call its functions, but not free() or (pcre_free)() directly. Argument: the result of a previous pcre_get_substring() Returns: nothing */ void pcre_free_substring(const char *pointer) { (pcre_free)((void *)pointer); } /* End of pcre_get.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_tables.c0000644000175000017500000002111311407320460023257 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains some fixed tables that are used by more than one of the PCRE code modules. The tables are also #included by the pcretest program, which uses macros to change their names from _pcre_xxx to xxxx, thereby avoiding name clashes with the library. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /* Table of sizes for the fixed-length opcodes. It's defined in a macro so that the definition is next to the definition of the opcodes in pcre_internal.h. */ const uschar _pcre_OP_lengths[] = { OP_LENGTHS }; /************************************************* * Tables for UTF-8 support * *************************************************/ /* These are the breakpoints for different numbers of bytes in a UTF-8 character. */ #ifdef SUPPORT_UTF8 const int _pcre_utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff}; const int _pcre_utf8_table1_size = sizeof(_pcre_utf8_table1)/sizeof(int); /* These are the indicator bits and the mask for the data bits to set in the first byte of a character, indexed by the number of additional bytes. */ const int _pcre_utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}; const int _pcre_utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01}; /* Table of the number of extra bytes, indexed by the first byte masked with 0x3f. The highest number for a valid UTF-8 first byte is in fact 0x3d. */ const uschar _pcre_utf8_table4[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; /* The pcre_utt[] table below translates Unicode property names into type and code values. It is searched by binary chop, so must be in collating sequence of name. Originally, the table contained pointers to the name strings in the first field of each entry. However, that leads to a large number of relocations when a shared library is dynamically loaded. A significant reduction is made by putting all the names into a single, large string and then using offsets in the table itself. Maintenance is more error-prone, but frequent changes to this data is unlikely. */ const char _pcre_utt_names[] = "Any\0" "Arabic\0" "Armenian\0" "Balinese\0" "Bengali\0" "Bopomofo\0" "Braille\0" "Buginese\0" "Buhid\0" "C\0" "Canadian_Aboriginal\0" "Cc\0" "Cf\0" "Cherokee\0" "Cn\0" "Co\0" "Common\0" "Coptic\0" "Cs\0" "Cuneiform\0" "Cypriot\0" "Cyrillic\0" "Deseret\0" "Devanagari\0" "Ethiopic\0" "Georgian\0" "Glagolitic\0" "Gothic\0" "Greek\0" "Gujarati\0" "Gurmukhi\0" "Han\0" "Hangul\0" "Hanunoo\0" "Hebrew\0" "Hiragana\0" "Inherited\0" "Kannada\0" "Katakana\0" "Kharoshthi\0" "Khmer\0" "L\0" "L&\0" "Lao\0" "Latin\0" "Limbu\0" "Linear_B\0" "Ll\0" "Lm\0" "Lo\0" "Lt\0" "Lu\0" "M\0" "Malayalam\0" "Mc\0" "Me\0" "Mn\0" "Mongolian\0" "Myanmar\0" "N\0" "Nd\0" "New_Tai_Lue\0" "Nko\0" "Nl\0" "No\0" "Ogham\0" "Old_Italic\0" "Old_Persian\0" "Oriya\0" "Osmanya\0" "P\0" "Pc\0" "Pd\0" "Pe\0" "Pf\0" "Phags_Pa\0" "Phoenician\0" "Pi\0" "Po\0" "Ps\0" "Runic\0" "S\0" "Sc\0" "Shavian\0" "Sinhala\0" "Sk\0" "Sm\0" "So\0" "Syloti_Nagri\0" "Syriac\0" "Tagalog\0" "Tagbanwa\0" "Tai_Le\0" "Tamil\0" "Telugu\0" "Thaana\0" "Thai\0" "Tibetan\0" "Tifinagh\0" "Ugaritic\0" "Yi\0" "Z\0" "Zl\0" "Zp\0" "Zs\0"; const ucp_type_table _pcre_utt[] = { { 0, PT_ANY, 0 }, { 4, PT_SC, ucp_Arabic }, { 11, PT_SC, ucp_Armenian }, { 20, PT_SC, ucp_Balinese }, { 29, PT_SC, ucp_Bengali }, { 37, PT_SC, ucp_Bopomofo }, { 46, PT_SC, ucp_Braille }, { 54, PT_SC, ucp_Buginese }, { 63, PT_SC, ucp_Buhid }, { 69, PT_GC, ucp_C }, { 71, PT_SC, ucp_Canadian_Aboriginal }, { 91, PT_PC, ucp_Cc }, { 94, PT_PC, ucp_Cf }, { 97, PT_SC, ucp_Cherokee }, { 106, PT_PC, ucp_Cn }, { 109, PT_PC, ucp_Co }, { 112, PT_SC, ucp_Common }, { 119, PT_SC, ucp_Coptic }, { 126, PT_PC, ucp_Cs }, { 129, PT_SC, ucp_Cuneiform }, { 139, PT_SC, ucp_Cypriot }, { 147, PT_SC, ucp_Cyrillic }, { 156, PT_SC, ucp_Deseret }, { 164, PT_SC, ucp_Devanagari }, { 175, PT_SC, ucp_Ethiopic }, { 184, PT_SC, ucp_Georgian }, { 193, PT_SC, ucp_Glagolitic }, { 204, PT_SC, ucp_Gothic }, { 211, PT_SC, ucp_Greek }, { 217, PT_SC, ucp_Gujarati }, { 226, PT_SC, ucp_Gurmukhi }, { 235, PT_SC, ucp_Han }, { 239, PT_SC, ucp_Hangul }, { 246, PT_SC, ucp_Hanunoo }, { 254, PT_SC, ucp_Hebrew }, { 261, PT_SC, ucp_Hiragana }, { 270, PT_SC, ucp_Inherited }, { 280, PT_SC, ucp_Kannada }, { 288, PT_SC, ucp_Katakana }, { 297, PT_SC, ucp_Kharoshthi }, { 308, PT_SC, ucp_Khmer }, { 314, PT_GC, ucp_L }, { 316, PT_LAMP, 0 }, { 319, PT_SC, ucp_Lao }, { 323, PT_SC, ucp_Latin }, { 329, PT_SC, ucp_Limbu }, { 335, PT_SC, ucp_Linear_B }, { 344, PT_PC, ucp_Ll }, { 347, PT_PC, ucp_Lm }, { 350, PT_PC, ucp_Lo }, { 353, PT_PC, ucp_Lt }, { 356, PT_PC, ucp_Lu }, { 359, PT_GC, ucp_M }, { 361, PT_SC, ucp_Malayalam }, { 371, PT_PC, ucp_Mc }, { 374, PT_PC, ucp_Me }, { 377, PT_PC, ucp_Mn }, { 380, PT_SC, ucp_Mongolian }, { 390, PT_SC, ucp_Myanmar }, { 398, PT_GC, ucp_N }, { 400, PT_PC, ucp_Nd }, { 403, PT_SC, ucp_New_Tai_Lue }, { 415, PT_SC, ucp_Nko }, { 419, PT_PC, ucp_Nl }, { 422, PT_PC, ucp_No }, { 425, PT_SC, ucp_Ogham }, { 431, PT_SC, ucp_Old_Italic }, { 442, PT_SC, ucp_Old_Persian }, { 454, PT_SC, ucp_Oriya }, { 460, PT_SC, ucp_Osmanya }, { 468, PT_GC, ucp_P }, { 470, PT_PC, ucp_Pc }, { 473, PT_PC, ucp_Pd }, { 476, PT_PC, ucp_Pe }, { 479, PT_PC, ucp_Pf }, { 482, PT_SC, ucp_Phags_Pa }, { 491, PT_SC, ucp_Phoenician }, { 502, PT_PC, ucp_Pi }, { 505, PT_PC, ucp_Po }, { 508, PT_PC, ucp_Ps }, { 511, PT_SC, ucp_Runic }, { 517, PT_GC, ucp_S }, { 519, PT_PC, ucp_Sc }, { 522, PT_SC, ucp_Shavian }, { 530, PT_SC, ucp_Sinhala }, { 538, PT_PC, ucp_Sk }, { 541, PT_PC, ucp_Sm }, { 544, PT_PC, ucp_So }, { 547, PT_SC, ucp_Syloti_Nagri }, { 560, PT_SC, ucp_Syriac }, { 567, PT_SC, ucp_Tagalog }, { 575, PT_SC, ucp_Tagbanwa }, { 584, PT_SC, ucp_Tai_Le }, { 591, PT_SC, ucp_Tamil }, { 597, PT_SC, ucp_Telugu }, { 604, PT_SC, ucp_Thaana }, { 611, PT_SC, ucp_Thai }, { 616, PT_SC, ucp_Tibetan }, { 624, PT_SC, ucp_Tifinagh }, { 633, PT_SC, ucp_Ugaritic }, { 642, PT_SC, ucp_Yi }, { 645, PT_GC, ucp_Z }, { 647, PT_PC, ucp_Zl }, { 650, PT_PC, ucp_Zp }, { 653, PT_PC, ucp_Zs } }; const int _pcre_utt_size = sizeof(_pcre_utt)/sizeof(ucp_type_table); #endif /* SUPPORT_UTF8 */ /* End of pcre_tables.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_ucp_searchfuncs.c0000644000175000017500000001065511407320460025171 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2006 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This file has been modified to use glib instead of the internal table * in ucptable.c -- Marco Barisione */ /* This module contains code for searching the table of Unicode character properties. */ #include "pcre_internal.h" #include "ucp.h" /* Category definitions */ #include "ucpinternal.h" /* Internal table details */ /* Table to translate from particular type value to the general value. */ static int ucp_gentype[] = { ucp_C, ucp_C, ucp_C, ucp_C, ucp_C, /* Cc, Cf, Cn, Co, Cs */ ucp_L, ucp_L, ucp_L, ucp_L, ucp_L, /* Ll, Lu, Lm, Lo, Lt */ ucp_M, ucp_M, ucp_M, /* Mc, Me, Mn */ ucp_N, ucp_N, ucp_N, /* Nd, Nl, No */ ucp_P, ucp_P, ucp_P, ucp_P, ucp_P, /* Pc, Pd, Pe, Pf, Pi */ ucp_P, ucp_P, /* Ps, Po */ ucp_S, ucp_S, ucp_S, ucp_S, /* Sc, Sk, Sm, So */ ucp_Z, ucp_Z, ucp_Z /* Zl, Zp, Zs */ }; /************************************************* * Search table and return type * *************************************************/ /* Three values are returned: the category is ucp_C, ucp_L, etc. The detailed character type is ucp_Lu, ucp_Nd, etc. The script is ucp_Latin, etc. Arguments: c the character value type_ptr the detailed character type is returned here script_ptr the script is returned here Returns: the character type category */ int _pcre_ucp_findprop(const unsigned int c, int *type_ptr, int *script_ptr) { /* Note that the Unicode types have the same values in glib and in * PCRE, so ucp_Ll == G_UNICODE_LOWERCASE_LETTER, * ucp_Zs == G_UNICODE_SPACE_SEPARATOR, and so on. */ *type_ptr = g_unichar_type(c); *script_ptr = g_unichar_get_script(c); return ucp_gentype[*type_ptr]; } /************************************************* * Search table and return other case * *************************************************/ /* If the given character is a letter, and there is another case for the letter, return the other case. Otherwise, return -1. Arguments: c the character value Returns: the other case or NOTACHAR if none */ unsigned int _pcre_ucp_othercase(const unsigned int c) { int other_case = NOTACHAR; if (g_unichar_islower(c)) other_case = g_unichar_toupper(c); else if (g_unichar_isupper(c)) other_case = g_unichar_tolower(c); if (other_case == c) other_case = NOTACHAR; return other_case; } /* End of pcre_ucp_searchfuncs.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_version.c0000644000175000017500000000756011407320460023504 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_version(), which returns a string that identifies the PCRE version that is in use. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Return version string * *************************************************/ /* These macros are the standard way of turning unquoted text into C strings. They allow macros like PCRE_MAJOR to be defined without quotes, which is convenient for user programs that want to test its value. */ #define STRING(a) # a #define XSTRING(s) STRING(s) /* A problem turned up with PCRE_PRERELEASE, which is defined empty for production releases. Originally, it was used naively in this code: return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) XSTRING(PCRE_PRERELEASE) " " XSTRING(PCRE_DATE); However, when PCRE_PRERELEASE is empty, this leads to an attempted expansion of STRING(). The C standard states: "If (before argument substitution) any argument consists of no preprocessing tokens, the behavior is undefined." It turns out the gcc treats this case as a single empty string - which is what we really want - but Visual C grumbles about the lack of an argument for the macro. Unfortunately, both are within their rights. To cope with both ways of handling this, I had resort to some messy hackery that does a test at run time. I could find no way of detecting that a macro is defined as an empty string at pre-processor time. This hack uses a standard trick for avoiding calling the STRING macro with an empty argument when doing the test. */ PCRE_EXP_DEFN const char * pcre_version(void) { return (XSTRING(Z PCRE_PRERELEASE)[1] == 0)? XSTRING(PCRE_MAJOR.PCRE_MINOR PCRE_DATE) : XSTRING(PCRE_MAJOR.PCRE_MINOR) XSTRING(PCRE_PRERELEASE PCRE_DATE); } /* End of pcre_version.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_valid_utf8.c0000644000175000017500000000046511407320460024061 0ustar koukou#include "pcre_internal.h" /* * This function is not needed by GRegex, so print an error and * return always -1, that is the string is a valid UTF-8 encoded * string. */ int _pcre_valid_utf8(const uschar *string, int length) { g_warning ("%s: this function should not be called", G_STRLOC); return -1; } cutter-testing-framework-1.1.7/glib-compatible/pcre/ucp.h0000644000175000017500000001132011407320460021567 0ustar koukou/************************************************* * Unicode Property Table handler * *************************************************/ #ifndef _UCP_H #define _UCP_H /* This file contains definitions of the property values that are returned by the function _pcre_ucp_findprop(). New values that are added for new releases of Unicode should always be at the end of each enum, for backwards compatibility. */ /* These are the general character categories. */ enum { ucp_C, /* Other */ ucp_L, /* Letter */ ucp_M, /* Mark */ ucp_N, /* Number */ ucp_P, /* Punctuation */ ucp_S, /* Symbol */ ucp_Z /* Separator */ }; /* These are the particular character types. */ enum { ucp_Cc, /* Control */ ucp_Cf, /* Format */ ucp_Cn, /* Unassigned */ ucp_Co, /* Private use */ ucp_Cs, /* Surrogate */ ucp_Ll, /* Lower case letter */ ucp_Lm, /* Modifier letter */ ucp_Lo, /* Other letter */ ucp_Lt, /* Title case letter */ ucp_Lu, /* Upper case letter */ ucp_Mc, /* Spacing mark */ ucp_Me, /* Enclosing mark */ ucp_Mn, /* Non-spacing mark */ ucp_Nd, /* Decimal number */ ucp_Nl, /* Letter number */ ucp_No, /* Other number */ ucp_Pc, /* Connector punctuation */ ucp_Pd, /* Dash punctuation */ ucp_Pe, /* Close punctuation */ ucp_Pf, /* Final punctuation */ ucp_Pi, /* Initial punctuation */ ucp_Po, /* Other punctuation */ ucp_Ps, /* Open punctuation */ ucp_Sc, /* Currency symbol */ ucp_Sk, /* Modifier symbol */ ucp_Sm, /* Mathematical symbol */ ucp_So, /* Other symbol */ ucp_Zl, /* Line separator */ ucp_Zp, /* Paragraph separator */ ucp_Zs /* Space separator */ }; /* These are the script identifications. */ enum { ucp_Arabic = G_UNICODE_SCRIPT_ARABIC, ucp_Armenian = G_UNICODE_SCRIPT_ARMENIAN, ucp_Bengali = G_UNICODE_SCRIPT_BENGALI, ucp_Bopomofo = G_UNICODE_SCRIPT_BOPOMOFO, ucp_Braille = G_UNICODE_SCRIPT_BRAILLE, ucp_Buginese = G_UNICODE_SCRIPT_BUGINESE, ucp_Buhid = G_UNICODE_SCRIPT_BUHID, ucp_Canadian_Aboriginal = G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, ucp_Cherokee = G_UNICODE_SCRIPT_CHEROKEE, ucp_Common = G_UNICODE_SCRIPT_COMMON, ucp_Coptic = G_UNICODE_SCRIPT_COPTIC, ucp_Cypriot = G_UNICODE_SCRIPT_CYPRIOT, ucp_Cyrillic = G_UNICODE_SCRIPT_CYRILLIC, ucp_Deseret = G_UNICODE_SCRIPT_DESERET, ucp_Devanagari = G_UNICODE_SCRIPT_DEVANAGARI, ucp_Ethiopic = G_UNICODE_SCRIPT_ETHIOPIC, ucp_Georgian = G_UNICODE_SCRIPT_GEORGIAN, ucp_Glagolitic = G_UNICODE_SCRIPT_GLAGOLITIC, ucp_Gothic = G_UNICODE_SCRIPT_GOTHIC, ucp_Greek = G_UNICODE_SCRIPT_GREEK, ucp_Gujarati = G_UNICODE_SCRIPT_GUJARATI, ucp_Gurmukhi = G_UNICODE_SCRIPT_GURMUKHI, ucp_Han = G_UNICODE_SCRIPT_HAN, ucp_Hangul = G_UNICODE_SCRIPT_HANGUL, ucp_Hanunoo = G_UNICODE_SCRIPT_HANUNOO, ucp_Hebrew = G_UNICODE_SCRIPT_HEBREW, ucp_Hiragana = G_UNICODE_SCRIPT_HIRAGANA, ucp_Inherited = G_UNICODE_SCRIPT_INHERITED, ucp_Kannada = G_UNICODE_SCRIPT_KANNADA, ucp_Katakana = G_UNICODE_SCRIPT_KATAKANA, ucp_Kharoshthi = G_UNICODE_SCRIPT_KHAROSHTHI, ucp_Khmer = G_UNICODE_SCRIPT_KHMER, ucp_Lao = G_UNICODE_SCRIPT_LAO, ucp_Latin = G_UNICODE_SCRIPT_LATIN, ucp_Limbu = G_UNICODE_SCRIPT_LIMBU, ucp_Linear_B = G_UNICODE_SCRIPT_LINEAR_B, ucp_Malayalam = G_UNICODE_SCRIPT_MALAYALAM, ucp_Mongolian = G_UNICODE_SCRIPT_MONGOLIAN, ucp_Myanmar = G_UNICODE_SCRIPT_MYANMAR, ucp_New_Tai_Lue = G_UNICODE_SCRIPT_NEW_TAI_LUE, ucp_Ogham = G_UNICODE_SCRIPT_OGHAM, ucp_Old_Italic = G_UNICODE_SCRIPT_OLD_ITALIC, ucp_Old_Persian = G_UNICODE_SCRIPT_OLD_PERSIAN, ucp_Oriya = G_UNICODE_SCRIPT_ORIYA, ucp_Osmanya = G_UNICODE_SCRIPT_OSMANYA, ucp_Runic = G_UNICODE_SCRIPT_RUNIC, ucp_Shavian = G_UNICODE_SCRIPT_SHAVIAN, ucp_Sinhala = G_UNICODE_SCRIPT_SINHALA, ucp_Syloti_Nagri = G_UNICODE_SCRIPT_SYLOTI_NAGRI, ucp_Syriac = G_UNICODE_SCRIPT_SYRIAC, ucp_Tagalog = G_UNICODE_SCRIPT_TAGALOG, ucp_Tagbanwa = G_UNICODE_SCRIPT_TAGBANWA, ucp_Tai_Le = G_UNICODE_SCRIPT_TAI_LE, ucp_Tamil = G_UNICODE_SCRIPT_TAMIL, ucp_Telugu = G_UNICODE_SCRIPT_TELUGU, ucp_Thaana = G_UNICODE_SCRIPT_THAANA, ucp_Thai = G_UNICODE_SCRIPT_THAI, ucp_Tibetan = G_UNICODE_SCRIPT_TIBETAN, ucp_Tifinagh = G_UNICODE_SCRIPT_TIFINAGH, ucp_Ugaritic = G_UNICODE_SCRIPT_UGARITIC, ucp_Yi = G_UNICODE_SCRIPT_YI, ucp_Balinese = G_UNICODE_SCRIPT_BALINESE, /* New for Unicode 5.0.0 */ ucp_Cuneiform = G_UNICODE_SCRIPT_CUNEIFORM, /* New for Unicode 5.0.0 */ ucp_Nko = G_UNICODE_SCRIPT_NKO, /* New for Unicode 5.0.0 */ ucp_Phags_Pa = G_UNICODE_SCRIPT_PHAGS_PA, /* New for Unicode 5.0.0 */ ucp_Phoenician = G_UNICODE_SCRIPT_PHOENICIAN /* New for Unicode 5.0.0 */ }; #endif /* End of ucp.h */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_try_flipped.c0000644000175000017500000001254511407320460024337 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains an internal function that tests a compiled pattern to see if it was compiled with the opposite endianness. If so, it uses an auxiliary local function to flip the appropriate bytes. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Flip bytes in an integer * *************************************************/ /* This function is called when the magic number in a regex doesn't match, in order to flip its bytes to see if we are dealing with a pattern that was compiled on a host of different endianness. If so, this function is used to flip other byte values. Arguments: value the number to flip n the number of bytes to flip (assumed to be 2 or 4) Returns: the flipped value */ static unsigned long int byteflip(unsigned long int value, int n) { if (n == 2) return ((value & 0x00ff) << 8) | ((value & 0xff00) >> 8); return ((value & 0x000000ff) << 24) | ((value & 0x0000ff00) << 8) | ((value & 0x00ff0000) >> 8) | ((value & 0xff000000) >> 24); } /************************************************* * Test for a byte-flipped compiled regex * *************************************************/ /* This function is called from pcre_exec(), pcre_dfa_exec(), and also from pcre_fullinfo(). Its job is to test whether the regex is byte-flipped - that is, it was compiled on a system of opposite endianness. The function is called only when the native MAGIC_NUMBER test fails. If the regex is indeed flipped, we flip all the relevant values into a different data block, and return it. Arguments: re points to the regex study points to study data, or NULL internal_re points to a new regex block internal_study points to a new study block Returns: the new block if is is indeed a byte-flipped regex NULL if it is not */ real_pcre * _pcre_try_flipped(const real_pcre *re, real_pcre *internal_re, const pcre_study_data *study, pcre_study_data *internal_study) { if (byteflip(re->magic_number, sizeof(re->magic_number)) != MAGIC_NUMBER) return NULL; *internal_re = *re; /* To copy other fields */ internal_re->size = byteflip(re->size, sizeof(re->size)); internal_re->options = byteflip(re->options, sizeof(re->options)); internal_re->flags = (pcre_uint16)byteflip(re->flags, sizeof(re->flags)); internal_re->top_bracket = (pcre_uint16)byteflip(re->top_bracket, sizeof(re->top_bracket)); internal_re->top_backref = (pcre_uint16)byteflip(re->top_backref, sizeof(re->top_backref)); internal_re->first_byte = (pcre_uint16)byteflip(re->first_byte, sizeof(re->first_byte)); internal_re->req_byte = (pcre_uint16)byteflip(re->req_byte, sizeof(re->req_byte)); internal_re->name_table_offset = (pcre_uint16)byteflip(re->name_table_offset, sizeof(re->name_table_offset)); internal_re->name_entry_size = (pcre_uint16)byteflip(re->name_entry_size, sizeof(re->name_entry_size)); internal_re->name_count = (pcre_uint16)byteflip(re->name_count, sizeof(re->name_count)); if (study != NULL) { *internal_study = *study; /* To copy other fields */ internal_study->size = byteflip(study->size, sizeof(study->size)); internal_study->options = byteflip(study->options, sizeof(study->options)); } return internal_re; } /* End of pcre_tryflipped.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_globals.c0000644000175000017500000000526611407320460023443 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains global variables that are exported by the PCRE library. PCRE is thread-clean and doesn't use any global variables in the normal sense. However, it calls memory allocation and freeing functions via the four indirections below, and it can optionally do callouts, using the fifth indirection. These values can be changed by the caller, but are shared between all threads. However, when compiling for Virtual Pascal, things are done differently, and global variables are not used (see pcre.in). */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" PCRE_EXP_DATA_DEFN int (*pcre_callout)(pcre_callout_block *) = NULL; /* End of pcre_globals.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_chartables.c0000644000175000017500000001725211407320460024126 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* This file contains character tables that are used when no external tables are passed to PCRE by the application that calls it. The tables are used only for characters whose code values are less than 256. This is a default version of the tables that assumes ASCII encoding. A program called dftables (which is distributed with PCRE) can be used to build alternative versions of this file. This is necessary if you are running in an EBCDIC environment, or if you want to default to a different encoding, for example ISO-8859-1. When dftables is run, it creates these tables in the current locale. If PCRE is configured with --enable-rebuild-chartables, this happens automatically. The following #includes are present because without the gcc 4.x may remove the array definition from the final binary if PCRE is built into a static library and dead code stripping is activated. This leads to link errors. Pulling in the header ensures that the array gets flagged as "someone outside this compilation unit might reference this" and so it will always be supplied to the linker. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" const unsigned char _pcre_default_tables[] = { /* This table is a lower casing table. */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103, 104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119, 120,121,122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103, 104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119, 120,121,122,123,124,125,126,127, 128,129,130,131,132,133,134,135, 136,137,138,139,140,141,142,143, 144,145,146,147,148,149,150,151, 152,153,154,155,156,157,158,159, 160,161,162,163,164,165,166,167, 168,169,170,171,172,173,174,175, 176,177,178,179,180,181,182,183, 184,185,186,187,188,189,190,191, 192,193,194,195,196,197,198,199, 200,201,202,203,204,205,206,207, 208,209,210,211,212,213,214,215, 216,217,218,219,220,221,222,223, 224,225,226,227,228,229,230,231, 232,233,234,235,236,237,238,239, 240,241,242,243,244,245,246,247, 248,249,250,251,252,253,254,255, /* This table is a case flipping table. */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103, 104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119, 120,121,122, 91, 92, 93, 94, 95, 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, 128,129,130,131,132,133,134,135, 136,137,138,139,140,141,142,143, 144,145,146,147,148,149,150,151, 152,153,154,155,156,157,158,159, 160,161,162,163,164,165,166,167, 168,169,170,171,172,173,174,175, 176,177,178,179,180,181,182,183, 184,185,186,187,188,189,190,191, 192,193,194,195,196,197,198,199, 200,201,202,203,204,205,206,207, 208,209,210,211,212,213,214,215, 216,217,218,219,220,221,222,223, 224,225,226,227,228,229,230,231, 232,233,234,235,236,237,238,239, 240,241,242,243,244,245,246,247, 248,249,250,251,252,253,254,255, /* This table contains bit maps for various character classes. Each map is 32 bytes long and the bits run from the least significant end of each byte. The classes that have their own maps are: space, xdigit, digit, upper, lower, word, graph, print, punct, and cntrl. Other classes are built from combinations. */ 0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, 0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, 0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc, 0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* This table identifies various classes of character by individual bits: 0x01 white space character 0x02 letter 0x04 decimal digit 0x08 hexadecimal digit 0x10 alphanumeric or '_' 0x80 regular expression metacharacter or binary zero */ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0- 7 */ 0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00, /* 8- 15 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */ 0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /* - ' */ 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /* ( - / */ 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /* 0 - 7 */ 0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /* 8 - ? */ 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* @ - G */ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* H - O */ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* P - W */ 0x12,0x12,0x12,0x80,0x80,0x00,0x80,0x10, /* X - _ */ 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* ` - g */ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* h - o */ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* p - w */ 0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /* x -127 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */ /* End of pcre_chartables.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_compile.c0000644000175000017500000056340511407320460023454 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_compile(), along with supporting internal functions that are not used by other modules. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define NLBLOCK cd /* Block containing newline information */ #define PSSTART start_pattern /* Field containing processed string start */ #define PSEND end_pattern /* Field containing processed string end */ #include "pcre_internal.h" /* When DEBUG is defined, we need the pcre_printint() function, which is also used by pcretest. DEBUG is not defined when building a production library. */ #ifdef DEBUG #include "pcre_printint.src" #endif /* Macro for setting individual bits in class bitmaps. */ #define SETBIT(a,b) a[b/8] |= (1 << (b%8)) /* Maximum length value to check against when making sure that the integer that holds the compiled pattern length does not overflow. We make it a bit less than INT_MAX to allow for adding in group terminating bytes, so that we don't have to check them every time. */ #define OFLOW_MAX (INT_MAX - 20) /************************************************* * Code parameters and static tables * *************************************************/ /* This value specifies the size of stack workspace that is used during the first pre-compile phase that determines how much memory is required. The regex is partly compiled into this space, but the compiled parts are discarded as soon as they can be, so that hopefully there will never be an overrun. The code does, however, check for an overrun. The largest amount I've seen used is 218, so this number is very generous. The same workspace is used during the second, actual compile phase for remembering forward references to groups so that they can be filled in at the end. Each entry in this list occupies LINK_SIZE bytes, so even when LINK_SIZE is 4 there is plenty of room. */ #define COMPILE_WORK_SIZE (4096) /* Table for handling escaped characters in the range '0'-'z'. Positive returns are simple data values; negative values are for special things like \d and so on. Zero means further processing is needed (for things like \x), or the escape is invalid. */ #ifndef EBCDIC /* This is the "normal" table for ASCII systems */ static const short int escapes[] = { 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */ 0, 0, ':', ';', '<', '=', '>', '?', /* 8 - ? */ '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E, 0, -ESC_G, /* @ - G */ -ESC_H, 0, 0, -ESC_K, 0, 0, 0, 0, /* H - O */ -ESC_P, -ESC_Q, -ESC_R, -ESC_S, 0, 0, -ESC_V, -ESC_W, /* P - W */ -ESC_X, 0, -ESC_Z, '[', '\\', ']', '^', '_', /* X - _ */ '`', 7, -ESC_b, 0, -ESC_d, ESC_e, ESC_f, 0, /* ` - g */ -ESC_h, 0, 0, -ESC_k, 0, 0, ESC_n, 0, /* h - o */ -ESC_p, 0, ESC_r, -ESC_s, ESC_tee, 0, -ESC_v, -ESC_w, /* p - w */ 0, 0, -ESC_z /* x - z */ }; #else /* This is the "abnormal" table for EBCDIC systems */ static const short int escapes[] = { /* 48 */ 0, 0, 0, '.', '<', '(', '+', '|', /* 50 */ '&', 0, 0, 0, 0, 0, 0, 0, /* 58 */ 0, 0, '!', '$', '*', ')', ';', '~', /* 60 */ '-', '/', 0, 0, 0, 0, 0, 0, /* 68 */ 0, 0, '|', ',', '%', '_', '>', '?', /* 70 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 78 */ 0, '`', ':', '#', '@', '\'', '=', '"', /* 80 */ 0, 7, -ESC_b, 0, -ESC_d, ESC_e, ESC_f, 0, /* 88 */-ESC_h, 0, 0, '{', 0, 0, 0, 0, /* 90 */ 0, 0, -ESC_k, 'l', 0, ESC_n, 0, -ESC_p, /* 98 */ 0, ESC_r, 0, '}', 0, 0, 0, 0, /* A0 */ 0, '~', -ESC_s, ESC_tee, 0,-ESC_v, -ESC_w, 0, /* A8 */ 0,-ESC_z, 0, 0, 0, '[', 0, 0, /* B0 */ 0, 0, 0, 0, 0, 0, 0, 0, /* B8 */ 0, 0, 0, 0, 0, ']', '=', '-', /* C0 */ '{',-ESC_A, -ESC_B, -ESC_C, -ESC_D,-ESC_E, 0, -ESC_G, /* C8 */-ESC_H, 0, 0, 0, 0, 0, 0, 0, /* D0 */ '}', 0, -ESC_K, 0, 0, 0, 0, -ESC_P, /* D8 */-ESC_Q,-ESC_R, 0, 0, 0, 0, 0, 0, /* E0 */ '\\', 0, -ESC_S, 0, 0,-ESC_V, -ESC_W, -ESC_X, /* E8 */ 0,-ESC_Z, 0, 0, 0, 0, 0, 0, /* F0 */ 0, 0, 0, 0, 0, 0, 0, 0, /* F8 */ 0, 0, 0, 0, 0, 0, 0, 0 }; #endif /* Table of special "verbs" like (*PRUNE). This is a short table, so it is searched linearly. Put all the names into a single string, in order to reduce the number of relocations when a shared library is dynamically linked. */ typedef struct verbitem { int len; int op; } verbitem; static const char verbnames[] = "ACCEPT\0" "COMMIT\0" "F\0" "FAIL\0" "PRUNE\0" "SKIP\0" "THEN"; static verbitem verbs[] = { { 6, OP_ACCEPT }, { 6, OP_COMMIT }, { 1, OP_FAIL }, { 4, OP_FAIL }, { 5, OP_PRUNE }, { 4, OP_SKIP }, { 4, OP_THEN } }; static int verbcount = sizeof(verbs)/sizeof(verbitem); /* Tables of names of POSIX character classes and their lengths. The names are now all in a single string, to reduce the number of relocations when a shared library is dynamically loaded. The list of lengths is terminated by a zero length entry. The first three must be alpha, lower, upper, as this is assumed for handling case independence. */ static const char posix_names[] = "alpha\0" "lower\0" "upper\0" "alnum\0" "ascii\0" "blank\0" "cntrl\0" "digit\0" "graph\0" "print\0" "punct\0" "space\0" "word\0" "xdigit"; static const uschar posix_name_lengths[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 }; /* Table of class bit maps for each POSIX class. Each class is formed from a base map, with an optional addition or removal of another map. Then, for some classes, there is some additional tweaking: for [:blank:] the vertical space characters are removed, and for [:alpha:] and [:alnum:] the underscore character is removed. The triples in the table consist of the base map offset, second map offset or -1 if no second map, and a non-negative value for map addition or a negative value for map subtraction (if there are two maps). The absolute value of the third field has these meanings: 0 => no tweaking, 1 => remove vertical space characters, 2 => remove underscore. */ static const int posix_class_maps[] = { cbit_word, cbit_digit, -2, /* alpha */ cbit_lower, -1, 0, /* lower */ cbit_upper, -1, 0, /* upper */ cbit_word, -1, 2, /* alnum - word without underscore */ cbit_print, cbit_cntrl, 0, /* ascii */ cbit_space, -1, 1, /* blank - a GNU extension */ cbit_cntrl, -1, 0, /* cntrl */ cbit_digit, -1, 0, /* digit */ cbit_graph, -1, 0, /* graph */ cbit_print, -1, 0, /* print */ cbit_punct, -1, 0, /* punct */ cbit_space, -1, 0, /* space */ cbit_word, -1, 0, /* word - a Perl extension */ cbit_xdigit,-1, 0 /* xdigit */ }; #define STRING(a) # a #define XSTRING(s) STRING(s) /* The texts of compile-time error messages. These are "char *" because they are passed to the outside world. Do not ever re-use any error number, because they are documented. Always add a new error instead. Messages marked DEAD below are no longer used. This used to be a table of strings, but in order to reduce the number of relocations needed when a shared library is loaded dynamically, it is now one long string. We cannot use a table of offsets, because the lengths of inserts such as XSTRING(MAX_NAME_SIZE) are not known. Instead, we simply count through to the one we want - this isn't a performance issue because these strings are used only when there is a compilation error. */ static const char error_texts[] = "no error\0" "\\ at end of pattern\0" "\\c at end of pattern\0" "unrecognized character follows \\\0" "numbers out of order in {} quantifier\0" /* 5 */ "number too big in {} quantifier\0" "missing terminating ] for character class\0" "invalid escape sequence in character class\0" "range out of order in character class\0" "nothing to repeat\0" /* 10 */ "operand of unlimited repeat could match the empty string\0" /** DEAD **/ "internal error: unexpected repeat\0" "unrecognized character after (? or (?-\0" "POSIX named classes are supported only within a class\0" "missing )\0" /* 15 */ "reference to non-existent subpattern\0" "erroffset passed as NULL\0" "unknown option bit(s) set\0" "missing ) after comment\0" "parentheses nested too deeply\0" /** DEAD **/ /* 20 */ "regular expression is too large\0" "failed to get memory\0" "unmatched parentheses\0" "internal error: code overflow\0" "unrecognized character after (?<\0" /* 25 */ "lookbehind assertion is not fixed length\0" "malformed number or name after (?(\0" "conditional group contains more than two branches\0" "assertion expected after (?(\0" "(?R or (?[+-]digits must be followed by )\0" /* 30 */ "unknown POSIX class name\0" "POSIX collating elements are not supported\0" "this version of PCRE is not compiled with PCRE_UTF8 support\0" "spare error\0" /** DEAD **/ "character value in \\x{...} sequence is too large\0" /* 35 */ "invalid condition (?(0)\0" "\\C not allowed in lookbehind assertion\0" "PCRE does not support \\L, \\l, \\N, \\U, or \\u\0" "number after (?C is > 255\0" "closing ) for (?C expected\0" /* 40 */ "recursive call could loop indefinitely\0" "unrecognized character after (?P\0" "syntax error in subpattern name (missing terminator)\0" "two named subpatterns have the same name\0" "invalid UTF-8 string\0" /* 45 */ "support for \\P, \\p, and \\X has not been compiled\0" "malformed \\P or \\p sequence\0" "unknown property name after \\P or \\p\0" "subpattern name is too long (maximum " XSTRING(MAX_NAME_SIZE) " characters)\0" "too many named subpatterns (maximum " XSTRING(MAX_NAME_COUNT) ")\0" /* 50 */ "repeated subpattern is too long\0" /** DEAD **/ "octal value is greater than \\377 (not in UTF-8 mode)\0" "internal error: overran compiling workspace\0" "internal error: previously-checked referenced subpattern not found\0" "DEFINE group contains more than one branch\0" /* 55 */ "repeating a DEFINE group is not allowed\0" "inconsistent NEWLINE options\0" "\\g is not followed by a braced name or an optionally braced non-zero number\0" "(?+ or (?- or (?(+ or (?(- must be followed by a non-zero number\0" "(*VERB) with an argument is not supported\0" /* 60 */ "(*VERB) not recognized\0" "number is too big\0" "subpattern name expected\0" "digit expected after (?+"; /* Definition to allow mutual recursion */ static BOOL compile_regex(int, int, uschar **, const uschar **, int *, BOOL, BOOL, int, int *, int *, branch_chain *, compile_data *, int *); /************************************************* * Find an error text * *************************************************/ /* The error texts are now all in one long string, to save on relocations. As some of the text is of unknown length, we can't use a table of offsets. Instead, just count through the strings. This is not a performance issue because it happens only when there has been a compilation error. Argument: the error number Returns: pointer to the error string */ static const char * find_error_text(int n) { const char *s = error_texts; for (; n > 0; n--) while (*s++ != 0); return s; } /************************************************* * Handle escapes * *************************************************/ /* This function is called when a \ has been encountered. It either returns a positive value for a simple escape such as \n, or a negative value which encodes one of the more complicated things such as \d. A backreference to group n is returned as -(ESC_REF + n); ESC_REF is the highest ESC_xxx macro. When UTF-8 is enabled, a positive value greater than 255 may be returned. On entry, ptr is pointing at the \. On exit, it is on the final character of the escape sequence. Arguments: ptrptr points to the pattern position pointer errorcodeptr points to the errorcode variable bracount number of previous extracting brackets options the options bits isclass TRUE if inside a character class Returns: zero or positive => a data character negative => a special escape sequence on error, errorcodeptr is set */ static int check_escape(const uschar **ptrptr, int *errorcodeptr, int bracount, int options, BOOL isclass) { BOOL utf8 = (options & PCRE_UTF8) != 0; const uschar *ptr = *ptrptr + 1; int c, i; GETCHARINCTEST(c, ptr); /* Get character value, increment pointer */ ptr--; /* Set pointer back to the last byte */ /* If backslash is at the end of the pattern, it's an error. */ if (c == 0) *errorcodeptr = ERR1; /* Non-alphanumerics are literals. For digits or letters, do an initial lookup in a table. A non-zero result is something that can be returned immediately. Otherwise further processing may be required. */ else if (c < '0' || c > 'z') {} /* Not alphanumeric */ else if ((i = escapes[c - '0']) != 0) c = i; /* Escapes that need further processing, or are illegal. */ else { const uschar *oldptr; BOOL braced, negated; switch (c) { /* A number of Perl escapes are not handled by PCRE. We give an explicit error. */ case 'l': case 'L': case 'N': case 'u': case 'U': *errorcodeptr = ERR37; break; /* \g must be followed by a number, either plain or braced. If positive, it is an absolute backreference. If negative, it is a relative backreference. This is a Perl 5.10 feature. Perl 5.10 also supports \g{name} as a reference to a named group. This is part of Perl's movement towards a unified syntax for back references. As this is synonymous with \k{name}, we fudge it up by pretending it really was \k. */ case 'g': if (ptr[1] == '{') { const uschar *p; for (p = ptr+2; *p != 0 && *p != '}'; p++) if (*p != '-' && g_ascii_isdigit(*p) == 0) break; if (*p != 0 && *p != '}') { c = -ESC_k; break; } braced = TRUE; ptr++; } else braced = FALSE; if (ptr[1] == '-') { negated = TRUE; ptr++; } else negated = FALSE; c = 0; while (g_ascii_isdigit(ptr[1]) != 0) c = c * 10 + *(++ptr) - '0'; if (c < 0) { *errorcodeptr = ERR61; break; } if (c == 0 || (braced && *(++ptr) != '}')) { *errorcodeptr = ERR57; break; } if (negated) { if (c > bracount) { *errorcodeptr = ERR15; break; } c = bracount - (c - 1); } c = -(ESC_REF + c); break; /* The handling of escape sequences consisting of a string of digits starting with one that is not zero is not straightforward. By experiment, the way Perl works seems to be as follows: Outside a character class, the digits are read as a decimal number. If the number is less than 10, or if there are that many previous extracting left brackets, then it is a back reference. Otherwise, up to three octal digits are read to form an escaped byte. Thus \123 is likely to be octal 123 (cf \0123, which is octal 012 followed by the literal 3). If the octal value is greater than 377, the least significant 8 bits are taken. Inside a character class, \ followed by a digit is always an octal number. */ case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (!isclass) { oldptr = ptr; c -= '0'; while (g_ascii_isdigit(ptr[1]) != 0) c = c * 10 + *(++ptr) - '0'; if (c < 0) { *errorcodeptr = ERR61; break; } if (c < 10 || c <= bracount) { c = -(ESC_REF + c); break; } ptr = oldptr; /* Put the pointer back and fall through */ } /* Handle an octal number following \. If the first digit is 8 or 9, Perl generates a binary zero byte and treats the digit as a following literal. Thus we have to pull back the pointer by one. */ if ((c = *ptr) >= '8') { ptr--; c = 0; break; } /* \0 always starts an octal number, but we may drop through to here with a larger first octal digit. The original code used just to take the least significant 8 bits of octal numbers (I think this is what early Perls used to do). Nowadays we allow for larger numbers in UTF-8 mode, but no more than 3 octal digits. */ case '0': c -= '0'; while(i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7') c = c * 8 + *(++ptr) - '0'; if (!utf8 && c > 255) *errorcodeptr = ERR51; break; /* \x is complicated. \x{ddd} is a character number which can be greater than 0xff in utf8 mode, but only if the ddd are hex digits. If not, { is treated as a data character. */ case 'x': if (ptr[1] == '{') { const uschar *pt = ptr + 2; int count = 0; c = 0; while (g_ascii_isxdigit(*pt) != 0) { register int cc = *pt++; if (c == 0 && cc == '0') continue; /* Leading zeroes */ count++; #ifndef EBCDIC /* ASCII coding */ if (cc >= 'a') cc -= 32; /* Convert to upper case */ c = (c << 4) + cc - ((cc < 'A')? '0' : ('A' - 10)); #else /* EBCDIC coding */ if (cc >= 'a' && cc <= 'z') cc += 64; /* Convert to upper case */ c = (c << 4) + cc - ((cc >= '0')? '0' : ('A' - 10)); #endif } if (*pt == '}') { if (c < 0 || count > (utf8? 8 : 2)) *errorcodeptr = ERR34; ptr = pt; break; } /* If the sequence of hex digits does not end with '}', then we don't recognize this construct; fall through to the normal \x handling. */ } /* Read just a single-byte hex-defined char */ c = 0; while (i++ < 2 && g_ascii_isxdigit(ptr[1]) != 0) { int cc; /* Some compilers don't like ++ */ cc = *(++ptr); /* in initializers */ #ifndef EBCDIC /* ASCII coding */ if (cc >= 'a') cc -= 32; /* Convert to upper case */ c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10)); #else /* EBCDIC coding */ if (cc <= 'z') cc += 64; /* Convert to upper case */ c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10)); #endif } break; /* For \c, a following letter is upper-cased; then the 0x40 bit is flipped. This coding is ASCII-specific, but then the whole concept of \cx is ASCII-specific. (However, an EBCDIC equivalent has now been added.) */ case 'c': c = *(++ptr); if (c == 0) { *errorcodeptr = ERR2; break; } #ifndef EBCDIC /* ASCII coding */ if (c >= 'a' && c <= 'z') c -= 32; c ^= 0x40; #else /* EBCDIC coding */ if (c >= 'a' && c <= 'z') c += 64; c ^= 0xC0; #endif break; /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any other alphanumeric following \ is an error if PCRE_EXTRA was set; otherwise, for Perl compatibility, it is a literal. This code looks a bit odd, but there used to be some cases other than the default, and there may be again in future, so I haven't "optimized" it. */ default: if ((options & PCRE_EXTRA) != 0) switch(c) { default: *errorcodeptr = ERR3; break; } break; } } *ptrptr = ptr; return c; } #ifdef SUPPORT_UCP /************************************************* * Handle \P and \p * *************************************************/ /* This function is called after \P or \p has been encountered, provided that PCRE is compiled with support for Unicode properties. On entry, ptrptr is pointing at the P or p. On exit, it is pointing at the final character of the escape sequence. Argument: ptrptr points to the pattern position pointer negptr points to a boolean that is set TRUE for negation else FALSE dptr points to an int that is set to the detailed property value errorcodeptr points to the error code variable Returns: type value from ucp_type_table, or -1 for an invalid type */ static int get_ucp(const uschar **ptrptr, BOOL *negptr, int *dptr, int *errorcodeptr) { int c, i, bot, top; const uschar *ptr = *ptrptr; char name[32]; c = *(++ptr); if (c == 0) goto ERROR_RETURN; *negptr = FALSE; /* \P or \p can be followed by a name in {}, optionally preceded by ^ for negation. */ if (c == '{') { if (ptr[1] == '^') { *negptr = TRUE; ptr++; } for (i = 0; i < (int)sizeof(name) - 1; i++) { c = *(++ptr); if (c == 0) goto ERROR_RETURN; if (c == '}') break; name[i] = c; } if (c !='}') goto ERROR_RETURN; name[i] = 0; } /* Otherwise there is just one following character */ else { name[0] = c; name[1] = 0; } *ptrptr = ptr; /* Search for a recognized property name using binary chop */ bot = 0; top = _pcre_utt_size; while (bot < top) { i = (bot + top) >> 1; c = strcmp(name, _pcre_utt_names + _pcre_utt[i].name_offset); if (c == 0) { *dptr = _pcre_utt[i].value; return _pcre_utt[i].type; } if (c > 0) bot = i + 1; else top = i; } *errorcodeptr = ERR47; *ptrptr = ptr; return -1; ERROR_RETURN: *errorcodeptr = ERR46; *ptrptr = ptr; return -1; } #endif /************************************************* * Check for counted repeat * *************************************************/ /* This function is called when a '{' is encountered in a place where it might start a quantifier. It looks ahead to see if it really is a quantifier or not. It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd} where the ddds are digits. Arguments: p pointer to the first char after '{' Returns: TRUE or FALSE */ static BOOL is_counted_repeat(const uschar *p) { if (g_ascii_isdigit(*p++) == 0) return FALSE; while (g_ascii_isdigit(*p) != 0) p++; if (*p == '}') return TRUE; if (*p++ != ',') return FALSE; if (*p == '}') return TRUE; if (g_ascii_isdigit(*p++) == 0) return FALSE; while (g_ascii_isdigit(*p) != 0) p++; return (*p == '}'); } /************************************************* * Read repeat counts * *************************************************/ /* Read an item of the form {n,m} and return the values. This is called only after is_counted_repeat() has confirmed that a repeat-count quantifier exists, so the syntax is guaranteed to be correct, but we need to check the values. Arguments: p pointer to first char after '{' minp pointer to int for min maxp pointer to int for max returned as -1 if no max errorcodeptr points to error code variable Returns: pointer to '}' on success; current ptr on error, with errorcodeptr set non-zero */ static const uschar * read_repeat_counts(const uschar *p, int *minp, int *maxp, int *errorcodeptr) { int min = 0; int max = -1; /* Read the minimum value and do a paranoid check: a negative value indicates an integer overflow. */ while (g_ascii_isdigit(*p) != 0) min = min * 10 + *p++ - '0'; if (min < 0 || min > 65535) { *errorcodeptr = ERR5; return p; } /* Read the maximum value if there is one, and again do a paranoid on its size. Also, max must not be less than min. */ if (*p == '}') max = min; else { if (*(++p) != '}') { max = 0; while(g_ascii_isdigit(*p) != 0) max = max * 10 + *p++ - '0'; if (max < 0 || max > 65535) { *errorcodeptr = ERR5; return p; } if (max < min) { *errorcodeptr = ERR4; return p; } } } /* Fill in the required variables, and pass back the pointer to the terminating '}'. */ *minp = min; *maxp = max; return p; } /************************************************* * Find forward referenced subpattern * *************************************************/ /* This function scans along a pattern's text looking for capturing subpatterns, and counting them. If it finds a named pattern that matches the name it is given, it returns its number. Alternatively, if the name is NULL, it returns when it reaches a given numbered subpattern. This is used for forward references to subpatterns. We know that if (?P< is encountered, the name will be terminated by '>' because that is checked in the first pass. Arguments: ptr current position in the pattern count current count of capturing parens so far encountered name name to seek, or NULL if seeking a numbered subpattern lorn name length, or subpattern number if name is NULL xmode TRUE if we are in /x mode Returns: the number of the named subpattern, or -1 if not found */ static int find_parens(const uschar *ptr, int count, const uschar *name, int lorn, BOOL xmode) { const uschar *thisname; for (; *ptr != 0; ptr++) { int term; /* Skip over backslashed characters and also entire \Q...\E */ if (*ptr == '\\') { if (*(++ptr) == 0) return -1; if (*ptr == 'Q') for (;;) { while (*(++ptr) != 0 && *ptr != '\\'); if (*ptr == 0) return -1; if (*(++ptr) == 'E') break; } continue; } /* Skip over character classes */ if (*ptr == '[') { while (*(++ptr) != ']') { if (*ptr == 0) return -1; if (*ptr == '\\') { if (*(++ptr) == 0) return -1; if (*ptr == 'Q') for (;;) { while (*(++ptr) != 0 && *ptr != '\\'); if (*ptr == 0) return -1; if (*(++ptr) == 'E') break; } continue; } } continue; } /* Skip comments in /x mode */ if (xmode && *ptr == '#') { while (*(++ptr) != 0 && *ptr != '\n'); if (*ptr == 0) return -1; continue; } /* An opening parens must now be a real metacharacter */ if (*ptr != '(') continue; if (ptr[1] != '?' && ptr[1] != '*') { count++; if (name == NULL && count == lorn) return count; continue; } ptr += 2; if (*ptr == 'P') ptr++; /* Allow optional P */ /* We have to disambiguate (? */ if ((*ptr != '<' || ptr[1] == '!' || ptr[1] == '=') && *ptr != '\'') continue; count++; if (name == NULL && count == lorn) return count; term = *ptr++; if (term == '<') term = '>'; thisname = ptr; while (*ptr != term) ptr++; if (name != NULL && lorn == ptr - thisname && strncmp((const char *)name, (const char *)thisname, lorn) == 0) return count; } return -1; } /************************************************* * Find first significant op code * *************************************************/ /* This is called by several functions that scan a compiled expression looking for a fixed first character, or an anchoring op code etc. It skips over things that do not influence this. For some calls, a change of option is important. For some calls, it makes sense to skip negative forward and all backward assertions, and also the \b assertion; for others it does not. Arguments: code pointer to the start of the group options pointer to external options optbit the option bit whose changing is significant, or zero if none are skipassert TRUE if certain assertions are to be skipped Returns: pointer to the first significant opcode */ static const uschar* first_significant_code(const uschar *code, int *options, int optbit, BOOL skipassert) { for (;;) { switch ((int)*code) { case OP_OPT: if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit)) *options = (int)code[1]; code += 2; break; case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: if (!skipassert) return code; do code += GET(code, 1); while (*code == OP_ALT); code += _pcre_OP_lengths[*code]; break; case OP_WORD_BOUNDARY: case OP_NOT_WORD_BOUNDARY: if (!skipassert) return code; /* Fall through */ case OP_CALLOUT: case OP_CREF: case OP_RREF: case OP_DEF: code += _pcre_OP_lengths[*code]; break; default: return code; } } /* Control never reaches here */ } /************************************************* * Find the fixed length of a pattern * *************************************************/ /* Scan a pattern and compute the fixed length of subject that will match it, if the length is fixed. This is needed for dealing with backward assertions. In UTF8 mode, the result is in characters rather than bytes. Arguments: code points to the start of the pattern (the bracket) options the compiling options Returns: the fixed length, or -1 if there is no fixed length, or -2 if \C was encountered */ static int find_fixedlength(uschar *code, int options) { int length = -1; register int branchlength = 0; register uschar *cc = code + 1 + LINK_SIZE; /* Scan along the opcodes for this branch. If we get to the end of the branch, check the length against that of the other branches. */ for (;;) { int d; register int op = *cc; switch (op) { case OP_CBRA: case OP_BRA: case OP_ONCE: case OP_COND: d = find_fixedlength(cc + ((op == OP_CBRA)? 2:0), options); if (d < 0) return d; branchlength += d; do cc += GET(cc, 1); while (*cc == OP_ALT); cc += 1 + LINK_SIZE; break; /* Reached end of a branch; if it's a ket it is the end of a nested call. If it's ALT it is an alternation in a nested call. If it is END it's the end of the outer call. All can be handled by the same code. */ case OP_ALT: case OP_KET: case OP_KETRMAX: case OP_KETRMIN: case OP_END: if (length < 0) length = branchlength; else if (length != branchlength) return -1; if (*cc != OP_ALT) return length; cc += 1 + LINK_SIZE; branchlength = 0; break; /* Skip over assertive subpatterns */ case OP_ASSERT: case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: do cc += GET(cc, 1); while (*cc == OP_ALT); /* Fall through */ /* Skip over things that don't match chars */ case OP_REVERSE: case OP_CREF: case OP_RREF: case OP_DEF: case OP_OPT: case OP_CALLOUT: case OP_SOD: case OP_SOM: case OP_EOD: case OP_EODN: case OP_CIRC: case OP_DOLL: case OP_NOT_WORD_BOUNDARY: case OP_WORD_BOUNDARY: cc += _pcre_OP_lengths[*cc]; break; /* Handle literal characters */ case OP_CHAR: case OP_CHARNC: case OP_NOT: branchlength++; cc += 2; #ifdef SUPPORT_UTF8 if ((options & PCRE_UTF8) != 0) { while ((*cc & 0xc0) == 0x80) cc++; } #endif break; /* Handle exact repetitions. The count is already in characters, but we need to skip over a multibyte character in UTF8 mode. */ case OP_EXACT: branchlength += GET2(cc,1); cc += 4; #ifdef SUPPORT_UTF8 if ((options & PCRE_UTF8) != 0) { while((*cc & 0x80) == 0x80) cc++; } #endif break; case OP_TYPEEXACT: branchlength += GET2(cc,1); if (cc[3] == OP_PROP || cc[3] == OP_NOTPROP) cc += 2; cc += 4; break; /* Handle single-char matchers */ case OP_PROP: case OP_NOTPROP: cc += 2; /* Fall through */ case OP_NOT_DIGIT: case OP_DIGIT: case OP_NOT_WHITESPACE: case OP_WHITESPACE: case OP_NOT_WORDCHAR: case OP_WORDCHAR: case OP_ANY: branchlength++; cc++; break; /* The single-byte matcher isn't allowed */ case OP_ANYBYTE: return -2; /* Check a class for variable quantification */ #ifdef SUPPORT_UTF8 case OP_XCLASS: cc += GET(cc, 1) - 33; /* Fall through */ #endif case OP_CLASS: case OP_NCLASS: cc += 33; switch (*cc) { case OP_CRSTAR: case OP_CRMINSTAR: case OP_CRQUERY: case OP_CRMINQUERY: return -1; case OP_CRRANGE: case OP_CRMINRANGE: if (GET2(cc,1) != GET2(cc,3)) return -1; branchlength += GET2(cc,1); cc += 5; break; default: branchlength++; } break; /* Anything else is variable length */ default: return -1; } } /* Control never gets here */ } /************************************************* * Scan compiled regex for numbered bracket * *************************************************/ /* This little function scans through a compiled pattern until it finds a capturing bracket with the given number. Arguments: code points to start of expression utf8 TRUE in UTF-8 mode number the required bracket number Returns: pointer to the opcode for the bracket, or NULL if not found */ static const uschar * find_bracket(const uschar *code, BOOL utf8, int number) { for (;;) { register int c = *code; if (c == OP_END) return NULL; /* XCLASS is used for classes that cannot be represented just by a bit map. This includes negated single high-valued characters. The length in the table is zero; the actual length is stored in the compiled code. */ if (c == OP_XCLASS) code += GET(code, 1); /* Handle capturing bracket */ else if (c == OP_CBRA) { int n = GET2(code, 1+LINK_SIZE); if (n == number) return (uschar *)code; code += _pcre_OP_lengths[c]; } /* Otherwise, we can get the item's length from the table, except that for repeated character types, we have to test for \p and \P, which have an extra two bytes of parameters. */ else { switch(c) { case OP_TYPESTAR: case OP_TYPEMINSTAR: case OP_TYPEPLUS: case OP_TYPEMINPLUS: case OP_TYPEQUERY: case OP_TYPEMINQUERY: case OP_TYPEPOSSTAR: case OP_TYPEPOSPLUS: case OP_TYPEPOSQUERY: if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2; break; case OP_TYPEUPTO: case OP_TYPEMINUPTO: case OP_TYPEEXACT: case OP_TYPEPOSUPTO: if (code[3] == OP_PROP || code[3] == OP_NOTPROP) code += 2; break; } /* Add in the fixed length from the table */ code += _pcre_OP_lengths[c]; /* In UTF-8 mode, opcodes that are followed by a character may be followed by a multi-byte character. The length in the table is a minimum, so we have to arrange to skip the extra bytes. */ #ifdef SUPPORT_UTF8 if (utf8) switch(c) { case OP_CHAR: case OP_CHARNC: case OP_EXACT: case OP_UPTO: case OP_MINUPTO: case OP_POSUPTO: case OP_STAR: case OP_MINSTAR: case OP_POSSTAR: case OP_PLUS: case OP_MINPLUS: case OP_POSPLUS: case OP_QUERY: case OP_MINQUERY: case OP_POSQUERY: if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f]; break; } #endif } } } /************************************************* * Scan compiled regex for recursion reference * *************************************************/ /* This little function scans through a compiled pattern until it finds an instance of OP_RECURSE. Arguments: code points to start of expression utf8 TRUE in UTF-8 mode Returns: pointer to the opcode for OP_RECURSE, or NULL if not found */ static const uschar * find_recurse(const uschar *code, BOOL utf8) { for (;;) { register int c = *code; if (c == OP_END) return NULL; if (c == OP_RECURSE) return code; /* XCLASS is used for classes that cannot be represented just by a bit map. This includes negated single high-valued characters. The length in the table is zero; the actual length is stored in the compiled code. */ if (c == OP_XCLASS) code += GET(code, 1); /* Otherwise, we can get the item's length from the table, except that for repeated character types, we have to test for \p and \P, which have an extra two bytes of parameters. */ else { switch(c) { case OP_TYPESTAR: case OP_TYPEMINSTAR: case OP_TYPEPLUS: case OP_TYPEMINPLUS: case OP_TYPEQUERY: case OP_TYPEMINQUERY: case OP_TYPEPOSSTAR: case OP_TYPEPOSPLUS: case OP_TYPEPOSQUERY: if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2; break; case OP_TYPEPOSUPTO: case OP_TYPEUPTO: case OP_TYPEMINUPTO: case OP_TYPEEXACT: if (code[3] == OP_PROP || code[3] == OP_NOTPROP) code += 2; break; } /* Add in the fixed length from the table */ code += _pcre_OP_lengths[c]; /* In UTF-8 mode, opcodes that are followed by a character may be followed by a multi-byte character. The length in the table is a minimum, so we have to arrange to skip the extra bytes. */ #ifdef SUPPORT_UTF8 if (utf8) switch(c) { case OP_CHAR: case OP_CHARNC: case OP_EXACT: case OP_UPTO: case OP_MINUPTO: case OP_POSUPTO: case OP_STAR: case OP_MINSTAR: case OP_POSSTAR: case OP_PLUS: case OP_MINPLUS: case OP_POSPLUS: case OP_QUERY: case OP_MINQUERY: case OP_POSQUERY: if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f]; break; } #endif } } } /************************************************* * Scan compiled branch for non-emptiness * *************************************************/ /* This function scans through a branch of a compiled pattern to see whether it can match the empty string or not. It is called from could_be_empty() below and from compile_branch() when checking for an unlimited repeat of a group that can match nothing. Note that first_significant_code() skips over backward and negative forward assertions when its final argument is TRUE. If we hit an unclosed bracket, we return "empty" - this means we've struck an inner bracket whose current branch will already have been scanned. Arguments: code points to start of search endcode points to where to stop utf8 TRUE if in UTF8 mode Returns: TRUE if what is matched could be empty */ static BOOL could_be_empty_branch(const uschar *code, const uschar *endcode, BOOL utf8) { register int c; for (code = first_significant_code(code + _pcre_OP_lengths[*code], NULL, 0, TRUE); code < endcode; code = first_significant_code(code + _pcre_OP_lengths[c], NULL, 0, TRUE)) { const uschar *ccode; c = *code; /* Skip over forward assertions; the other assertions are skipped by first_significant_code() with a TRUE final argument. */ if (c == OP_ASSERT) { do code += GET(code, 1); while (*code == OP_ALT); c = *code; continue; } /* Groups with zero repeats can of course be empty; skip them. */ if (c == OP_BRAZERO || c == OP_BRAMINZERO) { code += _pcre_OP_lengths[c]; do code += GET(code, 1); while (*code == OP_ALT); c = *code; continue; } /* For other groups, scan the branches. */ if (c == OP_BRA || c == OP_CBRA || c == OP_ONCE || c == OP_COND) { BOOL empty_branch; if (GET(code, 1) == 0) return TRUE; /* Hit unclosed bracket */ /* Scan a closed bracket */ empty_branch = FALSE; do { if (!empty_branch && could_be_empty_branch(code, endcode, utf8)) empty_branch = TRUE; code += GET(code, 1); } while (*code == OP_ALT); if (!empty_branch) return FALSE; /* All branches are non-empty */ c = *code; continue; } /* Handle the other opcodes */ switch (c) { /* Check for quantifiers after a class. XCLASS is used for classes that cannot be represented just by a bit map. This includes negated single high-valued characters. The length in _pcre_OP_lengths[] is zero; the actual length is stored in the compiled code, so we must update "code" here. */ #ifdef SUPPORT_UTF8 case OP_XCLASS: ccode = code += GET(code, 1); goto CHECK_CLASS_REPEAT; #endif case OP_CLASS: case OP_NCLASS: ccode = code + 33; #ifdef SUPPORT_UTF8 CHECK_CLASS_REPEAT: #endif switch (*ccode) { case OP_CRSTAR: /* These could be empty; continue */ case OP_CRMINSTAR: case OP_CRQUERY: case OP_CRMINQUERY: break; default: /* Non-repeat => class must match */ case OP_CRPLUS: /* These repeats aren't empty */ case OP_CRMINPLUS: return FALSE; case OP_CRRANGE: case OP_CRMINRANGE: if (GET2(ccode, 1) > 0) return FALSE; /* Minimum > 0 */ break; } break; /* Opcodes that must match a character */ case OP_PROP: case OP_NOTPROP: case OP_EXTUNI: case OP_NOT_DIGIT: case OP_DIGIT: case OP_NOT_WHITESPACE: case OP_WHITESPACE: case OP_NOT_WORDCHAR: case OP_WORDCHAR: case OP_ANY: case OP_ANYBYTE: case OP_CHAR: case OP_CHARNC: case OP_NOT: case OP_PLUS: case OP_MINPLUS: case OP_POSPLUS: case OP_EXACT: case OP_NOTPLUS: case OP_NOTMINPLUS: case OP_NOTPOSPLUS: case OP_NOTEXACT: case OP_TYPEPLUS: case OP_TYPEMINPLUS: case OP_TYPEPOSPLUS: case OP_TYPEEXACT: return FALSE; /* These are going to continue, as they may be empty, but we have to fudge the length for the \p and \P cases. */ case OP_TYPESTAR: case OP_TYPEMINSTAR: case OP_TYPEPOSSTAR: case OP_TYPEQUERY: case OP_TYPEMINQUERY: case OP_TYPEPOSQUERY: if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2; break; /* Same for these */ case OP_TYPEUPTO: case OP_TYPEMINUPTO: case OP_TYPEPOSUPTO: if (code[3] == OP_PROP || code[3] == OP_NOTPROP) code += 2; break; /* End of branch */ case OP_KET: case OP_KETRMAX: case OP_KETRMIN: case OP_ALT: return TRUE; /* In UTF-8 mode, STAR, MINSTAR, POSSTAR, QUERY, MINQUERY, POSQUERY, UPTO, MINUPTO, and POSUPTO may be followed by a multibyte character */ #ifdef SUPPORT_UTF8 case OP_STAR: case OP_MINSTAR: case OP_POSSTAR: case OP_QUERY: case OP_MINQUERY: case OP_POSQUERY: case OP_UPTO: case OP_MINUPTO: case OP_POSUPTO: if (utf8) while ((code[2] & 0xc0) == 0x80) code++; break; #endif } } return TRUE; } /************************************************* * Scan compiled regex for non-emptiness * *************************************************/ /* This function is called to check for left recursive calls. We want to check the current branch of the current pattern to see if it could match the empty string. If it could, we must look outwards for branches at other levels, stopping when we pass beyond the bracket which is the subject of the recursion. Arguments: code points to start of the recursion endcode points to where to stop (current RECURSE item) bcptr points to the chain of current (unclosed) branch starts utf8 TRUE if in UTF-8 mode Returns: TRUE if what is matched could be empty */ static BOOL could_be_empty(const uschar *code, const uschar *endcode, branch_chain *bcptr, BOOL utf8) { while (bcptr != NULL && bcptr->current >= code) { if (!could_be_empty_branch(bcptr->current, endcode, utf8)) return FALSE; bcptr = bcptr->outer; } return TRUE; } /************************************************* * Check for POSIX class syntax * *************************************************/ /* This function is called when the sequence "[:" or "[." or "[=" is encountered in a character class. It checks whether this is followed by a sequence of characters terminated by a matching ":]" or ".]" or "=]". If we reach an unescaped ']' without the special preceding character, return FALSE. Originally, this function only recognized a sequence of letters between the terminators, but it seems that Perl recognizes any sequence of characters, though of course unknown POSIX names are subsequently rejected. Perl gives an "Unknown POSIX class" error for [:f\oo:] for example, where previously PCRE didn't consider this to be a POSIX class. Likewise for [:1234:]. The problem in trying to be exactly like Perl is in the handling of escapes. We have to be sure that [abc[:x\]pqr] is *not* treated as containing a POSIX class, but [abc[:x\]pqr:]] is (so that an error can be generated). The code below handles the special case of \], but does not try to do any other escape processing. This makes it different from Perl for cases such as [:l\ower:] where Perl recognizes it as the POSIX class "lower" but PCRE does not recognize "l\ower". This is a lesser evil that not diagnosing bad classes when Perl does, I think. Arguments: ptr pointer to the initial [ endptr where to return the end pointer Returns: TRUE or FALSE */ static BOOL check_posix_syntax(const uschar *ptr, const uschar **endptr) { int terminator; /* Don't combine these lines; the Solaris cc */ terminator = *(++ptr); /* compiler warns about "non-constant" initializer. */ for (++ptr; *ptr != 0; ptr++) { if (*ptr == '\\' && ptr[1] == ']') ptr++; else { if (*ptr == ']') return FALSE; if (*ptr == terminator && ptr[1] == ']') { *endptr = ptr; return TRUE; } } } return FALSE; } /************************************************* * Check POSIX class name * *************************************************/ /* This function is called to check the name given in a POSIX-style class entry such as [:alnum:]. Arguments: ptr points to the first letter len the length of the name Returns: a value representing the name, or -1 if unknown */ static int check_posix_name(const uschar *ptr, int len) { const char *pn = posix_names; register int yield = 0; while (posix_name_lengths[yield] != 0) { if (len == posix_name_lengths[yield] && strncmp((const char *)ptr, pn, len) == 0) return yield; pn += posix_name_lengths[yield] + 1; yield++; } return -1; } /************************************************* * Adjust OP_RECURSE items in repeated group * *************************************************/ /* OP_RECURSE items contain an offset from the start of the regex to the group that is referenced. This means that groups can be replicated for fixed repetition simply by copying (because the recursion is allowed to refer to earlier groups that are outside the current group). However, when a group is optional (i.e. the minimum quantifier is zero), OP_BRAZERO is inserted before it, after it has been compiled. This means that any OP_RECURSE items within it that refer to the group itself or any contained groups have to have their offsets adjusted. That one of the jobs of this function. Before it is called, the partially compiled regex must be temporarily terminated with OP_END. This function has been extended with the possibility of forward references for recursions and subroutine calls. It must also check the list of such references for the group we are dealing with. If it finds that one of the recursions in the current group is on this list, it adjusts the offset in the list, not the value in the reference (which is a group number). Arguments: group points to the start of the group adjust the amount by which the group is to be moved utf8 TRUE in UTF-8 mode cd contains pointers to tables etc. save_hwm the hwm forward reference pointer at the start of the group Returns: nothing */ static void adjust_recurse(uschar *group, int adjust, BOOL utf8, compile_data *cd, uschar *save_hwm) { uschar *ptr = group; while ((ptr = (uschar *)find_recurse(ptr, utf8)) != NULL) { int offset; uschar *hc; /* See if this recursion is on the forward reference list. If so, adjust the reference. */ for (hc = save_hwm; hc < cd->hwm; hc += LINK_SIZE) { offset = GET(hc, 0); if (cd->start_code + offset == ptr + 1) { PUT(hc, 0, offset + adjust); break; } } /* Otherwise, adjust the recursion offset if it's after the start of this group. */ if (hc >= cd->hwm) { offset = GET(ptr, 1); if (cd->start_code + offset >= group) PUT(ptr, 1, offset + adjust); } ptr += 1 + LINK_SIZE; } } /************************************************* * Insert an automatic callout point * *************************************************/ /* This function is called when the PCRE_AUTO_CALLOUT option is set, to insert callout points before each pattern item. Arguments: code current code pointer ptr current pattern pointer cd pointers to tables etc Returns: new code pointer */ static uschar * auto_callout(uschar *code, const uschar *ptr, compile_data *cd) { *code++ = OP_CALLOUT; *code++ = 255; PUT(code, 0, ptr - cd->start_pattern); /* Pattern offset */ PUT(code, LINK_SIZE, 0); /* Default length */ return code + 2*LINK_SIZE; } /************************************************* * Complete a callout item * *************************************************/ /* A callout item contains the length of the next item in the pattern, which we can't fill in till after we have reached the relevant point. This is used for both automatic and manual callouts. Arguments: previous_callout points to previous callout item ptr current pattern pointer cd pointers to tables etc Returns: nothing */ static void complete_callout(uschar *previous_callout, const uschar *ptr, compile_data *cd) { int length = ptr - cd->start_pattern - GET(previous_callout, 2); PUT(previous_callout, 2 + LINK_SIZE, length); } #ifdef SUPPORT_UCP /************************************************* * Get othercase range * *************************************************/ /* This function is passed the start and end of a class range, in UTF-8 mode with UCP support. It searches up the characters, looking for internal ranges of characters in the "other" case. Each call returns the next one, updating the start address. Arguments: cptr points to starting character value; updated d end value ocptr where to put start of othercase range odptr where to put end of othercase range Yield: TRUE when range returned; FALSE when no more */ static BOOL get_othercase_range(unsigned int *cptr, unsigned int d, unsigned int *ocptr, unsigned int *odptr) { unsigned int c, othercase, next; for (c = *cptr; c <= d; c++) { if ((othercase = _pcre_ucp_othercase(c)) != NOTACHAR) break; } if (c > d) return FALSE; *ocptr = othercase; next = othercase + 1; for (++c; c <= d; c++) { if (_pcre_ucp_othercase(c) != next) break; next++; } *odptr = next - 1; *cptr = c; return TRUE; } #endif /* SUPPORT_UCP */ /************************************************* * Check if auto-possessifying is possible * *************************************************/ /* This function is called for unlimited repeats of certain items, to see whether the next thing could possibly match the repeated item. If not, it makes sense to automatically possessify the repeated item. Arguments: op_code the repeated op code this data for this item, depends on the opcode utf8 TRUE in UTF-8 mode utf8_char used for utf8 character bytes, NULL if not relevant ptr next character in pattern options options bits cd contains pointers to tables etc. Returns: TRUE if possessifying is wanted */ static BOOL check_auto_possessive(int op_code, int item, BOOL utf8, uschar *utf8_char, const uschar *ptr, int options, compile_data *cd) { int next; /* Skip whitespace and comments in extended mode */ if ((options & PCRE_EXTENDED) != 0) { for (;;) { while ((cd->ctypes[*ptr] & ctype_space) != 0) ptr++; if (*ptr == '#') { while (*(++ptr) != 0) if (IS_NEWLINE(ptr)) { ptr += cd->nllen; break; } } else break; } } /* If the next item is one that we can handle, get its value. A non-negative value is a character, a negative value is an escape value. */ if (*ptr == '\\') { int temperrorcode = 0; next = check_escape(&ptr, &temperrorcode, cd->bracount, options, FALSE); if (temperrorcode != 0) return FALSE; ptr++; /* Point after the escape sequence */ } else if ((cd->ctypes[*ptr] & ctype_meta) == 0) { #ifdef SUPPORT_UTF8 if (utf8) { GETCHARINC(next, ptr); } else #endif next = *ptr++; } else return FALSE; /* Skip whitespace and comments in extended mode */ if ((options & PCRE_EXTENDED) != 0) { for (;;) { while ((cd->ctypes[*ptr] & ctype_space) != 0) ptr++; if (*ptr == '#') { while (*(++ptr) != 0) if (IS_NEWLINE(ptr)) { ptr += cd->nllen; break; } } else break; } } /* If the next thing is itself optional, we have to give up. */ if (*ptr == '*' || *ptr == '?' || strncmp((char *)ptr, "{0,", 3) == 0) return FALSE; /* Now compare the next item with the previous opcode. If the previous is a positive single character match, "item" either contains the character or, if "item" is greater than 127 in utf8 mode, the character's bytes are in utf8_char. */ /* Handle cases when the next item is a character. */ if (next >= 0) switch(op_code) { case OP_CHAR: #ifdef SUPPORT_UTF8 if (utf8 && item > 127) { GETCHAR(item, utf8_char); } #endif return item != next; /* For CHARNC (caseless character) we must check the other case. If we have Unicode property support, we can use it to test the other case of high-valued characters. */ case OP_CHARNC: #ifdef SUPPORT_UTF8 if (utf8 && item > 127) { GETCHAR(item, utf8_char); } #endif if (item == next) return FALSE; #ifdef SUPPORT_UTF8 if (utf8) { unsigned int othercase; if (next < 128) othercase = cd->fcc[next]; else #ifdef SUPPORT_UCP othercase = _pcre_ucp_othercase((unsigned int)next); #else othercase = NOTACHAR; #endif return (unsigned int)item != othercase; } else #endif /* SUPPORT_UTF8 */ return (item != cd->fcc[next]); /* Non-UTF-8 mode */ /* For OP_NOT, "item" must be a single-byte character. */ case OP_NOT: if (next < 0) return FALSE; /* Not a character */ if (item == next) return TRUE; if ((options & PCRE_CASELESS) == 0) return FALSE; #ifdef SUPPORT_UTF8 if (utf8) { unsigned int othercase; if (next < 128) othercase = cd->fcc[next]; else #ifdef SUPPORT_UCP othercase = _pcre_ucp_othercase(next); #else othercase = NOTACHAR; #endif return (unsigned int)item == othercase; } else #endif /* SUPPORT_UTF8 */ return (item == cd->fcc[next]); /* Non-UTF-8 mode */ case OP_DIGIT: return next > 127 || (cd->ctypes[next] & ctype_digit) == 0; case OP_NOT_DIGIT: return next <= 127 && (cd->ctypes[next] & ctype_digit) != 0; case OP_WHITESPACE: return next > 127 || (cd->ctypes[next] & ctype_space) == 0; case OP_NOT_WHITESPACE: return next <= 127 && (cd->ctypes[next] & ctype_space) != 0; case OP_WORDCHAR: return next > 127 || (cd->ctypes[next] & ctype_word) == 0; case OP_NOT_WORDCHAR: return next <= 127 && (cd->ctypes[next] & ctype_word) != 0; case OP_HSPACE: case OP_NOT_HSPACE: switch(next) { case 0x09: case 0x20: case 0xa0: case 0x1680: case 0x180e: case 0x2000: case 0x2001: case 0x2002: case 0x2003: case 0x2004: case 0x2005: case 0x2006: case 0x2007: case 0x2008: case 0x2009: case 0x200A: case 0x202f: case 0x205f: case 0x3000: return op_code != OP_HSPACE; default: return op_code == OP_HSPACE; } case OP_VSPACE: case OP_NOT_VSPACE: switch(next) { case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x85: case 0x2028: case 0x2029: return op_code != OP_VSPACE; default: return op_code == OP_VSPACE; } default: return FALSE; } /* Handle the case when the next item is \d, \s, etc. */ switch(op_code) { case OP_CHAR: case OP_CHARNC: #ifdef SUPPORT_UTF8 if (utf8 && item > 127) { GETCHAR(item, utf8_char); } #endif switch(-next) { case ESC_d: return item > 127 || (cd->ctypes[item] & ctype_digit) == 0; case ESC_D: return item <= 127 && (cd->ctypes[item] & ctype_digit) != 0; case ESC_s: return item > 127 || (cd->ctypes[item] & ctype_space) == 0; case ESC_S: return item <= 127 && (cd->ctypes[item] & ctype_space) != 0; case ESC_w: return item > 127 || (cd->ctypes[item] & ctype_word) == 0; case ESC_W: return item <= 127 && (cd->ctypes[item] & ctype_word) != 0; case ESC_h: case ESC_H: switch(item) { case 0x09: case 0x20: case 0xa0: case 0x1680: case 0x180e: case 0x2000: case 0x2001: case 0x2002: case 0x2003: case 0x2004: case 0x2005: case 0x2006: case 0x2007: case 0x2008: case 0x2009: case 0x200A: case 0x202f: case 0x205f: case 0x3000: return -next != ESC_h; default: return -next == ESC_h; } case ESC_v: case ESC_V: switch(item) { case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x85: case 0x2028: case 0x2029: return -next != ESC_v; default: return -next == ESC_v; } default: return FALSE; } case OP_DIGIT: return next == -ESC_D || next == -ESC_s || next == -ESC_W || next == -ESC_h || next == -ESC_v; case OP_NOT_DIGIT: return next == -ESC_d; case OP_WHITESPACE: return next == -ESC_S || next == -ESC_d || next == -ESC_w; case OP_NOT_WHITESPACE: return next == -ESC_s || next == -ESC_h || next == -ESC_v; case OP_HSPACE: return next == -ESC_S || next == -ESC_H || next == -ESC_d || next == -ESC_w; case OP_NOT_HSPACE: return next == -ESC_h; /* Can't have \S in here because VT matches \S (Perl anomaly) */ case OP_VSPACE: return next == -ESC_V || next == -ESC_d || next == -ESC_w; case OP_NOT_VSPACE: return next == -ESC_v; case OP_WORDCHAR: return next == -ESC_W || next == -ESC_s || next == -ESC_h || next == -ESC_v; case OP_NOT_WORDCHAR: return next == -ESC_w || next == -ESC_d; default: return FALSE; } /* Control does not reach here */ } /************************************************* * Compile one branch * *************************************************/ /* Scan the pattern, compiling it into the a vector. If the options are changed during the branch, the pointer is used to change the external options bits. This function is used during the pre-compile phase when we are trying to find out the amount of memory needed, as well as during the real compile phase. The value of lengthptr distinguishes the two phases. Arguments: optionsptr pointer to the option bits codeptr points to the pointer to the current code point ptrptr points to the current pattern pointer errorcodeptr points to error code variable firstbyteptr set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE) reqbyteptr set to the last literal character required, else < 0 bcptr points to current branch chain cd contains pointers to tables etc. lengthptr NULL during the real compile phase points to length accumulator during pre-compile phase Returns: TRUE on success FALSE, with *errorcodeptr set non-zero on error */ static BOOL compile_branch(int *optionsptr, uschar **codeptr, const uschar **ptrptr, int *errorcodeptr, int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr, compile_data *cd, int *lengthptr) { int repeat_type, op_type; int repeat_min = 0, repeat_max = 0; /* To please picky compilers */ int bravalue = 0; int greedy_default, greedy_non_default; int firstbyte, reqbyte; int zeroreqbyte, zerofirstbyte; int req_caseopt, reqvary, tempreqvary; int options = *optionsptr; int after_manual_callout = 0; int length_prevgroup = 0; register int c; register uschar *code = *codeptr; uschar *last_code = code; uschar *orig_code = code; uschar *tempcode; BOOL inescq = FALSE; BOOL groupsetfirstbyte = FALSE; const uschar *ptr = *ptrptr; const uschar *tempptr; uschar *previous = NULL; uschar *previous_callout = NULL; uschar *save_hwm = NULL; uschar classbits[32]; #ifdef SUPPORT_UTF8 BOOL class_utf8; BOOL utf8 = (options & PCRE_UTF8) != 0; uschar *class_utf8data; uschar *class_utf8data_base; uschar utf8_char[6]; #else BOOL utf8 = FALSE; uschar *utf8_char = NULL; #endif #ifdef DEBUG if (lengthptr != NULL) DPRINTF((">> start branch\n")); #endif /* Set up the default and non-default settings for greediness */ greedy_default = ((options & PCRE_UNGREEDY) != 0); greedy_non_default = greedy_default ^ 1; /* Initialize no first byte, no required byte. REQ_UNSET means "no char matching encountered yet". It gets changed to REQ_NONE if we hit something that matches a non-fixed char first char; reqbyte just remains unset if we never find one. When we hit a repeat whose minimum is zero, we may have to adjust these values to take the zero repeat into account. This is implemented by setting them to zerofirstbyte and zeroreqbyte when such a repeat is encountered. The individual item types that can be repeated set these backoff variables appropriately. */ firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET; /* The variable req_caseopt contains either the REQ_CASELESS value or zero, according to the current setting of the caseless flag. REQ_CASELESS is a bit value > 255. It is added into the firstbyte or reqbyte variables to record the case status of the value. This is used only for ASCII characters. */ req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0; /* Switch on next character until the end of the branch */ for (;; ptr++) { BOOL negate_class; BOOL should_flip_negation; BOOL possessive_quantifier; BOOL is_quantifier; BOOL is_recurse; BOOL reset_bracount; int class_charcount; int class_lastchar; int newoptions; int recno; int refsign; int skipbytes; int subreqbyte; int subfirstbyte; int terminator; int mclength; uschar mcbuffer[8]; /* Get next byte in the pattern */ c = *ptr; /* If we are in the pre-compile phase, accumulate the length used for the previous cycle of this loop. */ if (lengthptr != NULL) { #ifdef DEBUG if (code > cd->hwm) cd->hwm = code; /* High water info */ #endif if (code > cd->start_workspace + COMPILE_WORK_SIZE) /* Check for overrun */ { *errorcodeptr = ERR52; goto FAILED; } /* There is at least one situation where code goes backwards: this is the case of a zero quantifier after a class (e.g. [ab]{0}). At compile time, the class is simply eliminated. However, it is created first, so we have to allow memory for it. Therefore, don't ever reduce the length at this point. */ if (code < last_code) code = last_code; /* Paranoid check for integer overflow */ if (OFLOW_MAX - *lengthptr < code - last_code) { *errorcodeptr = ERR20; goto FAILED; } *lengthptr += code - last_code; DPRINTF(("length=%d added %d c=%c\n", *lengthptr, code - last_code, c)); /* If "previous" is set and it is not at the start of the work space, move it back to there, in order to avoid filling up the work space. Otherwise, if "previous" is NULL, reset the current code pointer to the start. */ if (previous != NULL) { if (previous > orig_code) { memmove(orig_code, previous, code - previous); code -= previous - orig_code; previous = orig_code; } } else code = orig_code; /* Remember where this code item starts so we can pick up the length next time round. */ last_code = code; } /* In the real compile phase, just check the workspace used by the forward reference list. */ else if (cd->hwm > cd->start_workspace + COMPILE_WORK_SIZE) { *errorcodeptr = ERR52; goto FAILED; } /* If in \Q...\E, check for the end; if not, we have a literal */ if (inescq && c != 0) { if (c == '\\' && ptr[1] == 'E') { inescq = FALSE; ptr++; continue; } else { if (previous_callout != NULL) { if (lengthptr == NULL) /* Don't attempt in pre-compile phase */ complete_callout(previous_callout, ptr, cd); previous_callout = NULL; } if ((options & PCRE_AUTO_CALLOUT) != 0) { previous_callout = code; code = auto_callout(code, ptr, cd); } goto NORMAL_CHAR; } } /* Fill in length of a previous callout, except when the next thing is a quantifier. */ is_quantifier = c == '*' || c == '+' || c == '?' || (c == '{' && is_counted_repeat(ptr+1)); if (!is_quantifier && previous_callout != NULL && after_manual_callout-- <= 0) { if (lengthptr == NULL) /* Don't attempt in pre-compile phase */ complete_callout(previous_callout, ptr, cd); previous_callout = NULL; } /* In extended mode, skip white space and comments */ if ((options & PCRE_EXTENDED) != 0) { if ((cd->ctypes[c] & ctype_space) != 0) continue; if (c == '#') { while (*(++ptr) != 0) { if (IS_NEWLINE(ptr)) { ptr += cd->nllen - 1; break; } } if (*ptr != 0) continue; /* Else fall through to handle end of string */ c = 0; } } /* No auto callout for quantifiers. */ if ((options & PCRE_AUTO_CALLOUT) != 0 && !is_quantifier) { previous_callout = code; code = auto_callout(code, ptr, cd); } switch(c) { /* ===================================================================*/ case 0: /* The branch terminates at string end */ case '|': /* or | or ) */ case ')': *firstbyteptr = firstbyte; *reqbyteptr = reqbyte; *codeptr = code; *ptrptr = ptr; if (lengthptr != NULL) { if (OFLOW_MAX - *lengthptr < code - last_code) { *errorcodeptr = ERR20; goto FAILED; } *lengthptr += code - last_code; /* To include callout length */ DPRINTF((">> end branch\n")); } return TRUE; /* ===================================================================*/ /* Handle single-character metacharacters. In multiline mode, ^ disables the setting of any following char as a first character. */ case '^': if ((options & PCRE_MULTILINE) != 0) { if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; } previous = NULL; *code++ = OP_CIRC; break; case '$': previous = NULL; *code++ = OP_DOLL; break; /* There can never be a first char if '.' is first, whatever happens about repeats. The value of reqbyte doesn't change either. */ case '.': if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; zerofirstbyte = firstbyte; zeroreqbyte = reqbyte; previous = code; *code++ = OP_ANY; break; /* ===================================================================*/ /* Character classes. If the included characters are all < 256, we build a 32-byte bitmap of the permitted characters, except in the special case where there is only one such character. For negated classes, we build the map as usual, then invert it at the end. However, we use a different opcode so that data characters > 255 can be handled correctly. If the class contains characters outside the 0-255 range, a different opcode is compiled. It may optionally have a bit map for characters < 256, but those above are are explicitly listed afterwards. A flag byte tells whether the bitmap is present, and whether this is a negated class or not. */ case '[': previous = code; /* PCRE supports POSIX class stuff inside a class. Perl gives an error if they are encountered at the top level, so we'll do that too. */ if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') && check_posix_syntax(ptr, &tempptr)) { *errorcodeptr = (ptr[1] == ':')? ERR13 : ERR31; goto FAILED; } /* If the first character is '^', set the negation flag and skip it. Also, if the first few characters (either before or after ^) are \Q\E or \E we skip them too. This makes for compatibility with Perl. */ negate_class = FALSE; for (;;) { c = *(++ptr); if (c == '\\') { if (ptr[1] == 'E') ptr++; else if (strncmp((const char *)ptr+1, "Q\\E", 3) == 0) ptr += 3; else break; } else if (!negate_class && c == '^') negate_class = TRUE; else break; } /* If a class contains a negative special such as \S, we need to flip the negation flag at the end, so that support for characters > 255 works correctly (they are all included in the class). */ should_flip_negation = FALSE; /* Keep a count of chars with values < 256 so that we can optimize the case of just a single character (as long as it's < 256). However, For higher valued UTF-8 characters, we don't yet do any optimization. */ class_charcount = 0; class_lastchar = -1; /* Initialize the 32-char bit map to all zeros. We build the map in a temporary bit of memory, in case the class contains only 1 character (less than 256), because in that case the compiled code doesn't use the bit map. */ memset(classbits, 0, 32 * sizeof(uschar)); #ifdef SUPPORT_UTF8 class_utf8 = FALSE; /* No chars >= 256 */ class_utf8data = code + LINK_SIZE + 2; /* For UTF-8 items */ class_utf8data_base = class_utf8data; /* For resetting in pass 1 */ #endif /* Process characters until ] is reached. By writing this as a "do" it means that an initial ] is taken as a data character. At the start of the loop, c contains the first byte of the character. */ if (c != 0) do { const uschar *oldptr; #ifdef SUPPORT_UTF8 if (utf8 && c > 127) { /* Braces are required because the */ GETCHARLEN(c, ptr, ptr); /* macro generates multiple statements */ } /* In the pre-compile phase, accumulate the length of any UTF-8 extra data and reset the pointer. This is so that very large classes that contain a zillion UTF-8 characters no longer overwrite the work space (which is on the stack). */ if (lengthptr != NULL) { *lengthptr += class_utf8data - class_utf8data_base; class_utf8data = class_utf8data_base; } #endif /* Inside \Q...\E everything is literal except \E */ if (inescq) { if (c == '\\' && ptr[1] == 'E') /* If we are at \E */ { inescq = FALSE; /* Reset literal state */ ptr++; /* Skip the 'E' */ continue; /* Carry on with next */ } goto CHECK_RANGE; /* Could be range if \E follows */ } /* Handle POSIX class names. Perl allows a negation extension of the form [:^name:]. A square bracket that doesn't match the syntax is treated as a literal. We also recognize the POSIX constructions [.ch.] and [=ch=] ("collating elements") and fault them, as Perl 5.6 and 5.8 do. */ if (c == '[' && (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') && check_posix_syntax(ptr, &tempptr)) { BOOL local_negate = FALSE; int posix_class, taboffset, tabopt; register const uschar *cbits = cd->cbits; uschar pbits[32]; if (ptr[1] != ':') { *errorcodeptr = ERR31; goto FAILED; } ptr += 2; if (*ptr == '^') { local_negate = TRUE; should_flip_negation = TRUE; /* Note negative special */ ptr++; } posix_class = check_posix_name(ptr, tempptr - ptr); if (posix_class < 0) { *errorcodeptr = ERR30; goto FAILED; } /* If matching is caseless, upper and lower are converted to alpha. This relies on the fact that the class table starts with alpha, lower, upper as the first 3 entries. */ if ((options & PCRE_CASELESS) != 0 && posix_class <= 2) posix_class = 0; /* We build the bit map for the POSIX class in a chunk of local store because we may be adding and subtracting from it, and we don't want to subtract bits that may be in the main map already. At the end we or the result into the bit map that is being built. */ posix_class *= 3; /* Copy in the first table (always present) */ memcpy(pbits, cbits + posix_class_maps[posix_class], 32 * sizeof(uschar)); /* If there is a second table, add or remove it as required. */ taboffset = posix_class_maps[posix_class + 1]; tabopt = posix_class_maps[posix_class + 2]; if (taboffset >= 0) { if (tabopt >= 0) for (c = 0; c < 32; c++) pbits[c] |= cbits[c + taboffset]; else for (c = 0; c < 32; c++) pbits[c] &= ~cbits[c + taboffset]; } /* Not see if we need to remove any special characters. An option value of 1 removes vertical space and 2 removes underscore. */ if (tabopt < 0) tabopt = -tabopt; if (tabopt == 1) pbits[1] &= ~0x3c; else if (tabopt == 2) pbits[11] &= 0x7f; /* Add the POSIX table or its complement into the main table that is being built and we are done. */ if (local_negate) for (c = 0; c < 32; c++) classbits[c] |= ~pbits[c]; else for (c = 0; c < 32; c++) classbits[c] |= pbits[c]; ptr = tempptr + 1; class_charcount = 10; /* Set > 1; assumes more than 1 per class */ continue; /* End of POSIX syntax handling */ } /* Backslash may introduce a single character, or it may introduce one of the specials, which just set a flag. The sequence \b is a special case. Inside a class (and only there) it is treated as backspace. Elsewhere it marks a word boundary. Other escapes have preset maps ready to 'or' into the one we are building. We assume they have more than one character in them, so set class_charcount bigger than one. */ if (c == '\\') { c = check_escape(&ptr, errorcodeptr, cd->bracount, options, TRUE); if (*errorcodeptr != 0) goto FAILED; if (-c == ESC_b) c = '\b'; /* \b is backspace in a class */ else if (-c == ESC_X) c = 'X'; /* \X is literal X in a class */ else if (-c == ESC_R) c = 'R'; /* \R is literal R in a class */ else if (-c == ESC_Q) /* Handle start of quoted string */ { if (ptr[1] == '\\' && ptr[2] == 'E') { ptr += 2; /* avoid empty string */ } else inescq = TRUE; continue; } else if (-c == ESC_E) continue; /* Ignore orphan \E */ if (c < 0) { register const uschar *cbits = cd->cbits; class_charcount += 2; /* Greater than 1 is what matters */ /* Save time by not doing this in the pre-compile phase. */ if (lengthptr == NULL) switch (-c) { case ESC_d: for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_digit]; continue; case ESC_D: should_flip_negation = TRUE; for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_digit]; continue; case ESC_w: for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_word]; continue; case ESC_W: should_flip_negation = TRUE; for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word]; continue; case ESC_s: for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_space]; classbits[1] &= ~0x08; /* Perl 5.004 onwards omits VT from \s */ continue; case ESC_S: should_flip_negation = TRUE; for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_space]; classbits[1] |= 0x08; /* Perl 5.004 onwards omits VT from \s */ continue; default: /* Not recognized; fall through */ break; /* Need "default" setting to stop compiler warning. */ } /* In the pre-compile phase, just do the recognition. */ else if (c == -ESC_d || c == -ESC_D || c == -ESC_w || c == -ESC_W || c == -ESC_s || c == -ESC_S) continue; /* We need to deal with \H, \h, \V, and \v in both phases because they use extra memory. */ if (-c == ESC_h) { SETBIT(classbits, 0x09); /* VT */ SETBIT(classbits, 0x20); /* SPACE */ SETBIT(classbits, 0xa0); /* NSBP */ #ifdef SUPPORT_UTF8 if (utf8) { class_utf8 = TRUE; *class_utf8data++ = XCL_SINGLE; class_utf8data += _pcre_ord2utf8(0x1680, class_utf8data); *class_utf8data++ = XCL_SINGLE; class_utf8data += _pcre_ord2utf8(0x180e, class_utf8data); *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x2000, class_utf8data); class_utf8data += _pcre_ord2utf8(0x200A, class_utf8data); *class_utf8data++ = XCL_SINGLE; class_utf8data += _pcre_ord2utf8(0x202f, class_utf8data); *class_utf8data++ = XCL_SINGLE; class_utf8data += _pcre_ord2utf8(0x205f, class_utf8data); *class_utf8data++ = XCL_SINGLE; class_utf8data += _pcre_ord2utf8(0x3000, class_utf8data); } #endif continue; } if (-c == ESC_H) { for (c = 0; c < 32; c++) { int x = 0xff; switch (c) { case 0x09/8: x ^= 1 << (0x09%8); break; case 0x20/8: x ^= 1 << (0x20%8); break; case 0xa0/8: x ^= 1 << (0xa0%8); break; default: break; } classbits[c] |= x; } #ifdef SUPPORT_UTF8 if (utf8) { class_utf8 = TRUE; *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x0100, class_utf8data); class_utf8data += _pcre_ord2utf8(0x167f, class_utf8data); *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x1681, class_utf8data); class_utf8data += _pcre_ord2utf8(0x180d, class_utf8data); *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x180f, class_utf8data); class_utf8data += _pcre_ord2utf8(0x1fff, class_utf8data); *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x200B, class_utf8data); class_utf8data += _pcre_ord2utf8(0x202e, class_utf8data); *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x2030, class_utf8data); class_utf8data += _pcre_ord2utf8(0x205e, class_utf8data); *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x2060, class_utf8data); class_utf8data += _pcre_ord2utf8(0x2fff, class_utf8data); *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x3001, class_utf8data); class_utf8data += _pcre_ord2utf8(0x7fffffff, class_utf8data); } #endif continue; } if (-c == ESC_v) { SETBIT(classbits, 0x0a); /* LF */ SETBIT(classbits, 0x0b); /* VT */ SETBIT(classbits, 0x0c); /* FF */ SETBIT(classbits, 0x0d); /* CR */ SETBIT(classbits, 0x85); /* NEL */ #ifdef SUPPORT_UTF8 if (utf8) { class_utf8 = TRUE; *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x2028, class_utf8data); class_utf8data += _pcre_ord2utf8(0x2029, class_utf8data); } #endif continue; } if (-c == ESC_V) { for (c = 0; c < 32; c++) { int x = 0xff; switch (c) { case 0x0a/8: x ^= 1 << (0x0a%8); x ^= 1 << (0x0b%8); x ^= 1 << (0x0c%8); x ^= 1 << (0x0d%8); break; case 0x85/8: x ^= 1 << (0x85%8); break; default: break; } classbits[c] |= x; } #ifdef SUPPORT_UTF8 if (utf8) { class_utf8 = TRUE; *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x0100, class_utf8data); class_utf8data += _pcre_ord2utf8(0x2027, class_utf8data); *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(0x2029, class_utf8data); class_utf8data += _pcre_ord2utf8(0x7fffffff, class_utf8data); } #endif continue; } /* We need to deal with \P and \p in both phases. */ #ifdef SUPPORT_UCP if (-c == ESC_p || -c == ESC_P) { BOOL negated; int pdata; int ptype = get_ucp(&ptr, &negated, &pdata, errorcodeptr); if (ptype < 0) goto FAILED; class_utf8 = TRUE; *class_utf8data++ = ((-c == ESC_p) != negated)? XCL_PROP : XCL_NOTPROP; *class_utf8data++ = ptype; *class_utf8data++ = pdata; class_charcount -= 2; /* Not a < 256 character */ continue; } #endif /* Unrecognized escapes are faulted if PCRE is running in its strict mode. By default, for compatibility with Perl, they are treated as literals. */ if ((options & PCRE_EXTRA) != 0) { *errorcodeptr = ERR7; goto FAILED; } class_charcount -= 2; /* Undo the default count from above */ c = *ptr; /* Get the final character and fall through */ } /* Fall through if we have a single character (c >= 0). This may be greater than 256 in UTF-8 mode. */ } /* End of backslash handling */ /* A single character may be followed by '-' to form a range. However, Perl does not permit ']' to be the end of the range. A '-' character at the end is treated as a literal. Perl ignores orphaned \E sequences entirely. The code for handling \Q and \E is messy. */ CHECK_RANGE: while (ptr[1] == '\\' && ptr[2] == 'E') { inescq = FALSE; ptr += 2; } oldptr = ptr; /* Remember \r or \n */ if (c == '\r' || c == '\n') cd->external_flags |= PCRE_HASCRORLF; /* Check for range */ if (!inescq && ptr[1] == '-') { int d; ptr += 2; while (*ptr == '\\' && ptr[1] == 'E') ptr += 2; /* If we hit \Q (not followed by \E) at this point, go into escaped mode. */ while (*ptr == '\\' && ptr[1] == 'Q') { ptr += 2; if (*ptr == '\\' && ptr[1] == 'E') { ptr += 2; continue; } inescq = TRUE; break; } if (*ptr == 0 || (!inescq && *ptr == ']')) { ptr = oldptr; goto LONE_SINGLE_CHARACTER; } #ifdef SUPPORT_UTF8 if (utf8) { /* Braces are required because the */ GETCHARLEN(d, ptr, ptr); /* macro generates multiple statements */ } else #endif d = *ptr; /* Not UTF-8 mode */ /* The second part of a range can be a single-character escape, but not any of the other escapes. Perl 5.6 treats a hyphen as a literal in such circumstances. */ if (!inescq && d == '\\') { d = check_escape(&ptr, errorcodeptr, cd->bracount, options, TRUE); if (*errorcodeptr != 0) goto FAILED; /* \b is backspace; \X is literal X; \R is literal R; any other special means the '-' was literal */ if (d < 0) { if (d == -ESC_b) d = '\b'; else if (d == -ESC_X) d = 'X'; else if (d == -ESC_R) d = 'R'; else { ptr = oldptr; goto LONE_SINGLE_CHARACTER; /* A few lines below */ } } } /* Check that the two values are in the correct order. Optimize one-character ranges */ if (d < c) { *errorcodeptr = ERR8; goto FAILED; } if (d == c) goto LONE_SINGLE_CHARACTER; /* A few lines below */ /* Remember \r or \n */ if (d == '\r' || d == '\n') cd->external_flags |= PCRE_HASCRORLF; /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless matching, we have to use an XCLASS with extra data items. Caseless matching for characters > 127 is available only if UCP support is available. */ #ifdef SUPPORT_UTF8 if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127))) { class_utf8 = TRUE; /* With UCP support, we can find the other case equivalents of the relevant characters. There may be several ranges. Optimize how they fit with the basic range. */ #ifdef SUPPORT_UCP if ((options & PCRE_CASELESS) != 0) { unsigned int occ, ocd; unsigned int cc = c; unsigned int origd = d; while (get_othercase_range(&cc, origd, &occ, &ocd)) { if (occ >= (unsigned int)c && ocd <= (unsigned int)d) continue; /* Skip embedded ranges */ if (occ < (unsigned int)c && ocd >= (unsigned int)c - 1) /* Extend the basic range */ { /* if there is overlap, */ c = occ; /* noting that if occ < c */ continue; /* we can't have ocd > d */ } /* because a subrange is */ if (ocd > (unsigned int)d && occ <= (unsigned int)d + 1) /* always shorter than */ { /* the basic range. */ d = ocd; continue; } if (occ == ocd) { *class_utf8data++ = XCL_SINGLE; } else { *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(occ, class_utf8data); } class_utf8data += _pcre_ord2utf8(ocd, class_utf8data); } } #endif /* SUPPORT_UCP */ /* Now record the original range, possibly modified for UCP caseless overlapping ranges. */ *class_utf8data++ = XCL_RANGE; class_utf8data += _pcre_ord2utf8(c, class_utf8data); class_utf8data += _pcre_ord2utf8(d, class_utf8data); /* With UCP support, we are done. Without UCP support, there is no caseless matching for UTF-8 characters > 127; we can use the bit map for the smaller ones. */ #ifdef SUPPORT_UCP continue; /* With next character in the class */ #else if ((options & PCRE_CASELESS) == 0 || c > 127) continue; /* Adjust upper limit and fall through to set up the map */ d = 127; #endif /* SUPPORT_UCP */ } #endif /* SUPPORT_UTF8 */ /* We use the bit map for all cases when not in UTF-8 mode; else ranges that lie entirely within 0-127 when there is UCP support; else for partial ranges without UCP support. */ class_charcount += d - c + 1; class_lastchar = d; /* We can save a bit of time by skipping this in the pre-compile. */ if (lengthptr == NULL) for (; c <= d; c++) { classbits[c/8] |= (1 << (c&7)); if ((options & PCRE_CASELESS) != 0) { int uc = cd->fcc[c]; /* flip case */ classbits[uc/8] |= (1 << (uc&7)); } } continue; /* Go get the next char in the class */ } /* Handle a lone single character - we can get here for a normal non-escape char, or after \ that introduces a single character or for an apparent range that isn't. */ LONE_SINGLE_CHARACTER: /* Handle a character that cannot go in the bit map */ #ifdef SUPPORT_UTF8 if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127))) { class_utf8 = TRUE; *class_utf8data++ = XCL_SINGLE; class_utf8data += _pcre_ord2utf8(c, class_utf8data); #ifdef SUPPORT_UCP if ((options & PCRE_CASELESS) != 0) { unsigned int othercase; if ((othercase = _pcre_ucp_othercase(c)) != NOTACHAR) { *class_utf8data++ = XCL_SINGLE; class_utf8data += _pcre_ord2utf8(othercase, class_utf8data); } } #endif /* SUPPORT_UCP */ } else #endif /* SUPPORT_UTF8 */ /* Handle a single-byte character */ { classbits[c/8] |= (1 << (c&7)); if ((options & PCRE_CASELESS) != 0) { c = cd->fcc[c]; /* flip case */ classbits[c/8] |= (1 << (c&7)); } class_charcount++; class_lastchar = c; } } /* Loop until ']' reached. This "while" is the end of the "do" above. */ while ((c = *(++ptr)) != 0 && (c != ']' || inescq)); if (c == 0) /* Missing terminating ']' */ { *errorcodeptr = ERR6; goto FAILED; } /* This code has been disabled because it would mean that \s counts as an explicit \r or \n reference, and that's not really what is wanted. Now we set the flag only if there is a literal "\r" or "\n" in the class. */ #if 0 /* Remember whether \r or \n are in this class */ if (negate_class) { if ((classbits[1] & 0x24) != 0x24) cd->external_flags |= PCRE_HASCRORLF; } else { if ((classbits[1] & 0x24) != 0) cd->external_flags |= PCRE_HASCRORLF; } #endif /* If class_charcount is 1, we saw precisely one character whose value is less than 256. As long as there were no characters >= 128 and there was no use of \p or \P, in other words, no use of any XCLASS features, we can optimize. In UTF-8 mode, we can optimize the negative case only if there were no characters >= 128 because OP_NOT and the related opcodes like OP_NOTSTAR operate on single-bytes only. This is an historical hangover. Maybe one day we can tidy these opcodes to handle multi-byte characters. The optimization throws away the bit map. We turn the item into a 1-character OP_CHAR[NC] if it's positive, or OP_NOT if it's negative. Note that OP_NOT does not support multibyte characters. In the positive case, it can cause firstbyte to be set. Otherwise, there can be no first char if this item is first, whatever repeat count may follow. In the case of reqbyte, save the previous value for reinstating. */ #ifdef SUPPORT_UTF8 if (class_charcount == 1 && !class_utf8 && (!utf8 || !negate_class || class_lastchar < 128)) #else if (class_charcount == 1) #endif { zeroreqbyte = reqbyte; /* The OP_NOT opcode works on one-byte characters only. */ if (negate_class) { if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; zerofirstbyte = firstbyte; *code++ = OP_NOT; *code++ = class_lastchar; break; } /* For a single, positive character, get the value into mcbuffer, and then we can handle this with the normal one-character code. */ #ifdef SUPPORT_UTF8 if (utf8 && class_lastchar > 127) mclength = _pcre_ord2utf8(class_lastchar, mcbuffer); else #endif { mcbuffer[0] = class_lastchar; mclength = 1; } goto ONE_CHAR; } /* End of 1-char optimization */ /* The general case - not the one-char optimization. If this is the first thing in the branch, there can be no first char setting, whatever the repeat count. Any reqbyte setting must remain unchanged after any kind of repeat. */ if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; zerofirstbyte = firstbyte; zeroreqbyte = reqbyte; /* If there are characters with values > 255, we have to compile an extended class, with its own opcode, unless there was a negated special such as \S in the class, because in that case all characters > 255 are in the class, so any that were explicitly given as well can be ignored. If (when there are explicit characters > 255 that must be listed) there are no characters < 256, we can omit the bitmap in the actual compiled code. */ #ifdef SUPPORT_UTF8 if (class_utf8 && !should_flip_negation) { *class_utf8data++ = XCL_END; /* Marks the end of extra data */ *code++ = OP_XCLASS; code += LINK_SIZE; *code = negate_class? XCL_NOT : 0; /* If the map is required, move up the extra data to make room for it; otherwise just move the code pointer to the end of the extra data. */ if (class_charcount > 0) { *code++ |= XCL_MAP; memmove(code + 32, code, class_utf8data - code); memcpy(code, classbits, 32); code = class_utf8data + 32; } else code = class_utf8data; /* Now fill in the complete length of the item */ PUT(previous, 1, code - previous); break; /* End of class handling */ } #endif /* If there are no characters > 255, set the opcode to OP_CLASS or OP_NCLASS, depending on whether the whole class was negated and whether there were negative specials such as \S in the class. Then copy the 32-byte map into the code vector, negating it if necessary. */ *code++ = (negate_class == should_flip_negation) ? OP_CLASS : OP_NCLASS; if (negate_class) { if (lengthptr == NULL) /* Save time in the pre-compile phase */ for (c = 0; c < 32; c++) code[c] = ~classbits[c]; } else { memcpy(code, classbits, 32); } code += 32; break; /* ===================================================================*/ /* Various kinds of repeat; '{' is not necessarily a quantifier, but this has been tested above. */ case '{': if (!is_quantifier) goto NORMAL_CHAR; ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorcodeptr); if (*errorcodeptr != 0) goto FAILED; goto REPEAT; case '*': repeat_min = 0; repeat_max = -1; goto REPEAT; case '+': repeat_min = 1; repeat_max = -1; goto REPEAT; case '?': repeat_min = 0; repeat_max = 1; REPEAT: if (previous == NULL) { *errorcodeptr = ERR9; goto FAILED; } if (repeat_min == 0) { firstbyte = zerofirstbyte; /* Adjust for zero repeat */ reqbyte = zeroreqbyte; /* Ditto */ } /* Remember whether this is a variable length repeat */ reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY; op_type = 0; /* Default single-char op codes */ possessive_quantifier = FALSE; /* Default not possessive quantifier */ /* Save start of previous item, in case we have to move it up to make space for an inserted OP_ONCE for the additional '+' extension. */ tempcode = previous; /* If the next character is '+', we have a possessive quantifier. This implies greediness, whatever the setting of the PCRE_UNGREEDY option. If the next character is '?' this is a minimizing repeat, by default, but if PCRE_UNGREEDY is set, it works the other way round. We change the repeat type to the non-default. */ if (ptr[1] == '+') { repeat_type = 0; /* Force greedy */ possessive_quantifier = TRUE; ptr++; } else if (ptr[1] == '?') { repeat_type = greedy_non_default; ptr++; } else repeat_type = greedy_default; /* If previous was a character match, abolish the item and generate a repeat item instead. If a char item has a minumum of more than one, ensure that it is set in reqbyte - it might not be if a sequence such as x{3} is the first thing in a branch because the x will have gone into firstbyte instead. */ if (*previous == OP_CHAR || *previous == OP_CHARNC) { /* Deal with UTF-8 characters that take up more than one byte. It's easier to write this out separately than try to macrify it. Use c to hold the length of the character in bytes, plus 0x80 to flag that it's a length rather than a small character. */ #ifdef SUPPORT_UTF8 if (utf8 && (code[-1] & 0x80) != 0) { uschar *lastchar = code - 1; while((*lastchar & 0xc0) == 0x80) lastchar--; c = code - lastchar; /* Length of UTF-8 character */ memcpy(utf8_char, lastchar, c); /* Save the char */ c |= 0x80; /* Flag c as a length */ } else #endif /* Handle the case of a single byte - either with no UTF8 support, or with UTF-8 disabled, or for a UTF-8 character < 128. */ { c = code[-1]; if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt; } /* If the repetition is unlimited, it pays to see if the next thing on the line is something that cannot possibly match this character. If so, automatically possessifying this item gains some performance in the case where the match fails. */ if (!possessive_quantifier && repeat_max < 0 && check_auto_possessive(*previous, c, utf8, utf8_char, ptr + 1, options, cd)) { repeat_type = 0; /* Force greedy */ possessive_quantifier = TRUE; } goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */ } /* If previous was a single negated character ([^a] or similar), we use one of the special opcodes, replacing it. The code is shared with single- character repeats by setting opt_type to add a suitable offset into repeat_type. We can also test for auto-possessification. OP_NOT is currently used only for single-byte chars. */ else if (*previous == OP_NOT) { op_type = OP_NOTSTAR - OP_STAR; /* Use "not" opcodes */ c = previous[1]; if (!possessive_quantifier && repeat_max < 0 && check_auto_possessive(OP_NOT, c, utf8, NULL, ptr + 1, options, cd)) { repeat_type = 0; /* Force greedy */ possessive_quantifier = TRUE; } goto OUTPUT_SINGLE_REPEAT; } /* If previous was a character type match (\d or similar), abolish it and create a suitable repeat item. The code is shared with single-character repeats by setting op_type to add a suitable offset into repeat_type. Note the the Unicode property types will be present only when SUPPORT_UCP is defined, but we don't wrap the little bits of code here because it just makes it horribly messy. */ else if (*previous < OP_EODN) { uschar *oldcode; int prop_type, prop_value; op_type = OP_TYPESTAR - OP_STAR; /* Use type opcodes */ c = *previous; if (!possessive_quantifier && repeat_max < 0 && check_auto_possessive(c, 0, utf8, NULL, ptr + 1, options, cd)) { repeat_type = 0; /* Force greedy */ possessive_quantifier = TRUE; } OUTPUT_SINGLE_REPEAT: if (*previous == OP_PROP || *previous == OP_NOTPROP) { prop_type = previous[1]; prop_value = previous[2]; } else prop_type = prop_value = -1; oldcode = code; code = previous; /* Usually overwrite previous item */ /* If the maximum is zero then the minimum must also be zero; Perl allows this case, so we do too - by simply omitting the item altogether. */ if (repeat_max == 0) goto END_REPEAT; /* All real repeats make it impossible to handle partial matching (maybe one day we will be able to remove this restriction). */ if (repeat_max != 1) cd->external_flags |= PCRE_NOPARTIAL; /* Combine the op_type with the repeat_type */ repeat_type += op_type; /* A minimum of zero is handled either as the special case * or ?, or as an UPTO, with the maximum given. */ if (repeat_min == 0) { if (repeat_max == -1) *code++ = OP_STAR + repeat_type; else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type; else { *code++ = OP_UPTO + repeat_type; PUT2INC(code, 0, repeat_max); } } /* A repeat minimum of 1 is optimized into some special cases. If the maximum is unlimited, we use OP_PLUS. Otherwise, the original item is left in place and, if the maximum is greater than 1, we use OP_UPTO with one less than the maximum. */ else if (repeat_min == 1) { if (repeat_max == -1) *code++ = OP_PLUS + repeat_type; else { code = oldcode; /* leave previous item in place */ if (repeat_max == 1) goto END_REPEAT; *code++ = OP_UPTO + repeat_type; PUT2INC(code, 0, repeat_max - 1); } } /* The case {n,n} is just an EXACT, while the general case {n,m} is handled as an EXACT followed by an UPTO. */ else { *code++ = OP_EXACT + op_type; /* NB EXACT doesn't have repeat_type */ PUT2INC(code, 0, repeat_min); /* If the maximum is unlimited, insert an OP_STAR. Before doing so, we have to insert the character for the previous code. For a repeated Unicode property match, there are two extra bytes that define the required property. In UTF-8 mode, long characters have their length in c, with the 0x80 bit as a flag. */ if (repeat_max < 0) { #ifdef SUPPORT_UTF8 if (utf8 && c >= 128) { memcpy(code, utf8_char, c & 7); code += c & 7; } else #endif { *code++ = c; if (prop_type >= 0) { *code++ = prop_type; *code++ = prop_value; } } *code++ = OP_STAR + repeat_type; } /* Else insert an UPTO if the max is greater than the min, again preceded by the character, for the previously inserted code. If the UPTO is just for 1 instance, we can use QUERY instead. */ else if (repeat_max != repeat_min) { #ifdef SUPPORT_UTF8 if (utf8 && c >= 128) { memcpy(code, utf8_char, c & 7); code += c & 7; } else #endif *code++ = c; if (prop_type >= 0) { *code++ = prop_type; *code++ = prop_value; } repeat_max -= repeat_min; if (repeat_max == 1) { *code++ = OP_QUERY + repeat_type; } else { *code++ = OP_UPTO + repeat_type; PUT2INC(code, 0, repeat_max); } } } /* The character or character type itself comes last in all cases. */ #ifdef SUPPORT_UTF8 if (utf8 && c >= 128) { memcpy(code, utf8_char, c & 7); code += c & 7; } else #endif *code++ = c; /* For a repeated Unicode property match, there are two extra bytes that define the required property. */ #ifdef SUPPORT_UCP if (prop_type >= 0) { *code++ = prop_type; *code++ = prop_value; } #endif } /* If previous was a character class or a back reference, we put the repeat stuff after it, but just skip the item if the repeat was {0,0}. */ else if (*previous == OP_CLASS || *previous == OP_NCLASS || #ifdef SUPPORT_UTF8 *previous == OP_XCLASS || #endif *previous == OP_REF) { if (repeat_max == 0) { code = previous; goto END_REPEAT; } /* All real repeats make it impossible to handle partial matching (maybe one day we will be able to remove this restriction). */ if (repeat_max != 1) cd->external_flags |= PCRE_NOPARTIAL; if (repeat_min == 0 && repeat_max == -1) *code++ = OP_CRSTAR + repeat_type; else if (repeat_min == 1 && repeat_max == -1) *code++ = OP_CRPLUS + repeat_type; else if (repeat_min == 0 && repeat_max == 1) *code++ = OP_CRQUERY + repeat_type; else { *code++ = OP_CRRANGE + repeat_type; PUT2INC(code, 0, repeat_min); if (repeat_max == -1) repeat_max = 0; /* 2-byte encoding for max */ PUT2INC(code, 0, repeat_max); } } /* If previous was a bracket group, we may have to replicate it in certain cases. */ else if (*previous == OP_BRA || *previous == OP_CBRA || *previous == OP_ONCE || *previous == OP_COND) { register int i; int ketoffset = 0; int len = code - previous; uschar *bralink = NULL; /* Repeating a DEFINE group is pointless */ if (*previous == OP_COND && previous[LINK_SIZE+1] == OP_DEF) { *errorcodeptr = ERR55; goto FAILED; } /* If the maximum repeat count is unlimited, find the end of the bracket by scanning through from the start, and compute the offset back to it from the current code pointer. There may be an OP_OPT setting following the final KET, so we can't find the end just by going back from the code pointer. */ if (repeat_max == -1) { register uschar *ket = previous; do ket += GET(ket, 1); while (*ket != OP_KET); ketoffset = code - ket; } /* The case of a zero minimum is special because of the need to stick OP_BRAZERO in front of it, and because the group appears once in the data, whereas in other cases it appears the minimum number of times. For this reason, it is simplest to treat this case separately, as otherwise the code gets far too messy. There are several special subcases when the minimum is zero. */ if (repeat_min == 0) { /* If the maximum is also zero, we just omit the group from the output altogether. */ if (repeat_max == 0) { code = previous; goto END_REPEAT; } /* If the maximum is 1 or unlimited, we just have to stick in the BRAZERO and do no more at this point. However, we do need to adjust any OP_RECURSE calls inside the group that refer to the group itself or any internal or forward referenced group, because the offset is from the start of the whole regex. Temporarily terminate the pattern while doing this. */ if (repeat_max <= 1) { *code = OP_END; adjust_recurse(previous, 1, utf8, cd, save_hwm); memmove(previous+1, previous, len); code++; *previous++ = OP_BRAZERO + repeat_type; } /* If the maximum is greater than 1 and limited, we have to replicate in a nested fashion, sticking OP_BRAZERO before each set of brackets. The first one has to be handled carefully because it's the original copy, which has to be moved up. The remainder can be handled by code that is common with the non-zero minimum case below. We have to adjust the value or repeat_max, since one less copy is required. Once again, we may have to adjust any OP_RECURSE calls inside the group. */ else { int offset; *code = OP_END; adjust_recurse(previous, 2 + LINK_SIZE, utf8, cd, save_hwm); memmove(previous + 2 + LINK_SIZE, previous, len); code += 2 + LINK_SIZE; *previous++ = OP_BRAZERO + repeat_type; *previous++ = OP_BRA; /* We chain together the bracket offset fields that have to be filled in later when the ends of the brackets are reached. */ offset = (bralink == NULL)? 0 : previous - bralink; bralink = previous; PUTINC(previous, 0, offset); } repeat_max--; } /* If the minimum is greater than zero, replicate the group as many times as necessary, and adjust the maximum to the number of subsequent copies that we need. If we set a first char from the group, and didn't set a required char, copy the latter from the former. If there are any forward reference subroutine calls in the group, there will be entries on the workspace list; replicate these with an appropriate increment. */ else { if (repeat_min > 1) { /* In the pre-compile phase, we don't actually do the replication. We just adjust the length as if we had. Do some paranoid checks for potential integer overflow. */ if (lengthptr != NULL) { int delta = (repeat_min - 1)*length_prevgroup; if ((double)(repeat_min - 1)*(double)length_prevgroup > (double)INT_MAX || OFLOW_MAX - *lengthptr < delta) { *errorcodeptr = ERR20; goto FAILED; } *lengthptr += delta; } /* This is compiling for real */ else { if (groupsetfirstbyte && reqbyte < 0) reqbyte = firstbyte; for (i = 1; i < repeat_min; i++) { uschar *hc; uschar *this_hwm = cd->hwm; memcpy(code, previous, len); for (hc = save_hwm; hc < this_hwm; hc += LINK_SIZE) { PUT(cd->hwm, 0, GET(hc, 0) + len); cd->hwm += LINK_SIZE; } save_hwm = this_hwm; code += len; } } } if (repeat_max > 0) repeat_max -= repeat_min; } /* This code is common to both the zero and non-zero minimum cases. If the maximum is limited, it replicates the group in a nested fashion, remembering the bracket starts on a stack. In the case of a zero minimum, the first one was set up above. In all cases the repeat_max now specifies the number of additional copies needed. Again, we must remember to replicate entries on the forward reference list. */ if (repeat_max >= 0) { /* In the pre-compile phase, we don't actually do the replication. We just adjust the length as if we had. For each repetition we must add 1 to the length for BRAZERO and for all but the last repetition we must add 2 + 2*LINKSIZE to allow for the nesting that occurs. Do some paranoid checks to avoid integer overflow. */ if (lengthptr != NULL && repeat_max > 0) { int delta = repeat_max * (length_prevgroup + 1 + 2 + 2*LINK_SIZE) - 2 - 2*LINK_SIZE; /* Last one doesn't nest */ if ((double)repeat_max * (double)(length_prevgroup + 1 + 2 + 2*LINK_SIZE) > (double)INT_MAX || OFLOW_MAX - *lengthptr < delta) { *errorcodeptr = ERR20; goto FAILED; } *lengthptr += delta; } /* This is compiling for real */ else for (i = repeat_max - 1; i >= 0; i--) { uschar *hc; uschar *this_hwm = cd->hwm; *code++ = OP_BRAZERO + repeat_type; /* All but the final copy start a new nesting, maintaining the chain of brackets outstanding. */ if (i != 0) { int offset; *code++ = OP_BRA; offset = (bralink == NULL)? 0 : code - bralink; bralink = code; PUTINC(code, 0, offset); } memcpy(code, previous, len); for (hc = save_hwm; hc < this_hwm; hc += LINK_SIZE) { PUT(cd->hwm, 0, GET(hc, 0) + len + ((i != 0)? 2+LINK_SIZE : 1)); cd->hwm += LINK_SIZE; } save_hwm = this_hwm; code += len; } /* Now chain through the pending brackets, and fill in their length fields (which are holding the chain links pro tem). */ while (bralink != NULL) { int oldlinkoffset; int offset = code - bralink + 1; uschar *bra = code - offset; oldlinkoffset = GET(bra, 1); bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset; *code++ = OP_KET; PUTINC(code, 0, offset); PUT(bra, 1, offset); } } /* If the maximum is unlimited, set a repeater in the final copy. We can't just offset backwards from the current code point, because we don't know if there's been an options resetting after the ket. The correct offset was computed above. Then, when we are doing the actual compile phase, check to see whether this group is a non-atomic one that could match an empty string. If so, convert the initial operator to the S form (e.g. OP_BRA -> OP_SBRA) so that runtime checking can be done. [This check is also applied to atomic groups at runtime, but in a different way.] */ else { uschar *ketcode = code - ketoffset; uschar *bracode = ketcode - GET(ketcode, 1); *ketcode = OP_KETRMAX + repeat_type; if (lengthptr == NULL && *bracode != OP_ONCE) { uschar *scode = bracode; do { if (could_be_empty_branch(scode, ketcode, utf8)) { *bracode += OP_SBRA - OP_BRA; break; } scode += GET(scode, 1); } while (*scode == OP_ALT); } } } /* Else there's some kind of shambles */ else { *errorcodeptr = ERR11; goto FAILED; } /* If the character following a repeat is '+', or if certain optimization tests above succeeded, possessive_quantifier is TRUE. For some of the simpler opcodes, there is an special alternative opcode for this. For anything else, we wrap the entire repeated item inside OP_ONCE brackets. The '+' notation is just syntactic sugar, taken from Sun's Java package, but the special opcodes can optimize it a bit. The repeated item starts at tempcode, not at previous, which might be the first part of a string whose (former) last char we repeated. Possessifying an 'exact' quantifier has no effect, so we can ignore it. But an 'upto' may follow. We skip over an 'exact' item, and then test the length of what remains before proceeding. */ if (possessive_quantifier) { int len; if (*tempcode == OP_EXACT || *tempcode == OP_TYPEEXACT || *tempcode == OP_NOTEXACT) tempcode += _pcre_OP_lengths[*tempcode] + ((*tempcode == OP_TYPEEXACT && (tempcode[3] == OP_PROP || tempcode[3] == OP_NOTPROP))? 2:0); len = code - tempcode; if (len > 0) switch (*tempcode) { case OP_STAR: *tempcode = OP_POSSTAR; break; case OP_PLUS: *tempcode = OP_POSPLUS; break; case OP_QUERY: *tempcode = OP_POSQUERY; break; case OP_UPTO: *tempcode = OP_POSUPTO; break; case OP_TYPESTAR: *tempcode = OP_TYPEPOSSTAR; break; case OP_TYPEPLUS: *tempcode = OP_TYPEPOSPLUS; break; case OP_TYPEQUERY: *tempcode = OP_TYPEPOSQUERY; break; case OP_TYPEUPTO: *tempcode = OP_TYPEPOSUPTO; break; case OP_NOTSTAR: *tempcode = OP_NOTPOSSTAR; break; case OP_NOTPLUS: *tempcode = OP_NOTPOSPLUS; break; case OP_NOTQUERY: *tempcode = OP_NOTPOSQUERY; break; case OP_NOTUPTO: *tempcode = OP_NOTPOSUPTO; break; default: memmove(tempcode + 1+LINK_SIZE, tempcode, len); code += 1 + LINK_SIZE; len += 1 + LINK_SIZE; tempcode[0] = OP_ONCE; *code++ = OP_KET; PUTINC(code, 0, len); PUT(tempcode, 1, len); break; } } /* In all case we no longer have a previous item. We also set the "follows varying string" flag for subsequently encountered reqbytes if it isn't already set and we have just passed a varying length item. */ END_REPEAT: previous = NULL; cd->req_varyopt |= reqvary; break; /* ===================================================================*/ /* Start of nested parenthesized sub-expression, or comment or lookahead or lookbehind or option setting or condition or all the other extended parenthesis forms. */ case '(': newoptions = options; skipbytes = 0; bravalue = OP_CBRA; save_hwm = cd->hwm; reset_bracount = FALSE; /* First deal with various "verbs" that can be introduced by '*'. */ if (*(++ptr) == '*' && (cd->ctypes[ptr[1]] & ctype_letter) != 0) { int i, namelen; const char *vn = verbnames; const uschar *name = ++ptr; previous = NULL; while ((cd->ctypes[*++ptr] & ctype_letter) != 0); if (*ptr == ':') { *errorcodeptr = ERR59; /* Not supported */ goto FAILED; } if (*ptr != ')') { *errorcodeptr = ERR60; goto FAILED; } namelen = ptr - name; for (i = 0; i < verbcount; i++) { if (namelen == verbs[i].len && strncmp((char *)name, vn, namelen) == 0) { *code = verbs[i].op; if (*code++ == OP_ACCEPT) cd->had_accept = TRUE; break; } vn += verbs[i].len + 1; } if (i < verbcount) continue; *errorcodeptr = ERR60; goto FAILED; } /* Deal with the extended parentheses; all are introduced by '?', and the appearance of any of them means that this is not a capturing group. */ else if (*ptr == '?') { int i, set, unset, namelen; int *optset; const uschar *name; uschar *slot; switch (*(++ptr)) { case '#': /* Comment; skip to ket */ ptr++; while (*ptr != 0 && *ptr != ')') ptr++; if (*ptr == 0) { *errorcodeptr = ERR18; goto FAILED; } continue; /* ------------------------------------------------------------ */ case '|': /* Reset capture count for each branch */ reset_bracount = TRUE; /* Fall through */ /* ------------------------------------------------------------ */ case ':': /* Non-capturing bracket */ bravalue = OP_BRA; ptr++; break; /* ------------------------------------------------------------ */ case '(': bravalue = OP_COND; /* Conditional group */ /* A condition can be an assertion, a number (referring to a numbered group), a name (referring to a named group), or 'R', referring to recursion. R and R&name are also permitted for recursion tests. There are several syntaxes for testing a named group: (?(name)) is used by Python; Perl 5.10 onwards uses (?() or (?('name')). There are two unfortunate ambiguities, caused by history. (a) 'R' can be the recursive thing or the name 'R' (and similarly for 'R' followed by digits), and (b) a number could be a name that consists of digits. In both cases, we look for a name first; if not found, we try the other cases. */ /* For conditions that are assertions, check the syntax, and then exit the switch. This will take control down to where bracketed groups, including assertions, are processed. */ if (ptr[1] == '?' && (ptr[2] == '=' || ptr[2] == '!' || ptr[2] == '<')) break; /* Most other conditions use OP_CREF (a couple change to OP_RREF below), and all need to skip 3 bytes at the start of the group. */ code[1+LINK_SIZE] = OP_CREF; skipbytes = 3; refsign = -1; /* Check for a test for recursion in a named group. */ if (ptr[1] == 'R' && ptr[2] == '&') { terminator = -1; ptr += 2; code[1+LINK_SIZE] = OP_RREF; /* Change the type of test */ } /* Check for a test for a named group's having been set, using the Perl syntax (?() or (?('name') */ else if (ptr[1] == '<') { terminator = '>'; ptr++; } else if (ptr[1] == '\'') { terminator = '\''; ptr++; } else { terminator = 0; if (ptr[1] == '-' || ptr[1] == '+') refsign = *(++ptr); } /* We now expect to read a name; any thing else is an error */ if ((cd->ctypes[ptr[1]] & ctype_word) == 0) { ptr += 1; /* To get the right offset */ *errorcodeptr = ERR28; goto FAILED; } /* Read the name, but also get it as a number if it's all digits */ recno = 0; name = ++ptr; while ((cd->ctypes[*ptr] & ctype_word) != 0) { if (recno >= 0) recno = (g_ascii_isdigit(*ptr) != 0)? recno * 10 + *ptr - '0' : -1; ptr++; } namelen = ptr - name; if ((terminator > 0 && *ptr++ != terminator) || *ptr++ != ')') { ptr--; /* Error offset */ *errorcodeptr = ERR26; goto FAILED; } /* Do no further checking in the pre-compile phase. */ if (lengthptr != NULL) break; /* In the real compile we do the work of looking for the actual reference. If the string started with "+" or "-" we require the rest to be digits, in which case recno will be set. */ if (refsign > 0) { if (recno <= 0) { *errorcodeptr = ERR58; goto FAILED; } recno = (refsign == '-')? cd->bracount - recno + 1 : recno +cd->bracount; if (recno <= 0 || recno > cd->final_bracount) { *errorcodeptr = ERR15; goto FAILED; } PUT2(code, 2+LINK_SIZE, recno); break; } /* Otherwise (did not start with "+" or "-"), start by looking for the name. */ slot = cd->name_table; for (i = 0; i < cd->names_found; i++) { if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break; slot += cd->name_entry_size; } /* Found a previous named subpattern */ if (i < cd->names_found) { recno = GET2(slot, 0); PUT2(code, 2+LINK_SIZE, recno); } /* Search the pattern for a forward reference */ else if ((i = find_parens(ptr, cd->bracount, name, namelen, (options & PCRE_EXTENDED) != 0)) > 0) { PUT2(code, 2+LINK_SIZE, i); } /* If terminator == 0 it means that the name followed directly after the opening parenthesis [e.g. (?(abc)...] and in this case there are some further alternatives to try. For the cases where terminator != 0 [things like (?(... or (?('name')... or (?(R&name)... ] we have now checked all the possibilities, so give an error. */ else if (terminator != 0) { *errorcodeptr = ERR15; goto FAILED; } /* Check for (?(R) for recursion. Allow digits after R to specify a specific group number. */ else if (*name == 'R') { recno = 0; for (i = 1; i < namelen; i++) { if (g_ascii_isdigit(name[i]) == 0) { *errorcodeptr = ERR15; goto FAILED; } recno = recno * 10 + name[i] - '0'; } if (recno == 0) recno = RREF_ANY; code[1+LINK_SIZE] = OP_RREF; /* Change test type */ PUT2(code, 2+LINK_SIZE, recno); } /* Similarly, check for the (?(DEFINE) "condition", which is always false. */ else if (namelen == 6 && strncmp((char *)name, "DEFINE", 6) == 0) { code[1+LINK_SIZE] = OP_DEF; skipbytes = 1; } /* Check for the "name" actually being a subpattern number. We are in the second pass here, so final_bracount is set. */ else if (recno > 0 && recno <= cd->final_bracount) { PUT2(code, 2+LINK_SIZE, recno); } /* Either an unidentified subpattern, or a reference to (?(0) */ else { *errorcodeptr = (recno == 0)? ERR35: ERR15; goto FAILED; } break; /* ------------------------------------------------------------ */ case '=': /* Positive lookahead */ bravalue = OP_ASSERT; ptr++; break; /* ------------------------------------------------------------ */ case '!': /* Negative lookahead */ ptr++; if (*ptr == ')') /* Optimize (?!) */ { *code++ = OP_FAIL; previous = NULL; continue; } bravalue = OP_ASSERT_NOT; break; /* ------------------------------------------------------------ */ case '<': /* Lookbehind or named define */ switch (ptr[1]) { case '=': /* Positive lookbehind */ bravalue = OP_ASSERTBACK; ptr += 2; break; case '!': /* Negative lookbehind */ bravalue = OP_ASSERTBACK_NOT; ptr += 2; break; default: /* Could be name define, else bad */ if ((cd->ctypes[ptr[1]] & ctype_word) != 0) goto DEFINE_NAME; ptr++; /* Correct offset for error */ *errorcodeptr = ERR24; goto FAILED; } break; /* ------------------------------------------------------------ */ case '>': /* One-time brackets */ bravalue = OP_ONCE; ptr++; break; /* ------------------------------------------------------------ */ case 'C': /* Callout - may be followed by digits; */ previous_callout = code; /* Save for later completion */ after_manual_callout = 1; /* Skip one item before completing */ *code++ = OP_CALLOUT; { int n = 0; while (g_ascii_isdigit(*(++ptr)) != 0) n = n * 10 + *ptr - '0'; if (*ptr != ')') { *errorcodeptr = ERR39; goto FAILED; } if (n > 255) { *errorcodeptr = ERR38; goto FAILED; } *code++ = n; PUT(code, 0, ptr - cd->start_pattern + 1); /* Pattern offset */ PUT(code, LINK_SIZE, 0); /* Default length */ code += 2 * LINK_SIZE; } previous = NULL; continue; /* ------------------------------------------------------------ */ case 'P': /* Python-style named subpattern handling */ if (*(++ptr) == '=' || *ptr == '>') /* Reference or recursion */ { is_recurse = *ptr == '>'; terminator = ')'; goto NAMED_REF_OR_RECURSE; } else if (*ptr != '<') /* Test for Python-style definition */ { *errorcodeptr = ERR41; goto FAILED; } /* Fall through to handle (?P< as (?< is handled */ /* ------------------------------------------------------------ */ DEFINE_NAME: /* Come here from (?< handling */ case '\'': { terminator = (*ptr == '<')? '>' : '\''; name = ++ptr; while ((cd->ctypes[*ptr] & ctype_word) != 0) ptr++; namelen = ptr - name; /* In the pre-compile phase, just do a syntax check. */ if (lengthptr != NULL) { if (*ptr != terminator) { *errorcodeptr = ERR42; goto FAILED; } if (cd->names_found >= MAX_NAME_COUNT) { *errorcodeptr = ERR49; goto FAILED; } if (namelen + 3 > cd->name_entry_size) { cd->name_entry_size = namelen + 3; if (namelen > MAX_NAME_SIZE) { *errorcodeptr = ERR48; goto FAILED; } } } /* In the real compile, create the entry in the table */ else { slot = cd->name_table; for (i = 0; i < cd->names_found; i++) { int crc = memcmp(name, slot+2, namelen); if (crc == 0) { if (slot[2+namelen] == 0) { if ((options & PCRE_DUPNAMES) == 0) { *errorcodeptr = ERR43; goto FAILED; } } else crc = -1; /* Current name is substring */ } if (crc < 0) { memmove(slot + cd->name_entry_size, slot, (cd->names_found - i) * cd->name_entry_size); break; } slot += cd->name_entry_size; } PUT2(slot, 0, cd->bracount + 1); memcpy(slot + 2, name, namelen); slot[2+namelen] = 0; } } /* In both cases, count the number of names we've encountered. */ ptr++; /* Move past > or ' */ cd->names_found++; goto NUMBERED_GROUP; /* ------------------------------------------------------------ */ case '&': /* Perl recursion/subroutine syntax */ terminator = ')'; is_recurse = TRUE; /* Fall through */ /* We come here from the Python syntax above that handles both references (?P=name) and recursion (?P>name), as well as falling through from the Perl recursion syntax (?&name). We also come here from the Perl \k or \k'name' back reference syntax and the \k{name} .NET syntax. */ NAMED_REF_OR_RECURSE: name = ++ptr; while ((cd->ctypes[*ptr] & ctype_word) != 0) ptr++; namelen = ptr - name; /* In the pre-compile phase, do a syntax check and set a dummy reference number. */ if (lengthptr != NULL) { if (namelen == 0) { *errorcodeptr = ERR62; goto FAILED; } if (*ptr != terminator) { *errorcodeptr = ERR42; goto FAILED; } if (namelen > MAX_NAME_SIZE) { *errorcodeptr = ERR48; goto FAILED; } recno = 0; } /* In the real compile, seek the name in the table. We check the name first, and then check that we have reached the end of the name in the table. That way, if the name that is longer than any in the table, the comparison will fail without reading beyond the table entry. */ else { slot = cd->name_table; for (i = 0; i < cd->names_found; i++) { if (strncmp((char *)name, (char *)slot+2, namelen) == 0 && slot[2+namelen] == 0) break; slot += cd->name_entry_size; } if (i < cd->names_found) /* Back reference */ { recno = GET2(slot, 0); } else if ((recno = /* Forward back reference */ find_parens(ptr, cd->bracount, name, namelen, (options & PCRE_EXTENDED) != 0)) <= 0) { *errorcodeptr = ERR15; goto FAILED; } } /* In both phases, we can now go to the code than handles numerical recursion or backreferences. */ if (is_recurse) goto HANDLE_RECURSION; else goto HANDLE_REFERENCE; /* ------------------------------------------------------------ */ case 'R': /* Recursion */ ptr++; /* Same as (?0) */ /* Fall through */ /* ------------------------------------------------------------ */ case '-': case '+': case '0': case '1': case '2': case '3': case '4': /* Recursion or */ case '5': case '6': case '7': case '8': case '9': /* subroutine */ { const uschar *called; if ((refsign = *ptr) == '+') { ptr++; if (g_ascii_isdigit(*ptr) == 0) { *errorcodeptr = ERR63; goto FAILED; } } else if (refsign == '-') { if (g_ascii_isdigit(ptr[1]) == 0) goto OTHER_CHAR_AFTER_QUERY; ptr++; } recno = 0; while(g_ascii_isdigit(*ptr) != 0) recno = recno * 10 + *ptr++ - '0'; if (*ptr != ')') { *errorcodeptr = ERR29; goto FAILED; } if (refsign == '-') { if (recno == 0) { *errorcodeptr = ERR58; goto FAILED; } recno = cd->bracount - recno + 1; if (recno <= 0) { *errorcodeptr = ERR15; goto FAILED; } } else if (refsign == '+') { if (recno == 0) { *errorcodeptr = ERR58; goto FAILED; } recno += cd->bracount; } /* Come here from code above that handles a named recursion */ HANDLE_RECURSION: previous = code; called = cd->start_code; /* When we are actually compiling, find the bracket that is being referenced. Temporarily end the regex in case it doesn't exist before this point. If we end up with a forward reference, first check that the bracket does occur later so we can give the error (and position) now. Then remember this forward reference in the workspace so it can be filled in at the end. */ if (lengthptr == NULL) { *code = OP_END; if (recno != 0) called = find_bracket(cd->start_code, utf8, recno); /* Forward reference */ if (called == NULL) { if (find_parens(ptr, cd->bracount, NULL, recno, (options & PCRE_EXTENDED) != 0) < 0) { *errorcodeptr = ERR15; goto FAILED; } called = cd->start_code + recno; PUTINC(cd->hwm, 0, code + 2 + LINK_SIZE - cd->start_code); } /* If not a forward reference, and the subpattern is still open, this is a recursive call. We check to see if this is a left recursion that could loop for ever, and diagnose that case. */ else if (GET(called, 1) == 0 && could_be_empty(called, code, bcptr, utf8)) { *errorcodeptr = ERR40; goto FAILED; } } /* Insert the recursion/subroutine item, automatically wrapped inside "once" brackets. Set up a "previous group" length so that a subsequent quantifier will work. */ *code = OP_ONCE; PUT(code, 1, 2 + 2*LINK_SIZE); code += 1 + LINK_SIZE; *code = OP_RECURSE; PUT(code, 1, called - cd->start_code); code += 1 + LINK_SIZE; *code = OP_KET; PUT(code, 1, 2 + 2*LINK_SIZE); code += 1 + LINK_SIZE; length_prevgroup = 3 + 3*LINK_SIZE; } /* Can't determine a first byte now */ if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; continue; /* ------------------------------------------------------------ */ default: /* Other characters: check option setting */ OTHER_CHAR_AFTER_QUERY: set = unset = 0; optset = &set; while (*ptr != ')' && *ptr != ':') { switch (*ptr++) { case '-': optset = &unset; break; case 'J': /* Record that it changed in the external options */ *optset |= PCRE_DUPNAMES; cd->external_flags |= PCRE_JCHANGED; break; case 'i': *optset |= PCRE_CASELESS; break; case 'm': *optset |= PCRE_MULTILINE; break; case 's': *optset |= PCRE_DOTALL; break; case 'x': *optset |= PCRE_EXTENDED; break; case 'U': *optset |= PCRE_UNGREEDY; break; case 'X': *optset |= PCRE_EXTRA; break; default: *errorcodeptr = ERR12; ptr--; /* Correct the offset */ goto FAILED; } } /* Set up the changed option bits, but don't change anything yet. */ newoptions = (options | set) & (~unset); /* If the options ended with ')' this is not the start of a nested group with option changes, so the options change at this level. If this item is right at the start of the pattern, the options can be abstracted and made external in the pre-compile phase, and ignored in the compile phase. This can be helpful when matching -- for instance in caseless checking of required bytes. If the code pointer is not (cd->start_code + 1 + LINK_SIZE), we are definitely *not* at the start of the pattern because something has been compiled. In the pre-compile phase, however, the code pointer can have that value after the start, because it gets reset as code is discarded during the pre-compile. However, this can happen only at top level - if we are within parentheses, the starting BRA will still be present. At any parenthesis level, the length value can be used to test if anything has been compiled at that level. Thus, a test for both these conditions is necessary to ensure we correctly detect the start of the pattern in both phases. If we are not at the pattern start, compile code to change the ims options if this setting actually changes any of them. We also pass the new setting back so that it can be put at the start of any following branches, and when this group ends (if we are in a group), a resetting item can be compiled. */ if (*ptr == ')') { if (code == cd->start_code + 1 + LINK_SIZE && (lengthptr == NULL || *lengthptr == 2 + 2*LINK_SIZE)) { cd->external_options = newoptions; options = newoptions; } else { if ((options & PCRE_IMS) != (newoptions & PCRE_IMS)) { *code++ = OP_OPT; *code++ = newoptions & PCRE_IMS; } /* Change options at this level, and pass them back for use in subsequent branches. Reset the greedy defaults and the case value for firstbyte and reqbyte. */ *optionsptr = options = newoptions; greedy_default = ((newoptions & PCRE_UNGREEDY) != 0); greedy_non_default = greedy_default ^ 1; req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0; } previous = NULL; /* This item can't be repeated */ continue; /* It is complete */ } /* If the options ended with ':' we are heading into a nested group with possible change of options. Such groups are non-capturing and are not assertions of any kind. All we need to do is skip over the ':'; the newoptions value is handled below. */ bravalue = OP_BRA; ptr++; } /* End of switch for character following (? */ } /* End of (? handling */ /* Opening parenthesis not followed by '?'. If PCRE_NO_AUTO_CAPTURE is set, all unadorned brackets become non-capturing and behave like (?:...) brackets. */ else if ((options & PCRE_NO_AUTO_CAPTURE) != 0) { bravalue = OP_BRA; } /* Else we have a capturing group. */ else { NUMBERED_GROUP: cd->bracount += 1; PUT2(code, 1+LINK_SIZE, cd->bracount); skipbytes = 2; } /* Process nested bracketed regex. Assertions may not be repeated, but other kinds can be. All their opcodes are >= OP_ONCE. We copy code into a non-register variable in order to be able to pass its address because some compilers complain otherwise. Pass in a new setting for the ims options if they have changed. */ previous = (bravalue >= OP_ONCE)? code : NULL; *code = bravalue; tempcode = code; tempreqvary = cd->req_varyopt; /* Save value before bracket */ length_prevgroup = 0; /* Initialize for pre-compile phase */ if (!compile_regex( newoptions, /* The complete new option state */ options & PCRE_IMS, /* The previous ims option state */ &tempcode, /* Where to put code (updated) */ &ptr, /* Input pointer (updated) */ errorcodeptr, /* Where to put an error message */ (bravalue == OP_ASSERTBACK || bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */ reset_bracount, /* True if (?| group */ skipbytes, /* Skip over bracket number */ &subfirstbyte, /* For possible first char */ &subreqbyte, /* For possible last char */ bcptr, /* Current branch chain */ cd, /* Tables block */ (lengthptr == NULL)? NULL : /* Actual compile phase */ &length_prevgroup /* Pre-compile phase */ )) goto FAILED; /* At the end of compiling, code is still pointing to the start of the group, while tempcode has been updated to point past the end of the group and any option resetting that may follow it. The pattern pointer (ptr) is on the bracket. */ /* If this is a conditional bracket, check that there are no more than two branches in the group, or just one if it's a DEFINE group. We do this in the real compile phase, not in the pre-pass, where the whole group may not be available. */ if (bravalue == OP_COND && lengthptr == NULL) { uschar *tc = code; int condcount = 0; do { condcount++; tc += GET(tc,1); } while (*tc != OP_KET); /* A DEFINE group is never obeyed inline (the "condition" is always false). It must have only one branch. */ if (code[LINK_SIZE+1] == OP_DEF) { if (condcount > 1) { *errorcodeptr = ERR54; goto FAILED; } bravalue = OP_DEF; /* Just a flag to suppress char handling below */ } /* A "normal" conditional group. If there is just one branch, we must not make use of its firstbyte or reqbyte, because this is equivalent to an empty second branch. */ else { if (condcount > 2) { *errorcodeptr = ERR27; goto FAILED; } if (condcount == 1) subfirstbyte = subreqbyte = REQ_NONE; } } /* Error if hit end of pattern */ if (*ptr != ')') { *errorcodeptr = ERR14; goto FAILED; } /* In the pre-compile phase, update the length by the length of the group, less the brackets at either end. Then reduce the compiled code to just a set of non-capturing brackets so that it doesn't use much memory if it is duplicated by a quantifier.*/ if (lengthptr != NULL) { if (OFLOW_MAX - *lengthptr < length_prevgroup - 2 - 2*LINK_SIZE) { *errorcodeptr = ERR20; goto FAILED; } *lengthptr += length_prevgroup - 2 - 2*LINK_SIZE; *code++ = OP_BRA; PUTINC(code, 0, 1 + LINK_SIZE); *code++ = OP_KET; PUTINC(code, 0, 1 + LINK_SIZE); break; /* No need to waste time with special character handling */ } /* Otherwise update the main code pointer to the end of the group. */ code = tempcode; /* For a DEFINE group, required and first character settings are not relevant. */ if (bravalue == OP_DEF) break; /* Handle updating of the required and first characters for other types of group. Update for normal brackets of all kinds, and conditions with two branches (see code above). If the bracket is followed by a quantifier with zero repeat, we have to back off. Hence the definition of zeroreqbyte and zerofirstbyte outside the main loop so that they can be accessed for the back off. */ zeroreqbyte = reqbyte; zerofirstbyte = firstbyte; groupsetfirstbyte = FALSE; if (bravalue >= OP_ONCE) { /* If we have not yet set a firstbyte in this branch, take it from the subpattern, remembering that it was set here so that a repeat of more than one can replicate it as reqbyte if necessary. If the subpattern has no firstbyte, set "none" for the whole branch. In both cases, a zero repeat forces firstbyte to "none". */ if (firstbyte == REQ_UNSET) { if (subfirstbyte >= 0) { firstbyte = subfirstbyte; groupsetfirstbyte = TRUE; } else firstbyte = REQ_NONE; zerofirstbyte = REQ_NONE; } /* If firstbyte was previously set, convert the subpattern's firstbyte into reqbyte if there wasn't one, using the vary flag that was in existence beforehand. */ else if (subfirstbyte >= 0 && subreqbyte < 0) subreqbyte = subfirstbyte | tempreqvary; /* If the subpattern set a required byte (or set a first byte that isn't really the first byte - see above), set it. */ if (subreqbyte >= 0) reqbyte = subreqbyte; } /* For a forward assertion, we take the reqbyte, if set. This can be helpful if the pattern that follows the assertion doesn't set a different char. For example, it's useful for /(?=abcde).+/. We can't set firstbyte for an assertion, however because it leads to incorrect effect for patterns such as /(?=a)a.+/ when the "real" "a" would then become a reqbyte instead of a firstbyte. This is overcome by a scan at the end if there's no firstbyte, looking for an asserted first char. */ else if (bravalue == OP_ASSERT && subreqbyte >= 0) reqbyte = subreqbyte; break; /* End of processing '(' */ /* ===================================================================*/ /* Handle metasequences introduced by \. For ones like \d, the ESC_ values are arranged to be the negation of the corresponding OP_values. For the back references, the values are ESC_REF plus the reference number. Only back references and those types that consume a character may be repeated. We can test for values between ESC_b and ESC_Z for the latter; this may have to change if any new ones are ever created. */ case '\\': tempptr = ptr; c = check_escape(&ptr, errorcodeptr, cd->bracount, options, FALSE); if (*errorcodeptr != 0) goto FAILED; if (c < 0) { if (-c == ESC_Q) /* Handle start of quoted string */ { if (ptr[1] == '\\' && ptr[2] == 'E') ptr += 2; /* avoid empty string */ else inescq = TRUE; continue; } if (-c == ESC_E) continue; /* Perl ignores an orphan \E */ /* For metasequences that actually match a character, we disable the setting of a first character if it hasn't already been set. */ if (firstbyte == REQ_UNSET && -c > ESC_b && -c < ESC_Z) firstbyte = REQ_NONE; /* Set values to reset to if this is followed by a zero repeat. */ zerofirstbyte = firstbyte; zeroreqbyte = reqbyte; /* \k or \k'name' is a back reference by name (Perl syntax). We also support \k{name} (.NET syntax) */ if (-c == ESC_k && (ptr[1] == '<' || ptr[1] == '\'' || ptr[1] == '{')) { is_recurse = FALSE; terminator = (*(++ptr) == '<')? '>' : (*ptr == '\'')? '\'' : '}'; goto NAMED_REF_OR_RECURSE; } /* Back references are handled specially; must disable firstbyte if not set to cope with cases like (?=(\w+))\1: which would otherwise set ':' later. */ if (-c >= ESC_REF) { recno = -c - ESC_REF; HANDLE_REFERENCE: /* Come here from named backref handling */ if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE; previous = code; *code++ = OP_REF; PUT2INC(code, 0, recno); cd->backref_map |= (recno < 32)? (1 << recno) : 1; if (recno > cd->top_backref) cd->top_backref = recno; } /* So are Unicode property matches, if supported. */ #ifdef SUPPORT_UCP else if (-c == ESC_P || -c == ESC_p) { BOOL negated; int pdata; int ptype = get_ucp(&ptr, &negated, &pdata, errorcodeptr); if (ptype < 0) goto FAILED; previous = code; *code++ = ((-c == ESC_p) != negated)? OP_PROP : OP_NOTPROP; *code++ = ptype; *code++ = pdata; } #else /* If Unicode properties are not supported, \X, \P, and \p are not allowed. */ else if (-c == ESC_X || -c == ESC_P || -c == ESC_p) { *errorcodeptr = ERR45; goto FAILED; } #endif /* For the rest (including \X when Unicode properties are supported), we can obtain the OP value by negating the escape value. */ else { previous = (-c > ESC_b && -c < ESC_Z)? code : NULL; *code++ = -c; } continue; } /* We have a data character whose value is in c. In UTF-8 mode it may have a value > 127. We set its representation in the length/buffer, and then handle it as a data character. */ #ifdef SUPPORT_UTF8 if (utf8 && c > 127) mclength = _pcre_ord2utf8(c, mcbuffer); else #endif { mcbuffer[0] = c; mclength = 1; } goto ONE_CHAR; /* ===================================================================*/ /* Handle a literal character. It is guaranteed not to be whitespace or # when the extended flag is set. If we are in UTF-8 mode, it may be a multi-byte literal character. */ default: NORMAL_CHAR: mclength = 1; mcbuffer[0] = c; #ifdef SUPPORT_UTF8 if (utf8 && c >= 0xc0) { while ((ptr[1] & 0xc0) == 0x80) mcbuffer[mclength++] = *(++ptr); } #endif /* At this point we have the character's bytes in mcbuffer, and the length in mclength. When not in UTF-8 mode, the length is always 1. */ ONE_CHAR: previous = code; *code++ = ((options & PCRE_CASELESS) != 0)? OP_CHARNC : OP_CHAR; for (c = 0; c < mclength; c++) *code++ = mcbuffer[c]; /* Remember if \r or \n were seen */ if (mcbuffer[0] == '\r' || mcbuffer[0] == '\n') cd->external_flags |= PCRE_HASCRORLF; /* Set the first and required bytes appropriately. If no previous first byte, set it from this character, but revert to none on a zero repeat. Otherwise, leave the firstbyte value alone, and don't change it on a zero repeat. */ if (firstbyte == REQ_UNSET) { zerofirstbyte = REQ_NONE; zeroreqbyte = reqbyte; /* If the character is more than one byte long, we can set firstbyte only if it is not to be matched caselessly. */ if (mclength == 1 || req_caseopt == 0) { firstbyte = mcbuffer[0] | req_caseopt; if (mclength != 1) reqbyte = code[-1] | cd->req_varyopt; } else firstbyte = reqbyte = REQ_NONE; } /* firstbyte was previously set; we can set reqbyte only the length is 1 or the matching is caseful. */ else { zerofirstbyte = firstbyte; zeroreqbyte = reqbyte; if (mclength == 1 || req_caseopt == 0) reqbyte = code[-1] | req_caseopt | cd->req_varyopt; } break; /* End of literal character handling */ } } /* end of big loop */ /* Control never reaches here by falling through, only by a goto for all the error states. Pass back the position in the pattern so that it can be displayed to the user for diagnosing the error. */ FAILED: *ptrptr = ptr; return FALSE; } /************************************************* * Compile sequence of alternatives * *************************************************/ /* On entry, ptr is pointing past the bracket character, but on return it points to the closing bracket, or vertical bar, or end of string. The code variable is pointing at the byte into which the BRA operator has been stored. If the ims options are changed at the start (for a (?ims: group) or during any branch, we need to insert an OP_OPT item at the start of every following branch to ensure they get set correctly at run time, and also pass the new options into every subsequent branch compile. This function is used during the pre-compile phase when we are trying to find out the amount of memory needed, as well as during the real compile phase. The value of lengthptr distinguishes the two phases. Arguments: options option bits, including any changes for this subpattern oldims previous settings of ims option bits codeptr -> the address of the current code pointer ptrptr -> the address of the current pattern pointer errorcodeptr -> pointer to error code variable lookbehind TRUE if this is a lookbehind assertion reset_bracount TRUE to reset the count for each branch skipbytes skip this many bytes at start (for brackets and OP_COND) firstbyteptr place to put the first required character, or a negative number reqbyteptr place to put the last required character, or a negative number bcptr pointer to the chain of currently open branches cd points to the data block with tables pointers etc. lengthptr NULL during the real compile phase points to length accumulator during pre-compile phase Returns: TRUE on success */ static BOOL compile_regex(int options, int oldims, uschar **codeptr, const uschar **ptrptr, int *errorcodeptr, BOOL lookbehind, BOOL reset_bracount, int skipbytes, int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr, compile_data *cd, int *lengthptr) { const uschar *ptr = *ptrptr; uschar *code = *codeptr; uschar *last_branch = code; uschar *start_bracket = code; uschar *reverse_count = NULL; int firstbyte, reqbyte; int branchfirstbyte, branchreqbyte; int length; int orig_bracount; int max_bracount; branch_chain bc; bc.outer = bcptr; bc.current = code; firstbyte = reqbyte = REQ_UNSET; /* Accumulate the length for use in the pre-compile phase. Start with the length of the BRA and KET and any extra bytes that are required at the beginning. We accumulate in a local variable to save frequent testing of lenthptr for NULL. We cannot do this by looking at the value of code at the start and end of each alternative, because compiled items are discarded during the pre-compile phase so that the work space is not exceeded. */ length = 2 + 2*LINK_SIZE + skipbytes; /* WARNING: If the above line is changed for any reason, you must also change the code that abstracts option settings at the start of the pattern and makes them global. It tests the value of length for (2 + 2*LINK_SIZE) in the pre-compile phase to find out whether anything has yet been compiled or not. */ /* Offset is set zero to mark that this bracket is still open */ PUT(code, 1, 0); code += 1 + LINK_SIZE + skipbytes; /* Loop for each alternative branch */ orig_bracount = max_bracount = cd->bracount; for (;;) { /* For a (?| group, reset the capturing bracket count so that each branch uses the same numbers. */ if (reset_bracount) cd->bracount = orig_bracount; /* Handle a change of ims options at the start of the branch */ if ((options & PCRE_IMS) != oldims) { *code++ = OP_OPT; *code++ = options & PCRE_IMS; length += 2; } /* Set up dummy OP_REVERSE if lookbehind assertion */ if (lookbehind) { *code++ = OP_REVERSE; reverse_count = code; PUTINC(code, 0, 0); length += 1 + LINK_SIZE; } /* Now compile the branch; in the pre-compile phase its length gets added into the length. */ if (!compile_branch(&options, &code, &ptr, errorcodeptr, &branchfirstbyte, &branchreqbyte, &bc, cd, (lengthptr == NULL)? NULL : &length)) { *ptrptr = ptr; return FALSE; } /* Keep the highest bracket count in case (?| was used and some branch has fewer than the rest. */ if (cd->bracount > max_bracount) max_bracount = cd->bracount; /* In the real compile phase, there is some post-processing to be done. */ if (lengthptr == NULL) { /* If this is the first branch, the firstbyte and reqbyte values for the branch become the values for the regex. */ if (*last_branch != OP_ALT) { firstbyte = branchfirstbyte; reqbyte = branchreqbyte; } /* If this is not the first branch, the first char and reqbyte have to match the values from all the previous branches, except that if the previous value for reqbyte didn't have REQ_VARY set, it can still match, and we set REQ_VARY for the regex. */ else { /* If we previously had a firstbyte, but it doesn't match the new branch, we have to abandon the firstbyte for the regex, but if there was previously no reqbyte, it takes on the value of the old firstbyte. */ if (firstbyte >= 0 && firstbyte != branchfirstbyte) { if (reqbyte < 0) reqbyte = firstbyte; firstbyte = REQ_NONE; } /* If we (now or from before) have no firstbyte, a firstbyte from the branch becomes a reqbyte if there isn't a branch reqbyte. */ if (firstbyte < 0 && branchfirstbyte >= 0 && branchreqbyte < 0) branchreqbyte = branchfirstbyte; /* Now ensure that the reqbytes match */ if ((reqbyte & ~REQ_VARY) != (branchreqbyte & ~REQ_VARY)) reqbyte = REQ_NONE; else reqbyte |= branchreqbyte; /* To "or" REQ_VARY */ } /* If lookbehind, check that this branch matches a fixed-length string, and put the length into the OP_REVERSE item. Temporarily mark the end of the branch with OP_END. */ if (lookbehind) { int fixed_length; *code = OP_END; fixed_length = find_fixedlength(last_branch, options); DPRINTF(("fixed length = %d\n", fixed_length)); if (fixed_length < 0) { *errorcodeptr = (fixed_length == -2)? ERR36 : ERR25; *ptrptr = ptr; return FALSE; } PUT(reverse_count, 0, fixed_length); } } /* Reached end of expression, either ')' or end of pattern. In the real compile phase, go back through the alternative branches and reverse the chain of offsets, with the field in the BRA item now becoming an offset to the first alternative. If there are no alternatives, it points to the end of the group. The length in the terminating ket is always the length of the whole bracketed item. If any of the ims options were changed inside the group, compile a resetting op-code following, except at the very end of the pattern. Return leaving the pointer at the terminating char. */ if (*ptr != '|') { if (lengthptr == NULL) { int branch_length = code - last_branch; do { int prev_length = GET(last_branch, 1); PUT(last_branch, 1, branch_length); branch_length = prev_length; last_branch -= branch_length; } while (branch_length > 0); } /* Fill in the ket */ *code = OP_KET; PUT(code, 1, code - start_bracket); code += 1 + LINK_SIZE; /* Resetting option if needed */ if ((options & PCRE_IMS) != oldims && *ptr == ')') { *code++ = OP_OPT; *code++ = oldims; length += 2; } /* Retain the highest bracket number, in case resetting was used. */ cd->bracount = max_bracount; /* Set values to pass back */ *codeptr = code; *ptrptr = ptr; *firstbyteptr = firstbyte; *reqbyteptr = reqbyte; if (lengthptr != NULL) { if (OFLOW_MAX - *lengthptr < length) { *errorcodeptr = ERR20; return FALSE; } *lengthptr += length; } return TRUE; } /* Another branch follows. In the pre-compile phase, we can move the code pointer back to where it was for the start of the first branch. (That is, pretend that each branch is the only one.) In the real compile phase, insert an ALT node. Its length field points back to the previous branch while the bracket remains open. At the end the chain is reversed. It's done like this so that the start of the bracket has a zero offset until it is closed, making it possible to detect recursion. */ if (lengthptr != NULL) { code = *codeptr + 1 + LINK_SIZE + skipbytes; length += 1 + LINK_SIZE; } else { *code = OP_ALT; PUT(code, 1, code - last_branch); bc.current = last_branch = code; code += 1 + LINK_SIZE; } ptr++; } /* Control never reaches here */ } /************************************************* * Check for anchored expression * *************************************************/ /* Try to find out if this is an anchored regular expression. Consider each alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then it's anchored. However, if this is a multiline pattern, then only OP_SOD counts, since OP_CIRC can match in the middle. We can also consider a regex to be anchored if OP_SOM starts all its branches. This is the code for \G, which means "match at start of match position, taking into account the match offset". A branch is also implicitly anchored if it starts with .* and DOTALL is set, because that will try the rest of the pattern at all possible matching points, so there is no point trying again.... er .... .... except when the .* appears inside capturing parentheses, and there is a subsequent back reference to those parentheses. We haven't enough information to catch that case precisely. At first, the best we could do was to detect when .* was in capturing brackets and the highest back reference was greater than or equal to that level. However, by keeping a bitmap of the first 31 back references, we can catch some of the more common cases more precisely. Arguments: code points to start of expression (the bracket) options points to the options setting bracket_map a bitmap of which brackets we are inside while testing; this handles up to substring 31; after that we just have to take the less precise approach backref_map the back reference bitmap Returns: TRUE or FALSE */ static BOOL is_anchored(register const uschar *code, int *options, unsigned int bracket_map, unsigned int backref_map) { do { const uschar *scode = first_significant_code(code + _pcre_OP_lengths[*code], options, PCRE_MULTILINE, FALSE); register int op = *scode; /* Non-capturing brackets */ if (op == OP_BRA) { if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE; } /* Capturing brackets */ else if (op == OP_CBRA) { int n = GET2(scode, 1+LINK_SIZE); int new_map = bracket_map | ((n < 32)? (1 << n) : 1); if (!is_anchored(scode, options, new_map, backref_map)) return FALSE; } /* Other brackets */ else if (op == OP_ASSERT || op == OP_ONCE || op == OP_COND) { if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE; } /* .* is not anchored unless DOTALL is set and it isn't in brackets that are or may be referenced. */ else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR || op == OP_TYPEPOSSTAR) && (*options & PCRE_DOTALL) != 0) { if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE; } /* Check for explicit anchoring */ else if (op != OP_SOD && op != OP_SOM && ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC)) return FALSE; code += GET(code, 1); } while (*code == OP_ALT); /* Loop for each alternative */ return TRUE; } /************************************************* * Check for starting with ^ or .* * *************************************************/ /* This is called to find out if every branch starts with ^ or .* so that "first char" processing can be done to speed things up in multiline matching and for non-DOTALL patterns that start with .* (which must start at the beginning or after \n). As in the case of is_anchored() (see above), we have to take account of back references to capturing brackets that contain .* because in that case we can't make the assumption. Arguments: code points to start of expression (the bracket) bracket_map a bitmap of which brackets we are inside while testing; this handles up to substring 31; after that we just have to take the less precise approach backref_map the back reference bitmap Returns: TRUE or FALSE */ static BOOL is_startline(const uschar *code, unsigned int bracket_map, unsigned int backref_map) { do { const uschar *scode = first_significant_code(code + _pcre_OP_lengths[*code], NULL, 0, FALSE); register int op = *scode; /* Non-capturing brackets */ if (op == OP_BRA) { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; } /* Capturing brackets */ else if (op == OP_CBRA) { int n = GET2(scode, 1+LINK_SIZE); int new_map = bracket_map | ((n < 32)? (1 << n) : 1); if (!is_startline(scode, new_map, backref_map)) return FALSE; } /* Other brackets */ else if (op == OP_ASSERT || op == OP_ONCE || op == OP_COND) { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; } /* .* means "start at start or after \n" if it isn't in brackets that may be referenced. */ else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR || op == OP_TYPEPOSSTAR) { if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE; } /* Check for explicit circumflex */ else if (op != OP_CIRC) return FALSE; /* Move on to the next alternative */ code += GET(code, 1); } while (*code == OP_ALT); /* Loop for each alternative */ return TRUE; } /************************************************* * Check for asserted fixed first char * *************************************************/ /* During compilation, the "first char" settings from forward assertions are discarded, because they can cause conflicts with actual literals that follow. However, if we end up without a first char setting for an unanchored pattern, it is worth scanning the regex to see if there is an initial asserted first char. If all branches start with the same asserted char, or with a bracket all of whose alternatives start with the same asserted char (recurse ad lib), then we return that char, otherwise -1. Arguments: code points to start of expression (the bracket) options pointer to the options (used to check casing changes) inassert TRUE if in an assertion Returns: -1 or the fixed first char */ static int find_firstassertedchar(const uschar *code, int *options, BOOL inassert) { register int c = -1; do { int d; const uschar *scode = first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS, TRUE); register int op = *scode; switch(op) { default: return -1; case OP_BRA: case OP_CBRA: case OP_ASSERT: case OP_ONCE: case OP_COND: if ((d = find_firstassertedchar(scode, options, op == OP_ASSERT)) < 0) return -1; if (c < 0) c = d; else if (c != d) return -1; break; case OP_EXACT: /* Fall through */ scode += 2; case OP_CHAR: case OP_CHARNC: case OP_PLUS: case OP_MINPLUS: case OP_POSPLUS: if (!inassert) return -1; if (c < 0) { c = scode[1]; if ((*options & PCRE_CASELESS) != 0) c |= REQ_CASELESS; } else if (c != scode[1]) return -1; break; } code += GET(code, 1); } while (*code == OP_ALT); return c; } /************************************************* * Compile a Regular Expression * *************************************************/ /* This function takes a string and returns a pointer to a block of store holding a compiled version of the expression. The original API for this function had no error code return variable; it is retained for backwards compatibility. The new function is given a new name. Arguments: pattern the regular expression options various option bits errorcodeptr pointer to error code variable (pcre_compile2() only) can be NULL if you don't want a code value errorptr pointer to pointer to error text erroroffset ptr offset in pattern where error was detected tables pointer to character tables or NULL Returns: pointer to compiled data block, or NULL on error, with errorptr and erroroffset set */ PCRE_EXP_DEFN pcre * pcre_compile(const char *pattern, int options, const char **errorptr, int *erroroffset, const unsigned char *tables) { return pcre_compile2(pattern, options, NULL, errorptr, erroroffset, tables); } PCRE_EXP_DEFN pcre * pcre_compile2(const char *pattern, int options, int *errorcodeptr, const char **errorptr, int *erroroffset, const unsigned char *tables) { real_pcre *re; int length = 1; /* For final END opcode */ int firstbyte, reqbyte, newline; int errorcode = 0; int skipatstart = 0; #ifdef SUPPORT_UTF8 BOOL utf8; #endif size_t size; uschar *code; const uschar *codestart; const uschar *ptr; compile_data compile_block; compile_data *cd = &compile_block; /* This space is used for "compiling" into during the first phase, when we are computing the amount of memory that is needed. Compiled items are thrown away as soon as possible, so that a fairly large buffer should be sufficient for this purpose. The same space is used in the second phase for remembering where to fill in forward references to subpatterns. */ uschar cworkspace[COMPILE_WORK_SIZE]; /* Set this early so that early errors get offset 0. */ ptr = (const uschar *)pattern; /* We can't pass back an error message if errorptr is NULL; I guess the best we can do is just return NULL, but we can set a code value if there is a code pointer. */ if (errorptr == NULL) { if (errorcodeptr != NULL) *errorcodeptr = 99; return NULL; } *errorptr = NULL; if (errorcodeptr != NULL) *errorcodeptr = ERR0; /* However, we can give a message for this error */ if (erroroffset == NULL) { errorcode = ERR16; goto PCRE_EARLY_ERROR_RETURN2; } *erroroffset = 0; /* Can't support UTF8 unless PCRE has been compiled to include the code. */ #ifdef SUPPORT_UTF8 utf8 = (options & PCRE_UTF8) != 0; if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 && (*erroroffset = _pcre_valid_utf8((uschar *)pattern, -1)) >= 0) { errorcode = ERR44; goto PCRE_EARLY_ERROR_RETURN2; } #else if ((options & PCRE_UTF8) != 0) { errorcode = ERR32; goto PCRE_EARLY_ERROR_RETURN; } #endif if ((options & ~PUBLIC_OPTIONS) != 0) { errorcode = ERR17; goto PCRE_EARLY_ERROR_RETURN; } /* Set up pointers to the individual character tables */ if (tables == NULL) tables = _pcre_default_tables; cd->lcc = tables + lcc_offset; cd->fcc = tables + fcc_offset; cd->cbits = tables + cbits_offset; cd->ctypes = tables + ctypes_offset; /* Check for global one-time settings at the start of the pattern, and remember the offset for later. */ while (ptr[skipatstart] == '(' && ptr[skipatstart+1] == '*') { int newnl = 0; int newbsr = 0; if (strncmp((char *)(ptr+skipatstart+2), "CR)", 3) == 0) { skipatstart += 5; newnl = PCRE_NEWLINE_CR; } else if (strncmp((char *)(ptr+skipatstart+2), "LF)", 3) == 0) { skipatstart += 5; newnl = PCRE_NEWLINE_LF; } else if (strncmp((char *)(ptr+skipatstart+2), "CRLF)", 5) == 0) { skipatstart += 7; newnl = PCRE_NEWLINE_CR + PCRE_NEWLINE_LF; } else if (strncmp((char *)(ptr+skipatstart+2), "ANY)", 4) == 0) { skipatstart += 6; newnl = PCRE_NEWLINE_ANY; } else if (strncmp((char *)(ptr+skipatstart+2), "ANYCRLF)", 8) == 0) { skipatstart += 10; newnl = PCRE_NEWLINE_ANYCRLF; } else if (strncmp((char *)(ptr+skipatstart+2), "BSR_ANYCRLF)", 12) == 0) { skipatstart += 14; newbsr = PCRE_BSR_ANYCRLF; } else if (strncmp((char *)(ptr+skipatstart+2), "BSR_UNICODE)", 12) == 0) { skipatstart += 14; newbsr = PCRE_BSR_UNICODE; } if (newnl != 0) options = (options & ~PCRE_NEWLINE_BITS) | newnl; else if (newbsr != 0) options = (options & ~(PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) | newbsr; else break; } /* Check validity of \R options. */ switch (options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) { case 0: case PCRE_BSR_ANYCRLF: case PCRE_BSR_UNICODE: break; default: errorcode = ERR56; goto PCRE_EARLY_ERROR_RETURN; } /* Handle different types of newline. The three bits give seven cases. The current code allows for fixed one- or two-byte sequences, plus "any" and "anycrlf". */ switch (options & PCRE_NEWLINE_BITS) { case 0: newline = NEWLINE; break; /* Build-time default */ case PCRE_NEWLINE_CR: newline = '\r'; break; case PCRE_NEWLINE_LF: newline = '\n'; break; case PCRE_NEWLINE_CR+ PCRE_NEWLINE_LF: newline = ('\r' << 8) | '\n'; break; case PCRE_NEWLINE_ANY: newline = -1; break; case PCRE_NEWLINE_ANYCRLF: newline = -2; break; default: errorcode = ERR56; goto PCRE_EARLY_ERROR_RETURN; } if (newline == -2) { cd->nltype = NLTYPE_ANYCRLF; } else if (newline < 0) { cd->nltype = NLTYPE_ANY; } else { cd->nltype = NLTYPE_FIXED; if (newline > 255) { cd->nllen = 2; cd->nl[0] = (newline >> 8) & 255; cd->nl[1] = newline & 255; } else { cd->nllen = 1; cd->nl[0] = newline; } } /* Maximum back reference and backref bitmap. The bitmap records up to 31 back references to help in deciding whether (.*) can be treated as anchored or not. */ cd->top_backref = 0; cd->backref_map = 0; /* Reflect pattern for debugging output */ DPRINTF(("------------------------------------------------------------------\n")); DPRINTF(("%s\n", pattern)); /* Pretend to compile the pattern while actually just accumulating the length of memory required. This behaviour is triggered by passing a non-NULL final argument to compile_regex(). We pass a block of workspace (cworkspace) for it to compile parts of the pattern into; the compiled code is discarded when it is no longer needed, so hopefully this workspace will never overflow, though there is a test for its doing so. */ cd->bracount = cd->final_bracount = 0; cd->names_found = 0; cd->name_entry_size = 0; cd->name_table = NULL; cd->start_workspace = cworkspace; cd->start_code = cworkspace; cd->hwm = cworkspace; cd->start_pattern = (const uschar *)pattern; cd->end_pattern = (const uschar *)(pattern + strlen(pattern)); cd->req_varyopt = 0; cd->external_options = options; cd->external_flags = 0; /* Now do the pre-compile. On error, errorcode will be set non-zero, so we don't need to look at the result of the function here. The initial options have been put into the cd block so that they can be changed if an option setting is found within the regex right at the beginning. Bringing initial option settings outside can help speed up starting point checks. */ ptr += skipatstart; code = cworkspace; *code = OP_BRA; (void)compile_regex(cd->external_options, cd->external_options & PCRE_IMS, &code, &ptr, &errorcode, FALSE, FALSE, 0, &firstbyte, &reqbyte, NULL, cd, &length); if (errorcode != 0) goto PCRE_EARLY_ERROR_RETURN; DPRINTF(("end pre-compile: length=%d workspace=%d\n", length, cd->hwm - cworkspace)); if (length > MAX_PATTERN_SIZE) { errorcode = ERR20; goto PCRE_EARLY_ERROR_RETURN; } /* Compute the size of data block needed and get it, either from malloc or externally provided function. Integer overflow should no longer be possible because nowadays we limit the maximum value of cd->names_found and cd->name_entry_size. */ size = length + sizeof(real_pcre) + cd->names_found * (cd->name_entry_size + 3); re = (real_pcre *)(pcre_malloc)(size); if (re == NULL) { errorcode = ERR21; goto PCRE_EARLY_ERROR_RETURN; } /* Put in the magic number, and save the sizes, initial options, internal flags, and character table pointer. NULL is used for the default character tables. The nullpad field is at the end; it's there to help in the case when a regex compiled on a system with 4-byte pointers is run on another with 8-byte pointers. */ re->magic_number = MAGIC_NUMBER; re->size = size; re->options = cd->external_options; re->flags = cd->external_flags; re->dummy1 = 0; re->first_byte = 0; re->req_byte = 0; re->name_table_offset = sizeof(real_pcre); re->name_entry_size = cd->name_entry_size; re->name_count = cd->names_found; re->ref_count = 0; re->tables = (tables == _pcre_default_tables)? NULL : tables; re->nullpad = NULL; /* The starting points of the name/number translation table and of the code are passed around in the compile data block. The start/end pattern and initial options are already set from the pre-compile phase, as is the name_entry_size field. Reset the bracket count and the names_found field. Also reset the hwm field; this time it's used for remembering forward references to subpatterns. */ cd->final_bracount = cd->bracount; /* Save for checking forward references */ cd->bracount = 0; cd->names_found = 0; cd->name_table = (uschar *)re + re->name_table_offset; codestart = cd->name_table + re->name_entry_size * re->name_count; cd->start_code = codestart; cd->hwm = cworkspace; cd->req_varyopt = 0; cd->had_accept = FALSE; /* Set up a starting, non-extracting bracket, then compile the expression. On error, errorcode will be set non-zero, so we don't need to look at the result of the function here. */ ptr = (const uschar *)pattern + skipatstart; code = (uschar *)codestart; *code = OP_BRA; (void)compile_regex(re->options, re->options & PCRE_IMS, &code, &ptr, &errorcode, FALSE, FALSE, 0, &firstbyte, &reqbyte, NULL, cd, NULL); re->top_bracket = cd->bracount; re->top_backref = cd->top_backref; re->flags = cd->external_flags; if (cd->had_accept) reqbyte = -1; /* Must disable after (*ACCEPT) */ /* If not reached end of pattern on success, there's an excess bracket. */ if (errorcode == 0 && *ptr != 0) errorcode = ERR22; /* Fill in the terminating state and check for disastrous overflow, but if debugging, leave the test till after things are printed out. */ *code++ = OP_END; #ifndef DEBUG if (code - codestart > length) errorcode = ERR23; #endif /* Fill in any forward references that are required. */ while (errorcode == 0 && cd->hwm > cworkspace) { int offset, recno; const uschar *groupptr; cd->hwm -= LINK_SIZE; offset = GET(cd->hwm, 0); recno = GET(codestart, offset); groupptr = find_bracket(codestart, (re->options & PCRE_UTF8) != 0, recno); if (groupptr == NULL) errorcode = ERR53; else PUT(((uschar *)codestart), offset, groupptr - codestart); } /* Give an error if there's back reference to a non-existent capturing subpattern. */ if (errorcode == 0 && re->top_backref > re->top_bracket) errorcode = ERR15; /* Failed to compile, or error while post-processing */ if (errorcode != 0) { (pcre_free)(re); PCRE_EARLY_ERROR_RETURN: *erroroffset = ptr - (const uschar *)pattern; PCRE_EARLY_ERROR_RETURN2: *errorptr = find_error_text(errorcode); if (errorcodeptr != NULL) *errorcodeptr = errorcode; return NULL; } /* If the anchored option was not passed, set the flag if we can determine that the pattern is anchored by virtue of ^ characters or \A or anything else (such as starting with .* when DOTALL is set). Otherwise, if we know what the first byte has to be, save it, because that speeds up unanchored matches no end. If not, see if we can set the PCRE_STARTLINE flag. This is helpful for multiline matches when all branches start with ^. and also when all branches start with .* for non-DOTALL matches. */ if ((re->options & PCRE_ANCHORED) == 0) { int temp_options = re->options; /* May get changed during these scans */ if (is_anchored(codestart, &temp_options, 0, cd->backref_map)) re->options |= PCRE_ANCHORED; else { if (firstbyte < 0) firstbyte = find_firstassertedchar(codestart, &temp_options, FALSE); if (firstbyte >= 0) /* Remove caseless flag for non-caseable chars */ { int ch = firstbyte & 255; re->first_byte = ((firstbyte & REQ_CASELESS) != 0 && cd->fcc[ch] == ch)? ch : firstbyte; re->flags |= PCRE_FIRSTSET; } else if (is_startline(codestart, 0, cd->backref_map)) re->flags |= PCRE_STARTLINE; } } /* For an anchored pattern, we use the "required byte" only if it follows a variable length item in the regex. Remove the caseless flag for non-caseable bytes. */ if (reqbyte >= 0 && ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0)) { int ch = reqbyte & 255; re->req_byte = ((reqbyte & REQ_CASELESS) != 0 && cd->fcc[ch] == ch)? (reqbyte & ~REQ_CASELESS) : reqbyte; re->flags |= PCRE_REQCHSET; } /* Print out the compiled data if debugging is enabled. This is never the case when building a production library. */ #ifdef DEBUG printf("Length = %d top_bracket = %d top_backref = %d\n", length, re->top_bracket, re->top_backref); printf("Options=%08x\n", re->options); if ((re->flags & PCRE_FIRSTSET) != 0) { int ch = re->first_byte & 255; const char *caseless = ((re->first_byte & REQ_CASELESS) == 0)? "" : " (caseless)"; if (isprint(ch)) printf("First char = %c%s\n", ch, caseless); else printf("First char = \\x%02x%s\n", ch, caseless); } if ((re->flags & PCRE_REQCHSET) != 0) { int ch = re->req_byte & 255; const char *caseless = ((re->req_byte & REQ_CASELESS) == 0)? "" : " (caseless)"; if (isprint(ch)) printf("Req char = %c%s\n", ch, caseless); else printf("Req char = \\x%02x%s\n", ch, caseless); } pcre_printint(re, stdout, TRUE); /* This check is done here in the debugging case so that the code that was compiled can be seen. */ if (code - codestart > length) { (pcre_free)(re); *errorptr = find_error_text(ERR23); *erroroffset = ptr - (uschar *)pattern; if (errorcodeptr != NULL) *errorcodeptr = ERR23; return NULL; } #endif /* DEBUG */ return (pcre *)re; } /* End of pcre_compile.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_newline.c0000644000175000017500000001322011407320460023446 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains internal functions for testing newlines when more than one kind of newline is to be recognized. When a newline is found, its length is returned. In principle, we could implement several newline "types", each referring to a different set of newline characters. At present, PCRE supports only NLTYPE_FIXED, which gets handled without these functions, NLTYPE_ANYCRLF, and NLTYPE_ANY. The full list of Unicode newline characters is taken from http://unicode.org/unicode/reports/tr18/. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Check for newline at given position * *************************************************/ /* It is guaranteed that the initial value of ptr is less than the end of the string that is being processed. Arguments: ptr pointer to possible newline type the newline type endptr pointer to the end of the string lenptr where to return the length utf8 TRUE if in utf8 mode Returns: TRUE or FALSE */ BOOL _pcre_is_newline(const uschar *ptr, int type, const uschar *endptr, int *lenptr, BOOL utf8) { int c; if (utf8) { GETCHAR(c, ptr); } else c = *ptr; if (type == NLTYPE_ANYCRLF) switch(c) { case 0x000a: *lenptr = 1; return TRUE; /* LF */ case 0x000d: *lenptr = (ptr < endptr - 1 && ptr[1] == 0x0a)? 2 : 1; return TRUE; /* CR */ default: return FALSE; } /* NLTYPE_ANY */ else switch(c) { case 0x000a: /* LF */ case 0x000b: /* VT */ case 0x000c: *lenptr = 1; return TRUE; /* FF */ case 0x000d: *lenptr = (ptr < endptr - 1 && ptr[1] == 0x0a)? 2 : 1; return TRUE; /* CR */ case 0x0085: *lenptr = utf8? 2 : 1; return TRUE; /* NEL */ case 0x2028: /* LS */ case 0x2029: *lenptr = 3; return TRUE; /* PS */ default: return FALSE; } } /************************************************* * Check for newline at previous position * *************************************************/ /* It is guaranteed that the initial value of ptr is greater than the start of the string that is being processed. Arguments: ptr pointer to possible newline type the newline type startptr pointer to the start of the string lenptr where to return the length utf8 TRUE if in utf8 mode Returns: TRUE or FALSE */ BOOL _pcre_was_newline(const uschar *ptr, int type, const uschar *startptr, int *lenptr, BOOL utf8) { int c; ptr--; #ifdef SUPPORT_UTF8 if (utf8) { BACKCHAR(ptr); GETCHAR(c, ptr); } else c = *ptr; #else /* no UTF-8 support */ c = *ptr; #endif /* SUPPORT_UTF8 */ if (type == NLTYPE_ANYCRLF) switch(c) { case 0x000a: *lenptr = (ptr > startptr && ptr[-1] == 0x0d)? 2 : 1; return TRUE; /* LF */ case 0x000d: *lenptr = 1; return TRUE; /* CR */ default: return FALSE; } else switch(c) { case 0x000a: *lenptr = (ptr > startptr && ptr[-1] == 0x0d)? 2 : 1; return TRUE; /* LF */ case 0x000b: /* VT */ case 0x000c: /* FF */ case 0x000d: *lenptr = 1; return TRUE; /* CR */ case 0x0085: *lenptr = utf8? 2 : 1; return TRUE; /* NEL */ case 0x2028: /* LS */ case 0x2029: *lenptr = 3; return TRUE; /* PS */ default: return FALSE; } } /* End of pcre_newline.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_xclass.c0000644000175000017500000001106011407320460023302 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains an internal function that is used to match an extended class (one that contains characters whose values are > 255). It is used by both pcre_exec() and pcre_def_exec(). */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Match character against an XCLASS * *************************************************/ /* This function is called to match a character against an extended class that might contain values > 255. Arguments: c the character data points to the flag byte of the XCLASS data Returns: TRUE if character matches, else FALSE */ BOOL _pcre_xclass(int c, const uschar *data) { int t; BOOL negated = (*data & XCL_NOT) != 0; /* Character values < 256 are matched against a bitmap, if one is present. If not, we still carry on, because there may be ranges that start below 256 in the additional data. */ if (c < 256) { if ((*data & XCL_MAP) != 0 && (data[1 + c/8] & (1 << (c&7))) != 0) return !negated; /* char found */ } /* First skip the bit map if present. Then match against the list of Unicode properties or large chars or ranges that end with a large char. We won't ever encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */ if ((*data++ & XCL_MAP) != 0) data += 32; while ((t = *data++) != XCL_END) { int x, y; if (t == XCL_SINGLE) { GETCHARINC(x, data); if (c == x) return !negated; } else if (t == XCL_RANGE) { GETCHARINC(x, data); GETCHARINC(y, data); if (c >= x && c <= y) return !negated; } #ifdef SUPPORT_UCP else /* XCL_PROP & XCL_NOTPROP */ { int chartype, script; int category = _pcre_ucp_findprop(c, &chartype, &script); switch(*data) { case PT_ANY: if (t == XCL_PROP) return !negated; break; case PT_LAMP: if ((chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt) == (t == XCL_PROP)) return !negated; break; case PT_GC: if ((data[1] == category) == (t == XCL_PROP)) return !negated; break; case PT_PC: if ((data[1] == chartype) == (t == XCL_PROP)) return !negated; break; case PT_SC: if ((data[1] == script) == (t == XCL_PROP)) return !negated; break; /* This should never occur, but compilers may mutter if there is no default. */ default: return FALSE; } data += 2; } #endif /* SUPPORT_UCP */ } return negated; /* char did not match */ } /* End of pcre_xclass.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_exec.c0000644000175000017500000044545711407320460022756 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains pcre_exec(), the externally visible function that does pattern matching using an NFA algorithm, trying to mimic Perl as closely as possible. There are also some static supporting functions. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define NLBLOCK md /* Block containing newline information */ #define PSSTART start_subject /* Field containing processed string start */ #define PSEND end_subject /* Field containing processed string end */ #include "pcre_internal.h" /* Undefine some potentially clashing cpp symbols */ #undef min #undef max /* Flag bits for the match() function */ #define match_condassert 0x01 /* Called to check a condition assertion */ #define match_cbegroup 0x02 /* Could-be-empty unlimited repeat group */ /* Non-error returns from the match() function. Error returns are externally defined PCRE_ERROR_xxx codes, which are all negative. */ #define MATCH_MATCH 1 #define MATCH_NOMATCH 0 /* Special internal returns from the match() function. Make them sufficiently negative to avoid the external error codes. */ #define MATCH_COMMIT (-999) #define MATCH_PRUNE (-998) #define MATCH_SKIP (-997) #define MATCH_THEN (-996) /* Maximum number of ints of offset to save on the stack for recursive calls. If the offset vector is bigger, malloc is used. This should be a multiple of 3, because the offset vector is always a multiple of 3 long. */ #define REC_STACK_SAVE_MAX 30 /* Min and max values for the common repeats; for the maxima, 0 => infinity */ static const char rep_min[] = { 0, 0, 1, 1, 0, 0 }; static const char rep_max[] = { 0, 0, 0, 0, 1, 1 }; #ifdef DEBUG /************************************************* * Debugging function to print chars * *************************************************/ /* Print a sequence of chars in printable format, stopping at the end of the subject if the requested. Arguments: p points to characters length number to print is_subject TRUE if printing from within md->start_subject md pointer to matching data block, if is_subject is TRUE Returns: nothing */ static void pchars(const uschar *p, int length, BOOL is_subject, match_data *md) { unsigned int c; if (is_subject && length > md->end_subject - p) length = md->end_subject - p; while (length-- > 0) if (isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c); } #endif /************************************************* * Match a back-reference * *************************************************/ /* If a back reference hasn't been set, the length that is passed is greater than the number of characters left in the string, so the match fails. Arguments: offset index into the offset vector eptr points into the subject length length to be matched md points to match data block ims the ims flags Returns: TRUE if matched */ static BOOL match_ref(int offset, register USPTR eptr, int length, match_data *md, unsigned long int ims) { USPTR p = md->start_subject + md->offset_vector[offset]; #ifdef DEBUG if (eptr >= md->end_subject) printf("matching subject "); else { printf("matching subject "); pchars(eptr, length, TRUE, md); } printf(" against backref "); pchars(p, length, FALSE, md); printf("\n"); #endif /* Always fail if not enough characters left */ if (length > md->end_subject - eptr) return FALSE; /* Separate the caselesss case for speed */ if ((ims & PCRE_CASELESS) != 0) { while (length-- > 0) if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE; } else { while (length-- > 0) if (*p++ != *eptr++) return FALSE; } return TRUE; } /*************************************************************************** **************************************************************************** RECURSION IN THE match() FUNCTION The match() function is highly recursive, though not every recursive call increases the recursive depth. Nevertheless, some regular expressions can cause it to recurse to a great depth. I was writing for Unix, so I just let it call itself recursively. This uses the stack for saving everything that has to be saved for a recursive call. On Unix, the stack can be large, and this works fine. It turns out that on some non-Unix-like systems there are problems with programs that use a lot of stack. (This despite the fact that every last chip has oodles of memory these days, and techniques for extending the stack have been known for decades.) So.... There is a fudge, triggered by defining NO_RECURSE, which avoids recursive calls by keeping local variables that need to be preserved in blocks of memory obtained from malloc() instead instead of on the stack. Macros are used to achieve this so that the actual code doesn't look very different to what it always used to. The original heap-recursive code used longjmp(). However, it seems that this can be very slow on some operating systems. Following a suggestion from Stan Switzer, the use of longjmp() has been abolished, at the cost of having to provide a unique number for each call to RMATCH. There is no way of generating a sequence of numbers at compile time in C. I have given them names, to make them stand out more clearly. Crude tests on x86 Linux show a small speedup of around 5-8%. However, on FreeBSD, avoiding longjmp() more than halves the time taken to run the standard tests. Furthermore, not using longjmp() means that local dynamic variables don't have indeterminate values; this has meant that the frame size can be reduced because the result can be "passed back" by straight setting of the variable instead of being passed in the frame. **************************************************************************** ***************************************************************************/ /* Numbers for RMATCH calls. When this list is changed, the code at HEAP_RETURN below must be updated in sync. */ enum { RM1=1, RM2, RM3, RM4, RM5, RM6, RM7, RM8, RM9, RM10, RM11, RM12, RM13, RM14, RM15, RM16, RM17, RM18, RM19, RM20, RM21, RM22, RM23, RM24, RM25, RM26, RM27, RM28, RM29, RM30, RM31, RM32, RM33, RM34, RM35, RM36, RM37, RM38, RM39, RM40, RM41, RM42, RM43, RM44, RM45, RM46, RM47, RM48, RM49, RM50, RM51, RM52, RM53, RM54 }; /* These versions of the macros use the stack, as normal. There are debugging versions and production versions. Note that the "rw" argument of RMATCH isn't actuall used in this definition. */ #ifndef NO_RECURSE #define REGISTER register #ifdef DEBUG #define RMATCH(ra,rb,rc,rd,re,rf,rg,rw) \ { \ printf("match() called in line %d\n", __LINE__); \ rrc = match(ra,rb,mstart,rc,rd,re,rf,rg,rdepth+1); \ printf("to line %d\n", __LINE__); \ } #define RRETURN(ra) \ { \ printf("match() returned %d from line %d ", ra, __LINE__); \ return ra; \ } #else #define RMATCH(ra,rb,rc,rd,re,rf,rg,rw) \ rrc = match(ra,rb,mstart,rc,rd,re,rf,rg,rdepth+1) #define RRETURN(ra) return ra #endif #else /* These versions of the macros manage a private stack on the heap. Note that the "rd" argument of RMATCH isn't actually used in this definition. It's the md argument of match(), which never changes. */ #define REGISTER #define RMATCH(ra,rb,rc,rd,re,rf,rg,rw)\ {\ heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\ frame->Xwhere = rw; \ newframe->Xeptr = ra;\ newframe->Xecode = rb;\ newframe->Xmstart = mstart;\ newframe->Xoffset_top = rc;\ newframe->Xims = re;\ newframe->Xeptrb = rf;\ newframe->Xflags = rg;\ newframe->Xrdepth = frame->Xrdepth + 1;\ newframe->Xprevframe = frame;\ frame = newframe;\ DPRINTF(("restarting from line %d\n", __LINE__));\ goto HEAP_RECURSE;\ L_##rw:\ DPRINTF(("jumped back to line %d\n", __LINE__));\ } #define RRETURN(ra)\ {\ heapframe *newframe = frame;\ frame = newframe->Xprevframe;\ (pcre_stack_free)(newframe);\ if (frame != NULL)\ {\ rrc = ra;\ goto HEAP_RETURN;\ }\ return ra;\ } /* Structure for remembering the local variables in a private frame */ typedef struct heapframe { struct heapframe *Xprevframe; /* Function arguments that may change */ const uschar *Xeptr; const uschar *Xecode; const uschar *Xmstart; int Xoffset_top; long int Xims; eptrblock *Xeptrb; int Xflags; unsigned int Xrdepth; /* Function local variables */ const uschar *Xcallpat; const uschar *Xcharptr; const uschar *Xdata; const uschar *Xnext; const uschar *Xpp; const uschar *Xprev; const uschar *Xsaved_eptr; recursion_info Xnew_recursive; BOOL Xcur_is_word; BOOL Xcondition; BOOL Xprev_is_word; unsigned long int Xoriginal_ims; #ifdef SUPPORT_UCP int Xprop_type; int Xprop_value; int Xprop_fail_result; int Xprop_category; int Xprop_chartype; int Xprop_script; int Xoclength; uschar Xocchars[8]; #endif int Xctype; unsigned int Xfc; int Xfi; int Xlength; int Xmax; int Xmin; int Xnumber; int Xoffset; int Xop; int Xsave_capture_last; int Xsave_offset1, Xsave_offset2, Xsave_offset3; int Xstacksave[REC_STACK_SAVE_MAX]; eptrblock Xnewptrb; /* Where to jump back to */ int Xwhere; } heapframe; #endif /*************************************************************************** ***************************************************************************/ /************************************************* * Match from current position * *************************************************/ /* This function is called recursively in many circumstances. Whenever it returns a negative (error) response, the outer incarnation must also return the same response. Performance note: It might be tempting to extract commonly used fields from the md structure (e.g. utf8, end_subject) into individual variables to improve performance. Tests using gcc on a SPARC disproved this; in the first case, it made performance worse. Arguments: eptr pointer to current character in subject ecode pointer to current position in compiled code mstart pointer to the current match start position (can be modified by encountering \K) offset_top current top pointer md pointer to "static" info for the match ims current /i, /m, and /s options eptrb pointer to chain of blocks containing eptr at start of brackets - for testing for empty matches flags can contain match_condassert - this is an assertion condition match_cbegroup - this is the start of an unlimited repeat group that can match an empty string rdepth the recursion depth Returns: MATCH_MATCH if matched ) these values are >= 0 MATCH_NOMATCH if failed to match ) a negative PCRE_ERROR_xxx value if aborted by an error condition (e.g. stopped by repeated call or recursion limit) */ static int match(REGISTER USPTR eptr, REGISTER const uschar *ecode, const uschar *mstart, int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb, int flags, unsigned int rdepth) { /* These variables do not need to be preserved over recursion in this function, so they can be ordinary variables in all cases. Mark some of them with "register" because they are used a lot in loops. */ register int rrc; /* Returns from recursive calls */ register int i; /* Used for loops not involving calls to RMATCH() */ register unsigned int c; /* Character values not kept over RMATCH() calls */ register BOOL utf8; /* Local copy of UTF-8 flag for speed */ BOOL minimize, possessive; /* Quantifier options */ /* When recursion is not being used, all "local" variables that have to be preserved over calls to RMATCH() are part of a "frame" which is obtained from heap storage. Set up the top-level frame here; others are obtained from the heap whenever RMATCH() does a "recursion". See the macro definitions above. */ #ifdef NO_RECURSE heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe)); frame->Xprevframe = NULL; /* Marks the top level */ /* Copy in the original argument variables */ frame->Xeptr = eptr; frame->Xecode = ecode; frame->Xmstart = mstart; frame->Xoffset_top = offset_top; frame->Xims = ims; frame->Xeptrb = eptrb; frame->Xflags = flags; frame->Xrdepth = rdepth; /* This is where control jumps back to to effect "recursion" */ HEAP_RECURSE: /* Macros make the argument variables come from the current frame */ #define eptr frame->Xeptr #define ecode frame->Xecode #define mstart frame->Xmstart #define offset_top frame->Xoffset_top #define ims frame->Xims #define eptrb frame->Xeptrb #define flags frame->Xflags #define rdepth frame->Xrdepth /* Ditto for the local variables */ #ifdef SUPPORT_UTF8 #define charptr frame->Xcharptr #endif #define callpat frame->Xcallpat #define data frame->Xdata #define next frame->Xnext #define pp frame->Xpp #define prev frame->Xprev #define saved_eptr frame->Xsaved_eptr #define new_recursive frame->Xnew_recursive #define cur_is_word frame->Xcur_is_word #define condition frame->Xcondition #define prev_is_word frame->Xprev_is_word #define original_ims frame->Xoriginal_ims #ifdef SUPPORT_UCP #define prop_type frame->Xprop_type #define prop_value frame->Xprop_value #define prop_fail_result frame->Xprop_fail_result #define prop_category frame->Xprop_category #define prop_chartype frame->Xprop_chartype #define prop_script frame->Xprop_script #define oclength frame->Xoclength #define occhars frame->Xocchars #endif #define ctype frame->Xctype #define fc frame->Xfc #define fi frame->Xfi #define length frame->Xlength #define max frame->Xmax #define min frame->Xmin #define number frame->Xnumber #define offset frame->Xoffset #define op frame->Xop #define save_capture_last frame->Xsave_capture_last #define save_offset1 frame->Xsave_offset1 #define save_offset2 frame->Xsave_offset2 #define save_offset3 frame->Xsave_offset3 #define stacksave frame->Xstacksave #define newptrb frame->Xnewptrb /* When recursion is being used, local variables are allocated on the stack and get preserved during recursion in the normal way. In this environment, fi and i, and fc and c, can be the same variables. */ #else /* NO_RECURSE not defined */ #define fi i #define fc c #ifdef SUPPORT_UTF8 /* Many of these variables are used only */ const uschar *charptr; /* in small blocks of the code. My normal */ #endif /* style of coding would have declared */ const uschar *callpat; /* them within each of those blocks. */ const uschar *data; /* However, in order to accommodate the */ const uschar *next; /* version of this code that uses an */ USPTR pp; /* external "stack" implemented on the */ const uschar *prev; /* heap, it is easier to declare them all */ USPTR saved_eptr; /* here, so the declarations can be cut */ /* out in a block. The only declarations */ recursion_info new_recursive; /* within blocks below are for variables */ /* that do not have to be preserved over */ BOOL cur_is_word; /* a recursive call to RMATCH(). */ BOOL condition; BOOL prev_is_word; unsigned long int original_ims; #ifdef SUPPORT_UCP int prop_type; int prop_value; int prop_fail_result; int prop_category; int prop_chartype; int prop_script; int oclength; uschar occhars[8]; #endif int ctype; int length; int max; int min; int number; int offset; int op; int save_capture_last; int save_offset1, save_offset2, save_offset3; int stacksave[REC_STACK_SAVE_MAX]; eptrblock newptrb; #endif /* NO_RECURSE */ /* These statements are here to stop the compiler complaining about unitialized variables. */ #ifdef SUPPORT_UCP prop_value = 0; prop_fail_result = 0; #endif /* This label is used for tail recursion, which is used in a few cases even when NO_RECURSE is not defined, in order to reduce the amount of stack that is used. Thanks to Ian Taylor for noticing this possibility and sending the original patch. */ TAIL_RECURSE: /* OK, now we can get on with the real code of the function. Recursive calls are specified by the macro RMATCH and RRETURN is used to return. When NO_RECURSE is *not* defined, these just turn into a recursive call to match() and a "return", respectively (possibly with some debugging if DEBUG is defined). However, RMATCH isn't like a function call because it's quite a complicated macro. It has to be used in one particular way. This shouldn't, however, impact performance when true recursion is being used. */ #ifdef SUPPORT_UTF8 utf8 = md->utf8; /* Local copy of the flag */ #else utf8 = FALSE; #endif /* First check that we haven't called match() too many times, or that we haven't exceeded the recursive call limit. */ if (md->match_call_count++ >= md->match_limit) RRETURN(PCRE_ERROR_MATCHLIMIT); if (rdepth >= md->match_limit_recursion) RRETURN(PCRE_ERROR_RECURSIONLIMIT); original_ims = ims; /* Save for resetting on ')' */ /* At the start of a group with an unlimited repeat that may match an empty string, the match_cbegroup flag is set. When this is the case, add the current subject pointer to the chain of such remembered pointers, to be checked when we hit the closing ket, in order to break infinite loops that match no characters. When match() is called in other circumstances, don't add to the chain. The match_cbegroup flag must NOT be used with tail recursion, because the memory block that is used is on the stack, so a new one may be required for each match(). */ if ((flags & match_cbegroup) != 0) { newptrb.epb_saved_eptr = eptr; newptrb.epb_prev = eptrb; eptrb = &newptrb; } /* Now start processing the opcodes. */ for (;;) { minimize = possessive = FALSE; op = *ecode; /* For partial matching, remember if we ever hit the end of the subject after matching at least one subject character. */ if (md->partial && eptr >= md->end_subject && eptr > mstart) md->hitend = TRUE; switch(op) { case OP_FAIL: RRETURN(MATCH_NOMATCH); case OP_PRUNE: RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, eptrb, flags, RM51); if (rrc != MATCH_NOMATCH) RRETURN(rrc); RRETURN(MATCH_PRUNE); case OP_COMMIT: RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, eptrb, flags, RM52); if (rrc != MATCH_NOMATCH) RRETURN(rrc); RRETURN(MATCH_COMMIT); case OP_SKIP: RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, eptrb, flags, RM53); if (rrc != MATCH_NOMATCH) RRETURN(rrc); md->start_match_ptr = eptr; /* Pass back current position */ RRETURN(MATCH_SKIP); case OP_THEN: RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, eptrb, flags, RM54); if (rrc != MATCH_NOMATCH) RRETURN(rrc); RRETURN(MATCH_THEN); /* Handle a capturing bracket. If there is space in the offset vector, save the current subject position in the working slot at the top of the vector. We mustn't change the current values of the data slot, because they may be set from a previous iteration of this group, and be referred to by a reference inside the group. If the bracket fails to match, we need to restore this value and also the values of the final offsets, in case they were set by a previous iteration of the same bracket. If there isn't enough space in the offset vector, treat this as if it were a non-capturing bracket. Don't worry about setting the flag for the error case here; that is handled in the code for KET. */ case OP_CBRA: case OP_SCBRA: number = GET2(ecode, 1+LINK_SIZE); offset = number << 1; #ifdef DEBUG printf("start bracket %d\n", number); printf("subject="); pchars(eptr, 16, TRUE, md); printf("\n"); #endif if (offset < md->offset_max) { save_offset1 = md->offset_vector[offset]; save_offset2 = md->offset_vector[offset+1]; save_offset3 = md->offset_vector[md->offset_end - number]; save_capture_last = md->capture_last; DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3)); md->offset_vector[md->offset_end - number] = eptr - md->start_subject; flags = (op == OP_SCBRA)? match_cbegroup : 0; do { RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, eptrb, flags, RM1); if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); md->capture_last = save_capture_last; ecode += GET(ecode, 1); } while (*ecode == OP_ALT); DPRINTF(("bracket %d failed\n", number)); md->offset_vector[offset] = save_offset1; md->offset_vector[offset+1] = save_offset2; md->offset_vector[md->offset_end - number] = save_offset3; RRETURN(MATCH_NOMATCH); } /* FALL THROUGH ... Insufficient room for saving captured contents. Treat as a non-capturing bracket. */ /* VVVVVVVVVVVVVVVVVVVVVVVVV */ /* VVVVVVVVVVVVVVVVVVVVVVVVV */ DPRINTF(("insufficient capture room: treat as non-capturing\n")); /* VVVVVVVVVVVVVVVVVVVVVVVVV */ /* VVVVVVVVVVVVVVVVVVVVVVVVV */ /* Non-capturing bracket. Loop for all the alternatives. When we get to the final alternative within the brackets, we would return the result of a recursive call to match() whatever happened. We can reduce stack usage by turning this into a tail recursion, except in the case when match_cbegroup is set.*/ case OP_BRA: case OP_SBRA: DPRINTF(("start non-capturing bracket\n")); flags = (op >= OP_SBRA)? match_cbegroup : 0; for (;;) { if (ecode[GET(ecode, 1)] != OP_ALT) /* Final alternative */ { if (flags == 0) /* Not a possibly empty group */ { ecode += _pcre_OP_lengths[*ecode]; DPRINTF(("bracket 0 tail recursion\n")); goto TAIL_RECURSE; } /* Possibly empty group; can't use tail recursion. */ RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, eptrb, flags, RM48); RRETURN(rrc); } /* For non-final alternatives, continue the loop for a NOMATCH result; otherwise return. */ RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, eptrb, flags, RM2); if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); ecode += GET(ecode, 1); } /* Control never reaches here. */ /* Conditional group: compilation checked that there are no more than two branches. If the condition is false, skipping the first branch takes us past the end if there is only one branch, but that's OK because that is exactly what going to the ket would do. As there is only one branch to be obeyed, we can use tail recursion to avoid using another stack frame. */ case OP_COND: case OP_SCOND: if (ecode[LINK_SIZE+1] == OP_RREF) /* Recursion test */ { offset = GET2(ecode, LINK_SIZE + 2); /* Recursion group number*/ condition = md->recursive != NULL && (offset == RREF_ANY || offset == md->recursive->group_num); ecode += condition? 3 : GET(ecode, 1); } else if (ecode[LINK_SIZE+1] == OP_CREF) /* Group used test */ { offset = GET2(ecode, LINK_SIZE+2) << 1; /* Doubled ref number */ condition = offset < offset_top && md->offset_vector[offset] >= 0; ecode += condition? 3 : GET(ecode, 1); } else if (ecode[LINK_SIZE+1] == OP_DEF) /* DEFINE - always false */ { condition = FALSE; ecode += GET(ecode, 1); } /* The condition is an assertion. Call match() to evaluate it - setting the final argument match_condassert causes it to stop at the end of an assertion. */ else { RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL, match_condassert, RM3); if (rrc == MATCH_MATCH) { condition = TRUE; ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE + 2); while (*ecode == OP_ALT) ecode += GET(ecode, 1); } else if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) { RRETURN(rrc); /* Need braces because of following else */ } else { condition = FALSE; ecode += GET(ecode, 1); } } /* We are now at the branch that is to be obeyed. As there is only one, we can use tail recursion to avoid using another stack frame, except when match_cbegroup is required for an unlimited repeat of a possibly empty group. If the second alternative doesn't exist, we can just plough on. */ if (condition || *ecode == OP_ALT) { ecode += 1 + LINK_SIZE; if (op == OP_SCOND) /* Possibly empty group */ { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, match_cbegroup, RM49); RRETURN(rrc); } else /* Group must match something */ { flags = 0; goto TAIL_RECURSE; } } else /* Condition false & no 2nd alternative */ { ecode += 1 + LINK_SIZE; } break; /* End of the pattern, either real or forced. If we are in a top-level recursion, we should restore the offsets appropriately and continue from after the call. */ case OP_ACCEPT: case OP_END: if (md->recursive != NULL && md->recursive->group_num == 0) { recursion_info *rec = md->recursive; DPRINTF(("End of pattern in a (?0) recursion\n")); md->recursive = rec->prevrec; memmove(md->offset_vector, rec->offset_save, rec->saved_max * sizeof(int)); mstart = rec->save_start; ims = original_ims; ecode = rec->after_call; break; } /* Otherwise, if PCRE_NOTEMPTY is set, fail if we have matched an empty string - backtracking will then try other alternatives, if any. */ if (md->notempty && eptr == mstart) RRETURN(MATCH_NOMATCH); md->end_match_ptr = eptr; /* Record where we ended */ md->end_offset_top = offset_top; /* and how many extracts were taken */ md->start_match_ptr = mstart; /* and the start (\K can modify) */ RRETURN(MATCH_MATCH); /* Change option settings */ case OP_OPT: ims = ecode[1]; ecode += 2; DPRINTF(("ims set to %02lx\n", ims)); break; /* Assertion brackets. Check the alternative branches in turn - the matching won't pass the KET for an assertion. If any one branch matches, the assertion is true. Lookbehind assertions have an OP_REVERSE item at the start of each branch to move the current point backwards, so the code at this level is identical to the lookahead case. */ case OP_ASSERT: case OP_ASSERTBACK: do { RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL, 0, RM4); if (rrc == MATCH_MATCH) break; if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); ecode += GET(ecode, 1); } while (*ecode == OP_ALT); if (*ecode == OP_KET) RRETURN(MATCH_NOMATCH); /* If checking an assertion for a condition, return MATCH_MATCH. */ if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH); /* Continue from after the assertion, updating the offsets high water mark, since extracts may have been taken during the assertion. */ do ecode += GET(ecode,1); while (*ecode == OP_ALT); ecode += 1 + LINK_SIZE; offset_top = md->end_offset_top; continue; /* Negative assertion: all branches must fail to match */ case OP_ASSERT_NOT: case OP_ASSERTBACK_NOT: do { RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL, 0, RM5); if (rrc == MATCH_MATCH) RRETURN(MATCH_NOMATCH); if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); ecode += GET(ecode,1); } while (*ecode == OP_ALT); if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH); ecode += 1 + LINK_SIZE; continue; /* Move the subject pointer back. This occurs only at the start of each branch of a lookbehind assertion. If we are too close to the start to move back, this match function fails. When working with UTF-8 we move back a number of characters, not bytes. */ case OP_REVERSE: #ifdef SUPPORT_UTF8 if (utf8) { i = GET(ecode, 1); while (i-- > 0) { eptr--; if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH); BACKCHAR(eptr); } } else #endif /* No UTF-8 support, or not in UTF-8 mode: count is byte count */ { eptr -= GET(ecode, 1); if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH); } /* Skip to next op code */ ecode += 1 + LINK_SIZE; break; /* The callout item calls an external function, if one is provided, passing details of the match so far. This is mainly for debugging, though the function is able to force a failure. */ case OP_CALLOUT: if (pcre_callout != NULL) { pcre_callout_block cb; cb.version = 1; /* Version 1 of the callout block */ cb.callout_number = ecode[1]; cb.offset_vector = md->offset_vector; cb.subject = (PCRE_SPTR)md->start_subject; cb.subject_length = md->end_subject - md->start_subject; cb.start_match = mstart - md->start_subject; cb.current_position = eptr - md->start_subject; cb.pattern_position = GET(ecode, 2); cb.next_item_length = GET(ecode, 2 + LINK_SIZE); cb.capture_top = offset_top/2; cb.capture_last = md->capture_last; cb.callout_data = md->callout_data; if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH); if (rrc < 0) RRETURN(rrc); } ecode += 2 + 2*LINK_SIZE; break; /* Recursion either matches the current regex, or some subexpression. The offset data is the offset to the starting bracket from the start of the whole pattern. (This is so that it works from duplicated subpatterns.) If there are any capturing brackets started but not finished, we have to save their starting points and reinstate them after the recursion. However, we don't know how many such there are (offset_top records the completed total) so we just have to save all the potential data. There may be up to 65535 such values, which is too large to put on the stack, but using malloc for small numbers seems expensive. As a compromise, the stack is used when there are no more than REC_STACK_SAVE_MAX values to store; otherwise malloc is used. A problem is what to do if the malloc fails ... there is no way of returning to the top level with an error. Save the top REC_STACK_SAVE_MAX values on the stack, and accept that the rest may be wrong. There are also other values that have to be saved. We use a chained sequence of blocks that actually live on the stack. Thanks to Robin Houston for the original version of this logic. */ case OP_RECURSE: { callpat = md->start_code + GET(ecode, 1); new_recursive.group_num = (callpat == md->start_code)? 0 : GET2(callpat, 1 + LINK_SIZE); /* Add to "recursing stack" */ new_recursive.prevrec = md->recursive; md->recursive = &new_recursive; /* Find where to continue from afterwards */ ecode += 1 + LINK_SIZE; new_recursive.after_call = ecode; /* Now save the offset data. */ new_recursive.saved_max = md->offset_end; if (new_recursive.saved_max <= REC_STACK_SAVE_MAX) new_recursive.offset_save = stacksave; else { new_recursive.offset_save = (int *)(pcre_malloc)(new_recursive.saved_max * sizeof(int)); if (new_recursive.offset_save == NULL) RRETURN(PCRE_ERROR_NOMEMORY); } memcpy(new_recursive.offset_save, md->offset_vector, new_recursive.saved_max * sizeof(int)); new_recursive.save_start = mstart; mstart = eptr; /* OK, now we can do the recursion. For each top-level alternative we restore the offset and recursion data. */ DPRINTF(("Recursing into group %d\n", new_recursive.group_num)); flags = (*callpat >= OP_SBRA)? match_cbegroup : 0; do { RMATCH(eptr, callpat + _pcre_OP_lengths[*callpat], offset_top, md, ims, eptrb, flags, RM6); if (rrc == MATCH_MATCH) { DPRINTF(("Recursion matched\n")); md->recursive = new_recursive.prevrec; if (new_recursive.offset_save != stacksave) (pcre_free)(new_recursive.offset_save); RRETURN(MATCH_MATCH); } else if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) { DPRINTF(("Recursion gave error %d\n", rrc)); RRETURN(rrc); } md->recursive = &new_recursive; memcpy(md->offset_vector, new_recursive.offset_save, new_recursive.saved_max * sizeof(int)); callpat += GET(callpat, 1); } while (*callpat == OP_ALT); DPRINTF(("Recursion didn't match\n")); md->recursive = new_recursive.prevrec; if (new_recursive.offset_save != stacksave) (pcre_free)(new_recursive.offset_save); RRETURN(MATCH_NOMATCH); } /* Control never reaches here */ /* "Once" brackets are like assertion brackets except that after a match, the point in the subject string is not moved back. Thus there can never be a move back into the brackets. Friedl calls these "atomic" subpatterns. Check the alternative branches in turn - the matching won't pass the KET for this kind of subpattern. If any one branch matches, we carry on as at the end of a normal bracket, leaving the subject pointer. */ case OP_ONCE: prev = ecode; saved_eptr = eptr; do { RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, 0, RM7); if (rrc == MATCH_MATCH) break; if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); ecode += GET(ecode,1); } while (*ecode == OP_ALT); /* If hit the end of the group (which could be repeated), fail */ if (*ecode != OP_ONCE && *ecode != OP_ALT) RRETURN(MATCH_NOMATCH); /* Continue as from after the assertion, updating the offsets high water mark, since extracts may have been taken. */ do ecode += GET(ecode, 1); while (*ecode == OP_ALT); offset_top = md->end_offset_top; eptr = md->end_match_ptr; /* For a non-repeating ket, just continue at this level. This also happens for a repeating ket if no characters were matched in the group. This is the forcible breaking of infinite loops as implemented in Perl 5.005. If there is an options reset, it will get obeyed in the normal course of events. */ if (*ecode == OP_KET || eptr == saved_eptr) { ecode += 1+LINK_SIZE; break; } /* The repeating kets try the rest of the pattern or restart from the preceding bracket, in the appropriate order. The second "call" of match() uses tail recursion, to avoid using another stack frame. We need to reset any options that changed within the bracket before re-running it, so check the next opcode. */ if (ecode[1+LINK_SIZE] == OP_OPT) { ims = (ims & ~PCRE_IMS) | ecode[4]; DPRINTF(("ims set to %02lx at group repeat\n", ims)); } if (*ecode == OP_KETRMIN) { RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, 0, RM8); if (rrc != MATCH_NOMATCH) RRETURN(rrc); ecode = prev; flags = 0; goto TAIL_RECURSE; } else /* OP_KETRMAX */ { RMATCH(eptr, prev, offset_top, md, ims, eptrb, match_cbegroup, RM9); if (rrc != MATCH_NOMATCH) RRETURN(rrc); ecode += 1 + LINK_SIZE; flags = 0; goto TAIL_RECURSE; } /* Control never gets here */ /* An alternation is the end of a branch; scan along to find the end of the bracketed group and go to there. */ case OP_ALT: do ecode += GET(ecode,1); while (*ecode == OP_ALT); break; /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating that it may occur zero times. It may repeat infinitely, or not at all - i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper repeat limits are compiled as a number of copies, with the optional ones preceded by BRAZERO or BRAMINZERO. */ case OP_BRAZERO: { next = ecode+1; RMATCH(eptr, next, offset_top, md, ims, eptrb, 0, RM10); if (rrc != MATCH_NOMATCH) RRETURN(rrc); do next += GET(next,1); while (*next == OP_ALT); ecode = next + 1 + LINK_SIZE; } break; case OP_BRAMINZERO: { next = ecode+1; do next += GET(next, 1); while (*next == OP_ALT); RMATCH(eptr, next + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0, RM11); if (rrc != MATCH_NOMATCH) RRETURN(rrc); ecode++; } break; /* End of a group, repeated or non-repeating. */ case OP_KET: case OP_KETRMIN: case OP_KETRMAX: prev = ecode - GET(ecode, 1); /* If this was a group that remembered the subject start, in order to break infinite repeats of empty string matches, retrieve the subject start from the chain. Otherwise, set it NULL. */ if (*prev >= OP_SBRA) { saved_eptr = eptrb->epb_saved_eptr; /* Value at start of group */ eptrb = eptrb->epb_prev; /* Backup to previous group */ } else saved_eptr = NULL; /* If we are at the end of an assertion group, stop matching and return MATCH_MATCH, but record the current high water mark for use by positive assertions. Do this also for the "once" (atomic) groups. */ if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT || *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT || *prev == OP_ONCE) { md->end_match_ptr = eptr; /* For ONCE */ md->end_offset_top = offset_top; RRETURN(MATCH_MATCH); } /* For capturing groups we have to check the group number back at the start and if necessary complete handling an extraction by setting the offsets and bumping the high water mark. Note that whole-pattern recursion is coded as a recurse into group 0, so it won't be picked up here. Instead, we catch it when the OP_END is reached. Other recursion is handled here. */ if (*prev == OP_CBRA || *prev == OP_SCBRA) { number = GET2(prev, 1+LINK_SIZE); offset = number << 1; #ifdef DEBUG printf("end bracket %d", number); printf("\n"); #endif md->capture_last = number; if (offset >= md->offset_max) md->offset_overflow = TRUE; else { md->offset_vector[offset] = md->offset_vector[md->offset_end - number]; md->offset_vector[offset+1] = eptr - md->start_subject; if (offset_top <= offset) offset_top = offset + 2; } /* Handle a recursively called group. Restore the offsets appropriately and continue from after the call. */ if (md->recursive != NULL && md->recursive->group_num == number) { recursion_info *rec = md->recursive; DPRINTF(("Recursion (%d) succeeded - continuing\n", number)); md->recursive = rec->prevrec; mstart = rec->save_start; memcpy(md->offset_vector, rec->offset_save, rec->saved_max * sizeof(int)); ecode = rec->after_call; ims = original_ims; break; } } /* For both capturing and non-capturing groups, reset the value of the ims flags, in case they got changed during the group. */ ims = original_ims; DPRINTF(("ims reset to %02lx\n", ims)); /* For a non-repeating ket, just continue at this level. This also happens for a repeating ket if no characters were matched in the group. This is the forcible breaking of infinite loops as implemented in Perl 5.005. If there is an options reset, it will get obeyed in the normal course of events. */ if (*ecode == OP_KET || eptr == saved_eptr) { ecode += 1 + LINK_SIZE; break; } /* The repeating kets try the rest of the pattern or restart from the preceding bracket, in the appropriate order. In the second case, we can use tail recursion to avoid using another stack frame, unless we have an unlimited repeat of a group that can match an empty string. */ flags = (*prev >= OP_SBRA)? match_cbegroup : 0; if (*ecode == OP_KETRMIN) { RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, 0, RM12); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (flags != 0) /* Could match an empty string */ { RMATCH(eptr, prev, offset_top, md, ims, eptrb, flags, RM50); RRETURN(rrc); } ecode = prev; goto TAIL_RECURSE; } else /* OP_KETRMAX */ { RMATCH(eptr, prev, offset_top, md, ims, eptrb, flags, RM13); if (rrc != MATCH_NOMATCH) RRETURN(rrc); ecode += 1 + LINK_SIZE; flags = 0; goto TAIL_RECURSE; } /* Control never gets here */ /* Start of subject unless notbol, or after internal newline if multiline */ case OP_CIRC: if (md->notbol && eptr == md->start_subject) RRETURN(MATCH_NOMATCH); if ((ims & PCRE_MULTILINE) != 0) { if (eptr != md->start_subject && (eptr == md->end_subject || !WAS_NEWLINE(eptr))) RRETURN(MATCH_NOMATCH); ecode++; break; } /* ... else fall through */ /* Start of subject assertion */ case OP_SOD: if (eptr != md->start_subject) RRETURN(MATCH_NOMATCH); ecode++; break; /* Start of match assertion */ case OP_SOM: if (eptr != md->start_subject + md->start_offset) RRETURN(MATCH_NOMATCH); ecode++; break; /* Reset the start of match point */ case OP_SET_SOM: mstart = eptr; ecode++; break; /* Assert before internal newline if multiline, or before a terminating newline unless endonly is set, else end of subject unless noteol is set. */ case OP_DOLL: if ((ims & PCRE_MULTILINE) != 0) { if (eptr < md->end_subject) { if (!IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); } else { if (md->noteol) RRETURN(MATCH_NOMATCH); } ecode++; break; } else { if (md->noteol) RRETURN(MATCH_NOMATCH); if (!md->endonly) { if (eptr != md->end_subject && (!IS_NEWLINE(eptr) || eptr != md->end_subject - md->nllen)) RRETURN(MATCH_NOMATCH); ecode++; break; } } /* ... else fall through for endonly */ /* End of subject assertion (\z) */ case OP_EOD: if (eptr < md->end_subject) RRETURN(MATCH_NOMATCH); ecode++; break; /* End of subject or ending \n assertion (\Z) */ case OP_EODN: if (eptr != md->end_subject && (!IS_NEWLINE(eptr) || eptr != md->end_subject - md->nllen)) RRETURN(MATCH_NOMATCH); ecode++; break; /* Word boundary assertions */ case OP_NOT_WORD_BOUNDARY: case OP_WORD_BOUNDARY: { /* Find out if the previous and current characters are "word" characters. It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to be "non-word" characters. */ #ifdef SUPPORT_UTF8 if (utf8) { if (eptr == md->start_subject) prev_is_word = FALSE; else { const uschar *lastptr = eptr - 1; while((*lastptr & 0xc0) == 0x80) lastptr--; GETCHAR(c, lastptr); prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0; } if (eptr >= md->end_subject) cur_is_word = FALSE; else { GETCHAR(c, eptr); cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0; } } else #endif /* More streamlined when not in UTF-8 mode */ { prev_is_word = (eptr != md->start_subject) && ((md->ctypes[eptr[-1]] & ctype_word) != 0); cur_is_word = (eptr < md->end_subject) && ((md->ctypes[*eptr] & ctype_word) != 0); } /* Now see if the situation is what we want */ if ((*ecode++ == OP_WORD_BOUNDARY)? cur_is_word == prev_is_word : cur_is_word != prev_is_word) RRETURN(MATCH_NOMATCH); } break; /* Match a single character type; inline for speed */ case OP_ANY: if ((ims & PCRE_DOTALL) == 0) { if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); } if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH); if (utf8) while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; ecode++; break; /* Match a single byte, even in UTF-8 mode. This opcode really does match any byte, even newline, independent of the setting of PCRE_DOTALL. */ case OP_ANYBYTE: if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH); ecode++; break; case OP_NOT_DIGIT: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); if ( #ifdef SUPPORT_UTF8 c < 256 && #endif (md->ctypes[c] & ctype_digit) != 0 ) RRETURN(MATCH_NOMATCH); ecode++; break; case OP_DIGIT: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); if ( #ifdef SUPPORT_UTF8 c >= 256 || #endif (md->ctypes[c] & ctype_digit) == 0 ) RRETURN(MATCH_NOMATCH); ecode++; break; case OP_NOT_WHITESPACE: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); if ( #ifdef SUPPORT_UTF8 c < 256 && #endif (md->ctypes[c] & ctype_space) != 0 ) RRETURN(MATCH_NOMATCH); ecode++; break; case OP_WHITESPACE: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); if ( #ifdef SUPPORT_UTF8 c >= 256 || #endif (md->ctypes[c] & ctype_space) == 0 ) RRETURN(MATCH_NOMATCH); ecode++; break; case OP_NOT_WORDCHAR: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); if ( #ifdef SUPPORT_UTF8 c < 256 && #endif (md->ctypes[c] & ctype_word) != 0 ) RRETURN(MATCH_NOMATCH); ecode++; break; case OP_WORDCHAR: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); if ( #ifdef SUPPORT_UTF8 c >= 256 || #endif (md->ctypes[c] & ctype_word) == 0 ) RRETURN(MATCH_NOMATCH); ecode++; break; case OP_ANYNL: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x000d: if (eptr < md->end_subject && *eptr == 0x0a) eptr++; break; case 0x000a: break; case 0x000b: case 0x000c: case 0x0085: case 0x2028: case 0x2029: if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH); break; } ecode++; break; case OP_NOT_HSPACE: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); switch(c) { default: break; case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ RRETURN(MATCH_NOMATCH); } ecode++; break; case OP_HSPACE: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ break; } ecode++; break; case OP_NOT_VSPACE: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); switch(c) { default: break; case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ case 0x2028: /* LINE SEPARATOR */ case 0x2029: /* PARAGRAPH SEPARATOR */ RRETURN(MATCH_NOMATCH); } ecode++; break; case OP_VSPACE: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ case 0x2028: /* LINE SEPARATOR */ case 0x2029: /* PARAGRAPH SEPARATOR */ break; } ecode++; break; #ifdef SUPPORT_UCP /* Check the next character by Unicode property. We will get here only if the support is in the binary; otherwise a compile-time error occurs. */ case OP_PROP: case OP_NOTPROP: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); { int chartype, script; int category = _pcre_ucp_findprop(c, &chartype, &script); switch(ecode[1]) { case PT_ANY: if (op == OP_NOTPROP) RRETURN(MATCH_NOMATCH); break; case PT_LAMP: if ((chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt) == (op == OP_NOTPROP)) RRETURN(MATCH_NOMATCH); break; case PT_GC: if ((ecode[2] != category) == (op == OP_PROP)) RRETURN(MATCH_NOMATCH); break; case PT_PC: if ((ecode[2] != chartype) == (op == OP_PROP)) RRETURN(MATCH_NOMATCH); break; case PT_SC: if ((ecode[2] != script) == (op == OP_PROP)) RRETURN(MATCH_NOMATCH); break; default: RRETURN(PCRE_ERROR_INTERNAL); } ecode += 3; } break; /* Match an extended Unicode sequence. We will get here only if the support is in the binary; otherwise a compile-time error occurs. */ case OP_EXTUNI: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); { int chartype, script; int category = _pcre_ucp_findprop(c, &chartype, &script); if (category == ucp_M) RRETURN(MATCH_NOMATCH); while (eptr < md->end_subject) { int len = 1; if (!utf8) c = *eptr; else { GETCHARLEN(c, eptr, len); } category = _pcre_ucp_findprop(c, &chartype, &script); if (category != ucp_M) break; eptr += len; } } ecode++; break; #endif /* Match a back reference, possibly repeatedly. Look past the end of the item to see if there is repeat information following. The code is similar to that for character classes, but repeated for efficiency. Then obey similar code to character type repeats - written out again for speed. However, if the referenced string is the empty string, always treat it as matched, any number of times (otherwise there could be infinite loops). */ case OP_REF: { offset = GET2(ecode, 1) << 1; /* Doubled ref number */ ecode += 3; /* Advance past item */ /* If the reference is unset, set the length to be longer than the amount of subject left; this ensures that every attempt at a match fails. We can't just fail here, because of the possibility of quantifiers with zero minima. */ length = (offset >= offset_top || md->offset_vector[offset] < 0)? md->end_subject - eptr + 1 : md->offset_vector[offset+1] - md->offset_vector[offset]; /* Set up for repetition, or handle the non-repeated case */ switch (*ecode) { case OP_CRSTAR: case OP_CRMINSTAR: case OP_CRPLUS: case OP_CRMINPLUS: case OP_CRQUERY: case OP_CRMINQUERY: c = *ecode++ - OP_CRSTAR; minimize = (c & 1) != 0; min = rep_min[c]; /* Pick up values from tables; */ max = rep_max[c]; /* zero for max => infinity */ if (max == 0) max = INT_MAX; break; case OP_CRRANGE: case OP_CRMINRANGE: minimize = (*ecode == OP_CRMINRANGE); min = GET2(ecode, 1); max = GET2(ecode, 3); if (max == 0) max = INT_MAX; ecode += 5; break; default: /* No repeat follows */ if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH); eptr += length; continue; /* With the main loop */ } /* If the length of the reference is zero, just continue with the main loop. */ if (length == 0) continue; /* First, ensure the minimum number of matches are present. We get back the length of the reference string explicitly rather than passing the address of eptr, so that eptr can be a register variable. */ for (i = 1; i <= min; i++) { if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH); eptr += length; } /* If min = max, continue at the same level without recursion. They are not both allowed to be zero. */ if (min == max) continue; /* If minimizing, keep trying and advancing the pointer */ if (minimize) { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM14); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || !match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH); eptr += length; } /* Control never gets here */ } /* If maximizing, find the longest string and work backwards */ else { pp = eptr; for (i = min; i < max; i++) { if (!match_ref(offset, eptr, length, md, ims)) break; eptr += length; } while (eptr >= pp) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM15); if (rrc != MATCH_NOMATCH) RRETURN(rrc); eptr -= length; } RRETURN(MATCH_NOMATCH); } } /* Control never gets here */ /* Match a bit-mapped character class, possibly repeatedly. This op code is used when all the characters in the class have values in the range 0-255, and either the matching is caseful, or the characters are in the range 0-127 when UTF-8 processing is enabled. The only difference between OP_CLASS and OP_NCLASS occurs when a data character outside the range is encountered. First, look past the end of the item to see if there is repeat information following. Then obey similar code to character type repeats - written out again for speed. */ case OP_NCLASS: case OP_CLASS: { data = ecode + 1; /* Save for matching */ ecode += 33; /* Advance past the item */ switch (*ecode) { case OP_CRSTAR: case OP_CRMINSTAR: case OP_CRPLUS: case OP_CRMINPLUS: case OP_CRQUERY: case OP_CRMINQUERY: c = *ecode++ - OP_CRSTAR; minimize = (c & 1) != 0; min = rep_min[c]; /* Pick up values from tables; */ max = rep_max[c]; /* zero for max => infinity */ if (max == 0) max = INT_MAX; break; case OP_CRRANGE: case OP_CRMINRANGE: minimize = (*ecode == OP_CRMINRANGE); min = GET2(ecode, 1); max = GET2(ecode, 3); if (max == 0) max = INT_MAX; ecode += 5; break; default: /* No repeat follows */ min = max = 1; break; } /* First, ensure the minimum number of matches are present. */ #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); if (c > 255) { if (op == OP_CLASS) RRETURN(MATCH_NOMATCH); } else { if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); } } } else #endif /* Not UTF-8 mode */ { for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); c = *eptr++; if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); } } /* If max == min we can continue with the main loop without the need to recurse. */ if (min == max) continue; /* If minimizing, keep testing the rest of the expression and advancing the pointer while it matches the class. */ if (minimize) { #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM16); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); if (c > 255) { if (op == OP_CLASS) RRETURN(MATCH_NOMATCH); } else { if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); } } } else #endif /* Not UTF-8 mode */ { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM17); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); c = *eptr++; if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH); } } /* Control never gets here */ } /* If maximizing, find the longest possible run, then work backwards. */ else { pp = eptr; #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (c > 255) { if (op == OP_CLASS) break; } else { if ((data[c/8] & (1 << (c&7))) == 0) break; } eptr += len; } for (;;) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM18); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (eptr-- == pp) break; /* Stop if tried at original pos */ BACKCHAR(eptr); } } else #endif /* Not UTF-8 mode */ { for (i = min; i < max; i++) { if (eptr >= md->end_subject) break; c = *eptr; if ((data[c/8] & (1 << (c&7))) == 0) break; eptr++; } while (eptr >= pp) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM19); if (rrc != MATCH_NOMATCH) RRETURN(rrc); eptr--; } } RRETURN(MATCH_NOMATCH); } } /* Control never gets here */ /* Match an extended character class. This opcode is encountered only in UTF-8 mode, because that's the only time it is compiled. */ #ifdef SUPPORT_UTF8 case OP_XCLASS: { data = ecode + 1 + LINK_SIZE; /* Save for matching */ ecode += GET(ecode, 1); /* Advance past the item */ switch (*ecode) { case OP_CRSTAR: case OP_CRMINSTAR: case OP_CRPLUS: case OP_CRMINPLUS: case OP_CRQUERY: case OP_CRMINQUERY: c = *ecode++ - OP_CRSTAR; minimize = (c & 1) != 0; min = rep_min[c]; /* Pick up values from tables; */ max = rep_max[c]; /* zero for max => infinity */ if (max == 0) max = INT_MAX; break; case OP_CRRANGE: case OP_CRMINRANGE: minimize = (*ecode == OP_CRMINRANGE); min = GET2(ecode, 1); max = GET2(ecode, 3); if (max == 0) max = INT_MAX; ecode += 5; break; default: /* No repeat follows */ min = max = 1; break; } /* First, ensure the minimum number of matches are present. */ for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH); } /* If max == min we can continue with the main loop without the need to recurse. */ if (min == max) continue; /* If minimizing, keep testing the rest of the expression and advancing the pointer while it matches the class. */ if (minimize) { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM20); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ } /* If maximizing, find the longest possible run, then work backwards. */ else { pp = eptr; for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (!_pcre_xclass(c, data)) break; eptr += len; } for(;;) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM21); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (eptr-- == pp) break; /* Stop if tried at original pos */ if (utf8) BACKCHAR(eptr); } RRETURN(MATCH_NOMATCH); } /* Control never gets here */ } #endif /* End of XCLASS */ /* Match a single character, casefully */ case OP_CHAR: #ifdef SUPPORT_UTF8 if (utf8) { length = 1; ecode++; GETCHARLEN(fc, ecode, length); if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); while (length-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH); } else #endif /* Non-UTF-8 mode */ { if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH); if (ecode[1] != *eptr++) RRETURN(MATCH_NOMATCH); ecode += 2; } break; /* Match a single character, caselessly */ case OP_CHARNC: #ifdef SUPPORT_UTF8 if (utf8) { length = 1; ecode++; GETCHARLEN(fc, ecode, length); if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); /* If the pattern character's value is < 128, we have only one byte, and can use the fast lookup table. */ if (fc < 128) { if (md->lcc[*ecode++] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); } /* Otherwise we must pick up the subject character */ else { unsigned int dc; GETCHARINC(dc, eptr); ecode += length; /* If we have Unicode property support, we can use it to test the other case of the character, if there is one. */ if (fc != dc) { #ifdef SUPPORT_UCP if (dc != _pcre_ucp_othercase(fc)) #endif RRETURN(MATCH_NOMATCH); } } } else #endif /* SUPPORT_UTF8 */ /* Non-UTF-8 mode */ { if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH); if (md->lcc[ecode[1]] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); ecode += 2; } break; /* Match a single character repeatedly. */ case OP_EXACT: min = max = GET2(ecode, 1); ecode += 3; goto REPEATCHAR; case OP_POSUPTO: possessive = TRUE; /* Fall through */ case OP_UPTO: case OP_MINUPTO: min = 0; max = GET2(ecode, 1); minimize = *ecode == OP_MINUPTO; ecode += 3; goto REPEATCHAR; case OP_POSSTAR: possessive = TRUE; min = 0; max = INT_MAX; ecode++; goto REPEATCHAR; case OP_POSPLUS: possessive = TRUE; min = 1; max = INT_MAX; ecode++; goto REPEATCHAR; case OP_POSQUERY: possessive = TRUE; min = 0; max = 1; ecode++; goto REPEATCHAR; case OP_STAR: case OP_MINSTAR: case OP_PLUS: case OP_MINPLUS: case OP_QUERY: case OP_MINQUERY: c = *ecode++ - OP_STAR; minimize = (c & 1) != 0; min = rep_min[c]; /* Pick up values from tables; */ max = rep_max[c]; /* zero for max => infinity */ if (max == 0) max = INT_MAX; /* Common code for all repeated single-character matches. We can give up quickly if there are fewer than the minimum number of characters left in the subject. */ REPEATCHAR: #ifdef SUPPORT_UTF8 if (utf8) { length = 1; charptr = ecode; GETCHARLEN(fc, ecode, length); if (min * length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); ecode += length; /* Handle multibyte character matching specially here. There is support for caseless matching if UCP support is present. */ if (length > 1) { #ifdef SUPPORT_UCP unsigned int othercase; if ((ims & PCRE_CASELESS) != 0 && (othercase = _pcre_ucp_othercase(fc)) != NOTACHAR) oclength = _pcre_ord2utf8(othercase, occhars); else oclength = 0; #endif /* SUPPORT_UCP */ for (i = 1; i <= min; i++) { if (memcmp(eptr, charptr, length) == 0) eptr += length; #ifdef SUPPORT_UCP /* Need braces because of following else */ else if (oclength == 0) { RRETURN(MATCH_NOMATCH); } else { if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH); eptr += oclength; } #else /* without SUPPORT_UCP */ else { RRETURN(MATCH_NOMATCH); } #endif /* SUPPORT_UCP */ } if (min == max) continue; if (minimize) { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM22); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); if (memcmp(eptr, charptr, length) == 0) eptr += length; #ifdef SUPPORT_UCP /* Need braces because of following else */ else if (oclength == 0) { RRETURN(MATCH_NOMATCH); } else { if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH); eptr += oclength; } #else /* without SUPPORT_UCP */ else { RRETURN (MATCH_NOMATCH); } #endif /* SUPPORT_UCP */ } /* Control never gets here */ } else /* Maximize */ { pp = eptr; for (i = min; i < max; i++) { if (eptr > md->end_subject - length) break; if (memcmp(eptr, charptr, length) == 0) eptr += length; #ifdef SUPPORT_UCP else if (oclength == 0) break; else { if (memcmp(eptr, occhars, oclength) != 0) break; eptr += oclength; } #else /* without SUPPORT_UCP */ else break; #endif /* SUPPORT_UCP */ } if (possessive) continue; for(;;) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM23); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (eptr == pp) RRETURN(MATCH_NOMATCH); #ifdef SUPPORT_UCP eptr--; BACKCHAR(eptr); #else /* without SUPPORT_UCP */ eptr -= length; #endif /* SUPPORT_UCP */ } } /* Control never gets here */ } /* If the length of a UTF-8 character is 1, we fall through here, and obey the code as for non-UTF-8 characters below, though in this case the value of fc will always be < 128. */ } else #endif /* SUPPORT_UTF8 */ /* When not in UTF-8 mode, load a single-byte character. */ { if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); fc = *ecode++; } /* The value of fc at this point is always less than 256, though we may or may not be in UTF-8 mode. The code is duplicated for the caseless and caseful cases, for speed, since matching characters is likely to be quite common. First, ensure the minimum number of matches are present. If min = max, continue at the same level without recursing. Otherwise, if minimizing, keep trying the rest of the expression and advancing one matching character if failing, up to the maximum. Alternatively, if maximizing, find the maximum number of characters and work backwards. */ DPRINTF(("matching %c{%d,%d} against subject %.*s\n", fc, min, max, max, eptr)); if ((ims & PCRE_CASELESS) != 0) { fc = md->lcc[fc]; for (i = 1; i <= min; i++) if (fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); if (min == max) continue; if (minimize) { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM24); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject || fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ } else /* Maximize */ { pp = eptr; for (i = min; i < max; i++) { if (eptr >= md->end_subject || fc != md->lcc[*eptr]) break; eptr++; } if (possessive) continue; while (eptr >= pp) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM25); eptr--; if (rrc != MATCH_NOMATCH) RRETURN(rrc); } RRETURN(MATCH_NOMATCH); } /* Control never gets here */ } /* Caseful comparisons (includes all multi-byte characters) */ else { for (i = 1; i <= min; i++) if (fc != *eptr++) RRETURN(MATCH_NOMATCH); if (min == max) continue; if (minimize) { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM26); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject || fc != *eptr++) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ } else /* Maximize */ { pp = eptr; for (i = min; i < max; i++) { if (eptr >= md->end_subject || fc != *eptr) break; eptr++; } if (possessive) continue; while (eptr >= pp) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM27); eptr--; if (rrc != MATCH_NOMATCH) RRETURN(rrc); } RRETURN(MATCH_NOMATCH); } } /* Control never gets here */ /* Match a negated single one-byte character. The character we are checking can be multibyte. */ case OP_NOT: if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); ecode++; GETCHARINCTEST(c, eptr); if ((ims & PCRE_CASELESS) != 0) { #ifdef SUPPORT_UTF8 if (c < 256) #endif c = md->lcc[c]; if (md->lcc[*ecode++] == c) RRETURN(MATCH_NOMATCH); } else { if (*ecode++ == c) RRETURN(MATCH_NOMATCH); } break; /* Match a negated single one-byte character repeatedly. This is almost a repeat of the code for a repeated single character, but I haven't found a nice way of commoning these up that doesn't require a test of the positive/negative option for each character match. Maybe that wouldn't add very much to the time taken, but character matching *is* what this is all about... */ case OP_NOTEXACT: min = max = GET2(ecode, 1); ecode += 3; goto REPEATNOTCHAR; case OP_NOTUPTO: case OP_NOTMINUPTO: min = 0; max = GET2(ecode, 1); minimize = *ecode == OP_NOTMINUPTO; ecode += 3; goto REPEATNOTCHAR; case OP_NOTPOSSTAR: possessive = TRUE; min = 0; max = INT_MAX; ecode++; goto REPEATNOTCHAR; case OP_NOTPOSPLUS: possessive = TRUE; min = 1; max = INT_MAX; ecode++; goto REPEATNOTCHAR; case OP_NOTPOSQUERY: possessive = TRUE; min = 0; max = 1; ecode++; goto REPEATNOTCHAR; case OP_NOTPOSUPTO: possessive = TRUE; min = 0; max = GET2(ecode, 1); ecode += 3; goto REPEATNOTCHAR; case OP_NOTSTAR: case OP_NOTMINSTAR: case OP_NOTPLUS: case OP_NOTMINPLUS: case OP_NOTQUERY: case OP_NOTMINQUERY: c = *ecode++ - OP_NOTSTAR; minimize = (c & 1) != 0; min = rep_min[c]; /* Pick up values from tables; */ max = rep_max[c]; /* zero for max => infinity */ if (max == 0) max = INT_MAX; /* Common code for all repeated single-byte matches. We can give up quickly if there are fewer than the minimum number of bytes left in the subject. */ REPEATNOTCHAR: if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); fc = *ecode++; /* The code is duplicated for the caseless and caseful cases, for speed, since matching characters is likely to be quite common. First, ensure the minimum number of matches are present. If min = max, continue at the same level without recursing. Otherwise, if minimizing, keep trying the rest of the expression and advancing one matching character if failing, up to the maximum. Alternatively, if maximizing, find the maximum number of characters and work backwards. */ DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", fc, min, max, max, eptr)); if ((ims & PCRE_CASELESS) != 0) { fc = md->lcc[fc]; #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { register unsigned int d; for (i = 1; i <= min; i++) { GETCHARINC(d, eptr); if (d < 256) d = md->lcc[d]; if (fc == d) RRETURN(MATCH_NOMATCH); } } else #endif /* Not UTF-8 mode */ { for (i = 1; i <= min; i++) if (fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); } if (min == max) continue; if (minimize) { #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { register unsigned int d; for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM28); if (rrc != MATCH_NOMATCH) RRETURN(rrc); GETCHARINC(d, eptr); if (d < 256) d = md->lcc[d]; if (fi >= max || eptr >= md->end_subject || fc == d) RRETURN(MATCH_NOMATCH); } } else #endif /* Not UTF-8 mode */ { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM29); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject || fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH); } } /* Control never gets here */ } /* Maximize case */ else { pp = eptr; #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { register unsigned int d; for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(d, eptr, len); if (d < 256) d = md->lcc[d]; if (fc == d) break; eptr += len; } if (possessive) continue; for(;;) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM30); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (eptr-- == pp) break; /* Stop if tried at original pos */ BACKCHAR(eptr); } } else #endif /* Not UTF-8 mode */ { for (i = min; i < max; i++) { if (eptr >= md->end_subject || fc == md->lcc[*eptr]) break; eptr++; } if (possessive) continue; while (eptr >= pp) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM31); if (rrc != MATCH_NOMATCH) RRETURN(rrc); eptr--; } } RRETURN(MATCH_NOMATCH); } /* Control never gets here */ } /* Caseful comparisons */ else { #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { register unsigned int d; for (i = 1; i <= min; i++) { GETCHARINC(d, eptr); if (fc == d) RRETURN(MATCH_NOMATCH); } } else #endif /* Not UTF-8 mode */ { for (i = 1; i <= min; i++) if (fc == *eptr++) RRETURN(MATCH_NOMATCH); } if (min == max) continue; if (minimize) { #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { register unsigned int d; for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM32); if (rrc != MATCH_NOMATCH) RRETURN(rrc); GETCHARINC(d, eptr); if (fi >= max || eptr >= md->end_subject || fc == d) RRETURN(MATCH_NOMATCH); } } else #endif /* Not UTF-8 mode */ { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM33); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject || fc == *eptr++) RRETURN(MATCH_NOMATCH); } } /* Control never gets here */ } /* Maximize case */ else { pp = eptr; #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { register unsigned int d; for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(d, eptr, len); if (fc == d) break; eptr += len; } if (possessive) continue; for(;;) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM34); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (eptr-- == pp) break; /* Stop if tried at original pos */ BACKCHAR(eptr); } } else #endif /* Not UTF-8 mode */ { for (i = min; i < max; i++) { if (eptr >= md->end_subject || fc == *eptr) break; eptr++; } if (possessive) continue; while (eptr >= pp) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM35); if (rrc != MATCH_NOMATCH) RRETURN(rrc); eptr--; } } RRETURN(MATCH_NOMATCH); } } /* Control never gets here */ /* Match a single character type repeatedly; several different opcodes share code. This is very similar to the code for single characters, but we repeat it in the interests of efficiency. */ case OP_TYPEEXACT: min = max = GET2(ecode, 1); minimize = TRUE; ecode += 3; goto REPEATTYPE; case OP_TYPEUPTO: case OP_TYPEMINUPTO: min = 0; max = GET2(ecode, 1); minimize = *ecode == OP_TYPEMINUPTO; ecode += 3; goto REPEATTYPE; case OP_TYPEPOSSTAR: possessive = TRUE; min = 0; max = INT_MAX; ecode++; goto REPEATTYPE; case OP_TYPEPOSPLUS: possessive = TRUE; min = 1; max = INT_MAX; ecode++; goto REPEATTYPE; case OP_TYPEPOSQUERY: possessive = TRUE; min = 0; max = 1; ecode++; goto REPEATTYPE; case OP_TYPEPOSUPTO: possessive = TRUE; min = 0; max = GET2(ecode, 1); ecode += 3; goto REPEATTYPE; case OP_TYPESTAR: case OP_TYPEMINSTAR: case OP_TYPEPLUS: case OP_TYPEMINPLUS: case OP_TYPEQUERY: case OP_TYPEMINQUERY: c = *ecode++ - OP_TYPESTAR; minimize = (c & 1) != 0; min = rep_min[c]; /* Pick up values from tables; */ max = rep_max[c]; /* zero for max => infinity */ if (max == 0) max = INT_MAX; /* Common code for all repeated single character type matches. Note that in UTF-8 mode, '.' matches a character of any length, but for the other character types, the valid characters are all one-byte long. */ REPEATTYPE: ctype = *ecode++; /* Code for the character type */ #ifdef SUPPORT_UCP if (ctype == OP_PROP || ctype == OP_NOTPROP) { prop_fail_result = ctype == OP_NOTPROP; prop_type = *ecode++; prop_value = *ecode++; } else prop_type = -1; #endif /* First, ensure the minimum number of matches are present. Use inline code for maximizing the speed, and do the type test once at the start (i.e. keep it out of the loop). Also we can test that there are at least the minimum number of bytes before we start. This isn't as effective in UTF-8 mode, but it does no harm. Separate the UTF-8 code completely as that is tidier. Also separate the UCP code, which can be the same for both UTF-8 and single-bytes. */ if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH); if (min > 0) { #ifdef SUPPORT_UCP if (prop_type >= 0) { switch(prop_type) { case PT_ANY: if (prop_fail_result) RRETURN(MATCH_NOMATCH); for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); } break; case PT_LAMP: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_chartype == ucp_Lu || prop_chartype == ucp_Ll || prop_chartype == ucp_Lt) == prop_fail_result) RRETURN(MATCH_NOMATCH); } break; case PT_GC: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_category == prop_value) == prop_fail_result) RRETURN(MATCH_NOMATCH); } break; case PT_PC: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_chartype == prop_value) == prop_fail_result) RRETURN(MATCH_NOMATCH); } break; case PT_SC: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_script == prop_value) == prop_fail_result) RRETURN(MATCH_NOMATCH); } break; default: RRETURN(PCRE_ERROR_INTERNAL); } } /* Match extended Unicode sequences. We will get here only if the support is in the binary; otherwise a compile-time error occurs. */ else if (ctype == OP_EXTUNI) { for (i = 1; i <= min; i++) { GETCHARINCTEST(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH); while (eptr < md->end_subject) { int len = 1; if (!utf8) c = *eptr; else { GETCHARLEN(c, eptr, len); } prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if (prop_category != ucp_M) break; eptr += len; } } } else #endif /* SUPPORT_UCP */ /* Handle all other cases when the coding is UTF-8 */ #ifdef SUPPORT_UTF8 if (utf8) switch(ctype) { case OP_ANY: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject || ((ims & PCRE_DOTALL) == 0 && IS_NEWLINE(eptr))) RRETURN(MATCH_NOMATCH); eptr++; while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; } break; case OP_ANYBYTE: eptr += min; break; case OP_ANYNL: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x000d: if (eptr < md->end_subject && *eptr == 0x0a) eptr++; break; case 0x000a: break; case 0x000b: case 0x000c: case 0x0085: case 0x2028: case 0x2029: if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH); break; } } break; case OP_NOT_HSPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); switch(c) { default: break; case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ RRETURN(MATCH_NOMATCH); } } break; case OP_HSPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ break; } } break; case OP_NOT_VSPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); switch(c) { default: break; case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ case 0x2028: /* LINE SEPARATOR */ case 0x2029: /* PARAGRAPH SEPARATOR */ RRETURN(MATCH_NOMATCH); } } break; case OP_VSPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ case 0x2028: /* LINE SEPARATOR */ case 0x2029: /* PARAGRAPH SEPARATOR */ break; } } break; case OP_NOT_DIGIT: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); if (c < 128 && (md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH); } break; case OP_DIGIT: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject || *eptr >= 128 || (md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); /* No need to skip more bytes - we know it's a 1-byte character */ } break; case OP_NOT_WHITESPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject || (*eptr < 128 && (md->ctypes[*eptr] & ctype_space) != 0)) RRETURN(MATCH_NOMATCH); while (++eptr < md->end_subject && (*eptr & 0xc0) == 0x80); } break; case OP_WHITESPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject || *eptr >= 128 || (md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); /* No need to skip more bytes - we know it's a 1-byte character */ } break; case OP_NOT_WORDCHAR: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject || (*eptr < 128 && (md->ctypes[*eptr] & ctype_word) != 0)) RRETURN(MATCH_NOMATCH); while (++eptr < md->end_subject && (*eptr & 0xc0) == 0x80); } break; case OP_WORDCHAR: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject || *eptr >= 128 || (md->ctypes[*eptr++] & ctype_word) == 0) RRETURN(MATCH_NOMATCH); /* No need to skip more bytes - we know it's a 1-byte character */ } break; default: RRETURN(PCRE_ERROR_INTERNAL); } /* End switch(ctype) */ else #endif /* SUPPORT_UTF8 */ /* Code for the non-UTF-8 case for minimum matching of operators other than OP_PROP and OP_NOTPROP. We can assume that there are the minimum number of bytes present, as this was tested above. */ switch(ctype) { case OP_ANY: if ((ims & PCRE_DOTALL) == 0) { for (i = 1; i <= min; i++) { if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); eptr++; } } else eptr += min; break; case OP_ANYBYTE: eptr += min; break; /* Because of the CRLF case, we can't assume the minimum number of bytes are present in this case. */ case OP_ANYNL: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); switch(*eptr++) { default: RRETURN(MATCH_NOMATCH); case 0x000d: if (eptr < md->end_subject && *eptr == 0x0a) eptr++; break; case 0x000a: break; case 0x000b: case 0x000c: case 0x0085: if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH); break; } } break; case OP_NOT_HSPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); switch(*eptr++) { default: break; case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ RRETURN(MATCH_NOMATCH); } } break; case OP_HSPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); switch(*eptr++) { default: RRETURN(MATCH_NOMATCH); case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ break; } } break; case OP_NOT_VSPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); switch(*eptr++) { default: break; case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ RRETURN(MATCH_NOMATCH); } } break; case OP_VSPACE: for (i = 1; i <= min; i++) { if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); switch(*eptr++) { default: RRETURN(MATCH_NOMATCH); case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ break; } } break; case OP_NOT_DIGIT: for (i = 1; i <= min; i++) if ((md->ctypes[*eptr++] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH); break; case OP_DIGIT: for (i = 1; i <= min; i++) if ((md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); break; case OP_NOT_WHITESPACE: for (i = 1; i <= min; i++) if ((md->ctypes[*eptr++] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); break; case OP_WHITESPACE: for (i = 1; i <= min; i++) if ((md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); break; case OP_NOT_WORDCHAR: for (i = 1; i <= min; i++) if ((md->ctypes[*eptr++] & ctype_word) != 0) RRETURN(MATCH_NOMATCH); break; case OP_WORDCHAR: for (i = 1; i <= min; i++) if ((md->ctypes[*eptr++] & ctype_word) == 0) RRETURN(MATCH_NOMATCH); break; default: RRETURN(PCRE_ERROR_INTERNAL); } } /* If min = max, continue at the same level without recursing */ if (min == max) continue; /* If minimizing, we have to test the rest of the pattern before each subsequent match. Again, separate the UTF-8 case for speed, and also separate the UCP cases. */ if (minimize) { #ifdef SUPPORT_UCP if (prop_type >= 0) { switch(prop_type) { case PT_ANY: for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM36); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); if (prop_fail_result) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ case PT_LAMP: for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM37); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_chartype == ucp_Lu || prop_chartype == ucp_Ll || prop_chartype == ucp_Lt) == prop_fail_result) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ case PT_GC: for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM38); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_category == prop_value) == prop_fail_result) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ case PT_PC: for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM39); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_chartype == prop_value) == prop_fail_result) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ case PT_SC: for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM40); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_script == prop_value) == prop_fail_result) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ default: RRETURN(PCRE_ERROR_INTERNAL); } } /* Match extended Unicode sequences. We will get here only if the support is in the binary; otherwise a compile-time error occurs. */ else if (ctype == OP_EXTUNI) { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM41); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); GETCHARINCTEST(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH); while (eptr < md->end_subject) { int len = 1; if (!utf8) c = *eptr; else { GETCHARLEN(c, eptr, len); } prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if (prop_category != ucp_M) break; eptr += len; } } } else #endif /* SUPPORT_UCP */ #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM42); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject || (ctype == OP_ANY && (ims & PCRE_DOTALL) == 0 && IS_NEWLINE(eptr))) RRETURN(MATCH_NOMATCH); GETCHARINC(c, eptr); switch(ctype) { case OP_ANY: /* This is the DOTALL case */ break; case OP_ANYBYTE: break; case OP_ANYNL: switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x000d: if (eptr < md->end_subject && *eptr == 0x0a) eptr++; break; case 0x000a: break; case 0x000b: case 0x000c: case 0x0085: case 0x2028: case 0x2029: if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH); break; } break; case OP_NOT_HSPACE: switch(c) { default: break; case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ RRETURN(MATCH_NOMATCH); } break; case OP_HSPACE: switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ break; } break; case OP_NOT_VSPACE: switch(c) { default: break; case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ case 0x2028: /* LINE SEPARATOR */ case 0x2029: /* PARAGRAPH SEPARATOR */ RRETURN(MATCH_NOMATCH); } break; case OP_VSPACE: switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ case 0x2028: /* LINE SEPARATOR */ case 0x2029: /* PARAGRAPH SEPARATOR */ break; } break; case OP_NOT_DIGIT: if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH); break; case OP_DIGIT: if (c >= 256 || (md->ctypes[c] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); break; case OP_NOT_WHITESPACE: if (c < 256 && (md->ctypes[c] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); break; case OP_WHITESPACE: if (c >= 256 || (md->ctypes[c] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); break; case OP_NOT_WORDCHAR: if (c < 256 && (md->ctypes[c] & ctype_word) != 0) RRETURN(MATCH_NOMATCH); break; case OP_WORDCHAR: if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH); break; default: RRETURN(PCRE_ERROR_INTERNAL); } } } else #endif /* Not UTF-8 mode */ { for (fi = min;; fi++) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM43); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (fi >= max || eptr >= md->end_subject || ((ims & PCRE_DOTALL) == 0 && IS_NEWLINE(eptr))) RRETURN(MATCH_NOMATCH); c = *eptr++; switch(ctype) { case OP_ANY: /* This is the DOTALL case */ break; case OP_ANYBYTE: break; case OP_ANYNL: switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x000d: if (eptr < md->end_subject && *eptr == 0x0a) eptr++; break; case 0x000a: break; case 0x000b: case 0x000c: case 0x0085: if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH); break; } break; case OP_NOT_HSPACE: switch(c) { default: break; case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ RRETURN(MATCH_NOMATCH); } break; case OP_HSPACE: switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ break; } break; case OP_NOT_VSPACE: switch(c) { default: break; case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ RRETURN(MATCH_NOMATCH); } break; case OP_VSPACE: switch(c) { default: RRETURN(MATCH_NOMATCH); case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ break; } break; case OP_NOT_DIGIT: if ((md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH); break; case OP_DIGIT: if ((md->ctypes[c] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); break; case OP_NOT_WHITESPACE: if ((md->ctypes[c] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); break; case OP_WHITESPACE: if ((md->ctypes[c] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); break; case OP_NOT_WORDCHAR: if ((md->ctypes[c] & ctype_word) != 0) RRETURN(MATCH_NOMATCH); break; case OP_WORDCHAR: if ((md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH); break; default: RRETURN(PCRE_ERROR_INTERNAL); } } } /* Control never gets here */ } /* If maximizing, it is worth using inline code for speed, doing the type test once at the start (i.e. keep it out of the loop). Again, keep the UTF-8 and UCP stuff separate. */ else { pp = eptr; /* Remember where we started */ #ifdef SUPPORT_UCP if (prop_type >= 0) { switch(prop_type) { case PT_ANY: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (prop_fail_result) break; eptr+= len; } break; case PT_LAMP: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_chartype == ucp_Lu || prop_chartype == ucp_Ll || prop_chartype == ucp_Lt) == prop_fail_result) break; eptr+= len; } break; case PT_GC: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_category == prop_value) == prop_fail_result) break; eptr+= len; } break; case PT_PC: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_chartype == prop_value) == prop_fail_result) break; eptr+= len; } break; case PT_SC: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if ((prop_script == prop_value) == prop_fail_result) break; eptr+= len; } break; } /* eptr is now past the end of the maximum run */ if (possessive) continue; for(;;) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM44); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (eptr-- == pp) break; /* Stop if tried at original pos */ if (utf8) BACKCHAR(eptr); } } /* Match extended Unicode sequences. We will get here only if the support is in the binary; otherwise a compile-time error occurs. */ else if (ctype == OP_EXTUNI) { for (i = min; i < max; i++) { if (eptr >= md->end_subject) break; GETCHARINCTEST(c, eptr); prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if (prop_category == ucp_M) break; while (eptr < md->end_subject) { int len = 1; if (!utf8) c = *eptr; else { GETCHARLEN(c, eptr, len); } prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if (prop_category != ucp_M) break; eptr += len; } } /* eptr is now past the end of the maximum run */ if (possessive) continue; for(;;) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM45); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (eptr-- == pp) break; /* Stop if tried at original pos */ for (;;) /* Move back over one extended */ { int len = 1; if (!utf8) c = *eptr; else { BACKCHAR(eptr); GETCHARLEN(c, eptr, len); } prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script); if (prop_category != ucp_M) break; eptr--; } } } else #endif /* SUPPORT_UCP */ #ifdef SUPPORT_UTF8 /* UTF-8 mode */ if (utf8) { switch(ctype) { case OP_ANY: if (max < INT_MAX) { if ((ims & PCRE_DOTALL) == 0) { for (i = min; i < max; i++) { if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; eptr++; while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; } } else { for (i = min; i < max; i++) { if (eptr >= md->end_subject) break; eptr++; while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; } } } /* Handle unlimited UTF-8 repeat */ else { if ((ims & PCRE_DOTALL) == 0) { for (i = min; i < max; i++) { if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; eptr++; while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; } } else { eptr = md->end_subject; } } break; /* The byte case is the same as non-UTF8 */ case OP_ANYBYTE: c = max - min; if (c > (unsigned int)(md->end_subject - eptr)) c = md->end_subject - eptr; eptr += c; break; case OP_ANYNL: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (c == 0x000d) { if (++eptr >= md->end_subject) break; if (*eptr == 0x000a) eptr++; } else { if (c != 0x000a && (md->bsr_anycrlf || (c != 0x000b && c != 0x000c && c != 0x0085 && c != 0x2028 && c != 0x2029))) break; eptr += len; } } break; case OP_NOT_HSPACE: case OP_HSPACE: for (i = min; i < max; i++) { BOOL gotspace; int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); switch(c) { default: gotspace = FALSE; break; case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ gotspace = TRUE; break; } if (gotspace == (ctype == OP_NOT_HSPACE)) break; eptr += len; } break; case OP_NOT_VSPACE: case OP_VSPACE: for (i = min; i < max; i++) { BOOL gotspace; int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); switch(c) { default: gotspace = FALSE; break; case 0x0a: /* LF */ case 0x0b: /* VT */ case 0x0c: /* FF */ case 0x0d: /* CR */ case 0x85: /* NEL */ case 0x2028: /* LINE SEPARATOR */ case 0x2029: /* PARAGRAPH SEPARATOR */ gotspace = TRUE; break; } if (gotspace == (ctype == OP_NOT_VSPACE)) break; eptr += len; } break; case OP_NOT_DIGIT: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break; eptr+= len; } break; case OP_DIGIT: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break; eptr+= len; } break; case OP_NOT_WHITESPACE: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break; eptr+= len; } break; case OP_WHITESPACE: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break; eptr+= len; } break; case OP_NOT_WORDCHAR: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break; eptr+= len; } break; case OP_WORDCHAR: for (i = min; i < max; i++) { int len = 1; if (eptr >= md->end_subject) break; GETCHARLEN(c, eptr, len); if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break; eptr+= len; } break; default: RRETURN(PCRE_ERROR_INTERNAL); } /* eptr is now past the end of the maximum run */ if (possessive) continue; for(;;) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM46); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (eptr-- == pp) break; /* Stop if tried at original pos */ BACKCHAR(eptr); } } else #endif /* SUPPORT_UTF8 */ /* Not UTF-8 mode */ { switch(ctype) { case OP_ANY: if ((ims & PCRE_DOTALL) == 0) { for (i = min; i < max; i++) { if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; eptr++; } break; } /* For DOTALL case, fall through and treat as \C */ case OP_ANYBYTE: c = max - min; if (c > (unsigned int)(md->end_subject - eptr)) c = md->end_subject - eptr; eptr += c; break; case OP_ANYNL: for (i = min; i < max; i++) { if (eptr >= md->end_subject) break; c = *eptr; if (c == 0x000d) { if (++eptr >= md->end_subject) break; if (*eptr == 0x000a) eptr++; } else { if (c != 0x000a && (md->bsr_anycrlf || (c != 0x000b && c != 0x000c && c != 0x0085))) break; eptr++; } } break; case OP_NOT_HSPACE: for (i = min; i < max; i++) { if (eptr >= md->end_subject) break; c = *eptr; if (c == 0x09 || c == 0x20 || c == 0xa0) break; eptr++; } break; case OP_HSPACE: for (i = min; i < max; i++) { if (eptr >= md->end_subject) break; c = *eptr; if (c != 0x09 && c != 0x20 && c != 0xa0) break; eptr++; } break; case OP_NOT_VSPACE: for (i = min; i < max; i++) { if (eptr >= md->end_subject) break; c = *eptr; if (c == 0x0a || c == 0x0b || c == 0x0c || c == 0x0d || c == 0x85) break; eptr++; } break; case OP_VSPACE: for (i = min; i < max; i++) { if (eptr >= md->end_subject) break; c = *eptr; if (c != 0x0a && c != 0x0b && c != 0x0c && c != 0x0d && c != 0x85) break; eptr++; } break; case OP_NOT_DIGIT: for (i = min; i < max; i++) { if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0) break; eptr++; } break; case OP_DIGIT: for (i = min; i < max; i++) { if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0) break; eptr++; } break; case OP_NOT_WHITESPACE: for (i = min; i < max; i++) { if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0) break; eptr++; } break; case OP_WHITESPACE: for (i = min; i < max; i++) { if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0) break; eptr++; } break; case OP_NOT_WORDCHAR: for (i = min; i < max; i++) { if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0) break; eptr++; } break; case OP_WORDCHAR: for (i = min; i < max; i++) { if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0) break; eptr++; } break; default: RRETURN(PCRE_ERROR_INTERNAL); } /* eptr is now past the end of the maximum run */ if (possessive) continue; while (eptr >= pp) { RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM47); eptr--; if (rrc != MATCH_NOMATCH) RRETURN(rrc); } } /* Get here if we can't make it match with any permitted repetitions */ RRETURN(MATCH_NOMATCH); } /* Control never gets here */ /* There's been some horrible disaster. Arrival here can only mean there is something seriously wrong in the code above or the OP_xxx definitions. */ default: DPRINTF(("Unknown opcode %d\n", *ecode)); RRETURN(PCRE_ERROR_UNKNOWN_OPCODE); } /* Do not stick any code in here without much thought; it is assumed that "continue" in the code above comes out to here to repeat the main loop. */ } /* End of main loop */ /* Control never reaches here */ /* When compiling to use the heap rather than the stack for recursive calls to match(), the RRETURN() macro jumps here. The number that is saved in frame->Xwhere indicates which label we actually want to return to. */ #ifdef NO_RECURSE #define LBL(val) case val: goto L_RM##val; HEAP_RETURN: switch (frame->Xwhere) { LBL( 1) LBL( 2) LBL( 3) LBL( 4) LBL( 5) LBL( 6) LBL( 7) LBL( 8) LBL( 9) LBL(10) LBL(11) LBL(12) LBL(13) LBL(14) LBL(15) LBL(17) LBL(19) LBL(24) LBL(25) LBL(26) LBL(27) LBL(29) LBL(31) LBL(33) LBL(35) LBL(43) LBL(47) LBL(48) LBL(49) LBL(50) LBL(51) LBL(52) LBL(53) LBL(54) #ifdef SUPPORT_UTF8 LBL(16) LBL(18) LBL(20) LBL(21) LBL(22) LBL(23) LBL(28) LBL(30) LBL(32) LBL(34) LBL(42) LBL(46) #ifdef SUPPORT_UCP LBL(36) LBL(37) LBL(38) LBL(39) LBL(40) LBL(41) LBL(44) LBL(45) #endif /* SUPPORT_UCP */ #endif /* SUPPORT_UTF8 */ default: DPRINTF(("jump error in pcre match: label %d non-existent\n", frame->Xwhere)); return PCRE_ERROR_INTERNAL; } #undef LBL #endif /* NO_RECURSE */ } /*************************************************************************** **************************************************************************** RECURSION IN THE match() FUNCTION Undefine all the macros that were defined above to handle this. */ #ifdef NO_RECURSE #undef eptr #undef ecode #undef mstart #undef offset_top #undef ims #undef eptrb #undef flags #undef callpat #undef charptr #undef data #undef next #undef pp #undef prev #undef saved_eptr #undef new_recursive #undef cur_is_word #undef condition #undef prev_is_word #undef original_ims #undef ctype #undef length #undef max #undef min #undef number #undef offset #undef op #undef save_capture_last #undef save_offset1 #undef save_offset2 #undef save_offset3 #undef stacksave #undef newptrb #endif /* These two are defined as macros in both cases */ #undef fc #undef fi /*************************************************************************** ***************************************************************************/ /************************************************* * Execute a Regular Expression * *************************************************/ /* This function applies a compiled re to a subject string and picks out portions of the string if it matches. Two elements in the vector are set for each substring: the offsets to the start and end of the substring. Arguments: argument_re points to the compiled expression extra_data points to extra data or is NULL subject points to the subject string length length of subject string (may contain binary zeros) start_offset where to start in the subject string options option bits offsets points to a vector of ints to be filled in with offsets offsetcount the number of elements in the vector Returns: > 0 => success; value is the number of elements filled in = 0 => success, but offsets is not big enough -1 => failed to match < -1 => some kind of unexpected problem */ PCRE_EXP_DEFN int pcre_exec(const pcre *argument_re, const pcre_extra *extra_data, PCRE_SPTR subject, int length, int start_offset, int options, int *offsets, int offsetcount) { int rc, resetcount, ocount; int first_byte = -1; int req_byte = -1; int req_byte2 = -1; int newline; unsigned long int ims; BOOL using_temporary_offsets = FALSE; BOOL anchored; BOOL startline; BOOL firstline; BOOL first_byte_caseless = FALSE; BOOL req_byte_caseless = FALSE; BOOL utf8; match_data match_block; match_data *md = &match_block; const uschar *tables; const uschar *start_bits = NULL; USPTR start_match = (USPTR)subject + start_offset; USPTR end_subject; USPTR req_byte_ptr = start_match - 1; pcre_study_data internal_study; const pcre_study_data *study; real_pcre internal_re; const real_pcre *external_re = (const real_pcre *)argument_re; const real_pcre *re = external_re; /* Plausibility checks */ if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION; if (re == NULL || subject == NULL || (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL; if (offsetcount < 0) return PCRE_ERROR_BADCOUNT; /* Fish out the optional data from the extra_data structure, first setting the default values. */ study = NULL; md->match_limit = MATCH_LIMIT; md->match_limit_recursion = MATCH_LIMIT_RECURSION; md->callout_data = NULL; /* The table pointer is always in native byte order. */ tables = external_re->tables; if (extra_data != NULL) { register unsigned int flags = extra_data->flags; if ((flags & PCRE_EXTRA_STUDY_DATA) != 0) study = (const pcre_study_data *)extra_data->study_data; if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0) md->match_limit = extra_data->match_limit; if ((flags & PCRE_EXTRA_MATCH_LIMIT_RECURSION) != 0) md->match_limit_recursion = extra_data->match_limit_recursion; if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0) md->callout_data = extra_data->callout_data; if ((flags & PCRE_EXTRA_TABLES) != 0) tables = extra_data->tables; } /* If the exec call supplied NULL for tables, use the inbuilt ones. This is a feature that makes it possible to save compiled regex and re-use them in other programs later. */ if (tables == NULL) tables = _pcre_default_tables; /* Check that the first field in the block is the magic number. If it is not, test for a regex that was compiled on a host of opposite endianness. If this is the case, flipped values are put in internal_re and internal_study if there was study data too. */ if (re->magic_number != MAGIC_NUMBER) { re = _pcre_try_flipped(re, &internal_re, study, &internal_study); if (re == NULL) return PCRE_ERROR_BADMAGIC; if (study != NULL) study = &internal_study; } /* Set up other data */ anchored = ((re->options | options) & PCRE_ANCHORED) != 0; startline = (re->flags & PCRE_STARTLINE) != 0; firstline = (re->options & PCRE_FIRSTLINE) != 0; /* The code starts after the real_pcre block and the capture name table. */ md->start_code = (const uschar *)external_re + re->name_table_offset + re->name_count * re->name_entry_size; md->start_subject = (USPTR)subject; md->start_offset = start_offset; md->end_subject = md->start_subject + length; end_subject = md->end_subject; md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0; utf8 = md->utf8 = (re->options & PCRE_UTF8) != 0; md->notbol = (options & PCRE_NOTBOL) != 0; md->noteol = (options & PCRE_NOTEOL) != 0; md->notempty = (options & PCRE_NOTEMPTY) != 0; md->partial = (options & PCRE_PARTIAL) != 0; md->hitend = FALSE; md->recursive = NULL; /* No recursion at top level */ md->lcc = tables + lcc_offset; md->ctypes = tables + ctypes_offset; /* Handle different \R options. */ switch (options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) { case 0: if ((re->options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) != 0) md->bsr_anycrlf = (re->options & PCRE_BSR_ANYCRLF) != 0; else #ifdef BSR_ANYCRLF md->bsr_anycrlf = TRUE; #else md->bsr_anycrlf = FALSE; #endif break; case PCRE_BSR_ANYCRLF: md->bsr_anycrlf = TRUE; break; case PCRE_BSR_UNICODE: md->bsr_anycrlf = FALSE; break; default: return PCRE_ERROR_BADNEWLINE; } /* Handle different types of newline. The three bits give eight cases. If nothing is set at run time, whatever was used at compile time applies. */ switch ((((options & PCRE_NEWLINE_BITS) == 0)? re->options : (pcre_uint32)options) & PCRE_NEWLINE_BITS) { case 0: newline = NEWLINE; break; /* Compile-time default */ case PCRE_NEWLINE_CR: newline = '\r'; break; case PCRE_NEWLINE_LF: newline = '\n'; break; case PCRE_NEWLINE_CR+ PCRE_NEWLINE_LF: newline = ('\r' << 8) | '\n'; break; case PCRE_NEWLINE_ANY: newline = -1; break; case PCRE_NEWLINE_ANYCRLF: newline = -2; break; default: return PCRE_ERROR_BADNEWLINE; } if (newline == -2) { md->nltype = NLTYPE_ANYCRLF; } else if (newline < 0) { md->nltype = NLTYPE_ANY; } else { md->nltype = NLTYPE_FIXED; if (newline > 255) { md->nllen = 2; md->nl[0] = (newline >> 8) & 255; md->nl[1] = newline & 255; } else { md->nllen = 1; md->nl[0] = newline; } } /* Partial matching is supported only for a restricted set of regexes at the moment. */ if (md->partial && (re->flags & PCRE_NOPARTIAL) != 0) return PCRE_ERROR_BADPARTIAL; /* Check a UTF-8 string if required. Unfortunately there's no way of passing back the character offset. */ #ifdef SUPPORT_UTF8 if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0) { if (_pcre_valid_utf8((uschar *)subject, length) >= 0) return PCRE_ERROR_BADUTF8; if (start_offset > 0 && start_offset < length) { int tb = ((uschar *)subject)[start_offset]; if (tb > 127) { tb &= 0xc0; if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET; } } } #endif /* The ims options can vary during the matching as a result of the presence of (?ims) items in the pattern. They are kept in a local variable so that restoring at the exit of a group is easy. */ ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL); /* If the expression has got more back references than the offsets supplied can hold, we get a temporary chunk of working store to use during the matching. Otherwise, we can use the vector supplied, rounding down its size to a multiple of 3. */ ocount = offsetcount - (offsetcount % 3); if (re->top_backref > 0 && re->top_backref >= ocount/3) { ocount = re->top_backref * 3 + 3; md->offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int)); if (md->offset_vector == NULL) return PCRE_ERROR_NOMEMORY; using_temporary_offsets = TRUE; DPRINTF(("Got memory to hold back references\n")); } else md->offset_vector = offsets; md->offset_end = ocount; md->offset_max = (2*ocount)/3; md->offset_overflow = FALSE; md->capture_last = -1; /* Compute the minimum number of offsets that we need to reset each time. Doing this makes a huge difference to execution time when there aren't many brackets in the pattern. */ resetcount = 2 + re->top_bracket * 2; if (resetcount > offsetcount) resetcount = ocount; /* Reset the working variable associated with each extraction. These should never be used unless previously set, but they get saved and restored, and so we initialize them to avoid reading uninitialized locations. */ if (md->offset_vector != NULL) { register int *iptr = md->offset_vector + ocount; register int *iend = iptr - resetcount/2 + 1; while (--iptr >= iend) *iptr = -1; } /* Set up the first character to match, if available. The first_byte value is never set for an anchored regular expression, but the anchoring may be forced at run time, so we have to test for anchoring. The first char may be unset for an unanchored pattern, of course. If there's no first char and the pattern was studied, there may be a bitmap of possible first characters. */ if (!anchored) { if ((re->flags & PCRE_FIRSTSET) != 0) { first_byte = re->first_byte & 255; if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE) first_byte = md->lcc[first_byte]; } else if (!startline && study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0) start_bits = study->start_bits; } /* For anchored or unanchored matches, there may be a "last known required character" set. */ if ((re->flags & PCRE_REQCHSET) != 0) { req_byte = re->req_byte & 255; req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0; req_byte2 = (tables + fcc_offset)[req_byte]; /* case flipped */ } /* ==========================================================================*/ /* Loop for handling unanchored repeated matching attempts; for anchored regexs the loop runs just once. */ for(;;) { USPTR save_end_subject = end_subject; USPTR new_start_match; /* Reset the maximum number of extractions we might see. */ if (md->offset_vector != NULL) { register int *iptr = md->offset_vector; register int *iend = iptr + resetcount; while (iptr < iend) *iptr++ = -1; } /* Advance to a unique first char if possible. If firstline is TRUE, the start of the match is constrained to the first line of a multiline string. That is, the match must be before or at the first newline. Implement this by temporarily adjusting end_subject so that we stop scanning at a newline. If the match fails at the newline, later code breaks this loop. */ if (firstline) { USPTR t = start_match; while (t < md->end_subject && !IS_NEWLINE(t)) t++; end_subject = t; } /* Now test for a unique first byte */ if (first_byte >= 0) { if (first_byte_caseless) while (start_match < end_subject && md->lcc[*start_match] != first_byte) { NEXTCHAR(start_match); } else while (start_match < end_subject && *start_match != first_byte) { NEXTCHAR(start_match); } } /* Or to just after a linebreak for a multiline match if possible */ else if (startline) { if (start_match > md->start_subject + start_offset) { while (start_match <= end_subject && !WAS_NEWLINE(start_match)) { NEXTCHAR(start_match); } /* If we have just passed a CR and the newline option is ANY or ANYCRLF, and we are now at a LF, advance the match position by one more character. */ if (start_match[-1] == '\r' && (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF) && start_match < end_subject && *start_match == '\n') start_match++; } } /* Or to a non-unique first char after study */ else if (start_bits != NULL) { while (start_match < end_subject) { register unsigned int c = *start_match; if ((start_bits[c/8] & (1 << (c&7))) == 0) { NEXTCHAR(start_match); } else break; } } /* Restore fudged end_subject */ end_subject = save_end_subject; #ifdef DEBUG /* Sigh. Some compilers never learn. */ printf(">>>> Match against: "); pchars(start_match, end_subject - start_match, TRUE, md); printf("\n"); #endif /* If req_byte is set, we know that that character must appear in the subject for the match to succeed. If the first character is set, req_byte must be later in the subject; otherwise the test starts at the match point. This optimization can save a huge amount of backtracking in patterns with nested unlimited repeats that aren't going to match. Writing separate code for cased/caseless versions makes it go faster, as does using an autoincrement and backing off on a match. HOWEVER: when the subject string is very, very long, searching to its end can take a long time, and give bad performance on quite ordinary patterns. This showed up when somebody was matching something like /^\d+C/ on a 32-megabyte string... so we don't do this when the string is sufficiently long. ALSO: this processing is disabled when partial matching is requested. */ if (req_byte >= 0 && end_subject - start_match < REQ_BYTE_MAX && !md->partial) { register USPTR p = start_match + ((first_byte >= 0)? 1 : 0); /* We don't need to repeat the search if we haven't yet reached the place we found it at last time. */ if (p > req_byte_ptr) { if (req_byte_caseless) { while (p < end_subject) { register int pp = *p++; if (pp == req_byte || pp == req_byte2) { p--; break; } } } else { while (p < end_subject) { if (*p++ == req_byte) { p--; break; } } } /* If we can't find the required character, break the matching loop, forcing a match failure. */ if (p >= end_subject) { rc = MATCH_NOMATCH; break; } /* If we have found the required character, save the point where we found it, so that we don't search again next time round the loop if the start hasn't passed this character yet. */ req_byte_ptr = p; } } /* OK, we can now run the match. */ md->start_match_ptr = start_match; md->match_call_count = 0; rc = match(start_match, md->start_code, start_match, 2, md, ims, NULL, 0, 0); switch(rc) { /* NOMATCH and PRUNE advance by one character. THEN at this level acts exactly like PRUNE. */ case MATCH_NOMATCH: case MATCH_PRUNE: case MATCH_THEN: new_start_match = start_match + 1; #ifdef SUPPORT_UTF8 if (utf8) while(new_start_match < end_subject && (*new_start_match & 0xc0) == 0x80) new_start_match++; #endif break; /* SKIP passes back the next starting point explicitly. */ case MATCH_SKIP: new_start_match = md->start_match_ptr; break; /* COMMIT disables the bumpalong, but otherwise behaves as NOMATCH. */ case MATCH_COMMIT: rc = MATCH_NOMATCH; goto ENDLOOP; /* Any other return is some kind of error. */ default: goto ENDLOOP; } /* Control reaches here for the various types of "no match at this point" result. Reset the code to MATCH_NOMATCH for subsequent checking. */ rc = MATCH_NOMATCH; /* If PCRE_FIRSTLINE is set, the match must happen before or at the first newline in the subject (though it may continue over the newline). Therefore, if we have just failed to match, starting at a newline, do not continue. */ if (firstline && IS_NEWLINE(start_match)) break; /* Advance to new matching position */ start_match = new_start_match; /* Break the loop if the pattern is anchored or if we have passed the end of the subject. */ if (anchored || start_match > end_subject) break; /* If we have just passed a CR and we are now at a LF, and the pattern does not contain any explicit matches for \r or \n, and the newline option is CRLF or ANY or ANYCRLF, advance the match position by one more character. */ if (start_match[-1] == '\r' && start_match < end_subject && *start_match == '\n' && (re->flags & PCRE_HASCRORLF) == 0 && (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF || md->nllen == 2)) start_match++; } /* End of for(;;) "bumpalong" loop */ /* ==========================================================================*/ /* We reach here when rc is not MATCH_NOMATCH, or if one of the stopping conditions is true: (1) The pattern is anchored or the match was failed by (*COMMIT); (2) We are past the end of the subject; (3) PCRE_FIRSTLINE is set and we have failed to match at a newline, because this option requests that a match occur at or before the first newline in the subject. When we have a match and the offset vector is big enough to deal with any backreferences, captured substring offsets will already be set up. In the case where we had to get some local store to hold offsets for backreference processing, copy those that we can. In this case there need not be overflow if certain parts of the pattern were not used, even though there are more capturing parentheses than vector slots. */ ENDLOOP: if (rc == MATCH_MATCH) { if (using_temporary_offsets) { if (offsetcount >= 4) { memcpy(offsets + 2, md->offset_vector + 2, (offsetcount - 2) * sizeof(int)); DPRINTF(("Copied offsets from temporary memory\n")); } if (md->end_offset_top > offsetcount) md->offset_overflow = TRUE; DPRINTF(("Freeing temporary memory\n")); (pcre_free)(md->offset_vector); } /* Set the return code to the number of captured strings, or 0 if there are too many to fit into the vector. */ rc = md->offset_overflow? 0 : md->end_offset_top/2; /* If there is space, set up the whole thing as substring 0. The value of md->start_match_ptr might be modified if \K was encountered on the success matching path. */ if (offsetcount < 2) rc = 0; else { offsets[0] = md->start_match_ptr - md->start_subject; offsets[1] = md->end_match_ptr - md->start_subject; } DPRINTF((">>>> returning %d\n", rc)); return rc; } /* Control gets here if there has been an error, or if the overall match attempt has failed at all permitted starting positions. */ if (using_temporary_offsets) { DPRINTF(("Freeing temporary memory\n")); (pcre_free)(md->offset_vector); } if (rc != MATCH_NOMATCH) { DPRINTF((">>>> error: returning %d\n", rc)); return rc; } else if (md->partial && md->hitend) { DPRINTF((">>>> returning PCRE_ERROR_PARTIAL\n")); return PCRE_ERROR_PARTIAL; } else { DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n")); return PCRE_ERROR_NOMATCH; } } /* End of pcre_exec.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_study.c0000644000175000017500000004251711407320460023170 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_study(), along with local supporting functions. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /* Returns from set_start_bits() */ enum { SSB_FAIL, SSB_DONE, SSB_CONTINUE }; /************************************************* * Set a bit and maybe its alternate case * *************************************************/ /* Given a character, set its bit in the table, and also the bit for the other version of a letter if we are caseless. Arguments: start_bits points to the bit map c is the character caseless the caseless flag cd the block with char table pointers Returns: nothing */ static void set_bit(uschar *start_bits, unsigned int c, BOOL caseless, compile_data *cd) { start_bits[c/8] |= (1 << (c&7)); if (caseless && (cd->ctypes[c] & ctype_letter) != 0) start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7)); } /************************************************* * Create bitmap of starting bytes * *************************************************/ /* This function scans a compiled unanchored expression recursively and attempts to build a bitmap of the set of possible starting bytes. As time goes by, we may be able to get more clever at doing this. The SSB_CONTINUE return is useful for parenthesized groups in patterns such as (a*)b where the group provides some optional starting bytes but scanning must continue at the outer level to find at least one mandatory byte. At the outermost level, this function fails unless the result is SSB_DONE. Arguments: code points to an expression start_bits points to a 32-byte table, initialized to 0 caseless the current state of the caseless flag utf8 TRUE if in UTF-8 mode cd the block with char table pointers Returns: SSB_FAIL => Failed to find any starting bytes SSB_DONE => Found mandatory starting bytes SSB_CONTINUE => Found optional starting bytes */ static int set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless, BOOL utf8, compile_data *cd) { register int c; int yield = SSB_DONE; #if 0 /* ========================================================================= */ /* The following comment and code was inserted in January 1999. In May 2006, when it was observed to cause compiler warnings about unused values, I took it out again. If anybody is still using OS/2, they will have to put it back manually. */ /* This next statement and the later reference to dummy are here in order to trick the optimizer of the IBM C compiler for OS/2 into generating correct code. Apparently IBM isn't going to fix the problem, and we would rather not disable optimization (in this module it actually makes a big difference, and the pcre module can use all the optimization it can get). */ volatile int dummy; /* ========================================================================= */ #endif do { const uschar *tcode = code + (((int)*code == OP_CBRA)? 3:1) + LINK_SIZE; BOOL try_next = TRUE; while (try_next) /* Loop for items in this branch */ { int rc; switch(*tcode) { /* Fail if we reach something we don't understand */ default: return SSB_FAIL; /* If we hit a bracket or a positive lookahead assertion, recurse to set bits from within the subpattern. If it can't find anything, we have to give up. If it finds some mandatory character(s), we are done for this branch. Otherwise, carry on scanning after the subpattern. */ case OP_BRA: case OP_SBRA: case OP_CBRA: case OP_SCBRA: case OP_ONCE: case OP_ASSERT: rc = set_start_bits(tcode, start_bits, caseless, utf8, cd); if (rc == SSB_FAIL) return SSB_FAIL; if (rc == SSB_DONE) try_next = FALSE; else { do tcode += GET(tcode, 1); while (*tcode == OP_ALT); tcode += 1 + LINK_SIZE; } break; /* If we hit ALT or KET, it means we haven't found anything mandatory in this branch, though we might have found something optional. For ALT, we continue with the next alternative, but we have to arrange that the final result from subpattern is SSB_CONTINUE rather than SSB_DONE. For KET, return SSB_CONTINUE: if this is the top level, that indicates failure, but after a nested subpattern, it causes scanning to continue. */ case OP_ALT: yield = SSB_CONTINUE; try_next = FALSE; break; case OP_KET: case OP_KETRMAX: case OP_KETRMIN: return SSB_CONTINUE; /* Skip over callout */ case OP_CALLOUT: tcode += 2 + 2*LINK_SIZE; break; /* Skip over lookbehind and negative lookahead assertions */ case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: do tcode += GET(tcode, 1); while (*tcode == OP_ALT); tcode += 1 + LINK_SIZE; break; /* Skip over an option setting, changing the caseless flag */ case OP_OPT: caseless = (tcode[1] & PCRE_CASELESS) != 0; tcode += 2; break; /* BRAZERO does the bracket, but carries on. */ case OP_BRAZERO: case OP_BRAMINZERO: if (set_start_bits(++tcode, start_bits, caseless, utf8, cd) == SSB_FAIL) return SSB_FAIL; /* ========================================================================= See the comment at the head of this function concerning the next line, which was an old fudge for the benefit of OS/2. dummy = 1; ========================================================================= */ do tcode += GET(tcode,1); while (*tcode == OP_ALT); tcode += 1 + LINK_SIZE; break; /* Single-char * or ? sets the bit and tries the next item */ case OP_STAR: case OP_MINSTAR: case OP_POSSTAR: case OP_QUERY: case OP_MINQUERY: case OP_POSQUERY: set_bit(start_bits, tcode[1], caseless, cd); tcode += 2; #ifdef SUPPORT_UTF8 if (utf8 && tcode[-1] >= 0xc0) tcode += _pcre_utf8_table4[tcode[-1] & 0x3f]; #endif break; /* Single-char upto sets the bit and tries the next */ case OP_UPTO: case OP_MINUPTO: case OP_POSUPTO: set_bit(start_bits, tcode[3], caseless, cd); tcode += 4; #ifdef SUPPORT_UTF8 if (utf8 && tcode[-1] >= 0xc0) tcode += _pcre_utf8_table4[tcode[-1] & 0x3f]; #endif break; /* At least one single char sets the bit and stops */ case OP_EXACT: /* Fall through */ tcode += 2; case OP_CHAR: case OP_CHARNC: case OP_PLUS: case OP_MINPLUS: case OP_POSPLUS: set_bit(start_bits, tcode[1], caseless, cd); try_next = FALSE; break; /* Single character type sets the bits and stops */ case OP_NOT_DIGIT: for (c = 0; c < 32; c++) start_bits[c] |= ~cd->cbits[c+cbit_digit]; try_next = FALSE; break; case OP_DIGIT: for (c = 0; c < 32; c++) start_bits[c] |= cd->cbits[c+cbit_digit]; try_next = FALSE; break; /* The cbit_space table has vertical tab as whitespace; we have to discard it. */ case OP_NOT_WHITESPACE: for (c = 0; c < 32; c++) { int d = cd->cbits[c+cbit_space]; if (c == 1) d &= ~0x08; start_bits[c] |= ~d; } try_next = FALSE; break; /* The cbit_space table has vertical tab as whitespace; we have to discard it. */ case OP_WHITESPACE: for (c = 0; c < 32; c++) { int d = cd->cbits[c+cbit_space]; if (c == 1) d &= ~0x08; start_bits[c] |= d; } try_next = FALSE; break; case OP_NOT_WORDCHAR: for (c = 0; c < 32; c++) start_bits[c] |= ~cd->cbits[c+cbit_word]; try_next = FALSE; break; case OP_WORDCHAR: for (c = 0; c < 32; c++) start_bits[c] |= cd->cbits[c+cbit_word]; try_next = FALSE; break; /* One or more character type fudges the pointer and restarts, knowing it will hit a single character type and stop there. */ case OP_TYPEPLUS: case OP_TYPEMINPLUS: tcode++; break; case OP_TYPEEXACT: tcode += 3; break; /* Zero or more repeats of character types set the bits and then try again. */ case OP_TYPEUPTO: case OP_TYPEMINUPTO: case OP_TYPEPOSUPTO: tcode += 2; /* Fall through */ case OP_TYPESTAR: case OP_TYPEMINSTAR: case OP_TYPEPOSSTAR: case OP_TYPEQUERY: case OP_TYPEMINQUERY: case OP_TYPEPOSQUERY: switch(tcode[1]) { case OP_ANY: return SSB_FAIL; case OP_NOT_DIGIT: for (c = 0; c < 32; c++) start_bits[c] |= ~cd->cbits[c+cbit_digit]; break; case OP_DIGIT: for (c = 0; c < 32; c++) start_bits[c] |= cd->cbits[c+cbit_digit]; break; /* The cbit_space table has vertical tab as whitespace; we have to discard it. */ case OP_NOT_WHITESPACE: for (c = 0; c < 32; c++) { int d = cd->cbits[c+cbit_space]; if (c == 1) d &= ~0x08; start_bits[c] |= ~d; } break; /* The cbit_space table has vertical tab as whitespace; we have to discard it. */ case OP_WHITESPACE: for (c = 0; c < 32; c++) { int d = cd->cbits[c+cbit_space]; if (c == 1) d &= ~0x08; start_bits[c] |= d; } break; case OP_NOT_WORDCHAR: for (c = 0; c < 32; c++) start_bits[c] |= ~cd->cbits[c+cbit_word]; break; case OP_WORDCHAR: for (c = 0; c < 32; c++) start_bits[c] |= cd->cbits[c+cbit_word]; break; } tcode += 2; break; /* Character class where all the information is in a bit map: set the bits and either carry on or not, according to the repeat count. If it was a negative class, and we are operating with UTF-8 characters, any byte with a value >= 0xc4 is a potentially valid starter because it starts a character with a value > 255. */ case OP_NCLASS: #ifdef SUPPORT_UTF8 if (utf8) { start_bits[24] |= 0xf0; /* Bits for 0xc4 - 0xc8 */ memset(start_bits+25, 0xff, 7); /* Bits for 0xc9 - 0xff */ } #endif /* Fall through */ case OP_CLASS: { tcode++; /* In UTF-8 mode, the bits in a bit map correspond to character values, not to byte values. However, the bit map we are constructing is for byte values. So we have to do a conversion for characters whose value is > 127. In fact, there are only two possible starting bytes for characters in the range 128 - 255. */ #ifdef SUPPORT_UTF8 if (utf8) { for (c = 0; c < 16; c++) start_bits[c] |= tcode[c]; for (c = 128; c < 256; c++) { if ((tcode[c/8] && (1 << (c&7))) != 0) { int d = (c >> 6) | 0xc0; /* Set bit for this starter */ start_bits[d/8] |= (1 << (d&7)); /* and then skip on to the */ c = (c & 0xc0) + 0x40 - 1; /* next relevant character. */ } } } /* In non-UTF-8 mode, the two bit maps are completely compatible. */ else #endif { for (c = 0; c < 32; c++) start_bits[c] |= tcode[c]; } /* Advance past the bit map, and act on what follows */ tcode += 32; switch (*tcode) { case OP_CRSTAR: case OP_CRMINSTAR: case OP_CRQUERY: case OP_CRMINQUERY: tcode++; break; case OP_CRRANGE: case OP_CRMINRANGE: if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5; else try_next = FALSE; break; default: try_next = FALSE; break; } } break; /* End of bitmap class handling */ } /* End of switch */ } /* End of try_next loop */ code += GET(code, 1); /* Advance to next branch */ } while (*code == OP_ALT); return yield; } /************************************************* * Study a compiled expression * *************************************************/ /* This function is handed a compiled expression that it must study to produce information that will speed up the matching. It returns a pcre_extra block which then gets handed back to pcre_exec(). Arguments: re points to the compiled expression options contains option bits errorptr points to where to place error messages; set NULL unless error Returns: pointer to a pcre_extra block, with study_data filled in and the appropriate flag set; NULL on error or if no optimization possible */ PCRE_EXP_DEFN pcre_extra * pcre_study(const pcre *external_re, int options, const char **errorptr) { uschar start_bits[32]; pcre_extra *extra; pcre_study_data *study; const uschar *tables; uschar *code; compile_data compile_block; const real_pcre *re = (const real_pcre *)external_re; *errorptr = NULL; if (re == NULL || re->magic_number != MAGIC_NUMBER) { *errorptr = "argument is not a compiled regular expression"; return NULL; } if ((options & ~PUBLIC_STUDY_OPTIONS) != 0) { *errorptr = "unknown or incorrect option bit(s) set"; return NULL; } code = (uschar *)re + re->name_table_offset + (re->name_count * re->name_entry_size); /* For an anchored pattern, or an unanchored pattern that has a first char, or a multiline pattern that matches only at "line starts", no further processing at present. */ if ((re->options & PCRE_ANCHORED) != 0 || (re->flags & (PCRE_FIRSTSET|PCRE_STARTLINE)) != 0) return NULL; /* Set the character tables in the block that is passed around */ tables = re->tables; if (tables == NULL) (void)pcre_fullinfo(external_re, NULL, PCRE_INFO_DEFAULT_TABLES, (void *)(&tables)); compile_block.lcc = tables + lcc_offset; compile_block.fcc = tables + fcc_offset; compile_block.cbits = tables + cbits_offset; compile_block.ctypes = tables + ctypes_offset; /* See if we can find a fixed set of initial characters for the pattern. */ memset(start_bits, 0, 32 * sizeof(uschar)); if (set_start_bits(code, start_bits, (re->options & PCRE_CASELESS) != 0, (re->options & PCRE_UTF8) != 0, &compile_block) != SSB_DONE) return NULL; /* Get a pcre_extra block and a pcre_study_data block. The study data is put in the latter, which is pointed to by the former, which may also get additional data set later by the calling program. At the moment, the size of pcre_study_data is fixed. We nevertheless save it in a field for returning via the pcre_fullinfo() function so that if it becomes variable in the future, we don't have to change that code. */ extra = (pcre_extra *)(pcre_malloc) (sizeof(pcre_extra) + sizeof(pcre_study_data)); if (extra == NULL) { *errorptr = "failed to get memory"; return NULL; } study = (pcre_study_data *)((char *)extra + sizeof(pcre_extra)); extra->flags = PCRE_EXTRA_STUDY_DATA; extra->study_data = study; study->size = sizeof(pcre_study_data); study->options = PCRE_STUDY_MAPPED; memcpy(study->start_bits, start_bits, sizeof(start_bits)); return extra; } /* End of pcre_study.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/COPYING0000644000175000017500000000013711407320460021666 0ustar koukouPCRE LICENCE Please see the file LICENCE in the PCRE distribution for licensing details. End cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_dfa_exec.c0000644000175000017500000027166611407320460023567 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_dfa_exec(), which is an alternative matching function that uses a sort of DFA algorithm (not a true FSM). This is NOT Perl- compatible, but it has advantages in certain applications. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define NLBLOCK md /* Block containing newline information */ #define PSSTART start_subject /* Field containing processed string start */ #define PSEND end_subject /* Field containing processed string end */ #include "pcre_internal.h" /* For use to indent debugging output */ #define SP " " /************************************************* * Code parameters and static tables * *************************************************/ /* These are offsets that are used to turn the OP_TYPESTAR and friends opcodes into others, under special conditions. A gap of 20 between the blocks should be enough. The resulting opcodes don't have to be less than 256 because they are never stored, so we push them well clear of the normal opcodes. */ #define OP_PROP_EXTRA 300 #define OP_EXTUNI_EXTRA 320 #define OP_ANYNL_EXTRA 340 #define OP_HSPACE_EXTRA 360 #define OP_VSPACE_EXTRA 380 /* This table identifies those opcodes that are followed immediately by a character that is to be tested in some way. This makes is possible to centralize the loading of these characters. In the case of Type * etc, the "character" is the opcode for \D, \d, \S, \s, \W, or \w, which will always be a small value. ***NOTE*** If the start of this table is modified, the two tables that follow must also be modified. */ static uschar coptable[] = { 0, /* End */ 0, 0, 0, 0, 0, /* \A, \G, \K, \B, \b */ 0, 0, 0, 0, 0, 0, /* \D, \d, \S, \s, \W, \w */ 0, 0, /* Any, Anybyte */ 0, 0, 0, /* NOTPROP, PROP, EXTUNI */ 0, 0, 0, 0, 0, /* \R, \H, \h, \V, \v */ 0, 0, 0, 0, 0, /* \Z, \z, Opt, ^, $ */ 1, /* Char */ 1, /* Charnc */ 1, /* not */ /* Positive single-char repeats */ 1, 1, 1, 1, 1, 1, /* *, *?, +, +?, ?, ?? */ 3, 3, 3, /* upto, minupto, exact */ 1, 1, 1, 3, /* *+, ++, ?+, upto+ */ /* Negative single-char repeats - only for chars < 256 */ 1, 1, 1, 1, 1, 1, /* NOT *, *?, +, +?, ?, ?? */ 3, 3, 3, /* NOT upto, minupto, exact */ 1, 1, 1, 3, /* NOT *+, ++, ?+, updo+ */ /* Positive type repeats */ 1, 1, 1, 1, 1, 1, /* Type *, *?, +, +?, ?, ?? */ 3, 3, 3, /* Type upto, minupto, exact */ 1, 1, 1, 3, /* Type *+, ++, ?+, upto+ */ /* Character class & ref repeats */ 0, 0, 0, 0, 0, 0, /* *, *?, +, +?, ?, ?? */ 0, 0, /* CRRANGE, CRMINRANGE */ 0, /* CLASS */ 0, /* NCLASS */ 0, /* XCLASS - variable length */ 0, /* REF */ 0, /* RECURSE */ 0, /* CALLOUT */ 0, /* Alt */ 0, /* Ket */ 0, /* KetRmax */ 0, /* KetRmin */ 0, /* Assert */ 0, /* Assert not */ 0, /* Assert behind */ 0, /* Assert behind not */ 0, /* Reverse */ 0, 0, 0, 0, /* ONCE, BRA, CBRA, COND */ 0, 0, 0, /* SBRA, SCBRA, SCOND */ 0, /* CREF */ 0, /* RREF */ 0, /* DEF */ 0, 0, /* BRAZERO, BRAMINZERO */ 0, 0, 0, 0, /* PRUNE, SKIP, THEN, COMMIT */ 0, 0 /* FAIL, ACCEPT */ }; /* These 2 tables allow for compact code for testing for \D, \d, \S, \s, \W, and \w */ static uschar toptable1[] = { 0, 0, 0, 0, 0, 0, ctype_digit, ctype_digit, ctype_space, ctype_space, ctype_word, ctype_word, 0 /* OP_ANY */ }; static uschar toptable2[] = { 0, 0, 0, 0, 0, 0, ctype_digit, 0, ctype_space, 0, ctype_word, 0, 1 /* OP_ANY */ }; /* Structure for holding data about a particular state, which is in effect the current data for an active path through the match tree. It must consist entirely of ints because the working vector we are passed, and which we put these structures in, is a vector of ints. */ typedef struct stateblock { int offset; /* Offset to opcode */ int count; /* Count for repeats */ int ims; /* ims flag bits */ int data; /* Some use extra data */ } stateblock; #define INTS_PER_STATEBLOCK (sizeof(stateblock)/sizeof(int)) #ifdef DEBUG /************************************************* * Print character string * *************************************************/ /* Character string printing function for debugging. Arguments: p points to string length number of bytes f where to print Returns: nothing */ static void pchars(unsigned char *p, int length, FILE *f) { int c; while (length-- > 0) { if (isprint(c = *(p++))) fprintf(f, "%c", c); else fprintf(f, "\\x%02x", c); } } #endif /************************************************* * Execute a Regular Expression - DFA engine * *************************************************/ /* This internal function applies a compiled pattern to a subject string, starting at a given point, using a DFA engine. This function is called from the external one, possibly multiple times if the pattern is not anchored. The function calls itself recursively for some kinds of subpattern. Arguments: md the match_data block with fixed information this_start_code the opening bracket of this subexpression's code current_subject where we currently are in the subject string start_offset start offset in the subject string offsets vector to contain the matching string offsets offsetcount size of same workspace vector of workspace wscount size of same ims the current ims flags rlevel function call recursion level recursing regex recursive call level Returns: > 0 => = 0 => -1 => failed to match < -1 => some kind of unexpected problem The following macros are used for adding states to the two state vectors (one for the current character, one for the following character). */ #define ADD_ACTIVE(x,y) \ if (active_count++ < wscount) \ { \ next_active_state->offset = (x); \ next_active_state->count = (y); \ next_active_state->ims = ims; \ next_active_state++; \ DPRINTF(("%.*sADD_ACTIVE(%d,%d)\n", rlevel*2-2, SP, (x), (y))); \ } \ else return PCRE_ERROR_DFA_WSSIZE #define ADD_ACTIVE_DATA(x,y,z) \ if (active_count++ < wscount) \ { \ next_active_state->offset = (x); \ next_active_state->count = (y); \ next_active_state->ims = ims; \ next_active_state->data = (z); \ next_active_state++; \ DPRINTF(("%.*sADD_ACTIVE_DATA(%d,%d,%d)\n", rlevel*2-2, SP, (x), (y), (z))); \ } \ else return PCRE_ERROR_DFA_WSSIZE #define ADD_NEW(x,y) \ if (new_count++ < wscount) \ { \ next_new_state->offset = (x); \ next_new_state->count = (y); \ next_new_state->ims = ims; \ next_new_state++; \ DPRINTF(("%.*sADD_NEW(%d,%d)\n", rlevel*2-2, SP, (x), (y))); \ } \ else return PCRE_ERROR_DFA_WSSIZE #define ADD_NEW_DATA(x,y,z) \ if (new_count++ < wscount) \ { \ next_new_state->offset = (x); \ next_new_state->count = (y); \ next_new_state->ims = ims; \ next_new_state->data = (z); \ next_new_state++; \ DPRINTF(("%.*sADD_NEW_DATA(%d,%d,%d)\n", rlevel*2-2, SP, (x), (y), (z))); \ } \ else return PCRE_ERROR_DFA_WSSIZE /* And now, here is the code */ static int internal_dfa_exec( dfa_match_data *md, const uschar *this_start_code, const uschar *current_subject, int start_offset, int *offsets, int offsetcount, int *workspace, int wscount, int ims, int rlevel, int recursing) { stateblock *active_states, *new_states, *temp_states; stateblock *next_active_state, *next_new_state; const uschar *ctypes, *lcc, *fcc; const uschar *ptr; const uschar *end_code, *first_op; int active_count, new_count, match_count; /* Some fields in the md block are frequently referenced, so we load them into independent variables in the hope that this will perform better. */ const uschar *start_subject = md->start_subject; const uschar *end_subject = md->end_subject; const uschar *start_code = md->start_code; #ifdef SUPPORT_UTF8 BOOL utf8 = (md->poptions & PCRE_UTF8) != 0; #else BOOL utf8 = FALSE; #endif rlevel++; offsetcount &= (-2); wscount -= 2; wscount = (wscount - (wscount % (INTS_PER_STATEBLOCK * 2))) / (2 * INTS_PER_STATEBLOCK); DPRINTF(("\n%.*s---------------------\n" "%.*sCall to internal_dfa_exec f=%d r=%d\n", rlevel*2-2, SP, rlevel*2-2, SP, rlevel, recursing)); ctypes = md->tables + ctypes_offset; lcc = md->tables + lcc_offset; fcc = md->tables + fcc_offset; match_count = PCRE_ERROR_NOMATCH; /* A negative number */ active_states = (stateblock *)(workspace + 2); next_new_state = new_states = active_states + wscount; new_count = 0; first_op = this_start_code + 1 + LINK_SIZE + ((*this_start_code == OP_CBRA || *this_start_code == OP_SCBRA)? 2:0); /* The first thing in any (sub) pattern is a bracket of some sort. Push all the alternative states onto the list, and find out where the end is. This makes is possible to use this function recursively, when we want to stop at a matching internal ket rather than at the end. If the first opcode in the first alternative is OP_REVERSE, we are dealing with a backward assertion. In that case, we have to find out the maximum amount to move back, and set up each alternative appropriately. */ if (*first_op == OP_REVERSE) { int max_back = 0; int gone_back; end_code = this_start_code; do { int back = GET(end_code, 2+LINK_SIZE); if (back > max_back) max_back = back; end_code += GET(end_code, 1); } while (*end_code == OP_ALT); /* If we can't go back the amount required for the longest lookbehind pattern, go back as far as we can; some alternatives may still be viable. */ #ifdef SUPPORT_UTF8 /* In character mode we have to step back character by character */ if (utf8) { for (gone_back = 0; gone_back < max_back; gone_back++) { if (current_subject <= start_subject) break; current_subject--; while (current_subject > start_subject && (*current_subject & 0xc0) == 0x80) current_subject--; } } else #endif /* In byte-mode we can do this quickly. */ { gone_back = (current_subject - max_back < start_subject)? current_subject - start_subject : max_back; current_subject -= gone_back; } /* Now we can process the individual branches. */ end_code = this_start_code; do { int back = GET(end_code, 2+LINK_SIZE); if (back <= gone_back) { int bstate = end_code - start_code + 2 + 2*LINK_SIZE; ADD_NEW_DATA(-bstate, 0, gone_back - back); } end_code += GET(end_code, 1); } while (*end_code == OP_ALT); } /* This is the code for a "normal" subpattern (not a backward assertion). The start of a whole pattern is always one of these. If we are at the top level, we may be asked to restart matching from the same point that we reached for a previous partial match. We still have to scan through the top-level branches to find the end state. */ else { end_code = this_start_code; /* Restarting */ if (rlevel == 1 && (md->moptions & PCRE_DFA_RESTART) != 0) { do { end_code += GET(end_code, 1); } while (*end_code == OP_ALT); new_count = workspace[1]; if (!workspace[0]) memcpy(new_states, active_states, new_count * sizeof(stateblock)); } /* Not restarting */ else { int length = 1 + LINK_SIZE + ((*this_start_code == OP_CBRA || *this_start_code == OP_SCBRA)? 2:0); do { ADD_NEW(end_code - start_code + length, 0); end_code += GET(end_code, 1); length = 1 + LINK_SIZE; } while (*end_code == OP_ALT); } } workspace[0] = 0; /* Bit indicating which vector is current */ DPRINTF(("%.*sEnd state = %d\n", rlevel*2-2, SP, end_code - start_code)); /* Loop for scanning the subject */ ptr = current_subject; for (;;) { int i, j; int clen, dlen; unsigned int c, d; /* Make the new state list into the active state list and empty the new state list. */ temp_states = active_states; active_states = new_states; new_states = temp_states; active_count = new_count; new_count = 0; workspace[0] ^= 1; /* Remember for the restarting feature */ workspace[1] = active_count; #ifdef DEBUG printf("%.*sNext character: rest of subject = \"", rlevel*2-2, SP); pchars((uschar *)ptr, strlen((char *)ptr), stdout); printf("\"\n"); printf("%.*sActive states: ", rlevel*2-2, SP); for (i = 0; i < active_count; i++) printf("%d/%d ", active_states[i].offset, active_states[i].count); printf("\n"); #endif /* Set the pointers for adding new states */ next_active_state = active_states + active_count; next_new_state = new_states; /* Load the current character from the subject outside the loop, as many different states may want to look at it, and we assume that at least one will. */ if (ptr < end_subject) { clen = 1; /* Number of bytes in the character */ #ifdef SUPPORT_UTF8 if (utf8) { GETCHARLEN(c, ptr, clen); } else #endif /* SUPPORT_UTF8 */ c = *ptr; } else { clen = 0; /* This indicates the end of the subject */ c = NOTACHAR; /* This value should never actually be used */ } /* Scan up the active states and act on each one. The result of an action may be to add more states to the currently active list (e.g. on hitting a parenthesis) or it may be to put states on the new list, for considering when we move the character pointer on. */ for (i = 0; i < active_count; i++) { stateblock *current_state = active_states + i; const uschar *code; int state_offset = current_state->offset; int count, codevalue; #ifdef SUPPORT_UCP int chartype, script; #endif #ifdef DEBUG printf ("%.*sProcessing state %d c=", rlevel*2-2, SP, state_offset); if (clen == 0) printf("EOL\n"); else if (c > 32 && c < 127) printf("'%c'\n", c); else printf("0x%02x\n", c); #endif /* This variable is referred to implicity in the ADD_xxx macros. */ ims = current_state->ims; /* A negative offset is a special case meaning "hold off going to this (negated) state until the number of characters in the data field have been skipped". */ if (state_offset < 0) { if (current_state->data > 0) { DPRINTF(("%.*sSkipping this character\n", rlevel*2-2, SP)); ADD_NEW_DATA(state_offset, current_state->count, current_state->data - 1); continue; } else { current_state->offset = state_offset = -state_offset; } } /* Check for a duplicate state with the same count, and skip if found. */ for (j = 0; j < i; j++) { if (active_states[j].offset == state_offset && active_states[j].count == current_state->count) { DPRINTF(("%.*sDuplicate state: skipped\n", rlevel*2-2, SP)); goto NEXT_ACTIVE_STATE; } } /* The state offset is the offset to the opcode */ code = start_code + state_offset; codevalue = *code; /* If this opcode is followed by an inline character, load it. It is tempting to test for the presence of a subject character here, but that is wrong, because sometimes zero repetitions of the subject are permitted. We also use this mechanism for opcodes such as OP_TYPEPLUS that take an argument that is not a data character - but is always one byte long. We have to take special action to deal with \P, \p, \H, \h, \V, \v and \X in this case. To keep the other cases fast, convert these ones to new opcodes. */ if (coptable[codevalue] > 0) { dlen = 1; #ifdef SUPPORT_UTF8 if (utf8) { GETCHARLEN(d, (code + coptable[codevalue]), dlen); } else #endif /* SUPPORT_UTF8 */ d = code[coptable[codevalue]]; if (codevalue >= OP_TYPESTAR) { switch(d) { case OP_ANYBYTE: return PCRE_ERROR_DFA_UITEM; case OP_NOTPROP: case OP_PROP: codevalue += OP_PROP_EXTRA; break; case OP_ANYNL: codevalue += OP_ANYNL_EXTRA; break; case OP_EXTUNI: codevalue += OP_EXTUNI_EXTRA; break; case OP_NOT_HSPACE: case OP_HSPACE: codevalue += OP_HSPACE_EXTRA; break; case OP_NOT_VSPACE: case OP_VSPACE: codevalue += OP_VSPACE_EXTRA; break; default: break; } } } else { dlen = 0; /* Not strictly necessary, but compilers moan */ d = NOTACHAR; /* if these variables are not set. */ } /* Now process the individual opcodes */ switch (codevalue) { /* ========================================================================== */ /* Reached a closing bracket. If not at the end of the pattern, carry on with the next opcode. Otherwise, unless we have an empty string and PCRE_NOTEMPTY is set, save the match data, shifting up all previous matches so we always have the longest first. */ case OP_KET: case OP_KETRMIN: case OP_KETRMAX: if (code != end_code) { ADD_ACTIVE(state_offset + 1 + LINK_SIZE, 0); if (codevalue != OP_KET) { ADD_ACTIVE(state_offset - GET(code, 1), 0); } } else if (ptr > current_subject || (md->moptions & PCRE_NOTEMPTY) == 0) { if (match_count < 0) match_count = (offsetcount >= 2)? 1 : 0; else if (match_count > 0 && ++match_count * 2 >= offsetcount) match_count = 0; count = ((match_count == 0)? offsetcount : match_count * 2) - 2; if (count > 0) memmove(offsets + 2, offsets, count * sizeof(int)); if (offsetcount >= 2) { offsets[0] = current_subject - start_subject; offsets[1] = ptr - start_subject; DPRINTF(("%.*sSet matched string = \"%.*s\"\n", rlevel*2-2, SP, offsets[1] - offsets[0], current_subject)); } if ((md->moptions & PCRE_DFA_SHORTEST) != 0) { DPRINTF(("%.*sEnd of internal_dfa_exec %d: returning %d\n" "%.*s---------------------\n\n", rlevel*2-2, SP, rlevel, match_count, rlevel*2-2, SP)); return match_count; } } break; /* ========================================================================== */ /* These opcodes add to the current list of states without looking at the current character. */ /*-----------------------------------------------------------------*/ case OP_ALT: do { code += GET(code, 1); } while (*code == OP_ALT); ADD_ACTIVE(code - start_code, 0); break; /*-----------------------------------------------------------------*/ case OP_BRA: case OP_SBRA: do { ADD_ACTIVE(code - start_code + 1 + LINK_SIZE, 0); code += GET(code, 1); } while (*code == OP_ALT); break; /*-----------------------------------------------------------------*/ case OP_CBRA: case OP_SCBRA: ADD_ACTIVE(code - start_code + 3 + LINK_SIZE, 0); code += GET(code, 1); while (*code == OP_ALT) { ADD_ACTIVE(code - start_code + 1 + LINK_SIZE, 0); code += GET(code, 1); } break; /*-----------------------------------------------------------------*/ case OP_BRAZERO: case OP_BRAMINZERO: ADD_ACTIVE(state_offset + 1, 0); code += 1 + GET(code, 2); while (*code == OP_ALT) code += GET(code, 1); ADD_ACTIVE(code - start_code + 1 + LINK_SIZE, 0); break; /*-----------------------------------------------------------------*/ case OP_CIRC: if ((ptr == start_subject && (md->moptions & PCRE_NOTBOL) == 0) || ((ims & PCRE_MULTILINE) != 0 && ptr != end_subject && WAS_NEWLINE(ptr))) { ADD_ACTIVE(state_offset + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_EOD: if (ptr >= end_subject) { ADD_ACTIVE(state_offset + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_OPT: ims = code[1]; ADD_ACTIVE(state_offset + 2, 0); break; /*-----------------------------------------------------------------*/ case OP_SOD: if (ptr == start_subject) { ADD_ACTIVE(state_offset + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_SOM: if (ptr == start_subject + start_offset) { ADD_ACTIVE(state_offset + 1, 0); } break; /* ========================================================================== */ /* These opcodes inspect the next subject character, and sometimes the previous one as well, but do not have an argument. The variable clen contains the length of the current character and is zero if we are at the end of the subject. */ /*-----------------------------------------------------------------*/ case OP_ANY: if (clen > 0 && ((ims & PCRE_DOTALL) != 0 || !IS_NEWLINE(ptr))) { ADD_NEW(state_offset + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_EODN: if (clen == 0 || (IS_NEWLINE(ptr) && ptr == end_subject - md->nllen)) { ADD_ACTIVE(state_offset + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_DOLL: if ((md->moptions & PCRE_NOTEOL) == 0) { if (clen == 0 || (IS_NEWLINE(ptr) && ((ims & PCRE_MULTILINE) != 0 || ptr == end_subject - md->nllen) )) { ADD_ACTIVE(state_offset + 1, 0); } } else if ((ims & PCRE_MULTILINE) != 0 && IS_NEWLINE(ptr)) { ADD_ACTIVE(state_offset + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_DIGIT: case OP_WHITESPACE: case OP_WORDCHAR: if (clen > 0 && c < 256 && ((ctypes[c] & toptable1[codevalue]) ^ toptable2[codevalue]) != 0) { ADD_NEW(state_offset + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_NOT_DIGIT: case OP_NOT_WHITESPACE: case OP_NOT_WORDCHAR: if (clen > 0 && (c >= 256 || ((ctypes[c] & toptable1[codevalue]) ^ toptable2[codevalue]) != 0)) { ADD_NEW(state_offset + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_WORD_BOUNDARY: case OP_NOT_WORD_BOUNDARY: { int left_word, right_word; if (ptr > start_subject) { const uschar *temp = ptr - 1; #ifdef SUPPORT_UTF8 if (utf8) BACKCHAR(temp); #endif GETCHARTEST(d, temp); left_word = d < 256 && (ctypes[d] & ctype_word) != 0; } else left_word = 0; if (clen > 0) right_word = c < 256 && (ctypes[c] & ctype_word) != 0; else right_word = 0; if ((left_word == right_word) == (codevalue == OP_NOT_WORD_BOUNDARY)) { ADD_ACTIVE(state_offset + 1, 0); } } break; /*-----------------------------------------------------------------*/ /* Check the next character by Unicode property. We will get here only if the support is in the binary; otherwise a compile-time error occurs. */ #ifdef SUPPORT_UCP case OP_PROP: case OP_NOTPROP: if (clen > 0) { BOOL OK; int category = _pcre_ucp_findprop(c, &chartype, &script); switch(code[1]) { case PT_ANY: OK = TRUE; break; case PT_LAMP: OK = chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt; break; case PT_GC: OK = category == code[2]; break; case PT_PC: OK = chartype == code[2]; break; case PT_SC: OK = script == code[2]; break; /* Should never occur, but keep compilers from grumbling. */ default: OK = codevalue != OP_PROP; break; } if (OK == (codevalue == OP_PROP)) { ADD_NEW(state_offset + 3, 0); } } break; #endif /* ========================================================================== */ /* These opcodes likewise inspect the subject character, but have an argument that is not a data character. It is one of these opcodes: OP_ANY, OP_DIGIT, OP_NOT_DIGIT, OP_WHITESPACE, OP_NOT_SPACE, OP_WORDCHAR, OP_NOT_WORDCHAR. The value is loaded into d. */ case OP_TYPEPLUS: case OP_TYPEMINPLUS: case OP_TYPEPOSPLUS: count = current_state->count; /* Already matched */ if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } if (clen > 0) { if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) || (c < 256 && (d != OP_ANY || (ims & PCRE_DOTALL) != 0 || !IS_NEWLINE(ptr) ) && ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0)) { if (count > 0 && codevalue == OP_TYPEPOSPLUS) { active_count--; /* Remove non-match possibility */ next_active_state--; } count++; ADD_NEW(state_offset, count); } } break; /*-----------------------------------------------------------------*/ case OP_TYPEQUERY: case OP_TYPEMINQUERY: case OP_TYPEPOSQUERY: ADD_ACTIVE(state_offset + 2, 0); if (clen > 0) { if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) || (c < 256 && (d != OP_ANY || (ims & PCRE_DOTALL) != 0 || !IS_NEWLINE(ptr) ) && ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0)) { if (codevalue == OP_TYPEPOSQUERY) { active_count--; /* Remove non-match possibility */ next_active_state--; } ADD_NEW(state_offset + 2, 0); } } break; /*-----------------------------------------------------------------*/ case OP_TYPESTAR: case OP_TYPEMINSTAR: case OP_TYPEPOSSTAR: ADD_ACTIVE(state_offset + 2, 0); if (clen > 0) { if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) || (c < 256 && (d != OP_ANY || (ims & PCRE_DOTALL) != 0 || !IS_NEWLINE(ptr) ) && ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0)) { if (codevalue == OP_TYPEPOSSTAR) { active_count--; /* Remove non-match possibility */ next_active_state--; } ADD_NEW(state_offset, 0); } } break; /*-----------------------------------------------------------------*/ case OP_TYPEEXACT: count = current_state->count; /* Number already matched */ if (clen > 0) { if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) || (c < 256 && (d != OP_ANY || (ims & PCRE_DOTALL) != 0 || !IS_NEWLINE(ptr) ) && ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0)) { if (++count >= GET2(code, 1)) { ADD_NEW(state_offset + 4, 0); } else { ADD_NEW(state_offset, count); } } } break; /*-----------------------------------------------------------------*/ case OP_TYPEUPTO: case OP_TYPEMINUPTO: case OP_TYPEPOSUPTO: ADD_ACTIVE(state_offset + 4, 0); count = current_state->count; /* Number already matched */ if (clen > 0) { if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) || (c < 256 && (d != OP_ANY || (ims & PCRE_DOTALL) != 0 || !IS_NEWLINE(ptr) ) && ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0)) { if (codevalue == OP_TYPEPOSUPTO) { active_count--; /* Remove non-match possibility */ next_active_state--; } if (++count >= GET2(code, 1)) { ADD_NEW(state_offset + 4, 0); } else { ADD_NEW(state_offset, count); } } } break; /* ========================================================================== */ /* These are virtual opcodes that are used when something like OP_TYPEPLUS has OP_PROP, OP_NOTPROP, OP_ANYNL, or OP_EXTUNI as its argument. It keeps the code above fast for the other cases. The argument is in the d variable. */ #ifdef SUPPORT_UCP case OP_PROP_EXTRA + OP_TYPEPLUS: case OP_PROP_EXTRA + OP_TYPEMINPLUS: case OP_PROP_EXTRA + OP_TYPEPOSPLUS: count = current_state->count; /* Already matched */ if (count > 0) { ADD_ACTIVE(state_offset + 4, 0); } if (clen > 0) { BOOL OK; int category = _pcre_ucp_findprop(c, &chartype, &script); switch(code[2]) { case PT_ANY: OK = TRUE; break; case PT_LAMP: OK = chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt; break; case PT_GC: OK = category == code[3]; break; case PT_PC: OK = chartype == code[3]; break; case PT_SC: OK = script == code[3]; break; /* Should never occur, but keep compilers from grumbling. */ default: OK = codevalue != OP_PROP; break; } if (OK == (d == OP_PROP)) { if (count > 0 && codevalue == OP_PROP_EXTRA + OP_TYPEPOSPLUS) { active_count--; /* Remove non-match possibility */ next_active_state--; } count++; ADD_NEW(state_offset, count); } } break; /*-----------------------------------------------------------------*/ case OP_EXTUNI_EXTRA + OP_TYPEPLUS: case OP_EXTUNI_EXTRA + OP_TYPEMINPLUS: case OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS: count = current_state->count; /* Already matched */ if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } if (clen > 0 && _pcre_ucp_findprop(c, &chartype, &script) != ucp_M) { const uschar *nptr = ptr + clen; int ncount = 0; if (count > 0 && codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS) { active_count--; /* Remove non-match possibility */ next_active_state--; } while (nptr < end_subject) { int nd; int ndlen = 1; GETCHARLEN(nd, nptr, ndlen); if (_pcre_ucp_findprop(nd, &chartype, &script) != ucp_M) break; ncount++; nptr += ndlen; } count++; ADD_NEW_DATA(-state_offset, count, ncount); } break; #endif /*-----------------------------------------------------------------*/ case OP_ANYNL_EXTRA + OP_TYPEPLUS: case OP_ANYNL_EXTRA + OP_TYPEMINPLUS: case OP_ANYNL_EXTRA + OP_TYPEPOSPLUS: count = current_state->count; /* Already matched */ if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } if (clen > 0) { int ncount = 0; switch (c) { case 0x000b: case 0x000c: case 0x0085: case 0x2028: case 0x2029: if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break; goto ANYNL01; case 0x000d: if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1; /* Fall through */ ANYNL01: case 0x000a: if (count > 0 && codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSPLUS) { active_count--; /* Remove non-match possibility */ next_active_state--; } count++; ADD_NEW_DATA(-state_offset, count, ncount); break; default: break; } } break; /*-----------------------------------------------------------------*/ case OP_VSPACE_EXTRA + OP_TYPEPLUS: case OP_VSPACE_EXTRA + OP_TYPEMINPLUS: case OP_VSPACE_EXTRA + OP_TYPEPOSPLUS: count = current_state->count; /* Already matched */ if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } if (clen > 0) { BOOL OK; switch (c) { case 0x000a: case 0x000b: case 0x000c: case 0x000d: case 0x0085: case 0x2028: case 0x2029: OK = TRUE; break; default: OK = FALSE; break; } if (OK == (d == OP_VSPACE)) { if (count > 0 && codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSPLUS) { active_count--; /* Remove non-match possibility */ next_active_state--; } count++; ADD_NEW_DATA(-state_offset, count, 0); } } break; /*-----------------------------------------------------------------*/ case OP_HSPACE_EXTRA + OP_TYPEPLUS: case OP_HSPACE_EXTRA + OP_TYPEMINPLUS: case OP_HSPACE_EXTRA + OP_TYPEPOSPLUS: count = current_state->count; /* Already matched */ if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); } if (clen > 0) { BOOL OK; switch (c) { case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ OK = TRUE; break; default: OK = FALSE; break; } if (OK == (d == OP_HSPACE)) { if (count > 0 && codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSPLUS) { active_count--; /* Remove non-match possibility */ next_active_state--; } count++; ADD_NEW_DATA(-state_offset, count, 0); } } break; /*-----------------------------------------------------------------*/ #ifdef SUPPORT_UCP case OP_PROP_EXTRA + OP_TYPEQUERY: case OP_PROP_EXTRA + OP_TYPEMINQUERY: case OP_PROP_EXTRA + OP_TYPEPOSQUERY: count = 4; goto QS1; case OP_PROP_EXTRA + OP_TYPESTAR: case OP_PROP_EXTRA + OP_TYPEMINSTAR: case OP_PROP_EXTRA + OP_TYPEPOSSTAR: count = 0; QS1: ADD_ACTIVE(state_offset + 4, 0); if (clen > 0) { BOOL OK; int category = _pcre_ucp_findprop(c, &chartype, &script); switch(code[2]) { case PT_ANY: OK = TRUE; break; case PT_LAMP: OK = chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt; break; case PT_GC: OK = category == code[3]; break; case PT_PC: OK = chartype == code[3]; break; case PT_SC: OK = script == code[3]; break; /* Should never occur, but keep compilers from grumbling. */ default: OK = codevalue != OP_PROP; break; } if (OK == (d == OP_PROP)) { if (codevalue == OP_PROP_EXTRA + OP_TYPEPOSSTAR || codevalue == OP_PROP_EXTRA + OP_TYPEPOSQUERY) { active_count--; /* Remove non-match possibility */ next_active_state--; } ADD_NEW(state_offset + count, 0); } } break; /*-----------------------------------------------------------------*/ case OP_EXTUNI_EXTRA + OP_TYPEQUERY: case OP_EXTUNI_EXTRA + OP_TYPEMINQUERY: case OP_EXTUNI_EXTRA + OP_TYPEPOSQUERY: count = 2; goto QS2; case OP_EXTUNI_EXTRA + OP_TYPESTAR: case OP_EXTUNI_EXTRA + OP_TYPEMINSTAR: case OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR: count = 0; QS2: ADD_ACTIVE(state_offset + 2, 0); if (clen > 0 && _pcre_ucp_findprop(c, &chartype, &script) != ucp_M) { const uschar *nptr = ptr + clen; int ncount = 0; if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR || codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSQUERY) { active_count--; /* Remove non-match possibility */ next_active_state--; } while (nptr < end_subject) { int nd; int ndlen = 1; GETCHARLEN(nd, nptr, ndlen); if (_pcre_ucp_findprop(nd, &chartype, &script) != ucp_M) break; ncount++; nptr += ndlen; } ADD_NEW_DATA(-(state_offset + count), 0, ncount); } break; #endif /*-----------------------------------------------------------------*/ case OP_ANYNL_EXTRA + OP_TYPEQUERY: case OP_ANYNL_EXTRA + OP_TYPEMINQUERY: case OP_ANYNL_EXTRA + OP_TYPEPOSQUERY: count = 2; goto QS3; case OP_ANYNL_EXTRA + OP_TYPESTAR: case OP_ANYNL_EXTRA + OP_TYPEMINSTAR: case OP_ANYNL_EXTRA + OP_TYPEPOSSTAR: count = 0; QS3: ADD_ACTIVE(state_offset + 2, 0); if (clen > 0) { int ncount = 0; switch (c) { case 0x000b: case 0x000c: case 0x0085: case 0x2028: case 0x2029: if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break; goto ANYNL02; case 0x000d: if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1; /* Fall through */ ANYNL02: case 0x000a: if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSSTAR || codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSQUERY) { active_count--; /* Remove non-match possibility */ next_active_state--; } ADD_NEW_DATA(-(state_offset + count), 0, ncount); break; default: break; } } break; /*-----------------------------------------------------------------*/ case OP_VSPACE_EXTRA + OP_TYPEQUERY: case OP_VSPACE_EXTRA + OP_TYPEMINQUERY: case OP_VSPACE_EXTRA + OP_TYPEPOSQUERY: count = 2; goto QS4; case OP_VSPACE_EXTRA + OP_TYPESTAR: case OP_VSPACE_EXTRA + OP_TYPEMINSTAR: case OP_VSPACE_EXTRA + OP_TYPEPOSSTAR: count = 0; QS4: ADD_ACTIVE(state_offset + 2, 0); if (clen > 0) { BOOL OK; switch (c) { case 0x000a: case 0x000b: case 0x000c: case 0x000d: case 0x0085: case 0x2028: case 0x2029: OK = TRUE; break; default: OK = FALSE; break; } if (OK == (d == OP_VSPACE)) { if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSSTAR || codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSQUERY) { active_count--; /* Remove non-match possibility */ next_active_state--; } ADD_NEW_DATA(-(state_offset + count), 0, 0); } } break; /*-----------------------------------------------------------------*/ case OP_HSPACE_EXTRA + OP_TYPEQUERY: case OP_HSPACE_EXTRA + OP_TYPEMINQUERY: case OP_HSPACE_EXTRA + OP_TYPEPOSQUERY: count = 2; goto QS5; case OP_HSPACE_EXTRA + OP_TYPESTAR: case OP_HSPACE_EXTRA + OP_TYPEMINSTAR: case OP_HSPACE_EXTRA + OP_TYPEPOSSTAR: count = 0; QS5: ADD_ACTIVE(state_offset + 2, 0); if (clen > 0) { BOOL OK; switch (c) { case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ OK = TRUE; break; default: OK = FALSE; break; } if (OK == (d == OP_HSPACE)) { if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSSTAR || codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSQUERY) { active_count--; /* Remove non-match possibility */ next_active_state--; } ADD_NEW_DATA(-(state_offset + count), 0, 0); } } break; /*-----------------------------------------------------------------*/ #ifdef SUPPORT_UCP case OP_PROP_EXTRA + OP_TYPEEXACT: case OP_PROP_EXTRA + OP_TYPEUPTO: case OP_PROP_EXTRA + OP_TYPEMINUPTO: case OP_PROP_EXTRA + OP_TYPEPOSUPTO: if (codevalue != OP_PROP_EXTRA + OP_TYPEEXACT) { ADD_ACTIVE(state_offset + 6, 0); } count = current_state->count; /* Number already matched */ if (clen > 0) { BOOL OK; int category = _pcre_ucp_findprop(c, &chartype, &script); switch(code[4]) { case PT_ANY: OK = TRUE; break; case PT_LAMP: OK = chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt; break; case PT_GC: OK = category == code[5]; break; case PT_PC: OK = chartype == code[5]; break; case PT_SC: OK = script == code[5]; break; /* Should never occur, but keep compilers from grumbling. */ default: OK = codevalue != OP_PROP; break; } if (OK == (d == OP_PROP)) { if (codevalue == OP_PROP_EXTRA + OP_TYPEPOSUPTO) { active_count--; /* Remove non-match possibility */ next_active_state--; } if (++count >= GET2(code, 1)) { ADD_NEW(state_offset + 6, 0); } else { ADD_NEW(state_offset, count); } } } break; /*-----------------------------------------------------------------*/ case OP_EXTUNI_EXTRA + OP_TYPEEXACT: case OP_EXTUNI_EXTRA + OP_TYPEUPTO: case OP_EXTUNI_EXTRA + OP_TYPEMINUPTO: case OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO: if (codevalue != OP_EXTUNI_EXTRA + OP_TYPEEXACT) { ADD_ACTIVE(state_offset + 4, 0); } count = current_state->count; /* Number already matched */ if (clen > 0 && _pcre_ucp_findprop(c, &chartype, &script) != ucp_M) { const uschar *nptr = ptr + clen; int ncount = 0; if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO) { active_count--; /* Remove non-match possibility */ next_active_state--; } while (nptr < end_subject) { int nd; int ndlen = 1; GETCHARLEN(nd, nptr, ndlen); if (_pcre_ucp_findprop(nd, &chartype, &script) != ucp_M) break; ncount++; nptr += ndlen; } if (++count >= GET2(code, 1)) { ADD_NEW_DATA(-(state_offset + 4), 0, ncount); } else { ADD_NEW_DATA(-state_offset, count, ncount); } } break; #endif /*-----------------------------------------------------------------*/ case OP_ANYNL_EXTRA + OP_TYPEEXACT: case OP_ANYNL_EXTRA + OP_TYPEUPTO: case OP_ANYNL_EXTRA + OP_TYPEMINUPTO: case OP_ANYNL_EXTRA + OP_TYPEPOSUPTO: if (codevalue != OP_ANYNL_EXTRA + OP_TYPEEXACT) { ADD_ACTIVE(state_offset + 4, 0); } count = current_state->count; /* Number already matched */ if (clen > 0) { int ncount = 0; switch (c) { case 0x000b: case 0x000c: case 0x0085: case 0x2028: case 0x2029: if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break; goto ANYNL03; case 0x000d: if (ptr + 1 < end_subject && ptr[1] == 0x0a) ncount = 1; /* Fall through */ ANYNL03: case 0x000a: if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSUPTO) { active_count--; /* Remove non-match possibility */ next_active_state--; } if (++count >= GET2(code, 1)) { ADD_NEW_DATA(-(state_offset + 4), 0, ncount); } else { ADD_NEW_DATA(-state_offset, count, ncount); } break; default: break; } } break; /*-----------------------------------------------------------------*/ case OP_VSPACE_EXTRA + OP_TYPEEXACT: case OP_VSPACE_EXTRA + OP_TYPEUPTO: case OP_VSPACE_EXTRA + OP_TYPEMINUPTO: case OP_VSPACE_EXTRA + OP_TYPEPOSUPTO: if (codevalue != OP_VSPACE_EXTRA + OP_TYPEEXACT) { ADD_ACTIVE(state_offset + 4, 0); } count = current_state->count; /* Number already matched */ if (clen > 0) { BOOL OK; switch (c) { case 0x000a: case 0x000b: case 0x000c: case 0x000d: case 0x0085: case 0x2028: case 0x2029: OK = TRUE; break; default: OK = FALSE; } if (OK == (d == OP_VSPACE)) { if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSUPTO) { active_count--; /* Remove non-match possibility */ next_active_state--; } if (++count >= GET2(code, 1)) { ADD_NEW_DATA(-(state_offset + 4), 0, 0); } else { ADD_NEW_DATA(-state_offset, count, 0); } } } break; /*-----------------------------------------------------------------*/ case OP_HSPACE_EXTRA + OP_TYPEEXACT: case OP_HSPACE_EXTRA + OP_TYPEUPTO: case OP_HSPACE_EXTRA + OP_TYPEMINUPTO: case OP_HSPACE_EXTRA + OP_TYPEPOSUPTO: if (codevalue != OP_HSPACE_EXTRA + OP_TYPEEXACT) { ADD_ACTIVE(state_offset + 4, 0); } count = current_state->count; /* Number already matched */ if (clen > 0) { BOOL OK; switch (c) { case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ OK = TRUE; break; default: OK = FALSE; break; } if (OK == (d == OP_HSPACE)) { if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSUPTO) { active_count--; /* Remove non-match possibility */ next_active_state--; } if (++count >= GET2(code, 1)) { ADD_NEW_DATA(-(state_offset + 4), 0, 0); } else { ADD_NEW_DATA(-state_offset, count, 0); } } } break; /* ========================================================================== */ /* These opcodes are followed by a character that is usually compared to the current subject character; it is loaded into d. We still get here even if there is no subject character, because in some cases zero repetitions are permitted. */ /*-----------------------------------------------------------------*/ case OP_CHAR: if (clen > 0 && c == d) { ADD_NEW(state_offset + dlen + 1, 0); } break; /*-----------------------------------------------------------------*/ case OP_CHARNC: if (clen == 0) break; #ifdef SUPPORT_UTF8 if (utf8) { if (c == d) { ADD_NEW(state_offset + dlen + 1, 0); } else { unsigned int othercase; if (c < 128) othercase = fcc[c]; else /* If we have Unicode property support, we can use it to test the other case of the character. */ #ifdef SUPPORT_UCP othercase = _pcre_ucp_othercase(c); #else othercase = NOTACHAR; #endif if (d == othercase) { ADD_NEW(state_offset + dlen + 1, 0); } } } else #endif /* SUPPORT_UTF8 */ /* Non-UTF-8 mode */ { if (lcc[c] == lcc[d]) { ADD_NEW(state_offset + 2, 0); } } break; #ifdef SUPPORT_UCP /*-----------------------------------------------------------------*/ /* This is a tricky one because it can match more than one character. Find out how many characters to skip, and then set up a negative state to wait for them to pass before continuing. */ case OP_EXTUNI: if (clen > 0 && _pcre_ucp_findprop(c, &chartype, &script) != ucp_M) { const uschar *nptr = ptr + clen; int ncount = 0; while (nptr < end_subject) { int nclen = 1; GETCHARLEN(c, nptr, nclen); if (_pcre_ucp_findprop(c, &chartype, &script) != ucp_M) break; ncount++; nptr += nclen; } ADD_NEW_DATA(-(state_offset + 1), 0, ncount); } break; #endif /*-----------------------------------------------------------------*/ /* This is a tricky like EXTUNI because it too can match more than one character (when CR is followed by LF). In this case, set up a negative state to wait for one character to pass before continuing. */ case OP_ANYNL: if (clen > 0) switch(c) { case 0x000b: case 0x000c: case 0x0085: case 0x2028: case 0x2029: if ((md->moptions & PCRE_BSR_ANYCRLF) != 0) break; case 0x000a: ADD_NEW(state_offset + 1, 0); break; case 0x000d: if (ptr + 1 < end_subject && ptr[1] == 0x0a) { ADD_NEW_DATA(-(state_offset + 1), 0, 1); } else { ADD_NEW(state_offset + 1, 0); } break; } break; /*-----------------------------------------------------------------*/ case OP_NOT_VSPACE: if (clen > 0) switch(c) { case 0x000a: case 0x000b: case 0x000c: case 0x000d: case 0x0085: case 0x2028: case 0x2029: break; default: ADD_NEW(state_offset + 1, 0); break; } break; /*-----------------------------------------------------------------*/ case OP_VSPACE: if (clen > 0) switch(c) { case 0x000a: case 0x000b: case 0x000c: case 0x000d: case 0x0085: case 0x2028: case 0x2029: ADD_NEW(state_offset + 1, 0); break; default: break; } break; /*-----------------------------------------------------------------*/ case OP_NOT_HSPACE: if (clen > 0) switch(c) { case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ break; default: ADD_NEW(state_offset + 1, 0); break; } break; /*-----------------------------------------------------------------*/ case OP_HSPACE: if (clen > 0) switch(c) { case 0x09: /* HT */ case 0x20: /* SPACE */ case 0xa0: /* NBSP */ case 0x1680: /* OGHAM SPACE MARK */ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ case 0x202f: /* NARROW NO-BREAK SPACE */ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ case 0x3000: /* IDEOGRAPHIC SPACE */ ADD_NEW(state_offset + 1, 0); break; } break; /*-----------------------------------------------------------------*/ /* Match a negated single character. This is only used for one-byte characters, that is, we know that d < 256. The character we are checking (c) can be multibyte. */ case OP_NOT: if (clen > 0) { unsigned int otherd = ((ims & PCRE_CASELESS) != 0)? fcc[d] : d; if (c != d && c != otherd) { ADD_NEW(state_offset + dlen + 1, 0); } } break; /*-----------------------------------------------------------------*/ case OP_PLUS: case OP_MINPLUS: case OP_POSPLUS: case OP_NOTPLUS: case OP_NOTMINPLUS: case OP_NOTPOSPLUS: count = current_state->count; /* Already matched */ if (count > 0) { ADD_ACTIVE(state_offset + dlen + 1, 0); } if (clen > 0) { unsigned int otherd = NOTACHAR; if ((ims & PCRE_CASELESS) != 0) { #ifdef SUPPORT_UTF8 if (utf8 && d >= 128) { #ifdef SUPPORT_UCP otherd = _pcre_ucp_othercase(d); #endif /* SUPPORT_UCP */ } else #endif /* SUPPORT_UTF8 */ otherd = fcc[d]; } if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR)) { if (count > 0 && (codevalue == OP_POSPLUS || codevalue == OP_NOTPOSPLUS)) { active_count--; /* Remove non-match possibility */ next_active_state--; } count++; ADD_NEW(state_offset, count); } } break; /*-----------------------------------------------------------------*/ case OP_QUERY: case OP_MINQUERY: case OP_POSQUERY: case OP_NOTQUERY: case OP_NOTMINQUERY: case OP_NOTPOSQUERY: ADD_ACTIVE(state_offset + dlen + 1, 0); if (clen > 0) { unsigned int otherd = NOTACHAR; if ((ims & PCRE_CASELESS) != 0) { #ifdef SUPPORT_UTF8 if (utf8 && d >= 128) { #ifdef SUPPORT_UCP otherd = _pcre_ucp_othercase(d); #endif /* SUPPORT_UCP */ } else #endif /* SUPPORT_UTF8 */ otherd = fcc[d]; } if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR)) { if (codevalue == OP_POSQUERY || codevalue == OP_NOTPOSQUERY) { active_count--; /* Remove non-match possibility */ next_active_state--; } ADD_NEW(state_offset + dlen + 1, 0); } } break; /*-----------------------------------------------------------------*/ case OP_STAR: case OP_MINSTAR: case OP_POSSTAR: case OP_NOTSTAR: case OP_NOTMINSTAR: case OP_NOTPOSSTAR: ADD_ACTIVE(state_offset + dlen + 1, 0); if (clen > 0) { unsigned int otherd = NOTACHAR; if ((ims & PCRE_CASELESS) != 0) { #ifdef SUPPORT_UTF8 if (utf8 && d >= 128) { #ifdef SUPPORT_UCP otherd = _pcre_ucp_othercase(d); #endif /* SUPPORT_UCP */ } else #endif /* SUPPORT_UTF8 */ otherd = fcc[d]; } if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR)) { if (codevalue == OP_POSSTAR || codevalue == OP_NOTPOSSTAR) { active_count--; /* Remove non-match possibility */ next_active_state--; } ADD_NEW(state_offset, 0); } } break; /*-----------------------------------------------------------------*/ case OP_EXACT: case OP_NOTEXACT: count = current_state->count; /* Number already matched */ if (clen > 0) { unsigned int otherd = NOTACHAR; if ((ims & PCRE_CASELESS) != 0) { #ifdef SUPPORT_UTF8 if (utf8 && d >= 128) { #ifdef SUPPORT_UCP otherd = _pcre_ucp_othercase(d); #endif /* SUPPORT_UCP */ } else #endif /* SUPPORT_UTF8 */ otherd = fcc[d]; } if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR)) { if (++count >= GET2(code, 1)) { ADD_NEW(state_offset + dlen + 3, 0); } else { ADD_NEW(state_offset, count); } } } break; /*-----------------------------------------------------------------*/ case OP_UPTO: case OP_MINUPTO: case OP_POSUPTO: case OP_NOTUPTO: case OP_NOTMINUPTO: case OP_NOTPOSUPTO: ADD_ACTIVE(state_offset + dlen + 3, 0); count = current_state->count; /* Number already matched */ if (clen > 0) { unsigned int otherd = NOTACHAR; if ((ims & PCRE_CASELESS) != 0) { #ifdef SUPPORT_UTF8 if (utf8 && d >= 128) { #ifdef SUPPORT_UCP otherd = _pcre_ucp_othercase(d); #endif /* SUPPORT_UCP */ } else #endif /* SUPPORT_UTF8 */ otherd = fcc[d]; } if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR)) { if (codevalue == OP_POSUPTO || codevalue == OP_NOTPOSUPTO) { active_count--; /* Remove non-match possibility */ next_active_state--; } if (++count >= GET2(code, 1)) { ADD_NEW(state_offset + dlen + 3, 0); } else { ADD_NEW(state_offset, count); } } } break; /* ========================================================================== */ /* These are the class-handling opcodes */ case OP_CLASS: case OP_NCLASS: case OP_XCLASS: { BOOL isinclass = FALSE; int next_state_offset; const uschar *ecode; /* For a simple class, there is always just a 32-byte table, and we can set isinclass from it. */ if (codevalue != OP_XCLASS) { ecode = code + 33; if (clen > 0) { isinclass = (c > 255)? (codevalue == OP_NCLASS) : ((code[1 + c/8] & (1 << (c&7))) != 0); } } /* An extended class may have a table or a list of single characters, ranges, or both, and it may be positive or negative. There's a function that sorts all this out. */ else { ecode = code + GET(code, 1); if (clen > 0) isinclass = _pcre_xclass(c, code + 1 + LINK_SIZE); } /* At this point, isinclass is set for all kinds of class, and ecode points to the byte after the end of the class. If there is a quantifier, this is where it will be. */ next_state_offset = ecode - start_code; switch (*ecode) { case OP_CRSTAR: case OP_CRMINSTAR: ADD_ACTIVE(next_state_offset + 1, 0); if (isinclass) { ADD_NEW(state_offset, 0); } break; case OP_CRPLUS: case OP_CRMINPLUS: count = current_state->count; /* Already matched */ if (count > 0) { ADD_ACTIVE(next_state_offset + 1, 0); } if (isinclass) { count++; ADD_NEW(state_offset, count); } break; case OP_CRQUERY: case OP_CRMINQUERY: ADD_ACTIVE(next_state_offset + 1, 0); if (isinclass) { ADD_NEW(next_state_offset + 1, 0); } break; case OP_CRRANGE: case OP_CRMINRANGE: count = current_state->count; /* Already matched */ if (count >= GET2(ecode, 1)) { ADD_ACTIVE(next_state_offset + 5, 0); } if (isinclass) { int max = GET2(ecode, 3); if (++count >= max && max != 0) /* Max 0 => no limit */ { ADD_NEW(next_state_offset + 5, 0); } else { ADD_NEW(state_offset, count); } } break; default: if (isinclass) { ADD_NEW(next_state_offset, 0); } break; } } break; /* ========================================================================== */ /* These are the opcodes for fancy brackets of various kinds. We have to use recursion in order to handle them. */ case OP_ASSERT: case OP_ASSERT_NOT: case OP_ASSERTBACK: case OP_ASSERTBACK_NOT: { int rc; int local_offsets[2]; int local_workspace[1000]; const uschar *endasscode = code + GET(code, 1); while (*endasscode == OP_ALT) endasscode += GET(endasscode, 1); rc = internal_dfa_exec( md, /* static match data */ code, /* this subexpression's code */ ptr, /* where we currently are */ ptr - start_subject, /* start offset */ local_offsets, /* offset vector */ sizeof(local_offsets)/sizeof(int), /* size of same */ local_workspace, /* workspace vector */ sizeof(local_workspace)/sizeof(int), /* size of same */ ims, /* the current ims flags */ rlevel, /* function recursion level */ recursing); /* pass on regex recursion */ if ((rc >= 0) == (codevalue == OP_ASSERT || codevalue == OP_ASSERTBACK)) { ADD_ACTIVE(endasscode + LINK_SIZE + 1 - start_code, 0); } } break; /*-----------------------------------------------------------------*/ case OP_COND: case OP_SCOND: { int local_offsets[1000]; int local_workspace[1000]; int condcode = code[LINK_SIZE+1]; /* Back reference conditions are not supported */ if (condcode == OP_CREF) return PCRE_ERROR_DFA_UCOND; /* The DEFINE condition is always false */ if (condcode == OP_DEF) { ADD_ACTIVE(state_offset + GET(code, 1) + LINK_SIZE + 1, 0); } /* The only supported version of OP_RREF is for the value RREF_ANY, which means "test if in any recursion". We can't test for specifically recursed groups. */ else if (condcode == OP_RREF) { int value = GET2(code, LINK_SIZE+2); if (value != RREF_ANY) return PCRE_ERROR_DFA_UCOND; if (recursing > 0) { ADD_ACTIVE(state_offset + LINK_SIZE + 4, 0); } else { ADD_ACTIVE(state_offset + GET(code, 1) + LINK_SIZE + 1, 0); } } /* Otherwise, the condition is an assertion */ else { int rc; const uschar *asscode = code + LINK_SIZE + 1; const uschar *endasscode = asscode + GET(asscode, 1); while (*endasscode == OP_ALT) endasscode += GET(endasscode, 1); rc = internal_dfa_exec( md, /* fixed match data */ asscode, /* this subexpression's code */ ptr, /* where we currently are */ ptr - start_subject, /* start offset */ local_offsets, /* offset vector */ sizeof(local_offsets)/sizeof(int), /* size of same */ local_workspace, /* workspace vector */ sizeof(local_workspace)/sizeof(int), /* size of same */ ims, /* the current ims flags */ rlevel, /* function recursion level */ recursing); /* pass on regex recursion */ if ((rc >= 0) == (condcode == OP_ASSERT || condcode == OP_ASSERTBACK)) { ADD_ACTIVE(endasscode + LINK_SIZE + 1 - start_code, 0); } else { ADD_ACTIVE(state_offset + GET(code, 1) + LINK_SIZE + 1, 0); } } } break; /*-----------------------------------------------------------------*/ case OP_RECURSE: { int local_offsets[1000]; int local_workspace[1000]; int rc; DPRINTF(("%.*sStarting regex recursion %d\n", rlevel*2-2, SP, recursing + 1)); rc = internal_dfa_exec( md, /* fixed match data */ start_code + GET(code, 1), /* this subexpression's code */ ptr, /* where we currently are */ ptr - start_subject, /* start offset */ local_offsets, /* offset vector */ sizeof(local_offsets)/sizeof(int), /* size of same */ local_workspace, /* workspace vector */ sizeof(local_workspace)/sizeof(int), /* size of same */ ims, /* the current ims flags */ rlevel, /* function recursion level */ recursing + 1); /* regex recurse level */ DPRINTF(("%.*sReturn from regex recursion %d: rc=%d\n", rlevel*2-2, SP, recursing + 1, rc)); /* Ran out of internal offsets */ if (rc == 0) return PCRE_ERROR_DFA_RECURSE; /* For each successful matched substring, set up the next state with a count of characters to skip before trying it. Note that the count is in characters, not bytes. */ if (rc > 0) { for (rc = rc*2 - 2; rc >= 0; rc -= 2) { const uschar *p = start_subject + local_offsets[rc]; const uschar *pp = start_subject + local_offsets[rc+1]; int charcount = local_offsets[rc+1] - local_offsets[rc]; while (p < pp) if ((*p++ & 0xc0) == 0x80) charcount--; if (charcount > 0) { ADD_NEW_DATA(-(state_offset + LINK_SIZE + 1), 0, (charcount - 1)); } else { ADD_ACTIVE(state_offset + LINK_SIZE + 1, 0); } } } else if (rc != PCRE_ERROR_NOMATCH) return rc; } break; /*-----------------------------------------------------------------*/ case OP_ONCE: { int local_offsets[2]; int local_workspace[1000]; int rc = internal_dfa_exec( md, /* fixed match data */ code, /* this subexpression's code */ ptr, /* where we currently are */ ptr - start_subject, /* start offset */ local_offsets, /* offset vector */ sizeof(local_offsets)/sizeof(int), /* size of same */ local_workspace, /* workspace vector */ sizeof(local_workspace)/sizeof(int), /* size of same */ ims, /* the current ims flags */ rlevel, /* function recursion level */ recursing); /* pass on regex recursion */ if (rc >= 0) { const uschar *end_subpattern = code; int charcount = local_offsets[1] - local_offsets[0]; int next_state_offset, repeat_state_offset; do { end_subpattern += GET(end_subpattern, 1); } while (*end_subpattern == OP_ALT); next_state_offset = end_subpattern - start_code + LINK_SIZE + 1; /* If the end of this subpattern is KETRMAX or KETRMIN, we must arrange for the repeat state also to be added to the relevant list. Calculate the offset, or set -1 for no repeat. */ repeat_state_offset = (*end_subpattern == OP_KETRMAX || *end_subpattern == OP_KETRMIN)? end_subpattern - start_code - GET(end_subpattern, 1) : -1; /* If we have matched an empty string, add the next state at the current character pointer. This is important so that the duplicate checking kicks in, which is what breaks infinite loops that match an empty string. */ if (charcount == 0) { ADD_ACTIVE(next_state_offset, 0); } /* Optimization: if there are no more active states, and there are no new states yet set up, then skip over the subject string right here, to save looping. Otherwise, set up the new state to swing into action when the end of the substring is reached. */ else if (i + 1 >= active_count && new_count == 0) { ptr += charcount; clen = 0; ADD_NEW(next_state_offset, 0); /* If we are adding a repeat state at the new character position, we must fudge things so that it is the only current state. Otherwise, it might be a duplicate of one we processed before, and that would cause it to be skipped. */ if (repeat_state_offset >= 0) { next_active_state = active_states; active_count = 0; i = -1; ADD_ACTIVE(repeat_state_offset, 0); } } else { const uschar *p = start_subject + local_offsets[0]; const uschar *pp = start_subject + local_offsets[1]; while (p < pp) if ((*p++ & 0xc0) == 0x80) charcount--; ADD_NEW_DATA(-next_state_offset, 0, (charcount - 1)); if (repeat_state_offset >= 0) { ADD_NEW_DATA(-repeat_state_offset, 0, (charcount - 1)); } } } else if (rc != PCRE_ERROR_NOMATCH) return rc; } break; /* ========================================================================== */ /* Handle callouts */ case OP_CALLOUT: if (pcre_callout != NULL) { int rrc; pcre_callout_block cb; cb.version = 1; /* Version 1 of the callout block */ cb.callout_number = code[1]; cb.offset_vector = offsets; cb.subject = (PCRE_SPTR)start_subject; cb.subject_length = end_subject - start_subject; cb.start_match = current_subject - start_subject; cb.current_position = ptr - start_subject; cb.pattern_position = GET(code, 2); cb.next_item_length = GET(code, 2 + LINK_SIZE); cb.capture_top = 1; cb.capture_last = -1; cb.callout_data = md->callout_data; if ((rrc = (*pcre_callout)(&cb)) < 0) return rrc; /* Abandon */ if (rrc == 0) { ADD_ACTIVE(state_offset + 2 + 2*LINK_SIZE, 0); } } break; /* ========================================================================== */ default: /* Unsupported opcode */ return PCRE_ERROR_DFA_UITEM; } NEXT_ACTIVE_STATE: continue; } /* End of loop scanning active states */ /* We have finished the processing at the current subject character. If no new states have been set for the next character, we have found all the matches that we are going to find. If we are at the top level and partial matching has been requested, check for appropriate conditions. */ if (new_count <= 0) { if (match_count < 0 && /* No matches found */ rlevel == 1 && /* Top level match function */ (md->moptions & PCRE_PARTIAL) != 0 && /* Want partial matching */ ptr >= end_subject && /* Reached end of subject */ ptr > current_subject) /* Matched non-empty string */ { if (offsetcount >= 2) { offsets[0] = current_subject - start_subject; offsets[1] = end_subject - start_subject; } match_count = PCRE_ERROR_PARTIAL; } DPRINTF(("%.*sEnd of internal_dfa_exec %d: returning %d\n" "%.*s---------------------\n\n", rlevel*2-2, SP, rlevel, match_count, rlevel*2-2, SP)); break; /* In effect, "return", but see the comment below */ } /* One or more states are active for the next character. */ ptr += clen; /* Advance to next subject character */ } /* Loop to move along the subject string */ /* Control gets here from "break" a few lines above. We do it this way because if we use "return" above, we have compiler trouble. Some compilers warn if there's nothing here because they think the function doesn't return a value. On the other hand, if we put a dummy statement here, some more clever compilers complain that it can't be reached. Sigh. */ return match_count; } /************************************************* * Execute a Regular Expression - DFA engine * *************************************************/ /* This external function applies a compiled re to a subject string using a DFA engine. This function calls the internal function multiple times if the pattern is not anchored. Arguments: argument_re points to the compiled expression extra_data points to extra data or is NULL subject points to the subject string length length of subject string (may contain binary zeros) start_offset where to start in the subject string options option bits offsets vector of match offsets offsetcount size of same workspace workspace vector wscount size of same Returns: > 0 => number of match offset pairs placed in offsets = 0 => offsets overflowed; longest matches are present -1 => failed to match < -1 => some kind of unexpected problem */ PCRE_EXP_DEFN int pcre_dfa_exec(const pcre *argument_re, const pcre_extra *extra_data, const char *subject, int length, int start_offset, int options, int *offsets, int offsetcount, int *workspace, int wscount) { real_pcre *re = (real_pcre *)argument_re; dfa_match_data match_block; dfa_match_data *md = &match_block; BOOL utf8, anchored, startline, firstline; const uschar *current_subject, *end_subject, *lcc; pcre_study_data internal_study; const pcre_study_data *study = NULL; real_pcre internal_re; const uschar *req_byte_ptr; const uschar *start_bits = NULL; BOOL first_byte_caseless = FALSE; BOOL req_byte_caseless = FALSE; int first_byte = -1; int req_byte = -1; int req_byte2 = -1; int newline; /* Plausibility checks */ if ((options & ~PUBLIC_DFA_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION; if (re == NULL || subject == NULL || workspace == NULL || (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL; if (offsetcount < 0) return PCRE_ERROR_BADCOUNT; if (wscount < 20) return PCRE_ERROR_DFA_WSSIZE; /* We need to find the pointer to any study data before we test for byte flipping, so we scan the extra_data block first. This may set two fields in the match block, so we must initialize them beforehand. However, the other fields in the match block must not be set until after the byte flipping. */ md->tables = re->tables; md->callout_data = NULL; if (extra_data != NULL) { unsigned int flags = extra_data->flags; if ((flags & PCRE_EXTRA_STUDY_DATA) != 0) study = (const pcre_study_data *)extra_data->study_data; if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0) return PCRE_ERROR_DFA_UMLIMIT; if ((flags & PCRE_EXTRA_MATCH_LIMIT_RECURSION) != 0) return PCRE_ERROR_DFA_UMLIMIT; if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0) md->callout_data = extra_data->callout_data; if ((flags & PCRE_EXTRA_TABLES) != 0) md->tables = extra_data->tables; } /* Check that the first field in the block is the magic number. If it is not, test for a regex that was compiled on a host of opposite endianness. If this is the case, flipped values are put in internal_re and internal_study if there was study data too. */ if (re->magic_number != MAGIC_NUMBER) { re = _pcre_try_flipped(re, &internal_re, study, &internal_study); if (re == NULL) return PCRE_ERROR_BADMAGIC; if (study != NULL) study = &internal_study; } /* Set some local values */ current_subject = (const unsigned char *)subject + start_offset; end_subject = (const unsigned char *)subject + length; req_byte_ptr = current_subject - 1; #ifdef SUPPORT_UTF8 utf8 = (re->options & PCRE_UTF8) != 0; #else utf8 = FALSE; #endif anchored = (options & (PCRE_ANCHORED|PCRE_DFA_RESTART)) != 0 || (re->options & PCRE_ANCHORED) != 0; /* The remaining fixed data for passing around. */ md->start_code = (const uschar *)argument_re + re->name_table_offset + re->name_count * re->name_entry_size; md->start_subject = (const unsigned char *)subject; md->end_subject = end_subject; md->moptions = options; md->poptions = re->options; /* If the BSR option is not set at match time, copy what was set at compile time. */ if ((md->moptions & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) == 0) { if ((re->options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)) != 0) md->moptions |= re->options & (PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE); #ifdef BSR_ANYCRLF else md->moptions |= PCRE_BSR_ANYCRLF; #endif } /* Handle different types of newline. The three bits give eight cases. If nothing is set at run time, whatever was used at compile time applies. */ switch ((((options & PCRE_NEWLINE_BITS) == 0)? re->options : (pcre_uint32)options) & PCRE_NEWLINE_BITS) { case 0: newline = NEWLINE; break; /* Compile-time default */ case PCRE_NEWLINE_CR: newline = '\r'; break; case PCRE_NEWLINE_LF: newline = '\n'; break; case PCRE_NEWLINE_CR+ PCRE_NEWLINE_LF: newline = ('\r' << 8) | '\n'; break; case PCRE_NEWLINE_ANY: newline = -1; break; case PCRE_NEWLINE_ANYCRLF: newline = -2; break; default: return PCRE_ERROR_BADNEWLINE; } if (newline == -2) { md->nltype = NLTYPE_ANYCRLF; } else if (newline < 0) { md->nltype = NLTYPE_ANY; } else { md->nltype = NLTYPE_FIXED; if (newline > 255) { md->nllen = 2; md->nl[0] = (newline >> 8) & 255; md->nl[1] = newline & 255; } else { md->nllen = 1; md->nl[0] = newline; } } /* Check a UTF-8 string if required. Unfortunately there's no way of passing back the character offset. */ #ifdef SUPPORT_UTF8 if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0) { if (_pcre_valid_utf8((uschar *)subject, length) >= 0) return PCRE_ERROR_BADUTF8; if (start_offset > 0 && start_offset < length) { int tb = ((uschar *)subject)[start_offset]; if (tb > 127) { tb &= 0xc0; if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET; } } } #endif /* If the exec call supplied NULL for tables, use the inbuilt ones. This is a feature that makes it possible to save compiled regex and re-use them in other programs later. */ if (md->tables == NULL) md->tables = _pcre_default_tables; /* The lower casing table and the "must be at the start of a line" flag are used in a loop when finding where to start. */ lcc = md->tables + lcc_offset; startline = (re->flags & PCRE_STARTLINE) != 0; firstline = (re->options & PCRE_FIRSTLINE) != 0; /* Set up the first character to match, if available. The first_byte value is never set for an anchored regular expression, but the anchoring may be forced at run time, so we have to test for anchoring. The first char may be unset for an unanchored pattern, of course. If there's no first char and the pattern was studied, there may be a bitmap of possible first characters. */ if (!anchored) { if ((re->flags & PCRE_FIRSTSET) != 0) { first_byte = re->first_byte & 255; if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE) first_byte = lcc[first_byte]; } else { if (startline && study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0) start_bits = study->start_bits; } } /* For anchored or unanchored matches, there may be a "last known required character" set. */ if ((re->flags & PCRE_REQCHSET) != 0) { req_byte = re->req_byte & 255; req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0; req_byte2 = (md->tables + fcc_offset)[req_byte]; /* case flipped */ } /* Call the main matching function, looping for a non-anchored regex after a failed match. Unless restarting, optimize by moving to the first match character if possible, when not anchored. Then unless wanting a partial match, check for a required later character. */ for (;;) { int rc; if ((options & PCRE_DFA_RESTART) == 0) { const uschar *save_end_subject = end_subject; /* Advance to a unique first char if possible. If firstline is TRUE, the start of the match is constrained to the first line of a multiline string. Implement this by temporarily adjusting end_subject so that we stop scanning at a newline. If the match fails at the newline, later code breaks this loop. */ if (firstline) { const uschar *t = current_subject; while (t < md->end_subject && !IS_NEWLINE(t)) t++; end_subject = t; } if (first_byte >= 0) { if (first_byte_caseless) while (current_subject < end_subject && lcc[*current_subject] != first_byte) current_subject++; else while (current_subject < end_subject && *current_subject != first_byte) current_subject++; } /* Or to just after a linebreak for a multiline match if possible */ else if (startline) { if (current_subject > md->start_subject + start_offset) { while (current_subject <= end_subject && !WAS_NEWLINE(current_subject)) current_subject++; /* If we have just passed a CR and the newline option is ANY or ANYCRLF, and we are now at a LF, advance the match position by one more character. */ if (current_subject[-1] == '\r' && (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF) && current_subject < end_subject && *current_subject == '\n') current_subject++; } } /* Or to a non-unique first char after study */ else if (start_bits != NULL) { while (current_subject < end_subject) { register unsigned int c = *current_subject; if ((start_bits[c/8] & (1 << (c&7))) == 0) current_subject++; else break; } } /* Restore fudged end_subject */ end_subject = save_end_subject; } /* If req_byte is set, we know that that character must appear in the subject for the match to succeed. If the first character is set, req_byte must be later in the subject; otherwise the test starts at the match point. This optimization can save a huge amount of work in patterns with nested unlimited repeats that aren't going to match. Writing separate code for cased/caseless versions makes it go faster, as does using an autoincrement and backing off on a match. HOWEVER: when the subject string is very, very long, searching to its end can take a long time, and give bad performance on quite ordinary patterns. This showed up when somebody was matching /^C/ on a 32-megabyte string... so we don't do this when the string is sufficiently long. ALSO: this processing is disabled when partial matching is requested. */ if (req_byte >= 0 && end_subject - current_subject < REQ_BYTE_MAX && (options & PCRE_PARTIAL) == 0) { register const uschar *p = current_subject + ((first_byte >= 0)? 1 : 0); /* We don't need to repeat the search if we haven't yet reached the place we found it at last time. */ if (p > req_byte_ptr) { if (req_byte_caseless) { while (p < end_subject) { register int pp = *p++; if (pp == req_byte || pp == req_byte2) { p--; break; } } } else { while (p < end_subject) { if (*p++ == req_byte) { p--; break; } } } /* If we can't find the required character, break the matching loop, which will cause a return or PCRE_ERROR_NOMATCH. */ if (p >= end_subject) break; /* If we have found the required character, save the point where we found it, so that we don't search again next time round the loop if the start hasn't passed this character yet. */ req_byte_ptr = p; } } /* OK, now we can do the business */ rc = internal_dfa_exec( md, /* fixed match data */ md->start_code, /* this subexpression's code */ current_subject, /* where we currently are */ start_offset, /* start offset in subject */ offsets, /* offset vector */ offsetcount, /* size of same */ workspace, /* workspace vector */ wscount, /* size of same */ re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL), /* ims flags */ 0, /* function recurse level */ 0); /* regex recurse level */ /* Anything other than "no match" means we are done, always; otherwise, carry on only if not anchored. */ if (rc != PCRE_ERROR_NOMATCH || anchored) return rc; /* Advance to the next subject character unless we are at the end of a line and firstline is set. */ if (firstline && IS_NEWLINE(current_subject)) break; current_subject++; if (utf8) { while (current_subject < end_subject && (*current_subject & 0xc0) == 0x80) current_subject++; } if (current_subject > end_subject) break; /* If we have just passed a CR and we are now at a LF, and the pattern does not contain any explicit matches for \r or \n, and the newline option is CRLF or ANY or ANYCRLF, advance the match position by one more character. */ if (current_subject[-1] == '\r' && current_subject < end_subject && *current_subject == '\n' && (re->flags & PCRE_HASCRORLF) == 0 && (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF || md->nllen == 2)) current_subject++; } /* "Bumpalong" loop */ return PCRE_ERROR_NOMATCH; } /* End of pcre_dfa_exec.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre.h0000644000175000017500000002701311407320460021737 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* This is the public header file for the PCRE library, to be #included by applications that call the PCRE functions. Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ #ifndef _PCRE_H #define _PCRE_H /* The current PCRE version information. */ #define PCRE_MAJOR 7 #define PCRE_MINOR 6 #define PCRE_PRERELEASE #define PCRE_DATE 2008-01-28 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE, the appropriate export setting is defined in pcre_internal.h, which includes this file. So we don't change existing definitions of PCRE_EXP_DECL and PCRECPP_EXP_DECL. */ #if defined(_WIN32) && !defined(PCRE_STATIC) # ifndef PCRE_EXP_DECL # define PCRE_EXP_DECL extern __declspec(dllimport) # endif # ifdef __cplusplus # ifndef PCRECPP_EXP_DECL # define PCRECPP_EXP_DECL extern __declspec(dllimport) # endif # ifndef PCRECPP_EXP_DEFN # define PCRECPP_EXP_DEFN __declspec(dllimport) # endif # endif #endif /* By default, we use the standard "extern" declarations. */ #ifndef PCRE_EXP_DECL # ifdef __cplusplus # define PCRE_EXP_DECL extern "C" # else # define PCRE_EXP_DECL extern # endif #endif #ifdef __cplusplus # ifndef PCRECPP_EXP_DECL # define PCRECPP_EXP_DECL extern # endif # ifndef PCRECPP_EXP_DEFN # define PCRECPP_EXP_DEFN # endif #endif /* Have to include stdlib.h in order to ensure that size_t is defined; it is needed here for malloc. */ #include /* Allow for C++ users */ #ifdef __cplusplus extern "C" { #endif /* Options */ #define PCRE_CASELESS 0x00000001 #define PCRE_MULTILINE 0x00000002 #define PCRE_DOTALL 0x00000004 #define PCRE_EXTENDED 0x00000008 #define PCRE_ANCHORED 0x00000010 #define PCRE_DOLLAR_ENDONLY 0x00000020 #define PCRE_EXTRA 0x00000040 #define PCRE_NOTBOL 0x00000080 #define PCRE_NOTEOL 0x00000100 #define PCRE_UNGREEDY 0x00000200 #define PCRE_NOTEMPTY 0x00000400 #define PCRE_UTF8 0x00000800 #define PCRE_NO_AUTO_CAPTURE 0x00001000 #define PCRE_NO_UTF8_CHECK 0x00002000 #define PCRE_AUTO_CALLOUT 0x00004000 #define PCRE_PARTIAL 0x00008000 #define PCRE_DFA_SHORTEST 0x00010000 #define PCRE_DFA_RESTART 0x00020000 #define PCRE_FIRSTLINE 0x00040000 #define PCRE_DUPNAMES 0x00080000 #define PCRE_NEWLINE_CR 0x00100000 #define PCRE_NEWLINE_LF 0x00200000 #define PCRE_NEWLINE_CRLF 0x00300000 #define PCRE_NEWLINE_ANY 0x00400000 #define PCRE_NEWLINE_ANYCRLF 0x00500000 #define PCRE_BSR_ANYCRLF 0x00800000 #define PCRE_BSR_UNICODE 0x01000000 /* Exec-time and get/set-time error codes */ #define PCRE_ERROR_NOMATCH (-1) #define PCRE_ERROR_NULL (-2) #define PCRE_ERROR_BADOPTION (-3) #define PCRE_ERROR_BADMAGIC (-4) #define PCRE_ERROR_UNKNOWN_OPCODE (-5) #define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */ #define PCRE_ERROR_NOMEMORY (-6) #define PCRE_ERROR_NOSUBSTRING (-7) #define PCRE_ERROR_MATCHLIMIT (-8) #define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */ #define PCRE_ERROR_BADUTF8 (-10) #define PCRE_ERROR_BADUTF8_OFFSET (-11) #define PCRE_ERROR_PARTIAL (-12) #define PCRE_ERROR_BADPARTIAL (-13) #define PCRE_ERROR_INTERNAL (-14) #define PCRE_ERROR_BADCOUNT (-15) #define PCRE_ERROR_DFA_UITEM (-16) #define PCRE_ERROR_DFA_UCOND (-17) #define PCRE_ERROR_DFA_UMLIMIT (-18) #define PCRE_ERROR_DFA_WSSIZE (-19) #define PCRE_ERROR_DFA_RECURSE (-20) #define PCRE_ERROR_RECURSIONLIMIT (-21) #define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */ #define PCRE_ERROR_BADNEWLINE (-23) /* Request types for pcre_fullinfo() */ #define PCRE_INFO_OPTIONS 0 #define PCRE_INFO_SIZE 1 #define PCRE_INFO_CAPTURECOUNT 2 #define PCRE_INFO_BACKREFMAX 3 #define PCRE_INFO_FIRSTBYTE 4 #define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */ #define PCRE_INFO_FIRSTTABLE 5 #define PCRE_INFO_LASTLITERAL 6 #define PCRE_INFO_NAMEENTRYSIZE 7 #define PCRE_INFO_NAMECOUNT 8 #define PCRE_INFO_NAMETABLE 9 #define PCRE_INFO_STUDYSIZE 10 #define PCRE_INFO_DEFAULT_TABLES 11 #define PCRE_INFO_OKPARTIAL 12 #define PCRE_INFO_JCHANGED 13 #define PCRE_INFO_HASCRORLF 14 /* Request types for pcre_config(). Do not re-arrange, in order to remain compatible. */ #define PCRE_CONFIG_UTF8 0 #define PCRE_CONFIG_NEWLINE 1 #define PCRE_CONFIG_LINK_SIZE 2 #define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3 #define PCRE_CONFIG_MATCH_LIMIT 4 #define PCRE_CONFIG_STACKRECURSE 5 #define PCRE_CONFIG_UNICODE_PROPERTIES 6 #define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7 #define PCRE_CONFIG_BSR 8 /* Bit flags for the pcre_extra structure. Do not re-arrange or redefine these bits, just add new ones on the end, in order to remain compatible. */ #define PCRE_EXTRA_STUDY_DATA 0x0001 #define PCRE_EXTRA_MATCH_LIMIT 0x0002 #define PCRE_EXTRA_CALLOUT_DATA 0x0004 #define PCRE_EXTRA_TABLES 0x0008 #define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010 /* Types */ struct real_pcre; /* declaration; the definition is private */ typedef struct real_pcre pcre; /* When PCRE is compiled as a C++ library, the subject pointer type can be replaced with a custom type. For conventional use, the public interface is a const char *. */ #ifndef PCRE_SPTR #define PCRE_SPTR const char * #endif /* The structure for passing additional data to pcre_exec(). This is defined in such as way as to be extensible. Always add new fields at the end, in order to remain compatible. */ typedef struct pcre_extra { unsigned long int flags; /* Bits for which fields are set */ void *study_data; /* Opaque data from pcre_study() */ unsigned long int match_limit; /* Maximum number of calls to match() */ void *callout_data; /* Data passed back in callouts */ const unsigned char *tables; /* Pointer to character tables */ unsigned long int match_limit_recursion; /* Max recursive calls to match() */ } pcre_extra; /* The structure for passing out data via the pcre_callout_function. We use a structure so that new fields can be added on the end in future versions, without changing the API of the function, thereby allowing old clients to work without modification. */ typedef struct pcre_callout_block { int version; /* Identifies version of block */ /* ------------------------ Version 0 ------------------------------- */ int callout_number; /* Number compiled into pattern */ int *offset_vector; /* The offset vector */ PCRE_SPTR subject; /* The subject being matched */ int subject_length; /* The length of the subject */ int start_match; /* Offset to start of this match attempt */ int current_position; /* Where we currently are in the subject */ int capture_top; /* Max current capture */ int capture_last; /* Most recently closed capture */ void *callout_data; /* Data passed in with the call */ /* ------------------- Added for Version 1 -------------------------- */ int pattern_position; /* Offset to next item in the pattern */ int next_item_length; /* Length of next item in the pattern */ /* ------------------------------------------------------------------ */ } pcre_callout_block; #include #include #define pcre_malloc g_try_malloc #define pcre_free g_free #define pcre_stack_malloc g_try_malloc PCRE_EXP_DECL int (*pcre_callout)(pcre_callout_block *); /* Exported PCRE functions */ PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *, const unsigned char *); PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **, int *, const unsigned char *); PCRE_EXP_DECL int pcre_config(int, void *); PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *, int *, int, const char *, char *, int); PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int, char *, int); PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *, const char *, int, int, int, int *, int , int *, int); PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR, int, int, int, int *, int); PCRE_EXP_DECL void pcre_free_substring(const char *); PCRE_EXP_DECL void pcre_free_substring_list(const char **); PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int, void *); PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *, int *, int, const char *, const char **); PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *); PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *, char **, char **); PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int, const char **); PCRE_EXP_DECL int pcre_get_substring_list(const char *, int *, int, const char ***); PCRE_EXP_DECL int pcre_info(const pcre *, int *, int *); PCRE_EXP_DECL const unsigned char *pcre_maketables(void); PCRE_EXP_DECL int pcre_refcount(pcre *, int); PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **); PCRE_EXP_DECL const char *pcre_version(void); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* End of pcre.h */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_config.c0000644000175000017500000000711711407320460023262 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_config(). */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Return info about what features are configured * *************************************************/ /* This function has an extensible interface so that additional items can be added compatibly. Arguments: what what information is required where where to put the information Returns: 0 if data returned, negative on error */ PCRE_EXP_DEFN int pcre_config(int what, void *where) { switch (what) { case PCRE_CONFIG_UTF8: #ifdef SUPPORT_UTF8 *((int *)where) = 1; #else *((int *)where) = 0; #endif break; case PCRE_CONFIG_UNICODE_PROPERTIES: #ifdef SUPPORT_UCP *((int *)where) = 1; #else *((int *)where) = 0; #endif break; case PCRE_CONFIG_NEWLINE: *((int *)where) = NEWLINE; break; case PCRE_CONFIG_BSR: #ifdef BSR_ANYCRLF *((int *)where) = 1; #else *((int *)where) = 0; #endif break; case PCRE_CONFIG_LINK_SIZE: *((int *)where) = LINK_SIZE; break; case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD: *((int *)where) = POSIX_MALLOC_THRESHOLD; break; case PCRE_CONFIG_MATCH_LIMIT: *((unsigned int *)where) = MATCH_LIMIT; break; case PCRE_CONFIG_MATCH_LIMIT_RECURSION: *((unsigned int *)where) = MATCH_LIMIT_RECURSION; break; case PCRE_CONFIG_STACKRECURSE: #ifdef NO_RECURSE *((int *)where) = 0; #else *((int *)where) = 1; #endif break; default: return PCRE_ERROR_BADOPTION; } return 0; } /* End of pcre_config.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/Makefile.in0000644000175000017500000005071211525654634022722 0ustar koukou# 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@ 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@ subdir = glib-compatible/pcre DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libpcre_la_LIBADD = am_libpcre_la_OBJECTS = pcre_compile.lo pcre_chartables.lo \ pcre_config.lo pcre_dfa_exec.lo pcre_exec.lo pcre_fullinfo.lo \ pcre_get.lo pcre_globals.lo pcre_info.lo pcre_maketables.lo \ pcre_newline.lo pcre_ord2utf8.lo pcre_refcount.lo \ pcre_study.lo pcre_tables.lo pcre_try_flipped.lo \ pcre_ucp_searchfuncs.lo pcre_valid_utf8.lo pcre_version.lo \ pcre_xclass.lo libpcre_la_OBJECTS = $(am_libpcre_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent @GLIB_2_12_TRUE@am_libpcre_la_rpath = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libpcre_la_SOURCES) DIST_SOURCES = $(libpcre_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -DG_LOG_DOMAIN=\"GLib-GRegex\" \ -DSUPPORT_UCP \ -DSUPPORT_UTF8 \ -DNEWLINE=-1 \ -DMATCH_LIMIT=10000000 \ -DMATCH_LIMIT_RECURSION=10000000 \ -DMAX_NAME_SIZE=32 \ -DMAX_NAME_COUNT=10000 \ -DMAX_DUPLENGTH=30000 \ -DLINK_SIZE=2 \ -DPOSIX_MALLOC_THRESHOLD=10 \ -DPCRE_STATIC \ -DHAVE_BCOPY \ $(GLIB_CFLAGS) @GLIB_2_12_TRUE@noinst_LTLIBRARIES = libpcre.la libpcre_la_SOURCES = \ pcre_compile.c \ pcre_chartables.c \ pcre_config.c \ pcre_dfa_exec.c \ pcre_exec.c \ pcre_fullinfo.c \ pcre_get.c \ pcre_globals.c \ pcre_info.c \ pcre_maketables.c \ pcre_newline.c \ pcre_ord2utf8.c \ pcre_refcount.c \ pcre_study.c \ pcre_tables.c \ pcre_try_flipped.c \ pcre_ucp_searchfuncs.c \ pcre_valid_utf8.c \ pcre_version.c \ pcre_xclass.c \ pcre.h \ pcre_internal.h \ ucp.h \ ucpinternal.h EXTRA_DIST = \ COPYING all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign glib-compatible/pcre/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign glib-compatible/pcre/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libpcre.la: $(libpcre_la_OBJECTS) $(libpcre_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libpcre_la_rpath) $(libpcre_la_OBJECTS) $(libpcre_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_chartables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_compile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_config.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_dfa_exec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_exec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_fullinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_get.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_globals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_info.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_maketables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_newline.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_ord2utf8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_refcount.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_study.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_tables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_try_flipped.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_ucp_searchfuncs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_valid_utf8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_version.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcre_xclass.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_refcount.c0000644000175000017500000000644311407320460023643 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_refcount(), which is an auxiliary function that can be used to maintain a reference count in a compiled pattern data block. This might be helpful in applications where the block is shared by different users. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Maintain reference count * *************************************************/ /* The reference count is a 16-bit field, initialized to zero. It is not possible to transfer a non-zero count from one host to a different host that has a different byte order - though I can't see why anyone in their right mind would ever want to do that! Arguments: argument_re points to compiled code adjust value to add to the count Returns: the (possibly updated) count value (a non-negative number), or a negative error number */ PCRE_EXP_DEFN int pcre_refcount(pcre *argument_re, int adjust) { real_pcre *re = (real_pcre *)argument_re; if (re == NULL) return PCRE_ERROR_NULL; re->ref_count = (-adjust > re->ref_count)? 0 : (adjust + re->ref_count > 65535)? 65535 : re->ref_count + adjust; return re->ref_count; } /* End of pcre_refcount.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_internal.h0000644000175000017500000013216611407320460023641 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This header contains definitions that are shared between the different modules, but which are not relevant to the exported API. This includes some functions whose names all begin with "_pcre_". */ #ifndef PCRE_INTERNAL_H #define PCRE_INTERNAL_H /* Define DEBUG to get debugging output on stdout. */ #if 0 #define DEBUG #endif /* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef inline, and there are *still* stupid compilers about that don't like indented pre-processor statements, or at least there were when I first wrote this. After all, it had only been about 10 years then... It turns out that the Mac Debugging.h header also defines the macro DPRINTF, so be absolutely sure we get our version. */ #undef DPRINTF #ifdef DEBUG #define DPRINTF(p) printf p #else #define DPRINTF(p) /* Nothing */ #endif /* Standard C headers plus the external interface definition. The only time setjmp and stdarg are used is when NO_RECURSE is set. */ #include #include #include #include #include #include #include #include /* When compiling a DLL for Windows, the exported symbols have to be declared using some MS magic. I found some useful information on this web page: http://msdn2.microsoft.com/en-us/library/y4h7bcy6(VS.80).aspx. According to the information there, using __declspec(dllexport) without "extern" we have a definition; with "extern" we have a declaration. The settings here override the setting in pcre.h (which is included below); it defines only PCRE_EXP_DECL, which is all that is needed for applications (they just import the symbols). We use: PCRE_EXP_DECL for declarations PCRE_EXP_DEFN for definitions of exported functions PCRE_EXP_DATA_DEFN for definitions of exported variables The reason for the two DEFN macros is that in non-Windows environments, one does not want to have "extern" before variable definitions because it leads to compiler warnings. So we distinguish between functions and variables. In Windows, the two should always be the same. The reason for wrapping this in #ifndef PCRE_EXP_DECL is so that pcretest, which is an application, but needs to import this file in order to "peek" at internals, can #include pcre.h first to get an application's-eye view. In principle, people compiling for non-Windows, non-Unix-like (i.e. uncommon, special-purpose environments) might want to stick other stuff in front of exported symbols. That's why, in the non-Windows case, we set PCRE_EXP_DEFN and PCRE_EXP_DATA_DEFN only if they are not already set. */ #ifndef PCRE_EXP_DECL # ifdef _WIN32 # ifndef PCRE_STATIC # define PCRE_EXP_DECL extern __declspec(dllexport) # define PCRE_EXP_DEFN __declspec(dllexport) # define PCRE_EXP_DATA_DEFN __declspec(dllexport) # else # define PCRE_EXP_DECL extern # define PCRE_EXP_DEFN # define PCRE_EXP_DATA_DEFN # endif # else # ifdef __cplusplus # define PCRE_EXP_DECL extern "C" # else # define PCRE_EXP_DECL extern # endif # ifndef PCRE_EXP_DEFN # define PCRE_EXP_DEFN PCRE_EXP_DECL # endif # ifndef PCRE_EXP_DATA_DEFN # define PCRE_EXP_DATA_DEFN # endif # endif #endif /* We need to have types that specify unsigned 16-bit and 32-bit integers. We cannot determine these outside the compilation (e.g. by running a program as part of "configure") because PCRE is often cross-compiled for use on other systems. Instead we make use of the maximum sizes that are available at preprocessor time in standard C environments. */ #if USHRT_MAX == 65535 typedef unsigned short pcre_uint16; #elif UINT_MAX == 65535 typedef unsigned int pcre_uint16; #else #error Cannot determine a type for 16-bit unsigned integers #endif #if UINT_MAX == 4294967295 typedef unsigned int pcre_uint32; #elif ULONG_MAX == 4294967295 typedef unsigned long int pcre_uint32; #else #error Cannot determine a type for 32-bit unsigned integers #endif /* All character handling must be done as unsigned characters. Otherwise there are problems with top-bit-set characters and functions such as isspace(). However, we leave the interface to the outside world as char *, because that should make things easier for callers. We define a short type for unsigned char to save lots of typing. I tried "uchar", but it causes problems on Digital Unix, where it is defined in sys/types, so use "uschar" instead. */ typedef unsigned char uschar; /* This is an unsigned int value that no character can ever have. UTF-8 characters only go up to 0x7fffffff (though Unicode doesn't go beyond 0x0010ffff). */ #define NOTACHAR 0xffffffff /* PCRE is able to support several different kinds of newline (CR, LF, CRLF, "any" and "anycrlf" at present). The following macros are used to package up testing for newlines. NLBLOCK, PSSTART, and PSEND are defined in the various modules to indicate in which datablock the parameters exist, and what the start/end of string field names are. */ #define NLTYPE_FIXED 0 /* Newline is a fixed length string */ #define NLTYPE_ANY 1 /* Newline is any Unicode line ending */ #define NLTYPE_ANYCRLF 2 /* Newline is CR, LF, or CRLF */ /* This macro checks for a newline at the given position */ #define IS_NEWLINE(p) \ ((NLBLOCK->nltype != NLTYPE_FIXED)? \ ((p) < NLBLOCK->PSEND && \ _pcre_is_newline((p), NLBLOCK->nltype, NLBLOCK->PSEND, &(NLBLOCK->nllen),\ utf8)) \ : \ ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \ (p)[0] == NLBLOCK->nl[0] && \ (NLBLOCK->nllen == 1 || (p)[1] == NLBLOCK->nl[1]) \ ) \ ) /* This macro checks for a newline immediately preceding the given position */ #define WAS_NEWLINE(p) \ ((NLBLOCK->nltype != NLTYPE_FIXED)? \ ((p) > NLBLOCK->PSSTART && \ _pcre_was_newline((p), NLBLOCK->nltype, NLBLOCK->PSSTART, \ &(NLBLOCK->nllen), utf8)) \ : \ ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \ (p)[-NLBLOCK->nllen] == NLBLOCK->nl[0] && \ (NLBLOCK->nllen == 1 || (p)[-NLBLOCK->nllen+1] == NLBLOCK->nl[1]) \ ) \ ) /* When PCRE is compiled as a C++ library, the subject pointer can be replaced with a custom type. This makes it possible, for example, to allow pcre_exec() to process subject strings that are discontinuous by using a smart pointer class. It must always be possible to inspect all of the subject string in pcre_exec() because of the way it backtracks. Two macros are required in the normal case, for sign-unspecified and unsigned char pointers. The former is used for the external interface and appears in pcre.h, which is why its name must begin with PCRE_. */ #ifdef CUSTOM_SUBJECT_PTR #define PCRE_SPTR CUSTOM_SUBJECT_PTR #define USPTR CUSTOM_SUBJECT_PTR #else #define PCRE_SPTR const char * #define USPTR const unsigned char * #endif /* Include the public PCRE header and the definitions of UCP character property values. */ #include "pcre.h" #include "ucp.h" /* When compiling for use with the Virtual Pascal compiler, these functions need to have their names changed. PCRE must be compiled with the -DVPCOMPAT option on the command line. */ #ifdef VPCOMPAT #define strlen(s) _strlen(s) #define strncmp(s1,s2,m) _strncmp(s1,s2,m) #define memcmp(s,c,n) _memcmp(s,c,n) #define memcpy(d,s,n) _memcpy(d,s,n) #define memmove(d,s,n) _memmove(d,s,n) #define memset(s,c,n) _memset(s,c,n) #else /* VPCOMPAT */ /* To cope with SunOS4 and other systems that lack memmove() but have bcopy(), define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY is set. Otherwise, include an emulating function for those systems that have neither (there some non-Unix environments where this is the case). */ #ifndef HAVE_MEMMOVE #undef memmove /* some systems may have a macro */ #ifdef HAVE_BCOPY #define memmove(a, b, c) bcopy(b, a, c) #else /* HAVE_BCOPY */ static void * pcre_memmove(void *d, const void *s, size_t n) { size_t i; unsigned char *dest = (unsigned char *)d; const unsigned char *src = (const unsigned char *)s; if (dest > src) { dest += n; src += n; for (i = 0; i < n; ++i) *(--dest) = *(--src); return (void *)dest; } else { for (i = 0; i < n; ++i) *dest++ = *src++; return (void *)(dest - n); } } #define memmove(a, b, c) pcre_memmove(a, b, c) #endif /* not HAVE_BCOPY */ #endif /* not HAVE_MEMMOVE */ #endif /* not VPCOMPAT */ /* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored in big-endian order) by default. These are used, for example, to link from the start of a subpattern to its alternatives and its end. The use of 2 bytes per offset limits the size of the compiled regex to around 64K, which is big enough for almost everybody. However, I received a request for an even bigger limit. For this reason, and also to make the code easier to maintain, the storing and loading of offsets from the byte string is now handled by the macros that are defined here. The macros are controlled by the value of LINK_SIZE. This defaults to 2 in the config.h file, but can be overridden by using -D on the command line. This is automated on Unix systems via the "configure" command. */ #if LINK_SIZE == 2 #define PUT(a,n,d) \ (a[n] = (d) >> 8), \ (a[(n)+1] = (d) & 255) #define GET(a,n) \ (((a)[n] << 8) | (a)[(n)+1]) #define MAX_PATTERN_SIZE (1 << 16) #elif LINK_SIZE == 3 #define PUT(a,n,d) \ (a[n] = (d) >> 16), \ (a[(n)+1] = (d) >> 8), \ (a[(n)+2] = (d) & 255) #define GET(a,n) \ (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2]) #define MAX_PATTERN_SIZE (1 << 24) #elif LINK_SIZE == 4 #define PUT(a,n,d) \ (a[n] = (d) >> 24), \ (a[(n)+1] = (d) >> 16), \ (a[(n)+2] = (d) >> 8), \ (a[(n)+3] = (d) & 255) #define GET(a,n) \ (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3]) #define MAX_PATTERN_SIZE (1 << 30) /* Keep it positive */ #else #error LINK_SIZE must be either 2, 3, or 4 #endif /* Convenience macro defined in terms of the others */ #define PUTINC(a,n,d) PUT(a,n,d), a += LINK_SIZE /* PCRE uses some other 2-byte quantities that do not change when the size of offsets changes. There are used for repeat counts and for other things such as capturing parenthesis numbers in back references. */ #define PUT2(a,n,d) \ a[n] = (d) >> 8; \ a[(n)+1] = (d) & 255 #define GET2(a,n) \ (((a)[n] << 8) | (a)[(n)+1]) #define PUT2INC(a,n,d) PUT2(a,n,d), a += 2 /* When UTF-8 encoding is being used, a character is no longer just a single byte. The macros for character handling generate simple sequences when used in byte-mode, and more complicated ones for UTF-8 characters. BACKCHAR should never be called in byte mode. To make sure it can never even appear when UTF-8 support is omitted, we don't even define it. */ #ifndef SUPPORT_UTF8 #define NEXTCHAR(p) p++; #define GETCHAR(c, eptr) c = *eptr; #define GETCHARTEST(c, eptr) c = *eptr; #define GETCHARINC(c, eptr) c = *eptr++; #define GETCHARINCTEST(c, eptr) c = *eptr++; #define GETCHARLEN(c, eptr, len) c = *eptr; /* #define BACKCHAR(eptr) */ #else /* SUPPORT_UTF8 */ /* Advance a character pointer one byte in non-UTF-8 mode and by one character in UTF-8 mode. */ #define NEXTCHAR(p) \ p++; \ if (utf8) { while((*p & 0xc0) == 0x80) p++; } /* Get the next UTF-8 character, not advancing the pointer. This is called when we know we are in UTF-8 mode. */ #define GETCHAR(c, eptr) \ c = *eptr; \ if (c >= 0xc0) \ { \ int gcii; \ int gcaa = _pcre_utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ int gcss = 6*gcaa; \ c = (c & _pcre_utf8_table3[gcaa]) << gcss; \ for (gcii = 1; gcii <= gcaa; gcii++) \ { \ gcss -= 6; \ c |= (eptr[gcii] & 0x3f) << gcss; \ } \ } /* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the pointer. */ #define GETCHARTEST(c, eptr) \ c = *eptr; \ if (utf8 && c >= 0xc0) \ { \ int gcii; \ int gcaa = _pcre_utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ int gcss = 6*gcaa; \ c = (c & _pcre_utf8_table3[gcaa]) << gcss; \ for (gcii = 1; gcii <= gcaa; gcii++) \ { \ gcss -= 6; \ c |= (eptr[gcii] & 0x3f) << gcss; \ } \ } /* Get the next UTF-8 character, advancing the pointer. This is called when we know we are in UTF-8 mode. */ #define GETCHARINC(c, eptr) \ c = *eptr++; \ if (c >= 0xc0) \ { \ int gcaa = _pcre_utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ int gcss = 6*gcaa; \ c = (c & _pcre_utf8_table3[gcaa]) << gcss; \ while (gcaa-- > 0) \ { \ gcss -= 6; \ c |= (*eptr++ & 0x3f) << gcss; \ } \ } /* Get the next character, testing for UTF-8 mode, and advancing the pointer */ #define GETCHARINCTEST(c, eptr) \ c = *eptr++; \ if (utf8 && c >= 0xc0) \ { \ int gcaa = _pcre_utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ int gcss = 6*gcaa; \ c = (c & _pcre_utf8_table3[gcaa]) << gcss; \ while (gcaa-- > 0) \ { \ gcss -= 6; \ c |= (*eptr++ & 0x3f) << gcss; \ } \ } /* Get the next UTF-8 character, not advancing the pointer, incrementing length if there are extra bytes. This is called when we know we are in UTF-8 mode. */ #define GETCHARLEN(c, eptr, len) \ c = *eptr; \ if (c >= 0xc0) \ { \ int gcii; \ int gcaa = _pcre_utf8_table4[c & 0x3f]; /* Number of additional bytes */ \ int gcss = 6*gcaa; \ c = (c & _pcre_utf8_table3[gcaa]) << gcss; \ for (gcii = 1; gcii <= gcaa; gcii++) \ { \ gcss -= 6; \ c |= (eptr[gcii] & 0x3f) << gcss; \ } \ len += gcaa; \ } /* If the pointer is not at the start of a character, move it back until it is. This is called only in UTF-8 mode - we don't put a test within the macro because almost all calls are already within a block of UTF-8 only code. */ #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr-- #endif /* In case there is no definition of offsetof() provided - though any proper Standard C system should have one. */ #ifndef offsetof #define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field)) #endif /* These are the public options that can change during matching. */ #define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL) /* Private flags containing information about the compiled regex. They used to live at the top end of the options word, but that got almost full, so now they are in a 16-bit flags word. */ #define PCRE_NOPARTIAL 0x0001 /* can't use partial with this regex */ #define PCRE_FIRSTSET 0x0002 /* first_byte is set */ #define PCRE_REQCHSET 0x0004 /* req_byte is set */ #define PCRE_STARTLINE 0x0008 /* start after \n for multiline */ #define PCRE_JCHANGED 0x0010 /* j option used in regex */ #define PCRE_HASCRORLF 0x0020 /* explicit \r or \n in pattern */ /* Options for the "extra" block produced by pcre_study(). */ #define PCRE_STUDY_MAPPED 0x01 /* a map of starting chars exists */ /* Masks for identifying the public options that are permitted at compile time, run time, or study time, respectively. */ #define PCRE_NEWLINE_BITS (PCRE_NEWLINE_CR|PCRE_NEWLINE_LF|PCRE_NEWLINE_ANY| \ PCRE_NEWLINE_ANYCRLF) #define PUBLIC_OPTIONS \ (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \ PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \ PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \ PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE) #define PUBLIC_EXEC_OPTIONS \ (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \ PCRE_PARTIAL|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE) #define PUBLIC_DFA_EXEC_OPTIONS \ (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \ PCRE_PARTIAL|PCRE_DFA_SHORTEST|PCRE_DFA_RESTART|PCRE_NEWLINE_BITS| \ PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE) #define PUBLIC_STUDY_OPTIONS 0 /* None defined */ /* Magic number to provide a small check against being handed junk. Also used to detect whether a pattern was compiled on a host of different endianness. */ #define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */ /* Negative values for the firstchar and reqchar variables */ #define REQ_UNSET (-2) #define REQ_NONE (-1) /* The maximum remaining length of subject we are prepared to search for a req_byte match. */ #define REQ_BYTE_MAX 1000 /* Flags added to firstbyte or reqbyte; a "non-literal" item is either a variable-length repeat, or a anything other than literal characters. */ #define REQ_CASELESS 0x0100 /* indicates caselessness */ #define REQ_VARY 0x0200 /* reqbyte followed non-literal item */ /* Miscellaneous definitions */ typedef gboolean BOOL; /* Escape items that are just an encoding of a particular data value. */ #ifndef ESC_e #define ESC_e 27 #endif #ifndef ESC_f #define ESC_f '\f' #endif #ifndef ESC_n #define ESC_n '\n' #endif #ifndef ESC_r #define ESC_r '\r' #endif /* We can't officially use ESC_t because it is a POSIX reserved identifier (presumably because of all the others like size_t). */ #ifndef ESC_tee #define ESC_tee '\t' #endif /* Codes for different types of Unicode property */ #define PT_ANY 0 /* Any property - matches all chars */ #define PT_LAMP 1 /* L& - the union of Lu, Ll, Lt */ #define PT_GC 2 /* General characteristic (e.g. L) */ #define PT_PC 3 /* Particular characteristic (e.g. Lu) */ #define PT_SC 4 /* Script (e.g. Han) */ /* Flag bits and data types for the extended class (OP_XCLASS) for classes that contain UTF-8 characters with values greater than 255. */ #define XCL_NOT 0x01 /* Flag: this is a negative class */ #define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ #define XCL_END 0 /* Marks end of individual items */ #define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ #define XCL_RANGE 2 /* A range (two multibyte chars) follows */ #define XCL_PROP 3 /* Unicode property (2-byte property code follows) */ #define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */ /* These are escaped items that aren't just an encoding of a particular data value such as \n. They must have non-zero values, as check_escape() returns their negation. Also, they must appear in the same order as in the opcode definitions below, up to ESC_z. There's a dummy for OP_ANY because it corresponds to "." rather than an escape sequence. The final one must be ESC_REF as subsequent values are used for backreferences (\1, \2, \3, etc). There are two tests in the code for an escape greater than ESC_b and less than ESC_Z to detect the types that may be repeated. These are the types that consume characters. If any new escapes are put in between that don't consume a character, that code will have to change. */ enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w, ESC_dum1, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H, ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_k, ESC_REF }; /* Opcode table: Starting from 1 (i.e. after OP_END), the values up to OP_EOD must correspond in order to the list of escapes immediately above. *** NOTE NOTE NOTE *** Whenever this list is updated, the two macro definitions that follow must also be updated to match. There is also a table called "coptable" in pcre_dfa_exec.c that must be updated. */ enum { OP_END, /* 0 End of pattern */ /* Values corresponding to backslashed metacharacters */ OP_SOD, /* 1 Start of data: \A */ OP_SOM, /* 2 Start of match (subject + offset): \G */ OP_SET_SOM, /* 3 Set start of match (\K) */ OP_NOT_WORD_BOUNDARY, /* 4 \B */ OP_WORD_BOUNDARY, /* 5 \b */ OP_NOT_DIGIT, /* 6 \D */ OP_DIGIT, /* 7 \d */ OP_NOT_WHITESPACE, /* 8 \S */ OP_WHITESPACE, /* 9 \s */ OP_NOT_WORDCHAR, /* 10 \W */ OP_WORDCHAR, /* 11 \w */ OP_ANY, /* 12 Match any character */ OP_ANYBYTE, /* 13 Match any byte (\C); different to OP_ANY for UTF-8 */ OP_NOTPROP, /* 14 \P (not Unicode property) */ OP_PROP, /* 15 \p (Unicode property) */ OP_ANYNL, /* 16 \R (any newline sequence) */ OP_NOT_HSPACE, /* 17 \H (not horizontal whitespace) */ OP_HSPACE, /* 18 \h (horizontal whitespace) */ OP_NOT_VSPACE, /* 19 \V (not vertical whitespace) */ OP_VSPACE, /* 20 \v (vertical whitespace) */ OP_EXTUNI, /* 21 \X (extended Unicode sequence */ OP_EODN, /* 22 End of data or \n at end of data: \Z. */ OP_EOD, /* 23 End of data: \z */ OP_OPT, /* 24 Set runtime options */ OP_CIRC, /* 25 Start of line - varies with multiline switch */ OP_DOLL, /* 26 End of line - varies with multiline switch */ OP_CHAR, /* 27 Match one character, casefully */ OP_CHARNC, /* 28 Match one character, caselessly */ OP_NOT, /* 29 Match one character, not the following one */ OP_STAR, /* 30 The maximizing and minimizing versions of */ OP_MINSTAR, /* 31 these six opcodes must come in pairs, with */ OP_PLUS, /* 32 the minimizing one second. */ OP_MINPLUS, /* 33 This first set applies to single characters.*/ OP_QUERY, /* 34 */ OP_MINQUERY, /* 35 */ OP_UPTO, /* 36 From 0 to n matches */ OP_MINUPTO, /* 37 */ OP_EXACT, /* 38 Exactly n matches */ OP_POSSTAR, /* 39 Possessified star */ OP_POSPLUS, /* 40 Possessified plus */ OP_POSQUERY, /* 41 Posesssified query */ OP_POSUPTO, /* 42 Possessified upto */ OP_NOTSTAR, /* 43 The maximizing and minimizing versions of */ OP_NOTMINSTAR, /* 44 these six opcodes must come in pairs, with */ OP_NOTPLUS, /* 45 the minimizing one second. They must be in */ OP_NOTMINPLUS, /* 46 exactly the same order as those above. */ OP_NOTQUERY, /* 47 This set applies to "not" single characters. */ OP_NOTMINQUERY, /* 48 */ OP_NOTUPTO, /* 49 From 0 to n matches */ OP_NOTMINUPTO, /* 50 */ OP_NOTEXACT, /* 51 Exactly n matches */ OP_NOTPOSSTAR, /* 52 Possessified versions */ OP_NOTPOSPLUS, /* 53 */ OP_NOTPOSQUERY, /* 54 */ OP_NOTPOSUPTO, /* 55 */ OP_TYPESTAR, /* 56 The maximizing and minimizing versions of */ OP_TYPEMINSTAR, /* 57 these six opcodes must come in pairs, with */ OP_TYPEPLUS, /* 58 the minimizing one second. These codes must */ OP_TYPEMINPLUS, /* 59 be in exactly the same order as those above. */ OP_TYPEQUERY, /* 60 This set applies to character types such as \d */ OP_TYPEMINQUERY, /* 61 */ OP_TYPEUPTO, /* 62 From 0 to n matches */ OP_TYPEMINUPTO, /* 63 */ OP_TYPEEXACT, /* 64 Exactly n matches */ OP_TYPEPOSSTAR, /* 65 Possessified versions */ OP_TYPEPOSPLUS, /* 66 */ OP_TYPEPOSQUERY, /* 67 */ OP_TYPEPOSUPTO, /* 68 */ OP_CRSTAR, /* 69 The maximizing and minimizing versions of */ OP_CRMINSTAR, /* 70 all these opcodes must come in pairs, with */ OP_CRPLUS, /* 71 the minimizing one second. These codes must */ OP_CRMINPLUS, /* 72 be in exactly the same order as those above. */ OP_CRQUERY, /* 73 These are for character classes and back refs */ OP_CRMINQUERY, /* 74 */ OP_CRRANGE, /* 75 These are different to the three sets above. */ OP_CRMINRANGE, /* 76 */ OP_CLASS, /* 77 Match a character class, chars < 256 only */ OP_NCLASS, /* 78 Same, but the bitmap was created from a negative class - the difference is relevant only when a UTF-8 character > 255 is encountered. */ OP_XCLASS, /* 79 Extended class for handling UTF-8 chars within the class. This does both positive and negative. */ OP_REF, /* 80 Match a back reference */ OP_RECURSE, /* 81 Match a numbered subpattern (possibly recursive) */ OP_CALLOUT, /* 82 Call out to external function if provided */ OP_ALT, /* 83 Start of alternation */ OP_KET, /* 84 End of group that doesn't have an unbounded repeat */ OP_KETRMAX, /* 85 These two must remain together and in this */ OP_KETRMIN, /* 86 order. They are for groups the repeat for ever. */ /* The assertions must come before BRA, CBRA, ONCE, and COND.*/ OP_ASSERT, /* 87 Positive lookahead */ OP_ASSERT_NOT, /* 88 Negative lookahead */ OP_ASSERTBACK, /* 89 Positive lookbehind */ OP_ASSERTBACK_NOT, /* 90 Negative lookbehind */ OP_REVERSE, /* 91 Move pointer back - used in lookbehind assertions */ /* ONCE, BRA, CBRA, and COND must come after the assertions, with ONCE first, as there's a test for >= ONCE for a subpattern that isn't an assertion. */ OP_ONCE, /* 92 Atomic group */ OP_BRA, /* 93 Start of non-capturing bracket */ OP_CBRA, /* 94 Start of capturing bracket */ OP_COND, /* 95 Conditional group */ /* These three must follow the previous three, in the same order. There's a check for >= SBRA to distinguish the two sets. */ OP_SBRA, /* 96 Start of non-capturing bracket, check empty */ OP_SCBRA, /* 97 Start of capturing bracket, check empty */ OP_SCOND, /* 98 Conditional group, check empty */ OP_CREF, /* 99 Used to hold a capture number as condition */ OP_RREF, /* 100 Used to hold a recursion number as condition */ OP_DEF, /* 101 The DEFINE condition */ OP_BRAZERO, /* 102 These two must remain together and in this */ OP_BRAMINZERO, /* 103 order. */ /* These are backtracking control verbs */ OP_PRUNE, /* 104 */ OP_SKIP, /* 105 */ OP_THEN, /* 106 */ OP_COMMIT, /* 107 */ /* These are forced failure and success verbs */ OP_FAIL, /* 108 */ OP_ACCEPT /* 109 */ }; /* This macro defines textual names for all the opcodes. These are used only for debugging. The macro is referenced only in pcre_printint.c. */ #define OP_NAME_LIST \ "End", "\\A", "\\G", "\\K", "\\B", "\\b", "\\D", "\\d", \ "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte", \ "notprop", "prop", "\\R", "\\H", "\\h", "\\V", "\\v", \ "extuni", "\\Z", "\\z", \ "Opt", "^", "$", "char", "charnc", "not", \ "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ "*+","++", "?+", "{", \ "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ "*+","++", "?+", "{", \ "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ "*+","++", "?+", "{", \ "*", "*?", "+", "+?", "?", "??", "{", "{", \ "class", "nclass", "xclass", "Ref", "Recurse", "Callout", \ "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not", \ "AssertB", "AssertB not", "Reverse", \ "Once", "Bra", "CBra", "Cond", "SBra", "SCBra", "SCond", \ "Cond ref", "Cond rec", "Cond def", "Brazero", "Braminzero", \ "*PRUNE", "*SKIP", "*THEN", "*COMMIT", "*FAIL", "*ACCEPT" /* This macro defines the length of fixed length operations in the compiled regex. The lengths are used when searching for specific things, and also in the debugging printing of a compiled regex. We use a macro so that it can be defined close to the definitions of the opcodes themselves. As things have been extended, some of these are no longer fixed lenths, but are minima instead. For example, the length of a single-character repeat may vary in UTF-8 mode. The code that uses this table must know about such things. */ #define OP_LENGTHS \ 1, /* End */ \ 1, 1, 1, 1, 1, /* \A, \G, \K, \B, \b */ \ 1, 1, 1, 1, 1, 1, /* \D, \d, \S, \s, \W, \w */ \ 1, 1, /* Any, Anybyte */ \ 3, 3, 1, /* NOTPROP, PROP, EXTUNI */ \ 1, 1, 1, 1, 1, /* \R, \H, \h, \V, \v */ \ 1, 1, 2, 1, 1, /* \Z, \z, Opt, ^, $ */ \ 2, /* Char - the minimum length */ \ 2, /* Charnc - the minimum length */ \ 2, /* not */ \ /* Positive single-char repeats ** These are */ \ 2, 2, 2, 2, 2, 2, /* *, *?, +, +?, ?, ?? ** minima in */ \ 4, 4, 4, /* upto, minupto, exact ** UTF-8 mode */ \ 2, 2, 2, 4, /* *+, ++, ?+, upto+ */ \ /* Negative single-char repeats - only for chars < 256 */ \ 2, 2, 2, 2, 2, 2, /* NOT *, *?, +, +?, ?, ?? */ \ 4, 4, 4, /* NOT upto, minupto, exact */ \ 2, 2, 2, 4, /* Possessive *, +, ?, upto */ \ /* Positive type repeats */ \ 2, 2, 2, 2, 2, 2, /* Type *, *?, +, +?, ?, ?? */ \ 4, 4, 4, /* Type upto, minupto, exact */ \ 2, 2, 2, 4, /* Possessive *+, ++, ?+, upto+ */ \ /* Character class & ref repeats */ \ 1, 1, 1, 1, 1, 1, /* *, *?, +, +?, ?, ?? */ \ 5, 5, /* CRRANGE, CRMINRANGE */ \ 33, /* CLASS */ \ 33, /* NCLASS */ \ 0, /* XCLASS - variable length */ \ 3, /* REF */ \ 1+LINK_SIZE, /* RECURSE */ \ 2+2*LINK_SIZE, /* CALLOUT */ \ 1+LINK_SIZE, /* Alt */ \ 1+LINK_SIZE, /* Ket */ \ 1+LINK_SIZE, /* KetRmax */ \ 1+LINK_SIZE, /* KetRmin */ \ 1+LINK_SIZE, /* Assert */ \ 1+LINK_SIZE, /* Assert not */ \ 1+LINK_SIZE, /* Assert behind */ \ 1+LINK_SIZE, /* Assert behind not */ \ 1+LINK_SIZE, /* Reverse */ \ 1+LINK_SIZE, /* ONCE */ \ 1+LINK_SIZE, /* BRA */ \ 3+LINK_SIZE, /* CBRA */ \ 1+LINK_SIZE, /* COND */ \ 1+LINK_SIZE, /* SBRA */ \ 3+LINK_SIZE, /* SCBRA */ \ 1+LINK_SIZE, /* SCOND */ \ 3, /* CREF */ \ 3, /* RREF */ \ 1, /* DEF */ \ 1, 1, /* BRAZERO, BRAMINZERO */ \ 1, 1, 1, 1, /* PRUNE, SKIP, THEN, COMMIT, */ \ 1, 1 /* FAIL, ACCEPT */ /* A magic value for OP_RREF to indicate the "any recursion" condition. */ #define RREF_ANY 0xffff /* Error code numbers. They are given names so that they can more easily be tracked. */ enum { ERR0, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10, ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20, ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR28, ERR29, ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49, ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59, ERR60, ERR61, ERR62, ERR63 }; /* The real format of the start of the pcre block; the index of names and the code vector run on as long as necessary after the end. We store an explicit offset to the name table so that if a regex is compiled on one host, saved, and then run on another where the size of pointers is different, all might still be well. For the case of compiled-on-4 and run-on-8, we include an extra pointer that is always NULL. For future-proofing, a few dummy fields were originally included - even though you can never get this planning right - but there is only one left now. NOTE NOTE NOTE: Because people can now save and re-use compiled patterns, any additions to this structure should be made at the end, and something earlier (e.g. a new flag in the options or one of the dummy fields) should indicate that the new fields are present. Currently PCRE always sets the dummy fields to zero. NOTE NOTE NOTE: */ typedef struct real_pcre { pcre_uint32 magic_number; pcre_uint32 size; /* Total that was malloced */ pcre_uint32 options; /* Public options */ pcre_uint16 flags; /* Private flags */ pcre_uint16 dummy1; /* For future use */ pcre_uint16 top_bracket; pcre_uint16 top_backref; pcre_uint16 first_byte; pcre_uint16 req_byte; pcre_uint16 name_table_offset; /* Offset to name table that follows */ pcre_uint16 name_entry_size; /* Size of any name items */ pcre_uint16 name_count; /* Number of name items */ pcre_uint16 ref_count; /* Reference count */ const unsigned char *tables; /* Pointer to tables or NULL for std */ const unsigned char *nullpad; /* NULL padding */ } real_pcre; /* The format of the block used to store data from pcre_study(). The same remark (see NOTE above) about extending this structure applies. */ typedef struct pcre_study_data { pcre_uint32 size; /* Total that was malloced */ pcre_uint32 options; uschar start_bits[32]; } pcre_study_data; /* Structure for passing "static" information around between the functions doing the compiling, so that they are thread-safe. */ typedef struct compile_data { const uschar *lcc; /* Points to lower casing table */ const uschar *fcc; /* Points to case-flipping table */ const uschar *cbits; /* Points to character type table */ const uschar *ctypes; /* Points to table of type maps */ const uschar *start_workspace;/* The start of working space */ const uschar *start_code; /* The start of the compiled code */ const uschar *start_pattern; /* The start of the pattern */ const uschar *end_pattern; /* The end of the pattern */ uschar *hwm; /* High watermark of workspace */ uschar *name_table; /* The name/number table */ int names_found; /* Number of entries so far */ int name_entry_size; /* Size of each entry */ int bracount; /* Count of capturing parens as we compile */ int final_bracount; /* Saved value after first pass */ int top_backref; /* Maximum back reference */ unsigned int backref_map; /* Bitmap of low back refs */ int external_options; /* External (initial) options */ int external_flags; /* External flag bits to be set */ int req_varyopt; /* "After variable item" flag for reqbyte */ BOOL had_accept; /* (*ACCEPT) encountered */ int nltype; /* Newline type */ int nllen; /* Newline string length */ uschar nl[4]; /* Newline string when fixed length */ } compile_data; /* Structure for maintaining a chain of pointers to the currently incomplete branches, for testing for left recursion. */ typedef struct branch_chain { struct branch_chain *outer; uschar *current; } branch_chain; /* Structure for items in a linked list that represents an explicit recursive call within the pattern. */ typedef struct recursion_info { struct recursion_info *prevrec; /* Previous recursion record (or NULL) */ int group_num; /* Number of group that was called */ const uschar *after_call; /* "Return value": points after the call in the expr */ USPTR save_start; /* Old value of mstart */ int *offset_save; /* Pointer to start of saved offsets */ int saved_max; /* Number of saved offsets */ } recursion_info; /* Structure for building a chain of data for holding the values of the subject pointer at the start of each subpattern, so as to detect when an empty string has been matched by a subpattern - to break infinite loops. */ typedef struct eptrblock { struct eptrblock *epb_prev; USPTR epb_saved_eptr; } eptrblock; /* Structure for passing "static" information around between the functions doing traditional NFA matching, so that they are thread-safe. */ typedef struct match_data { unsigned long int match_call_count; /* As it says */ unsigned long int match_limit; /* As it says */ unsigned long int match_limit_recursion; /* As it says */ int *offset_vector; /* Offset vector */ int offset_end; /* One past the end */ int offset_max; /* The maximum usable for return data */ int nltype; /* Newline type */ int nllen; /* Newline string length */ uschar nl[4]; /* Newline string when fixed */ const uschar *lcc; /* Points to lower casing table */ const uschar *ctypes; /* Points to table of type maps */ BOOL offset_overflow; /* Set if too many extractions */ BOOL notbol; /* NOTBOL flag */ BOOL noteol; /* NOTEOL flag */ BOOL utf8; /* UTF8 flag */ BOOL endonly; /* Dollar not before final \n */ BOOL notempty; /* Empty string match not wanted */ BOOL partial; /* PARTIAL flag */ BOOL hitend; /* Hit the end of the subject at some point */ BOOL bsr_anycrlf; /* \R is just any CRLF, not full Unicode */ const uschar *start_code; /* For use when recursing */ USPTR start_subject; /* Start of the subject string */ USPTR end_subject; /* End of the subject string */ USPTR start_match_ptr; /* Start of matched string */ USPTR end_match_ptr; /* Subject position at end match */ int end_offset_top; /* Highwater mark at end of match */ int capture_last; /* Most recent capture number */ int start_offset; /* The start offset value */ eptrblock *eptrchain; /* Chain of eptrblocks for tail recursions */ int eptrn; /* Next free eptrblock */ recursion_info *recursive; /* Linked list of recursion data */ void *callout_data; /* To pass back to callouts */ } match_data; /* A similar structure is used for the same purpose by the DFA matching functions. */ typedef struct dfa_match_data { const uschar *start_code; /* Start of the compiled pattern */ const uschar *start_subject; /* Start of the subject string */ const uschar *end_subject; /* End of subject string */ const uschar *tables; /* Character tables */ int moptions; /* Match options */ int poptions; /* Pattern options */ int nltype; /* Newline type */ int nllen; /* Newline string length */ uschar nl[4]; /* Newline string when fixed */ void *callout_data; /* To pass back to callouts */ } dfa_match_data; /* Bit definitions for entries in the pcre_ctypes table. */ #define ctype_space 0x01 #define ctype_letter 0x02 #define ctype_digit 0x04 #define ctype_xdigit 0x08 #define ctype_word 0x10 /* alphanumeric or '_' */ #define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */ /* Offsets for the bitmap tables in pcre_cbits. Each table contains a set of bits for a class map. Some classes are built by combining these tables. */ #define cbit_space 0 /* [:space:] or \s */ #define cbit_xdigit 32 /* [:xdigit:] */ #define cbit_digit 64 /* [:digit:] or \d */ #define cbit_upper 96 /* [:upper:] */ #define cbit_lower 128 /* [:lower:] */ #define cbit_word 160 /* [:word:] or \w */ #define cbit_graph 192 /* [:graph:] */ #define cbit_print 224 /* [:print:] */ #define cbit_punct 256 /* [:punct:] */ #define cbit_cntrl 288 /* [:cntrl:] */ #define cbit_length 320 /* Length of the cbits table */ /* Offsets of the various tables from the base tables pointer, and total length. */ #define lcc_offset 0 #define fcc_offset 256 #define cbits_offset 512 #define ctypes_offset (cbits_offset + cbit_length) #define tables_length (ctypes_offset + 256) /* Layout of the UCP type table that translates property names into types and codes. Each entry used to point directly to a name, but to reduce the number of relocations in shared libraries, it now has an offset into a single string instead. */ typedef struct { pcre_uint16 name_offset; pcre_uint16 type; pcre_uint16 value; } ucp_type_table; /* Internal shared data tables. These are tables that are used by more than one of the exported public functions. They have to be "external" in the C sense, but are not part of the PCRE public API. The data for these tables is in the pcre_tables.c module. */ extern const int _pcre_utf8_table1[]; extern const int _pcre_utf8_table2[]; extern const int _pcre_utf8_table3[]; extern const uschar _pcre_utf8_table4[]; extern const int _pcre_utf8_table1_size; extern const char _pcre_utt_names[]; extern const ucp_type_table _pcre_utt[]; extern const int _pcre_utt_size; extern const uschar _pcre_default_tables[]; extern const uschar _pcre_OP_lengths[]; /* Internal shared functions. These are functions that are used by more than one of the exported public functions. They have to be "external" in the C sense, but are not part of the PCRE public API. */ extern BOOL _pcre_is_newline(const uschar *, int, const uschar *, int *, BOOL); extern int _pcre_ord2utf8(int, uschar *); extern real_pcre *_pcre_try_flipped(const real_pcre *, real_pcre *, const pcre_study_data *, pcre_study_data *); extern int _pcre_ucp_findprop(const unsigned int, int *, int *); extern unsigned int _pcre_ucp_othercase(const unsigned int); extern int _pcre_valid_utf8(const uschar *, int); extern BOOL _pcre_was_newline(const uschar *, int, const uschar *, int *, BOOL); extern BOOL _pcre_xclass(int, const uschar *); #endif /* End of pcre_internal.h */ cutter-testing-framework-1.1.7/glib-compatible/pcre/Makefile.am0000644000175000017500000000153211407320460022667 0ustar koukouINCLUDES = \ -DG_LOG_DOMAIN=\"GLib-GRegex\" \ -DSUPPORT_UCP \ -DSUPPORT_UTF8 \ -DNEWLINE=-1 \ -DMATCH_LIMIT=10000000 \ -DMATCH_LIMIT_RECURSION=10000000 \ -DMAX_NAME_SIZE=32 \ -DMAX_NAME_COUNT=10000 \ -DMAX_DUPLENGTH=30000 \ -DLINK_SIZE=2 \ -DPOSIX_MALLOC_THRESHOLD=10 \ -DPCRE_STATIC \ -DHAVE_BCOPY \ $(GLIB_CFLAGS) if GLIB_2_12 noinst_LTLIBRARIES = libpcre.la endif libpcre_la_SOURCES = \ pcre_compile.c \ pcre_chartables.c \ pcre_config.c \ pcre_dfa_exec.c \ pcre_exec.c \ pcre_fullinfo.c \ pcre_get.c \ pcre_globals.c \ pcre_info.c \ pcre_maketables.c \ pcre_newline.c \ pcre_ord2utf8.c \ pcre_refcount.c \ pcre_study.c \ pcre_tables.c \ pcre_try_flipped.c \ pcre_ucp_searchfuncs.c \ pcre_valid_utf8.c \ pcre_version.c \ pcre_xclass.c \ pcre.h \ pcre_internal.h \ ucp.h \ ucpinternal.h EXTRA_DIST = \ COPYING cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_fullinfo.c0000644000175000017500000001220411407320460023624 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_fullinfo(), which returns information about a compiled pattern. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Return info about compiled pattern * *************************************************/ /* This is a newer "info" function which has an extensible interface so that additional items can be added compatibly. Arguments: argument_re points to compiled code extra_data points extra data, or NULL what what information is required where where to put the information Returns: 0 if data returned, negative on error */ PCRE_EXP_DEFN int pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data, int what, void *where) { real_pcre internal_re; pcre_study_data internal_study; const real_pcre *re = (const real_pcre *)argument_re; const pcre_study_data *study = NULL; if (re == NULL || where == NULL) return PCRE_ERROR_NULL; if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0) study = (const pcre_study_data *)extra_data->study_data; if (re->magic_number != MAGIC_NUMBER) { re = _pcre_try_flipped(re, &internal_re, study, &internal_study); if (re == NULL) return PCRE_ERROR_BADMAGIC; if (study != NULL) study = &internal_study; } switch (what) { case PCRE_INFO_OPTIONS: *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS; break; case PCRE_INFO_SIZE: *((size_t *)where) = re->size; break; case PCRE_INFO_STUDYSIZE: *((size_t *)where) = (study == NULL)? 0 : study->size; break; case PCRE_INFO_CAPTURECOUNT: *((int *)where) = re->top_bracket; break; case PCRE_INFO_BACKREFMAX: *((int *)where) = re->top_backref; break; case PCRE_INFO_FIRSTBYTE: *((int *)where) = ((re->flags & PCRE_FIRSTSET) != 0)? re->first_byte : ((re->flags & PCRE_STARTLINE) != 0)? -1 : -2; break; /* Make sure we pass back the pointer to the bit vector in the external block, not the internal copy (with flipped integer fields). */ case PCRE_INFO_FIRSTTABLE: *((const uschar **)where) = (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)? ((const pcre_study_data *)extra_data->study_data)->start_bits : NULL; break; case PCRE_INFO_LASTLITERAL: *((int *)where) = ((re->flags & PCRE_REQCHSET) != 0)? re->req_byte : -1; break; case PCRE_INFO_NAMEENTRYSIZE: *((int *)where) = re->name_entry_size; break; case PCRE_INFO_NAMECOUNT: *((int *)where) = re->name_count; break; case PCRE_INFO_NAMETABLE: *((const uschar **)where) = (const uschar *)re + re->name_table_offset; break; case PCRE_INFO_DEFAULT_TABLES: *((const uschar **)where) = (const uschar *)(_pcre_default_tables); break; case PCRE_INFO_OKPARTIAL: *((int *)where) = (re->flags & PCRE_NOPARTIAL) == 0; break; case PCRE_INFO_JCHANGED: *((int *)where) = (re->flags & PCRE_JCHANGED) != 0; break; case PCRE_INFO_HASCRORLF: *((int *)where) = (re->flags & PCRE_HASCRORLF) != 0; break; default: return PCRE_ERROR_BADOPTION; } return 0; } /* End of pcre_fullinfo.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_maketables.c0000644000175000017500000001261611407320460024125 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_maketables(), which builds character tables for PCRE in the current locale. The file is compiled on its own as part of the PCRE library. However, it is also included in the compilation of dftables.c, in which case the macro DFTABLES is defined. */ #ifndef DFTABLES # ifdef HAVE_CONFIG_H # include "config.h" # endif # include "pcre_internal.h" #endif /************************************************* * Create PCRE character tables * *************************************************/ /* This function builds a set of character tables for use by PCRE and returns a pointer to them. They are build using the ctype functions, and consequently their contents will depend upon the current locale setting. When compiled as part of the library, the store is obtained via pcre_malloc(), but when compiled inside dftables, use malloc(). Arguments: none Returns: pointer to the contiguous block of data */ const unsigned char * pcre_maketables(void) { unsigned char *yield, *p; int i; #ifndef DFTABLES yield = (unsigned char*)(pcre_malloc)(tables_length); #else yield = (unsigned char*)malloc(tables_length); #endif if (yield == NULL) return NULL; p = yield; /* First comes the lower casing table */ for (i = 0; i < 256; i++) *p++ = tolower(i); /* Next the case-flipping table */ for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i); /* Then the character class tables. Don't try to be clever and save effort on exclusive ones - in some locales things may be different. Note that the table for "space" includes everything "isspace" gives, including VT in the default locale. This makes it work for the POSIX class [:space:]. Note also that it is possible for a character to be alnum or alpha without being lower or upper, such as "male and female ordinals" (\xAA and \xBA) in the fr_FR locale (at least under Debian Linux's locales as of 12/2005). So we must test for alnum specially. */ memset(p, 0, cbit_length); for (i = 0; i < 256; i++) { if (isdigit(i)) p[cbit_digit + i/8] |= 1 << (i&7); if (isupper(i)) p[cbit_upper + i/8] |= 1 << (i&7); if (islower(i)) p[cbit_lower + i/8] |= 1 << (i&7); if (isalnum(i)) p[cbit_word + i/8] |= 1 << (i&7); if (i == '_') p[cbit_word + i/8] |= 1 << (i&7); if (isspace(i)) p[cbit_space + i/8] |= 1 << (i&7); if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7); if (isgraph(i)) p[cbit_graph + i/8] |= 1 << (i&7); if (isprint(i)) p[cbit_print + i/8] |= 1 << (i&7); if (ispunct(i)) p[cbit_punct + i/8] |= 1 << (i&7); if (iscntrl(i)) p[cbit_cntrl + i/8] |= 1 << (i&7); } p += cbit_length; /* Finally, the character type table. In this, we exclude VT from the white space chars, because Perl doesn't recognize it as such for \s and for comments within regexes. */ for (i = 0; i < 256; i++) { int x = 0; if (i != 0x0b && isspace(i)) x += ctype_space; if (isalpha(i)) x += ctype_letter; if (isdigit(i)) x += ctype_digit; if (isxdigit(i)) x += ctype_xdigit; if (isalnum(i) || i == '_') x += ctype_word; /* Note: strchr includes the terminating zero in the characters it considers. In this instance, that is ok because we want binary zero to be flagged as a meta-character, which in this sense is any character that terminates a run of data characters. */ if (strchr("\\*+?{^.$|()[", i) != 0) x += ctype_meta; *p++ = x; } return yield; } /* End of pcre_maketables.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/ucpinternal.h0000644000175000017500000000657411407320460023343 0ustar koukou/************************************************* * Unicode Property Table handler * *************************************************/ #ifndef _UCPINTERNAL_H #define _UCPINTERNAL_H /* Internal header file defining the layout of the bits in each pair of 32-bit words that form a data item in the table. */ typedef struct cnode { pcre_uint32 f0; pcre_uint32 f1; } cnode; /* Things for the f0 field */ #define f0_scriptmask 0xff000000 /* Mask for script field */ #define f0_scriptshift 24 /* Shift for script value */ #define f0_rangeflag 0x00f00000 /* Flag for a range item */ #define f0_charmask 0x001fffff /* Mask for code point value */ /* Things for the f1 field */ #define f1_typemask 0xfc000000 /* Mask for char type field */ #define f1_typeshift 26 /* Shift for the type field */ #define f1_rangemask 0x0000ffff /* Mask for a range offset */ #define f1_casemask 0x0000ffff /* Mask for a case offset */ #define f1_caseneg 0xffff8000 /* Bits for negation */ /* The data consists of a vector of structures of type cnode. The two unsigned 32-bit integers are used as follows: (f0) (1) The most significant byte holds the script number. The numbers are defined by the enum in ucp.h. (2) The 0x00800000 bit is set if this entry defines a range of characters. It is not set if this entry defines a single character (3) The 0x00600000 bits are spare. (4) The 0x001fffff bits contain the code point. No Unicode code point will ever be greater than 0x0010ffff, so this should be OK for ever. (f1) (1) The 0xfc000000 bits contain the character type number. The numbers are defined by an enum in ucp.h. (2) The 0x03ff0000 bits are spare. (3) The 0x0000ffff bits contain EITHER the unsigned offset to the top of range if this entry defines a range, OR the *signed* offset to the character's "other case" partner if this entry defines a single character. There is no partner if the value is zero. ------------------------------------------------------------------------------- | script (8) |.|.|.| codepoint (21) || type (6) |.|.| spare (8) | offset (16) | ------------------------------------------------------------------------------- | | | | | | | |-> spare | |-> spare | | | | |-> spare |-> spare | |-> range flag The upper/lower casing information is set only for characters that come in pairs. The non-one-to-one mappings in the Unicode data are ignored. When searching the data, proceed as follows: (1) Set up for a binary chop search. (2) If the top is not greater than the bottom, the character is not in the table. Its type must therefore be "Cn" ("Undefined"). (3) Find the middle vector element. (4) Extract the code point and compare. If equal, we are done. (5) If the test character is smaller, set the top to the current point, and goto (2). (6) If the current entry defines a range, compute the last character by adding the offset, and see if the test character is within the range. If it is, we are done. (7) Otherwise, set the bottom to one element past the current point and goto (2). */ #endif /* _UCPINTERNAL_H */ /* End of ucpinternal.h */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_ord2utf8.c0000644000175000017500000000614511407320460023472 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This file contains a private PCRE function that converts an ordinal character value into a UTF8 string. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * Convert character value to UTF-8 * *************************************************/ /* This function takes an integer value in the range 0 - 0x7fffffff and encodes it as a UTF-8 character in 0 to 6 bytes. Arguments: cvalue the character value buffer pointer to buffer for result - at least 6 bytes long Returns: number of characters placed in the buffer */ int _pcre_ord2utf8(int cvalue, uschar *buffer) { #ifdef SUPPORT_UTF8 register int i, j; for (i = 0; i < _pcre_utf8_table1_size; i++) if (cvalue <= _pcre_utf8_table1[i]) break; buffer += i; for (j = i; j > 0; j--) { *buffer-- = 0x80 | (cvalue & 0x3f); cvalue >>= 6; } *buffer = _pcre_utf8_table2[i] | cvalue; return i + 1; #else return 0; /* Keep compiler happy; this function won't ever be */ #endif /* called when SUPPORT_UTF8 is not defined. */ } /* End of pcre_ord2utf8.c */ cutter-testing-framework-1.1.7/glib-compatible/pcre/pcre_info.c0000644000175000017500000000746011407320460022751 0ustar koukou/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2008 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This module contains the external function pcre_info(), which gives some information about a compiled pattern. However, use of this function is now deprecated, as it has been superseded by pcre_fullinfo(). */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pcre_internal.h" /************************************************* * (Obsolete) Return info about compiled pattern * *************************************************/ /* This is the original "info" function. It picks potentially useful data out of the private structure, but its interface was too rigid. It remains for backwards compatibility. The public options are passed back in an int - though the re->options field has been expanded to a long int, all the public options at the low end of it, and so even on 16-bit systems this will still be OK. Therefore, I haven't changed the API for pcre_info(). Arguments: argument_re points to compiled code optptr where to pass back the options first_byte where to pass back the first character, or -1 if multiline and all branches start ^, or -2 otherwise Returns: number of capturing subpatterns or negative values on error */ PCRE_EXP_DEFN int pcre_info(const pcre *argument_re, int *optptr, int *first_byte) { real_pcre internal_re; const real_pcre *re = (const real_pcre *)argument_re; if (re == NULL) return PCRE_ERROR_NULL; if (re->magic_number != MAGIC_NUMBER) { re = _pcre_try_flipped(re, &internal_re, NULL, NULL); if (re == NULL) return PCRE_ERROR_BADMAGIC; } if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS); if (first_byte != NULL) *first_byte = ((re->flags & PCRE_FIRSTSET) != 0)? re->first_byte : ((re->flags & PCRE_STARTLINE) != 0)? -1 : -2; return re->top_bracket; } /* End of pcre_info.c */ cutter-testing-framework-1.1.7/glib-compatible/guniprop.c0000644000175000017500000000422411407320461021713 0ustar koukou/* guniprop.c - Unicode character properties. * * Copyright (C) 1999 Tom Tromey * Copyright (C) 2000 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include "gunicode.h" #include "gscripttable.h" #define G_SCRIPT_TABLE_MIDPOINT (G_N_ELEMENTS (g_script_table) / 2) static inline GUnicodeScript g_unichar_get_script_bsearch (gunichar ch) { int lower = 0; int upper = G_N_ELEMENTS (g_script_table) - 1; static int saved_mid = G_SCRIPT_TABLE_MIDPOINT; int mid = saved_mid; do { if (ch < g_script_table[mid].start) upper = mid - 1; else if (ch >= g_script_table[mid].start + g_script_table[mid].chars) lower = mid + 1; else return g_script_table[saved_mid = mid].script; mid = (lower + upper) / 2; } while (lower <= upper); return G_UNICODE_SCRIPT_UNKNOWN; } /** * g_unichar_get_script: * @ch: a Unicode character * * Looks up the #GUnicodeScript for a particular character (as defined * by Unicode Standard Annex #24). No check is made for @ch being a * valid Unicode character; if you pass in invalid character, the * result is undefined. * * This function is equivalent to pango_script_for_unichar() and the * two are interchangeable. * * Return value: the #GUnicodeScript for the character. * * Since: 2.14 */ GUnicodeScript g_unichar_get_script (gunichar ch) { if (ch < G_EASY_SCRIPTS_RANGE) return g_script_easy_table[ch]; else return g_unichar_get_script_bsearch (ch); } cutter-testing-framework-1.1.7/glib-compatible/Makefile.am0000644000175000017500000000111611407320461021735 0ustar koukouSUBDIRS = \ pcre INCLUDES = \ -I$(top_srcdir) AM_CFLAGS = \ $(GLIB_CFLAGS) LIBS = \ $(GLIB_LIBS) noinst_LTLIBRARIES = libglib-compatible.la libglib_compatible_la_SOURCES = \ glib-compatible.c \ glib-compatible.h if GLIB_2_12 AM_CFLAGS += \ -DSIZEOF_CHAR=1 libglib_compatible_la_SOURCES += \ gregex.c \ gregex.h \ glibintl.h \ gsequence.c \ gsequence.h \ gstring.c \ gstring.h \ guniprop.c \ gunicode.h \ gscripttable.h libglib_compatible_la_LIBADD = \ $(top_builddir)/glib-compatible/pcre/libpcre.la endif cutter-testing-framework-1.1.7/NEWS.ja0000644000175000017500000005227111525702710015751 0ustar koukou# -*- rd -*- = お知らせ --- Cutterの歴史 == [release-1-1-7] 1.1.7: 2011-02-13 === Cutter ==== 改良 * growlnotify対応。 ==== 変更 * Debian GNU/Linux lennyのサポートを終了。 ==== 修正 * CentOS 5.5で動かない問題を修正。 [中村弘輝さんが報告] === ドキュメント ===== 修正 * チュートリアルのtypoを修正。 [中村弘輝さんが報告] === 感謝 * 中村弘輝さん == [release-1-1-6] 1.1.6: 2011-02-09 === Cutter ==== 改良 * ユーティリティの名前変更: * (()) -> (()) * ユーティリティの追加: * (()) * (()) * (()) * (()) * (()) * Debian GNU/Linux squeeze対応。 [Romuald Contyさんが提案] * Ubuntu Maverick Meerkat対応。 * Fedora 14対応。 * cutter.m4: --config-cache対応。 * cutter.m4: --enable-coverageが更新するMakefileとして Makefile以外の名前に対応。(AC_CHECK_COVERAGE()の引数に Makefileのファイル名を指定) * notify-send対応。 ==== 修正 * 間違ったテストを修正。 [Ilya Baryginさんが提案] === cut-diff ==== 改良 * ヘッダーのラベルを指定する((<--labelオプション |cut-diff#--label>))を追加。 === 感謝 * Romuald Contyさん * Ilya Baryginさん == [release-1-1-5] 1.1.5: 2010-09-06 === Cutter ==== 改良 * 検証の名前変更: * (()) -> (()) * (()) -> (()) * 検証の追加: * (()) * ユーティリティの名前変更: * (()) -> (()) * ユーティリティの追加: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * Ubuntu Lucid Lynx対応。 * configure終了時に結果を報告。 [Romain Tartièreさんが提案] * libgoffice-0.8対応。(libgoffice-0.6対応は終了) [Romain Tartièreさんが提案] * lcov 1.9対応。#3056684 [Romain Tartièreさんが改良] * テスト説明文内の全角スペース表示に対応。 * サブcutterプロセスがPATH上にあれば動作するように修正。 [Romain Tartièreさんが改良] ==== 修正 * ロケールに依存したテストを修正。 [Romain Tartièreさんが提案] === cut-diff ==== 改良 * diffの周辺何行を表示するかを指定する((<--context-linesオ プション|cut-diff#--context-lines>))を追加。 === ドキュメント ==== 改良 * FreeBSDではportsを使うように変更。 [Romain Tartièreさんが提案] === 感謝 * Romain Tartièreさん == [release-1-1-4] 1.1.4: 2010-06-10 CentOS対応。 === Cutter ==== 改良 * 検証の追加: * (()) * (()) * (()) * (()) * ユーティリティの追加: * (()) * diffではできるだけタブを利用するように変更 * CentOS対応 ==== 修正 * 検証に指定したメッセージが無視される問題の修正 === ドキュメント ==== 修正 * Debian, Ubuntu: ファイルのパスを修正。 [Romuald Contyさんが報告] === 感謝 * Romuald Contyさん == [release-1-1-3] 1.1.3: 2010-04-13 データ駆動テストサポートの強化。 === Cutter ==== 改良 * AC_CHECK_ENABLE_COVERAGE: 'make check'に失敗してもカバレッ ジを出力するcoverage-forceターゲットを追加 ==== バグ修正 * 不要なメモリ解放を削除 [Reported by Zed Shaw] * AC_CHECK_ENABLE_COVERAGEがタブではなく空白を出力する問題 の修正 === GCutter ==== 改良 * データ駆動テストサポートの強化 * (()) * (()) * (()) * (()) * (()) * ユーティリティの追加: * (()) * (()) * (()) * (()) * (()) * (()) ==== バグ修正 * Mac OS Xでgcut_list_inspect_enum()と gcut_list_inspect_flags()がクラッシュする問題の修正。 === ドキュメント ==== バグ修正 * Cygwin 1.7での依存パッケージを修正 === 感謝 * Zed Shaw == [release-1-1-2] 1.1.2: 2010-04-03 Windows対応強化。 === Cutter ==== 改良 * lcov 1.8対応 * --enable-coverage=SOMETHINGと指定しても動作するようにした [グニャラくんが報告] * #2976775: cut_setup()内でのcut_omit()対応 [Romain Tartièreさんが報告] * Visual Studio C++ 2008でのビルド・テスト実行に対応 === CppCutter ==== 改良 * Windows用でのテスト定義用マクロ (())を追加 === ドキュメント ==== 改良 * Ubuntu Karmic Koara対応 === 感謝 * Romain Tartièreさん * グニャラくん == [release-1-1-1] 1.1.1: 2010-03-11 1.1.0のバグ修正とGObject、sockaddr対応強化。 === Cutter ==== 改良 * Visual C++で生成されたDLLに対応。 * 検証の追加: * (()) * テストユーティリティの追加: * (()) * (()) * (()) ==== 修正 * stdint.hがあるがinttypes.hがない環境でビルドが失敗する問題の修正 === GCutter ==== 改良 * データ駆動テストサポートの強化: * (()) * ユーティリティの追加: * (()) * (()) * (()) == [release-1-1-0] 1.1.0: 2009-11-03 注意: APIに非互換があります。 === Cutter ==== 改良 * stdint.hに定義されている型の検証を追加 [はやみずさん] * ((*API変更*)): 省略可能な検証メッセージを再有効化 変更前: cut_assert_equal_string("a", "b", "message"); 変更後: cut_assert_equal_string("a", "b", cut_message("message")); * (())の追加 * (()) を非推奨に変更 * (()) を非推奨に変更 * (()) を非推奨に変更 === CppCutter ==== 改良 * (()) が対応する型を追加 * namespace内でのテスト定義検出に対応 * (()) を非推奨に変更 * (()) を非推奨に変更 * 省略可能な検証メッセージに対応 * (()) の追加 === 感謝 * はやみずさん == [release-1-0-9] 1.0.9: 2009-10-20 === 改良 * (())に関数を追加: * (()) * ハッシュの詳細表示時に内容をキーでソート * 色付き差分表示対応: (()) * テスト実行直前にブレークポイントを設定する --stop-before-testオプションの追加 [奥地さんによる提案] * (())コマンドの追加 * unified diff対応 * C++サポートの追加: (()) === バグ修正 * ロケール依存を修正 [奥地さんによる報告] === 感謝 * 奥地さん == [release-1-0-8] 1.0.8: 2009-08-29 * libsoupサポートの追加: * HTTPクライアント機能: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * HTTPサーバー機能: * (()) * (()) * (()) * 検証: * (()) * (()) * (()) * (()) * (()) * (())に関数を追加: * (()) * (())にmroongaを追加 * Fedora用rpmパッケージをサポート * Debian用debパッケージをサポート * Ubuntu用debパッケージをサポート * lcov 1.7対応 * ドキュメント: * (())を追加 * (())を追加 * (())を追加 * (())を追加 == 1.0.7: 2009-05-20 * ((<バージョン情報|cutter-Version-Information.html>))を提供 * (())をサポート * クラッシュ時のテスト名表示(可能なら) * 共有ライブラリ解析処理の追加 * ELF(Linux/*BSD)、PE(Windows)、Mach-O(Mac OS X)に対応 * BFDによる解析処理をデフォルト無効に変更 * ドキュメント: * (())を追加 * (())を追加 * (())を追加 * ((<チュートリアル|tutorial.html>))にCygwin関連の注意書きを追加 [山川さん] * テストユーティリティの追加: * (()) * 検証の追加: * (()) * (()) * (()) * (()) * (()) [グニャラくん] * (()) [グニャラくん] * (()) [グニャラくん] * (()) [グニャラくん] * (()) [グニャラくん] * (()) [グニャラくん] * (()) [グニャラくん] * 互換性: * これまでの"cut_"プリフィックスなしのフィクスチャ用関数 を非推奨に変更。[グニャラくん] * (()) -> (()) * (()) -> (()) * (()) -> (()) * (()) -> (()) * バグ修正: * チュートリアルのtypoを修正: [海野さん] * ファイルディスクリプタのリダイレクト方法の修正: [海野さん] * --disable-signal-handlingオプションの追加 == 1.0.6: 2009-03-01 * (())を追加 * ((<外部コマンドを便利に利用するためのAPI|GCutEgg.html>))を追加 * バックトレース検出機能の改良: * (()) * 検証のユーザ指定のメッセージ関連APIを改良: * 省略可能なメッセージを非推奨に変更 * GCC以外のコンパイラをサポートするため * 検証とは別にユーザ指定のメッセージを指定するAPIの追加: * (()) * (()) * 複数の検証で同じメッセージを利用できるAPIの追加: * (()) * データ駆動テスト作成支援の強化: * ((<便利なテストデータ用API|cutter-Convenience-test-data-API.html>)) * フィクスチャ関数へ"cut_"プレフィックスの追加: * (()) * (()) * (()) * (()) * テストユーティリティの追加: * ((<オブジェクト調査関数|cutter-Object-inspection-functions.html>)) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * 検証の追加: * (()) * (()) * (()) * (()) == 1.0.5: 2008-10-15 * 最大同時スレッド数指定のサポート * --max-threadsオプション * サブプロセスに指定する場合: * (()) * (()) * GdkPixbufのサポート: * 画像比較 * 画像差分 * 期待値: (()) * 実測値: (()) * 差分: (()) * デバッグ支援の強化: * --keep-opening-modulesオプションの追加 * デバッグ時にシンボル解決できるように開いたモジュール を閉じない * SIGABORT時もSIGSEGV時のようにテスト結果を表示 * --nameオプションによる繰り返しテストの指定をサポート * 'but was:' -> 'actual:' * テストユーティリティの追加: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * 検証の追加: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * ユーザ独自検証作成サポートの強化: * バックトレース対応 * (()) * (()) * ((<検証作成|writing-assertion.html>)) * ((<検証作成の補助|cutter-Assertion-writing-helper.html>)) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * バグ修正: * メモリリークの修正(森さん) * setup()/teardown()内での検証・エラーなどの結果がでない バグを修正 == 1.0.4: 2008-08-27 * オプション: * 過去のテスト結果をログとして保存する--stream-log-dirオ プションの追加 * テストが失敗したら中断する--fatal-failuresオプションの 追加(デバッガとの連携のため) * 結果出力: * 行が長い場合は折りたたんでdiffした結果も表示 * 実行中を示す印(「.」や「F」)を適度に改行しながら出力 * 属性を設定する (())の追加 * ((<マルチプロセスでのテスト|cutter-Multi-Process.html>))をサポート * データ駆動テストのマルチスレッド実行のサポート * 検証の追加: * (()) * (()) * 便利機能の追加: * (()) * (()) * 修正: * GOfficeがない環境でビルドが失敗する問題の修正 (Kazumasa Matsunagaさんによる報告) * 実験的: * ログを解析する--analyzerモードの追加 == 1.0.3: 2008-07-15 * データ駆動テストのサポート: * (()) * 検証の追加: * (()) * 検証の名前変更: * GLibサポートが必要な機能はcut_ではなくgcut_からはじま る名前に変更。以前からあるcut_はじまりの名前も使えるが 非推奨。詳細は(())を参照。 * 便利機能の追加: * (()): 文字列にdiffを追加 * (())/(()): 文字列のリストの作成を支援。 * (()): GError *の所有権をCutterに移譲 * (()): GList *の所有権をCutterに移譲 * (()): GObject *の所有権をCutterに移譲 == 1.0.2: 2008-06-27 * フィクスチャデータのサポート: * cut_set_fixture_data_dir() * cut_get_fixture_data_string() * cut_build_fixture_data_path() * ユーティリティの追加: * cut_remove_path() * 検証の追加: * cut_assert_equal_fixture_data_string() * cut_assert_path_not_exist() * cut_assert_remove_path() * cut_error_errno() * 実験的: * Windowsサポート == 1.0.1: 2008-06-13 * AC_CHECK_COVERAGEの改良 * ドキュメント: * 追加: SennaのテストをCutterで書くには * 修正: GLib 2.16以上が必要 * 実験的: * GStreamerサポート: * テスト結果をリモートへの転送するなど * warmup()/cooldown()のサポート == 1.0.0: 2008-05-20 * 検証の追加 * cut_assert_equal_pointer() * cut_assert_g_error() * cut_assert_match() * cut_assert_match_with_free() * テスト対象から除外するファイルを指定する--exclude-fileオ プションの追加 * テスト対象から除外するディレクトリを指定する--exclude-dirオ プションの追加 * cutter.m4に--without-cutterを追加(configureのオプション) * 実験的: * Cutterプロトコルの実装(CutXMLStreamerとCutStreamParser) * cut_take_g_error()の追加 * Mac OS Xのサポート == 0.9.0: 2008-05-12 * 検証の追加 * cut_assert_equal_string_array_with_free() * cut_assert_true() * cut_assert_false() * cut_assert_file_exist() * AC_CHECK_GCUTTERの追加 * 実験的: GObjectサポート: * cut_take_g_object() == 0.8.0: 2008-05-07 * LGPL2 -> LGPL3 * 検証の追加 * cut_assert_equal_g_list_int() * cut_assert_equal_g_list_string() * cut_assert_errno() * 省略のサポート: cut_omit() * テストケースの最初と最後に実行するフックstartup/shutdownの追加 * diffのサポート * gcovのサポート * 実験的: forkのサポート: * cut_fork() * cut_wait_process() * cut_fork_get_stdout_message() * cut_fork_get_stderr_message() == 0.7.0: 2008-03-26 * パッケージの修正 * --help-allの修正 * 出力するXMLのフォーマットのドキュメントを追加 == 0.6.0: 2008-03-21 * XMLで結果を出力する-xml-reportオプションの追加。 * テストケース名で実行するテストケースを並び替え る--test-case-orderオプションの追加。 * バージョンを表示する--versionオプションの追加。 * configureに--disable-bfdオプションの追加 == 0.5.0: 2008-03-10 * パッケージもれのcutter/gbsearcharray.hを追加。 == 0.4.0: 2008-02-28 * cut_pending() -> cut_pend()。 * 属性サポート。 == 0.3.0: 2007-12-14 * ドキュメントの修正。 * cut_assert_equal_string_or_null()を非推奨に変更。 * 代わりにcut_assert_equal_string()がNULLを受け付けるよう に変更。 * 実験的なAPIをドキュメントから除外。 == 0.2.0: 2007-11-29 * SF.netでの最初のリリース。 cutter-testing-framework-1.1.7/cutter.pc.in0000644000175000017500000000042411205747032017112 0ustar koukouprefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ libdir=@libdir@ includedir=@includedir@ cutter=${bindir}/cutter@EXEEXT@ Name: Cutter Description: Cutter is a Unit Testing Framework for C. Version: @VERSION@ Cflags: -I${includedir}/cutter Libs: -L${libdir} -lcutter cutter-testing-framework-1.1.7/data/0000755000175000017500000000000011525707413015570 5ustar koukoucutter-testing-framework-1.1.7/data/icons/0000755000175000017500000000000011525707413016703 5ustar koukoucutter-testing-framework-1.1.7/data/icons/kinotan/0000755000175000017500000000000011525707413020346 5ustar koukoucutter-testing-framework-1.1.7/data/icons/kinotan/failure.png0000644000175000017500000000445611420210360022474 0ustar koukouPNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe<IDATx[Qle҄ӇR1SQQRH$})My#< !# DBEP 1pH!XHQ9bϱw쵻{Q&;|3Te1 =hu/Q5<&v&^N<PrV:6ʷTt|Q>YVpvfv G ?@ !UybTqtP3gK(  qRUS++}1.F:dB(~'V75äQ6f+ Eisgߦ=::5Hr R FIL=[H|˶NꇱE`z "X>6 BMnŒ,#ԷB:I0 XQjP1`0XKL[1j,7f,uQZ}}>KCňx$z ҊZB\H5'o&(+2T>L>G$Ee^:Rk@ѷ$]8{ͬFxLtk=t8VWnr%3OO5 @u]ԄZڹ^|s"ApLRyڱZ66-Q+yE:E? J +^O"3)o6lV%=m v_h#g"ruc;mP|79EgFdQ6*o ,a;FjiWMm7>6:`Iˣ7:XF92gۜ{uD3Ańnevg{MNPZ ٻdc+Y!txˏ$KҰ R8"?؇S+tWf†ĦEwb99VgڢWY[6^h "&:߯Y n{'_4>N'2l<,a "ھ`q zT*@4/k&Ɂ['q`ÈMHE);XBa)iy{/,ApA3Wik $Őg<9[ֶQ \!҉`IENDB`cutter-testing-framework-1.1.7/data/icons/kinotan/pass.png0000644000175000017500000000464511420214246022022 0ustar koukouPNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe< GIDATx[[hWl,Ӕ6bjRT|hjMBi V!BCc(E/B*բQRa^F1IQh=g<1~pfwfszU-',ȟf/l&V'[ xs% !Ka#l12@(5b0}7R]\+Vc]Gڔɋ4.˃YRLJI,%2u_";;+ J,/`;Ǵ#P?^_7(R? vq*yGH})[ x͈f~r,_D||0w =Mi5$JIN_cg=TB89C$-(ʥ3R[2F}ni?.ܠKm|U?#&dX@M.A⹴q/:q7`Gjrh/|h=0bl6\*KK򨧧nrB,A'Z3lƧE) 8}:¿H݇rc6e!>1HɋȞmj5`4xeʍ. P Qe Hmmm\i7ē5s 7zSwGC xƬ  7iT WÎ[4eBokLx 8M+5D?w}InaZU'ID  2K|R 抽6B`dZ0-^~:5MTn; / j^83.\TD=OFB[~k--]JQ1d3Fۀ4G^ E{B;_|ujp;VĀfBȧhr󬑹u:ղ%_4M=}jgupAiAΠ;B 'ܴ_ qLz op#79en5.{e~ea 2506HRX^GGBV6z%bCɢ #V2D6;01R^mFҳ9BjbC+cUd5SŅ(*,vND=JbpU@`Ác;ruӔV+e,˯J 4ܣ;LN0 fhm2[W|R%R}Qi$4g,0aÐGH>q{S23:iaUl' L0 zz$\B;i$pv:s֊U-6Vk Խi\wB<ʿɡkke5ce!-iiDd C]dn`2 tL]#n-27 #@%>aO͚./SR'hzj=.Ho߂qxA. E &Sn~m?فݟx\0;s hAa7Pemcv60q}#xH&@ME5>szq7RR$4'$b'fc@xMIy=ҧG-$p>?ŒXZ䔞AC\"{Y:.z_f)GЌi9V:3TpL49c?}/+Z p?[:^%D1uKJ*~y$oc|Zw/JoTc#w3k@`TT)2}]Vw(}`;O4+ŊqS|"W6B)ɺ>^Yiq\ss^VlY.? p ٛ_ K,37 :'@H8 N6EY|Wݹ 8xCޢ7 kE!6'5|ԏ]NjwYEc` *i7,).%{LLy@ k#pҢ*)n);%owA7<AG1(6p_*:zL&;UB={ vIʵL塀|(bͻ*+f H5.UܾMG?_ XQSї@.&g*W~ kV,cL9Ux/3\N48RIXߞ3r-z$*MIrY%ka=\_&ZA0oAb(DPP%gwZ.J qQ%LpdVVڂ@?}TO{g$]:kTZ$=HVuXmN+I 6ylG߬Lc՘Kdɵ&ÅׇPa0GᦨhQa>402K9< !Td}#/9ܜZK7Q.o `sш|#U7Y?0x3!'v*:}No$KhHi$(;kT8[FhCUyp);ʢ,1_Dܭ?U:=ᥗ$%%>2'|Wd֣|&2^|.q| NOoqӆ6D Z2aK wc:qa%]˨?@GWBqrffCX@D<|~c 9@YT(u|A⺝"tI C,kj] z&ȹB*3A}جxhUN}Hn\pw܆Ve2"G+ Z ȓ!=tr+a"]Rm+C^Uqtgә?=ٝ!$$YK']#(]+cBh;2X=鉂sl:Ŭ{dL(sXorhw8 s}\-v剑 7Kb<,0KZVb#P@lRM:=@+HxR ># cbW$_rrXxp@LRIaA6< ڪ$L><>I؊amC`1Z8IENDB`cutter-testing-framework-1.1.7/data/icons/kinotan/pending.png0000644000175000017500000000461411420210360022465 0ustar koukouPNG  IHDR@@iqtEXtSoftwareAdobe ImageReadyqe< .IDATx[ lUbaK",POҮ )ȧ@ZFK H"_b(DbIZm AiKSbiK;o۾f337yvwfsq555,x0=0^leU7RU%-Li(-DyrQak.[󴾍D)F'מ!XvM5]tS [c C${5F fkCJqkj/y@CP4!MM-mTuQy+p`Gb  "Ʒ  vбs䔞AC\"{Y:.z_f)GЌi9V:3TpL49c?}/+Z p?[:^%D1uKJ*~y$oc|Zw/JoTc#w3k@`TT)2}]Vw(}`;O4+ŊqS|"W6B)ɺ>^Yiq\ss^VlY.? p ٛ_ K,37 :'@H8 N6EY|Wݹ 8xCޢ7 kE!6'5|ԏ]NjwYEc` *i7,).%{LLy@ k#pҢ*)n);%owA7<AG1(6p_*:zL&;UB={ vIʵL塀|(bͻ*+f H5.UܾMG?_ XQSї@.&g*W~ kV,cL9Ux/3\N48RIXߞ3r-z$*MIrY%ka=\_&ZA0oAb(DPP%gwZ.J qQ%LpdVVڂ@?}TO{g$]:kTZ$=HVuXmN+I 6ylG߬Lc՘Kdɵ&ÅׇPa0GᦨhQa>402K9< !Td}#/9ܜZK7Q.o `sш|#U7Y?0x3!'v*:}No$KhHi$(;kT8[FhCUyp);ʢ,1_Dܭ?U:=ᥗ$%%>2'|Wd֣|&2^|.q| NOoqӆ6D Z2aK wc:qa%]˨?@GWBqrffCX@D<|~c 9@YT(u|A⺝"tI C,kj] z&ȹB*3A}جxhUN}Hn\pw܆Ve2"G+ Z ȓ!=tr+a"]Rm+C^Uqtgә?=ٝ!$$YK']#(]+cBh;2X=鉂sl:Ŭ{dL(sXorhw8 s}\-v剑 7Kb<,0KZVb#P@lRM:=@+HxR ># cbW$_rrXxp@LRIaA6< ڪ$L><>I؊amC`1Z8IENDB`cutter-testing-framework-1.1.7/data/icons/kinotan/Makefile.in0000644000175000017500000003614011525654633022424 0ustar koukou# 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@ 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@ subdir = data/icons/kinotan DIST_COMMON = $(dist_icons_kinotan_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(icons_kinotandir)" DATA = $(dist_icons_kinotan_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ icons_kinotandir = $(icons_dir)/kinotan dist_icons_kinotan_DATA = \ pass.png \ failure.png \ pending.png \ default.png all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/icons/kinotan/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign data/icons/kinotan/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_icons_kinotanDATA: $(dist_icons_kinotan_DATA) @$(NORMAL_INSTALL) test -z "$(icons_kinotandir)" || $(MKDIR_P) "$(DESTDIR)$(icons_kinotandir)" @list='$(dist_icons_kinotan_DATA)'; test -n "$(icons_kinotandir)" || 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)$(icons_kinotandir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icons_kinotandir)" || exit $$?; \ done uninstall-dist_icons_kinotanDATA: @$(NORMAL_UNINSTALL) @list='$(dist_icons_kinotan_DATA)'; test -n "$(icons_kinotandir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(icons_kinotandir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(icons_kinotandir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icons_kinotandir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_icons_kinotanDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_icons_kinotanDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_icons_kinotanDATA \ 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 \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am \ uninstall-dist_icons_kinotanDATA # 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: cutter-testing-framework-1.1.7/data/icons/kinotan/Makefile.am0000644000175000017500000000020611523772156022404 0ustar koukouicons_kinotandir = $(icons_dir)/kinotan dist_icons_kinotan_DATA = \ pass.png \ failure.png \ pending.png \ default.png cutter-testing-framework-1.1.7/data/icons/Makefile.in0000644000175000017500000004760111525654633020765 0ustar koukou# 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@ 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@ subdir = data/icons DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = kinotan all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign data/icons/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/data/icons/Makefile.am0000644000175000017500000000002211523771654020737 0ustar koukouSUBDIRS = kinotan cutter-testing-framework-1.1.7/data/Makefile.in0000644000175000017500000004755511525654633017662 0ustar koukou# 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@ 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@ subdir = data DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = icons all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/data/Makefile.am0000644000175000017500000000002011523771604017615 0ustar koukouSUBDIRS = icons cutter-testing-framework-1.1.7/sample/0000755000175000017500000000000011525707420016136 5ustar koukoucutter-testing-framework-1.1.7/sample/glib/0000755000175000017500000000000011525707420017053 5ustar koukoucutter-testing-framework-1.1.7/sample/glib/array.c0000644000175000017500000000651511205747023020342 0ustar koukou/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ #include #include #include #include void test_array (void); void test_ptr_array (void); void test_byte_array (void); static GArray *garray; static GPtrArray *gparray; static GByteArray *gbarray; void setup (void) { } static void free_array (void) { if (garray) { g_array_free (garray, TRUE); garray = NULL; } } static void free_ptr_array (void) { if (gparray) { g_ptr_array_free (gparray, TRUE); gparray = NULL; } } static void free_byte_array (void) { if (gbarray) { g_byte_array_free (gbarray, TRUE); gbarray = NULL; } } void teardown (void) { free_array(); free_ptr_array(); free_byte_array(); } static void sum_up (gpointer data, gpointer user_data) { gint *sum = (gint *)user_data; *sum += GPOINTER_TO_INT (data); } void test_array (void) { gint i; /* array tests */ garray = g_array_new (FALSE, FALSE, sizeof (gint)); for (i = 0; i < 10000; i++) g_array_append_val (garray, i); for (i = 0; i < 10000; i++) cut_assert_equal_int (i, g_array_index (garray, gint, i)); free_array(); garray = g_array_new (FALSE, FALSE, sizeof (gint)); for (i = 0; i < 100; i++) g_array_prepend_val (garray, i); for (i = 0; i < 100; i++) cut_assert_equal_int ((100 - i - 1), g_array_index (garray, gint, i)); free_array(); } void test_ptr_array (void) { gint i; gint sum = 0; /* pointer arrays */ gparray = g_ptr_array_new (); for (i = 0; i < 10000; i++) g_ptr_array_add (gparray, GINT_TO_POINTER (i)); for (i = 0; i < 10000; i++) cut_assert_equal_pointer (GINT_TO_POINTER (i), g_ptr_array_index (gparray, i)); g_ptr_array_foreach (gparray, sum_up, &sum); cut_assert_equal_int (49995000, sum); free_ptr_array (); } void test_byte_array (void) { gint i; /* byte arrays */ gbarray = g_byte_array_new (); for (i = 0; i < 10000; i++) g_byte_array_append (gbarray, (guint8*) "abcd", 4); for (i = 0; i < 10000; i++) { cut_assert_equal_int ('a', gbarray->data[4*i]); cut_assert_equal_int ('b', gbarray->data[4*i+1]); cut_assert_equal_int ('c', gbarray->data[4*i+2]); cut_assert_equal_int ('d', gbarray->data[4*i+3]); } free_byte_array (); } cutter-testing-framework-1.1.7/sample/glib/option.c0000644000175000017500000007042411273303655020540 0ustar koukou/* -*- c-file-style: "gnu" -*- */ #include #include #include #include #include static gboolean error_test_pre_parse_fail = FALSE; static gboolean error_test_post_parse_fail = FALSE; static int callback_test2_int; static gchar *callback_test_optional_string; static gboolean callback_test_optional_boolean; static gboolean test_boolean; static gint test_int; static gint64 test_int64; static gint64 test_int64_2; static gdouble test_double; static gchar *test_string; static gchar **test_array; static GOptionContext *context = NULL; static GError *error = NULL; static gchar **argv = NULL; static gint argc; void test_parse_int_error (void); void test_parse_string_error (void); void test_parse_boolean_error (void); void test_arg_int (void); void test_arg_string (void); void test_arg_string_filename (void); void test_arg_double (void); void test_arg_double_de_DE_locale (void); void test_arg_int64 (void); void test_callback1 (void); void test_callback_int (void); void test_add (void); void test_arg_array (void); void test_ignore1 (void); void test_ignore2 (void); void test_ignore3 (void); void test_empty (void); void test_empty_argv_and_argc (void); void test_empty_argv (void); void test_unknown_short (void); void test_lonely_dash (void); void test_missing_arg (void); void test_callback_optional_1 (void); void test_callback_optional_2 (void); void test_callback_optional_3 (void); void test_callback_optional_4 (void); void test_callback_optional_5 (void); void test_callback_optional_6 (void); void test_callback_optional_7 (void); void test_callback_optional_8 (void); void test_callback_remaining (void); void test_rest1 (void); void test_rest2 (void); void test_rest2a (void); void test_rest2b (void); void test_rest2c (void); void test_rest2d (void); void test_rest3 (void); void test_rest4 (void); void test_rest5 (void); void setup (void) { context = g_option_context_new (NULL); argv = NULL; error = NULL; test_string = NULL; callback_test2_int = 0; } void teardown (void) { if (argv) g_strfreev (argv); if (context) g_option_context_free (context); if (error) g_error_free (error); if (test_string) g_free (test_string); } static gchar ** split_string (const char *str, int *argc) { gchar **strings; int len; strings = g_strsplit (str, " ", 0); for (len = 0; strings[len] != NULL; len++); if (argc) *argc = len; return strings; } static gchar * join_stringv (int argc, char **strings) { int i; GString *str; str = g_string_new (NULL); for (i = 0; i < argc; i++) { g_string_append (str, strings[i]); if (i < argc - 1) g_string_append_c (str, ' '); } return g_string_free (str, FALSE); } /* Performs a shallow copy */ static char ** copy_stringv (char **strings, int argc) { return g_memdup (strings, sizeof (char *) * (argc + 1)); } static gboolean error_pre_parse_int (GOptionContext *context, GOptionGroup *group, gpointer data, GError **error) { if (0x12345678 != test_int) error_test_pre_parse_fail = TRUE; return TRUE; } static gboolean error_post_parse_int (GOptionContext *context, GOptionGroup *group, gpointer data, GError **error) { if (20 != test_int) error_test_post_parse_fail = TRUE; /* Set an error in the post hook */ g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "XXX"); return FALSE; } void test_parse_int_error (void) { GOptionGroup *main_group; GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_INT, &test_int, NULL, NULL }, { NULL } }; test_int = 0x12345678; error_test_pre_parse_fail = FALSE; error_test_post_parse_fail = FALSE; g_option_context_add_main_entries (context, entries, NULL); /* Set pre and post parse hooks */ main_group = g_option_context_get_main_group (context); g_option_group_set_parse_hooks (main_group, error_pre_parse_int, error_post_parse_int); /* Now try parsing */ argv = split_string ("program --test 20", &argc); cut_assert (!g_option_context_parse (context, &argc, &argv, &error)); cut_assert (!error_test_pre_parse_fail); cut_assert (!error_test_post_parse_fail); /* On failure, values should be reset */ cut_assert_equal_int (0x12345678, test_int); } static gboolean error_test2_pre_parse (GOptionContext *context, GOptionGroup *group, gpointer data, GError **error) { if (strcmp (test_string, "foo") != 0) error_test_pre_parse_fail = TRUE; return TRUE; } static gboolean error_test2_post_parse (GOptionContext *context, GOptionGroup *group, gpointer data, GError **error) { if (strcmp (test_string, "bar") != 0) error_test_post_parse_fail = TRUE; /* Set an error in the post hook */ g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "XXX"); return FALSE; } void test_parse_string_error (void) { GOptionGroup *main_group; GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_STRING, &test_string, NULL, NULL }, { NULL } }; test_string = g_strdup ("foo"); error_test_pre_parse_fail = FALSE; error_test_post_parse_fail = FALSE; g_option_context_add_main_entries (context, entries, NULL); /* Set pre and post parse hooks */ main_group = g_option_context_get_main_group (context); g_option_group_set_parse_hooks (main_group, error_test2_pre_parse, error_test2_post_parse); /* Now try parsing */ argv = split_string ("program --test bar", &argc); cut_assert (!g_option_context_parse (context, &argc, &argv, &error)); cut_assert (!error_test_pre_parse_fail); cut_assert (!error_test_post_parse_fail); cut_assert_equal_string ("foo", test_string); } static gboolean error_test3_pre_parse (GOptionContext *context, GOptionGroup *group, gpointer data, GError **error) { if (test_boolean) error_test_pre_parse_fail = TRUE; return TRUE; } static gboolean error_test3_post_parse (GOptionContext *context, GOptionGroup *group, gpointer data, GError **error) { if (!test_boolean) error_test_post_parse_fail = TRUE; /* Set an error in the post hook */ g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "XXX"); return FALSE; } void test_parse_boolean_error (void) { GOptionGroup *main_group; GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; test_boolean = FALSE; error_test_pre_parse_fail = FALSE; error_test_post_parse_fail = FALSE; g_option_context_add_main_entries (context, entries, NULL); /* Set pre and post parse hooks */ main_group = g_option_context_get_main_group (context); g_option_group_set_parse_hooks (main_group, error_test3_pre_parse, error_test3_post_parse); /* Now try parsing */ argv = split_string ("program --test", &argc); cut_assert (!g_option_context_parse (context, &argc, &argv, &error)); cut_assert (!error_test_pre_parse_fail); cut_assert (!error_test_post_parse_fail); cut_assert (!test_boolean); } void test_arg_int (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_INT, &test_int, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test 20 --test 30", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Last arg specified is the one that should be stored */ cut_assert_equal_int (30, test_int); } void test_arg_string (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_STRING, &test_string, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test foo --test bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Last arg specified is the one that should be stored */ cut_assert_equal_string ("bar", test_string); } void test_arg_string_filename (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_FILENAME, &test_string, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test foo.txt", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Last arg specified is the one that should be stored */ cut_assert_equal_string ("foo.txt", test_string); } void test_arg_double (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_DOUBLE, &test_double, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test 20.0 --test 30.03", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Last arg specified is the one that should be stored */ cut_assert_equal_double (30.03, 0.0, test_double); } void test_arg_double_de_DE_locale (void) { char *old_locale, *current_locale; const char *locale = "de_DE"; GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_DOUBLE, &test_double, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test 20,0 --test 30,03", &argc); /* set it to some locale that uses commas instead of decimal points */ old_locale = g_strdup (setlocale (LC_NUMERIC, locale)); current_locale = setlocale (LC_NUMERIC, NULL); if (strcmp (current_locale, locale) != 0) { cut_omit ("Cannot set locale to %s, skipping", locale); goto cleanup; } cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Last arg specified is the one that should be stored */ cut_assert_equal_double (30.03, 0.0, test_double); cleanup: setlocale (LC_NUMERIC, old_locale); g_free (old_locale); } void test_arg_int64 (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_INT64, &test_int64, NULL, NULL }, { "test2", 0, 0, G_OPTION_ARG_INT64, &test_int64_2, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test 4294967297 --test 4294967296 --test2 0xfffffffff", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Last arg specified is the one that should be stored */ gcut_assert_equal_int64 (G_GINT64_CONSTANT(4294967296), test_int64); gcut_assert_equal_int64 (G_GINT64_CONSTANT(0xfffffffff), test_int64_2); } static gboolean callback_parse1 (const gchar *option_name, const gchar *value, gpointer data, GError **error) { test_string = g_strdup (value); return TRUE; } void test_callback1 (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_CALLBACK, callback_parse1, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test foo.txt", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_equal_string ("foo.txt", test_string); } static gboolean callback_parse2 (const gchar *option_name, const gchar *value, gpointer data, GError **error) { callback_test2_int++; return TRUE; } void test_callback_int (void) { GOptionEntry entries [] = { { "test", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, callback_parse2, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test --test", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_equal_int (2, callback_test2_int); } static gboolean callback_parse_optional (const gchar *option_name, const gchar *value, gpointer data, GError **error) { callback_test_optional_boolean = TRUE; if (value) callback_test_optional_string = g_strdup (value); else callback_test_optional_string = NULL; return TRUE; } void test_callback_optional_1 (void) { GOptionEntry entries [] = { { "test", 0, G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, callback_parse_optional, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test foo.txt", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_equal_string ("foo.txt", callback_test_optional_string); cut_assert (callback_test_optional_boolean); g_free (callback_test_optional_string); } void test_callback_optional_2 (void) { GOptionEntry entries [] = { { "test", 0, G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, callback_parse_optional, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_null (callback_test_optional_string); cut_assert (callback_test_optional_boolean); g_free (callback_test_optional_string); } void test_callback_optional_3 (void) { GOptionEntry entries [] = { { "test", 't', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, callback_parse_optional, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program -t foo.txt", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_equal_string ("foo.txt", callback_test_optional_string); cut_assert (callback_test_optional_boolean); g_free (callback_test_optional_string); } void test_callback_optional_4 (void) { GOptionEntry entries [] = { { "test", 't', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, callback_parse_optional, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program -t", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_null (callback_test_optional_string); cut_assert (callback_test_optional_boolean); g_free (callback_test_optional_string); } void test_callback_optional_5 (void) { gboolean dummy; GOptionEntry entries [] = { { "dummy", 'd', 0, G_OPTION_ARG_NONE, &dummy, NULL }, { "test", 't', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, callback_parse_optional, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test --dummy", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_null (callback_test_optional_string); cut_assert (callback_test_optional_boolean); g_free (callback_test_optional_string); } void test_callback_optional_6 (void) { gboolean dummy; GOptionEntry entries [] = { { "dummy", 'd', 0, G_OPTION_ARG_NONE, &dummy, NULL }, { "test", 't', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, callback_parse_optional, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program -t -d", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_null (callback_test_optional_string); cut_assert (callback_test_optional_boolean); g_free (callback_test_optional_string); } void test_callback_optional_7 (void) { gboolean dummy; GOptionEntry entries [] = { { "dummy", 'd', 0, G_OPTION_ARG_NONE, &dummy, NULL }, { "test", 't', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, callback_parse_optional, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program -td", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_null (callback_test_optional_string); cut_assert (callback_test_optional_boolean); g_free (callback_test_optional_string); } void test_callback_optional_8 (void) { gboolean dummy; GOptionEntry entries [] = { { "dummy", 'd', 0, G_OPTION_ARG_NONE, &dummy, NULL }, { "test", 't', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, callback_parse_optional, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program -dt foo.txt", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert (callback_test_optional_string); cut_assert (callback_test_optional_boolean); g_free (callback_test_optional_string); } static GPtrArray *callback_remaining_args; static gboolean callback_remaining_test1_callback (const gchar *option_name, const gchar *value, gpointer data, GError **error) { g_ptr_array_add (callback_remaining_args, g_strdup (value)); return TRUE; } void test_callback_remaining (void) { GOptionEntry entries [] = { { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_CALLBACK, callback_remaining_test1_callback, NULL, NULL }, { NULL } }; callback_remaining_args = g_ptr_array_new (); g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program foo.txt blah.txt", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert_equal_int (2, callback_remaining_args->len); cut_assert_equal_string ("foo.txt", callback_remaining_args->pdata[0]); cut_assert_equal_string ("blah.txt", callback_remaining_args->pdata[1]); g_ptr_array_foreach (callback_remaining_args, (GFunc) g_free, NULL); g_ptr_array_free (callback_remaining_args, TRUE); } void test_ignore1 (void) { gchar **argv_copy; gchar *arg; GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; g_option_context_set_ignore_unknown_options (context, TRUE); g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test --hello", &argc); argv_copy = copy_stringv (argv, argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ arg = join_stringv (argc, argv); cut_assert_equal_string ("program --hello", arg); g_free (arg); g_strfreev (argv_copy); g_free (argv); argv = NULL; } void test_ignore2 (void) { gchar *arg; GOptionEntry entries [] = { { "test", 't', 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; g_option_context_set_ignore_unknown_options (context, TRUE); g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program -test", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ arg = join_stringv (argc, argv); cut_assert_equal_string ("program -es", arg); g_free (arg); } void test_ignore3 (void) { gchar **argv_copy; gchar *arg; GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_STRING, &test_string, NULL, NULL }, { NULL } }; g_option_context_set_ignore_unknown_options (context, TRUE); g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test foo --hello", &argc); argv_copy = copy_stringv (argv, argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ arg = join_stringv (argc, argv); cut_assert_equal_string ("program --hello", arg); cut_assert_equal_string ("foo", test_string); g_free (arg); g_strfreev (argv_copy); g_free (argv); argv = NULL; } void test_arg_array (void) { int argc; GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_STRING_ARRAY, &test_array, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test foo --test bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert_equal_string ("foo", test_array[0]); cut_assert_equal_string ("bar", test_array[1]); cut_assert_null (test_array[2]); g_strfreev (test_array); } void test_add (void) { GOptionEntry entries1 [] = { { "test1", 0, 0, G_OPTION_ARG_STRING_ARRAY, NULL, NULL, NULL }, { NULL } }; GOptionEntry entries2 [] = { { "test2", 0, 0, G_OPTION_ARG_STRING_ARRAY, NULL, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries1, NULL); g_option_context_add_main_entries (context, entries2, NULL); } void test_empty (void) { GOptionEntry entries [] = { { NULL } }; char *prgname; g_set_prgname (NULL); g_option_context_add_main_entries (context, entries, NULL); g_option_context_parse (context, NULL, NULL, NULL); prgname = g_get_prgname (); cut_assert (prgname); cut_assert_equal_string ("", prgname); } void test_empty_argv_and_argc (void) { cut_assert (g_option_context_parse (context, NULL, NULL, NULL)); } void test_empty_argv (void) { gint argc; argc = 0; argv = NULL; cut_assert (g_option_context_parse (context, &argc, &argv, NULL)); } /* check that non-option arguments are left in argv by default */ void test_rest1 (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program foo --test bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("program", argv[0]); cut_assert_equal_string ("foo", argv[1]); cut_assert_equal_string ("bar", argv[2]); cut_assert_null (argv[3]); } /* check that -- works */ void test_rest2 (void) { gboolean retval; int argc; GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program foo --test -- -bar", &argc); retval = g_option_context_parse (context, &argc, &argv, &error); cut_assert (retval); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("program", argv[0]); cut_assert_equal_string ("foo", argv[1]); cut_assert_equal_string ("--", argv[2]); cut_assert_equal_string ("-bar", argv[3]); cut_assert_null (argv[4]); } /* check that -- stripping works */ void test_rest2a (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program foo --test -- bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("program", argv[0]); cut_assert_equal_string ("foo", argv[1]); cut_assert_equal_string ("bar", argv[2]); cut_assert_null (argv[3]); } void test_rest2b (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; g_option_context_set_ignore_unknown_options (context, TRUE); g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program foo --test -bar --", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("program", argv[0]); cut_assert_equal_string ("foo", argv[1]); cut_assert_equal_string ("-bar", argv[2]); cut_assert_null (argv[3]); } void test_rest2c (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test foo -- bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("program", argv[0]); cut_assert_equal_string ("foo", argv[1]); cut_assert_equal_string ("bar", argv[2]); cut_assert_null (argv[3]); } void test_rest2d (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test -- -bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("program", argv[0]); cut_assert_equal_string ("--", argv[1]); cut_assert_equal_string ("-bar", argv[2]); cut_assert_null (argv[3]); } /* check that G_OPTION_REMAINING collects non-option arguments */ void test_rest3 (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &test_array, NULL, NULL }, { NULL } }; context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program foo --test bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("foo", test_array[0]); cut_assert_equal_string ("bar", test_array[1]); cut_assert_null (argv[2]); g_strfreev (test_array); } /* check that G_OPTION_REMAINING and -- work together */ void test_rest4 (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &test_array, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program foo --test -- -bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("foo", test_array[0]); cut_assert_equal_string ("-bar", test_array[1]); cut_assert_null (argv[2]); g_strfreev (test_array); } /* test that G_OPTION_REMAINING works with G_OPTION_ARG_FILENAME_ARRAY */ void test_rest5 (void) { GOptionEntry entries [] = { { "test", 0, 0, G_OPTION_ARG_NONE, &test_boolean, NULL, NULL }, { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &test_array, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program foo --test bar", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); /* Check array */ cut_assert (test_boolean); cut_assert_equal_string ("foo", test_array[0]); cut_assert_equal_string ("bar", test_array[1]); cut_assert_null (argv[2]); g_strfreev (test_array); } void test_unknown_short (void) { GOptionEntry entries [] = { { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program -0", &argc); cut_assert (!g_option_context_parse (context, &argc, &argv, &error)); } /* test that lone dashes are treated as non-options */ void test_lonely_dash (void) { /* Now try parsing */ argv = split_string ("program -", &argc); cut_assert (g_option_context_parse (context, &argc, &argv, &error)); cut_assert (argv[1]); cut_assert_equal_string ("-", argv[1]); } void test_missing_arg (void) { gchar *arg = NULL; GOptionEntry entries [] = { { "test", 't', 0, G_OPTION_ARG_STRING, &arg, NULL, NULL }, { NULL } }; g_option_context_add_main_entries (context, entries, NULL); /* Now try parsing */ argv = split_string ("program --test", &argc); cut_assert (!g_option_context_parse (context, &argc, &argv, &error)); g_clear_error (&error); /* Try parsing again */ argv = split_string ("program --t", &argc); cut_assert (!g_option_context_parse (context, &argc, &argv, &error)); } cutter-testing-framework-1.1.7/sample/glib/utf8-validate.c0000644000175000017500000002431511205747023021677 0ustar koukou/* -*- c-file-style: "gnu" -*- */ /* GLIB - Library of useful routines for C programming * Copyright (C) 2001 Matthias Clasen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "cutter.h" #include #define UNICODE_VALID(Char) \ ((Char) < 0x110000 && \ (((Char) & 0xFFFFF800) != 0xD800) && \ ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \ ((Char) & 0xFFFE) != 0xFFFE) void test_utf8_validate (void); struct { const gchar *text; gint max_len; gint offset; gboolean valid; } test[] = { /* some tests to check max_len handling */ /* length 1 */ { "abcde", -1, 5, TRUE }, { "abcde", 3, 3, TRUE }, { "abcde", 5, 5, TRUE }, { "abcde", 7, 5, FALSE }, /* length 2 */ { "\xc2\xa9\xc2\xa9\xc2\xa9", -1, 6, TRUE }, { "\xc2\xa9\xc2\xa9\xc2\xa9", 1, 0, FALSE }, { "\xc2\xa9\xc2\xa9\xc2\xa9", 2, 2, TRUE }, { "\xc2\xa9\xc2\xa9\xc2\xa9", 3, 2, FALSE }, { "\xc2\xa9\xc2\xa9\xc2\xa9", 4, 4, TRUE }, { "\xc2\xa9\xc2\xa9\xc2\xa9", 5, 4, FALSE }, { "\xc2\xa9\xc2\xa9\xc2\xa9", 6, 6, TRUE }, { "\xc2\xa9\xc2\xa9\xc2\xa9", 7, 6, FALSE }, /* length 3 */ { "\xe2\x89\xa0\xe2\x89\xa0", -1, 6, TRUE }, { "\xe2\x89\xa0\xe2\x89\xa0", 1, 0, FALSE }, { "\xe2\x89\xa0\xe2\x89\xa0", 2, 0, FALSE }, { "\xe2\x89\xa0\xe2\x89\xa0", 3, 3, TRUE }, { "\xe2\x89\xa0\xe2\x89\xa0", 4, 3, FALSE }, { "\xe2\x89\xa0\xe2\x89\xa0", 5, 3, FALSE }, { "\xe2\x89\xa0\xe2\x89\xa0", 6, 6, TRUE }, { "\xe2\x89\xa0\xe2\x89\xa0", 7, 6, FALSE }, /* examples from http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt */ /* greek 'kosme' */ { "\xce\xba\xe1\xbd\xb9\xcf\x83\xce\xbc\xce\xb5", -1, 11, TRUE }, /* first sequence of each length */ { "\x00", -1, 0, TRUE }, { "\xc2\x80", -1, 2, TRUE }, { "\xe0\xa0\x80", -1, 3, TRUE }, { "\xf0\x90\x80\x80", -1, 4, TRUE }, { "\xf8\x88\x80\x80\x80", -1, 0, FALSE }, { "\xfc\x84\x80\x80\x80\x80", -1, 0, FALSE }, /* last sequence of each length */ { "\x7f", -1, 1, TRUE }, { "\xdf\xbf", -1, 2, TRUE }, { "\xef\xbf\xbf", -1, 0, FALSE }, { "\xf7\xbf\xbf\xbf", -1, 0, FALSE }, { "\xfb\xbf\xbf\xbf\xbf", -1, 0, FALSE }, { "\xfd\xbf\xbf\xbf\xbf\xbf", -1, 0, FALSE }, /* other boundary conditions */ { "\xed\x9f\xbf", -1, 3, TRUE }, { "\xee\x80\x80", -1, 3, TRUE }, { "\xef\xbf\xbd", -1, 3, TRUE }, { "\xf4\x8f\xbf\xbf", -1, 0, FALSE }, { "\xf4\x90\x80\x80", -1, 0, FALSE }, /* malformed sequences */ /* continuation bytes */ { "\x80", -1, 0, FALSE }, { "\xbf", -1, 0, FALSE }, { "\x80\xbf", -1, 0, FALSE }, { "\x80\xbf\x80", -1, 0, FALSE }, { "\x80\xbf\x80\xbf", -1, 0, FALSE }, { "\x80\xbf\x80\xbf\x80", -1, 0, FALSE }, { "\x80\xbf\x80\xbf\x80\xbf", -1, 0, FALSE }, { "\x80\xbf\x80\xbf\x80\xbf\x80", -1, 0, FALSE }, /* all possible continuation byte */ { "\x80", -1, 0, FALSE }, { "\x81", -1, 0, FALSE }, { "\x82", -1, 0, FALSE }, { "\x83", -1, 0, FALSE }, { "\x84", -1, 0, FALSE }, { "\x85", -1, 0, FALSE }, { "\x86", -1, 0, FALSE }, { "\x87", -1, 0, FALSE }, { "\x88", -1, 0, FALSE }, { "\x89", -1, 0, FALSE }, { "\x8a", -1, 0, FALSE }, { "\x8b", -1, 0, FALSE }, { "\x8c", -1, 0, FALSE }, { "\x8d", -1, 0, FALSE }, { "\x8e", -1, 0, FALSE }, { "\x8f", -1, 0, FALSE }, { "\x90", -1, 0, FALSE }, { "\x91", -1, 0, FALSE }, { "\x92", -1, 0, FALSE }, { "\x93", -1, 0, FALSE }, { "\x94", -1, 0, FALSE }, { "\x95", -1, 0, FALSE }, { "\x96", -1, 0, FALSE }, { "\x97", -1, 0, FALSE }, { "\x98", -1, 0, FALSE }, { "\x99", -1, 0, FALSE }, { "\x9a", -1, 0, FALSE }, { "\x9b", -1, 0, FALSE }, { "\x9c", -1, 0, FALSE }, { "\x9d", -1, 0, FALSE }, { "\x9e", -1, 0, FALSE }, { "\x9f", -1, 0, FALSE }, { "\xa0", -1, 0, FALSE }, { "\xa1", -1, 0, FALSE }, { "\xa2", -1, 0, FALSE }, { "\xa3", -1, 0, FALSE }, { "\xa4", -1, 0, FALSE }, { "\xa5", -1, 0, FALSE }, { "\xa6", -1, 0, FALSE }, { "\xa7", -1, 0, FALSE }, { "\xa8", -1, 0, FALSE }, { "\xa9", -1, 0, FALSE }, { "\xaa", -1, 0, FALSE }, { "\xab", -1, 0, FALSE }, { "\xac", -1, 0, FALSE }, { "\xad", -1, 0, FALSE }, { "\xae", -1, 0, FALSE }, { "\xaf", -1, 0, FALSE }, { "\xb0", -1, 0, FALSE }, { "\xb1", -1, 0, FALSE }, { "\xb2", -1, 0, FALSE }, { "\xb3", -1, 0, FALSE }, { "\xb4", -1, 0, FALSE }, { "\xb5", -1, 0, FALSE }, { "\xb6", -1, 0, FALSE }, { "\xb7", -1, 0, FALSE }, { "\xb8", -1, 0, FALSE }, { "\xb9", -1, 0, FALSE }, { "\xba", -1, 0, FALSE }, { "\xbb", -1, 0, FALSE }, { "\xbc", -1, 0, FALSE }, { "\xbd", -1, 0, FALSE }, { "\xbe", -1, 0, FALSE }, { "\xbf", -1, 0, FALSE }, /* lone start characters */ { "\xc0\x20", -1, 0, FALSE }, { "\xc1\x20", -1, 0, FALSE }, { "\xc2\x20", -1, 0, FALSE }, { "\xc3\x20", -1, 0, FALSE }, { "\xc4\x20", -1, 0, FALSE }, { "\xc5\x20", -1, 0, FALSE }, { "\xc6\x20", -1, 0, FALSE }, { "\xc7\x20", -1, 0, FALSE }, { "\xc8\x20", -1, 0, FALSE }, { "\xc9\x20", -1, 0, FALSE }, { "\xca\x20", -1, 0, FALSE }, { "\xcb\x20", -1, 0, FALSE }, { "\xcc\x20", -1, 0, FALSE }, { "\xcd\x20", -1, 0, FALSE }, { "\xce\x20", -1, 0, FALSE }, { "\xcf\x20", -1, 0, FALSE }, { "\xd0\x20", -1, 0, FALSE }, { "\xd1\x20", -1, 0, FALSE }, { "\xd2\x20", -1, 0, FALSE }, { "\xd3\x20", -1, 0, FALSE }, { "\xd4\x20", -1, 0, FALSE }, { "\xd5\x20", -1, 0, FALSE }, { "\xd6\x20", -1, 0, FALSE }, { "\xd7\x20", -1, 0, FALSE }, { "\xd8\x20", -1, 0, FALSE }, { "\xd9\x20", -1, 0, FALSE }, { "\xda\x20", -1, 0, FALSE }, { "\xdb\x20", -1, 0, FALSE }, { "\xdc\x20", -1, 0, FALSE }, { "\xdd\x20", -1, 0, FALSE }, { "\xde\x20", -1, 0, FALSE }, { "\xdf\x20", -1, 0, FALSE }, { "\xe0\x20", -1, 0, FALSE }, { "\xe1\x20", -1, 0, FALSE }, { "\xe2\x20", -1, 0, FALSE }, { "\xe3\x20", -1, 0, FALSE }, { "\xe4\x20", -1, 0, FALSE }, { "\xe5\x20", -1, 0, FALSE }, { "\xe6\x20", -1, 0, FALSE }, { "\xe7\x20", -1, 0, FALSE }, { "\xe8\x20", -1, 0, FALSE }, { "\xe9\x20", -1, 0, FALSE }, { "\xea\x20", -1, 0, FALSE }, { "\xeb\x20", -1, 0, FALSE }, { "\xec\x20", -1, 0, FALSE }, { "\xed\x20", -1, 0, FALSE }, { "\xee\x20", -1, 0, FALSE }, { "\xef\x20", -1, 0, FALSE }, { "\xf0\x20", -1, 0, FALSE }, { "\xf1\x20", -1, 0, FALSE }, { "\xf2\x20", -1, 0, FALSE }, { "\xf3\x20", -1, 0, FALSE }, { "\xf4\x20", -1, 0, FALSE }, { "\xf5\x20", -1, 0, FALSE }, { "\xf6\x20", -1, 0, FALSE }, { "\xf7\x20", -1, 0, FALSE }, { "\xf8\x20", -1, 0, FALSE }, { "\xf9\x20", -1, 0, FALSE }, { "\xfa\x20", -1, 0, FALSE }, { "\xfb\x20", -1, 0, FALSE }, { "\xfc\x20", -1, 0, FALSE }, { "\xfd\x20", -1, 0, FALSE }, /* missing continuation bytes */ { "\x20\xc0", -1, 1, FALSE }, { "\x20\xe0\x80", -1, 1, FALSE }, { "\x20\xf0\x80\x80", -1, 1, FALSE }, { "\x20\xf8\x80\x80\x80", -1, 1, FALSE }, { "\x20\xfc\x80\x80\x80\x80", -1, 1, FALSE }, { "\x20\xdf", -1, 1, FALSE }, { "\x20\xef\xbf", -1, 1, FALSE }, { "\x20\xf7\xbf\xbf", -1, 1, FALSE }, { "\x20\xfb\xbf\xbf\xbf", -1, 1, FALSE }, { "\x20\xfd\xbf\xbf\xbf\xbf", -1, 1, FALSE }, /* impossible bytes */ { "\x20\xfe\x20", -1, 1, FALSE }, { "\x20\xff\x20", -1, 1, FALSE }, /* overlong sequences */ { "\x20\xc0\xaf\x20", -1, 1, FALSE }, { "\x20\xe0\x80\xaf\x20", -1, 1, FALSE }, { "\x20\xf0\x80\x80\xaf\x20", -1, 1, FALSE }, { "\x20\xf8\x80\x80\x80\xaf\x20", -1, 1, FALSE }, { "\x20\xfc\x80\x80\x80\x80\xaf\x20", -1, 1, FALSE }, { "\x20\xc1\xbf\x20", -1, 1, FALSE }, { "\x20\xe0\x9f\xbf\x20", -1, 1, FALSE }, { "\x20\xf0\x8f\xbf\xbf\x20", -1, 1, FALSE }, { "\x20\xf8\x87\xbf\xbf\xbf\x20", -1, 1, FALSE }, { "\x20\xfc\x83\xbf\xbf\xbf\xbf\x20", -1, 1, FALSE }, { "\x20\xc0\x80\x20", -1, 1, FALSE }, { "\x20\xe0\x80\x80\x20", -1, 1, FALSE }, { "\x20\xf0\x80\x80\x80\x20", -1, 1, FALSE }, { "\x20\xf8\x80\x80\x80\x80\x20", -1, 1, FALSE }, { "\x20\xfc\x80\x80\x80\x80\x80\x20", -1, 1, FALSE }, /* illegal code positions */ { "\x20\xed\xa0\x80\x20", -1, 1, FALSE }, { "\x20\xed\xad\xbf\x20", -1, 1, FALSE }, { "\x20\xed\xae\x80\x20", -1, 1, FALSE }, { "\x20\xed\xaf\xbf\x20", -1, 1, FALSE }, { "\x20\xed\xb0\x80\x20", -1, 1, FALSE }, { "\x20\xed\xbe\x80\x20", -1, 1, FALSE }, { "\x20\xed\xbf\xbf\x20", -1, 1, FALSE }, { "\x20\xed\xa0\x80\xed\xb0\x80\x20", -1, 1, FALSE }, { "\x20\xed\xa0\x80\xed\xbf\xbf\x20", -1, 1, FALSE }, { "\x20\xed\xad\xbf\xed\xb0\x80\x20", -1, 1, FALSE }, { "\x20\xed\xad\xbf\xed\xbf\xbf\x20", -1, 1, FALSE }, { "\x20\xed\xae\x80\xed\xb0\x80\x20", -1, 1, FALSE }, { "\x20\xed\xae\x80\xed\xbf\xbf\x20", -1, 1, FALSE }, { "\x20\xed\xaf\xbf\xed\xb0\x80\x20", -1, 1, FALSE }, { "\x20\xed\xaf\xbf\xed\xbf\xbf\x20", -1, 1, FALSE }, { "\x20\xef\xbf\xbe\x20", -1, 1, FALSE }, { "\x20\xef\xbf\xbf\x20", -1, 1, FALSE }, { NULL, } }; static void do_test (gint index, const gchar *text, gint max_len, gint offset, gboolean valid) { const gchar *end; gboolean result; result = g_utf8_validate (text, max_len, &end); if (result != valid || end - text != offset) { GString *str; const gchar *p; str = g_string_new (0); for (p = text; *p; p++) g_string_append_printf (str, "\\x%02hhx", *p); cut_fail ("%d: g_utf8_validate (\"%s\", %d) failed, " "expected %s %d, got %s %d\n", index, str->str, max_len, valid ? "TRUE" : "FALSE", offset, result ? "TRUE" : "FALSE", (gint) (end - text)); g_string_free (str, FALSE); } } void test_utf8_validate (void) { gint i; for (i = 0; test[i].text; i++) do_test (i, test[i].text, test[i].max_len, test[i].offset, test[i].valid); } cutter-testing-framework-1.1.7/sample/glib/utf8-pointer.c0000644000175000017500000000770711205747023021574 0ustar koukou/* -*- c-file-style: "gnu" -*- */ /* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ #include "cutter.h" #include #include void test_length (void); void test_utf8 (void); void test_misc (void); gchar *longline = "asdasdas dsaf asfd as fdasdf asfd asdf as dfas dfasdf a" "asd fasdf asdf asdf asd fasfd as fdasfd asdf as fdççççççççças ffsd asfd as fdASASASAs As" "Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdfg sdfg sdfg sdf gsdfg sdfg sd" "asd fasdf asdf asdf asd fasfd as fdaèèèèèèè òòòòòòòòòòòòsfd asdf as fdas ffsd asfd as fdASASASAs D" "Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdfg sdfgùùùùùùùùùùùùùù sdfg sdf gsdfg sdfg sd" "asd fasdf asdf asdf asd fasfd as fdasfd asd@@@@@@@f as fdas ffsd asfd as fdASASASAs D " "Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdf€€€€€€€€€€€€€€€€€€g sdfg sdfg sdf gsdfg sdfg sd" "asd fasdf asdf asdf asd fasfd as fdasfd asdf as fdas ffsd asfd as fdASASASAs D" "Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdfg sdfg sdfg sdf gsdfg sdfg sd\n\nlalala\n"; void test_utf8 (void) { gint num_chars; gchar **p; gint i, j; cut_assert (g_utf8_validate (longline, -1, NULL)); num_chars = g_utf8_strlen (longline, -1); p = (gchar **) g_malloc (num_chars * sizeof (gchar *)); p[0] = longline; for (i = 1; i < num_chars; i++) p[i] = g_utf8_next_char (p[i-1]); for (i = 0; i < num_chars; i++) for (j = 0; j < num_chars; j++) { cut_assert_equal_pointer (p[j], g_utf8_offset_to_pointer (p[i], j - i)); cut_assert_equal_int (j - i, g_utf8_pointer_to_offset (p[i], p[j])); } g_free (p); } void test_length (void) { cut_assert_equal_int (4, g_utf8_strlen ("1234", -1)); cut_assert_equal_int (0, g_utf8_strlen ("1234", 0)); cut_assert_equal_int (1, g_utf8_strlen ("1234", 1)); cut_assert_equal_int (2, g_utf8_strlen ("1234", 2)); cut_assert_equal_int (3, g_utf8_strlen ("1234", 3)); cut_assert_equal_int (4, g_utf8_strlen ("1234", 4)); cut_assert_equal_int (4, g_utf8_strlen ("1234", 5)); cut_assert_equal_int (762, g_utf8_strlen (longline, -1)); cut_assert_equal_int (762, g_utf8_strlen (longline, strlen (longline))); cut_assert_equal_int (762, g_utf8_strlen (longline, 1024)); cut_assert_equal_int (0, g_utf8_strlen (NULL, 0)); cut_assert_equal_int (3, g_utf8_strlen ("a\340\250\201c", -1)); cut_assert_equal_int (1, g_utf8_strlen ("a\340\250\201c", 1)); cut_assert_equal_int (1, g_utf8_strlen ("a\340\250\201c", 2)); cut_assert_equal_int (1, g_utf8_strlen ("a\340\250\201c", 3)); cut_assert_equal_int (2, g_utf8_strlen ("a\340\250\201c", 4)); cut_assert_equal_int (3, g_utf8_strlen ("a\340\250\201c", 5)); } void test_misc (void) { char *s; s = g_utf8_strreverse ("1234", -1); cut_assert_equal_string ("4321", s); g_free (s); s = g_utf8_strreverse ("1234", 3); cut_assert_equal_string ("321", s); g_free (s); } cutter-testing-framework-1.1.7/sample/glib/iochannel.c0000644000175000017500000000613211273303572021161 0ustar koukou/* -*- c-file-style: "gnu" -*- */ #include #include #include #include #include #include #include #include #define BUFFER_SIZE 1024 void test_iochannel (void); void setup (void) { } void teardown (void) { } static void test_small_writes (void) { GIOChannel *io; GIOStatus status = G_IO_STATUS_NORMAL; guint cnt; gchar tmp; GError *error = NULL; io = g_io_channel_new_file ("iochannel-test-outfile", "w", &error); gcut_assert_error (error); g_io_channel_set_encoding (io, NULL, NULL); g_io_channel_set_buffer_size (io, 1022); cnt = 2 * g_io_channel_get_buffer_size (io); tmp = 0; while (cnt) { status = g_io_channel_write_chars (io, &tmp, 1, NULL, NULL); if (status == G_IO_STATUS_ERROR) break; if (status == G_IO_STATUS_NORMAL) cnt--; } cut_assert_equal_int (G_IO_STATUS_NORMAL, status); g_io_channel_unref (io); } void test_iochannel (void) { GIOChannel *gio_r, *gio_w ; GString *buffer; char *filename; char *srcdir = getenv ("srcdir"); gint rlength = 0; glong wlength = 0; gsize length_out; const gchar encoding[] = "EUC-JP"; GIOStatus status; GIOFlags flags; GError *error = NULL; if (!srcdir) srcdir = "."; filename = g_build_filename (srcdir, "iochannel-test-infile", NULL); gio_r = g_io_channel_new_file (filename, "r", &error); gcut_assert_error (error); gio_w = g_io_channel_new_file ("iochannel-test-outfile", "w", &error); gcut_assert_error (error); g_io_channel_set_encoding (gio_r, encoding, &error); gcut_assert_error (error); g_io_channel_set_buffer_size (gio_r, BUFFER_SIZE); status = g_io_channel_set_flags (gio_r, G_IO_FLAG_NONBLOCK, &error); gcut_assert_error (error); flags = g_io_channel_get_flags (gio_r); buffer = g_string_sized_new (BUFFER_SIZE); while (TRUE) { do { status = g_io_channel_read_line_string (gio_r, buffer, NULL, &error); gcut_assert_error (error); } while (status == G_IO_STATUS_AGAIN); if (status != G_IO_STATUS_NORMAL) break; rlength += buffer->len; do { status = g_io_channel_write_chars (gio_w, buffer->str, buffer->len, &length_out, &error); gcut_assert_error (error); } while (status == G_IO_STATUS_AGAIN); if (status != G_IO_STATUS_NORMAL) break; wlength += length_out; if (length_out < buffer->len) g_warning ("Only wrote part of the line."); g_string_truncate (buffer, 0); } switch (status) { case G_IO_STATUS_EOF: break; case G_IO_STATUS_ERROR: gcut_assert_error(error); break; default: g_warning ("Abnormal exit from write loop."); break; } do { status = g_io_channel_flush (gio_w, &error); gcut_assert_error (error); } while (status == G_IO_STATUS_AGAIN); cut_assert_equal_int (G_IO_STATUS_NORMAL, status); g_io_channel_unref(gio_r); g_io_channel_unref(gio_w); test_small_writes (); } cutter-testing-framework-1.1.7/sample/glib/iochannel-test-infile0000644000175000017500000000007611205747023023160 0ustar koukouLine one Line two Line three /* Hello */ \x1234\x567890\x6666 cutter-testing-framework-1.1.7/sample/glib/thread.c0000644000175000017500000002742611205747023020477 0ustar koukou#include #include #if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE) void test_g_mutex (void); void test_g_static_rec_mutex (void); void test_g_static_private (void); void test_g_static_rw_lock (void); void test_g_thread_once (void); void setup (void) { g_thread_use_default_impl = FALSE; } typedef struct _TestData { gint number; guint unsigned_number; CutTestContext *test_context; } TestData; /* GMutex */ static GMutex* test_g_mutex_mutex = NULL; static guint test_g_mutex_int = 0; static gboolean test_g_mutex_thread_ready; G_LOCK_DEFINE_STATIC (test_g_mutex); static gpointer test_g_mutex_thread (gpointer user_data) { TestData *data = user_data; cut_set_current_test_context (data->test_context); cut_assert_equal_int (42, data->number); cut_assert_false (g_mutex_trylock (test_g_mutex_mutex)); cut_assert_false (G_TRYLOCK (test_g_mutex)); test_g_mutex_thread_ready = TRUE; g_mutex_lock (test_g_mutex_mutex); cut_assert_equal_int (42, test_g_mutex_int); g_mutex_unlock (test_g_mutex_mutex); return GINT_TO_POINTER (41); } void test_g_mutex (void) { GThread *thread; TestData test_data; test_g_mutex_mutex = g_mutex_new (); cut_assert_true (g_mutex_trylock (test_g_mutex_mutex)); cut_assert_true (G_TRYLOCK (test_g_mutex)); test_g_mutex_thread_ready = FALSE; test_data.number = 42; test_data.test_context = cut_get_current_test_context (); thread = g_thread_create (test_g_mutex_thread, &test_data, TRUE, NULL); /* This busy wait is only for testing purposes and not an example of * good code!*/ while (!test_g_mutex_thread_ready) g_usleep (G_USEC_PER_SEC / 5); test_g_mutex_int = 42; G_UNLOCK (test_g_mutex); g_mutex_unlock (test_g_mutex_mutex); cut_assert_equal_int (41, GPOINTER_TO_INT (g_thread_join (thread))); g_mutex_free (test_g_mutex_mutex); } /* GStaticRecMutex */ static GStaticRecMutex test_g_static_rec_mutex_mutex = G_STATIC_REC_MUTEX_INIT; static guint test_g_static_rec_mutex_int = 0; static gboolean test_g_static_rec_mutex_thread_ready; static gpointer test_g_static_rec_mutex_thread (gpointer user_data) { TestData *data = user_data; cut_set_current_test_context (data->test_context); cut_assert_equal_int (42, data->number); cut_assert_false (g_static_rec_mutex_trylock (&test_g_static_rec_mutex_mutex)); test_g_static_rec_mutex_thread_ready = TRUE; g_static_rec_mutex_lock (&test_g_static_rec_mutex_mutex); g_static_rec_mutex_lock (&test_g_static_rec_mutex_mutex); cut_assert_equal_int (42, test_g_static_rec_mutex_int); test_g_static_rec_mutex_thread_ready = FALSE; g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex); g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex); g_thread_exit (GINT_TO_POINTER (43)); cut_fail("Never reached here"); return NULL; } void test_g_static_rec_mutex (void) { GThread *thread; TestData test_data; cut_assert_true (g_static_rec_mutex_trylock (&test_g_static_rec_mutex_mutex)); test_g_static_rec_mutex_thread_ready = FALSE; test_data.number = 42; test_data.test_context = cut_get_current_test_context (); thread = g_thread_create (test_g_static_rec_mutex_thread, &test_data, TRUE, NULL); /* This busy wait is only for testing purposes and not an example of * good code!*/ while (!test_g_static_rec_mutex_thread_ready) g_usleep (G_USEC_PER_SEC / 5); cut_assert_true (g_static_rec_mutex_trylock (&test_g_static_rec_mutex_mutex)); test_g_static_rec_mutex_int = 41; g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex); test_g_static_rec_mutex_int = 42; g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex); /* This busy wait is only for testing purposes and not an example of * good code!*/ while (test_g_static_rec_mutex_thread_ready) g_usleep (G_USEC_PER_SEC / 5); g_static_rec_mutex_lock (&test_g_static_rec_mutex_mutex); test_g_static_rec_mutex_int = 0; g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex); cut_assert_equal_int (43, GPOINTER_TO_INT (g_thread_join (thread))); } /* GStaticPrivate */ #define THREADS 10 static GStaticPrivate test_g_static_private_private1 = G_STATIC_PRIVATE_INIT; static GStaticPrivate test_g_static_private_private2 = G_STATIC_PRIVATE_INIT; static GStaticMutex test_g_static_private_mutex = G_STATIC_MUTEX_INIT; static guint test_g_static_private_counter = 0; static guint test_g_static_private_ready = 0; static gpointer test_g_static_private_constructor (void) { g_static_mutex_lock (&test_g_static_private_mutex); test_g_static_private_counter++; g_static_mutex_unlock (&test_g_static_private_mutex); return g_new (guint,1); } static void test_g_static_private_destructor (gpointer data) { g_static_mutex_lock (&test_g_static_private_mutex); test_g_static_private_counter--; g_static_mutex_unlock (&test_g_static_private_mutex); g_free (data); } static gpointer test_g_static_private_thread (gpointer user_data) { TestData *data = user_data; guint number; guint i; guint *private1, *private2; cut_set_current_test_context (data->test_context); number = data->unsigned_number; for (i = 0; i < 10; i++) { number = number * 11 + 1; /* A very simple and bad RNG ;-) */ private1 = g_static_private_get (&test_g_static_private_private1); if (!private1 || number % 7 > 3) { private1 = test_g_static_private_constructor (); g_static_private_set (&test_g_static_private_private1, private1, test_g_static_private_destructor); } *private1 = number; private2 = g_static_private_get (&test_g_static_private_private2); if (!private2 || number % 13 > 5) { private2 = test_g_static_private_constructor (); g_static_private_set (&test_g_static_private_private2, private2, test_g_static_private_destructor); } *private2 = number * 2; g_usleep (G_USEC_PER_SEC / 5); cut_assert_equal_int (number, *private1); cut_assert_equal_int (number * 2, *private2); } g_static_mutex_lock (&test_g_static_private_mutex); test_g_static_private_ready++; g_static_mutex_unlock (&test_g_static_private_mutex); /* Busy wait is not nice but that's just a test */ while (test_g_static_private_ready != 0) g_usleep (G_USEC_PER_SEC / 5); for (i = 0; i < 10; i++) { private2 = g_static_private_get (&test_g_static_private_private2); number = number * 11 + 1; /* A very simple and bad RNG ;-) */ if (!private2 || number % 13 > 5) { private2 = test_g_static_private_constructor (); g_static_private_set (&test_g_static_private_private2, private2, test_g_static_private_destructor); } *private2 = number * 2; g_usleep (G_USEC_PER_SEC / 5); cut_assert_equal_int (number * 2, *private2); } return GINT_TO_POINTER (data->unsigned_number * 3); } void test_g_static_private (void) { GThread *threads[THREADS]; TestData data[THREADS]; guint i; test_g_static_private_ready = 0; for (i = 0; i < THREADS; i++) { data[i].unsigned_number = i; data[i].test_context = cut_get_current_test_context (); threads[i] = g_thread_create (test_g_static_private_thread, &(data[i]), TRUE, NULL); } /* Busy wait is not nice but that's just a test */ while (test_g_static_private_ready != THREADS) g_usleep (G_USEC_PER_SEC / 5); /* Reuse the static private */ g_static_private_free (&test_g_static_private_private2); g_static_private_init (&test_g_static_private_private2); test_g_static_private_ready = 0; for (i = 0; i < THREADS; i++) cut_assert_equal_int (i * 3, GPOINTER_TO_INT (g_thread_join (threads[i]))); cut_assert_equal_int (0, test_g_static_private_counter); } /* GStaticRWLock */ /* -1 = writing; >0 = # of readers */ static gint test_g_static_rw_lock_state = 0; G_LOCK_DEFINE (test_g_static_rw_lock_state); static gboolean test_g_static_rw_lock_run = TRUE; static GStaticRWLock test_g_static_rw_lock_lock = G_STATIC_RW_LOCK_INIT; static gpointer test_g_static_rw_lock_thread (gpointer data) { cut_set_current_test_context (data); while (test_g_static_rw_lock_run) { if (g_random_double() > .2) /* I'm a reader */ { if (g_random_double() > .2) /* I'll block */ g_static_rw_lock_reader_lock (&test_g_static_rw_lock_lock); else /* I'll only try */ if (!g_static_rw_lock_reader_trylock (&test_g_static_rw_lock_lock)) continue; G_LOCK (test_g_static_rw_lock_state); cut_assert_operator_int (test_g_static_rw_lock_state, >=, 0); test_g_static_rw_lock_state++; G_UNLOCK (test_g_static_rw_lock_state); g_usleep (g_random_int_range (20,1000)); G_LOCK (test_g_static_rw_lock_state); test_g_static_rw_lock_state--; G_UNLOCK (test_g_static_rw_lock_state); g_static_rw_lock_reader_unlock (&test_g_static_rw_lock_lock); } else /* I'm a writer */ { if (g_random_double() > .2) /* I'll block */ g_static_rw_lock_writer_lock (&test_g_static_rw_lock_lock); else /* I'll only try */ if (!g_static_rw_lock_writer_trylock (&test_g_static_rw_lock_lock)) continue; G_LOCK (test_g_static_rw_lock_state); cut_assert_equal_int (0, test_g_static_rw_lock_state); test_g_static_rw_lock_state = -1; G_UNLOCK (test_g_static_rw_lock_state); g_usleep (g_random_int_range (20,1000)); G_LOCK (test_g_static_rw_lock_state); test_g_static_rw_lock_state = 0; G_UNLOCK (test_g_static_rw_lock_state); g_static_rw_lock_writer_unlock (&test_g_static_rw_lock_lock); } } return NULL; } void test_g_static_rw_lock (void) { GThread *threads[THREADS]; guint i; for (i = 0; i < THREADS; i++) { threads[i] = g_thread_create (test_g_static_rw_lock_thread, cut_get_current_test_context (), TRUE, NULL); } g_usleep (G_USEC_PER_SEC * 5); test_g_static_rw_lock_run = FALSE; for (i = 0; i < THREADS; i++) { g_thread_join (threads[i]); } cut_assert_equal_int (0, test_g_static_rw_lock_state); } #define G_ONCE_SIZE 100 #define G_ONCE_THREADS 10 G_LOCK_DEFINE (test_g_once); static guint test_g_once_guint_array[G_ONCE_SIZE]; static GOnce test_g_once_array[G_ONCE_SIZE]; static gpointer test_g_once_init_func(gpointer arg) { guint *count = arg; g_usleep (g_random_int_range (20,1000)); (*count)++; g_usleep (g_random_int_range (20,1000)); return arg; } static gpointer test_g_once_thread (gpointer user_data) { TestData *data = user_data; guint i; cut_set_current_test_context (data->test_context); G_LOCK (test_g_once); /* Don't start before all threads are created */ G_UNLOCK (test_g_once); for (i = 0; i < 1000; i++) { guint pos = g_random_int_range (0, G_ONCE_SIZE); gpointer ret = g_once (test_g_once_array + pos, test_g_once_init_func, test_g_once_guint_array + pos); cut_assert_equal_pointer (ret, test_g_once_guint_array + pos); } /* Make sure, that all counters are touched at least once */ for (i = 0; i < G_ONCE_SIZE; i++) { gpointer ret = g_once (test_g_once_array + i, test_g_once_init_func, test_g_once_guint_array + i); cut_assert_equal_pointer (ret, test_g_once_guint_array + i); } return NULL; } void test_g_thread_once (void) { static GOnce once_init = G_ONCE_INIT; GThread *threads[G_ONCE_THREADS]; TestData data[G_ONCE_THREADS]; guint i; for (i = 0; i < G_ONCE_SIZE; i++) { test_g_once_array[i] = once_init; test_g_once_guint_array[i] = i; } G_LOCK (test_g_once); for (i = 0; i < G_ONCE_THREADS; i++) { data[i].unsigned_number = i % 2; data[i].test_context = cut_get_current_test_context (); threads[i] = g_thread_create (test_g_once_thread, &(data[i]), TRUE, NULL); } G_UNLOCK (test_g_once); for (i = 0; i < G_ONCE_THREADS; i++) { g_thread_join (threads[i]); } for (i = 0; i < G_ONCE_SIZE; i++) { cut_assert_equal_int (i + 1, test_g_once_guint_array[i]); } } #endif cutter-testing-framework-1.1.7/sample/glib/uri.c0000644000175000017500000002661011205747023020021 0ustar koukou/* -*- c-file-style: "gnu" -*- */ /* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ #include "cutter.h" #include void test_g_filename_to_uri (void); void test_g_filename_to_uri_error (void); void test_g_filename_from_uri (void); void test_g_filename_from_uri_error (void); void test_g_filename_from_uri_nohostname (void); void test_roundtrip (void); void test_uri_list (void); typedef struct { char *filename; char *hostname; char *expected_result; } ToUriTest; ToUriTest to_uri_tests[] = { { "/etc", NULL, "file:///etc"}, { "/etc", "", "file:///etc"}, { "/etc", "otherhost", "file://otherhost/etc"}, #ifdef G_OS_WIN32 { "/etc", "localhost", "file:///etc"}, { "c:\\windows", NULL, "file:///c:/windows"}, { "c:\\windows", "localhost", "file:///c:/windows"}, { "c:\\windows", "otherhost", "file://otherhost/c:/windows"}, { "\\\\server\\share\\dir", NULL, "file:////server/share/dir"}, { "\\\\server\\share\\dir", "localhost", "file:////server/share/dir"}, #else { "/etc", "localhost", "file://localhost/etc"}, #endif #ifndef G_PLATFORM_WIN32 { "/etc/\xE5\xE4\xF6", NULL, "file:///etc/%E5%E4%F6" }, { "/etc/\xC3\xB6\xC3\xA4\xC3\xA5", NULL, "file:///etc/%C3%B6%C3%A4%C3%A5"}, #endif { "/etc/file with #%", NULL, "file:///etc/file%20with%20%23%25"}, { "/0123456789", NULL, "file:///0123456789"}, { "/ABCDEFGHIJKLMNOPQRSTUVWXYZ", NULL, "file:///ABCDEFGHIJKLMNOPQRSTUVWXYZ"}, { "/abcdefghijklmnopqrstuvwxyz", NULL, "file:///abcdefghijklmnopqrstuvwxyz"}, { "/-_.!~*'()", NULL, "file:///-_.!~*'()"}, #ifdef G_OS_WIN32 /* As '\\' is a path separator on Win32, it gets turned into '/' in the URI */ { "/\"#%<>[\\]^`{|}\x7F", NULL, "file:///%22%23%25%3C%3E%5B/%5D%5E%60%7B%7C%7D%7F"}, #else /* On Unix, '\\' is a normal character in the file name */ { "/\"#%<>[\\]^`{|}\x7F", NULL, "file:///%22%23%25%3C%3E%5B%5C%5D%5E%60%7B%7C%7D%7F"}, #endif { "/;@+$,", NULL, "file:///%3B@+$,"}, /* This and some of the following are of course as such illegal file names on Windows, * and would not occur in real life. */ { "/:", NULL, "file:///:"}, { "/?&=", NULL, "file:///%3F&="}, { "/", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "file://ABCDEFGHIJKLMNOPQRSTUVWXYZ/"}, { "/", "abcdefghijklmnopqrstuvwxyz", "file://abcdefghijklmnopqrstuvwxyz/"}, }; typedef struct { char *filename; char *hostname; GConvertError expected_error; /* If failed */ } ToUriErrorTest; ToUriErrorTest to_uri_error_tests[] = { #ifndef G_OS_WIN32 { "c:\\windows", NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, /* it's important to get this error on Unix */ { "c:\\windows", "localhost", G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, { "c:\\windows", "otherhost", G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, #endif { "etc", "localhost", G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, { "/etc", "\xC3\xB6\xC3\xA4\xC3\xA5", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "/etc", "\xE5\xE4\xF6", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "", NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, { "", "", G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, { "", "localhost", G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, { "", "otherhost", G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, /* This and some of the following are of course as such illegal file names on Windows, * and would not occur in real life. */ { "/", "0123456789-", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "/", "_.!~*'()", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "/", "\"#%<>[\\]^`{|}\x7F", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "/", ";?&=+$,", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "/", "/", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "/", "@:", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "/", "\x80\xFF", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, { "/", "\xC3\x80\xC3\xBF", G_CONVERT_ERROR_ILLEGAL_SEQUENCE}, }; typedef struct { char *uri; char *expected_filename; char *expected_hostname; } FromUriTest; FromUriTest from_uri_tests[] = { { "file://localhost/etc", "/etc", "localhost"}, { "file://localhost/etc/%23%25%20file", "/etc/#% file", "localhost"}, { "file://localhost/\xE5\xE4\xF6", "/\xe5\xe4\xf6", "localhost"}, { "file://localhost/%E5%E4%F6", "/\xe5\xe4\xf6", "localhost"}, { "file://otherhost/etc", "/etc", "otherhost"}, { "file://otherhost/etc/%23%25%20file", "/etc/#% file", "otherhost"}, #ifdef G_OS_WIN32 /* Accept also the old Netscape drive-letter-and-vertical bar convention */ { "file://otherhost//server/share/foo", "\\\\server\\share\\foo", "otherhost"}, #endif { "file://ABCDEFGHIJKLMNOPQRSTUVWXYZ/", "/", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"}, { "file://abcdefghijklmnopqrstuvwxyz/", "/", "abcdefghijklmnopqrstuvwxyz"}, }; typedef struct { char *uri; char *expected_filename; } FromUriNoHostnameTest; FromUriNoHostnameTest from_uri_nohostname_tests[] = { { "file:///etc", "/etc"}, { "file:/etc", "/etc"}, #ifdef G_OS_WIN32 /* On Win32 we don't return "localhost" hostames, just in case * it isn't recognized anyway. */ { "file://localhost/etc", "/etc"}, { "file://localhost/etc/%23%25%20file", "/etc/#% file"}, { "file://localhost/\xE5\xE4\xF6", "/\xe5\xe4\xf6"}, { "file://localhost/%E5%E4%F6", "/\xe5\xe4\xf6"}, #endif { "file:////etc/%C3%B6%C3%C3%C3%A5", "//etc/\xc3\xb6\xc3\xc3\xc3\xa5"}, { "file:////etc", "//etc"}, { "file://///etc", "///etc"}, #ifdef G_OS_WIN32 /* URIs with backslashes come from some nonstandard application, but accept them anyhow */ { "file:///c:\\foo", "c:\\foo"}, { "file:///c:/foo\\bar", "c:\\foo\\bar"}, /* Accept also the old Netscape drive-letter-and-vertical bar convention */ { "file:///c|/foo", "c:\\foo"}, { "file:////server/share/dir", "\\\\server\\share\\dir"}, { "file://localhost//server/share/foo", "\\\\server\\share\\foo"}, #else { "file:///c:\\foo", "/c:\\foo"}, { "file:///c:/foo", "/c:/foo"}, { "file:////c:/foo", "//c:/foo"}, #endif }; typedef struct { char *uri; GConvertError expected_error; /* If failed */ } FromUriErrorTest; FromUriErrorTest from_uri_error_tests[] = { { "file://%C3%B6%C3%A4%C3%A5/etc", G_CONVERT_ERROR_BAD_URI}, { "file://\xE5\xE4\xF6/etc", G_CONVERT_ERROR_BAD_URI}, { "file://%E5%E4%F6/etc", G_CONVERT_ERROR_BAD_URI}, { "file:///some/file#bad", G_CONVERT_ERROR_BAD_URI}, { "file://some", G_CONVERT_ERROR_BAD_URI}, { "", G_CONVERT_ERROR_BAD_URI}, { "file:test", G_CONVERT_ERROR_BAD_URI}, { "http://www.yahoo.com/", G_CONVERT_ERROR_BAD_URI}, { "file://0123456789/", G_CONVERT_ERROR_BAD_URI}, { "file://-_.!~*'()/", G_CONVERT_ERROR_BAD_URI}, { "file://\"<>[\\]^`{|}\x7F/", G_CONVERT_ERROR_BAD_URI}, { "file://;?&=+$,/", G_CONVERT_ERROR_BAD_URI}, { "file://%C3%80%C3%BF/", G_CONVERT_ERROR_BAD_URI}, { "file://@/", G_CONVERT_ERROR_BAD_URI}, { "file://:/", G_CONVERT_ERROR_BAD_URI}, { "file://#/", G_CONVERT_ERROR_BAD_URI}, { "file://%23/", G_CONVERT_ERROR_BAD_URI}, { "file://%2F/", G_CONVERT_ERROR_BAD_URI}, }; void test_g_filename_to_uri (void) { int i; gchar *res; for (i = 0; i < G_N_ELEMENTS (to_uri_tests); i++) { res = g_filename_to_uri (to_uri_tests[i].filename, to_uri_tests[i].hostname, NULL); cut_assert_equal_string (to_uri_tests[i].expected_result, res); g_free (res); } } void test_g_filename_to_uri_error (void) { int i; gchar *res; GError *error; for (i = 0; i < G_N_ELEMENTS (to_uri_error_tests); i++) { error = NULL; res = g_filename_to_uri (to_uri_error_tests[i].filename, to_uri_error_tests[i].hostname, &error); cut_assert (!res); cut_assert (error); cut_assert (error->domain == G_CONVERT_ERROR); cut_assert_equal_int (to_uri_error_tests[i].expected_error, error->code); g_error_free (error); } } void test_g_filename_from_uri (void) { int i; gchar *res; gchar *hostname; for (i = 0; i < G_N_ELEMENTS (from_uri_tests); i++) { res = g_filename_from_uri (from_uri_tests[i].uri, &hostname, NULL); cut_assert_equal_string (from_uri_tests[i].expected_filename, res); cut_assert_equal_string (from_uri_tests[i].expected_hostname, hostname); g_free (hostname); g_free (res); } } void test_g_filename_from_uri_nohostname (void) { int i; gchar *res; gchar *hostname; for (i = 0; i < G_N_ELEMENTS (from_uri_nohostname_tests); i++) { res = g_filename_from_uri (from_uri_nohostname_tests[i].uri, &hostname, NULL); cut_assert_equal_string (from_uri_nohostname_tests[i].expected_filename, res); cut_assert_null (hostname); g_free (res); } } void test_g_filename_from_uri_error (void) { int i; gchar *res; gchar *hostname; GError *error; for (i = 0; i < G_N_ELEMENTS (from_uri_error_tests); i++) { error = NULL; res = g_filename_from_uri (from_uri_error_tests[i].uri, &hostname, &error); cut_assert (!res); cut_assert (error); cut_assert (error->domain == G_CONVERT_ERROR); cut_assert_equal_int (from_uri_error_tests[i].expected_error, error->code); g_error_free (error); g_free (res); g_free (hostname); } } void test_roundtrip (void) { int i; gchar *uri, *hostname, *res; GError *error; for (i = 0; i < G_N_ELEMENTS (to_uri_tests); i++) { error = NULL; uri = g_filename_to_uri (to_uri_tests[i].filename, to_uri_tests[i].hostname, &error); cut_assert (!error); error = NULL; res = g_filename_from_uri (uri, &hostname, &error); cut_assert (!error); cut_assert_equal_string (to_uri_tests[i].filename, res); if (!to_uri_tests[i].hostname) to_uri_tests[i].hostname = ""; if (!hostname) hostname = ""; cut_assert_equal_string (to_uri_tests[i].hostname, hostname); } } void test_uri_list (void) { /* straight from the RFC */ gchar *list = "# urn:isbn:0-201-08372-8\r\n" "http://www.huh.org/books/foo.html\r\n" "http://www.huh.org/books/foo.pdf \r\n" " ftp://ftp.foo.org/books/foo.txt\r\n"; gchar *expected_uris[] = { "http://www.huh.org/books/foo.html", "http://www.huh.org/books/foo.pdf", "ftp://ftp.foo.org/books/foo.txt" }; gchar **uris; gint j; uris = g_uri_list_extract_uris (list); cut_assert_equal_int (3, g_strv_length (uris)); for (j = 0; j < 3; j++) { cut_assert_equal_string (expected_uris[j], uris[j]); } g_strfreev (uris); uris = g_uri_list_extract_uris ("# just hot air\r\n# more hot air"); cut_assert_equal_int (0, g_strv_length (uris)); } cutter-testing-framework-1.1.7/sample/glib/run-test.sh0000755000175000017500000000164111424022511021162 0ustar koukou#!/bin/sh export BASE_DIR="`dirname $0`" if test x"$RUNNING_TEST" = x"yes"; then exit 0 fi if test x"$NO_MAKE" != x"yes"; then RUNNING_TEST=yes export RUNNING_TEST make -C $BASE_DIR/../../ check > /dev/null || exit 1 fi export CUT_UI_MODULE_DIR=$BASE_DIR/../../module/ui/.libs export CUT_UI_FACTORY_MODULE_DIR=$BASE_DIR/../../module/ui/.libs export CUT_REPORT_MODULE_DIR=$BASE_DIR/../../module/report/.libs export CUT_REPORT_FACTORY_MODULE_DIR=$BASE_DIR/../../module/report/.libs export CUT_STREAM_MODULE_DIR=$BASE_DIR/../../module/stream/.libs export CUT_STREAM_FACTORY_MODULE_DIR=$BASE_DIR/../../module/stream/.libs CUTTER=$BASE_DIR/../../cutter/cutter if test x"$CUTTER_DEBUG" = x"yes"; then CUTTER="$BASE_DIR/../../libtool --mode=execute gdb --args $CUTTER" fi CUTTER_ARGS="-s $BASE_DIR" if test x"$USE_GTK" = x"yes"; then CUTTER_ARGS="-u gtk $CUTTER_ARGS" fi $CUTTER $CUTTER_ARGS "$@" $BASE_DIR cutter-testing-framework-1.1.7/sample/glib/keyfile.c0000644000175000017500000010542611273304006020650 0ustar koukou/* -*- c-file-style: "gnu" -*- */ #include #include #include #include #include void test_line_ends (void); void test_whitespace (void); void test_comments (void); void test_listing (void); void test_string (void); void test_boolean (void); void test_number (void); void test_locale_string (void); void test_lists (void); void test_group_remove (void); void test_key_remove (void); void test_groups (void); void test_group_names (void); void test_key_names (void); void test_duplicate_keys (void); void test_duplicate_groups (void); void test_duplicate_groups2 (void); void test_reload_idempotency (void); static GKeyFile *keyfile; static GLogFunc default_log_func; static const gchar *original_language; static char *original_locale; static void log_func (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { } void setup (void) { keyfile = NULL; keyfile = g_key_file_new (); original_language = g_getenv ("LANGUAGE"); original_locale = NULL; default_log_func = g_log_set_default_handler (log_func, NULL); } void teardown (void) { if (original_language) g_setenv ("LANGUAGE", original_language, TRUE); else g_unsetenv ("LANGUAGE"); if (original_locale) { setlocale (LC_ALL, original_locale); g_free(original_locale); } if (keyfile) g_key_file_free (keyfile); g_log_set_default_handler (default_log_func, NULL); } static void check_error (GError **error, GQuark domain, gint code) { cut_assert (*error); cut_assert_equal_int (domain, (*error)->domain, cut_message ("Wrong error domain: got %s, expected %s", g_quark_to_string ((*error)->domain), g_quark_to_string (domain))); cut_assert_equal_int (code, (*error)->code); g_error_free (*error); *error = NULL; } #define check_no_error(error) \ gcut_assert_error(error) static void check_string_value (GKeyFile *keyfile, const gchar *group, const gchar *key, const gchar *expected) { GError *error = NULL; gchar *value; value = g_key_file_get_string (keyfile, group, key, &error); check_no_error (error); cut_assert (value); cut_assert_equal_string (expected, value, cut_message ("Group %s key %s: " "expected string value '%s', " "actual value '%s'", group, key, expected, value)); g_free (value); } static void check_locale_string_value (GKeyFile *keyfile, const gchar *group, const gchar *key, const gchar *locale, const gchar *expected) { GError *error = NULL; gchar *value; value = g_key_file_get_locale_string (keyfile, group, key, locale, &error); check_no_error (error); cut_assert (value); cut_assert_equal_string (expected, value, cut_message ("Group %s key %s locale %s: " "expected string value '%s', " "actual value '%s'", group, key, locale, expected, value)); g_free (value); } static void check_string_list_value (GKeyFile *keyfile, const gchar *group, const gchar *key, ...) { gint i; gchar *v, **value; va_list args; gsize len; GError *error = NULL; value = g_key_file_get_string_list (keyfile, group, key, &len, &error); check_no_error (error); cut_assert (value); va_start (args, key); i = 0; v = va_arg (args, gchar*); while (v) { cut_assert (value[i], cut_message ("Group %s key %s: list too short (%d)", group, key, i)); cut_assert_equal_string (value[i], v, cut_message ("Group %s key %s: mismatch at %d, " "expected %s, got %s", group, key, i, v, value[i])); i++; v = va_arg (args, gchar*); } va_end (args); g_strfreev (value); } static void check_integer_list_value (GKeyFile *keyfile, const gchar *group, const gchar *key, ...) { gint i; gint v, *value; va_list args; gsize len; GError *error = NULL; value = g_key_file_get_integer_list (keyfile, group, key, &len, &error); check_no_error (error); cut_assert (value); va_start (args, key); i = 0; v = va_arg (args, gint); while (v != -100) { cut_assert (i != len, cut_message ("Group %s key %s: list too short (%d)", group, key, i)); cut_assert_equal_int (v, value[i], cut_message ("Group %s key %s: mismatch at %d, " "expected %d, got %d", group, key, i, v, value[i])); i++; v = va_arg (args, gint); } va_end (args); g_free (value); } static void check_double_list_value (GKeyFile *keyfile, const gchar *group, const gchar *key, ...) { gint i; gdouble v, *value; va_list args; gsize len; GError *error = NULL; value = g_key_file_get_double_list (keyfile, group, key, &len, &error); check_no_error (error); cut_assert (value); va_start (args, key); i = 0; v = va_arg (args, gdouble); while (v != -100) { cut_assert (i != len, cut_message ("Group %s key %s: list too short (%d)", group, key, i)); cut_assert_equal_int (v, value[i], cut_message ("Group %s key %s: mismatch at %d, " "expected %e, got %e", group, key, i, v, value[i])); i++; v = va_arg (args, gdouble); } va_end (args); g_free (value); } static void check_boolean_list_value (GKeyFile *keyfile, const gchar *group, const gchar *key, ...) { gint i; gboolean v, *value; va_list args; gsize len; GError *error = NULL; value = g_key_file_get_boolean_list (keyfile, group, key, &len, &error); check_no_error (error); cut_assert (value); va_start (args, key); i = 0; v = va_arg (args, gboolean); while (v != -100) { cut_assert (i != len, cut_message ("Group %s key %s: list too short (%d)", group, key, i)); cut_assert_equal_int (v, value[i], cut_message ("Group %s key %s: mismatch at %d, " "expected %d, got %d", group, key, i, v, value[i])); i++; v = va_arg (args, gboolean); } va_end (args); g_free (value); } static void check_boolean_value (GKeyFile *keyfile, const gchar *group, const gchar *key, gboolean expected) { GError *error = NULL; gboolean value; value = g_key_file_get_boolean (keyfile, group, key, &error); check_no_error (error); cut_assert_equal_int (expected, value, cut_message ("Group %s key %s: " "expected boolean value '%s', " "actual value '%s'", group, key, expected ? "true" : "false", value ? "true" : "false")); } static void check_integer_value (GKeyFile *keyfile, const gchar *group, const gchar *key, gint expected) { GError *error = NULL; gint value; value = g_key_file_get_integer (keyfile, group, key, &error); check_no_error (error); cut_assert_equal_int (expected, value, cut_message ("Group %s key %s: " "expected integer value %d, " "actual value %d", group, key, expected, value)); } static void check_double_value (GKeyFile *keyfile, const gchar *group, const gchar *key, gdouble expected) { GError *error = NULL; gdouble value; value = g_key_file_get_double (keyfile, group, key, &error); check_no_error (error); cut_assert_equal_double (expected, 0.0, value, cut_message ("Group %s key %s: " "expected integer value %e, " "actual value %e", group, key, expected, value)); } static void check_name (const gchar *what, const gchar *value, const gchar *expected, gint position) { cut_assert (value); cut_assert_equal_string (expected, value, cut_message ("Wrong %s returned: " "got '%s' at %d, expected '%s'", what, value, position, expected)); } static void check_length (const gchar *what, gint n_items, gint length, gint expected) { cut_assert (n_items == length && length == expected, cut_message ("Wrong number of %s returned: got %d items, " "length %d, expected %d", what, n_items, length, expected)); } /* check that both \n and \r\n are accepted as line ends, * and that stray \r are passed through */ void test_line_ends (void) { const gchar *data = "[group1]\n" "key1=value1\n" "key2=value2\r\n" "[group2]\r\n" "key3=value3\r\r\n" "key4=value4\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "group1", "key1", "value1"); check_string_value (keyfile, "group1", "key2", "value2"); check_string_value (keyfile, "group2", "key3", "value3\r"); check_string_value (keyfile, "group2", "key4", "value4"); } /* check handling of whitespace */ void test_whitespace (void) { const gchar *data = "[group1]\n" "key1 = value1\n" "key2\t=\tvalue2\n" " [ group2 ] \n" "key3 = value3 \n" "key4 = value \t4\n" " key5 = value5\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "group1", "key1", "value1"); check_string_value (keyfile, "group1", "key2", "value2"); check_string_value (keyfile, " group2 ", "key3", "value3 "); check_string_value (keyfile, " group2 ", "key4", "value \t4"); check_string_value (keyfile, " group2 ", "key5", "value5"); } /* check handling of comments */ void test_comments (void) { gchar **names; gsize len; GError *error = NULL; gchar *comment; const gchar *data = "# top comment\n" "# top comment, continued\n" "[group1]\n" "key1 = value1\n" "# key comment\n" "# key comment, continued\n" "key2 = value2\n" "# line end check\r\n" "key3 = value3\n" "key4 = value4\n" "# group comment\n" "# group comment, continued\n" "[group2]\n"; const gchar *top_comment= " top comment\n top comment, continued\n"; const gchar *group_comment= " group comment\n group comment, continued\n"; const gchar *key_comment= " key comment\n key comment, continued\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "group1", "key1", "value1"); check_string_value (keyfile, "group1", "key2", "value2"); check_string_value (keyfile, "group1", "key3", "value3"); check_string_value (keyfile, "group1", "key4", "value4"); names = g_key_file_get_keys (keyfile, "group1", &len, &error); check_no_error (error); check_length ("keys", g_strv_length (names), len, 4); check_name ("key", names[0], "key1", 0); check_name ("key", names[1], "key2", 1); check_name ("key", names[2], "key3", 2); check_name ("key", names[3], "key4", 3); g_strfreev (names); g_key_file_free (keyfile); keyfile = g_key_file_new (); cut_assert (g_key_file_load_from_data (keyfile, data, -1, G_KEY_FILE_KEEP_COMMENTS, NULL)); names = g_key_file_get_keys (keyfile, "group1", &len, &error); check_no_error (error); check_length ("keys", g_strv_length (names), len, 4); check_name ("key", names[0], "key1", 0); check_name ("key", names[1], "key2", 1); check_name ("key", names[2], "key3", 2); check_name ("key", names[3], "key4", 3); g_strfreev (names); comment = g_key_file_get_comment (keyfile, NULL, NULL, &error); check_no_error (error); check_name ("top comment", comment, top_comment, 0); g_free (comment); comment = g_key_file_get_comment (keyfile, "group1", "key2", &error); check_no_error (error); check_name ("key comment", comment, key_comment, 0); g_free (comment); comment = g_key_file_get_comment (keyfile, "group2", NULL, &error); check_no_error (error); check_name ("group comment", comment, group_comment, 0); g_free (comment); comment = g_key_file_get_comment (keyfile, "group3", NULL, &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); cut_assert_null (comment); } /* check key and group listing */ void test_listing (void) { gchar **names; gsize len; gchar *start; GError *error = NULL; const gchar *data = "[group1]\n" "key1=value1\n" "key2=value2\n" "[group2]\n" "key3=value3\n" "key4=value4\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); names = g_key_file_get_groups (keyfile, &len); cut_assert (names); check_length ("groups", g_strv_length (names), len, 2); check_name ("group name", names[0], "group1", 0); check_name ("group name", names[1], "group2", 1); g_strfreev (names); names = g_key_file_get_keys (keyfile, "group1", &len, &error); check_no_error (error); check_length ("keys", g_strv_length (names), len, 2); check_name ("key", names[0], "key1", 0); check_name ("key", names[1], "key2", 1); g_strfreev (names); names = g_key_file_get_keys (keyfile, "no-such-group", &len, &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_strfreev (names); cut_assert (g_key_file_has_group (keyfile, "group1") && g_key_file_has_group (keyfile, "group2") && !g_key_file_has_group (keyfile, "group10") && !g_key_file_has_group (keyfile, "group2 "), cut_message ("Group finding trouble")); start = g_key_file_get_start_group (keyfile); cut_assert_equal_string ("group1", start); g_free (start); cut_assert (g_key_file_has_key (keyfile, "group1", "key1", &error) && g_key_file_has_key (keyfile, "group2", "key3", &error) && !g_key_file_has_key (keyfile, "group2", "no-such-key", &error), cut_message ("Key finding trouble")); check_no_error (error); g_key_file_has_key (keyfile, "no-such-group", "key", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); } /* check parsing of string values */ void test_string (void) { GError *error = NULL; gchar *value; const gchar *data = "[valid]\n" "key1=\\s\\n\\t\\r\\\\\n" "key2=\"quoted\"\n" "key3='quoted'\n" "key4=\xe2\x89\xa0\xe2\x89\xa0\n" "[invalid]\n" "key1=\\a\\b\\0800xff\n" "key2=blabla\\\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "valid", "key1", " \n\t\r\\"); check_string_value (keyfile, "valid", "key2", "\"quoted\""); check_string_value (keyfile, "valid", "key3", "'quoted'"); check_string_value (keyfile, "valid", "key4", "\xe2\x89\xa0\xe2\x89\xa0"); value = g_key_file_get_string (keyfile, "invalid", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_free (value); value = g_key_file_get_string (keyfile, "invalid", "key2", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_free (value); } /* check parsing of boolean values */ void test_boolean (void) { GError *error = NULL; const gchar *data = "[valid]\n" "key1=true\n" "key2=false\n" "key3=1\n" "key4=0\n" "[invalid]\n" "key1=t\n" "key2=f\n" "key3=yes\n" "key4=no\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_boolean_value (keyfile, "valid", "key1", TRUE); check_boolean_value (keyfile, "valid", "key2", FALSE); check_boolean_value (keyfile, "valid", "key3", TRUE); check_boolean_value (keyfile, "valid", "key4", FALSE); g_key_file_get_boolean (keyfile, "invalid", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_boolean (keyfile, "invalid", "key2", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_boolean (keyfile, "invalid", "key3", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_boolean (keyfile, "invalid", "key4", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); } /* check parsing of integer and double values */ void test_number (void) { GError *error = NULL; const gchar *data = "[valid]\n" "key1=0\n" "key2=1\n" "key3=-1\n" "key4=2324431\n" "key5=-2324431\n" "key6=000111\n" "dkey1=000111\n" "dkey2=145.45\n" "dkey3=-3453.7\n" "[invalid]\n" "key1=0xffff\n" "key2=0.5\n" "key3=1e37\n" "key4=ten\n" "key5=\n" "key6=1.0.0\n" "key7=2x2\n" "key8=abc\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_integer_value (keyfile, "valid", "key1", 0); check_integer_value (keyfile, "valid", "key2", 1); check_integer_value (keyfile, "valid", "key3", -1); check_integer_value (keyfile, "valid", "key4", 2324431); check_integer_value (keyfile, "valid", "key5", -2324431); check_integer_value (keyfile, "valid", "key6", 111); check_double_value (keyfile, "valid", "dkey1", 111.0); check_double_value (keyfile, "valid", "dkey2", 145.45); check_double_value (keyfile, "valid", "dkey3", -3453.7); g_key_file_get_integer (keyfile, "invalid", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_integer (keyfile, "invalid", "key2", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_integer (keyfile, "invalid", "key3", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_integer (keyfile, "invalid", "key4", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_double (keyfile, "invalid", "key5", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_double (keyfile, "invalid", "key6", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_double (keyfile, "invalid", "key7", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); g_key_file_get_double (keyfile, "invalid", "key8", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); } /* check handling of translated strings */ void test_locale_string (void) { const gchar *data = "[valid]\n" "key1=v1\n" "key1[de]=v1-de\n" "key1[de_DE]=v1-de_DE\n" "key1[de_DE.UTF8]=v1-de_DE.UTF8\n" "key1[fr]=v1-fr\n" "key1[en] =v1-en\n" "key1[sr@Latn]=v1-sr\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, G_KEY_FILE_KEEP_TRANSLATIONS, NULL)); check_locale_string_value (keyfile, "valid", "key1", "it", "v1"); check_locale_string_value (keyfile, "valid", "key1", "de", "v1-de"); check_locale_string_value (keyfile, "valid", "key1", "de_DE", "v1-de_DE"); check_locale_string_value (keyfile, "valid", "key1", "de_DE.UTF8", "v1-de_DE.UTF8"); check_locale_string_value (keyfile, "valid", "key1", "fr", "v1-fr"); check_locale_string_value (keyfile, "valid", "key1", "fr_FR", "v1-fr"); check_locale_string_value (keyfile, "valid", "key1", "en", "v1-en"); check_locale_string_value (keyfile, "valid", "key1", "sr@Latn", "v1-sr"); g_key_file_free (keyfile); /* now test that translations are thrown away */ g_setenv ("LANGUAGE", "de", TRUE); original_locale = g_strdup (setlocale (LC_ALL, "")); keyfile = g_key_file_new (); cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_locale_string_value (keyfile, "valid", "key1", "it", "v1"); check_locale_string_value (keyfile, "valid", "key1", "de", "v1-de"); check_locale_string_value (keyfile, "valid", "key1", "de_DE", "v1-de"); check_locale_string_value (keyfile, "valid", "key1", "de_DE.UTF8", "v1-de"); check_locale_string_value (keyfile, "valid", "key1", "fr", "v1"); check_locale_string_value (keyfile, "valid", "key1", "fr_FR", "v1"); check_locale_string_value (keyfile, "valid", "key1", "en", "v1"); } void test_lists (void) { const gchar *data = "[valid]\n" "key1=v1;v2\n" "key2=v1;v2;\n" "key3=v1,v2\n" "key4=v1\\;v2\n" "key5=true;false\n" "key6=1;0;-1\n" "key7= 1 ; 0 ; -1 \n" "key8=v1\\,v2\n" "key9=0;1.3456;-76532.456\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_list_value (keyfile, "valid", "key1", "v1", "v2", NULL); check_string_list_value (keyfile, "valid", "key2", "v1", "v2", NULL); check_string_list_value (keyfile, "valid", "key3", "v1,v2", NULL); check_string_list_value (keyfile, "valid", "key4", "v1;v2", NULL); check_boolean_list_value (keyfile, "valid", "key5", TRUE, FALSE, -100); check_integer_list_value (keyfile, "valid", "key6", 1, 0, -1, -100); check_double_list_value (keyfile, "valid", "key9", 0.0, 1.3456, -76532.456, -100.0); /* maybe these should be valid */ /* check_integer_list_value (keyfile, "valid", "key7", 1, 0, -1, -100);*/ /* check_string_list_value (keyfile, "valid", "key8", "v1\\,v2", NULL);*/ g_key_file_free (keyfile); /* Now check an alternate separator */ keyfile = g_key_file_new (); cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); g_key_file_set_list_separator (keyfile, ','); check_string_list_value (keyfile, "valid", "key1", "v1;v2", NULL); check_string_list_value (keyfile, "valid", "key2", "v1;v2;", NULL); check_string_list_value (keyfile, "valid", "key3", "v1", "v2", NULL); } /* http://bugzilla.gnome.org/show_bug.cgi?id=165887 */ void test_group_remove (void) { gchar **names; gsize len; GError *error = NULL; const gchar *data = "[group1]\n" "[group2]\n" "key1=bla\n" "key2=bla\n" "[group3]\n" "key1=bla\n" "key2=bla\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); names = g_key_file_get_groups (keyfile, &len); cut_assert (names); check_length ("groups", g_strv_length (names), len, 3); check_name ("group name", names[0], "group1", 0); check_name ("group name", names[1], "group2", 1); check_name ("group name", names[2], "group3", 2); g_key_file_remove_group (keyfile, "group1", &error); check_no_error (error); g_strfreev (names); names = g_key_file_get_groups (keyfile, &len); cut_assert (names); check_length ("groups", g_strv_length (names), len, 2); check_name ("group name", names[0], "group2", 0); check_name ("group name", names[1], "group3", 1); g_key_file_remove_group (keyfile, "group2", &error); check_no_error (error); g_strfreev (names); names = g_key_file_get_groups (keyfile, &len); cut_assert (names); check_length ("groups", g_strv_length (names), len, 1); check_name ("group name", names[0], "group3", 0); g_key_file_remove_group (keyfile, "no such group", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_strfreev (names); } /* http://bugzilla.gnome.org/show_bug.cgi?id=165980 */ void test_key_remove (void) { gchar *value; GError *error = NULL; const gchar *data = "[group1]\n" "key1=bla\n" "key2=bla\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "group1", "key1", "bla"); g_key_file_remove_key (keyfile, "group1", "key1", &error); check_no_error (error); value = g_key_file_get_string (keyfile, "group1", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_free (value); g_key_file_remove_key (keyfile, "group1", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_key_file_remove_key (keyfile, "no such group", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); } /* http://bugzilla.gnome.org/show_bug.cgi?id=316309 */ void test_groups (void) { const gchar *data = "[1]\n" "key1=123\n" "[2]\n" "key2=123\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "1", "key1", "123"); check_string_value (keyfile, "2", "key2", "123"); } void test_group_names (void) { const gchar *data; gchar *value; GError *error = NULL; /* [ in group name */ data = "[a[b]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* ] in group name */ data = "[a]b]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* control char in group name */ data = "[a\tb]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* empty group name */ data = "[]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* Unicode in group name */ data = "[\xc2\xbd]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_no_error (error); keyfile = g_key_file_new (); cut_assert (keyfile); g_key_file_set_string (keyfile, "a[b", "key1", "123"); value = g_key_file_get_string (keyfile, "a[b", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a]b", "key1", "123"); value = g_key_file_get_string (keyfile, "a]b", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a\tb", "key1", "123"); value = g_key_file_get_string (keyfile, "a\tb", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "\xc2\xbd", "key1", "123"); check_string_value (keyfile, "\xc2\xbd", "key1", "123"); g_key_file_free (keyfile); keyfile = NULL; } void test_key_names (void) { GError *error = NULL; const gchar *data; gchar *value; /* [ in key name */ data = "[a]\n" "key[=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* empty key name */ data = "[a]\n" " =123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* empty key name */ data = "[a]\n" " [de] =123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* bad locale suffix */ data = "[a]\n" "foo[@#!&%]=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* initial space */ data = "[a]\n" " foo=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); check_no_error (error); check_string_value (keyfile, "a", "foo", "123"); g_key_file_free (keyfile); /* final space */ data = "[a]\n" "foo =123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); check_no_error (error); check_string_value (keyfile, "a", "foo", "123"); g_key_file_free (keyfile); /* inner space */ data = "[a]\n" "foo bar=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); check_no_error (error); check_string_value (keyfile, "a", "foo bar", "123"); g_key_file_free (keyfile); /* inner space */ data = "[a]\n" "foo [de] =123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); g_key_file_free (keyfile); /* control char in key name */ data = "[a]\n" "key\tfoo=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_no_error (error); /* Unicode in key name */ data = "[a]\n" "\xc2\xbd=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_no_error (error); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); g_key_file_set_string (keyfile, "a", "key=", "123"); value = g_key_file_get_string (keyfile, "a", "key=", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); g_key_file_set_string (keyfile, "a", "key[", "123"); value = g_key_file_get_string (keyfile, "a", "key[", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); g_key_file_set_string (keyfile, "a", "key\tfoo", "123"); value = g_key_file_get_string (keyfile, "a", "key\tfoo", &error); check_no_error (error); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); g_key_file_set_string (keyfile, "a", " key", "123"); value = g_key_file_get_string (keyfile, "a", " key", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); /* Unicode key */ g_key_file_set_string (keyfile, "a", "\xc2\xbd", "123"); check_string_value (keyfile, "a", "\xc2\xbd", "123"); /* Keys with / + . (as used by the gnome-vfs mime cache) */ g_key_file_set_string (keyfile, "a", "foo/bar", "/"); check_string_value (keyfile, "a", "foo/bar", "/"); g_key_file_set_string (keyfile, "a", "foo+bar", "+"); check_string_value (keyfile, "a", "foo+bar", "+"); g_key_file_set_string (keyfile, "a", "foo.bar", "."); check_string_value (keyfile, "a", "foo.bar", "."); g_key_file_free (keyfile); keyfile = NULL; } void test_duplicate_keys (void) { const gchar *data = "[1]\n" "key1=123\n" "key1=345\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "1", "key1", "345"); } /* http://bugzilla.gnome.org/show_bug.cgi?id=157877 */ void test_duplicate_groups (void) { const gchar *data = "[Desktop Entry]\n" "key1=123\n" "[Desktop Entry]\n" "key2=123\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "Desktop Entry", "key1", "123"); check_string_value (keyfile, "Desktop Entry", "key2", "123"); } /* http://bugzilla.gnome.org/show_bug.cgi?id=385910 */ void test_duplicate_groups2 (void) { const gchar *data = "[A]\n" "foo=bar\n" "[B]\n" "foo=baz\n" "[A]\n" "foo=bang\n"; cut_assert (g_key_file_load_from_data (keyfile, data, -1, 0, NULL)); check_string_value (keyfile, "A", "foo", "bang"); check_string_value (keyfile, "B", "foo", "baz"); } /* http://bugzilla.gnome.org/show_bug.cgi?id=420686 */ void test_reload_idempotency (void) { static const gchar *original_data="" "# Top comment\n" "\n" "# First comment\n" "[first]\n" "key=value\n" "# A random comment in the first group\n" "anotherkey=anothervalue\n" "# Second comment - one line\n" "[second]\n" "# Third comment - two lines\n" "# Third comment - two lines\n" "[third]\n" "blank_line=1\n" "\n" "blank_lines=2\n" "\n\n" "[fourth]\n" "[fifth]\n"; GError *error = NULL; gchar *data1, *data2; gsize len1, len2; /* check that we only insert a single new line between groups */ keyfile = g_key_file_new (); if (!g_key_file_load_from_data (keyfile, original_data, strlen(original_data), G_KEY_FILE_KEEP_COMMENTS, &error)) gcut_assert_error (error, cut_message ("Failed to parse keyfile[1]")); data1 = g_key_file_to_data (keyfile, &len1, &error); if (!data1) gcut_assert_error (error, cut_message ("Failed to extract keyfile[1]")); g_key_file_free (keyfile); keyfile = g_key_file_new (); if (!g_key_file_load_from_data (keyfile, data1, len1, G_KEY_FILE_KEEP_COMMENTS, &error)) gcut_assert_error (error, cut_message ("Failed to parse keyfile[2]")); data2 = g_key_file_to_data (keyfile, &len2, &error); if (!data2) gcut_assert_error (error, cut_message ("Failed to extract keyfile[2]")); g_key_file_free (keyfile); keyfile = NULL; cut_assert_equal_string (data1, data2, cut_message ("Reloading GKeyFile is not idempotent.\n" "original:\n" "%s\n" "---\n" "pass1:\n" "%s\n" "---\n" "pass2:\n" "%s\n" "---\n", original_data, data1, data2)); g_free (data2); g_free (data1); } cutter-testing-framework-1.1.7/sample/glib/regex.c0000644000175000017500000015512511424022511020327 0ustar koukou/* -*- c-file-style: "gnu" -*- */ /* * Copyright (C) 2005 - 2006, Marco Barisione * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include #include #include /* U+20AC EURO SIGN (symbol, currency) */ #define EURO "\xe2\x82\xac" /* U+00E0 LATIN SMALL LETTER A WITH GRAVE (letter, lowercase) */ #define AGRAVE "\xc3\xa0" /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE (letter, uppercase) */ #define AGRAVE_UPPER "\xc3\x80" /* U+00E8 LATIN SMALL LETTER E WITH GRAVE (letter, lowercase) */ #define EGRAVE "\xc3\xa8" /* U+00F2 LATIN SMALL LETTER O WITH GRAVE (letter, lowercase) */ #define OGRAVE "\xc3\xb2" /* U+014B LATIN SMALL LETTER ENG (letter, lowercase) */ #define ENG "\xc5\x8b" /* U+0127 LATIN SMALL LETTER H WITH STROKE (letter, lowercase) */ #define HSTROKE "\xc4\xa7" /* U+0634 ARABIC LETTER SHEEN (letter, other) */ #define SHEEN "\xd8\xb4" /* U+1374 ETHIOPIC NUMBER THIRTY (number, other) */ #define ETH30 "\xe1\x8d\xb4" /* A random value use to mark untouched integer variables. */ #define UNTOUCHED -559038737 void test_regex_new (void); void test_regex_new_fail (void); void test_match_simple (void); void test_match (void); void test_mismatch (void); void test_match_count (void); void test_get_string_number (void); void test_escape (void); void test_check_replacement (void); void test_replace (void); void test_partial_match (void); void test_replace_lit (void); void test_expand (void); void test_match_next (void); void test_match_all (void); void test_sub_pattern (void); void test_named_sub_pattern (void); void test_fetch_all (void); void test_split_simple (void); void test_split (void); typedef struct _Match { gchar *string; gint start, end; } Match; static GRegex *regex; static GMatchInfo *match_info; static GSList *expected_matches, *actual_matches; static gchar *escaped_string, *replaced_string, *expanded_string, *substring; void setup (void) { regex = NULL; match_info = NULL; expected_matches = NULL; actual_matches = NULL; escaped_string = NULL; replaced_string = NULL; expanded_string = NULL; substring = NULL; } static void free_regex (void) { if (regex) g_regex_unref (regex); regex = NULL; } static void free_match_info (void) { if (match_info) g_match_info_free (match_info); match_info = NULL; } static void free_match (gpointer data, gpointer user_data) { Match *match = data; if (match == NULL) return; g_free (match->string); g_free (match); } static void free_expected_matches (void) { g_slist_foreach (expected_matches, free_match, NULL); g_slist_free (expected_matches); expected_matches = NULL; } static void free_actual_matches (void) { g_slist_foreach (actual_matches, free_match, NULL); g_slist_free (actual_matches); actual_matches = NULL; } static void free_escaped_string (void) { g_free (escaped_string); escaped_string = NULL; } static void free_replaced_string (void) { g_free (replaced_string); replaced_string = NULL; } static void free_expanded_string (void) { g_free (expanded_string); expanded_string = NULL; } static void free_substring (void) { g_free (substring); substring = NULL; } void teardown (void) { free_regex (); free_match_info (); free_expected_matches (); free_actual_matches (); free_escaped_string (); free_replaced_string (); free_expanded_string (); free_substring (); } static void cut_assert_regex_new_without_free (const gchar *pattern, GRegexCompileFlags compile_opts, GRegexMatchFlags match_opts) { regex = g_regex_new (pattern, compile_opts, match_opts, NULL); cut_assert (regex, cut_message ("failed (pattern: \"%s\", compile: %d, match %d)", pattern, compile_opts, match_opts)); cut_assert_equal_string (pattern, g_regex_get_pattern (regex)); } static void cut_assert_regex_new (const gchar *pattern, GRegexCompileFlags compile_opts, GRegexMatchFlags match_opts) { cut_assert_regex_new_without_free (pattern, compile_opts, match_opts); free_regex (); } void test_regex_new (void) { cut_assert_regex_new ("", 0, 0); cut_assert_regex_new (".*", 0, 0); cut_assert_regex_new (".*", G_REGEX_OPTIMIZE, 0); cut_assert_regex_new (".*", G_REGEX_MULTILINE, 0); cut_assert_regex_new (".*", G_REGEX_DOTALL, 0); cut_assert_regex_new (".*", G_REGEX_DOTALL, G_REGEX_MATCH_NOTBOL); cut_assert_regex_new ("(123\\d*)[a-zA-Z]+(?P.*)", 0, 0); cut_assert_regex_new ("(123\\d*)[a-zA-Z]+(?P.*)", G_REGEX_CASELESS, 0); cut_assert_regex_new ("(123\\d*)[a-zA-Z]+(?P.*)", G_REGEX_CASELESS | G_REGEX_OPTIMIZE, 0); cut_assert_regex_new ("(?Px)|(?Py)", G_REGEX_DUPNAMES, 0); cut_assert_regex_new ("(?Px)|(?Py)", G_REGEX_DUPNAMES | G_REGEX_OPTIMIZE, 0); /* This gives "internal error: code overflow" with pcre 6.0 */ cut_assert_regex_new ("(?i)(?-i)", 0, 0); } static void cut_assert_regex_new_fail (const gchar *pattern, GRegexCompileFlags compile_opts) { regex = g_regex_new (pattern, compile_opts, 0, NULL); cut_assert_null (regex, cut_message ("failed (pattern: \"%s\", compile: %d)", pattern, compile_opts)); } void test_regex_new_fail (void) { cut_assert_regex_new_fail ("(", 0); cut_assert_regex_new_fail (")", 0); cut_assert_regex_new_fail ("[", 0); cut_assert_regex_new_fail ("*", 0); cut_assert_regex_new_fail ("?", 0); cut_assert_regex_new_fail ("(?Px)|(?Py)", 0); } #define cut_assert_match_simple(pattern, string, \ compile_options, match_options) \ cut_assert (g_regex_match_simple (pattern, string, \ compile_options, match_options)) #define cut_assert_not_match_simple(pattern, string, \ compile_options, match_options) \ cut_assert (!g_regex_match_simple (pattern, string, \ compile_options, match_options)) void test_match_simple (void) { cut_assert_not_match_simple ("a", "", 0, 0); cut_assert_not_match_simple ("a", "", 0, 0); cut_assert_match_simple ("a", "a", 0, 0); cut_assert_match_simple ("a", "ba", 0, 0); cut_assert_not_match_simple ("^a", "ba", 0, 0); cut_assert_not_match_simple ("a", "ba", G_REGEX_ANCHORED, 0); cut_assert_not_match_simple ("a", "ba", 0, G_REGEX_MATCH_ANCHORED); cut_assert_match_simple ("a", "ab", G_REGEX_ANCHORED, 0); cut_assert_match_simple ("a", "ab", 0, G_REGEX_MATCH_ANCHORED); cut_assert_match_simple ("a", "a", G_REGEX_CASELESS, 0); cut_assert_match_simple ("a", "A", G_REGEX_CASELESS, 0); /* These are needed to test extended properties. */ cut_assert_match_simple (AGRAVE, AGRAVE, G_REGEX_CASELESS, 0); cut_assert_match_simple (AGRAVE, AGRAVE_UPPER, G_REGEX_CASELESS, 0); cut_assert_match_simple ("\\p{L}", "a", 0, 0); cut_assert_not_match_simple ("\\p{L}", "1", 0, 0); cut_assert_match_simple ("\\p{L}", AGRAVE, 0, 0); cut_assert_match_simple ("\\p{L}", AGRAVE_UPPER, 0, 0); cut_assert_match_simple ("\\p{L}", SHEEN, 0, 0); cut_assert_not_match_simple ("\\p{L}", ETH30, 0, 0); cut_assert_match_simple ("\\p{Ll}", "a", 0, 0); cut_assert_match_simple ("\\p{Ll}", AGRAVE, 0, 0); cut_assert_not_match_simple ("\\p{Ll}", AGRAVE_UPPER, 0, 0); cut_assert_not_match_simple ("\\p{Ll}", ETH30, 0, 0); cut_assert_not_match_simple ("\\p{Sc}", AGRAVE, 0, 0); cut_assert_match_simple ("\\p{Sc}", EURO, 0, 0); cut_assert_not_match_simple ("\\p{Sc}", ETH30, 0, 0); cut_assert_not_match_simple ("\\p{N}", "a", 0, 0); cut_assert_match_simple ("\\p{N}", "1", 0, 0); cut_assert_not_match_simple ("\\p{N}", AGRAVE, 0, 0); cut_assert_not_match_simple ("\\p{N}", AGRAVE_UPPER, 0, 0); cut_assert_not_match_simple ("\\p{N}", SHEEN, 0, 0); cut_assert_match_simple ("\\p{N}", ETH30, 0, 0); cut_assert_not_match_simple ("\\p{Nd}", "a", 0, 0); cut_assert_match_simple ("\\p{Nd}", "1", 0, 0); cut_assert_not_match_simple ("\\p{Nd}", AGRAVE, 0, 0); cut_assert_not_match_simple ("\\p{Nd}", AGRAVE_UPPER, 0, 0); cut_assert_not_match_simple ("\\p{Nd}", SHEEN, 0, 0); cut_assert_not_match_simple ("\\p{Nd}", ETH30, 0, 0); cut_assert_not_match_simple ("\\p{Common}", SHEEN, 0, 0); cut_assert_not_match_simple ("\\p{Common}", "a", 0, 0); cut_assert_not_match_simple ("\\p{Common}", AGRAVE, 0, 0); cut_assert_not_match_simple ("\\p{Common}", AGRAVE_UPPER, 0, 0); cut_assert_not_match_simple ("\\p{Common}", ETH30, 0, 0); cut_assert_match_simple ("\\p{Common}", "%", 0, 0); cut_assert_match_simple ("\\p{Common}", "1", 0, 0); cut_assert_match_simple ("\\p{Arabic}", SHEEN, 0, 0); cut_assert_not_match_simple ("\\p{Arabic}", "a", 0, 0); cut_assert_not_match_simple ("\\p{Arabic}", AGRAVE, 0, 0); cut_assert_not_match_simple ("\\p{Arabic}", AGRAVE_UPPER, 0, 0); cut_assert_not_match_simple ("\\p{Arabic}", ETH30, 0, 0); cut_assert_not_match_simple ("\\p{Arabic}", "%", 0, 0); cut_assert_not_match_simple ("\\p{Arabic}", "1", 0, 0); cut_assert_not_match_simple ("\\p{Latin}", SHEEN, 0, 0); cut_assert_match_simple ("\\p{Latin}", "a", 0, 0); cut_assert_match_simple ("\\p{Latin}", AGRAVE, 0, 0); cut_assert_match_simple ("\\p{Latin}", AGRAVE_UPPER, 0, 0); cut_assert_not_match_simple ("\\p{Latin}", ETH30, 0, 0); cut_assert_not_match_simple ("\\p{Latin}", "%", 0, 0); cut_assert_not_match_simple ("\\p{Latin}", "1", 0, 0); cut_assert_not_match_simple ("\\p{Ethiopic}", SHEEN, 0, 0); cut_assert_not_match_simple ("\\p{Ethiopic}", "a", 0, 0); cut_assert_not_match_simple ("\\p{Ethiopic}", AGRAVE, 0, 0); cut_assert_not_match_simple ("\\p{Ethiopic}", AGRAVE_UPPER, 0, 0); cut_assert_match_simple ("\\p{Ethiopic}", ETH30, 0, 0); cut_assert_not_match_simple ("\\p{Ethiopic}", "%", 0, 0); cut_assert_not_match_simple ("\\p{Ethiopic}", "1", 0, 0); cut_assert_match_simple ("\\p{L}(?<=\\p{Arabic})", SHEEN, 0, 0); cut_assert_not_match_simple ("\\p{L}(?<=\\p{Latin})", SHEEN, 0, 0); /* Invalid patterns. */ cut_assert_not_match_simple ("\\", "a", 0, 0); cut_assert_not_match_simple ("[", "", 0, 0); } static void cut_assert_match_full (const gchar *pattern, GRegexCompileFlags compile_options, GRegexMatchFlags pattern_match_options, const gchar *string, gssize length, gint start_position, GRegexMatchFlags match_options) { cut_assert_regex_new_without_free (pattern, compile_options, pattern_match_options); cut_assert (g_regex_match_full (regex, string, length, start_position, match_options, NULL, NULL), cut_message ("/%s/ =~ <%s>", pattern, string)); if (length == -1 && start_position == 0) { cut_assert (g_regex_match (regex, string, match_options, NULL), cut_message ("failed (pattern: \"%s\", string: \"%s\")", pattern, string)); } free_regex (); } void test_match (void) { cut_assert_match_full ("a", 0, 0, "a", -1, 0, 0); cut_assert_match_full ("a", G_REGEX_CASELESS, 0, "A", -1, 0, 0); cut_assert_match_full ("a", 0, 0, "bab", -1, 0, 0); cut_assert_match_full ("a", 0, G_REGEX_ANCHORED, "a", -1, 0, 0); cut_assert_match_full ("a|b", 0, 0, "a", -1, 0, 0); cut_assert_match_full ("^.$", 0, 0, EURO, -1, 0, 0); cut_assert_match_full ("^.{3}$", G_REGEX_RAW, 0, EURO, -1, 0, 0); cut_assert_match_full (AGRAVE, G_REGEX_CASELESS, 0, AGRAVE_UPPER, -1, 0, 0); cut_assert_match_full ("a", 0, 0, "a", -1, 0, G_REGEX_ANCHORED); /* New lines handling. */ cut_assert_match_full ("^a\\Rb$", 0, 0, "a\r\nb", -1, 0, 0); cut_assert_match_full ("^a\\Rb$", 0, 0, "a\nb", -1, 0, 0); cut_assert_match_full ("^a\\Rb$", 0, 0, "a\rb", -1, 0, 0); cut_assert_match_full ("^a\\R\\Rb$", 0, 0, "a\n\rb", -1, 0, 0); cut_assert_match_full ("^a\\r\\nb$", 0, 0, "a\r\nb", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE, 0, "a\nb\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE, 0, "a\r\nb\r\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE, 0, "a\rb\rc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_LF, 0, "a\nb\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CRLF, 0, "a\r\nb\r\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, 0, "a\rb\rc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_LF, "a\nb\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CRLF, "a\r\nb\r\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CR, "a\rb\rc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_ANY, "a\nb\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_ANY, "a\rb\rc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_ANY, "a\r\nb\r\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_LF, "a\nb\nc", -1, 0, 0); cut_assert_match_full ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_CRLF, "a\r\nb\r\nc", -1, 0, 0); cut_assert_match_full ("a#\nb", G_REGEX_EXTENDED | G_REGEX_NEWLINE_CR, 0, "a", -1, 0, 0); } static void cut_assert_mismatch (const gchar *pattern, GRegexCompileFlags compile_opts, GRegexMatchFlags match_opts, const gchar *string, gsize string_len, gint start_position, GRegexMatchFlags match_opts2) { cut_assert_regex_new_without_free (pattern, compile_opts, match_opts); cut_assert (!g_regex_match_full (regex, string, string_len, start_position, match_opts2, NULL, NULL), cut_message ("/%s/ !~ <%s>", pattern, string)); if (string_len == -1 && start_position == 0) { cut_assert (!g_regex_match (regex, string, match_opts2, NULL), cut_message ("/%s/ !~ <%s>", pattern, string)); } free_regex (); } void test_mismatch (void) { cut_assert_mismatch ("a", 0, 0, "A", -1, 0, 0); cut_assert_mismatch ("a", 0, 0, "ab", -1, 1, 0); cut_assert_mismatch ("a", 0, 0, "ba", 1, 0, 0); cut_assert_mismatch ("a", 0, 0, "b", -1, 0, 0); cut_assert_mismatch ("a", 0, G_REGEX_ANCHORED, "ab", -1, 1, 0); cut_assert_mismatch ("a", 0, G_REGEX_ANCHORED, "ba", 1, 0, 0); cut_assert_mismatch ("a", 0, G_REGEX_ANCHORED, "bab", -1, 0, 0); cut_assert_mismatch ("a", 0, G_REGEX_ANCHORED, "b", -1, 0, 0); cut_assert_mismatch ("a", 0, 0, "ab", -1, 1, G_REGEX_ANCHORED); cut_assert_mismatch ("a", 0, 0, "ba", 1, 0, G_REGEX_ANCHORED); cut_assert_mismatch ("a", 0, 0, "bab", -1, 0, G_REGEX_ANCHORED); cut_assert_mismatch ("a", 0, 0, "b", -1, 0, G_REGEX_ANCHORED); cut_assert_mismatch ("\\d", 0, 0, EURO, -1, 0, 0); cut_assert_mismatch ("^.{3}$", 0, 0, EURO, -1, 0, 0); cut_assert_mismatch ("^.$", G_REGEX_RAW, 0, EURO, -1, 0, 0); /* New lines handling. */ cut_assert_mismatch ("^a\\Rb$", 0, 0, "a\n\rb", -1, 0, 0); cut_assert_mismatch ("^a\\nb$", 0, 0, "a\r\nb", -1, 0, 0); cut_assert_mismatch ("^b$", 0, 0, "a\nb\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, 0, "a\nb\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CRLF, 0, "a\nb\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, 0, "a\r\nb\r\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_LF, 0, "a\r\nb\r\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_LF, 0, "a\rb\rc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CRLF, 0, "a\rb\rc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CR, "a\nb\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CRLF, "a\nb\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CR, "a\r\nb\r\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_LF, "a\r\nb\r\nc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_LF, "a\rb\rc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CRLF, "a\rb\rc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_LF, "a\rb\rc", -1, 0, 0); cut_assert_mismatch ("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_CRLF, "a\rb\rc", -1, 0, 0); cut_assert_mismatch ("a#\nb", G_REGEX_EXTENDED, 0, "a", -1, 0, 0); cut_assert_mismatch ("a#\r\nb", G_REGEX_EXTENDED, 0, "a", -1, 0, 0); cut_assert_mismatch ("a#\rb", G_REGEX_EXTENDED, 0, "a", -1, 0, 0); cut_assert_mismatch ("a#\nb", G_REGEX_EXTENDED, G_REGEX_MATCH_NEWLINE_CR, "a", -1, 0, 0); } static void cut_assert_match_count (const gchar *pattern, const gchar *string, gint start_position, GRegexMatchFlags match_opts, gint expected_count) { cut_assert_regex_new_without_free (pattern, 0, 0); if (expected_count == 0) cut_assert (!g_regex_match_full (regex, string, -1, start_position, match_opts, &match_info, NULL), cut_message ("/%s/ !~ <%s>", pattern, string)); else cut_assert (g_regex_match_full (regex, string, -1, start_position, match_opts, &match_info, NULL), cut_message ("/%s/ =~ <%s>", pattern, string)); cut_assert_equal_int (expected_count, g_match_info_get_match_count (match_info)); free_regex (); free_match_info (); } void test_match_count (void) { cut_assert_match_count ("a", "", 0, 0, 0); cut_assert_match_count ("a", "a", 0, 0, 1); cut_assert_match_count ("a", "a", 1, 0, 0); cut_assert_match_count ("(.)", "a", 0, 0, 2); cut_assert_match_count ("(.)", EURO, 0, 0, 2); cut_assert_match_count ("(?:.)", "a", 0, 0, 1); cut_assert_match_count ("(?P.)", "a", 0, 0, 2); cut_assert_match_count ("a$", "a", 0, G_REGEX_MATCH_NOTEOL, 0); cut_assert_match_count ("(a)?(b)", "b", 0, 0, 3); cut_assert_match_count ("(a)?(b)", "ab", 0, 0, 3); } static void cut_assert_get_string_number (const gchar *pattern, const gchar *name, gint expected_num) { cut_assert_regex_new_without_free (pattern, 0, 0); cut_assert_equal_int (expected_num, g_regex_get_string_number (regex, name)); free_regex (); } void test_get_string_number (void) { cut_assert_get_string_number ("", "A", -1); cut_assert_get_string_number ("(?P.)", "A", 1); cut_assert_get_string_number ("(?P.)", "B", -1); cut_assert_get_string_number ("(?P.)(?Pa)", "A", 1); cut_assert_get_string_number ("(?P.)(?Pa)", "B", 2); cut_assert_get_string_number ("(?P.)(?Pa)", "C", -1); cut_assert_get_string_number ("(?P.)(.)(?Pa)", "A", 1); cut_assert_get_string_number ("(?P.)(.)(?Pa)", "B", 3); cut_assert_get_string_number ("(?P.)(.)(?Pa)", "C", -1); cut_assert_get_string_number ("(?:a)(?P.)", "A", 1); cut_assert_get_string_number ("(?:a)(?P.)", "B", -1); } static void cut_assert_escape (const gchar *string, gint length, const gchar *expected) { escaped_string = g_regex_escape_string (string, length); cut_assert_equal_string (expected, escaped_string, cut_message ("<%s> -> <%s>", string, escaped_string)); free_escaped_string (); } void test_escape (void) { cut_assert_escape ("hello world", -1, "hello world"); cut_assert_escape ("hello world", 5, "hello"); cut_assert_escape ("hello.world", -1, "hello\\.world"); cut_assert_escape ("a(b\\b.$", -1, "a\\(b\\\\b\\.\\$"); cut_assert_escape ("hello\0world", -1, "hello"); cut_assert_escape ("hello\0world", 11, "hello\\0world"); cut_assert_escape (EURO "*" ENG, -1, EURO "\\*" ENG); cut_assert_escape ("a$", -1, "a\\$"); cut_assert_escape ("$a", -1, "\\$a"); cut_assert_escape ("a$a", -1, "a\\$a"); cut_assert_escape ("$a$", -1, "\\$a\\$"); cut_assert_escape ("$a$", 0, ""); cut_assert_escape ("$a$", 1, "\\$"); cut_assert_escape ("$a$", 2, "\\$a"); cut_assert_escape ("$a$", 3, "\\$a\\$"); cut_assert_escape ("$a$", 4, "\\$a\\$\\0"); cut_assert_escape ("|()[]{}^$*+?.", -1, "\\|\\(\\)\\[\\]\\{\\}\\^\\$\\*\\+\\?\\."); cut_assert_escape ("a|a(a)a[a]a{a}a^a$a*a+a?a.a", -1, "a\\|a\\(a\\)a\\[a\\]a\\{a\\}a\\^a\\$a\\*a\\+a\\?a\\.a"); } static void cut_assert_replace (const gchar *pattern, const gchar *string, gint start_position, const gchar *replacement, const gchar *expected) { cut_assert_regex_new_without_free (pattern, 0, 0); replaced_string = g_regex_replace (regex, string, -1, start_position, replacement, 0, NULL); cut_assert_equal_string_or_null (expected, replaced_string); free_regex (); free_replaced_string (); } void test_replace (void) { cut_assert_replace ("a", "ababa", 0, "A", "AbAbA"); cut_assert_replace ("a", "ababa", 1, "A", "abAbA"); cut_assert_replace ("a", "ababa", 2, "A", "abAbA"); cut_assert_replace ("a", "ababa", 3, "A", "ababA"); cut_assert_replace ("a", "ababa", 4, "A", "ababA"); cut_assert_replace ("a", "ababa", 5, "A", "ababa"); cut_assert_replace ("a", "ababa", 6, "A", "ababa"); cut_assert_replace ("a", "abababa", 2, "A", "abAbAbA"); cut_assert_replace ("a", "abab", 0, "A", "AbAb"); cut_assert_replace ("a", "baba", 0, "A", "bAbA"); cut_assert_replace ("a", "bab", 0, "A", "bAb"); cut_assert_replace ("$^", "abc", 0, "X", "abc"); cut_assert_replace ("(.)a", "ciao", 0, "a\\1", "caio"); cut_assert_replace ("a.", "abc", 0, "\\0\\0", "ababc"); cut_assert_replace ("a", "asd", 0, "\\0101", "Asd"); cut_assert_replace ("(a).\\1", "aba cda", 0, "\\1\\n", "a\n cda"); cut_assert_replace ("a" AGRAVE "a", "a" AGRAVE "a", 0, "x", "x"); cut_assert_replace ("a" AGRAVE "a", "a" AGRAVE "a", 0, OGRAVE, OGRAVE); cut_assert_replace ("[^-]", "-" EURO "-x-" HSTROKE, 0, "a", "-a-a-a"); cut_assert_replace ("[^-]", "-" EURO "-" HSTROKE, 0, "a\\g<0>a", "-a" EURO "a-a" HSTROKE "a"); cut_assert_replace ("-", "-" EURO "-" HSTROKE, 0, "", EURO HSTROKE); cut_assert_replace (".*", "hello", 0, "\\U\\0\\E", "HELLO"); cut_assert_replace (".*", "hello", 0, "\\u\\0", "Hello"); cut_assert_replace ("\\S+", "hello world", 0, "\\U-\\0-", "-HELLO- -WORLD-"); cut_assert_replace (".", "a", 0, "\\A", NULL); cut_assert_replace (".", "a", 0, "\\g", NULL); } static void cut_assert_partial_match (const gchar *pattern, const gchar *string) { cut_assert_regex_new_without_free (pattern, 0, 0); g_regex_match (regex, string, G_REGEX_MATCH_PARTIAL, &match_info); cut_assert (!g_match_info_fetch_pos (match_info, 0, NULL, NULL), cut_message ("/%s/ =~ <%s>", pattern, string)); cut_assert (!g_match_info_fetch_pos (match_info, 1, NULL, NULL), cut_message ("/%s/ =~ <%s>", pattern, string)); free_regex (); free_match_info (); } static void cut_assert_partial_mismatch (const gchar *pattern, const gchar *string) { cut_assert_regex_new_without_free (pattern, 0, 0); g_regex_match (regex, string, G_REGEX_MATCH_PARTIAL, &match_info); cut_assert (!g_match_info_is_partial_match (match_info), cut_message ("/%s/ =~ <%s>", pattern, string)); free_regex (); free_match_info (); } void test_partial_match (void) { cut_assert_partial_match ("^ab", "a"); cut_assert_partial_match ("ab", "xa"); cut_assert_partial_match ("a+b", "aa"); cut_assert_partial_match ("(a)+b", "aa"); cut_assert_partial_match ("a?b", "a"); cut_assert_partial_mismatch ("^ab", "xa"); cut_assert_partial_mismatch ("ab", "ab"); /* normal match. */ } static void cut_assert_replacement (const gchar *string_to_expand, gboolean expected_refs) { gboolean has_refs; cut_assert (g_regex_check_replacement (string_to_expand, &has_refs, NULL)); cut_assert_equal_int (expected_refs, has_refs); } void test_check_replacement (void) { cut_assert_replacement ("", FALSE); cut_assert_replacement ("a", FALSE); cut_assert_replacement ("\\t\\n\\v\\r\\f\\a\\b\\\\\\x{61}", FALSE); cut_assert_replacement ("\\0", TRUE); cut_assert_replacement ("\\n\\2", TRUE); cut_assert_replacement ("\\g", TRUE); /* Invalid strings */ cut_assert (!g_regex_check_replacement ("\\Q", NULL, NULL)); cut_assert (!g_regex_check_replacement ("x\\Ay", NULL, NULL)); } static void cut_assert_replace_lit (const gchar *pattern, const gchar *string, gint start_position, const gchar *replacement, const gchar *expected) { cut_assert_regex_new_without_free (pattern, 0, 0); replaced_string = g_regex_replace_literal (regex, string, -1, start_position, replacement, 0, NULL); cut_assert_equal_string (expected, replaced_string); free_regex (); free_replaced_string (); } void test_replace_lit (void) { cut_assert_replace_lit ("a", "ababa", 0, "A", "AbAbA"); cut_assert_replace_lit ("a", "ababa", 1, "A", "abAbA"); cut_assert_replace_lit ("a", "ababa", 2, "A", "abAbA"); cut_assert_replace_lit ("a", "ababa", 3, "A", "ababA"); cut_assert_replace_lit ("a", "ababa", 4, "A", "ababA"); cut_assert_replace_lit ("a", "ababa", 5, "A", "ababa"); cut_assert_replace_lit ("a", "ababa", 6, "A", "ababa"); cut_assert_replace_lit ("a", "abababa", 2, "A", "abAbAbA"); cut_assert_replace_lit ("a", "abcadaa", 0, "A", "AbcAdAA"); cut_assert_replace_lit ("$^", "abc", 0, "X", "abc"); cut_assert_replace_lit ("(.)a", "ciao", 0, "a\\1", "ca\\1o"); cut_assert_replace_lit ("a.", "abc", 0, "\\0\\0\\n", "\\0\\0\\nc"); cut_assert_replace_lit ("a" AGRAVE "a", "a" AGRAVE "a", 0, "x", "x"); cut_assert_replace_lit ("a" AGRAVE "a", "a" AGRAVE "a", 0, OGRAVE, OGRAVE); cut_assert_replace_lit (AGRAVE, "-" AGRAVE "-" HSTROKE, 0, "a" ENG "a", "-a" ENG "a-" HSTROKE); cut_assert_replace_lit ("[^-]", "-" EURO "-" AGRAVE "-" HSTROKE, 0, "a", "-a-a-a"); cut_assert_replace_lit ("[^-]", "-" EURO "-" AGRAVE, 0, "a\\g<0>a", "-a\\g<0>a-a\\g<0>a"); cut_assert_replace_lit ("-", "-" EURO "-" AGRAVE "-" HSTROKE, 0, "", EURO AGRAVE HSTROKE); } static void cut_assert_expand (const gchar *pattern, const gchar *string, const gchar *string_to_expand, gboolean raw, const gchar *expected) { cut_assert_regex_new_without_free (pattern, raw ? G_REGEX_RAW : 0, 0); g_regex_match (regex, string, 0, &match_info); expanded_string = g_match_info_expand_references (match_info, string_to_expand, NULL); cut_assert_equal_string_or_null (expected, expanded_string); free_regex (); free_match_info (); free_expanded_string (); } static void cut_assert_expand_null (const gchar *string_to_expand, const gchar *expected) { expanded_string = g_match_info_expand_references (NULL, string_to_expand, NULL); cut_assert_equal_string (expected, expanded_string); free_expanded_string (); } void test_expand (void) { /* TEST_EXPAND(pattern, string, string_to_expand, raw, expected) */ cut_assert_expand ("a", "a", "", FALSE, ""); cut_assert_expand ("a", "a", "\\0", FALSE, "a"); cut_assert_expand ("a", "a", "\\1", FALSE, ""); cut_assert_expand ("(a)", "ab", "\\1", FALSE, "a"); cut_assert_expand ("(a)", "a", "\\1", FALSE, "a"); cut_assert_expand ("(a)", "a", "\\g<1>", FALSE, "a"); cut_assert_expand ("a", "a", "\\0130", FALSE, "X"); cut_assert_expand ("a", "a", "\\\\\\0", FALSE, "\\a"); cut_assert_expand ("a(?P.)c", "xabcy", "X\\gX", FALSE, "XbX"); cut_assert_expand ("(.)(?P<1>.)", "ab", "\\1", FALSE, "a"); cut_assert_expand ("(.)(?P<1>.)", "ab", "\\g<1>", FALSE, "a"); cut_assert_expand (".", EURO, "\\0", FALSE, EURO); cut_assert_expand ("(.)", EURO, "\\1", FALSE, EURO); cut_assert_expand ("(?P.)", EURO, "\\g", FALSE, EURO); cut_assert_expand (".", "a", EURO, FALSE, EURO); cut_assert_expand (".", "a", EURO "\\0", FALSE, EURO "a"); cut_assert_expand (".", "", "\\Lab\\Ec", FALSE, "abc"); cut_assert_expand (".", "", "\\LaB\\EC", FALSE, "abC"); cut_assert_expand (".", "", "\\Uab\\Ec", FALSE, "ABc"); cut_assert_expand (".", "", "a\\ubc", FALSE, "aBc"); cut_assert_expand (".", "", "a\\lbc", FALSE, "abc"); cut_assert_expand (".", "", "A\\uBC", FALSE, "ABC"); cut_assert_expand (".", "", "A\\lBC", FALSE, "AbC"); cut_assert_expand (".", "", "A\\l\\\\BC", FALSE, "A\\BC"); cut_assert_expand (".", "", "\\L" AGRAVE "\\E", FALSE, AGRAVE); cut_assert_expand (".", "", "\\U" AGRAVE "\\E", FALSE, AGRAVE_UPPER); cut_assert_expand (".", "", "\\u" AGRAVE "a", FALSE, AGRAVE_UPPER "a"); cut_assert_expand (".", "ab", "x\\U\\0y\\Ez", FALSE, "xAYz"); cut_assert_expand (".(.)", "AB", "x\\L\\1y\\Ez", FALSE, "xbyz"); cut_assert_expand (".", "ab", "x\\u\\0y\\Ez", FALSE, "xAyz"); cut_assert_expand (".(.)", "AB", "x\\l\\1y\\Ez", FALSE, "xbyz"); cut_assert_expand (".(.)", "a" AGRAVE_UPPER, "x\\l\\1y", FALSE, "x" AGRAVE "y"); cut_assert_expand ("a", "bab", "\\x{61}", FALSE, "a"); cut_assert_expand ("a", "bab", "\\x61", FALSE, "a"); cut_assert_expand ("a", "bab", "\\x5a", FALSE, "Z"); cut_assert_expand ("a", "bab", "\\0\\x5A", FALSE, "aZ"); cut_assert_expand ("a", "bab", "\\1\\x{5A}", FALSE, "Z"); cut_assert_expand ("a", "bab", "\\x{00E0}", FALSE, AGRAVE); cut_assert_expand ("", "bab", "\\x{0634}", FALSE, SHEEN); cut_assert_expand ("", "bab", "\\x{634}", FALSE, SHEEN); cut_assert_expand ("", "", "\\t", FALSE, "\t"); cut_assert_expand ("", "", "\\v", FALSE, "\v"); cut_assert_expand ("", "", "\\r", FALSE, "\r"); cut_assert_expand ("", "", "\\n", FALSE, "\n"); cut_assert_expand ("", "", "\\f", FALSE, "\f"); cut_assert_expand ("", "", "\\a", FALSE, "\a"); cut_assert_expand ("", "", "\\b", FALSE, "\b"); cut_assert_expand ("a(.)", "abc", "\\0\\b\\1", FALSE, "ab\bb"); cut_assert_expand ("a(.)", "abc", "\\0141", FALSE, "a"); cut_assert_expand ("a(.)", "abc", "\\078", FALSE, "\a8"); cut_assert_expand ("a(.)", "abc", "\\077", FALSE, "?"); cut_assert_expand ("a(.)", "abc", "\\0778", FALSE, "?8"); cut_assert_expand ("a(.)", "a" AGRAVE "b", "\\1", FALSE, AGRAVE); cut_assert_expand ("a(.)", "a" AGRAVE "b", "\\1", TRUE, "\xc3"); cut_assert_expand ("a(.)", "a" AGRAVE "b", "\\0", TRUE, "a\xc3"); /* Invalid strings. */ cut_assert_expand ("", "", "\\Q", FALSE, NULL); cut_assert_expand ("", "", "x\\Ay", FALSE, NULL); cut_assert_expand ("", "", "\\g<", FALSE, NULL); cut_assert_expand ("", "", "\\g<>", FALSE, NULL); cut_assert_expand ("", "", "\\g<1a>", FALSE, NULL); cut_assert_expand ("", "", "\\g", FALSE, NULL); cut_assert_expand ("", "", "\\", FALSE, NULL); cut_assert_expand ("a", "a", "\\x{61", FALSE, NULL); cut_assert_expand ("a", "a", "\\x6X", FALSE, NULL); /* Pattern-less. */ cut_assert_expand_null ("", ""); cut_assert_expand_null ("\\n", "\n"); /* Invalid strings */ cut_assert_null (g_match_info_expand_references (NULL, "\\Q", NULL)); cut_assert_null (g_match_info_expand_references (NULL, "x\\Ay", NULL)); } static void collect_expected_matches (va_list args) { /* The va_list is a NULL-terminated sequence of: extected matched string, * expected start and expected end. */ while (TRUE) { Match *match; const gchar *expected_string = va_arg (args, const gchar *); if (expected_string == NULL) break; match = g_new0 (Match, 1); match->string = g_strdup (expected_string); match->start = va_arg (args, gint); match->end = va_arg (args, gint); expected_matches = g_slist_prepend (expected_matches, match); } expected_matches = g_slist_reverse (expected_matches); } static void collect_actual_matches (GRegex **regex, const gchar *pattern, const gchar *string, gssize string_len, gint start_position, GMatchInfo **match_info) { *regex = g_regex_new (pattern, 0, 0, NULL); g_regex_match_full (*regex, string, string_len, start_position, 0, match_info, NULL); while (g_match_info_matches (*match_info)) { Match *match = g_new0 (Match, 1); match->string = g_match_info_fetch (*match_info, 0); match->start = UNTOUCHED; match->end = UNTOUCHED; g_match_info_fetch_pos (*match_info, 0, &match->start, &match->end); actual_matches = g_slist_prepend (actual_matches, match); g_match_info_next (*match_info, NULL); } actual_matches = g_slist_reverse (actual_matches); } static void cut_assert_match_next (const gchar *pattern, const gchar *string, gssize string_length, gint start_position, ...) { GSList *actual_node, *expected_node; va_list args; va_start (args, start_position); collect_expected_matches (args); va_end (args); collect_actual_matches (®ex, pattern, string, string_length, start_position, &match_info); cut_assert (regex == g_match_info_get_regex (match_info)); cut_assert_equal_string (string, g_match_info_get_string (match_info)); free_match_info (); cut_assert_equal_int(g_slist_length (expected_matches), g_slist_length (actual_matches)); expected_node = expected_matches; actual_node = actual_matches; while (expected_node) { Match *exp = expected_node->data; Match *act = actual_node->data; cut_assert_equal_string_or_null (exp->string, act->string); expected_node = g_slist_next (expected_node); actual_node = g_slist_next (actual_node); } free_regex (); free_expected_matches (); free_actual_matches (); } void test_match_next (void) { /* TEST_MATCH_NEXT#(pattern, string, string_len, start_position, ...) */ cut_assert_match_next ("a", "x", -1, 0, NULL); cut_assert_match_next ("a", "ax", -1, 1, NULL); cut_assert_match_next ("a", "xa", 1, 0, NULL); cut_assert_match_next ("a", "axa", 1, 2, NULL); cut_assert_match_next ("a", "a", -1, 0, "a", 0, 1, NULL); cut_assert_match_next ("a", "xax", -1, 0, "a", 1, 2, NULL); cut_assert_match_next (EURO, ENG EURO, -1, 0, EURO, 2, 5, NULL); cut_assert_match_next ("a*", "", -1, 0, "", 0, 0, NULL); cut_assert_match_next ("a*", "aa", -1, 0, "aa", 0, 2, "", 2, 2, NULL); cut_assert_match_next (EURO "*", EURO EURO, -1, 0, EURO EURO, 0, 6, "", 6, 6, NULL); cut_assert_match_next ("a", "axa", -1, 0, "a", 0, 1, "a", 2, 3, NULL); cut_assert_match_next ("a+", "aaxa", -1, 0, "aa", 0, 2, "a", 3, 4, NULL); cut_assert_match_next ("a", "aa", -1, 0, "a", 0, 1, "a", 1, 2, NULL); cut_assert_match_next ("a", "ababa", -1, 2, "a", 2, 3, "a", 4, 5, NULL); cut_assert_match_next (EURO "+", EURO "-" EURO, -1, 0, EURO, 0, 3, EURO, 4, 7, NULL); cut_assert_match_next ("", "ab", -1, 0, "", 0, 0, "", 1, 1, "", 2, 2, NULL); cut_assert_match_next ("", AGRAVE "b", -1, 0, "", 0, 0, "", 2, 2, "", 3, 3, NULL); cut_assert_match_next ("a", "aaxa", -1, 0, "a", 0, 1, "a", 1, 2, "a", 3, 4, NULL); cut_assert_match_next ("a", "aa" OGRAVE "a", -1, 0, "a", 0, 1, "a", 1, 2, "a", 4, 5, NULL); cut_assert_match_next ("a*", "aax", -1, 0, "aa", 0, 2, "", 2, 2, "", 3, 3, NULL); cut_assert_match_next ("a*", "aaxa", -1, 0, "aa", 0, 2, "", 2, 2, "a", 3, 4, "", 4, 4, NULL); } static void cut_assert_sub_pattern (const gchar *pattern, const gchar *string, gint start_position, gint sub_n, const gchar *expected_sub, gint expected_start, gint expected_end) { gint start = UNTOUCHED, end = UNTOUCHED; cut_assert_regex_new_without_free (pattern, 0, 0); cut_assert (g_regex_match_full (regex, string, -1, start_position, 0, &match_info, NULL), cut_message ("/%s/ =~ <%s>", pattern, string)); substring = g_match_info_fetch (match_info, sub_n); cut_assert_equal_string_or_null (expected_sub, substring); free_substring (); if (expected_sub) cut_assert (g_match_info_fetch_pos (match_info, sub_n, &start, &end), cut_message ("$%d", sub_n)); else cut_assert (!g_match_info_fetch_pos (match_info, sub_n, &start, &end), cut_message ("!$%d", sub_n)); cut_assert_equal_int (expected_start, start); /* FIXME */ cut_assert_equal_int (expected_end, end); /* assert_equal_int_array() */ free_regex (); free_match_info (); } void test_sub_pattern (void) { /* TEST_SUB_PATTERN(pattern, string, start_position, sub_n, expected_sub, * expected_start, expected_end) */ cut_assert_sub_pattern ("a", "a", 0, 0, "a", 0, 1); cut_assert_sub_pattern ("a(.)", "ab", 0, 1, "b", 1, 2); cut_assert_sub_pattern ("a(.)", "a" EURO, 0, 1, EURO, 1, 4); cut_assert_sub_pattern ("(?:.*)(a)(.)", "xxa" ENG, 0, 2, ENG, 3, 5); cut_assert_sub_pattern ("(" HSTROKE ")", "a" HSTROKE ENG, 0, 1, HSTROKE, 1, 3); cut_assert_sub_pattern ("a", "a", 0, 1, NULL, UNTOUCHED, UNTOUCHED); cut_assert_sub_pattern ("(a)?(b)", "b", 0, 0, "b", 0, 1); cut_assert_sub_pattern ("(a)?(b)", "b", 0, 1, "", -1, -1); cut_assert_sub_pattern ("(a)?(b)", "b", 0, 2, "b", 0, 1); } #define TEST_NAMED_SUB_PATTERN(pattern, string, start_position, \ sub_name, expected_sub, \ expected_start, expected_end) { \ gint start = UNTOUCHED, end = UNTOUCHED; \ gchar *sub_expr; \ regex = g_regex_new (pattern, 0, 0, NULL); \ g_regex_match_full (regex, string, -1, start_position, 0, \ &match_info, NULL); \ sub_expr = g_match_info_fetch_named (match_info, sub_name); \ cut_assert_equal_string (expected_sub, sub_expr); \ g_free (sub_expr); \ g_match_info_fetch_named_pos (match_info, sub_name, &start, &end); \ cut_assert (start == expected_start && end == expected_end, \ cut_message ("failed (got [%d, %d], expected [%d, %d])", \ start, end, expected_start, expected_end)); \ g_regex_unref (regex); \ g_match_info_free (match_info); \ regex = NULL; \ match_info = NULL; \ } #define TEST_NAMED_SUB_PATTERN_NULL(pattern, string, start_position, \ sub_name, \ expected_start, expected_end) { \ gint start = UNTOUCHED, end = UNTOUCHED; \ gchar *sub_expr; \ regex = g_regex_new (pattern, 0, 0, NULL); \ g_regex_match_full (regex, string, -1, start_position, 0, \ &match_info, NULL); \ sub_expr = g_match_info_fetch_named (match_info, sub_name); \ cut_assert_null (sub_expr); \ g_match_info_fetch_named_pos (match_info, sub_name, &start, &end); \ cut_assert (start == expected_start && end == expected_end, \ cut_message ("failed (got [%d, %d], expected [%d, %d])", \ start, end, expected_start, expected_end)); \ g_regex_unref (regex); \ g_match_info_free (match_info); \ regex = NULL; \ match_info = NULL; \ } #define TEST_NAMED_SUB_PATTERN_DUPNAMES(pattern, string, \ start_position, sub_name, \ expected_sub, \ expected_start, expected_end) { \ gint start = UNTOUCHED, end = UNTOUCHED; \ gchar *sub_expr; \ regex = g_regex_new (pattern, G_REGEX_DUPNAMES, 0, NULL); \ g_regex_match_full (regex, string, -1, start_position, 0, \ &match_info, NULL); \ sub_expr = g_match_info_fetch_named (match_info, sub_name); \ cut_assert_equal_string (expected_sub, sub_expr); \ g_free (sub_expr); \ g_match_info_fetch_named_pos (match_info, sub_name, &start, &end); \ cut_assert (start == expected_start && end == expected_end, \ cut_message ("failed (got [%d, %d], expected [%d, %d])", \ start, end, expected_start, expected_end)); \ g_regex_unref (regex); \ g_match_info_free (match_info); \ regex = NULL; \ match_info = NULL; \ } void test_named_sub_pattern (void) { /* TEST_NAMED_SUB_PATTERN(pattern, string, start_position, sub_name, * expected_sub, expected_start, expected_end) */ TEST_NAMED_SUB_PATTERN("a(?P.)(?P.)?", "ab", 0, "A", "b", 1, 2); TEST_NAMED_SUB_PATTERN("a(?P.)(?P.)?", "aab", 1, "A", "b", 2, 3); TEST_NAMED_SUB_PATTERN("a(?P.)(?P.)?", EURO "ab", 0, "A", "b", 4, 5); TEST_NAMED_SUB_PATTERN("a(?P.)(?P.)?", "a" EGRAVE "x", 0, "A", EGRAVE, 1, 3); TEST_NAMED_SUB_PATTERN("a(?P.)(?P.)?", "a" EGRAVE "x", 0, "B", "x", 3, 4); TEST_NAMED_SUB_PATTERN("(?Pa)?(?Pb)", "b", 0, "A", "", -1, -1); TEST_NAMED_SUB_PATTERN("(?Pa)?(?Pb)", "b", 0, "B", "b", 0, 1); TEST_NAMED_SUB_PATTERN_NULL("a(?P.)(?P.)?", EURO "ab", 0, "B", UNTOUCHED, UNTOUCHED); TEST_NAMED_SUB_PATTERN_NULL("a(?P.)(?P.)?", EURO "ab", 0, "C", UNTOUCHED, UNTOUCHED); /* TEST_NAMED_SUB_PATTERN_DUPNAMES(pattern, string, start_position, sub_name, * expected_sub, expected_start, expected_end) */ TEST_NAMED_SUB_PATTERN_DUPNAMES("(?Pa)|(?Pb)", "ab", 0, "N", "a", 0, 1); TEST_NAMED_SUB_PATTERN_DUPNAMES("(?Paa)|(?Pa)", "aa", 0, "N", "aa", 0, 2); TEST_NAMED_SUB_PATTERN_DUPNAMES("(?Paa)(?Pa)", "aaa", 0, "N", "aa", 0, 2); TEST_NAMED_SUB_PATTERN_DUPNAMES("(?Px)|(?Pa)", "a", 0, "N", "a", 0, 1); TEST_NAMED_SUB_PATTERN_DUPNAMES("(?Px)y|(?Pa)b", "ab", 0, "N", "a", 0, 1); /* DUPNAMES option inside the pattern */ TEST_NAMED_SUB_PATTERN("(?J)(?Pa)|(?Pb)", "ab", 0, "N", "a", 0, 1); TEST_NAMED_SUB_PATTERN("(?J)(?Paa)|(?Pa)", "aa", 0, "N", "aa", 0, 2); TEST_NAMED_SUB_PATTERN("(?J)(?Paa)(?Pa)", "aaa", 0, "N", "aa", 0, 2); TEST_NAMED_SUB_PATTERN("(?J)(?Px)|(?Pa)", "a", 0, "N", "a", 0, 1); TEST_NAMED_SUB_PATTERN("(?J)(?Px)y|(?Pa)b", "ab", 0, "N", "a", 0, 1); } #define TEST_FETCH_ALL(pattern, string, expected) { \ gchar **matches; \ gint match_count; \ regex = g_regex_new (pattern, 0, 0, NULL); \ g_regex_match (regex, string, 0, &match_info); \ matches = g_match_info_fetch_all (match_info); \ if (matches) \ match_count = g_strv_length (matches); \ else \ match_count = 0; \ cut_assert_equal_int (g_strv_length (expected), match_count); \ cut_assert_equal_string_array (expected, matches); \ g_match_info_free (match_info); \ g_regex_unref (regex); \ g_strfreev (matches); \ match_info = NULL; \ regex = NULL; \ } #define TEST_FETCH_ALL_NULL(pattern, string) { \ gchar **matches; \ regex = g_regex_new (pattern, 0, 0, NULL); \ g_regex_match (regex, string, 0, &match_info); \ matches = g_match_info_fetch_all (match_info); \ cut_assert_null (matches); \ g_match_info_free (match_info); \ g_regex_unref (regex); \ match_info = NULL; \ regex = NULL; \ } void test_fetch_all (void) { gchar *expected2[] = {"a", NULL}; gchar *expected3[] = {"aa", NULL}; gchar *expected4[] = {"a", "a", NULL}; gchar *expected5[] = {"ab", "b", NULL}; gchar *expected6[] = {"a" HSTROKE, HSTROKE, NULL}; gchar *expected7[] = {"xyaz", "a", "z", NULL}; gchar *expected8[] = {"xa", "x", "a", NULL}; gchar *expected9[] = {ENG "a", ENG, "a", NULL}; gchar *expected10[] = {"b", "", "b", NULL}; gchar *expected11[] = {"ab", "a", "b", NULL}; TEST_FETCH_ALL_NULL("a", ""); TEST_FETCH_ALL_NULL("a", "b"); TEST_FETCH_ALL("a", "a", expected2); TEST_FETCH_ALL("a+", "aa", expected3); TEST_FETCH_ALL("(?:a)", "a", expected2); TEST_FETCH_ALL("(a)", "a", expected4); TEST_FETCH_ALL("a(.)", "ab", expected5); TEST_FETCH_ALL("a(.)", "a" HSTROKE, expected6); TEST_FETCH_ALL("(?:.*)(a)(.)", "xyazk", expected7); TEST_FETCH_ALL("(?P.)(a)", "xa", expected8); TEST_FETCH_ALL("(?P.)(a)", ENG "a", expected9); TEST_FETCH_ALL("(a)?(b)", "b", expected10); TEST_FETCH_ALL("(a)?(b)", "ab", expected11); } #define TEST_SPLIT_SIMPLE(pattern, string, expected) { \ gchar **tokens; \ gint token_count; \ tokens = g_regex_split_simple (pattern, string, 0, 0); \ if (tokens) \ token_count = g_strv_length (tokens); \ else \ token_count = 0; \ cut_assert_equal_int (g_strv_length (expected), token_count); \ cut_assert_equal_string_array (expected, tokens); \ g_strfreev (tokens); \ } #define TEST_SPLIT_SIMPLE_NULL(pattern, string) { \ gchar **tokens; \ tokens = g_regex_split_simple (pattern, string, 0, 0); \ cut_assert_null (tokens); \ } void test_split_simple (void) { gchar *expected1[] = {NULL}; gchar *expected2[] = {"a", NULL}; gchar *expected3[] = {"a", "b", NULL}; gchar *expected4[] = {"a", "b", "c", NULL}; gchar *expected5[] = {"a", ",", "b", NULL}; gchar *expected6[] = {"x", "y", NULL}; gchar *expected7[] = {"x", "b", "y", NULL}; TEST_SPLIT_SIMPLE("", "", expected1); TEST_SPLIT_SIMPLE("a", "", expected1); TEST_SPLIT_SIMPLE(",", "a", expected2); TEST_SPLIT_SIMPLE("(,)\\s*", "a", expected2); TEST_SPLIT_SIMPLE(",", "a,b", expected3); TEST_SPLIT_SIMPLE(",", "a,b,c", expected4); TEST_SPLIT_SIMPLE(",\\s*", "a,b,c", expected4); TEST_SPLIT_SIMPLE(",\\s*", "a, b, c", expected4); TEST_SPLIT_SIMPLE("(,)\\s*", "a,b", expected5); TEST_SPLIT_SIMPLE("(,)\\s*", "a, b", expected5); /* Not matched sub-strings. */ TEST_SPLIT_SIMPLE("a|(b)", "xay", expected6); TEST_SPLIT_SIMPLE("a|(b)", "xby", expected7); /* Empty matches. */ TEST_SPLIT_SIMPLE("", "abc", expected4); TEST_SPLIT_SIMPLE(" *", "ab c", expected4); /* Invalid patterns. */ TEST_SPLIT_SIMPLE_NULL("\\", ""); TEST_SPLIT_SIMPLE_NULL("[", ""); } #define TEST_SPLIT(pattern, string, start_position, max_tokens, expected) { \ gchar **tokens; \ gint token_count; \ regex = g_regex_new (pattern, 0, 0, NULL); \ tokens = g_regex_split_full (regex, string, -1, start_position, \ 0, max_tokens, NULL); \ if (tokens) \ token_count = g_strv_length (tokens); \ else \ token_count = 0; \ cut_assert_equal_int (g_strv_length (expected), token_count); \ cut_assert_equal_string_array (expected, tokens); \ g_strfreev (tokens); \ \ if (start_position == 0 && max_tokens <= 0) {\ tokens = g_regex_split (regex, string, 0); \ if (tokens) \ token_count = g_strv_length (tokens); \ else \ token_count = 0; \ cut_assert_equal_int (g_strv_length (expected), token_count); \ cut_assert_equal_string_array (expected, tokens); \ g_strfreev (tokens); \ } \ g_regex_unref (regex); \ regex = NULL; \ } void test_split (void) { gchar *expected1[] = {NULL}; gchar *expected2[] = {"a", NULL}; gchar *expected3[] = {"a,b", NULL}; gchar *expected4[] = {"b", NULL}; gchar *expected5[] = {"a", "b", NULL}; gchar *expected6[] = {"a", "b,c", NULL}; gchar *expected7[] = {"", "b", NULL}; gchar *expected8[] = {"a", "", NULL}; gchar *expected9[] = {"a", "b", "c", NULL}; gchar *expected10[] = {"a", ",", "b", NULL}; gchar *expected11[] = {"x", "y", NULL}; gchar *expected12[] = {"x", "b", "y", NULL}; gchar *expected13[] = {"b", "c", NULL}; gchar *expected14[] = {"ab c", NULL}; gchar *expected15[] = {"a", "b c", NULL}; TEST_SPLIT("", "", 0, 0, expected1); TEST_SPLIT("a", "", 0, 0, expected1); TEST_SPLIT("a", "", 0, 1, expected1); TEST_SPLIT("a", "", 0, 2, expected1); TEST_SPLIT("a", "a", 1, 0, expected1); TEST_SPLIT(",", "a", 0, 0, expected2); TEST_SPLIT(",", "a,b", 0, 1, expected3); TEST_SPLIT("(,)\\s*", "a", 0, 0, expected2); TEST_SPLIT(",", "a,b", 2, 0, expected4); TEST_SPLIT(",", "a,b", 0, 0, expected5); TEST_SPLIT(",", "a,b,c", 0, 2, expected6); TEST_SPLIT(",", "a,b", 1, 0, expected7); TEST_SPLIT(",", "a,", 0, 0, expected8); TEST_SPLIT(",", "a,b,c", 0, 0, expected9); TEST_SPLIT(",\\s*", "a,b,c", 0, 0, expected9); TEST_SPLIT(",\\s*", "a, b, c", 0, 0, expected9); TEST_SPLIT("(,)\\s*", "a,b", 0, 0, expected10); TEST_SPLIT("(,)\\s*", "a, b", 0, 0, expected10); /* Not matched sub-strings. */ TEST_SPLIT("a|(b)", "xay", 0, 0, expected11); TEST_SPLIT("a|(b)", "xby", 0, -1, expected12); /* Empty matches. */ TEST_SPLIT(" *", "ab c", 1, 0, expected13); TEST_SPLIT("", "abc", 0, 0, expected9); TEST_SPLIT(" *", "ab c", 0, 0, expected9); TEST_SPLIT(" *", "ab c", 0, 1, expected14); TEST_SPLIT(" *", "ab c", 0, 2, expected15); TEST_SPLIT(" *", "ab c", 0, 3, expected9); TEST_SPLIT(" *", "ab c", 0, 4, expected9); } static void cut_assert_match_all_each (const gchar *pattern, gboolean use_full, const gchar *string, gssize string_len, gint start_position, va_list args) { GSList *expected_node; gint expected_length; gint match_count; gint i; collect_expected_matches (args); expected_length = g_slist_length (expected_matches); regex = g_regex_new (pattern, 0, 0, NULL); if (expected_length == 0) { if (use_full) cut_assert (!g_regex_match_all_full (regex, string, string_len, start_position, 0, &match_info, NULL), cut_message ("/%s/ !~ <%s>", pattern, string)); else cut_assert (!g_regex_match_all (regex, string, 0, &match_info), cut_message ("/%s/ !~ <%s>", pattern, string)); } else { if (use_full) cut_assert (g_regex_match_all_full (regex, string, string_len, start_position, 0, &match_info, NULL), cut_message ("/%s/ =~ <%s>", pattern, string)); else cut_assert (g_regex_match_all (regex, string, 0, &match_info), cut_message ("/%s/ =~ <%s>", pattern, string)); } match_count = g_match_info_get_match_count (match_info); cut_assert_equal_int (expected_length, match_count); expected_node = expected_matches; for (i = 0; i < match_count; i++) { gint start, end; gchar *matched_string; Match *expected_match = expected_node->data; matched_string = g_match_info_fetch (match_info, i); cut_assert_equal_string (expected_match->string, matched_string, cut_message ("/%s/ =~ <%s>", pattern, expected_match->string)); g_free (matched_string); cut_assert (g_match_info_fetch_pos (match_info, i, &start, &end)); cut_assert_equal_int (expected_match->start, start, cut_message ("/%s/ =~ <%s>", pattern, expected_match->string)); cut_assert_equal_int (expected_match->end, end, cut_message ("/%s/ =~ <%s>", pattern, expected_match->string)); expected_node = g_slist_next (expected_node); } free_regex (); free_match_info (); free_expected_matches (); } static void cut_assert_match_all (const gchar *pattern, const gchar *string, gssize string_length, gint start_position, ...) { va_list args, copied_args; va_start (args, start_position); va_copy (copied_args, args); cut_assert_match_all_each (pattern, TRUE, string, string_length, start_position, copied_args); va_end(copied_args); if (string_length == -1 && start_position == 0) { va_copy (copied_args, args); cut_assert_match_all_each (pattern, FALSE, string, string_length, start_position, copied_args); va_end(copied_args); } va_end (args); } void test_match_all (void) { cut_assert_match_all ("<.*>", "", -1, 0, NULL); cut_assert_match_all ("a+", "", -1, 0, NULL); cut_assert_match_all ("a+", "a", 0, 0, NULL); cut_assert_match_all ("a+", "a", -1, 1, NULL); cut_assert_match_all ("<.*>", "", -1, 0, "", 0, 3, NULL); cut_assert_match_all ("a+", "a", -1, 0, "a", 0, 1, NULL); cut_assert_match_all ("a+", "aa", 1, 0, "a", 0, 1, NULL); cut_assert_match_all ("a+", "aa", -1, 1, "a", 1, 2, NULL); cut_assert_match_all ("a+", "aa", 2, 1, "a", 1, 2, NULL); cut_assert_match_all (".+", ENG, -1, 0, ENG, 0, 2, NULL); cut_assert_match_all ("<.*>", "", -1, 0, "", 0, 6, "", 0, 3, NULL); cut_assert_match_all ("a+", "aa", -1, 0, "aa", 0, 2, "a", 0, 1, NULL); cut_assert_match_all (".+", ENG EURO, -1, 0, ENG EURO, 0, 5, ENG, 0, 2, NULL); cut_assert_match_all ("<.*>", "", -1, 0, "", 0, 9, "", 0, 6, "", 0, 3, NULL); cut_assert_match_all ("a+", "aaa", -1, 0, "aaa", 0, 3, "aa", 0, 2, "a", 0, 1, NULL); } cutter-testing-framework-1.1.7/sample/glib/base64.c0000644000175000017500000000750511273301251020302 0ustar koukou/* -*- c-file-style: "gnu" -*- */ #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #define DATA_SIZE 1024 #define BLOCK_SIZE 32 #define NUM_BLOCKS 32 static guchar data[DATA_SIZE]; static guchar *data2 = NULL; static gchar *text = NULL; void test_full (void); void test_incremental_with_line_breaks1 (void); void test_incremental_with_line_breaks2 (void); void test_incremental_with_line_breaks3 (void); void test_incremental_no_line_breaks1 (void); void test_incremental_no_line_breaks2 (void); void test_incremental_no_line_breaks3 (void); void setup (void) { int i; for (i = 0; i < DATA_SIZE; i++) data[i] = (guchar)i; data2 = NULL; text = NULL; } void teardown (void) { g_free (data2); g_free (text); } static void test_incremental (gboolean line_break, gint length, gsize *encoded_length, gsize *decoded_length) { char *p; gsize len, max, input_len, block_size; int state, save; guint decoder_save; data2 = g_malloc (length); text = g_malloc (length * 2); len = 0; state = 0; save = 0; input_len = 0; while (input_len < length) { block_size = MIN (BLOCK_SIZE, length - input_len); len += g_base64_encode_step (data + input_len, block_size, line_break, text + len, &state, &save); input_len += block_size; } len += g_base64_encode_close (line_break, text + len, &state, &save); *encoded_length = len; if (line_break) max = length * 4 / 3 + length * 4 / (3 * 72) + 7; else max = length * 4 / 3 + 6; *decoded_length = 0; state = 0; decoder_save = 0; p = text; while (len > 0) { int chunk_len = MIN (BLOCK_SIZE, len); *decoded_length += g_base64_decode_step (p, chunk_len, data2 + *decoded_length, &state, &decoder_save); p += chunk_len; len -= chunk_len; } } static void test_incremental_with_line_breaks_for_length (gsize length) { gsize encoded_length, decoded_length, max; max = length * 4 / 3 + length * 4 / (3 * 72) + 7; test_incremental (FALSE, length, &encoded_length, &decoded_length); cut_assert (encoded_length <= max, cut_message ("Too long encoded length: got " "%" G_GSIZE_FORMAT ", expected max " "%" G_GSIZE_FORMAT, encoded_length, max)); cut_assert_equal_memory (data, length, data2, decoded_length); } static void test_incremental_no_line_breaks_for_length (gsize length) { gsize encoded_length, decoded_length, max; max = length * 4 / 3 + 6; test_incremental (FALSE, length, &encoded_length, &decoded_length); cut_assert (encoded_length <= max, cut_message ("Too long encoded length: got " "%" G_GSIZE_FORMAT ", expected max " "%" G_GSIZE_FORMAT, encoded_length, max)); cut_assert_equal_memory (data, length, data2, decoded_length); } void test_incremental_no_line_breaks1 (void) { test_incremental_no_line_breaks_for_length (DATA_SIZE); } void test_incremental_no_line_breaks2 (void) { test_incremental_no_line_breaks_for_length (DATA_SIZE - 1); } void test_incremental_no_line_breaks3 (void) { test_incremental_no_line_breaks_for_length (DATA_SIZE - 2); } void test_incremental_with_line_breaks1 (void) { test_incremental_with_line_breaks_for_length (DATA_SIZE); } void test_incremental_with_line_breaks2 (void) { test_incremental_with_line_breaks_for_length (DATA_SIZE - 1); } void test_incremental_with_line_breaks3 (void) { test_incremental_with_line_breaks_for_length (DATA_SIZE - 2); } void test_full (void) { gsize len; text = g_base64_encode (data, DATA_SIZE); data2 = g_base64_decode (text, &len); cut_assert_equal_memory (data, DATA_SIZE, data2, len); } cutter-testing-framework-1.1.7/sample/glib/Makefile.in0000644000175000017500000006606311525654634021143 0ustar koukou# 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@ 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@ @GLIB_2_12_FALSE@am__append_1 = \ @GLIB_2_12_FALSE@ test_regex.la subdir = sample/glib DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) test_array_la_LIBADD = am_test_array_la_OBJECTS = array.lo test_array_la_OBJECTS = $(am_test_array_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent test_atomic_la_LIBADD = am_test_atomic_la_OBJECTS = atomic.lo test_atomic_la_OBJECTS = $(am_test_atomic_la_OBJECTS) test_base64_la_LIBADD = am_test_base64_la_OBJECTS = base64.lo test_base64_la_OBJECTS = $(am_test_base64_la_OBJECTS) test_iochannel_la_LIBADD = am_test_iochannel_la_OBJECTS = iochannel.lo test_iochannel_la_OBJECTS = $(am_test_iochannel_la_OBJECTS) test_keyfile_la_LIBADD = am_test_keyfile_la_OBJECTS = keyfile.lo test_keyfile_la_OBJECTS = $(am_test_keyfile_la_OBJECTS) test_option_la_LIBADD = am_test_option_la_OBJECTS = option.lo test_option_la_OBJECTS = $(am_test_option_la_OBJECTS) test_regex_la_LIBADD = am_test_regex_la_OBJECTS = regex.lo test_regex_la_OBJECTS = $(am_test_regex_la_OBJECTS) @GLIB_2_12_FALSE@am_test_regex_la_rpath = test_thread_la_LIBADD = am_test_thread_la_OBJECTS = test_thread_la-thread.lo test_thread_la_OBJECTS = $(am_test_thread_la_OBJECTS) test_thread_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_thread_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ $@ test_uri_la_LIBADD = am_test_uri_la_OBJECTS = uri.lo test_uri_la_OBJECTS = $(am_test_uri_la_OBJECTS) test_utf8_pointer_la_LIBADD = am_test_utf8_pointer_la_OBJECTS = utf8-pointer.lo test_utf8_pointer_la_OBJECTS = $(am_test_utf8_pointer_la_OBJECTS) test_utf8_validate_la_LIBADD = am_test_utf8_validate_la_OBJECTS = utf8-validate.lo test_utf8_validate_la_OBJECTS = $(am_test_utf8_validate_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_array_la_SOURCES) $(test_atomic_la_SOURCES) \ $(test_base64_la_SOURCES) $(test_iochannel_la_SOURCES) \ $(test_keyfile_la_SOURCES) $(test_option_la_SOURCES) \ $(test_regex_la_SOURCES) $(test_thread_la_SOURCES) \ $(test_uri_la_SOURCES) $(test_utf8_pointer_la_SOURCES) \ $(test_utf8_validate_la_SOURCES) DIST_SOURCES = $(test_array_la_SOURCES) $(test_atomic_la_SOURCES) \ $(test_base64_la_SOURCES) $(test_iochannel_la_SOURCES) \ $(test_keyfile_la_SOURCES) $(test_option_la_SOURCES) \ $(test_regex_la_SOURCES) $(test_thread_la_SOURCES) \ $(test_uri_la_SOURCES) $(test_utf8_pointer_la_SOURCES) \ $(test_utf8_validate_la_SOURCES) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = $(CUTTER_CFLAGS) EXTRA_DIST = \ run-test.sh \ iochannel-test-infile @MAINTAINER_MODE_TRUE@TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes noinst_LTLIBRARIES = test_array.la test_atomic.la test_base64.la \ test_iochannel.la test_keyfile.la test_option.la \ test_thread.la test_utf8_pointer.la test_utf8_validate.la \ test_uri.la $(am__append_1) AM_LDFLAGS = \ -rpath `pwd`/.libs \ -module \ -avoid-version \ -no-undefined test_array_la_SOURCES = array.c test_atomic_la_SOURCES = atomic.c test_base64_la_SOURCES = base64.c test_iochannel_la_SOURCES = iochannel.c test_keyfile_la_SOURCES = keyfile.c test_option_la_SOURCES = option.c test_regex_la_SOURCES = regex.c test_thread_la_SOURCES = thread.c test_thread_la_CFLAGS = $(AM_CFLAGS) $(NO_STRICT_ALIASING_CFLAGS) test_uri_la_SOURCES = uri.c test_utf8_pointer_la_SOURCES = utf8-pointer.c test_utf8_validate_la_SOURCES = utf8-validate.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign sample/glib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign sample/glib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test_array.la: $(test_array_la_OBJECTS) $(test_array_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_array_la_OBJECTS) $(test_array_la_LIBADD) $(LIBS) test_atomic.la: $(test_atomic_la_OBJECTS) $(test_atomic_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_atomic_la_OBJECTS) $(test_atomic_la_LIBADD) $(LIBS) test_base64.la: $(test_base64_la_OBJECTS) $(test_base64_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_base64_la_OBJECTS) $(test_base64_la_LIBADD) $(LIBS) test_iochannel.la: $(test_iochannel_la_OBJECTS) $(test_iochannel_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_iochannel_la_OBJECTS) $(test_iochannel_la_LIBADD) $(LIBS) test_keyfile.la: $(test_keyfile_la_OBJECTS) $(test_keyfile_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_keyfile_la_OBJECTS) $(test_keyfile_la_LIBADD) $(LIBS) test_option.la: $(test_option_la_OBJECTS) $(test_option_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_option_la_OBJECTS) $(test_option_la_LIBADD) $(LIBS) test_regex.la: $(test_regex_la_OBJECTS) $(test_regex_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_test_regex_la_rpath) $(test_regex_la_OBJECTS) $(test_regex_la_LIBADD) $(LIBS) test_thread.la: $(test_thread_la_OBJECTS) $(test_thread_la_DEPENDENCIES) $(AM_V_CCLD)$(test_thread_la_LINK) $(test_thread_la_OBJECTS) $(test_thread_la_LIBADD) $(LIBS) test_uri.la: $(test_uri_la_OBJECTS) $(test_uri_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_uri_la_OBJECTS) $(test_uri_la_LIBADD) $(LIBS) test_utf8_pointer.la: $(test_utf8_pointer_la_OBJECTS) $(test_utf8_pointer_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_utf8_pointer_la_OBJECTS) $(test_utf8_pointer_la_LIBADD) $(LIBS) test_utf8_validate.la: $(test_utf8_validate_la_OBJECTS) $(test_utf8_validate_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_utf8_validate_la_OBJECTS) $(test_utf8_validate_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atomic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iochannel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyfile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/option.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_thread_la-thread.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uri.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8-pointer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8-validate.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< test_thread_la-thread.lo: thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_thread_la_CFLAGS) $(CFLAGS) -MT test_thread_la-thread.lo -MD -MP -MF $(DEPDIR)/test_thread_la-thread.Tpo -c -o test_thread_la-thread.lo `test -f 'thread.c' || echo '$(srcdir)/'`thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_thread_la-thread.Tpo $(DEPDIR)/test_thread_la-thread.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='thread.c' object='test_thread_la-thread.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_thread_la_CFLAGS) $(CFLAGS) -c -o test_thread_la-thread.lo `test -f 'thread.c' || echo '$(srcdir)/'`thread.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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 check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/sample/glib/Makefile.am0000644000175000017500000000224511407320436021107 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = $(CUTTER_CFLAGS) EXTRA_DIST = \ run-test.sh \ iochannel-test-infile if MAINTAINER_MODE TESTS = run-test.sh endif TESTS_ENVIRONMENT = NO_MAKE=yes noinst_LTLIBRARIES = \ test_array.la \ test_atomic.la \ test_base64.la \ test_iochannel.la \ test_keyfile.la \ test_option.la \ test_thread.la \ test_utf8_pointer.la \ test_utf8_validate.la \ test_uri.la if !GLIB_2_12 noinst_LTLIBRARIES += \ test_regex.la endif AM_LDFLAGS = \ -rpath `pwd`/.libs \ -module \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) test_array_la_SOURCES = array.c test_atomic_la_SOURCES = atomic.c test_base64_la_SOURCES = base64.c test_iochannel_la_SOURCES = iochannel.c test_keyfile_la_SOURCES = keyfile.c test_option_la_SOURCES = option.c test_regex_la_SOURCES = regex.c test_thread_la_SOURCES = thread.c test_thread_la_CFLAGS = $(AM_CFLAGS) $(NO_STRICT_ALIASING_CFLAGS) test_uri_la_SOURCES = uri.c test_utf8_pointer_la_SOURCES = utf8-pointer.c test_utf8_validate_la_SOURCES = utf8-validate.c cutter-testing-framework-1.1.7/sample/glib/atomic.c0000644000175000017500000000356011205747023020475 0ustar koukou#include #include void test_atomic (void); /* Obviously we can't test that the operations are atomic, but we can * at least test, that they do, what they ought to do */ void test_atomic (void) { gint i; gint atomic = -5; gpointer atomic_pointer = NULL; gpointer biggest_pointer = (gpointer)((gsize)atomic_pointer - 1); for (i = 0; i < 15; i++) g_atomic_int_inc (&atomic); cut_assert_equal_int (10, atomic); for (i = 0; i < 9; i++) cut_assert (!g_atomic_int_dec_and_test (&atomic)); cut_assert (g_atomic_int_dec_and_test (&atomic)); cut_assert_equal_int (0, atomic); cut_assert_equal_int (0, g_atomic_int_exchange_and_add (&atomic, 5)); cut_assert_equal_int (5, atomic); cut_assert_equal_int (5, g_atomic_int_exchange_and_add (&atomic, -10)); cut_assert_equal_int (-5, atomic); g_atomic_int_add (&atomic, 20); cut_assert_equal_int (15, atomic); g_atomic_int_add (&atomic, -35); cut_assert_equal_int (-20, atomic); cut_assert_equal_int (atomic, g_atomic_int_get (&atomic)); cut_assert (g_atomic_int_compare_and_exchange (&atomic, -20, 20)); cut_assert_equal_int (20, atomic); cut_assert (!g_atomic_int_compare_and_exchange (&atomic, 42, 12)); cut_assert_equal_int (20, atomic); cut_assert (g_atomic_int_compare_and_exchange (&atomic, 20, G_MAXINT)); cut_assert_equal_int (G_MAXINT, atomic); cut_assert (g_atomic_int_compare_and_exchange (&atomic, G_MAXINT, G_MININT)); cut_assert_equal_int (G_MININT, atomic); cut_assert (g_atomic_pointer_compare_and_exchange (&atomic_pointer, NULL, biggest_pointer)); cut_assert_equal_pointer (biggest_pointer, atomic_pointer); cut_assert_equal_pointer (atomic_pointer, g_atomic_pointer_get (&atomic_pointer)); cut_assert (g_atomic_pointer_compare_and_exchange (&atomic_pointer, biggest_pointer, NULL)); cut_assert (biggest_pointer); } cutter-testing-framework-1.1.7/sample/gtk+/0000755000175000017500000000000011525707420016776 5ustar koukoucutter-testing-framework-1.1.7/sample/gtk+/floating.c0000644000175000017500000000403611205747022020745 0ustar koukou/* floatingtest.c - test floating flag uses * Copyright (C) 2005 Tim Janik * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include void test_floating (void); static gboolean destroyed = FALSE; static void destroy (void) { destroyed = TRUE; } void setup (void) { } void teardown (void) { } void test_floating (void) { GtkWidget *widget; widget = g_object_new (GTK_TYPE_LABEL, NULL); g_object_connect (widget, "signal::destroy", destroy, NULL, NULL); cut_assert (GTK_OBJECT_FLOATING (widget)); cut_assert (g_object_is_floating (widget)); GTK_OBJECT_UNSET_FLAGS (widget, GTK_FLOATING); cut_assert (!GTK_OBJECT_FLOATING (widget)); cut_assert (!g_object_is_floating (widget)); GTK_OBJECT_SET_FLAGS (widget, GTK_FLOATING); cut_assert (GTK_OBJECT_FLOATING (widget)); cut_assert (g_object_is_floating (widget)); g_object_ref_sink (widget); cut_assert (!GTK_OBJECT_FLOATING (widget)); cut_assert (!g_object_is_floating (widget)); g_object_force_floating (G_OBJECT (widget)); cut_assert (GTK_OBJECT_FLOATING (widget)); cut_assert (g_object_is_floating (widget)); g_object_ref (widget); gtk_object_sink (GTK_OBJECT (widget)); cut_assert (!GTK_OBJECT_FLOATING (widget)); cut_assert (!g_object_is_floating (widget)); cut_assert (!destroyed); g_object_unref (widget); cut_assert (destroyed); } cutter-testing-framework-1.1.7/sample/gtk+/suite_gtk_test.c0000644000175000017500000000015611205747022022176 0ustar koukou#include void gtk_test_warmup (void); void gtk_test_warmup (void) { gtk_init(NULL, NULL); } cutter-testing-framework-1.1.7/sample/gtk+/run-test.sh0000755000175000017500000000164111424022511021105 0ustar koukou#!/bin/sh export BASE_DIR="`dirname $0`" if test x"$RUNNING_TEST" = x"yes"; then exit 0 fi if test x"$NO_MAKE" != x"yes"; then RUNNING_TEST=yes export RUNNING_TEST make -C $BASE_DIR/../../ check > /dev/null || exit 1 fi export CUT_UI_MODULE_DIR=$BASE_DIR/../../module/ui/.libs export CUT_UI_FACTORY_MODULE_DIR=$BASE_DIR/../../module/ui/.libs export CUT_REPORT_MODULE_DIR=$BASE_DIR/../../module/report/.libs export CUT_REPORT_FACTORY_MODULE_DIR=$BASE_DIR/../../module/report/.libs export CUT_STREAM_MODULE_DIR=$BASE_DIR/../../module/stream/.libs export CUT_STREAM_FACTORY_MODULE_DIR=$BASE_DIR/../../module/stream/.libs CUTTER=$BASE_DIR/../../cutter/cutter if test x"$CUTTER_DEBUG" = x"yes"; then CUTTER="$BASE_DIR/../../libtool --mode=execute gdb --args $CUTTER" fi CUTTER_ARGS="-s $BASE_DIR" if test x"$USE_GTK" = x"yes"; then CUTTER_ARGS="-u gtk $CUTTER_ARGS" fi $CUTTER $CUTTER_ARGS "$@" $BASE_DIR cutter-testing-framework-1.1.7/sample/gtk+/Makefile.in0000644000175000017500000005376011525654634021066 0ustar koukou# 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@ 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@ subdir = sample/gtk+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) suite_gtk_test_la_LIBADD = am_suite_gtk_test_la_OBJECTS = suite_gtk_test.lo suite_gtk_test_la_OBJECTS = $(am_suite_gtk_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent test_builder_la_LIBADD = am_test_builder_la_OBJECTS = builder.lo test_builder_la_OBJECTS = $(am_test_builder_la_OBJECTS) test_floating_la_LIBADD = am_test_floating_la_OBJECTS = floating.lo test_floating_la_OBJECTS = $(am_test_floating_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(suite_gtk_test_la_SOURCES) $(test_builder_la_SOURCES) \ $(test_floating_la_SOURCES) DIST_SOURCES = $(suite_gtk_test_la_SOURCES) $(test_builder_la_SOURCES) \ $(test_floating_la_SOURCES) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GTK_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ @MAINTAINER_MODE_TRUE@TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes EXTRA_DIST = run-test.sh INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(GTK_CFLAGS) AM_LDFLAGS = \ -rpath $(libdir) \ -module \ -avoid-version \ -no-undefined noinst_LTLIBRARIES = \ suite_gtk_test.la \ test_builder.la \ test_floating.la suite_gtk_test_la_SOURCES = suite_gtk_test.c test_builder_la_SOURCES = builder.c test_floating_la_SOURCES = floating.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign sample/gtk+/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign sample/gtk+/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done suite_gtk_test.la: $(suite_gtk_test_la_OBJECTS) $(suite_gtk_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(suite_gtk_test_la_OBJECTS) $(suite_gtk_test_la_LIBADD) $(LIBS) test_builder.la: $(test_builder_la_OBJECTS) $(test_builder_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_builder_la_OBJECTS) $(test_builder_la_LIBADD) $(LIBS) test_floating.la: $(test_floating_la_OBJECTS) $(test_floating_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_floating_la_OBJECTS) $(test_floating_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/builder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/floating.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suite_gtk_test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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 check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/sample/gtk+/builder.c0000644000175000017500000016350111424022511020563 0ustar koukou/* -*- c-file-style: "gnu" -*- */ /* buildertest.c * Copyright (C) 2006-2007 Async Open Source * Authors: Johan Dahlin * Henrique Romano * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include void test_parser (void); void test_connect_signals (void); void test_value_from_string (void); void test_uimanager_simple (void); void test_domain (void); void test_sizegroup (void); void test_list_store (void); void test_tree_store (void); void test_types (void); void test_spin_button (void); void test_notebook (void); void test_construct_only_property (void); void test_object_properties (void); void test_children (void); void test_child_properties (void); void test_treeview_column (void); void test_icon_view (void); void test_combo_box (void); void test_combo_box_entry (void); void test_cell_view (void); void test_dialog (void); void test_accelerators (void); void test_widget (void); void test_window (void); void test_reference_counting (void); void signal_normal (GtkWindow *window, GParamSpec spec); void signal_after (GtkWindow *window, GParamSpec spec); void signal_object (GtkButton *button, GParamSpec spec); void signal_object_after (GtkButton *button, GParamSpec spec); void signal_first (GtkButton *button, GParamSpec spec); void signal_second (GtkButton *button, GParamSpec spec); void signal_extra (GtkButton *button, GParamSpec spec); void signal_extra2 (GtkButton *button, GParamSpec spec); static GtkBuilder *builder = NULL; void setup (void) { builder = NULL; } void teardown (void) { if (builder) g_object_unref (builder); } static GtkBuilder * builder_new_from_string (const gchar *buffer, gsize length, gchar *domain) { GtkBuilder *new_builder; new_builder = gtk_builder_new (); if (domain) gtk_builder_set_translation_domain (new_builder, domain); gtk_builder_add_from_string (new_builder, buffer, length, NULL); return new_builder; } void test_parser (void) { GError *error; builder = gtk_builder_new (); error = NULL; gtk_builder_add_from_string (builder, "", -1, &error); cut_assert (error); cut_assert_equal_int (GTK_BUILDER_ERROR, error->domain); cut_assert_equal_int (GTK_BUILDER_ERROR_UNHANDLED_TAG, error->code); g_error_free (error); error = NULL; gtk_builder_add_from_string (builder, "", -1, &error); cut_assert (error); cut_assert_equal_int (GTK_BUILDER_ERROR, error->domain); cut_assert_equal_int (GTK_BUILDER_ERROR_INVALID_ATTRIBUTE, error->code); g_error_free (error); error = NULL; gtk_builder_add_from_string (builder, "", -1, &error); cut_assert (error); cut_assert_equal_int (GTK_BUILDER_ERROR, error->domain); cut_assert_equal_int (GTK_BUILDER_ERROR_INVALID_TAG, error->code); error = NULL; gtk_builder_add_from_string (builder, "", -1, &error); cut_assert (error); cut_assert_equal_int (GTK_BUILDER_ERROR, error->domain); cut_assert_equal_int (GTK_BUILDER_ERROR_INVALID_TAG, error->code); g_error_free (error); g_object_unref (builder); builder = NULL; } static int normal; static int after; static int object; static int object_after; void signal_normal (GtkWindow *window, GParamSpec spec) { cut_assert (GTK_IS_WINDOW (window)); cut_assert_equal_int (0, normal); cut_assert_equal_int (0, after); normal++; } void signal_after (GtkWindow *window, GParamSpec spec) { cut_assert (GTK_IS_WINDOW (window)); cut_assert_equal_int (1, normal); cut_assert_equal_int (0, after); after++; } void signal_object (GtkButton *button, GParamSpec spec) { cut_assert (GTK_IS_BUTTON (button)); cut_assert_equal_int (0, object); cut_assert_equal_int (0, object_after); object++; } void signal_object_after (GtkButton *button, GParamSpec spec) { cut_assert (GTK_IS_BUTTON (button)); cut_assert_equal_int (1, object); cut_assert_equal_int (0, object_after); object_after++; } void signal_first (GtkButton *button, GParamSpec spec) { cut_assert_equal_int (0, normal); normal = 10; } void signal_second (GtkButton *button, GParamSpec spec) { cut_assert_equal_int (10, normal); normal = 20; } void signal_extra (GtkButton *button, GParamSpec spec) { cut_assert_equal_int (20, normal); normal = 30; } void signal_extra2 (GtkButton *button, GParamSpec spec) { cut_assert_equal_int (30, normal); normal = 40; } static void connect_signals (GtkBuilder *gtk_builder, GObject *object, const gchar *signal_name, const gchar *handler_name, GObject *connect_object, GConnectFlags flags, gpointer user_data) { GCallback func; GModule *module; module = g_module_open ("test_builder.so", G_MODULE_BIND_LAZY); if (!g_module_symbol (module, handler_name, (gpointer)&func)) { g_warning ("Could not find signal handler '%s'", handler_name); return; } if (connect_object) g_signal_connect_object (object, signal_name, func, connect_object, flags); else g_signal_connect_data (object, signal_name, func, user_data, NULL, flags); g_module_close (module); } void test_connect_signals (void) { GObject *window; const gchar buffer[] = "" " " " " " " " " " " " " " " ""; const gchar buffer_order[] = "" " " " " " " " " ""; const gchar buffer_extra[] = "" " " " " " " ""; const gchar buffer_extra2[] = "" " " " " " " ""; const gchar buffer_after_child[] = "" " " " " " " " " " " " " ""; if (!GTK_CHECK_VERSION(2,12,2)) cut_pending("The following tests fail on GTK+-2.12.1"); builder = builder_new_from_string (buffer, -1, NULL); gtk_builder_connect_signals_full (builder, connect_signals, NULL); window = gtk_builder_get_object (builder, "window1"); gtk_window_set_title (GTK_WINDOW (window), "test"); cut_assert_equal_int (1, normal); cut_assert_equal_int (1, after); cut_assert_equal_int (1, object); cut_assert_equal_int (1, object_after); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = builder_new_from_string (buffer_order, -1, NULL); gtk_builder_connect_signals_full (builder, connect_signals, NULL); window = gtk_builder_get_object (builder, "window1"); normal = 0; gtk_window_set_title (GTK_WINDOW (window), "test"); cut_assert_equal_int (20, normal); gtk_widget_destroy (GTK_WIDGET (window)); gtk_builder_add_from_string (builder, buffer_extra, strlen (buffer_extra), NULL); gtk_builder_add_from_string (builder, buffer_extra2, strlen (buffer_extra2), NULL); gtk_builder_connect_signals_full (builder, connect_signals, NULL); window = gtk_builder_get_object (builder, "window2"); gtk_window_set_title (GTK_WINDOW (window), "test"); cut_assert_equal_int (30, normal); gtk_widget_destroy (GTK_WIDGET (window)); window = gtk_builder_get_object (builder, "window3"); gtk_window_set_title (GTK_WINDOW (window), "test"); cut_assert_equal_int (40, normal); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); /* new test, reset globals */ after = 0; normal = 0; builder = builder_new_from_string (buffer_after_child, -1, NULL); gtk_builder_connect_signals_full (builder, connect_signals, NULL); window = gtk_builder_get_object (builder, "window1"); gtk_window_set_title (GTK_WINDOW (window), "test"); cut_assert_equal_int (1, normal); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = NULL; } void test_uimanager_simple (void) { GObject *window, *uimgr, *menubar; GObject *menu, *label; GList *children; const gchar buffer[] = "" " " ""; const gchar buffer2[] = "" " " " " " " " " " " " _File" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; builder = builder_new_from_string (buffer, -1, NULL); uimgr = gtk_builder_get_object (builder, "uimgr1"); cut_assert (uimgr); cut_assert (GTK_IS_UI_MANAGER (uimgr)); g_object_unref (builder); builder = NULL; builder = builder_new_from_string (buffer2, -1, NULL); menubar = gtk_builder_get_object (builder, "menubar1"); cut_assert (menubar != NULL); cut_assert (GTK_IS_MENU_BAR (menubar)); children = gtk_container_get_children (GTK_CONTAINER (menubar)); menu = children->data; cut_assert (menu != NULL); cut_assert (GTK_IS_MENU_ITEM (menu)); cut_assert_equal_string ("file", GTK_WIDGET (menu)->name); g_list_free (children); label = G_OBJECT (GTK_BIN (menu)->child); cut_assert (label != NULL); cut_assert (GTK_IS_LABEL (label)); cut_assert_equal_string ("File", gtk_label_get_text (GTK_LABEL (label))); window = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = NULL; } void test_domain (void) { const gchar buffer1[] = ""; const gchar buffer2[] = ""; const gchar *domain; builder = builder_new_from_string (buffer1, -1, NULL); domain = gtk_builder_get_translation_domain (builder); cut_assert (domain == NULL); g_object_unref (builder); builder = NULL; builder = builder_new_from_string (buffer1, -1, "domain-1"); domain = gtk_builder_get_translation_domain (builder); cut_assert (domain); cut_assert_equal_string ("domain-1", domain); g_object_unref (builder); builder = NULL; builder = builder_new_from_string (buffer2, -1, NULL); domain = gtk_builder_get_translation_domain (builder); cut_assert_equal_string (NULL, domain); g_object_unref (builder); builder = NULL; } #if 0 void test_translation (void) { GtkBuilder *builder; const gchar buffer[] = "" " " " " " " " File" " " " " " " ""; GtkLabel *window, *label; setlocale (LC_ALL, "sv_SE"); textdomain ("builder"); bindtextdomain ("builder", "tests"); builder = builder_new_from_string (buffer, -1, NULL); label = GTK_LABEL (gtk_builder_get_object (builder, "label")); cut_assert (strcmp (gtk_label_get_text (label), "Arkiv") == 0); window = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = NULL; } #endif void test_sizegroup (void) { const gchar buffer1[] = "" " " " GTK_SIZE_GROUP_HORIZONTAL" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; const gchar buffer2[] = "" " " " GTK_SIZE_GROUP_HORIZONTAL" " " " " " " ""; const gchar buffer3[] = "" " " " GTK_SIZE_GROUP_HORIZONTAL" " " " " " " " " " " " " " GTK_SIZE_GROUP_HORIZONTAL" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; GObject *sizegroup; GSList *widgets; builder = builder_new_from_string (buffer1, -1, NULL); sizegroup = gtk_builder_get_object (builder, "sizegroup1"); widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup)); cut_assert_equal_int (2, g_slist_length (widgets)); g_slist_free (widgets); g_object_unref (builder); builder = builder_new_from_string (buffer2, -1, NULL); sizegroup = gtk_builder_get_object (builder, "sizegroup1"); widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup)); cut_assert_equal_int (0, g_slist_length (widgets)); g_slist_free (widgets); g_object_unref (builder); builder = builder_new_from_string (buffer3, -1, NULL); sizegroup = gtk_builder_get_object (builder, "sizegroup1"); widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup)); cut_assert_equal_int (2, g_slist_length (widgets)); g_slist_free (widgets); sizegroup = gtk_builder_get_object (builder, "sizegroup2"); widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (sizegroup)); cut_assert_equal_int (2, g_slist_length (widgets)); g_slist_free (widgets); #if 0 { GObject *window; window = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window)); } #endif g_object_unref (builder); builder = NULL; } void test_list_store (void) { const gchar buffer1[] = "" " " " " " " " " " " " " ""; const char buffer2[] = "" " " " " " " " " " " " " " " " " " John" " Doe" " 25" " " " " " Johan" " Dole" " 50" " " " " " " ""; GObject *store; GtkTreeIter iter; gchar *surname, *lastname; int age; builder = builder_new_from_string (buffer1, -1, NULL); store = gtk_builder_get_object (builder, "liststore1"); cut_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2); cut_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING); cut_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT); g_object_unref (builder); builder = builder_new_from_string (buffer2, -1, NULL); store = gtk_builder_get_object (builder, "liststore1"); cut_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 3); cut_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING); cut_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_STRING); cut_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 2) == G_TYPE_INT); cut_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter) == TRUE); gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 0, &surname, 1, &lastname, 2, &age, -1); cut_assert (surname != NULL); cut_assert_equal_string ("John", surname); g_free (surname); cut_assert (lastname != NULL); cut_assert_equal_string ("Doe", lastname); g_free (lastname); cut_assert_equal_int (25, age); cut_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE); gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 0, &surname, 1, &lastname, 2, &age, -1); cut_assert (surname != NULL); cut_assert_equal_string ("Johan", surname); g_free (surname); cut_assert (lastname != NULL); cut_assert_equal_string ("Dole", lastname); g_free (lastname); cut_assert_equal_int (50, age); cut_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE); g_object_unref (builder); builder = NULL; } void test_tree_store (void) { const gchar buffer[] = "" " " " " " " " " " " " " ""; GObject *store; builder = builder_new_from_string (buffer, -1, NULL); store = gtk_builder_get_object (builder, "treestore1"); cut_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 2); cut_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING); cut_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_UINT); g_object_unref (builder); builder = NULL; } void test_types (void) { const gchar buffer[] = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; const gchar buffer2[] = "" " " ""; const gchar buffer3[] = "" " " ""; GObject *window; GError *error; builder = builder_new_from_string (buffer, -1, NULL); gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "dialog"))); gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "window"))); g_object_unref (builder); builder = builder_new_from_string (buffer2, -1, NULL); window = gtk_builder_get_object (builder, "window"); cut_assert (window != NULL); cut_assert (GTK_IS_WINDOW (window)); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); error = NULL; builder = gtk_builder_new (); gtk_builder_add_from_string (builder, buffer3, -1, &error); cut_assert (error != NULL); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION); g_error_free (error); g_object_unref (builder); builder = NULL; } void test_spin_button (void) { const gchar buffer[] = "" "" "0" "10" "2" "3" "5" "1" "" "" "True" "adjustment1" "" ""; GObject *object; GtkAdjustment *adjustment; gdouble value; builder = builder_new_from_string (buffer, -1, NULL); object = gtk_builder_get_object (builder, "spinbutton1"); cut_assert (GTK_IS_SPIN_BUTTON (object)); adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (object)); cut_assert (GTK_IS_ADJUSTMENT (adjustment)); g_object_get (adjustment, "value", &value, NULL); cut_assert_equal_int (1, value); g_object_get (adjustment, "lower", &value, NULL); cut_assert_equal_int (0, value); g_object_get (adjustment, "upper", &value, NULL); cut_assert_equal_int (10, value); g_object_get (adjustment, "step-increment", &value, NULL); cut_assert_equal_int (2, value); g_object_get (adjustment, "page-increment", &value, NULL); cut_assert_equal_int (3, value); g_object_get (adjustment, "page-size", &value, NULL); cut_assert_equal_int (5, value); g_object_unref (builder); builder = NULL; } void test_notebook (void) { const gchar buffer[] = "" " " " " " " " label1" " " " " " " " " " tab_label1" " " " " " " " " " label2" " " " " " " " " " tab_label2" " " " " " " ""; GObject *notebook; GtkWidget *label; builder = builder_new_from_string (buffer, -1, NULL); notebook = gtk_builder_get_object (builder, "notebook1"); cut_assert (notebook != NULL); cut_assert (gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)) == 2); label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0); cut_assert (GTK_IS_LABEL (label)); cut_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "label1") == 0); label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label); cut_assert (GTK_IS_LABEL (label)); cut_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "tab_label1") == 0); label = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1); cut_assert (GTK_IS_LABEL (label)); cut_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "label2") == 0); label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), label); cut_assert (GTK_IS_LABEL (label)); cut_assert (strcmp (gtk_label_get_label (GTK_LABEL (label)), "tab_label2") == 0); g_object_unref (builder); builder = NULL; } void test_construct_only_property (void) { const gchar buffer[] = "" " " " GTK_WINDOW_POPUP" " " ""; const gchar buffer2[] = "" " " " " " tagtable1" " " ""; GObject *widget, *tagtable, *textbuffer; GtkWindowType type; builder = builder_new_from_string (buffer, -1, NULL); widget = gtk_builder_get_object (builder, "window1"); g_object_get (widget, "type", &type, NULL); cut_assert (type == GTK_WINDOW_POPUP); gtk_widget_destroy (GTK_WIDGET (widget)); g_object_unref (builder); builder = builder_new_from_string (buffer2, -1, NULL); textbuffer = gtk_builder_get_object (builder, "textbuffer1"); cut_assert (textbuffer != NULL); g_object_get (textbuffer, "tag-table", &tagtable, NULL); cut_assert (tagtable == gtk_builder_get_object (builder, "tagtable1")); g_object_unref (tagtable); g_object_unref (builder); builder = NULL; } void test_object_properties (void) { const gchar buffer[] = "" " " " " " " " 10" " " " " " spinbutton1" " " " " " " " " " " " " " " " " ""; GObject *label, *spinbutton; builder = builder_new_from_string (buffer, -1, NULL); label = gtk_builder_get_object (builder, "label1"); cut_assert (label != NULL); spinbutton = gtk_builder_get_object (builder, "spinbutton1"); cut_assert (spinbutton != NULL); cut_assert (spinbutton == (GObject*)gtk_label_get_mnemonic_widget (GTK_LABEL (label))); g_object_unref (builder); builder = NULL; } void test_children (void) { GList *children; const gchar buffer1[] = "" " " " " " " " Hello" " " " " " " ""; const gchar buffer2[] = "" " " " " " " " 10" " " " " " 20" " " " " " " " " " " ""; GObject *window, *button; GObject *dialog, *vbox, *action_area; builder = builder_new_from_string (buffer1, -1, NULL); window = gtk_builder_get_object (builder, "window1"); cut_assert (window != NULL); cut_assert (GTK_IS_WINDOW (window)); button = gtk_builder_get_object (builder, "button1"); cut_assert (button != NULL); cut_assert (GTK_IS_BUTTON (button)); cut_assert (strcmp (gtk_buildable_get_name (GTK_BUILDABLE (GTK_WIDGET (button)->parent)), "window1") == 0); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = builder_new_from_string (buffer2, -1, NULL); dialog = gtk_builder_get_object (builder, "dialog1"); cut_assert (dialog != NULL); cut_assert (GTK_IS_DIALOG (dialog)); children = gtk_container_get_children (GTK_CONTAINER (dialog)); cut_assert_equal_int (1, g_list_length (children)); g_list_free (children); vbox = gtk_builder_get_object (builder, "dialog1-vbox"); cut_assert (vbox != NULL); cut_assert (GTK_IS_VBOX (vbox)); cut_assert (GTK_WIDGET (vbox)->parent != NULL); cut_assert (strcmp (gtk_buildable_get_name (GTK_BUILDABLE (GTK_WIDGET (vbox)->parent)), "dialog1") == 0); cut_assert (GTK_CONTAINER (vbox)->border_width == 10); cut_assert (strcmp (gtk_buildable_get_name (GTK_BUILDABLE (GTK_DIALOG (dialog)->vbox)), "dialog1-vbox") == 0); action_area = gtk_builder_get_object (builder, "dialog1-action_area"); cut_assert (action_area != NULL); cut_assert (GTK_IS_HBUTTON_BOX (action_area)); cut_assert (GTK_WIDGET (action_area)->parent != NULL); cut_assert (GTK_CONTAINER (action_area)->border_width == 20); cut_assert (GTK_DIALOG (dialog)->action_area != NULL); cut_assert (gtk_buildable_get_name (GTK_BUILDABLE (GTK_DIALOG (dialog)->action_area)) != NULL); cut_assert (strcmp (gtk_buildable_get_name (GTK_BUILDABLE (GTK_DIALOG (dialog)->action_area)), "dialog1-action_area") == 0); gtk_widget_destroy (GTK_WIDGET (dialog)); g_object_unref (builder); builder = NULL; } void test_child_properties (void) { const gchar buffer1[] = "" " " " " " " " " " start" " " " " " " " " " " " end" " " " " " " ""; GObject *label, *vbox; GtkPackType pack_type; builder = builder_new_from_string (buffer1, -1, NULL); vbox = gtk_builder_get_object (builder, "vbox1"); cut_assert (GTK_IS_VBOX (vbox)); label = gtk_builder_get_object (builder, "label1"); cut_assert (GTK_IS_LABEL (label)); gtk_container_child_get (GTK_CONTAINER (vbox), GTK_WIDGET (label), "pack-type", &pack_type, NULL); cut_assert (pack_type == GTK_PACK_START); label = gtk_builder_get_object (builder, "label2"); cut_assert (GTK_IS_LABEL (label)); gtk_container_child_get (GTK_CONTAINER (vbox), GTK_WIDGET (label), "pack-type", &pack_type, NULL); cut_assert (pack_type == GTK_PACK_END); g_object_unref (builder); builder = NULL; } void test_treeview_column (void) { const gchar buffer[] = "" "" " " " " " " " " " " " " " John" " 25" " " " " "" "" " " " " " True" " liststore1" " " " " " Test" " " " " " " " 1" " " " " " " " " " " " " " Number" " " " " " " " 0" " " " " " " " " " " " " "" ""; GObject *window, *treeview; GtkTreeViewColumn *column; GList *renderers; GObject *renderer; gchar *text; builder = builder_new_from_string (buffer, -1, NULL); treeview = gtk_builder_get_object (builder, "treeview1"); cut_assert (treeview); cut_assert (GTK_IS_TREE_VIEW (treeview)); column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), 0); cut_assert (GTK_IS_TREE_VIEW_COLUMN (column)); cut_assert_equal_string ("Test", gtk_tree_view_column_get_title (column)); renderers = gtk_tree_view_column_get_cell_renderers (column); cut_assert_equal_int (1, g_list_length (renderers)); renderer = g_list_nth_data (renderers, 0); cut_assert (renderer); cut_assert (GTK_IS_CELL_RENDERER_TEXT (renderer)); g_list_free (renderers); gtk_widget_realize (GTK_WIDGET (treeview)); renderer = gtk_builder_get_object (builder, "renderer1"); g_object_get (renderer, "text", &text, NULL); cut_assert (text); cut_assert_equal_string ("25", text); g_free (text); renderer = gtk_builder_get_object (builder, "renderer2"); g_object_get (renderer, "text", &text, NULL); cut_assert (text); cut_assert_equal_string ("John", text); g_free (text); gtk_widget_unrealize (GTK_WIDGET (treeview)); window = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = NULL; } void test_icon_view (void) { const gchar buffer[] = "" " " " " " " " " " " " " " " " test" " " " " " " " " " " " " " liststore1" " 0" " 1" " True" " " " " " " " 0" " " " " " " " " " " ""; GObject *window, *iconview, *renderer; gchar *text; builder = builder_new_from_string (buffer, -1, NULL); iconview = gtk_builder_get_object (builder, "iconview1"); cut_assert (iconview); cut_assert (GTK_IS_ICON_VIEW (iconview)); gtk_widget_realize (GTK_WIDGET (iconview)); renderer = gtk_builder_get_object (builder, "renderer1"); g_object_get (renderer, "text", &text, NULL); cut_assert (text); cut_assert_equal_string ("test", text); g_free (text); window = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = NULL; } void test_combo_box (void) { const gchar buffer[] = "" " " " " " " " " " " " " " " " 1" " Foo" " " " " " 2" " Bar" " " " " " " " " " " " " " liststore1" " True" " " " " " " " 0" " " " " " " " " " " " 1" " " " " " " " " " " ""; GObject *window, *combobox, *renderer; gchar *text; builder = builder_new_from_string (buffer, -1, NULL); combobox = gtk_builder_get_object (builder, "combobox1"); cut_assert (combobox); gtk_widget_realize (GTK_WIDGET (combobox)); renderer = gtk_builder_get_object (builder, "renderer2"); cut_assert (renderer); g_object_get (renderer, "text", &text, NULL); cut_assert (text); cut_assert_equal_string ("Bar", text); g_free (text); renderer = gtk_builder_get_object (builder, "renderer1"); cut_assert (renderer); g_object_get (renderer, "text", &text, NULL); cut_assert (text); cut_assert_equal_string ("2", text); g_free (text); window = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = NULL; } void test_combo_box_entry (void) { const gchar buffer[] = "" " " " " " " " " " " " " " " " 1" " Foo" " " " " " 2" " Bar" " " " " " " " " " " " " " liststore1" " True" " " " " " " " 0" " " " " " " " " " " " 1" " " " " " " " " " " ""; GObject *window, *combobox, *renderer; gchar *text; builder = builder_new_from_string (buffer, -1, NULL); combobox = gtk_builder_get_object (builder, "comboboxentry1"); cut_assert (combobox); renderer = gtk_builder_get_object (builder, "renderer2"); cut_assert (renderer); g_object_get (renderer, "text", &text, NULL); cut_assert (text); cut_assert_equal_string ("Bar", text); g_free (text); renderer = gtk_builder_get_object (builder, "renderer1"); cut_assert (renderer); g_object_get (renderer, "text", &text, NULL); cut_assert (text); cut_assert_equal_string ("2", text); g_free (text); window = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = NULL; } void test_cell_view (void) { gchar *buffer = "" " " " " " " " " " " " " " test" " " " " " " " " " " " " " True" " liststore1" " " " " " " " 0" " " " " " " " " " " ""; GObject *cellview; GObject *model, *window; GtkTreePath *path; GList *renderers; GObject *renderer; gchar *text; builder = builder_new_from_string (buffer, -1, NULL); cellview = gtk_builder_get_object (builder, "cellview1"); cut_assert (builder); cut_assert (cellview); cut_assert (GTK_IS_CELL_VIEW (cellview)); g_object_get (cellview, "model", &model, NULL); cut_assert (model); cut_assert (GTK_IS_TREE_MODEL (model)); g_object_unref (model); path = gtk_tree_path_new_first (); gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (cellview), path); renderers = gtk_cell_view_get_cell_renderers (GTK_CELL_VIEW (cellview)); cut_assert (renderers); cut_assert_equal_int (1, g_list_length (renderers)); gtk_widget_realize (GTK_WIDGET (cellview)); renderer = g_list_nth_data (renderers, 0); g_list_free (renderers); cut_assert (renderer); g_object_get (renderer, "text", &text, NULL); cut_assert_equal_string ("test", text); g_free (text); gtk_tree_path_free (path); window = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); builder = NULL; } void test_dialog (void) { const gchar buffer1[] = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " button_ok" " button_cancel" " " " " ""; GObject *dialog1; GObject *button_ok; GObject *button_cancel; builder = builder_new_from_string (buffer1, -1, NULL); dialog1 = gtk_builder_get_object (builder, "dialog1"); button_ok = gtk_builder_get_object (builder, "button_ok"); cut_assert_equal_int (3, gtk_dialog_get_response_for_widget (GTK_DIALOG (dialog1), GTK_WIDGET (button_ok))); button_cancel = gtk_builder_get_object (builder, "button_cancel"); cut_assert_equal_int (-5, gtk_dialog_get_response_for_widget (GTK_DIALOG (dialog1), GTK_WIDGET (button_cancel))); gtk_widget_destroy (GTK_WIDGET (dialog1)); g_object_unref (builder); builder = NULL; } void test_accelerators (void) { gchar *buffer = "" " " " " " " " " " " " " " " ""; gchar *buffer2 = "" " " " " " " " " " " " " " " " " ""; GObject *window1; GSList *accel_groups; GObject *accel_group; builder = builder_new_from_string (buffer, -1, NULL); window1 = gtk_builder_get_object (builder, "window1"); cut_assert (window1); cut_assert (GTK_IS_WINDOW (window1)); accel_groups = gtk_accel_groups_from_object (window1); cut_assert_equal_int (1, g_slist_length (accel_groups)); accel_group = g_slist_nth_data (accel_groups, 0); cut_assert (accel_group); gtk_widget_destroy (GTK_WIDGET (window1)); g_object_unref (builder); builder = builder_new_from_string (buffer2, -1, NULL); window1 = gtk_builder_get_object (builder, "window1"); cut_assert (window1); cut_assert (GTK_IS_WINDOW (window1)); accel_groups = gtk_accel_groups_from_object (window1); cut_assert_equal_int (1, g_slist_length (accel_groups)); accel_group = g_slist_nth_data (accel_groups, 0); cut_assert (accel_group); gtk_widget_destroy (GTK_WIDGET (window1)); g_object_unref (builder); builder = NULL; } void test_widget (void) { gchar *buffer = "" " " " " " " " True" " True" " " " " " " ""; gchar *buffer2 = "" " " " " " " " True" " True" " " " " " " ""; GObject *window1, *button1; builder = builder_new_from_string (buffer, -1, NULL); button1 = gtk_builder_get_object (builder, "button1"); #if 0 cut_assert (GTK_WIDGET_HAS_FOCUS (GTK_WIDGET (button1))); #endif window1 = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window1)); g_object_unref (builder); builder = builder_new_from_string (buffer2, -1, NULL); button1 = gtk_builder_get_object (builder, "button1"); cut_assert (GTK_WIDGET_RECEIVES_DEFAULT (GTK_WIDGET (button1))); window1 = gtk_builder_get_object (builder, "window1"); gtk_widget_destroy (GTK_WIDGET (window1)); g_object_unref (builder); builder = NULL; } void test_window (void) { gchar *buffer1 = "" " " " " " " ""; gchar *buffer2 = "" " " " " ""; GObject *window1; gchar *title; builder = builder_new_from_string (buffer1, -1, NULL); window1 = gtk_builder_get_object (builder, "window1"); g_object_get (window1, "title", &title, NULL); cut_assert_equal_string ("", title); g_free (title); gtk_widget_destroy (GTK_WIDGET (window1)); g_object_unref (builder); builder = builder_new_from_string (buffer2, -1, NULL); window1 = gtk_builder_get_object (builder, "window1"); g_object_get (window1, "title", &title, NULL); cut_assert_null (title); gtk_widget_destroy (GTK_WIDGET (window1)); g_object_unref (builder); builder = NULL; } void test_value_from_string (void) { GValue value = { 0 }; GError *error = NULL; cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_STRING, "test", &value, &error)); cut_assert (G_VALUE_HOLDS_STRING (&value)); cut_assert_equal_string ("test", g_value_get_string (&value)); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "true", &value, &error)); cut_assert (G_VALUE_HOLDS_BOOLEAN (&value)); cut_assert (g_value_get_boolean (&value) == TRUE); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "false", &value, &error)); cut_assert (G_VALUE_HOLDS_BOOLEAN (&value)); cut_assert (g_value_get_boolean (&value) == FALSE); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "yes", &value, &error)); cut_assert (G_VALUE_HOLDS_BOOLEAN (&value)); cut_assert (g_value_get_boolean (&value) == TRUE); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "no", &value, &error)); cut_assert (G_VALUE_HOLDS_BOOLEAN (&value)); cut_assert (g_value_get_boolean (&value) == FALSE); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "0", &value, &error)); cut_assert (G_VALUE_HOLDS_BOOLEAN (&value)); cut_assert (g_value_get_boolean (&value) == FALSE); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "1", &value, &error)); cut_assert (G_VALUE_HOLDS_BOOLEAN (&value)); cut_assert (g_value_get_boolean (&value) == TRUE); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "tRuE", &value, &error)); cut_assert (G_VALUE_HOLDS_BOOLEAN (&value)); cut_assert (g_value_get_boolean (&value) == TRUE); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "blaurgh", &value, &error) == FALSE); cut_assert (error != NULL); g_value_unset (&value); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); g_error_free (error); error = NULL; cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "yess", &value, &error) == FALSE); g_value_unset (&value); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); g_error_free (error); error = NULL; cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "trueee", &value, &error) == FALSE); g_value_unset (&value); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); g_error_free (error); error = NULL; cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_BOOLEAN, "", &value, &error) == FALSE); g_value_unset (&value); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); g_error_free (error); error = NULL; cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_INT, "12345", &value, &error)); cut_assert (G_VALUE_HOLDS_INT (&value)); cut_assert (g_value_get_int (&value) == 12345); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_LONG, "9912345", &value, &error)); cut_assert (G_VALUE_HOLDS_LONG (&value)); cut_assert (g_value_get_long (&value) == 9912345); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_UINT, "2345", &value, &error)); cut_assert (G_VALUE_HOLDS_UINT (&value)); cut_assert (g_value_get_uint (&value) == 2345); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_FLOAT, "1.454", &value, &error)); cut_assert (G_VALUE_HOLDS_FLOAT (&value)); cut_assert (fabs (g_value_get_float (&value) - 1.454) < 0.00001); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_FLOAT, "abc", &value, &error) == FALSE); g_value_unset (&value); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); g_error_free (error); error = NULL; cut_assert (gtk_builder_value_from_string_type (builder, G_TYPE_INT, "/-+,abc", &value, &error) == FALSE); g_value_unset (&value); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); g_error_free (error); error = NULL; cut_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "toplevel", &value, &error) == TRUE); cut_assert (G_VALUE_HOLDS_ENUM (&value)); cut_assert (g_value_get_enum (&value) == GTK_WINDOW_TOPLEVEL); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "sliff", &value, &error) == FALSE); g_value_unset (&value); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); g_error_free (error); error = NULL; cut_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WIDGET_FLAGS, "mapped", &value, &error) == TRUE); cut_assert (G_VALUE_HOLDS_FLAGS (&value)); cut_assert (g_value_get_flags (&value) == GTK_MAPPED); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WIDGET_FLAGS, "GTK_VISIBLE | GTK_REALIZED", &value, &error) == TRUE); cut_assert (G_VALUE_HOLDS_FLAGS (&value)); cut_assert (g_value_get_flags (&value) == (GTK_VISIBLE | GTK_REALIZED)); g_value_unset (&value); cut_assert (gtk_builder_value_from_string_type (builder, GTK_TYPE_WINDOW_TYPE, "foobar", &value, &error) == FALSE); g_value_unset (&value); cut_assert (error->domain == GTK_BUILDER_ERROR); cut_assert (error->code == GTK_BUILDER_ERROR_INVALID_VALUE); g_error_free (error); error = NULL; } static gboolean model_freed = FALSE; static void model_weakref (gpointer data, GObject *model) { model_freed = TRUE; } void test_reference_counting (void) { const gchar buffer1[] = "" " " " " " " " " " " " liststore1" " " " " " " ""; const gchar buffer2[] = "" " " " " " " " " " start" " " " " " " ""; GObject *window, *treeview, *model; builder = builder_new_from_string (buffer1, -1, NULL); window = gtk_builder_get_object (builder, "window1"); treeview = gtk_builder_get_object (builder, "treeview1"); model = gtk_builder_get_object (builder, "liststore1"); g_object_unref (builder); g_object_weak_ref (model, (GWeakNotify)model_weakref, NULL); cut_assert (model_freed == FALSE); gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), NULL); cut_assert (model_freed == TRUE); gtk_widget_destroy (GTK_WIDGET (window)); builder = builder_new_from_string (buffer2, -1, NULL); g_object_unref (builder); builder = NULL; } cutter-testing-framework-1.1.7/sample/gtk+/Makefile.am0000644000175000017500000000112711205747022021030 0ustar koukouif MAINTAINER_MODE TESTS = run-test.sh endif TESTS_ENVIRONMENT = NO_MAKE=yes EXTRA_DIST = run-test.sh INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(GTK_CFLAGS) LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GTK_LIBS) AM_LDFLAGS = \ -rpath $(libdir) \ -module \ -avoid-version \ -no-undefined noinst_LTLIBRARIES = \ suite_gtk_test.la \ test_builder.la \ test_floating.la suite_gtk_test_la_SOURCES = suite_gtk_test.c test_builder_la_SOURCES = builder.c test_floating_la_SOURCES = floating.c cutter-testing-framework-1.1.7/sample/Makefile.in0000644000175000017500000007130211525654634020216 0ustar koukou# 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@ 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@ @HAVE_GTK_TRUE@am__append_1 = gtk+ subdir = sample DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(stackdir)" "$(DESTDIR)$(stack_testdir)" \ "$(DESTDIR)$(stackdir)" "$(DESTDIR)$(stack_configdir)" \ "$(DESTDIR)$(stack_srcdir)" "$(DESTDIR)$(stack_testdir)" SCRIPTS = $(stack_SCRIPTS) $(stack_test_SCRIPTS) AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 DATA = $(stack_DATA) $(stack_config_DATA) $(stack_src_DATA) \ $(stack_test_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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = glib gtk+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = glib $(am__append_1) stackdir = $(pkgdatadir)/stack stack_SCRIPTS = \ stack/autogen.sh stack_DATA = \ stack/Makefile.am \ stack/configure.ac stack_srcdir = $(stackdir)/src stack_src_DATA = \ stack/src/Makefile.am \ stack/src/stack.c \ stack/src/stack.h stack_testdir = $(stackdir)/test stack_test_SCRIPTS = \ stack/test/run-test.sh stack_test_DATA = \ stack/test/Makefile.am \ stack/test/test-stack.c stack_configdir = $(stackdir)/config stack_config_DATA = \ stack/config/keep-me EXTRA_DIST = \ $(stack_SCRIPTS) \ $(stack_DATA) \ $(stack_src_DATA) \ $(stack_test_SCRIPTS) \ $(stack_test_DATA) \ $(stack_config_DATA) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign sample/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign sample/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-stackSCRIPTS: $(stack_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(stackdir)" || $(MKDIR_P) "$(DESTDIR)$(stackdir)" @list='$(stack_SCRIPTS)'; test -n "$(stackdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | 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; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(stackdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(stackdir)$$dir" || exit $$?; \ } \ ; done uninstall-stackSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(stack_SCRIPTS)'; test -n "$(stackdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(stackdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(stackdir)" && rm -f $$files install-stack_testSCRIPTS: $(stack_test_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(stack_testdir)" || $(MKDIR_P) "$(DESTDIR)$(stack_testdir)" @list='$(stack_test_SCRIPTS)'; test -n "$(stack_testdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | 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; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(stack_testdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(stack_testdir)$$dir" || exit $$?; \ } \ ; done uninstall-stack_testSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(stack_test_SCRIPTS)'; test -n "$(stack_testdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(stack_testdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(stack_testdir)" && rm -f $$files mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-stackDATA: $(stack_DATA) @$(NORMAL_INSTALL) test -z "$(stackdir)" || $(MKDIR_P) "$(DESTDIR)$(stackdir)" @list='$(stack_DATA)'; test -n "$(stackdir)" || 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)$(stackdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(stackdir)" || exit $$?; \ done uninstall-stackDATA: @$(NORMAL_UNINSTALL) @list='$(stack_DATA)'; test -n "$(stackdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(stackdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(stackdir)" && rm -f $$files install-stack_configDATA: $(stack_config_DATA) @$(NORMAL_INSTALL) test -z "$(stack_configdir)" || $(MKDIR_P) "$(DESTDIR)$(stack_configdir)" @list='$(stack_config_DATA)'; test -n "$(stack_configdir)" || 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)$(stack_configdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(stack_configdir)" || exit $$?; \ done uninstall-stack_configDATA: @$(NORMAL_UNINSTALL) @list='$(stack_config_DATA)'; test -n "$(stack_configdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(stack_configdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(stack_configdir)" && rm -f $$files install-stack_srcDATA: $(stack_src_DATA) @$(NORMAL_INSTALL) test -z "$(stack_srcdir)" || $(MKDIR_P) "$(DESTDIR)$(stack_srcdir)" @list='$(stack_src_DATA)'; test -n "$(stack_srcdir)" || 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)$(stack_srcdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(stack_srcdir)" || exit $$?; \ done uninstall-stack_srcDATA: @$(NORMAL_UNINSTALL) @list='$(stack_src_DATA)'; test -n "$(stack_srcdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(stack_srcdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(stack_srcdir)" && rm -f $$files install-stack_testDATA: $(stack_test_DATA) @$(NORMAL_INSTALL) test -z "$(stack_testdir)" || $(MKDIR_P) "$(DESTDIR)$(stack_testdir)" @list='$(stack_test_DATA)'; test -n "$(stack_testdir)" || 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)$(stack_testdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(stack_testdir)" || exit $$?; \ done uninstall-stack_testDATA: @$(NORMAL_UNINSTALL) @list='$(stack_test_DATA)'; test -n "$(stack_testdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(stack_testdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(stack_testdir)" && 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(stackdir)" "$(DESTDIR)$(stack_testdir)" "$(DESTDIR)$(stackdir)" "$(DESTDIR)$(stack_configdir)" "$(DESTDIR)$(stack_srcdir)" "$(DESTDIR)$(stack_testdir)"; 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-stackDATA install-stackSCRIPTS \ install-stack_configDATA install-stack_srcDATA \ install-stack_testDATA install-stack_testSCRIPTS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-stackDATA uninstall-stackSCRIPTS \ uninstall-stack_configDATA uninstall-stack_srcDATA \ uninstall-stack_testDATA uninstall-stack_testSCRIPTS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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-stackDATA \ install-stackSCRIPTS install-stack_configDATA \ install-stack_srcDATA install-stack_testDATA \ install-stack_testSCRIPTS install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-stackDATA \ uninstall-stackSCRIPTS uninstall-stack_configDATA \ uninstall-stack_srcDATA uninstall-stack_testDATA \ uninstall-stack_testSCRIPTS # 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: cutter-testing-framework-1.1.7/sample/Makefile.am0000644000175000017500000000125211424022511020157 0ustar koukouSUBDIRS = glib if HAVE_GTK SUBDIRS += gtk+ endif stackdir = $(pkgdatadir)/stack stack_SCRIPTS = \ stack/autogen.sh stack_DATA = \ stack/Makefile.am \ stack/configure.ac stack_srcdir = $(stackdir)/src stack_src_DATA = \ stack/src/Makefile.am \ stack/src/stack.c \ stack/src/stack.h stack_testdir = $(stackdir)/test stack_test_SCRIPTS = \ stack/test/run-test.sh stack_test_DATA = \ stack/test/Makefile.am \ stack/test/test-stack.c stack_configdir = $(stackdir)/config stack_config_DATA = \ stack/config/keep-me EXTRA_DIST = \ $(stack_SCRIPTS) \ $(stack_DATA) \ $(stack_src_DATA) \ $(stack_test_SCRIPTS) \ $(stack_test_DATA) \ $(stack_config_DATA) cutter-testing-framework-1.1.7/sample/stack/0000755000175000017500000000000011525707420017243 5ustar koukoucutter-testing-framework-1.1.7/sample/stack/autogen.sh0000755000175000017500000000033311205747022021240 0ustar koukou#!/bin/sh run() { $@ if test $? -ne 0; then echo "Failed $@" exit 1 fi } run aclocal ${ACLOCAL_ARGS} run libtoolize --copy --force run autoheader run automake --add-missing --foreign --copy run autoconf cutter-testing-framework-1.1.7/sample/stack/config/0000755000175000017500000000000011525707420020510 5ustar koukoucutter-testing-framework-1.1.7/sample/stack/config/keep-me0000644000175000017500000000000011205747022021741 0ustar koukoucutter-testing-framework-1.1.7/sample/stack/configure.ac0000644000175000017500000000073511205747022021533 0ustar koukouAC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE]) AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) AC_OUTPUT cutter-testing-framework-1.1.7/sample/stack/test/0000755000175000017500000000000011525707420020222 5ustar koukoucutter-testing-framework-1.1.7/sample/stack/test/run-test.sh0000755000175000017500000000067311400051163022334 0ustar koukou#!/bin/sh export BASE_DIR="`dirname $0`" top_dir="$BASE_DIR/.." if test -z "$NO_MAKE"; then make -C $top_dir > /dev/null || exit 1 fi if test -z "$CUTTER"; then CUTTER="`make -s -C $BASE_DIR echo-cutter`" fi case `uname` in CYGWIN*) PATH="$top_dir/src/.libs:$PATH" ;; Darwin) DYLD_LIBRARY_PATH="$top_dir/src/.libs:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH ;; *) : ;; esac $CUTTER -s $BASE_DIR "$@" $BASE_DIR cutter-testing-framework-1.1.7/sample/stack/test/test-stack.c0000644000175000017500000000236511205747022022453 0ustar koukou#include #include void test_new_stack (void); void test_push (void); void test_pop (void); static Stack *stack; void setup (void) { stack = NULL; } void teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } cutter-testing-framework-1.1.7/sample/stack/test/Makefile.am0000644000175000017500000000057511205747022022262 0ustar koukouif WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif INCLUDES = -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la AM_CFLAGS = $(CUTTER_CFLAGS) AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) cutter-testing-framework-1.1.7/sample/stack/Makefile.am0000644000175000017500000000006511205747022021275 0ustar koukouACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = src test cutter-testing-framework-1.1.7/sample/stack/src/0000755000175000017500000000000011525707420020032 5ustar koukoucutter-testing-framework-1.1.7/sample/stack/src/stack.c0000644000175000017500000000217611205747022021306 0ustar koukou#include #include "stack.h" #define TRUE 1 #define FALSE 0 struct _Stack { int size; int *data; }; Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; stack->data = NULL; return stack; } void stack_free (Stack *stack) { free(stack->data); free(stack); } int stack_is_empty (Stack *stack) { return stack->size == 0; } int stack_get_size (Stack *stack) { return stack->size; } static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } cutter-testing-framework-1.1.7/sample/stack/src/stack.h0000644000175000017500000000046611205747022021313 0ustar koukou#ifndef __STACK_H__ #define __STACK_H__ typedef struct _Stack Stack; Stack *stack_new (void); void stack_free (Stack *stack); int stack_is_empty (Stack *stack); int stack_get_size (Stack *stack); void stack_push (Stack *stack, int value); int stack_pop (Stack *stack); #endif cutter-testing-framework-1.1.7/sample/stack/src/Makefile.am0000644000175000017500000000020111205747022022054 0ustar koukoulib_LTLIBRARIES = libstack.la AM_CFLAGS = $(COVERAGE_CFLAGS) AM_LDFLAGS = -no-undefined libstack_la_SOURCES = stack.c stack.h cutter-testing-framework-1.1.7/README.ja0000644000175000017500000002657511525642526016152 0ustar koukou# -*- rd -*- = はじめに --- C言語・C++言語用単体テストフレームワークCutterの概要 == 名前 Cutter == 作者 === プログラム * Kouhei Sutou * Hiroyuki Ikezoe * Yuto Hayamizu === きのたんアイコン * Mayu & Co. == ライセンス * ソースコード: LGPLバージョン3またはそれ以降のバージョン (詳細: ((<"license/lgpl-3.txt"|URL:http://www.gnu.org/licenses/lgpl.html>))) です。 * ドキュメントときのたんアイコン: LGPLとGFDLとクリエイティ ブ・コモンズ・ライセンスのトリプルライセンス。 * LGPLバージョン3またはそれ以降のバージョン (詳細: ((<"license/lgpl-3.txt"|URL:http://www.gnu.org/licenses/lgpl.html>))) です。 * GFDLはバージョン1.3またはそれ以降 のバージョン(詳細: ((<"license/gfdl-1.3.txt"|URL:http://www.gnu.org/licenses/fdl.html>))) です。 * クリエイティブ・コモンズ・ライセンスは((<表示-継承 (CC BY-SA)|URL:http://creativecommons.org/licenses/by-sa/3.0/>)) です。 * 例外: * glib-compatible/glibintl.h, glib-compatible/gregex.*, glib-compatible/gscripttable.h, glib-compatible/gsequence.*, glib-compatible/gstring.*, glib-compatible/gunicode.h, glib-compatible/guniprop.c: LGPLバージョン2.0またはそれ 以降のバージョン(詳細: ((<"glib-compatible/COPYING"|URL:http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html>))) * glib-compatible/pcre/: PCREライセンス (詳細: ((<"glib-compatible/pcre/COPYING"|URL:http://www.pcre.org/licence.txt>))) * html/blog.*, html/download.*, html/heading-mark.* html/install.*, html/readme.*, html/reference.*, html/tango-logo.png, html/tutorial.*, html/mini-*.svg: パブリックドメイン。(())の成果物を 利用しています。(一部改変しているものもある) * html/ja.png, html/us.png, html/famfamfam-logo.png: パブリックドメイン。 (())が配布し ている国旗です。 == Cutter? CutterはC言語・C++言語のためのxUnit系の単体テストフレームワー クです。 Cutterの特徴は以下の通りです。 * テストが簡単に書ける * 出力結果がデバッグに使いやすい * テストを共有ライブラリとしてビルドする 詳細は((<特徴|FEATURES.ja>))を見てください。 == 依存ライブラリ * GLib >= 2.16 == 入手方法 tar.gz: % wget http://downloads.sourceforge.net/cutter/cutter-1.1.0.tar.gz Subversion: % svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter == インストール ((<インストール|install.html>))を見てください。 == 使い方 % cutter [オプション ...] テストディレクトリ テストディレクトリにはtest_*.soがあるディレクトリを指定しま す。cutterはテストディレクトリ以下にあるtest_*.soを再帰的に 検索します。 詳細は(())を見てください。 == テストの仕方 テストの実行は以下のような流れになります. (1) テストを作成する (2) コンパイルし、test_*.soを作成する (3) cutterを起動し、test_*.soを読み込ませ、テストをする 詳しくは((<チュートリアル|TUTORIAL.ja>))とsample/stack/を参考 にしてください。 == テスト結果 テスト結果は例えば以下のようになります。 ..........F................................................. 1) Failure: test_test_case_count <1 == cut_test_case_get_n_tests(test_object, NULL)> expected: <1> but was: <0> test/test-cut-test-case.c:143: test_test_case_count() Finished in 0.020857 seconds 60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) === 進行状況 一番上にある「.」と「F」の部分がテストの進行状況を示していま す。 ..........F................................................. 各「.」、「F」が1つのテストケース(テスト関数)を表していま す。「.」が成功したテストケース、「F」が失敗したテストケース を表しています。他にも「E」、「P」、「N」があり、それぞれエ ラー、保留、通知を表しています。まとめると以下のようになりま す。 : . 成功したテスト : F 表明が失敗したテスト : E 異常終了したテスト : P 保留マークがついているテスト : N 通知が行われたテスト 上記のテストを表す印はテストが実行される毎に出力されます。テ スト実行中は、この出力で実行状況を確認できます。 === テスト結果のまとめ テストが終了すると、テスト結果のまとめを出力します。まとめは、 まず、成功しなかったテストの詳細をそれぞれ表示します。例では 1つ失敗があったのでそれを表示しています。 1) Failure: test_test_case_count <1 == cut_test_case_get_n_tests(test_object, NULL)> expected: <1> but was: <0> test/test-cut-test-case.c:143: test_test_case_count() この例ではtest_test_case_countテストケースが失敗し、 cut_test_case_get_n_tests(test_object, NULL)が1になって欲し かったのに実際は0になっていることを表しています。また、この 失敗した表明はtest/test-cut-test-case.cの143行目、 test_test_case_count()関数内で起こったことがわかります。 テスト結果の詳細一覧の後はテストにかかった時間が表示されます。 Finished in 0.020857 seconds 最後にテスト結果の要約が表示されます。 60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) それぞれは以下のような意味です。 : n test(s) n個のテストケース(テスト関数)を実行した : n assertion(s) n個の表明にパスした : n failure(s) n個の表明に失敗した : n error(s) n個の異常事態が発生した(cut_error()を使用した) : n pending(s) n個のテストケースを保留にした(cut_pending()を使用した) : n notification(s) n個の通知が発生した(cut_notification()を使用した) この例では60個のテストケースを実行し、253個の表明にパスし、1 個の表明に失敗したということになります。異常事態や保留にした テストケースなどはありませんでした。 === XML出力 --xml-reportオプションを指定することでテスト結果をXML形式で出 力することができます。出力されるXMLは以下のような構造になって います。 テストケース名 テストケースの説明(もしあれば) テスト名 テストの説明(もしあれば) テスト結果([success|failure|error|pending|notification]) テスト結果の詳細(もしあれば) ファイル名 付加情報 ... 実行時間(例: 0.000010) ... ... === テストカバレッジ システムに(())がイ ンストールされている場合は、Cutterを使ったテストを用いてコー ドカバレッジを出力することができます。カバレッジを出力するに はconfigure.acに以下を追加して、"make coverage"を実行してくだ さい。 AC_CHECK_COVERAGE == リファレンス === 表明 ((<"cutter/cut-assertions.h"|cutter-cut-assertions.html>))を見 てください。 === 属性 テストに属性を加えて、テスト失敗時により有益な情報を利用する ことができます。例えば、以下のようにテストにBug IDの情報を付 加することができます。 void attributes_invalid_input(void); void test_invalid_input(void); void attributes_invalid_input (void) { cut_set_attributes("bug", "123"); } void test_invalid_input (void) { cut_assert_equal("OK", get_input()); } この例では、test_invalid_inputテストがBug #123のテストである という情報を付加しています。 属性は"「attributes_「テスト名からtest_を除いたもの」"という名 前の関数を定義し、その関数の中でcut_set_attributes()を使って 設定できます。上記の例では「test_invalid_input」テストに 「123」という値の「bug」属性を追加するために 「attributes_invalid_input」という関数を定義し、その中で cut_set_attributes("bug", "123")を呼び、属性を設定しています。 === 雛型 テストの雛型は以下のようになります. #include #include "自分のプログラムのヘッダファイル" void test_condition(void); void test_strstr(void); static int condition = 0; void cut_setup (void) { /* 初期化用コード */ condition = 1; } void cut_teardown (void) { /* 後片付け用コード */ condition = 0; } void test_condition(void) { cut_set_message("conditionの値はcut_setup()で1に設定されているはず"); cut_assert_equal_int(1, condition); ... } void test_strstr(void) { cut_assert_equal_string("sub-string", strstr("string sub-string", "sub")); ... } == 感謝 * Kazumasa Matsunagaさん: ビルドの不具合を報告してくれまし た。 * Daijiro MORIさん: 不具合を報告してくれました。 * 海野さん: * チュートリアルの不具合に気づかせてくれました。 * Solaris用インストールドキュメントの作成を手伝ってくれ ました。 * グニャラくん: APIについてアドバイスしてくれました。 * 山川さん: Cygwinでの動作を教えてくれました。 * 奥地さん: * Localeまわりの不具合を報告してくれました。 * 新機能を提案してくれました。 * Zed Shawさん: 不具合を報告してくれました。 * Romuald Contyさん: ドキュメントの不具合を報告してくれま した。 * Romain Tartièreさん: * 不具合を報告してくれました。 * 改良方法を提案してくれました。 * Ilya Baryginさん: * テストの不具合を報告してくれました。 * 中村弘輝さん * CentOSでの不具合を報告してくれました。 cutter-testing-framework-1.1.7/doc/0000755000175000017500000000000011525707420015422 5ustar koukoucutter-testing-framework-1.1.7/doc/cutter-easy-to-debug.svg0000644000175000017500000003272211205747025022122 0ustar koukou image/svg+xml 実装 テスト デバッグのしやすさ cutter-testing-framework-1.1.7/doc/install-to-others.rd.ja0000644000175000017500000000405511525645034021740 0ustar koukou# -*- rd -*- = その他のプラットフォームへインストール --- その他のプラットフォームへのCutterのインストール方法 == はじめに ((<"Debian GNU/Linux"|install-to-debian.rd.ja>))、 (())、 (())、 (())、 (())以外のプラットフォームへ のインストール方法です。 == GLibのインストール Cutterを動かすためにはGLib 2.16以降が必要です。もし、システム で提供されているGLibが古い場合(例えばCentOS)は別途GLibをイ ンストールし、それを利用することができます。 ~/local/以下にGLibをインストールするとします。 % mkdir -p ~/src % cd ~/src % wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz % tar xvfz glib-2.22.4.tar.gz % cd glib-2.22.4 % ./configure --prefix=$HOME/local % make % make install == Cutterのインストール CutterはGNUビルドツールを利用しているので、他のフリーソフト ウェアと同じように以下でインストールできます。 % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % make % sudo make install もし、~/local/以下にGLibをインストールした場合は以下のように なります。この例ではCutterも~/local/以下にインストールしてい ます。 % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig LD_LIBRARY_PATH=$HOME/local/lib --prefix=$HOME/local % make % make install == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/install-to-fedora.rd0000644000175000017500000000103111523751075021273 0ustar koukou# -*- rd -*- = Install to Fedora --- How to install Cutter to Fedora == Introduction This document explains how to install Cutter to Fedora. == Install We can use yum because Cutter provides a Yum repository. First, we need to register Cutter Yum repository: % sudo rpm -Uvh http://cutter.sourceforge.net/fedora/cutter-repository-1.0.0-1.noarch.rpm Now, we can install Cutter by yum: % sudo yum install -y cutter == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/cutter.rd.ja0000644000175000017500000001733511273747134017667 0ustar koukou= cutter / Cutter / Cutterのマニュアル == 名前 cutter - C言語・C++言語用のxUnit系テスティングフレームワーク == 書式 (({cutter})) [((*オプション...*))] ((*テストディレクトリ*)) (({cutter})) --mode=analyze [((*オプション ...*))] ((*ログディレクトリ*)) == 説明 CutterはC言語・C++言語用のxUnit系単体テスト(ユニットテスト) フレームワークです。Cutterはプログラマに2つの重要なインターフェ イスを提供します。 (1) 簡単にテストが書けるAPI (2) 簡単にデバッグできるユーザインターフェイス Cutterはプログラマが新しいテストを書くこと、すでにあるテスト を実行すること、実行したテストからフィードバックを得ることを 支援します。 ((*テストディレクトリ*))にはtest_*.soがあるディレクトリを指 定します。Cutterはtest_*.soは再帰的に検索します。 ((*ログディレクトリ*))にはCutterのログファイルがあるディレク トリを指定します。Cutterは--stream-directoryオプションがして いされるとテスト結果をログファイルに出力します。 == オプション : --version バージョンを表示して終了します。 : --mode=[test|analyze] 実行モードを指定します。testモードのときはテストを実行し ます。analyzeモードのときはテスト結果を解析します。 デフォルトはtestです。 : -s DIRECTORY, --source-directory=DIRECTORY テストが失敗した場合にファイル名の前にDIRECTORYを付加しま す。Cutterの出力からテストが失敗した箇所にジャンプするツー ル(Emacsなど)と連携するための機能です。 : -t TEST_CASE_NAME, --test-case=TEST_CASE_NAME TEST_CASE_NAMEにマッチしたテストケースを実行します。もし、 TEST_CASE_NAMEが"/"で囲まれていた場合は(例: /test_/)正 規表現として扱います。 このオプションは複数回指定できます。その場合は、どれかの TEST_CASE_NAMEにマッチしたテストケースを実行します。(OR) : -n TEST_NAME, --name=TEST_NAME TEST_NAMEにマッチしたテストを実行します。もし、TEST_NAME が"/"で囲まれていた場合は(例: /test_/)正規表現として扱 います。 このオプションは複数回指定できます。その場合は、どれかの TEST_NAMEにマッチしたテストケースを実行します。(OR) : -m, --multi-thread 各テストケースを新しいスレッドで実行します。 デフォルトでは無効です。 : --max-threads=MAX_THREADS 最大MAX_THREADSスレッドを同時に動かしてテストケースと繰り 返しテストを実行します。-1を指定すると最大同時スレッド数 を制限しません。 デフォルトは最大10スレッドです。 : --disable-signal-handling C-cでのテスト途中終了や、SEGV時のバックトレース取得などを 行うシグナル処理機能を無効にします。シグナルを用いてるラ イブラリをテストする場合はこの機能が障害になることがあり ます。その場合はこのオプションでCutterのシグナル処理機能 を無効にしてください。 デフォルトでは有効です。 : --test-case-order=[none|name|name-desc] 各テストケースの実行順を並び替えます。 noneを指定すると並び替えません。nameを指定するとテストケー ス名で昇順に並び替えます。name-descを指定するとテストケー ス名で降順に並び替えます。 デフォルトはnoneです。 : --exclude-file=FILE テストを集めるときにFILEを読み込みません。 : --exclude-directory=DIRECTORY DIRECTORY以下にあるテストを検索しません。 : --fatal-failures 失敗を致命的な問題として扱います。つまり、表明に失敗する とテストの実行を中断します。 デフォルトでは無効です。 : --keep-opening-modules ロードしたモジュールを開いたままにします。シンボルを解決 できるようになるため、デバッグ時に便利です。 デフォルトでは無効です。 : --enable-convenience-attribute-definition 便利ですが、危険でもある、 "#{属性名}_#{テスト名 - 'test_'プリフィックス}"属性設定関 数を有効にします。 デフォルトでは無効です。 : --stop-before-test テスト関数を実行する直前にブレークポイントを設定します。 デバッガ上でcutterを実行し、ステップインすれば、簡単にテ スト関数に入ることができます。 デフォルトでは無効です。 : -u=[console|gtk], --ui=[console|gtk] UIを指定します。 デフォルトはコンソールUIです。 : -v[s|silent|n|normal|v|verbose], --verbose=[s|silent|n|normal|v|verbose] 出力の詳細さを指定します。 このオプションはコンソールUIを使用する場合だけ有効です。 : -c[yes|true|no|false|auto], --color=[yes|true|no|false|auto] yesまたはtrueが指定された場合はCutterはエスケープシーケン スで色付けして出力します。noまたはfalseが指定された場合は 色付けしません。autoあるいは値が省略された時は、可能なら 色付けをします。 このオプションはコンソールUIを使用する場合だけ有効です。 : --pdf-report=FILE FILEにPDF形式でテスト結果を出力します。 : --xml-report=FILE FILEにXML形式でテスト結果を出力します。 : --stream=[xml] ストリームバックエンドを指定します。ストリームバックエン ドはテスト結果を配信します。 現在はXMLストリームバックエンドがあります。 : --stream-fd=FILE_DESCRIPTOR 出力ファイルディスクリプタを指定します。XMLストリームバッ クエンドはFILE_DESCRIPTORに配信します。 このオプションはXMLストリームバックエンドを使用する場合だ け有効です。 : --stream-directory=DIRECTORY 出力ディレクトリを指定します。XMLストリームバックエンドは DIRECTORY以下にファイルを作成し、そのファイルに配信します。 このオプションはXMLストリームバックエンドを使用する場合だ け有効です。 : -?, --help UIやテスト結果レポート機能に依存しないオプションを表示し ます。 : --help-stream ストリーム関連のオプションを表示します。 : --help-report レポート関連のオプションを表示します。 : --help-ui UI関連のオプションを表示します。 : --help-all すべてのオプションを表示します。 == 終了ステータス すべてのテストがパスすると0で、そうでない場合は0以外になりま す。テスト結果の「省略」と「通知」は失敗として扱いません。 == ファイル : /usr/local/share/doc/cutter/ja/ リファレンスマニュアルやチュートリアルなどのCutterのドキュ メントがあります。 == 例 以下の例では、cutterはtest/ディレクトリ以下のテストを実行し、 テストの進行状況を詳細に表示します。 % cutter -v v test/ 以下の例では、テスト結果がlogs/ディレクトリ以下に保存されま す。 % cutter --stream=xml --stream-directory=logs/ test/ == 関連項目 GLibのリファレンスマニュアル。 cutter-testing-framework-1.1.7/doc/install-to-centos.rd.ja0000644000175000017500000000137711523751075021734 0ustar koukou# -*- rd -*- = CentOSへインストール --- CentOSへのCutterのインストール方法 == はじめに CentOSへのCutterのインストール方法を説明します。 == インストール CutterのYumリポジトリが提供されているので、yumでインストール できます。 まず、Yumリポジトリを登録します。 % sudo rpm -Uvh http://cutter.sourceforge.net/centos/cutter-repository-1.0.0-1.noarch.rpm Yumリポジトリを登録したらyumでインストールできます。 % sudo yum install -y cutter == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/install-to-cygwin.rd0000644000175000017500000000162011525645034021336 0ustar koukou# -*- rd -*- = Install to Cygwin --- How to install Cutter to Cygwin == Introduction This document explains how to install Cutter to Cygwin. We can install Cutter to Cygwin 1.7 (should be confirmed: but we need to apply a patch to GLib). == Install Cygwin First, we download Cygwin 1.7 installer: (()) Next, we install the following packages with the downloaded installer: * gcc4 * gdb * libglib2.0-devel * gettext-devel * intltool * libiconv * libtool * make * pkg-config * wget We enter into Cygwin. We run Cygwin. == Install Cutter We install Cutter. % cd % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % make % make install == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/cut-diff.rd0000644000175000017500000000330111523751075017452 0ustar koukou= cut-diff / Cutter / Cutter's manual == NAME cut-diff - show difference between 2 files with color == SYNOPSIS (({cut-diff})) [((*option ...*))] ((*file1*)) ((*file2*)) == DESCRIPTION cut-diff is a diff command that uses diff feature in Cutter. It shows difference with color. It's recommended that you use a normal diff(1) when you want to use with patch(1) or you don't need color. == OPTIONS : --version cut-diff shows its own version and exits. : -c [yes|true|no|false|auto], --color=[yes|true|no|false|auto] If 'yes' or 'true' is specified, cut-diff uses colorized output by escape sequence. If 'no' or 'false' is specified, cut-diff never use colorized output. If 'auto' or the option is omitted, cut-diff uses colorized output if available. The default is auto. : -u, --unified cut-diff uses unified diff format. : --context-lines=LINES Shows diff context around (({LINES})). All lines are shown by default. When unified diff format is used, 3 lines are shown by default. : --label=LABEL, -L=LABEL Uses (({LABEL})) as a header label. The first ((*--label*)) option value is used as ((*file1*))'s label and the second ((*--label*)) option value is used as ((*file2*))'s label. Labels are the same as file names by default. == EXIT STATUS The exit status is 0 for success, non-0 otherwise. TODO: 0 for non-difference, 1 for difference and non-0 for errors. == EXAMPLE In the following example, cut-diff shows difference between (({file1})) and (({file2})): % cut-diff file1 file2 In the following example, cut-diff shows difference between (({file1})) and (({file2})) with unified diff format: % cut-diff -u file1 file2 == SEE ALSO diff(1) cutter-testing-framework-1.1.7/doc/cutter.man0000644000175000017500000001334511523751361017434 0ustar koukou.\" DO NOT MODIFY THIS FILE! it was generated by rd2 .TH CUTTER 1 "February 2011" "Cutter" "Cutter's manual" .SH NAME .PP cutter \- xUnit family unit testing framework for C and C++ .SH SYNOPSIS .PP \&\fBcutter\fP [\fIoption ...\fP] \fItest\-directory\fP .PP \&\fBcutter\fP \-\-mode=analyze [\fIoption ...\fP] \fIlog\-directory\fP .SH DESCRIPTION .PP Cutter is a xUnit family unit testing framework for C and C++. Cutter provides programmers two important interfaces: .TP 1. easy to write API .TP 2. easy to debug UI .PP Cutter helps programmers to write their new tests, run their existing tests, get feedbacks from ran their tests. .PP \fItest\-directory\fP is a directory which has test_*.so. test_*.so are searched recursively. .PP \fIlog\-directory\fP is a directory which has Cutter log files. Cutter logs test results when \-\-stream\-directory option is specified. .SH OPTIONS .TP .fi .B \-\-version Cutter shows its own version and exits. .TP .fi .B \-\-mode=[test|analyze] It specifies run mode. Cutter runs tests when run mode is test. Cutter analyzes test results when run mode is analyze. The default is test. .TP .fi .B \-s DIRECTORY, \-\-source\-directory=DIRECTORY Cutter prepends DIRECTORY to file name when test fails. This is for tolls (like Emacs) which have function jumping to error line. .TP .fi .B \-t TEST_CASE_NAME, \-\-test\-case=TEST_CASE_NAME Cutter runs test cases that are matched with TEST_CASE_NAME. If TEST_CASE_NAME is surrounded by "/" (e.g. /test_/), TEST_CASE_NAME is handled as regular expression. This option can be specified n times. In the case, Cutter runs test cases that are matched with any TEST_CASE_NAME. (OR) .TP .fi .B \-n TEST_NAME, \-\-name=TEST_NAME Cutter runs tests that are matched with TEST_NAME. If TEST_NAME is surrounded by "/" (e.g. /test_/), TEST_NAME is handled as regular expression. This option can be specified n times. In the case, Cutter runs test that are matched with any TEST_NAME. (OR) .TP .fi .B \-m, \-\-multi\-thread Cutter runs a test case in a new thread. The default is off. .TP .fi .B \-\-max\-threads=MAX_THREADS Run test cases and iterated tests with MAX_THREADS threads concurrently at a maximum. \-1 means no limit. The default is 10. .TP .fi .B \-\-disable\-signal\-handling Disable signal handling that provides aborting test by C\-c, provides backtrace on SEGV and so on. If your test target uses signal, Cutter's signal handling may cause a problem. In the case, you should disable Cutter's signal handling by this option. The default is enabled. .TP .fi .B \-\-test\-case\-order=[none|name|name\-desc] It specifies test case order. If 'none' is specified, Cutter doesn't sort. If 'name' is specified, Cutter sorts test cases by name in ascending order. If 'name\-desc' is specified, Cutter sorts test cases by name in descending order. The default is none. .TP .fi .B \-\-exclude\-file=FILE Cutter doesn't read FILE on test collecting. .TP .fi .B \-\-exclude\-directory=DIRECTORY Cutter doesn't search tests under DIRECTORY. .TP .fi .B \-\-fatal\-failures Cutter treats failures as fatal problem. It means that Cutter stops test run. The default is off. .TP .fi .B \-\-keep\-opening\-modules Cutter keeps opening loaded modules to resolve symbols for debugging. The default is off. .TP .fi .B \-\-enable\-convenience\-attribute\-definition It enables convenience but danger "#{ATTRIBUTE_NAME}_#{TEST_NAME \- 'test_' PREFIX}" attribute set function. The default is off. .TP .fi .B \-\-stop\-before\-test It sets a breakpoint immediately before each test. You can dive into test function easily by running cutter on your debugger and stepping into the next function. The default is off. .TP .fi .B \-u[console|gtk], \-\-ui=[console|gtk] It specifies UI. The default is console UI. .TP .fi .B \-v[s|silent|n|normal|v|verbose], \-\-verbose=[s|silent|n|normal|v|verbose] It specifies verbose level. This option is only for console UI. .TP .fi .B \-c[yes|true|no|false|auto], \-\-color=[yes|true|no|false|auto] If 'yes' or 'true' is specified, Cutter uses colorized output by escape sequence. If 'no' or 'false' is specified, Cutter never use colorized output. If 'auto' or the option is omitted, Cutter uses colorized output if available. This option is only for console UI. .TP .fi .B \-\-pdf\-report=FILE Cutter outputs a test report to FILE as PDF format. .TP .fi .B \-\-xml\-report=FILE Cutter outputs a test report to FILE as XML format. .TP .fi .B \-\-stream=[xml] It specifies stream backend. Stream backend streams test results. There is only XML stream backend for now. .TP .fi .B \-\-stream\-fd=FILE_DESCRIPTOR It specifies output file descriptor. The XML stream backend streams to FILE_DESCRIPTOR. This option is only for XML stream backend. .TP .fi .B \-\-stream\-directory=DIRECTORY It specifies output directory. The XML stream backend streams to a file under DIRECTORY. This option is only for XML stream backend. .TP .fi .B \-?, \-\-help Cutter shows common options. .TP .fi .B \-\-help\-stream Cutter shows stream related options. .TP .fi .B \-\-help\-report Cutter shows report related options. .TP .fi .B \-\-help\-ui Cutter shows UI related options. .TP .fi .B \-\-help\-all Cutter shows all options. .SH EXIT STATUS .PP The exit status is 0 if all tests are passed and non\-0 otherwise. Omission test result and notification test result are not treated as failure. .SH FILES .TP .fi .B /usr/local/share/doc/cutter/ The directory has Cutter documents. e.g. reference manual, tutorial and so on. .SH EXAMPLE .PP In the following example, cutter runs tests under tests/ directory and shows test progress verbosely. .nf \& % cutter \-v v test/ .fi .PP In the following example, test results are saved under logs/ directory: .nf \& % cutter \-\-stream=xml \-\-stream\-directory=logs/ test/ .fi .SH SEE ALSO .PP GLib's reference manual. cutter-testing-framework-1.1.7/doc/install-to-freebsd.rd0000644000175000017500000000147111424022736021450 0ustar koukou# -*- rd -*- = Install to FreeBSD --- How to install Cutter to FreeBSD == Introduction This document explains how to install Cutter to FreeBSD. == Install Cutter can be installed either using packages or ports. As usual you shall not mix them so depending on the way you maintain third party packages, install the package: % sudo /usr/sbin/pkg_add -r cutter or compile and install the port: % (cd /usr/ports/devel/cutter && sudo make install) See also: * about packages and ports: (()) * about the port: ((<"FreshPorts -- devel/cutter"|URL:http://www.freshports.org/devel/cutter/>)) == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/install-to-ubuntu.rd0000644000175000017500000000261711525642526021372 0ustar koukou# -*- rd -*- = Install to Ubuntu --- How to install Cutter to Ubuntu == Introduction This document explains how to install Cutter to Ubuntu Linux. == Install We can use aptitude because Cutter provides Debian packages. There are packages for Ubuntu Lucid Lynx/Maverick Meerkat i386/amd64. If you need a package for another environment, you can request on (()). Here are apt lines for for Lucid. We put them into /etc/apt/sources.list.d/cutter.list. /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/ubuntu/ lucid main deb-src http://cutter.sourceforge.net/ubuntu/ lucid main Here are apt lines for for Maverick. We put them into /etc/apt/sources.list.d/cutter.list. /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/ubuntu/ maverick main deb-src http://cutter.sourceforge.net/ubuntu/ maverick main Cutter packages are signed by key of kou@cozmixng.org/kou@clear-code.com. If we trust the key, we can register the key: % gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31 % gpg --export 1C837F31 | sudo apt-key add - If we register the key, we can install Cutter by aptitude: % sudo aptitude update % sudo aptitude -V -D install cutter-testing-framework == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/install-to-mac-os-x.rd0000644000175000017500000000122111205747025021455 0ustar koukou# -*- rd -*- = Install to Mac OS X --- How to install Cutter to Mac OS X == Introduction This document explains how to install Cutter to Mac OS X. == Install We can use port because Cutter provides MacPorts. First, we get MacPorts for Cutter: % cd ~ % svn co https://cutter.svn.sourceforge.net/svnroot/cutter/macports/ cutter-macports Next, we register MacPorts for Cutter: % echo file://$HOME/cutter-macports | sudo sh -c "cat >> /opt/local/etc/macports/sources.conf" We can install Cutter by port: % sudo port install cutter == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/install-to-debian.rd0000644000175000017500000000264211525702710021260 0ustar koukou# -*- rd -*- = Install to Debian GNU/Linux --- How to install Cutter to Debian GNU/Linux == Introduction This document explains how to install Cutter to Debian GNU/Linux. == Install We can use aptitude because Cutter provides Debian packages. There are packages for Debian GNU/Linux squeeze/sid i386/amd64. If you need a package for another environment, you can request on (()). Here are apt lines for for squeeze. We put them into /etc/apt/sources.list.d/cutter.list. /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/debian/ squeeze main deb-src http://cutter.sourceforge.net/debian/ squeeze main Here are apt lines for for sid. We put them into /etc/apt/sources.list.d/cutter.list. /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/debian/ unstable main deb-src http://cutter.sourceforge.net/debian/ unstable main Cutter packages are signed by key of kou@cozmixng.org/kou@clear-code.com. If we trust the key, we can register the key: % gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31 % gpg --export 1C837F31 | sudo apt-key add - If we register the key, we can install Cutter by aptitude: % sudo aptitude update % sudo aptitude -V -D install cutter-testing-framework == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/cutter-two-important-features.svg0000644000175000017500000003437511205747025024123 0ustar koukou image/svg+xml 実装 テスト 書きやすさ デバッグのしやすさ cutter-testing-framework-1.1.7/doc/install-to-ubuntu.rd.ja0000644000175000017500000000333011525642526021754 0ustar koukou# -*- rd -*- = Ubuntuへインストール --- UbuntuへのCutterのインストール方法 == はじめに UbuntuへのCutterのインストール方法を説明します。 == インストール CutterのDebianパッケージが提供されているので、aptitudeでインス トールできます。 現在は、Ubuntu Lucid Lynx/Maverick Meerkat i386/amd64 用のパッケージのみ提供しています。他のバージョンが必要な場合 は((<メーリングリスト |URL:https://lists.sourceforge.net/lists/listinfo/cutter-users-ja>)) でリクエストしてください。 Lucidの場合は以下のapt lineを書いた /etc/apt/sources.list.d/cutter.listを作成してください。 /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/ubuntu/ lucid main deb-src http://cutter.sourceforge.net/ubuntu/ lucid main Maverickの場合は以下のapt lineを書いた /etc/apt/sources.list.d/cutter.listを作成してください。 /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/ubuntu/ maverick main deb-src http://cutter.sourceforge.net/ubuntu/ maverick main パッケージはkou@cozmixng.org/kou@clear-code.comの鍵でサイン しています。信用する場合は鍵を登録します。 % gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31 % gpg --export 1C837F31 | sudo apt-key add - 鍵を登録したらaptitudeでインストールできます。 % sudo aptitude update % sudo aptitude -V -D install cutter-testing-framework == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/install-to-others.rd0000644000175000017500000000324311525645034021345 0ustar koukou# -*- rd -*- = Install to other platform --- How to install Cutter to other platform == Introduction This document explains how to install Cutter to platforms except ((<"Debian GNU/Linux"|install-to-debian.rd>)), (()), (()), (()) and (()). == Install GLib Cutter requires GLib 2.16 or later. We can install GLib that satisfies the condition by ourselves and use it if our system doesn't provide GLib that satisfies the condition. (e.g. CentOS) Here is an instruction to install GLib into ~/local/: % mkdir -p ~/src % cd ~/src % wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz % tar xvfz glib-2.22.4.tar.gz % cd glib-2.22.4 % ./configure --prefix=$HOME/local % make % make install == Install Cutter Cutter can be installed like other free software because Cutter uses GNU build tools: % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % make % sudo make install Here is an instruction to use GLib installed into ~/local/ by ourselves. In the instruction, Cutter is also installed into ~/local/: % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig LD_LIBRARY_PATH=$HOME/local/lib --prefix=$HOME/local % make % make install == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/cut-diff.man0000644000175000017500000000353711523751361017631 0ustar koukou.\" DO NOT MODIFY THIS FILE! it was generated by rd2 .TH CUT\-DIFF 1 "February 2011" "Cutter" "Cutter's manual" .SH NAME .PP cut\-diff \- show difference between 2 files with color .SH SYNOPSIS .PP \&\fBcut\-diff\fP [\fIoption ...\fP] \fIfile1\fP \fIfile2\fP .SH DESCRIPTION .PP cut\-diff is a diff command that uses diff feature in Cutter. It shows difference with color. .PP It's recommended that you use a normal diff(1) when you want to use with patch(1) or you don't need color. .SH OPTIONS .TP .fi .B \-\-version cut\-diff shows its own version and exits. .TP .fi .B \-c [yes|true|no|false|auto], \-\-color=[yes|true|no|false|auto] If 'yes' or 'true' is specified, cut\-diff uses colorized output by escape sequence. If 'no' or 'false' is specified, cut\-diff never use colorized output. If 'auto' or the option is omitted, cut\-diff uses colorized output if available. The default is auto. .TP .fi .B \-u, \-\-unified cut\-diff uses unified diff format. .TP .fi .B \-\-context\-lines=LINES Shows diff context around \&\fBLINES\fP. All lines are shown by default. When unified diff format is used, 3 lines are shown by default. .TP .fi .B \-\-label=LABEL, \-L=LABEL Uses \&\fBLABEL\fP as a header label. The first\fI\-\-label\fP option value is used as \fIfile1\fP's label and the second \fI\-\-label\fP option value is used as\fIfile2\fP's label. Labels are the same as file names by default. .SH EXIT STATUS .PP The exit status is 0 for success, non\-0 otherwise. .PP TODO: 0 for non\-difference, 1 for difference and non\-0 for errors. .SH EXAMPLE .PP In the following example, cut\-diff shows difference between \&\fBfile1\fP and \&\fBfile2\fP: .nf \& % cut\-diff file1 file2 .fi .PP In the following example, cut\-diff shows difference between \&\fBfile1\fP and \&\fBfile2\fP with unified diff format: .nf \& % cut\-diff \-u file1 file2 .fi .SH SEE ALSO .PP diff(1) cutter-testing-framework-1.1.7/doc/cutter-accelerate-development-cycle.svg0000644000175000017500000003377011205747025025166 0ustar koukou image/svg+xml 実装 テスト 開発サイクルを加速するテスティングフレームワーク Cutter cutter-testing-framework-1.1.7/doc/cutter-easy-to-write.svg0000644000175000017500000003254311205747025022167 0ustar koukou image/svg+xml 実装 テスト 書きやすさ cutter-testing-framework-1.1.7/doc/install-to-cygwin.rd.ja0000644000175000017500000000222511525645034021731 0ustar koukou# -*- rd -*- = Cygwinへインストール --- CygwinへのCutterのインストール方法 == はじめに CygwinへのCutterのインストール方法を説明します。 Cygwin 1.7を対象とします。 == Cygwinのインストール まず、Cygwin 1.7のインストーラをダウンロードします。 (()) 次に、インストーラを使って以下のパッケージをインストールしま す。 * gcc4 * gdb * libglib2.0-devel * gettext-devel * intltool * libiconv * libtool * make * pkg-config * wget ここからはCygwinの中で行います。Cygwinを起動してください。 == Cutterのインストール これで下準備は整ったのでCutterをインストールします。 % cd % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % make % make install == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/cutter.rd0000644000175000017500000001303211523751075017261 0ustar koukou= cutter / Cutter / Cutter's manual == NAME cutter - xUnit family unit testing framework for C and C++ == SYNOPSIS (({cutter})) [((*option ...*))] ((*test-directory*)) (({cutter})) --mode=analyze [((*option ...*))] ((*log-directory*)) == DESCRIPTION Cutter is a xUnit family unit testing framework for C and C++. Cutter provides programmers two important interfaces: (1) easy to write API (2) easy to debug UI Cutter helps programmers to write their new tests, run their existing tests, get feedbacks from ran their tests. ((*test-directory*)) is a directory which has test_*.so. test_*.so are searched recursively. ((*log-directory*)) is a directory which has Cutter log files. Cutter logs test results when --stream-directory option is specified. == OPTIONS : --version Cutter shows its own version and exits. : --mode=[test|analyze] It specifies run mode. Cutter runs tests when run mode is test. Cutter analyzes test results when run mode is analyze. The default is test. : -s DIRECTORY, --source-directory=DIRECTORY Cutter prepends DIRECTORY to file name when test fails. This is for tolls (like Emacs) which have function jumping to error line. : -t TEST_CASE_NAME, --test-case=TEST_CASE_NAME Cutter runs test cases that are matched with TEST_CASE_NAME. If TEST_CASE_NAME is surrounded by "/" (e.g. /test_/), TEST_CASE_NAME is handled as regular expression. This option can be specified n times. In the case, Cutter runs test cases that are matched with any TEST_CASE_NAME. (OR) : -n TEST_NAME, --name=TEST_NAME Cutter runs tests that are matched with TEST_NAME. If TEST_NAME is surrounded by "/" (e.g. /test_/), TEST_NAME is handled as regular expression. This option can be specified n times. In the case, Cutter runs test that are matched with any TEST_NAME. (OR) : -m, --multi-thread Cutter runs a test case in a new thread. The default is off. : --max-threads=MAX_THREADS Run test cases and iterated tests with MAX_THREADS threads concurrently at a maximum. -1 means no limit. The default is 10. : --disable-signal-handling Disable signal handling that provides aborting test by C-c, provides backtrace on SEGV and so on. If your test target uses signal, Cutter's signal handling may cause a problem. In the case, you should disable Cutter's signal handling by this option. The default is enabled. : --test-case-order=[none|name|name-desc] It specifies test case order. If 'none' is specified, Cutter doesn't sort. If 'name' is specified, Cutter sorts test cases by name in ascending order. If 'name-desc' is specified, Cutter sorts test cases by name in descending order. The default is none. : --exclude-file=FILE Cutter doesn't read FILE on test collecting. : --exclude-directory=DIRECTORY Cutter doesn't search tests under DIRECTORY. : --fatal-failures Cutter treats failures as fatal problem. It means that Cutter stops test run. The default is off. : --keep-opening-modules Cutter keeps opening loaded modules to resolve symbols for debugging. The default is off. : --enable-convenience-attribute-definition It enables convenience but danger "#{ATTRIBUTE_NAME}_#{TEST_NAME - 'test_' PREFIX}" attribute set function. The default is off. : --stop-before-test It sets a breakpoint immediately before each test. You can dive into test function easily by running cutter on your debugger and stepping into the next function. The default is off. : -u[console|gtk], --ui=[console|gtk] It specifies UI. The default is console UI. : -v[s|silent|n|normal|v|verbose], --verbose=[s|silent|n|normal|v|verbose] It specifies verbose level. This option is only for console UI. : -c[yes|true|no|false|auto], --color=[yes|true|no|false|auto] If 'yes' or 'true' is specified, Cutter uses colorized output by escape sequence. If 'no' or 'false' is specified, Cutter never use colorized output. If 'auto' or the option is omitted, Cutter uses colorized output if available. This option is only for console UI. : --pdf-report=FILE Cutter outputs a test report to FILE as PDF format. : --xml-report=FILE Cutter outputs a test report to FILE as XML format. : --stream=[xml] It specifies stream backend. Stream backend streams test results. There is only XML stream backend for now. : --stream-fd=FILE_DESCRIPTOR It specifies output file descriptor. The XML stream backend streams to FILE_DESCRIPTOR. This option is only for XML stream backend. : --stream-directory=DIRECTORY It specifies output directory. The XML stream backend streams to a file under DIRECTORY. This option is only for XML stream backend. : -?, --help Cutter shows common options. : --help-stream Cutter shows stream related options. : --help-report Cutter shows report related options. : --help-ui Cutter shows UI related options. : --help-all Cutter shows all options. == EXIT STATUS The exit status is 0 if all tests are passed and non-0 otherwise. Omission test result and notification test result are not treated as failure. == FILES : /usr/local/share/doc/cutter/ The directory has Cutter documents. e.g. reference manual, tutorial and so on. == EXAMPLE In the following example, cutter runs tests under tests/ directory and shows test progress verbosely. % cutter -v v test/ In the following example, test results are saved under logs/ directory: % cutter --stream=xml --stream-directory=logs/ test/ == SEE ALSO GLib's reference manual. cutter-testing-framework-1.1.7/doc/cut-diff.jman0000644000175000017500000000442211523751361017775 0ustar koukou.\" DO NOT MODIFY THIS FILE! it was generated by rd2 .TH CUT\-DIFF 1 "February 2011" "Cutter" "Cutterのマニュアル" .SH 名前 .PP cut\-diff \- 色付きで2つのファイルの違いを表示 .SH 書式 .PP \&\fBcut\-diff\fP [\fIオプション...\fP] \fIファイル1\fP \fIファイル2\fP .SH 説明 .PP cut\-diffはCutterで使用している差分表示機能を利用したdiffコマンドです。色付きでわかりやすく差分を表示したい場合に便利です。patchコマンドと一緒に使う、色がなくても問題ない、などの場合は通常のdiffコマンドがおすすめです。 .SH オプション .TP .fi .B \-\-version バージョンを表示して終了します。 .TP .fi .B \-c [yes|true|no|false|auto], \-\-color=[yes|true|no|false|auto] 色付きで差分を表示するかどうかを指定します。\&\fByes\fPまたは\&\fBtrue\fPの場合は色付きで表示します。\&\fBno\fPまたは\&\fBfalse\fPの場合は色なしで表示します。\&\fBauto\fPの場合は色付けできそうな場合は色付きで表示し、そうでない場合は色なしで表示します。 デフォルトはautoです。 .TP .fi .B \-u, \-\-unified unified diff形式で出力します。 .TP .fi .B \-\-context\-lines=LINES 差分の周辺\&\fBLINES\fP行を表示します。 デフォルトでは全部の行を表示します。unified diff形式の場合は3行です。 .TP .fi .B \-\-label=LABEL, \-L=LABEL ヘッダのラベルに\&\fBLABEL\fPを使います。1つめの\fI\-\-label\fPオプションで指定した値は\fIfile1\fPのラベルになり、2つめの\fI\-\-label\fPオプションで指定した値は\fIfile2\fPのラベルになります。 デフォルトではファイル名を使います。 .SH 終了ステータス .PP エラーが発生した場合は0以外、そうでない場合は0を返します。 .PP TODO: 変更がない場合は0、変更があった場合は1、エラーが起きた場合は2を返すこと。 .SH 例 .PP 以下の例は、\&\fBfile1\fPと\&\fBfile2\fPの差分を表示します。 .nf \& % cut\-diff file1 file2 .fi .PP 以下の例は、\&\fBfile1\fPと\&\fBfile2\fPの差分をunified diff形式で表示します。 .nf \& % cut\-diff \-u file1 file2 .fi .SH 関連項目 .PP diff(1) cutter-testing-framework-1.1.7/doc/install-to-freebsd.rd.ja0000644000175000017500000000205011424022723022027 0ustar koukou# -*- rd -*- = FreeBSDへインストール --- FreeBSDへのCutterのインストール方法 == はじめに FreeBSDへのCutterのインストール方法を説明します。 == インストール Cutterはportsに収録されているので、portupgradeでインストール できます。 パッケージでインストールする場合は以下のようにします。 % sudo /usr/sbin/pkg_add -r cutter portsでインストールする場合は以下のようにします。 % (cd /usr/ports/devel/cutter && sudo make install) 参考: * パッケージとportsについて: ((<アプリケーションのインストール - packages と ports|URL:http://www.freebsd.org/doc/ja/books/handbook/ports.html>)) * Cutterのportについて: ((<"FreshPorts -- devel/cutter"|URL:http://www.freshports.org/devel/cutter/>)) == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/cut-diff.rd.ja0000644000175000017500000000420211523751075020044 0ustar koukou= cut-diff / Cutter / Cutterのマニュアル == 名前 cut-diff - 色付きで2つのファイルの違いを表示 == 書式 (({cut-diff})) [((*オプション...*))] ((*ファイル1*)) ((*ファイル2*)) == 説明 cut-diffはCutterで使用している差分表示機能を利用したdiffコマ ンドです。色付きでわかりやすく差分を表示したい場合に便利です。 patchコマンドと一緒に使う、色がなくても問題ない、などの場合 は通常のdiffコマンドがおすすめです。 == オプション : --version バージョンを表示して終了します。 : -c [yes|true|no|false|auto], --color=[yes|true|no|false|auto] 色付きで差分を表示するかどうかを指定します。 (({yes}))または(({true}))の場合は色付きで表示します。 (({no}))または(({false}))の場合は色なしで表示します。 (({auto}))の場合は色付けできそうな場合は色付きで表示し、 そうでない場合は色なしで表示します。 デフォルトはautoです。 : -u, --unified unified diff形式で出力します。 : --context-lines=LINES 差分の周辺(({LINES}))行を表示します。 デフォルトでは全部の行を表示します。unified diff形式の場 合は3行です。 : --label=LABEL, -L=LABEL ヘッダのラベルに(({LABEL}))を使います。1つめの ((*--label*))オプションで指定した値は((*file1*))のラベル になり、2つめの((*--label*))オプションで指定した値は ((*file2*))のラベルになります。 デフォルトではファイル名を使います。 == 終了ステータス エラーが発生した場合は0以外、そうでない場合は0を返します。 TODO: 変更がない場合は0、変更があった場合は1、エラーが起きた 場合は2を返すこと。 == 例 以下の例は、(({file1}))と(({file2}))の差分を表示します。 % cut-diff file1 file2 以下の例は、(({file1}))と(({file2}))の差分をunified diff形式 で表示します。 % cut-diff -u file1 file2 == 関連項目 diff(1) cutter-testing-framework-1.1.7/doc/install-to-mac-os-x.rd.ja0000644000175000017500000000157211205747025022057 0ustar koukou# -*- rd -*- = Mac OS Xへインストール --- Mac OS XへのCutterのインストール方法 == はじめに Mac OS XへのCutterのインストール方法を説明します。 == インストール CutterのMacPortsが提供されているので、portでインストールでき ます。 まず、Cutter用のMacPortsを取得します。 % cd ~ % svn co https://cutter.svn.sourceforge.net/svnroot/cutter/macports/ cutter-macports 次に、取得したディレクトリを登録します。 % echo file://$HOME/cutter-macports | sudo sh -c "cat >> /opt/local/etc/macports/sources.conf" portでインストールします。 % sudo port install cutter == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/install-to-solaris.rd.ja0000644000175000017500000000464111525645034022111 0ustar koukou# -*- rd -*- = Solarisへインストール --- SolarisへのCutterのインストール方法 == はじめに SolraisへのCutterのインストール方法を説明します。 == GLibのインストール Cutterを動かすためにはGLib 2.16以降が必要です。Solaris 10には GLib 2.16以降のパッケージがないため、自分でビルド・インストー ルしなければいけません。 GLibをビルドするためにはGNU gettext、GNU libiconvが必要です。 これらのソフトウェアは (())のパッケー ジを利用してインストールすることができます。 例えば、GNU gettextは以下のようにインストールできます。 % mkdir -p ~/packages % cd ~/packages % wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/gettext-0.17-sol10-sparc-local.gz % gzip -d gettext-0.17-sol10-sparc-local.gz % pkgadd -d ./gettext-0.17-sol10-sparc-local 同様にGNU libiconvもインストールしてください。 また、Cutterを用いた開発では、GNUビルドツールが必要になるので、 GNU Autoconf、GNU Automake、GNU Libtoolもインストールしておい てください。必須ではありませんが、国際化されたソフトウェアを 開発する場合はintltoolもあるとよいでしょう。 パッケージをインストールしたらGLibをビルドすることができます。 以下のようにしてビルド・インストールできます。GNU make を使う ことに注意してください。 % mkdir -p ~/src % cd ~/src % wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz % tar xvzf glib-2.22.4.tar.gz % cd glib-2.22.4 % ./configure --with-libiconv=gnu % gmake % sudo gmake install == Cutterのインストール CutterはGNUビルドツールを利用しているので、他のフリーソフト ウェアと同じように以下のようにインストールできます。GNU make を使うことに注意してください。 % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % gmake % gmake install == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/cutter.jman0000644000175000017500000001757611523751361017620 0ustar koukou.\" DO NOT MODIFY THIS FILE! it was generated by rd2 .TH CUTTER 1 "February 2011" "Cutter" "Cutterのマニュアル" .SH 名前 .PP cutter \- C言語・C++言語用のxUnit系テスティングフレームワーク .SH 書式 .PP \&\fBcutter\fP [\fIオプション...\fP] \fIテストディレクトリ\fP .PP \&\fBcutter\fP \-\-mode=analyze [\fIオプション ...\fP] \fIログディレクトリ\fP .SH 説明 .PP CutterはC言語・C++言語用のxUnit系単体テスト(ユニットテスト)フレームワークです。Cutterはプログラマに2つの重要なインターフェイスを提供します。 .TP 1. 簡単にテストが書けるAPI .TP 2. 簡単にデバッグできるユーザインターフェイス .PP Cutterはプログラマが新しいテストを書くこと、すでにあるテストを実行すること、実行したテストからフィードバックを得ることを支援します。 .PP \fIテストディレクトリ\fPにはtest_*.soがあるディレクトリを指定します。Cutterはtest_*.soは再帰的に検索します。 .PP \fIログディレクトリ\fPにはCutterのログファイルがあるディレクトリを指定します。Cutterは\-\-stream\-directoryオプションがしていされるとテスト結果をログファイルに出力します。 .SH オプション .TP .fi .B \-\-version バージョンを表示して終了します。 .TP .fi .B \-\-mode=[test|analyze] 実行モードを指定します。testモードのときはテストを実行します。analyzeモードのときはテスト結果を解析します。 デフォルトはtestです。 .TP .fi .B \-s DIRECTORY, \-\-source\-directory=DIRECTORY テストが失敗した場合にファイル名の前にDIRECTORYを付加します。Cutterの出力からテストが失敗した箇所にジャンプするツール(Emacsなど)と連携するための機能です。 .TP .fi .B \-t TEST_CASE_NAME, \-\-test\-case=TEST_CASE_NAME TEST_CASE_NAMEにマッチしたテストケースを実行します。もし、TEST_CASE_NAMEが"/"で囲まれていた場合は(例: /test_/)正規表現として扱います。 このオプションは複数回指定できます。その場合は、どれかのTEST_CASE_NAMEにマッチしたテストケースを実行します。(OR) .TP .fi .B \-n TEST_NAME, \-\-name=TEST_NAME TEST_NAMEにマッチしたテストを実行します。もし、TEST_NAMEが"/"で囲まれていた場合は(例: /test_/)正規表現として扱います。 このオプションは複数回指定できます。その場合は、どれかのTEST_NAMEにマッチしたテストケースを実行します。(OR) .TP .fi .B \-m, \-\-multi\-thread 各テストケースを新しいスレッドで実行します。 デフォルトでは無効です。 .TP .fi .B \-\-max\-threads=MAX_THREADS 最大MAX_THREADSスレッドを同時に動かしてテストケースと繰り返しテストを実行します。\-1を指定すると最大同時スレッド数を制限しません。 デフォルトは最大10スレッドです。 .TP .fi .B \-\-disable\-signal\-handling C\-cでのテスト途中終了や、SEGV時のバックトレース取得などを行うシグナル処理機能を無効にします。シグナルを用いてるライブラリをテストする場合はこの機能が障害になることがあります。その場合はこのオプションでCutterのシグナル処理機能を無効にしてください。 デフォルトでは有効です。 .TP .fi .B \-\-test\-case\-order=[none|name|name\-desc] 各テストケースの実行順を並び替えます。 noneを指定すると並び替えません。nameを指定するとテストケース名で昇順に並び替えます。name\-descを指定するとテストケース名で降順に並び替えます。 デフォルトはnoneです。 .TP .fi .B \-\-exclude\-file=FILE テストを集めるときにFILEを読み込みません。 .TP .fi .B \-\-exclude\-directory=DIRECTORY DIRECTORY以下にあるテストを検索しません。 .TP .fi .B \-\-fatal\-failures 失敗を致命的な問題として扱います。つまり、表明に失敗するとテストの実行を中断します。 デフォルトでは無効です。 .TP .fi .B \-\-keep\-opening\-modules ロードしたモジュールを開いたままにします。シンボルを解決できるようになるため、デバッグ時に便利です。 デフォルトでは無効です。 .TP .fi .B \-\-enable\-convenience\-attribute\-definition 便利ですが、危険でもある、"#{属性名}_#{テスト名 \- 'test_'プリフィックス}"属性設定関数を有効にします。 デフォルトでは無効です。 .TP .fi .B \-\-stop\-before\-test テスト関数を実行する直前にブレークポイントを設定します。デバッガ上でcutterを実行し、ステップインすれば、簡単にテスト関数に入ることができます。 デフォルトでは無効です。 .TP .fi .B \-u=[console|gtk], \-\-ui=[console|gtk] UIを指定します。 デフォルトはコンソールUIです。 .TP .fi .B \-v[s|silent|n|normal|v|verbose], \-\-verbose=[s|silent|n|normal|v|verbose] 出力の詳細さを指定します。 このオプションはコンソールUIを使用する場合だけ有効です。 .TP .fi .B \-c[yes|true|no|false|auto], \-\-color=[yes|true|no|false|auto] yesまたはtrueが指定された場合はCutterはエスケープシーケンスで色付けして出力します。noまたはfalseが指定された場合は色付けしません。autoあるいは値が省略された時は、可能なら色付けをします。 このオプションはコンソールUIを使用する場合だけ有効です。 .TP .fi .B \-\-pdf\-report=FILE FILEにPDF形式でテスト結果を出力します。 .TP .fi .B \-\-xml\-report=FILE FILEにXML形式でテスト結果を出力します。 .TP .fi .B \-\-stream=[xml] ストリームバックエンドを指定します。ストリームバックエンドはテスト結果を配信します。 現在はXMLストリームバックエンドがあります。 .TP .fi .B \-\-stream\-fd=FILE_DESCRIPTOR 出力ファイルディスクリプタを指定します。XMLストリームバックエンドはFILE_DESCRIPTORに配信します。 このオプションはXMLストリームバックエンドを使用する場合だけ有効です。 .TP .fi .B \-\-stream\-directory=DIRECTORY 出力ディレクトリを指定します。XMLストリームバックエンドはDIRECTORY以下にファイルを作成し、そのファイルに配信します。 このオプションはXMLストリームバックエンドを使用する場合だけ有効です。 .TP .fi .B \-?, \-\-help UIやテスト結果レポート機能に依存しないオプションを表示します。 .TP .fi .B \-\-help\-stream ストリーム関連のオプションを表示します。 .TP .fi .B \-\-help\-report レポート関連のオプションを表示します。 .TP .fi .B \-\-help\-ui UI関連のオプションを表示します。 .TP .fi .B \-\-help\-all すべてのオプションを表示します。 .SH 終了ステータス .PP すべてのテストがパスすると0で、そうでない場合は0以外になります。テスト結果の「省略」と「通知」は失敗として扱いません。 .SH ファイル .TP .fi .B /usr/local/share/doc/cutter/ja/ リファレンスマニュアルやチュートリアルなどのCutterのドキュメントがあります。 .SH 例 .PP 以下の例では、cutterはtest/ディレクトリ以下のテストを実行し、テストの進行状況を詳細に表示します。 .nf \& % cutter \-v v test/ .fi .PP 以下の例では、テスト結果がlogs/ディレクトリ以下に保存されます。 .nf \& % cutter \-\-stream=xml \-\-stream\-directory=logs/ test/ .fi .SH 関連項目 .PP GLibのリファレンスマニュアル。 cutter-testing-framework-1.1.7/doc/Makefile.in0000644000175000017500000006251011525654633017502 0ustar koukou# 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@ 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@ subdir = doc DIST_COMMON = $(dist_man1_MANS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(dist_man1_MANS) 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = reference EXTRA_DIST = cutter.rd cutter.rd.ja cut-diff.rd cut-diff.rd.ja \ install-to-debian.rd install-to-debian.rd.ja \ install-to-cygwin.rd install-to-cygwin.rd.ja \ install-to-fedora.rd install-to-fedora.rd.ja \ install-to-centos.rd install-to-centos.rd.ja \ install-to-freebsd.rd install-to-freebsd.rd.ja \ install-to-mac-os-x.rd install-to-mac-os-x.rd.ja \ install-to-solaris.rd install-to-solaris.rd.ja \ install-to-ubuntu.rd install-to-ubuntu.rd.ja \ install-to-others.rd install-to-others.rd.ja $(svg_images) \ $(dist_ja_man1_mans) svg_images = \ cutter-accelerate-development-cycle.svg \ cutter-two-important-features.svg \ cutter-easy-to-debug.svg \ cutter-easy-to-write.svg dist_man1_MANS = \ cutter.man \ cut-diff.man ja_man1dir = $(mandir)/ja/man1 dist_ja_man1_mans = \ cutter.jman \ cut-diff.jman MAINTAINERCLEANFILES = $(dist_man1_MANS) $(dist_ja_man1_mans) SUFFIXES = .rd .man .jman .svg .png RD2LIB_DIR = $(top_srcdir)/misc RD2MAN_LIB_FILE = rd2man-lib.rb RD2MAN_LIB = $(RD2LIB_DIR)/$(RD2MAN_LIB_FILE) RD2MAN = $(RUBY) -I $(RD2LIB_DIR) $(RD2) -r $(RD2MAN_LIB_FILE) all: all-recursive .SUFFIXES: .SUFFIXES: .rd .man .jman .svg .png $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(dist_man1_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @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 check-am: all-am check: check-recursive all-am: Makefile $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)"; 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: 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) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local uninstall-man uninstall-man: uninstall-man1 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-local uninstall-man uninstall-man1 jman: $(dist_ja_man1_mans) @HAVE_RD2_TRUE@install-data-local: jman @HAVE_RD2_FALSE@install-data-local: test -z "$(DESTDIR)$(ja_man1dir)" || $(mkdir_p) "$(DESTDIR)$(ja_man1dir)" @for jman in $(dist_ja_man1_mans); do \ test -f "$${jman}" || break; \ jman_path=$(top_builddir)/doc/$${jman}; \ jman_file=`echo $${jman} | sed -e s/jman$$/1/`; \ echo $(INSTALL_DATA) $${jman_path} \ "$(DESTDIR)$(ja_man1dir)"/$${jman_file}; \ $(INSTALL_DATA) $${jman_path} \ "$(DESTDIR)$(ja_man1dir)"/$${jman_file}; \ done uninstall-local: @for jman in $(dist_ja_man1_mans); do \ jman_file=`echo $${jman} | sed -e s/jman$$/1/`; \ rm -f "$(DESTDIR)$(ja_man1dir)"/$${jman_file}; \ done # dirty... cutter.jman: cutter.rd.ja cut-diff.jman: cut-diff.rd.ja .rd.man: $(RD2MAN) $< > $@ .rd.jman: # dirty... $(RD2MAN) $<.ja > $@ .svg.png: inkscape --export-png $@ $< # 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: cutter-testing-framework-1.1.7/doc/install-to-fedora.rd.ja0000644000175000017500000000137711523751075021701 0ustar koukou# -*- rd -*- = Fedoraへインストール --- FedoraへのCutterのインストール方法 == はじめに FedoraへのCutterのインストール方法を説明します。 == インストール CutterのYumリポジトリが提供されているので、yumでインストール できます。 まず、Yumリポジトリを登録します。 % sudo rpm -Uvh http://cutter.sourceforge.net/fedora/cutter-repository-1.0.0-1.noarch.rpm Yumリポジトリを登録したらyumでインストールできます。 % sudo yum install -y cutter == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/Makefile.am0000644000175000017500000000410311407320456017453 0ustar koukouSUBDIRS = reference EXTRA_DIST = \ cutter.rd \ cutter.rd.ja \ cut-diff.rd \ cut-diff.rd.ja \ install-to-debian.rd \ install-to-debian.rd.ja \ install-to-cygwin.rd \ install-to-cygwin.rd.ja \ install-to-fedora.rd \ install-to-fedora.rd.ja \ install-to-centos.rd \ install-to-centos.rd.ja \ install-to-freebsd.rd \ install-to-freebsd.rd.ja \ install-to-mac-os-x.rd \ install-to-mac-os-x.rd.ja \ install-to-solaris.rd \ install-to-solaris.rd.ja \ install-to-ubuntu.rd \ install-to-ubuntu.rd.ja \ install-to-others.rd \ install-to-others.rd.ja \ $(svg_images) svg_images = \ cutter-accelerate-development-cycle.svg \ cutter-two-important-features.svg \ cutter-easy-to-debug.svg \ cutter-easy-to-write.svg dist_man1_MANS = \ cutter.man \ cut-diff.man ja_man1dir = $(mandir)/ja/man1 dist_ja_man1_mans = \ cutter.jman \ cut-diff.jman EXTRA_DIST += $(dist_ja_man1_mans) jman: $(dist_ja_man1_mans) if HAVE_RD2 install-data-local: jman else install-data-local: endif test -z "$(DESTDIR)$(ja_man1dir)" || $(mkdir_p) "$(DESTDIR)$(ja_man1dir)" @for jman in $(dist_ja_man1_mans); do \ test -f "$${jman}" || break; \ jman_path=$(top_builddir)/doc/$${jman}; \ jman_file=`echo $${jman} | sed -e s/jman$$/1/`; \ echo $(INSTALL_DATA) $${jman_path} \ "$(DESTDIR)$(ja_man1dir)"/$${jman_file}; \ $(INSTALL_DATA) $${jman_path} \ "$(DESTDIR)$(ja_man1dir)"/$${jman_file}; \ done uninstall-local: @for jman in $(dist_ja_man1_mans); do \ jman_file=`echo $${jman} | sed -e s/jman$$/1/`; \ rm -f "$(DESTDIR)$(ja_man1dir)"/$${jman_file}; \ done # dirty... cutter.jman: cutter.rd.ja cut-diff.jman: cut-diff.rd.ja MAINTAINERCLEANFILES = $(dist_man1_MANS) $(dist_ja_man1_mans) SUFFIXES = .rd .man .jman .svg .png RD2LIB_DIR = $(top_srcdir)/misc RD2MAN_LIB_FILE = rd2man-lib.rb RD2MAN_LIB = $(RD2LIB_DIR)/$(RD2MAN_LIB_FILE) RD2MAN = $(RUBY) -I $(RD2LIB_DIR) $(RD2) -r $(RD2MAN_LIB_FILE) .rd.man: $(RD2MAN) $< > $@ .rd.jman: # dirty... $(RD2MAN) $<.ja > $@ .svg.png: inkscape --export-png $@ $< cutter-testing-framework-1.1.7/doc/reference/0000755000175000017500000000000011525707421017361 5ustar koukoucutter-testing-framework-1.1.7/doc/reference/users.xml0000644000175000017500000000402111525655563021252 0ustar koukou Users CUTTER Library Users Projects and developers that use Cutter List Cutter : self test. Senna : full-text search engine. groonga : full-text search engine and column store. mroonga : a MySQL pluggable storage engine for groonga. milter manager : a milter to use milters effectively. Kazehakase : a browser. GtkIEEmbed : a GTK+ widget library to use HTML rendering engine of Internet Explorer. GPointingDeviceSettings : a GUI tool for setting various pointing devices. nfc-tools : Based on libnfc , Open Source Near Field Communication (NFC) Library, this project intent to provide useful tools for POSIX compliant operating systems. cutter-testing-framework-1.1.7/doc/reference/install-to-solaris.xml0000644000175000017500000000516011525655563023656 0ustar koukou Install to Solaris CUTTER Library Install to Solaris How to install Cutter to Solaris Introduction This document explains how to install Cutter to Solaris. Install GLib Cutter requires GLib 2.16 or later. There is no package for GLib 2.16 or later for Solaris 10. We need to build and install by ourself. GLib requires GNU gettext and GNU libiconv. We can install them as packages at Sunfreeware . For example, we can install GNU gettext with the following steps: % mkdir -p ~/packages % cd ~/packages % wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/gettext-0.17-sol10-sparc-local.gz % gzip -d gettext-0.17-sol10-sparc-local.gz % pkgadd -d ./gettext-0.17-sol10-sparc-local We can install GNU libiconv with the same steps. We also need GNU build system, GNU Autoconf, GNU Automake and GNU Libtool, on development with Cutter. We need to install them. It's a good idea that we also install intltool. It's not required but it's needed for internationalized software development. We can build GLib after we install the above packages. Here are steps to build and install GLib. Note that we need to use GNU make: % mkdir -p ~/src % cd ~/src % wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz % tar xvzf glib-2.22.4.tar.gz % cd glib-2.22.4 % ./configure --with-libiconv=gnu % gmake % sudo gmake install Install Cutter Cutter can be installed like other free software because Cutter uses GNU build tools. Note that we need to use GNU make: % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % gmake % sudo gmake install The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/version.xml.in0000644000175000017500000000001211205747025022165 0ustar koukou@VERSION@ cutter-testing-framework-1.1.7/doc/reference/readme.xml.ja0000644000175000017500000004073511525655563021753 0ustar koukou はじめに Cutterライブラリ はじめに C言語・C++言語用単体テストフレームワークCutterの概要 名前 Cutter 作者 プログラム Kouhei Sutou <kou@clear-code.com> Hiroyuki Ikezoe <ikezoe@clear-code.com> Yuto Hayamizu <y.hayamizu@gmail.com> きのたんアイコン Mayu & Co. ライセンス ソースコード: LGPLバージョン3またはそれ以降のバージョン(詳細: license/lgpl-3.txt )です。 ドキュメントときのたんアイコン: LGPLとGFDLとクリエイティブ・コモンズ・ライセンスのトリプルライセンス。 LGPLバージョン3またはそれ以降のバージョン(詳細: license/lgpl-3.txt )です。 GFDLはバージョン1.3またはそれ以降のバージョン(詳細: license/gfdl-1.3.txt )です。 クリエイティブ・コモンズ・ライセンスは 表示-継承(CC BY-SA) です。 例外: glib-compatible/glibintl.h, glib-compatible/gregex.*, glib-compatible/gscripttable.h, glib-compatible/gsequence.*, glib-compatible/gstring.*, glib-compatible/gunicode.h, glib-compatible/guniprop.c: LGPLバージョン2.0またはそれ以降のバージョン(詳細: glib-compatible/COPYING glib-compatible/pcre/: PCREライセンス(詳細: glib-compatible/pcre/COPYING html/blog.*, html/download.*, html/heading-mark.* html/install.*, html/readme.*, html/reference.*, html/tango-logo.png, html/tutorial.*, html/mini-*.svg:パブリックドメイン。 Tango Desktop Project の成果物を利用しています。(一部改変しているものもある) html/ja.png, html/us.png, html/famfamfam-logo.png:パブリックドメイン。 famfamfam.com が配布している国旗です。 Cutter? CutterはC言語・C++言語のためのxUnit系の単体テストフレームワークです。 Cutterの特徴は以下の通りです。 テストが簡単に書ける 出力結果がデバッグに使いやすい テストを共有ライブラリとしてビルドする 詳細は 特徴 を見てください。 依存ライブラリ GLib >= 2.16 入手方法 tar.gz: % wget http://downloads.sourceforge.net/cutter/cutter-1.1.0.tar.gz Subversion: % svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter インストール インストール を見てください。 使い方 % cutter [オプション ...] テストディレクトリ テストディレクトリにはtest_*.soがあるディレクトリを指定します。cutterはテストディレクトリ以下にあるtest_*.soを再帰的に検索します。 詳細は cutter を見てください。 テストの仕方 テストの実行は以下のような流れになります. テストを作成する コンパイルし、test_*.soを作成する cutterを起動し、test_*.soを読み込ませ、テストをする 詳しくは チュートリアル とsample/stack/を参考にしてください。 テスト結果 テスト結果は例えば以下のようになります。 ..........F................................................. 1) Failure: test_test_case_count <1 == cut_test_case_get_n_tests(test_object, NULL)> expected: <1> but was: <0> test/test-cut-test-case.c:143: test_test_case_count() Finished in 0.020857 seconds 60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) 進行状況 一番上にある「.」と「F」の部分がテストの進行状況を示しています。 ..........F................................................. 各「.」、「F」が1つのテストケース(テスト関数)を表しています。「.」が成功したテストケース、「F」が失敗したテストケースを表しています。他にも「E」、「P」、「N」があり、それぞれエラー、保留、通知を表しています。まとめると以下のようになります。 . 成功したテスト F 表明が失敗したテスト E 異常終了したテスト P 保留マークがついているテスト N 通知が行われたテスト 上記のテストを表す印はテストが実行される毎に出力されます。テスト実行中は、この出力で実行状況を確認できます。 テスト結果のまとめ テストが終了すると、テスト結果のまとめを出力します。まとめは、まず、成功しなかったテストの詳細をそれぞれ表示します。例では1つ失敗があったのでそれを表示しています。 1) Failure: test_test_case_count <1 == cut_test_case_get_n_tests(test_object, NULL)> expected: <1> but was: <0> test/test-cut-test-case.c:143: test_test_case_count() この例ではtest_test_case_countテストケースが失敗し、cut_test_case_get_n_tests(test_object, NULL)が1になって欲しかったのに実際は0になっていることを表しています。また、この失敗した表明はtest/test-cut-test-case.cの143行目、test_test_case_count()関数内で起こったことがわかります。 テスト結果の詳細一覧の後はテストにかかった時間が表示されます。 Finished in 0.020857 seconds 最後にテスト結果の要約が表示されます。 60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) それぞれは以下のような意味です。 n test(s) n個のテストケース(テスト関数)を実行した n assertion(s) n個の表明にパスした n failure(s) n個の表明に失敗した n error(s) n個の異常事態が発生した(cut_error()を使用した) n pending(s) n個のテストケースを保留にした(cut_pending()を使用した) n notification(s) n個の通知が発生した(cut_notification()を使用した) この例では60個のテストケースを実行し、253個の表明にパスし、1個の表明に失敗したということになります。異常事態や保留にしたテストケースなどはありませんでした。 XML出力 --xml-reportオプションを指定することでテスト結果をXML形式で出力することができます。出力されるXMLは以下のような構造になっています。 <report> <result> <test-case> <name>テストケース名</name> <description>テストケースの説明(もしあれば)</description> </test-case> <test> <name>テスト名</name> <description>テストの説明(もしあれば)</description> <option><!-- 属性情報(もしあれば) --> <name>属性名(例: bug)</name> <value>属性値(例: 1234)</value> </option> <option> ... </option> </test> <status>テスト結果([success|failure|error|pending|notification])</status> <detail>テスト結果の詳細(もしあれば)</detail> <backtrace><!-- バックトレース(もしあれば) --> <entry> <file>ファイル名</file> <line>行</line> <info>付加情報</info> </entry> <entry> ... </entry> </backtrace> <elapsed>実行時間(例: 0.000010)</elapsed> </result> <result> ... </result> ... </report> テストカバレッジ システムに LTP tools がインストールされている場合は、Cutterを使ったテストを用いてコードカバレッジを出力することができます。カバレッジを出力するにはconfigure.acに以下を追加して、"make coverage"を実行してください。 AC_CHECK_COVERAGE リファレンス 表明 cutter/cut-assertions.h を見てください。 属性 テストに属性を加えて、テスト失敗時により有益な情報を利用することができます。例えば、以下のようにテストにBug IDの情報を付加することができます。 void attributes_invalid_input(void); void test_invalid_input(void); void attributes_invalid_input (void) { cut_set_attributes("bug", "123"); } void test_invalid_input (void) { cut_assert_equal("OK", get_input()); } この例では、test_invalid_inputテストがBug #123のテストであるという情報を付加しています。 属性は"「attributes_「テスト名からtest_を除いたもの」"という名前の関数を定義し、その関数の中でcut_set_attributes()を使って設定できます。上記の例では「test_invalid_input」テストに「123」という値の「bug」属性を追加するために「attributes_invalid_input」という関数を定義し、その中でcut_set_attributes("bug", "123")を呼び、属性を設定しています。 雛型 テストの雛型は以下のようになります. #include <cutter.h> #include "自分のプログラムのヘッダファイル" void test_condition(void); void test_strstr(void); static int condition = 0; void cut_setup (void) { /* 初期化用コード */ condition = 1; } void cut_teardown (void) { /* 後片付け用コード */ condition = 0; } void test_condition(void) { cut_set_message("conditionの値はcut_setup()で1に設定されているはず"); cut_assert_equal_int(1, condition); ... } void test_strstr(void) { cut_assert_equal_string("sub-string", strstr("string sub-string", "sub")); ... } 感謝 Kazumasa Matsunagaさん: ビルドの不具合を報告してくれました。 Daijiro MORIさん: 不具合を報告してくれました。 海野さん: チュートリアルの不具合に気づかせてくれました。 Solaris用インストールドキュメントの作成を手伝ってくれました。 グニャラくん: APIについてアドバイスしてくれました。 山川さん: Cygwinでの動作を教えてくれました。 奥地さん: Localeまわりの不具合を報告してくれました。 新機能を提案してくれました。 Zed Shawさん: 不具合を報告してくれました。 Romuald Contyさん: ドキュメントの不具合を報告してくれました。 Romain Tartièreさん: 不具合を報告してくれました。 改良方法を提案してくれました。 Ilya Baryginさん: テストの不具合を報告してくれました。 中村弘輝さん CentOSでの不具合を報告してくれました。 cutter-testing-framework-1.1.7/doc/reference/cutter-overrides.txt0000644000175000017500000004217711523761403023441 0ustar koukou# cutter.h cut_set_message void const char *format, ... cut_set_message_va_list void const char *format, va_list args cut_keep_message void void cut_message void const char *format, ... # cut-assertion.h cut_error void const char *format, ... cut_fail void const char *format, ... cut_pend void const char *format, ... cut_pending void const char *format, ... cut_notify void const char *format, ... cut_omit void const char *format, ... cut_assert void cut_boolean expression, ... cut_assert_true void cut_boolean expression, ... cut_assert_false void cut_boolean expression, ... cut_assert_equal_boolean void cut_boolean expected, cut_boolean actual, ... cut_assert_not_equal_boolean void cut_boolean expected, cut_boolean actual, ... cut_assert_null void const void *expression, ... cut_assert_null_string void const char *string, ... cut_assert_not_null void const void *expression, ... cut_assert_equal_int void int expected, int actual, ... cut_assert_not_equal_int void int expected, int actual, ... cut_assert_equal_uint void unsigned int expected, unsigned int actual, ... cut_assert_not_equal_uint void unsigned int expected, unsigned int actual, ... cut_assert_equal_size void size_t expected, size_t actual, ... cut_assert_not_equal_size void size_t expected, size_t actual, ... cut_assert_equal_double void double expected, double error, double actual, ... cut_assert_not_equal_double void double expected, double error, double actual, ... cut_assert_equal_string void const char *expected, const char *actual, ... cut_assert_not_equal_string void const char *expected, const char *actual, ... cut_assert_equal_string_with_free void const char *expected, const char *actual, ... cut_assert_equal_string_or_null void const char *expected, const char *actual, ... cut_assert_equal_substring void const char *expected, const char *actual, size_t length, ... cut_assert_not_equal_substring void const char *expected, const char *actual, size_t length, ... cut_assert_equal_memory void const void *expected, size_t expected_size, const void *actual, size_t actual_size, ... cut_assert_not_equal_memory void const void *expected, size_t expected_size, const void *actual, size_t actual_size, ... cut_assert_equal_string_array void char **expected, char **actual, ... cut_assert_equal_string_array_with_free void char **expected, char **actual, ... cut_assert_errno void ... cut_assert_file_exist void const char *path, ... cut_assert_path_exist void const char *path, ... cut_assert_path_not_exist void const char *path, ... cut_assert_exist_path void const char *path, ... cut_assert_not_exist_path void const char *path, ... cut_assert_match void const char *pattern, const char *actual, ... cut_assert_match_with_free void const char *pattern, const char *actual, ... cut_assert_equal_pointer void const void *expected, const void *actual, ... cut_assert_equal_fixture_data_string void const char *expected, const void *path, ... cut_error_errno void ... cut_return void void # cut-types.h CUT_TRUE #define CUT_TRUE CUT_FALSE #define CUT_FALSE # cut-test-utils.h cut_take void * void *object, CutDestroyFunction destroy_function cut_take_memory const void * void *memory cut_take_string const char * char *string cut_take_strdup const char * const char *string cut_take_strndup const char * const char *string, size_t size cut_take_memdup const void * const void *memory, size_t size cut_take_printf const char * const char *format, ... cut_take_string_array char ** char **strings cut_take_diff const char * const char *from, const char *to cut_take_replace const char * const char *target, const char *pattern, const char *replacement cut_append_diff const char * const char *message, const char *from, const char *to cut_inspect_string_array const char * const char **strings cut_take_inspect_string const char * const char *string cut_set_fixture_data_dir void const char *path, ... cut_build_fixture_data_path char * const char *path, ... cut_build_fixture_path const char * const char *path, ... cut_get_fixture_data_string const char * const char *path, ... cut_get_fixture_data const char * size_t *size, const char *path, ... cut_remove_path void const char *path, ... cut_build_path const char * const char *path, ... cut_build_path_array const char * const char **paths cut_make_directory void const char *path, ... cut_equal_string cut_boolean const char *string1, const char *string2 cut_equal_double cut_boolean double double1, double double2, double error # cut-helper.h cut_test_pass void void cut_test_fail void const char *system_message, ... cut_test_fail_va_list void const char *system_message, const char *user_message_format cut_push_backtrace void const char *expression cut_pop_backtrace void void # cut-multi-process.h cut_take_new_sub_process CutSubProcess * const char *test_directory cut_take_new_sub_process_group CutSubProcessGroup * void # gcut-test-utils.h gcut_take_object GObject * GObject *object gcut_take_error GError * GError *error gcut_take_list const GList * const GList *list, CutDestroyFunction destroy_function gcut_take_hash_table GHashTable * GHashTable *hash_table gcut_take_string GString * GString *string gcut_take_new_string GString * const gchar *string gcut_take_new_list_string const GList * const gchar *value, ... gcut_take_new_list_string_array const GList * const gchar **strings gcut_take_new_list_int const GList * guint n, gint value, ... gcut_take_new_list_uint const GList * guint n, guint value, ... gcut_take_new_hash_table_string_string GHashTable * const gchar *key, ... gcut_get_fixture_data GString * const gchar *path, ... # gcut-assertions.h gcut_assert_equal_type void GType expected, GType actual, ... cut_assert_equal_g_type void GType expected, GType actual, ... gcut_assert_equal_value void GValue *expected, GValue *actual, ... cut_assert_equal_g_value void GValue *expected, GValue *actual, ... gcut_assert_equal_list void GList *expected, GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, ... gcut_assert_equal_list_int void GList *expected, GList *actual, ... cut_assert_equal_g_list_int void GList *expected, GList *actual, ... gcut_assert_equal_list_uint void GList *expected, GList *actual, ... cut_assert_equal_g_list_uint void GList *expected, GList *actual, ... gcut_assert_equal_list_string void GList *expected, GList *actual, ... cut_assert_equal_g_list_string void GList *expected, GList *actual, ... gcut_assert_equal_list_object void GList *expected, GList *actual, ... gcut_assert_equal_list_object_custom void GList *expected, GList *actual, GEqualFunc equal_function, ... gcut_assert_equal_list_enum void GType type, GList *expected, GList *actual, ... gcut_assert_equal_list_flags void GType type, GList *expected, GList *actual, ... gcut_assert_equal_hash_table void GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, ... gcut_assert_equal_hash_table_string_string void GHashTable *expected, GHashTable *actual, ... gcut_assert_error void GError *error, ... cut_assert_g_error void GError *error, ... gcut_assert_equal_error void GError *expected, GError *actual, ... gcut_assert_remove_path void const gchar *path, ... cut_assert_remove_path void const gchar *path, ... gcut_assert_equal_time_val void GTimeVal expected, GTimeVal actual, ... gcut_assert_equal_enum void GType enum_type, gint expected, gint actual, ... gcut_assert_equal_flags void GType flags_type, guint expected, guint actual, ... gcut_assert_equal_object void GObject *expected, GObject *actual, ... gcut_assert_equal_object_custom void GObject *expected, GObject *actual, GEqualFunc equal_function, ... gcut_assert_equal_int64 void gint64 expected, gint64 actual, ... gcut_assert_not_equal_int64 void gint64 expected, gint64 actual, ... gcut_assert_equal_uint64 void guint64 expected, guint64 actual, ... gcut_assert_not_equal_uint64 void guint64 expected, guint64 actual, ... gcut_assert_equal_pid void GPid expected, GPid actual, ... gcut_assert_not_equal_pid void GPid expected, GPid actual, ... gcut_assert_equal_string void GString *expected, GString *actual, ... # gcut-data.h gcut_add_datum void const gchar *name, const gchar *first_field_name, ... gcut_data_has_field gboolean gconstpointer data, const gchar *field_name gcut_data_get_string const gchar * gconstpointer data, const gchar *field_name gcut_data_get_int gint gconstpointer data, const gchar *field_name gcut_data_get_uint guint gconstpointer data, const gchar *field_name gcut_data_get_type GType gconstpointer data, const gchar *field_name gcut_data_get_flags guint gconstpointer data, const gchar *field_name gcut_data_get_enum gint gconstpointer data, const gchar *field_name gcut_data_get_pointer gconstpointer gconstpointer data, const gchar *field_name gcut_data_get_boxed gconstpointer gconstpointer data, const gchar *field_name # gdkcut-pixbuf-assertions.h gdkcut_pixbuf_assert_equal void const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, ... # soupcut-assertions.h soupcut_message_assert_equal_content_type void const gchar *expected, SoupMessage *message, ... soupcut_client_assert_equal_content_type void const gchar *expected, SoupCutClient *client, ... soupcut_client_assert_response void SoupCutClient *client, ... soupcut_client_assert_equal_body void const gchar *expected, SoupCutClient *client, ... soupcut_client_assert_match_body void const gchar *pattern, SoupCutClient *client, ... cutter-testing-framework-1.1.7/doc/reference/cutter.types0000644000175000017500000000016411523751075021760 0ustar koukougcut_egg_get_type gcut_process_get_type gcut_dynamic_data_get_type gcut_event_loop_get_type soupcut_client_get_type cutter-testing-framework-1.1.7/doc/reference/diff-dark-and-nested-circle.png0000644000175000017500000001254311205747025025201 0ustar koukouPNG  IHDRg3sBIT|dIDATxkLWo?4`c܆  !~I$Mb[)niv7#3&SX&U,$e;q0`C& pMtWSU%DZqG=ݺu2RX5p;)hY @/Y@ `fY@ `޿>5UGmv{ma+8aeY6'(+2)d8dgY_H&13X|0}x?mb2Q &Z6.ZvAd o$zpߙb4)M'>Q?v/ADm2_38_Ok0&Dunm]z oWj%@<:ܫ+hAMT5>_%thA;kF.Ïw h4Q,o?P7rs(qb.|9J)&MЎ桒֕' ǧ+'{ٳC&wAMMgopJ$ѣMA-M{*+qMЛGU &Xrx[SuyiUf`i@Hj,|쉮j=zEQ 6 yg` &X[=u,Ju̇B&"!fyocO|ꏌ*Jp{웋Oa&f9ߍ@mn2h"(:K_^ڙ) ДCvr&ʡY^;w(OXpx{N&ʢYzV?C_Ey[<ުv(lU/(hnV;@4Jk",C%m v&iDY~z!,#·uH@&_I kv|-TM$gw5CSjMRH2KF[J֭61AQBIfʶS-v:Wc$c&ˣ&;XR]NLt@{#FΓ_ϤRzw:X0j",RejGNDukm``5>}Dr45p9̰p\΃C+"hT1{'C4DŊ6pypJtp-pMDUy&ǽKlLgf̢&^G;.m\Eè(FM_A/ },\NVVv2xA}bd:k&/G-E{ބ!Z3cۚቋxjmI~,}BQn=C (0j",Q)ઝ"7}m|nFfoڈFJ%l׊mXW䕯ϡhX6am^H`D2iM_hwC&̲LG|Õ @Ȇ+}g:8cÅXۢX3[XB{r4xLਔ@ZÅ~WK].oS+S*J!LbxfI<\7더wB7RDҊS^fU㓧ISCVV]r5dՁ^w4/Mw4Ư&7.t&4#%4T}g:5#625#po4Y%44fIWX:OY1J{]cDADV]3r 5Q;Q&zz}SJ HFl<>{E 4( VO>3ÕϩBI5mN=跃+y_:uy QZٷai^;wRtGЛGU)$h"(f?Ud7lk?ǟn4.MےIĊAfdly,hO/6  G ʼpkރkR&ʡ҈O~I7YpkfO~ڹ4QE,Ǟ說8nE 08Q@YZtyiQ'kFƶMBRfIcGE.h"ҚYcU-_}gD|E!h""=KC;J?˺ ǧ+'Saf4 jjB,i~zסu|\(Q3rȯr%RMnC b4oQ?v/AH W&kfG_c &Dh,iZ6.l BHFXw44Tٞ ,vgԖeehڜħ㐝eyg|!f+̸bQ79񏴾@d 3) F@, 0 @, 0 @kSf DcXBd5{Z"J={(㰐fY@ `fY@ x_snb)NX,yI9;ad%-kl1qf7))BOYy.e$?Oqܬ&K<Vo R֪Zˢ+IJL7[L d1!B!T5׼cJ$щ䠯H,],*wf04mfhڍrTE諾c?0x0Yh73Yt]a/bbZlBl31fʾj?a>+LX-M[qVSInwgns f]t9}\&Ӎ\wQxoOy"QjfpF:VP^M\#NQ橼X14u2|{Uo^cдQn%tخzwo$̒ \mp< o6iOoBo ɸpaus]Φ+[/z)Iۅ']&#z A GSLdBoB4`2|{cvD\n'.,dcōy͍hW ^Ǚy&vkjb0.tinBNROwmY FP&`1S(6e ;lgyh`.|&S{+IX-&& "s:rkf1#_tUfҒ04mRP`ˢ}j ̢sT;r8RV,ˤF񲔵J Bw܃3&R*Ѐcue)M鄇¾v9Ęc2RDE7arsmdDzlbK1KEj4߳(y<6{Q$Wahv$X`lgx[MZ9Xc5ݳ܊ݨFAx*&D'm;7 I=^=˭Hel[qǘ)W+Q뵭3%x]%M@ Jr/RWN {jUGIUǀt?peG|S=Kac][apίǙ~3B9?I fh*6_XZh,:0ۡ6,YZrROwM)JP["{"QR"fBBC=lgZ;.oJr)|tZ(r?nsduaiUz;3e_`{pT 0 3N2EB%q3B9XԱ弅``YN!GU *Eg+Yw,Y5:J/r', N⁥4yY, %/i1g'bM-&l6f2 lRVKRInZ8n:.YI,䚻U‰&@, 0 @, 0 @, S*&lPyEIENDB`cutter-testing-framework-1.1.7/doc/reference/install-to-freebsd.xml.ja0000644000175000017500000000365011525655563024207 0ustar koukou FreeBSDへインストール Cutterライブラリ FreeBSDへインストール FreeBSDへのCutterのインストール方法 はじめに FreeBSDへのCutterのインストール方法を説明します。 インストール Cutterはportsに収録されているので、portupgradeでインストールできます。 パッケージでインストールする場合は以下のようにします。 % sudo /usr/sbin/pkg_add -r cutter portsでインストールする場合は以下のようにします。 % (cd /usr/ports/devel/cutter && sudo make install) 参考: パッケージとportsについて: アプリケーションのインストール - packages と ports Cutterのportについて: FreshPorts -- devel/cutter 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/tmpl/0000755000175000017500000000000011525707421020335 5ustar koukoucutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-glib-event-loop.sgml0000644000175000017500000000106011523755276025172 0ustar koukou GCutGLibEventLoop @object: @parent_class: @context: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-unified-differ.sgml0000644000175000017500000000046011400101214024646 0ustar koukou CutUnifiedDiffer cutter-testing-framework-1.1.7/doc/reference/tmpl/soupcut-server.sgml0000644000175000017500000000111611400101215024203 0ustar koukou soupcut-server @server: @Returns: @context: @Returns: @server: @path: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-differ-readable.sgml0000644000175000017500000000117611264300760025006 0ustar koukou CutDifferReadable @object: @from: @to: @Returns: @diff: @Returns: @diff: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-public.sgml0000644000175000017500000000216311523751466023447 0ustar koukou gcut-public @context: @object: @Returns: @context: @error: @Returns: @context: @list: @destroy: @Returns: @context: @hash_table: @Returns: @context: @string: @Returns: @context: @full_path: @path: @Varargs: @Returns: @context: @full_path: @path: @args: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-object.sgml0000644000175000017500000000116511400101215023407 0ustar koukou gcut-object @object1: @object2: @equal_func: @Returns: @object: @Returns: @object: @inspect_func: @user_data: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-event-loop.sgml0000644000175000017500000000376511523755276024275 0ustar koukou GCutEventLoop @parent_class: @run: @iterate: @quit: @watch_io: @watch_child_full: @add_timeout_full: @add_idle_full: @remove: @void: @Returns: @loop: @loop: @may_block: @Returns: @loop: @loop: @channel: @condition: @function: @data: @Returns: @loop: @pid: @function: @data: @Returns: @loop: @priority: @pid: @function: @data: @notify: @Returns: @loop: @interval_in_seconds: @function: @data: @Returns: @loop: @priority: @interval_in_seconds: @function: @data: @notify: @Returns: @loop: @function: @data: @Returns: @loop: @priority: @function: @data: @notify: @Returns: @loop: @tag: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/soupcut-assertions-helper.sgml0000644000175000017500000000205411400101215026346 0ustar koukou soupcut-assertions-helper @expected: @message: @expression_expected: @expression_message: @expected: @client: @expression_expected: @expression_client: @client: @expression_client: @expected: @client: @expression_expected: @expression_client: @pattern: @client: @expression_pattern: @expression_client: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-main.sgml0000644000175000017500000000111511400101215023060 0ustar koukou gcut-main @void: @void: @void: @void: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-value-equal.sgml0000644000175000017500000000100111400101215024347 0ustar koukou gcut-value-equal @value1: @value2: @Returns: @type1: @type2: @equal_func: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-features.sgml0000644000175000017500000000117311424024725023627 0ustar koukou cut-features cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-types.sgml0000644000175000017500000000127511424024725023327 0ustar koukou gcut-types @string: @data: @user_data: @void: @Returns: @void: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gdkcut-pixbuf-assertions-helper.sgml0000644000175000017500000000077111400101215027424 0ustar koukou gdkcut-pixbuf-assertions-helper @expected: @actual: @threshold: @expression_expected: @expression_actual: @expression_threshold: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-string-io-channel.sgml0000644000175000017500000000323311523751466025511 0ustar koukou gcut-string-io-channel @initial: @Returns: @channel: @Returns: @channel: @channel: @Returns: @channel: @limit: @channel: @Returns: @channel: @limit: @channel: @Returns: @channel: @read_fail: @channel: @Returns: @channel: @pipe_mode: @channel: @Returns: @channel: @main_context: cutter-testing-framework-1.1.7/doc/reference/tmpl/cppcut-dynamic-data.sgml0000644000175000017500000000377311345204473025061 0ustar koukou GCutDynamicData @obj: @GCUT_DYNAMIC_DATA_ERROR_NOT_EXIST: @Returns: @first_field_name: @Varargs: @Returns: @first_field_name: @args: @Returns: @data: @Returns: @data1: @data2: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-console-diff-writer.sgml0000644000175000017500000000370011424024725025671 0ustar koukou CutConsoleDiffWriter @object: @parent_class: @use_color: @Returns: @writer: @color: @writer: @Returns: @writer: @color: @writer: @Returns: @writer: @color: @writer: @Returns: @writer: @color: @writer: @Returns: @writer: @color: @writer: @Returns: @writer: @color: @writer: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gdkcut-pixbuf.sgml0000644000175000017500000000142311400101215023752 0ustar koukou gdkcut-pixbuf @pixbuf1: @pixbuf2: @Returns: @pixbuf1: @pixbuf2: @threshold: @Returns: @pixbuf1: @pixbuf2: @threshold: @Returns: @pixbuf1: @pixbuf2: @threshold: @prefix: @error: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-console-colors.sgml0000644000175000017500000000237511264300760024755 0ustar koukou cut-console-colors cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-version.sgml0000644000175000017500000000122611400101215023455 0ustar koukou cut-version @major: @minor: @micro: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-test-utils.sgml0000644000175000017500000000440611523761120024125 0ustar koukou cut-test-utils @object: @destroy_function: @Returns: @memory: @Returns: @string: @Returns: @string: @Returns: @string: @size: @Returns: @memory: @size: @Returns: @format: @Varargs: @Returns: @strings: @Returns: @from: @to: @Returns: @target: @pattern: @replacement: @Returns: @string: @to_code_set: @from_code_set: @string: @Returns: @path: @Varargs: @path: @Varargs: @Returns: @path: @Varargs: @Returns: @path: @Varargs: @Returns: @size: @path: @Varargs: @Returns: @path: @Varargs: @path: @Varargs: @Returns: @paths: @Returns: @path: @Varargs: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-multi-process.sgml0000644000175000017500000000740511400101215024603 0ustar koukou cut-multi-process @test_directory: @Returns: @sub_process: @Returns: @sub_process: @sub_process: @Returns: @sub_process: @Returns: @sub_process: @Returns: @sub_process: @Returns: @sub_process: @test_directory: @sub_process: @Returns: @sub_process: @source_directory: @sub_process: @Returns: @sub_process: @multi_thread: @sub_process: @Returns: @sub_process: @max_threads: @sub_process: @Returns: @sub_process: @files: @sub_process: @Returns: @sub_process: @directories: @sub_process: @Returns: @sub_process: @names: @sub_process: @Returns: @sub_process: @names: @sub_process: @Returns: @sub_process: @Returns: @sub_process: @Returns: @sub_process: @Returns: @sub_process: @fatal_failures: @void: @Returns: @group: @sub_process: @group: @Returns: @group: @group: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-data-helper.sgml0000644000175000017500000000411011424024725024340 0ustar koukou gcut-data-helper @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: @data: @field_name: @callback: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-io.sgml0000644000175000017500000000061211400101215022544 0ustar koukou gcut-io @condition: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-string.sgml0000644000175000017500000000075111424032676023473 0ustar koukou gcut-string @string1: @string2: @Returns: @string: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-assertions-helper.sgml0000644000175000017500000001035511424024725025631 0ustar koukou gcut-assertions-helper @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @equal_function: @inspect_function: @inspect_user_data: @expression_expected: @expression_actual: @expression_equal_function: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: @type: @expected: @actual: @expression_type: @expression_expected: @expression_actual: @type: @expected: @actual: @expression_type: @expression_expected: @expression_actual: @expected: @actual: @equal_function: @expression_expected: @expression_actual: @expected: @actual: @equal_function: @key_inspect_function: @value_inspect_function: @inspect_user_data: @expression_expected: @expression_actual: @expression_equal_function: @expected: @actual: @expression_expected: @expression_actual: @error: @expression_error: @expected: @actual: @expression_expected: @expression_actual: @path: @Varargs: @expected: @actual: @expression_expected: @actual_expected: @enum_type: @expected: @actual: @expression_enum_type: @expression_expected: @expression_actual: @flags_type: @expected: @actual: @expression_flags_type: @expression_expected: @expression_actual: @expected: @actual: @equal_function: @expression_expected: @expression_actual: @expression_equal_function: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: @expected: @actual: @expression_expected: @expression_actual: cutter-testing-framework-1.1.7/doc/reference/tmpl/cppcutter.sgml0000644000175000017500000000110211400101215023201 0ustar koukou cppcutter @...: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-colorize-differ.sgml0000644000175000017500000000046111400101214025052 0ustar koukou CutColorizeDiffer cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-readable-differ.sgml0000644000175000017500000000046111400101214024763 0ustar koukou CutReadableDiffer cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-differ.sgml0000644000175000017500000000045111400101214023225 0ustar koukou CutDiffer cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-diff-writer.sgml0000644000175000017500000000045511400101214024214 0ustar koukou CutDiffWriter cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-helper.sgml0000644000175000017500000000355111424024725023272 0ustar koukou cut-helper @void: @system_message: @Varargs: @system_message: @user_message_format: @expression: @void: @expression: @expression: @info_expression: @message: @from: @to: @Returns: @expected: @actual: @strings: @Returns: @string1: @string2: @Returns: @double1: @double2: @error: @Returns: @address1: @address2: @Returns: @address: @Returns: @void: @Returns: @void: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-experimental.sgml0000644000175000017500000000113711400101215024466 0ustar koukou cut-experimental @pid: @usec_timeout: @pid: @pid: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-console.sgml0000644000175000017500000000300511400101215023427 0ustar koukou cut-console @void: @Returns: @option_name: @value: @use_color: @error: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-inspect.sgml0000644000175000017500000000322711424024725023627 0ustar koukou gcut-inspect @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: @string: @data: @user_data: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-key-file.sgml0000644000175000017500000000110311400101215023636 0ustar koukou gcut-key-file @key_file: @group_name: @key: @enum_type: @error: @Returns: @key_file: @group_name: @key: @flags_type: @error: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-marshalers.sgml0000644000175000017500000000045711400101215024305 0ustar koukou gcut-marshalers cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-config.sgml0000644000175000017500000000106011400101215023231 0ustar koukou cut-config cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-assertions.sgml0000644000175000017500000000773311442136354024364 0ustar koukou gcut-assertions @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @equal_function: @inspect_function: @inspect_user_data: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @equal_function: @Varargs: @type: @expected: @actual: @Varargs: @type: @expected: @actual: @Varargs: @expected: @actual: @equal_function: @key_inspect_function: @value_inspect_function: @inspect_user_data: @Varargs: @expected: @actual: @Varargs: @error: @Varargs: @error: @Varargs: @expected: @actual: @Varargs: @path: @Varargs: @path: @Varargs: @expected: @actual: @Varargs: @enum_type: @expected: @actual: @Varargs: @flags_type: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @equal_function: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: cutter-testing-framework-1.1.7/doc/reference/tmpl/soupcutter.sgml0000644000175000017500000000055311400101215023416 0ustar koukou soupcutter cutter-testing-framework-1.1.7/doc/reference/tmpl/cutter-unused.sgml0000644000175000017500000002600011424024725024023 0ustar koukou GCutDynamicData CutColorizeDiffer cut-console-colors CutDiffWriter CutDifferColorize CutDifferReadable CutDiffer CutReadableDiffer CutUnifiedDiffer GCutDynamicData gcut-marshalers @object: @object: @CUT_DIFF_WRITER_TAG_NONE: @CUT_DIFF_WRITER_TAG_SUMMARY: @CUT_DIFF_WRITER_TAG_CONTEXT: @CUT_DIFF_WRITER_TAG_EQUAL_MARK: @CUT_DIFF_WRITER_TAG_DELETED_MARK: @CUT_DIFF_WRITER_TAG_INSERTED_MARK: @CUT_DIFF_WRITER_TAG_DIFFERENCE_MARK: @CUT_DIFF_WRITER_TAG_EQUAL_LINE: @CUT_DIFF_WRITER_TAG_DELETED_LINE: @CUT_DIFF_WRITER_TAG_INSERTED_LINE: @CUT_DIFF_WRITER_TAG_DIFFERENCE_LINE: @CUT_DIFF_WRITER_TAG_EQUAL_SEGMENT: @CUT_DIFF_WRITER_TAG_DELETED_SEGMENT: @CUT_DIFF_WRITER_TAG_INSERTED_SEGMENT: @CUT_DIFF_WRITER_TAG_DIFFERENCE_SEGMENT: @object: @object: @object: @object: @object: @obj: @GCUT_DYNAMIC_DATA_ERROR_NOT_EXIST: @from: @to: @Returns: @diff: @Returns: @diff: @Returns: @writer: @writer: @mark: @separator: @line: @tag: @writer: @mark: @separator: @lines: @begin: @end: @tag: @writer: @string: @tag: @writer: @character: @n: @tag: @writer: @line: @tag: @writer: @lines: @begin: @end: @tag: @writer: @mark: @separator: @tag: @writer: @string: @begin: @end: @tag: @from: @to: @Returns: @differ: @writer: @differ: @Returns: @differ: @Returns: @differ: @Returns: @differ: @Returns: @differ: @Returns: @differ: @Returns: @from: @to: @Returns: @string: @begin: @end: @Returns: @data: @user_data: @Returns: @from: @to: @Returns: @differ: @Returns: @differ: @Returns: @differ: @Returns: @from: @to: @Returns: @differ: @context: @differ: @label: @differ: @label: @data1: @data2: @Returns: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @field_name: @error: @Returns: @data: @Returns: @first_field_name: @Varargs: @Returns: @first_field_name: @args: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-differ-colorize.sgml0000644000175000017500000000067211264300760025075 0ustar koukou CutDifferColorize @object: @from: @to: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-data.sgml0000644000175000017500000000363211442136354023075 0ustar koukou gcut-data @name: @first_field_name: @Varargs: @data: @field_name: @Returns: @data: @field_name: @data: @field_name: @Returns: @data: @field_name: @Returns: @data: @field_name: @Returns: @data: @field_name: @data: @field_name: @data: @field_name: @data: @field_name: @Returns: @data: @field_name: @Returns: @data: @field_name: @Returns: @data: @field_name: @Returns: @data: @field_name: @Returns: @data: @field_name: @Returns: @data: @field_name: @data: @field_name: cutter-testing-framework-1.1.7/doc/reference/tmpl/gdkcutter-pixbuf.sgml0000644000175000017500000000056711400101215024475 0ustar koukou gdkcutter-pixbuf cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-dynamic-data.sgml0000644000175000017500000000045711400101215024477 0ustar koukou GCutDynamicData cutter-testing-framework-1.1.7/doc/reference/tmpl/cutter.sgml0000644000175000017500000000301311424022627022520 0ustar koukou cutter @void: @void: @void: @void: @void: @void: @first_data_name: @...: @context: @...: @first_attribute_name: @...: @Returns: @test_context: @format: @Varargs: @format: @args: @void: @format: @Varargs: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-hash-table.sgml0000644000175000017500000000203611400101215024147 0ustar koukou gcut-hash-table @hash1: @hash2: @equal_func: @Returns: @hash: @key_inspect_func: @value_inspect_func: @user_data: @Returns: @hash: @key_inspect_func: @value_inspect_func: @key_compare_func: @user_data: @Returns: @hash1: @hash2: @Returns: @hash: @Returns: @hash: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-egg.sgml0000644000175000017500000000630211424024725022721 0ustar koukou GCutEgg @gcutegg: the object which received the signal. @arg1: @gcutegg: the object which received the signal. @arg1: @arg2: @gcutegg: the object which received the signal. @arg1: @arg2: @gcutegg: the object which received the signal. @arg1: @parent_class: @output_received: @error_received: @reaped: @error: @GCUT_EGG_ERROR_COMMAND_LINE: @GCUT_EGG_ERROR_IO_ERROR: @GCUT_EGG_ERROR_ALREADY_RUNNING: @GCUT_EGG_ERROR_NOT_RUNNING: @GCUT_EGG_ERROR_INVALID_OBJECT: @GCUT_EGG_ERROR_TIMEOUT: @void: @Returns: @command: @Varargs: @Returns: @command: @args: @Returns: @argc: @argv: @Returns: @command: @Returns: @command: @Returns: @egg: @flags: @egg: @Returns: @egg: @name: @Varargs: @egg: @Returns: @egg: @error: @Returns: @egg: @egg: @chunk: @size: @error: @Returns: @egg: @Returns: @egg: @timeout: @error: @Returns: @egg: @signal_number: @egg: @Returns: @egg: @Returns: @egg: @Returns: @egg: @Returns: @egg: @timeout: cutter-testing-framework-1.1.7/doc/reference/tmpl/soupcut-assertions.sgml0000644000175000017500000000156411400101215025076 0ustar koukou soupcut-assertions @expected: @message: @Varargs: @expected: @client: @Varargs: @client: @Varargs: @expected: @client: @Varargs: @pattern: @client: @Varargs: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-types.sgml0000644000175000017500000000116611400101215023137 0ustar koukou cut-types @data: @void: cutter-testing-framework-1.1.7/doc/reference/tmpl/gdkcut-pixbuf-assertions.sgml0000644000175000017500000000066211400101215026146 0ustar koukou gdkcut-pixbuf-assertions @expected: @actual: @threshold: @Varargs: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-assertions.sgml0000644000175000017500000002347311442136354024214 0ustar koukou cut-assertions @expression: @Varargs: @expression: @Varargs: @expression: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expression: @Varargs: @string: @Varargs: @expression: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @error: @actual: @Varargs: @expected: @error: @actual: @Varargs: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @length: @Varargs: @expected: @actual: @length: @Varargs: @expected: @expected_size: @actual: @actual_size: @Varargs: @expected: @expected_size: @actual: @actual_size: @Varargs: @expected: @actual: @Varargs: @expected: @actual: @Varargs: @lhs: @operator: @rhs: @...: @lhs: @operator: @rhs: @...: @lhs: @operator: @rhs: @...: @lhs: @operator: @rhs: @...: @lhs: @operator: @rhs: @...: @function: @expected: @actual: @...: @Varargs: @path: @Varargs: @path: @Varargs: @path: @Varargs: @path: @Varargs: @path: @Varargs: @pattern: @actual: @Varargs: @pattern: @actual: @Varargs: @expected: @actual: @Varargs: @expected: @path: @Varargs: @expected: @actual: @...: @expected: @actual: @...: @expected: @actual: @...: @format: @Varargs: @Varargs: @format: @Varargs: @format: @Varargs: @format: @Varargs: @format: @Varargs: @format: @Varargs: @void: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-list.sgml0000644000175000017500000000411211400101215023107 0ustar koukou gcut-list @list1: @list2: @equal_func: @Returns: @list: @inspect_func: @user_data: @Returns: @list1: @list2: @Returns: @list: @Returns: @list1: @list2: @Returns: @list: @Returns: @list1: @list2: @Returns: @list: @Returns: @list: @Returns: @type: @list: @Returns: @type: @list: @Returns: @list1: @list2: @list: @list1: @list2: @list: @list1: @list2: @list: @list: @list: @type: @list: @type: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-process.sgml0000644000175000017500000001036011523751466023645 0ustar koukou GCutProcess @gcutprocess: the object which received the signal. @arg1: @gcutprocess: the object which received the signal. @arg1: @arg2: @gcutprocess: the object which received the signal. @arg1: @arg2: @gcutprocess: the object which received the signal. @arg1: @parent_class: @output_received: @error_received: @reaped: @error: @GCUT_PROCESS_ERROR_COMMAND_LINE: @GCUT_PROCESS_ERROR_IO_ERROR: @GCUT_PROCESS_ERROR_ALREADY_RUNNING: @GCUT_PROCESS_ERROR_NOT_RUNNING: @GCUT_PROCESS_ERROR_INVALID_OBJECT: @GCUT_PROCESS_ERROR_INVALID_SIGNAL: @GCUT_PROCESS_ERROR_PERMISSION_DENIED: @GCUT_PROCESS_ERROR_TIMEOUT: @void: @Returns: @command: @Varargs: @Returns: @command_line: @Returns: @command: @args: @Returns: @argc: @argv: @Returns: @command: @Returns: @command: @Returns: @process: @flags: @process: @Returns: @process: @name: @Varargs: @process: @Returns: @process: @error: @Returns: @process: @Returns: @process: @timeout: @error: @Returns: @process: @signal_number: @error: @Returns: @process: @chunk: @size: @error: @Returns: @process: @error: @Returns: @process: @Returns: @process: @Returns: @process: @Returns: @process: @Returns: @process: @Returns: @process: @Returns: @process: @Returns: @process: @Returns: @process: @timeout: @process: @Returns: @process: @loop: cutter-testing-framework-1.1.7/doc/reference/tmpl/soupcut-client.sgml0000644000175000017500000000231011424024725024170 0ustar koukou SoupCutClient @parent_class: @void: @Returns: @client: @uri: @client: @message: @Returns: @client: @uri: @first_query_name: @Varargs: @Returns: @client: @Returns: @client: @Returns: @client: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-enum.sgml0000644000175000017500000000213211400101215023100 0ustar koukou gcut-enum @void: @Returns: @GCUT_ENUM_ERROR_INVALID_TYPE: @GCUT_ENUM_ERROR_INVALID_VALUE: @enum_type: @enum_value: @Returns: @enum_type: @enum_value: @error: @Returns: @flags_type: @flags_value: @Returns: @flags_type: @flags_value: @error: @Returns: @flags_type: @error: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cppcut-macros.sgml0000644000175000017500000000054711400101215023764 0ustar koukou cppcut-macros cutter-testing-framework-1.1.7/doc/reference/tmpl/cppcut-assertions.sgml0000644000175000017500000000062011424022627024701 0ustar koukou cppcut-assertions @expected: @actual: @...: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-error.sgml0000644000175000017500000000074311400101215023273 0ustar koukou gcut-error @error1: @error2: @Returns: @error: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/gcutter.sgml0000644000175000017500000000054511400101215022657 0ustar koukou gcutter cutter-testing-framework-1.1.7/doc/reference/tmpl/gcut-test-utils.sgml0000644000175000017500000000504311523761415024301 0ustar koukou gcut-test-utils @object: @Returns: @error: @Returns: @list: @destroy_function: @Returns: @hash_table: @Returns: @string: @Returns: @string: @Returns: @element: @Varargs: @Returns: @n: @value: @Varargs: @Returns: @n: @value: @Varargs: @Returns: @value: @Varargs: @Returns: @strings: @Returns: @n: @value: @Varargs: @Returns: @n: @value: @Varargs: @Returns: @value: @Varargs: @Returns: @value: @...: @strings: @Returns: @object: @...: @Returns: @list: @list: @key: @Varargs: @Returns: @key: @args: @Returns: @key: @Varargs: @Returns: @path: @Varargs: @Returns: cutter-testing-framework-1.1.7/doc/reference/tmpl/cut-string-diff-writer.sgml0000644000175000017500000000123511424024725025536 0ustar koukou CutStringDiffWriter @object: @parent_class: @void: @Returns: @writer: @Returns: cutter-testing-framework-1.1.7/doc/reference/html/0000755000175000017500000000000011525707421020325 5ustar koukoucutter-testing-framework-1.1.7/doc/reference/html/writing-assertion.html0000644000175000017500000000774711525707421024722 0ustar koukou Writing assertion

Writing assertion

Assertion writing helper — Symbols in this section help you writing your own assertions.
Assertion Utilities for GEnum and GFlags — Utilities to write assertions related to GEnum or GFlags more easily.
Assertion Utilities for GError — Utilities to write assertions related to GError more easily.
Assertion Utilities for GHashTable — Utilities to write assertions related to GHashTable more easily.
Assertion Utilities for GList — Utilities to write assertions related to GList more easily.
Assertion Utilities for GObject — Utilities to write assertions related to GObject more easily.
Assertion Utilities for GValue — Utilities to write assertions related to GValue more easily.
Object inspection functions — Functions to inspect an object for debugging.
Assertion Utilities for GString — Utilities to write assertions related to GString more easily.
cutter-testing-framework-1.1.7/doc/reference/html/install-to-freebsd.html0000644000175000017500000000631711525707421024720 0ustar koukou Install to FreeBSD

Install to FreeBSD

Install to FreeBSD — How to install Cutter to FreeBSD

Introduction

This document explains how to install Cutter to FreeBSD.

Install

Cutter can be installed either using packages or ports. As usual you shall not mix them so depending on the way you maintain third party packages, install the package:

% sudo /usr/sbin/pkg_add -r cutter

or compile and install the port:

% (cd /usr/ports/devel/cutter && sudo make install)

See also:

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/right.png0000644000175000017500000000073011525702754022154 0ustar koukouPNG  IHDRw=bKGD pHYs  ~tIME2 I%=eIDATx!o@.'**M0$$?1~vIeEuLl&4䝠Bݛ|>$ݶoc Install to CentOS

Install to CentOS

Install to CentOS — How to install Cutter to CentOS

Introduction

This document explains how to install Cutter to CentOS.

Install

We can use yum because Cutter provides a Yum repository.

First, we need to register Cutter Yum repository:

% sudo rpm -Uvh http://cutter.sourceforge.net/centos/cutter-repository-1.0.0-1.noarch.rpm

Now, we can install Cutter by yum:

% sudo yum install -y cutter

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/diff-dark-and-nested-circle.png0000644000175000017500000001254311525702754026152 0ustar koukouPNG  IHDRg3sBIT|dIDATxkLWo?4`c܆  !~I$Mb[)niv7#3&SX&U,$e;q0`C& pMtWSU%DZqG=ݺu2RX5p;)hY @/Y@ `fY@ `޿>5UGmv{ma+8aeY6'(+2)d8dgY_H&13X|0}x?mb2Q &Z6.ZvAd o$zpߙb4)M'>Q?v/ADm2_38_Ok0&Dunm]z oWj%@<:ܫ+hAMT5>_%thA;kF.Ïw h4Q,o?P7rs(qb.|9J)&MЎ桒֕' ǧ+'{ٳC&wAMMgopJ$ѣMA-M{*+qMЛGU &Xrx[SuyiUf`i@Hj,|쉮j=zEQ 6 yg` &X[=u,Ju̇B&"!fyocO|ꏌ*Jp{웋Oa&f9ߍ@mn2h"(:K_^ڙ) ДCvr&ʡY^;w(OXpx{N&ʢYzV?C_Ey[<ުv(lU/(hnV;@4Jk",C%m v&iDY~z!,#·uH@&_I kv|-TM$gw5CSjMRH2KF[J֭61AQBIfʶS-v:Wc$c&ˣ&;XR]NLt@{#FΓ_ϤRzw:X0j",RejGNDukm``5>}Dr45p9̰p\΃C+"hT1{'C4DŊ6pypJtp-pMDUy&ǽKlLgf̢&^G;.m\Eè(FM_A/ },\NVVv2xA}bd:k&/G-E{ބ!Z3cۚቋxjmI~,}BQn=C (0j",Q)ઝ"7}m|nFfoڈFJ%l׊mXW䕯ϡhX6am^H`D2iM_hwC&̲LG|Õ @Ȇ+}g:8cÅXۢX3[XB{r4xLਔ@ZÅ~WK].oS+S*J!LbxfI<\7더wB7RDҊS^fU㓧ISCVV]r5dՁ^w4/Mw4Ư&7.t&4#%4T}g:5#625#po4Y%44fIWX:OY1J{]cDADV]3r 5Q;Q&zz}SJ HFl<>{E 4( VO>3ÕϩBI5mN=跃+y_:uy QZٷai^;wRtGЛGU)$h"(f?Ud7lk?ǟn4.MےIĊAfdly,hO/6  G ʼpkރkR&ʡ҈O~I7YpkfO~ڹ4QE,Ǟ說8nE 08Q@YZtyiQ'kFƶMBRfIcGE.h"ҚYcU-_}gD|E!h""=KC;J?˺ ǧ+'Saf4 jjB,i~zסu|\(Q3rȯr%RMnC b4oQ?v/AH W&kfG_c &Dh,iZ6.l BHFXw44Tٞ ,vgԖeehڜħ㐝eyg|!f+̸bQ79񏴾@d 3) F@, 0 @, 0 @kSf DcXBd5{Z"J={(㰐fY@ `fY@ x_snb)NX,yI9;ad%-kl1qf7))BOYy.e$?Oqܬ&K<Vo R֪Zˢ+IJL7[L d1!B!T5׼cJ$щ䠯H,],*wf04mfhڍrTE諾c?0x0Yh73Yt]a/bbZlBl31fʾj?a>+LX-M[qVSInwgns f]t9}\&Ӎ\wQxoOy"QjfpF:VP^M\#NQ橼X14u2|{Uo^cдQn%tخzwo$̒ \mp< o6iOoBo ɸpaus]Φ+[/z)Iۅ']&#z A GSLdBoB4`2|{cvD\n'.,dcōy͍hW ^Ǚy&vkjb0.tinBNROwmY FP&`1S(6e ;lgyh`.|&S{+IX-&& "s:rkf1#_tUfҒ04mRP`ˢ}j ̢sT;r8RV,ˤF񲔵J Bw܃3&R*Ѐcue)M鄇¾v9Ęc2RDE7arsmdDzlbK1KEj4߳(y<6{Q$Wahv$X`lgx[MZ9Xc5ݳ܊ݨFAx*&D'm;7 I=^=˭Hel[qǘ)W+Q뵭3%x]%M@ Jr/RWN {jUGIUǀt?peG|S=Kac][apίǙ~3B9?I fh*6_XZh,:0ۡ6,YZrROwM)JP["{"QR"fBBC=lgZ;.oJr)|tZ(r?nsduaiUz;3e_`{pT 0 3N2EB%q3B9XԱ弅``YN!GU *Eg+Yw,Y5:J/r', N⁥4yY, %/i1g'bM-&l6f2 lRVKRInZ8n:.YI,䚻U‰&@, 0 @, 0 @, S*&lPyEIENDB`cutter-testing-framework-1.1.7/doc/reference/html/writing-test.html0000644000175000017500000001441711525707421023662 0ustar koukou Writing test

Writing test

Cutter — A Unit Testing Framework for C and C++.
Version Information — Variables and macros to check the Cutter version
Available features — Available features in the installed Cutter.
Assertions — Checks that your program works as you expect.
Test Utilities — Utilities to write tests more easily.
Types — Types that is used in test.
Multi Process — Utilities to run your tests on multi processes.
GCutter — Cutter with GLib support.
Assertions with GLib support — Checks that your program works as you expect with GLib support.
Test Utilities with GLib support — Utilities to write tests more easily with GLib support.
Types for GLib support — Types that is used in test with GLib support.
Convenience test data API — API to create test data without structure definition.
External command — Convenience API for using external command.
External command (deprecated) — Convenience API for using external command. (deprecated)
Abstracted event loop — Abstracted event loop API for customizing event loop in GCutter.
GLib event loop — Event loop API for GLib main context and loop.
CppCutter — Cutter with C++ support.
Assertions with C++ support — Checks that your program works as you expect with C++ support.
GdkCutter Pixbuf — Cutter with gdk-pixbuf support.
Assertions with gdk-pixbuf support — Checks that your program works as you expect with gdk-pixbuf support.
SoupCutter — HTTP supported Cutter with libsoup.
Assertions for HTTP client and server — Checks that your HTTP client/server works as you expect with libsoup support.
Convenience HTTP client API — API to work as HTTP client.
Convenience HTTP server API — API to work as HTTP server.
Experimental — Experimental API.
cutter-testing-framework-1.1.7/doc/reference/html/GCutEgg.html0000644000175000017500000020412711525707421022506 0ustar koukou External command (deprecated)

External command (deprecated)

External command (deprecated) — Convenience API for using external command. (deprecated)

Synopsis

#define             GCUT_EGG_ERROR
                    GCutEgg;
                    GCutEggClass;
enum                GCutEggError;
GQuark              gcut_egg_error_quark                (void);
GCutEgg *           gcut_egg_new                        (const gchar *command,
                                                         ...);
GCutEgg *           gcut_egg_new_va_list                (const gchar *command,
                                                         va_list args);
GCutEgg *           gcut_egg_new_argv                   (gint argc,
                                                         gchar **argv);
GCutEgg *           gcut_egg_new_strings                (const gchar **command);
GCutEgg *           gcut_egg_new_array                  (GArray *command);
void                gcut_egg_set_flags                  (GCutEgg *egg,
                                                         GSpawnFlags flags);
GSpawnFlags         gcut_egg_get_flags                  (GCutEgg *egg);
void                gcut_egg_set_env                    (GCutEgg *egg,
                                                         const gchar *name,
                                                         ...);
gchar **            gcut_egg_get_env                    (GCutEgg *egg);
gboolean            gcut_egg_hatch                      (GCutEgg *egg,
                                                         GError **error);
void                gcut_egg_close                      (GCutEgg *egg);
gboolean            gcut_egg_write                      (GCutEgg *egg,
                                                         const gchar *chunk,
                                                         gsize size,
                                                         GError **error);
GPid                gcut_egg_get_pid                    (GCutEgg *egg);
gint                gcut_egg_wait                       (GCutEgg *egg,
                                                         guint timeout,
                                                         GError **error);
void                gcut_egg_kill                       (GCutEgg *egg,
                                                         gint signal_number);
GIOChannel *        gcut_egg_get_input                  (GCutEgg *egg);
GIOChannel *        gcut_egg_get_output                 (GCutEgg *egg);
GIOChannel *        gcut_egg_get_error                  (GCutEgg *egg);
guint               gcut_egg_get_forced_termination_wait_time
                                                        (GCutEgg *egg);
void                gcut_egg_set_forced_termination_wait_time
                                                        (GCutEgg *egg,
                                                         guint timeout);

Object Hierarchy

  GObject
   +----GCutEgg

Properties

  "command"                  gpointer              : Read / Write

Signals

  "error"                                          : Run Last
  "error-received"                                 : Run Last
  "output-received"                                : Run Last
  "reaped"                                         : Run Last

Description

GCutEgg encapsulates external command execution, communication and termination. GCutEgg reports an error as GError. It can be asserted easily by gcut_assert_error().

External command is specified to constructor like gcut_egg_new(), gcut_egg_new_strings() and so on. External command isn't run at the time. gcut_egg_hatch() runs specified external command.

Standard/Error outputs of external command are passed by "output-received"/"error-received" signals or GIOChannel returned by gcut_egg_get_output()/gcut_egg_get_error(). gcut_egg_write() writes a chunk to standard input of external command.

To wait external command finished, gcut_egg_wait() can be used. It accepts timeout to avoid infinite waiting.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
static GString *output_string;
static GCutEgg *egg;

void
cut_setup (void)
{
    output_string = g_string_new(NULL);
    egg = NULL;
}

void
cut_teardown (void)
{
    if (output_string)
        g_string_free(output_string, TRUE);
    if (egg)
        g_object_unref(egg);
}

static void
cb_output_received (GCutEgg *egg, const gchar *chunk, gsize size,
                    gpointer user_data)
{
    g_string_append_len(output_string, chunk, size);
}

void
test_echo (void)
{
    GError *error = NULL;

    egg = gcut_egg_new("echo", "XXX", NULL);
    g_signal_connect(egg, "receive-output",
                     G_CALLBACK(cb_output_received), NULL);

    gcut_egg_hatch(egg, &error);
    gcut_assert_error(error);

    gcut_egg_wait(egg, 1000, &error);
    gcut_assert_error(error);
    cut_assert_equal_string("XXX\n", output_string->str);
}

Details

GCUT_EGG_ERROR

#define GCUT_EGG_ERROR           (gcut_egg_error_quark())

Warning

GCUT_EGG_ERROR is deprecated and should not be used in newly-written code.


GCutEgg

typedef struct _GCutEgg GCutEgg;

Warning

GCutEgg is deprecated and should not be used in newly-written code.


GCutEggClass

typedef struct {
    GObjectClass parent_class;

    void (*output_received) (GCutEgg     *egg,
                             const gchar *chunk,
                             gsize        size);
    void (*error_received)  (GCutEgg     *egg,
                             const gchar *chunk,
                             gsize        size);
    void (*reaped)          (GCutEgg     *egg,
                             gint         status);
    void (*error)           (GCutEgg     *egg,
                             GError      *error);
} GCutEggClass;

Warning

GCutEggClass is deprecated and should not be used in newly-written code.


enum GCutEggError

typedef enum
{
    GCUT_EGG_ERROR_COMMAND_LINE,
    GCUT_EGG_ERROR_IO_ERROR,
    GCUT_EGG_ERROR_ALREADY_RUNNING,
    GCUT_EGG_ERROR_NOT_RUNNING,
    GCUT_EGG_ERROR_INVALID_OBJECT,
    GCUT_EGG_ERROR_TIMEOUT
} GCutEggError;

Warning

GCutEggError has been deprecated since version 1.1.5 and should not be used in newly-written code. Use GCutProcessError instead.

Error codes returned by GCutEgg related operations.

GCUT_EGG_ERROR_COMMAND_LINE

Command line related error.

GCUT_EGG_ERROR_IO_ERROR

IO error.

GCUT_EGG_ERROR_ALREADY_RUNNING

External command is already running.

GCUT_EGG_ERROR_NOT_RUNNING

External command isn't running.

GCUT_EGG_ERROR_INVALID_OBJECT

Invalid GCutEgg object is passed.

GCUT_EGG_ERROR_TIMEOUT

Timeout.

Since 1.0.6


gcut_egg_error_quark ()

GQuark              gcut_egg_error_quark                (void);

Warning

gcut_egg_error_quark is deprecated and should not be used in newly-written code.

Returns :


gcut_egg_new ()

GCutEgg *           gcut_egg_new                        (const gchar *command,
                                                         ...);

Warning

gcut_egg_new has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new() instead.

Creates a new GCutEgg object that runs command.

command :

the external command name to be ran

... :

the arguments for command

Returns :

a new GCutEgg.

Since 1.0.6


gcut_egg_new_va_list ()

GCutEgg *           gcut_egg_new_va_list                (const gchar *command,
                                                         va_list args);

Warning

gcut_egg_new_va_list has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new_va_list() instead.

Creates a new GCutEgg object that runs command.

command :

the external command name to be ran

args :

arguments for command

Returns :

a new GCutEgg.

Since 1.0.6


gcut_egg_new_argv ()

GCutEgg *           gcut_egg_new_argv                   (gint argc,
                                                         gchar **argv);

Warning

gcut_egg_new_argv has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new_argv() instead.

Creates a new GCutEgg object that runs command.

argc :

the number of elements of argv

argv :

the external command name to be ran and arguments of it.

Returns :

a new GCutEgg.

Since 1.0.6


gcut_egg_new_strings ()

GCutEgg *           gcut_egg_new_strings                (const gchar **command);

Warning

gcut_egg_new_strings has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new_strings() instead.

Creates a new GCutEgg object that runs command.

command :

the external command name to be ran and arguments of it. NULL-terminated.

Returns :

a new GCutEgg.

Since 1.0.6


gcut_egg_new_array ()

GCutEgg *           gcut_egg_new_array                  (GArray *command);

Warning

gcut_egg_new_array has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new_array() instead.

Creates a new GCutEgg object that runs command.

command :

the external command name to be ran and arguments of it. The GArray should be zero-terminated.

Returns :

a new GCutEgg.

Since 1.0.6


gcut_egg_set_flags ()

void                gcut_egg_set_flags                  (GCutEgg *egg,
                                                         GSpawnFlags flags);

Warning

gcut_egg_set_flags has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_set_flags() instead.

Sets flags for spawning.

egg :

a GCutEgg

flags :

the flags to be passed to g_spawn_async_with_pipes().

Since 1.0.6


gcut_egg_get_flags ()

GSpawnFlags         gcut_egg_get_flags                  (GCutEgg *egg);

Warning

gcut_egg_get_flags has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_flags() instead.

Gets flags for spawning.

egg :

a GCutEgg

Returns :

the flags for spawning.

Since 1.0.6


gcut_egg_set_env ()

void                gcut_egg_set_env                    (GCutEgg *egg,
                                                         const gchar *name,
                                                         ...);

Warning

gcut_egg_set_env has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_set_env() instead.

Sets environment variable for external command.

egg :

a GCutEgg

name :

the first environment name.

... :

the value of name, followed by name and value pairs. NULL-terminated.

Since 1.0.6


gcut_egg_get_env ()

gchar **            gcut_egg_get_env                    (GCutEgg *egg);

Warning

gcut_egg_get_env has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_env() instead.

Gets environment variable for external command.

egg :

a GCutEgg

Returns :

a newly-allocated NULL-terminated environment variables. ("NAME1=VALUE1", "NAME2=VALUE2", ..., NULL) It should be freed by g_strfreev() when no longer needed.

Since 1.0.6


gcut_egg_hatch ()

gboolean            gcut_egg_hatch                      (GCutEgg *egg,
                                                         GError **error);

Warning

gcut_egg_hatch has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_run() instead.

Hatches a new external process.

egg :

a GCutEgg

error :

return location for an error, or NULL

Returns :

TRUE on success, otherwise FALSE

Since 1.0.6


gcut_egg_close ()

void                gcut_egg_close                      (GCutEgg *egg);

Warning

gcut_egg_close has been deprecated since version 1.1.5 and should not be used in newly-written code. no need to close explicitly on GCutProcess.

Closes a hatched external process. It is closed implicitly on destroy.

egg :

a GCutEgg

Since 1.0.6


gcut_egg_write ()

gboolean            gcut_egg_write                      (GCutEgg *egg,
                                                         const gchar *chunk,
                                                         gsize size,
                                                         GError **error);

Warning

gcut_egg_write has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_write() instead.

Writes chunk to external process's standard input.

egg :

a GCutEgg

chunk :

the data to be wrote

size :

the size of chunk

error :

return location for an error, or NULL

Returns :

TRUE on success, otherwise FALSE

Since 1.0.6


gcut_egg_get_pid ()

GPid                gcut_egg_get_pid                    (GCutEgg *egg);

Warning

gcut_egg_get_pid has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_pid() instead.

Gets the process ID of running external process. If external process isn't running, 0 is returned.

egg :

a GCutEgg

Returns :

the process ID of running external process if external process is running, otherwise 0.

Since 1.0.6


gcut_egg_wait ()

gint                gcut_egg_wait                       (GCutEgg *egg,
                                                         guint timeout,
                                                         GError **error);

Warning

gcut_egg_wait has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_wait() instead.

Waits running external process is finished while timeout milliseconds. If external process isn't finished while timeout milliseconds, GCUT_EGG_ERROR_TIMEOUT error is set and -1 is returned. If external process isn't running, GCUT_EGG_ERROR_NOT_RUNNING error is set and -1 is returned.

egg :

a GCutEgg

timeout :

the timeout period in milliseconds

error :

return location for an error, or NULL

Returns :

an exit status of external process on success, otherwise -1.

Since 1.0.6


gcut_egg_kill ()

void                gcut_egg_kill                       (GCutEgg *egg,
                                                         gint signal_number);

Warning

gcut_egg_kill has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_kill() instead.

Sends signal_number signal to external process.

egg :

a GCutEgg

signal_number :

the signal number to be sent to external process

Since 1.0.6


gcut_egg_get_input ()

GIOChannel *        gcut_egg_get_input                  (GCutEgg *egg);

Warning

gcut_egg_get_input has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_input_channel() instead.

Gets a GIOChannel connected with standard input of external process.

egg :

a GCutEgg

Returns :

a GIOChannel if external process is running, otherwise NULL.

Since 1.0.6


gcut_egg_get_output ()

GIOChannel *        gcut_egg_get_output                 (GCutEgg *egg);

Warning

gcut_egg_get_output has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_output_channel() instead.

Gets a GIOChannel connected with standard output of external process.

egg :

a GCutEgg

Returns :

a GIOChannel if external process is running, otherwise NULL.

Since 1.0.6


gcut_egg_get_error ()

GIOChannel *        gcut_egg_get_error                  (GCutEgg *egg);

Warning

gcut_egg_get_error has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_error_channel() instead.

Gets a GIOChannel connected with standard error output of external process.

egg :

a GCutEgg

Returns :

a GIOChannel if external process is running, otherwise NULL.

Since 1.0.6


gcut_egg_get_forced_termination_wait_time ()

guint               gcut_egg_get_forced_termination_wait_time
                                                        (GCutEgg *egg);

Warning

gcut_egg_get_forced_termination_wait_time has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_forced_termination_wait_time() instead.

Gets a wait time in milliseconds for forced termination on dispose.

egg :

a GCutEgg

Returns :

a timeout value for waiting forced terminated external command on dispose.

Since 1.0.6


gcut_egg_set_forced_termination_wait_time ()

void                gcut_egg_set_forced_termination_wait_time
                                                        (GCutEgg *egg,
                                                         guint timeout);

Warning

gcut_egg_set_forced_termination_wait_time has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_set_forced_termination_wait_time() instead.

Sets a wait time in milliseconds for forced termination on dispose. If timeout is 0, it doesn't wait termination of external process. The default value is 10.

egg :

a GCutEgg

timeout :

the timeout value in milliseconds

Since 1.0.6

Property Details

The "command" property

  "command"                  gpointer              : Read / Write

The command to be ran by the egg.

Signal Details

The "error" signal

void                user_function                      (GCutEgg *egg,
                                                        gpointer error,
                                                        gpointer user_data)      : Run Last

It is emitted each time an external process causes an error. (e.g. IO error)

egg :

the object which received the signal.

error :

the error of an external process. (GError)

user_data :

user data set when the signal handler was connected.

Since 1.0.6


The "error-received" signal

void                user_function                      (GCutEgg *egg,
                                                        gchar   *chunk,
                                                        guint64  size,
                                                        gpointer user_data)      : Run Last

It is emitted each time an external process outputs something to its standard error output and it is read.

Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process's output is readable.

egg :

the object which received the signal.

chunk :

the chunk read from an external process's standard error output.

size :

the size of chunk. (gsize)

user_data :

user data set when the signal handler was connected.

Since 1.0.6


The "output-received" signal

void                user_function                      (GCutEgg *egg,
                                                        gchar   *chunk,
                                                        guint64  size,
                                                        gpointer user_data)      : Run Last

It is emitted each time an external process outputs something to its standard output and it is read.

Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process's output is readable.

egg :

the object which received the signal.

chunk :

the chunk read from an external process's standard output.

size :

the size of chunk. (gsize)

user_data :

user data set when the signal handler was connected.

Since 1.0.6


The "reaped" signal

void                user_function                      (GCutEgg *egg,
                                                        gint     status,
                                                        gpointer user_data)      : Run Last

It is emitted when an external process is exited.

Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process is exited.

egg :

the object which received the signal.

status :

the exit status of an external process.

user_data :

user data set when the signal handler was connected.

Since 1.0.6

cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-9.html0000644000175000017500000000525311525707421022770 0ustar koukou Index of new symbols in 1.0.9

Index of new symbols in 1.0.9

C

CPPCUTTER_ENABLED, CPPCUTTER_ENABLED
cppcut_assert_equal, cppcut_assert_equal()
CPPCUT_BEGIN_TEST_DECLS, CPPCUT_BEGIN_TEST_DECLS
CPPCUT_END_TEST_DECLS, CPPCUT_END_TEST_DECLS
cut_set_actual, cut_set_actual()
cut_set_expected, cut_set_expected()

G

gcut_hash_table_inspect_sorted, gcut_hash_table_inspect_sorted ()
cutter-testing-framework-1.1.7/doc/reference/html/up.png0000644000175000017500000000062611525702754021467 0ustar koukouPNG  IHDRw=bKGD pHYs  ~tIME2.E#IDATx=J@Fo] !+2[Z<@/9|t$D9nnBjBRIsI:H8UPN1fcsN95M㧖ɵ 束1~pEe$I 7nrDf!;`'ykI䲤sI_]y^^I>O>?YBIENDB`cutter-testing-framework-1.1.7/doc/reference/html/cutter-Types-for-GLib-support.html0000644000175000017500000001656311525707421026747 0ustar koukou Types for GLib support

Types for GLib support

Types for GLib support — Types that is used in test with GLib support.

Synopsis

void                (*GCutInspectFunction)              (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
#define             GCUT_TYPE_ERROR
#define             GCUT_TYPE_SIZE
GType               gcut_error_get_type                 (void);
GType               gcut_size_get_type                  (void);

Description

There are some types to be used in test with GLib support.

Details

GCutInspectFunction ()

void                (*GCutInspectFunction)              (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Specifies the type of function which is called when the data element is inspected. It is passed the pointer to the data element, should inspect data and append inspected string to string.

string :

the GString to be stored inspected result.

data :

the data element to be inspected.

user_data :

user data to pass to the function.

Since 1.0.6


GCUT_TYPE_ERROR

#define GCUT_TYPE_ERROR (gcut_error_get_type())

The GType for a boxed type holding a GError reference.

Since 1.0.7


GCUT_TYPE_SIZE

#define GCUT_TYPE_SIZE (gcut_size_get_type())

The GType for gsize type.

Since 1.1.3


gcut_error_get_type ()

GType               gcut_error_get_type                 (void);

Returns :


gcut_size_get_type ()

GType               gcut_size_get_type                  (void);

Returns :

cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-3.html0000644000175000017500000000737111525707421022765 0ustar koukou Index of new symbols in 1.0.3

Index of new symbols in 1.0.3

C

cut_add_data, cut_add_data()
cut_append_diff, cut_append_diff ()

G

gcut_assert_equal_list_int, gcut_assert_equal_list_int ()
gcut_assert_equal_list_string, gcut_assert_equal_list_string ()
gcut_assert_equal_list_uint, gcut_assert_equal_list_uint ()
gcut_assert_equal_type, gcut_assert_equal_type ()
gcut_assert_equal_value, gcut_assert_equal_value ()
gcut_assert_error, gcut_assert_error ()
gcut_assert_remove_path, gcut_assert_remove_path ()
gcut_list_string_free, gcut_list_string_free ()
gcut_list_string_new, gcut_list_string_new ()
gcut_take_error, gcut_take_error ()
gcut_take_list, gcut_take_list ()
gcut_take_object, gcut_take_object ()
cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-8.html0000644000175000017500000001072511525707421022767 0ustar koukou Index of new symbols in 1.0.8

Index of new symbols in 1.0.8

G

gcut_hash_table_string_string_copy, gcut_hash_table_string_string_copy ()

S

SOUPCUTTER_ENABLED, SOUPCUTTER_ENABLED
soupcut_client_assert_equal_body, soupcut_client_assert_equal_body ()
soupcut_client_assert_equal_content_type, soupcut_client_assert_equal_content_type ()
soupcut_client_assert_match_body, soupcut_client_assert_match_body ()
soupcut_client_assert_response, soupcut_client_assert_response ()
soupcut_client_get, soupcut_client_get ()
soupcut_client_get_async_context, soupcut_client_get_async_context ()
soupcut_client_get_latest_message, soupcut_client_get_latest_message ()
soupcut_client_get_n_messages, soupcut_client_get_n_messages ()
soupcut_client_new, soupcut_client_new ()
soupcut_client_send_message, soupcut_client_send_message ()
soupcut_client_set_base, soupcut_client_set_base ()
soupcut_message_assert_equal_content_type, soupcut_message_assert_equal_content_type ()
soupcut_server_build_uri, soupcut_server_build_uri ()
soupcut_server_take, soupcut_server_take ()
soupcut_server_take_new, soupcut_server_take_new ()
cutter-testing-framework-1.1.7/doc/reference/html/install-to-solaris.html0000644000175000017500000001022311525707421024751 0ustar koukou Install to Solaris

Install to Solaris

Install to Solaris — How to install Cutter to Solaris

Introduction

This document explains how to install Cutter to Solaris.

Install GLib

Cutter requires GLib 2.16 or later. There is no package for GLib 2.16 or later for Solaris 10. We need to build and install by ourself.

GLib requires GNU gettext and GNU libiconv. We can install them as packages at Sunfreeware .

For example, we can install GNU gettext with the following steps:

% mkdir -p ~/packages
% cd ~/packages
% wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/gettext-0.17-sol10-sparc-local.gz
% gzip -d gettext-0.17-sol10-sparc-local.gz
% pkgadd -d ./gettext-0.17-sol10-sparc-local

We can install GNU libiconv with the same steps.

We also need GNU build system, GNU Autoconf, GNU Automake and GNU Libtool, on development with Cutter. We need to install them. It's a good idea that we also install intltool. It's not required but it's needed for internationalized software development.

We can build GLib after we install the above packages. Here are steps to build and install GLib. Note that we need to use GNU make:

% mkdir -p ~/src
% cd ~/src
% wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz
% tar xvzf glib-2.22.4.tar.gz
% cd glib-2.22.4
% ./configure --with-libiconv=gnu
% gmake
% sudo gmake install

Install Cutter

Cutter can be installed like other free software because Cutter uses GNU build tools. Note that we need to use GNU make:

% mkdir -p ~/src
% cd ~/src
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz
% tar xvzf cutter-1.1.7.tar.gz
% cd cutter-1.1.7
% ./configure
% gmake
% sudo gmake install

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Types.html0000644000175000017500000001320411525707421023623 0ustar koukou Types

Types

Types — Types that is used in test.

Synopsis

void                (*CutDestroyFunction)               (void *data);
void                (*CutCallbackFunction)              (void);
typedef             cut_boolean;
#define             CUT_TRUE
#define             CUT_FALSE

Description

There are some types to be used in test.

Details

CutDestroyFunction ()

void                (*CutDestroyFunction)               (void *data);

Specifies the type of function which is called when a data element is destroyed. It is passed the pointer to the data element and should free any memory and resources allocated for it.

data :

the data element to be destroyed.

CutCallbackFunction ()

void                (*CutCallbackFunction)              (void);


cut_boolean

typedef int cut_boolean;

A standard boolean type. Variables of this type should only contain the value CUT_TRUE or CUT_FALSE.


CUT_TRUE

#define CUT_TRUE

Defines the CUT_TRUE value for the cut_boolean type.


CUT_FALSE

#define CUT_FALSE

Defines the CUT_FALSE value for the cut_boolean type.

cutter-testing-framework-1.1.7/doc/reference/html/index-0-8.html0000644000175000017500000000530511525707421022627 0ustar koukou Index of new symbols in 0.8

Index of new symbols in 0.8

C

cut_assert_equal_g_list_int, cut_assert_equal_g_list_int ()
cut_assert_equal_g_list_string, cut_assert_equal_g_list_string ()
cut_assert_errno, cut_assert_errno ()
cut_fork, cut_fork
cut_fork_get_stderr_message, cut_fork_get_stderr_message()
cut_fork_get_stdout_message, cut_fork_get_stdout_message()
cut_omit, cut_omit ()
cut_wait_process, cut_wait_process()
cutter-testing-framework-1.1.7/doc/reference/html/GCutEventLoop.html0000644000175000017500000010651211525707421023716 0ustar koukou Abstracted event loop

Abstracted event loop

Abstracted event loop — Abstracted event loop API for customizing event loop in GCutter.

Synopsis

#define             GCUT_EVENT_LOOP_ERROR
                    GCutEventLoop;
                    GCutEventLoopClass;
GQuark              gcut_event_loop_error_quark         (void);
void                gcut_event_loop_run                 (GCutEventLoop *loop);
gboolean            gcut_event_loop_iterate             (GCutEventLoop *loop,
                                                         gboolean may_block);
void                gcut_event_loop_quit                (GCutEventLoop *loop);
guint               gcut_event_loop_watch_io            (GCutEventLoop *loop,
                                                         GIOChannel *channel,
                                                         GIOCondition condition,
                                                         GIOFunc function,
                                                         gpointer data);
guint               gcut_event_loop_watch_child         (GCutEventLoop *loop,
                                                         GPid pid,
                                                         GChildWatchFunc function,
                                                         gpointer data);
guint               gcut_event_loop_watch_child_full    (GCutEventLoop *loop,
                                                         gint priority,
                                                         GPid pid,
                                                         GChildWatchFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);
guint               gcut_event_loop_add_timeout         (GCutEventLoop *loop,
                                                         gdouble interval_in_seconds,
                                                         GSourceFunc function,
                                                         gpointer data);
guint               gcut_event_loop_add_timeout_full    (GCutEventLoop *loop,
                                                         gint priority,
                                                         gdouble interval_in_seconds,
                                                         GSourceFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);
guint               gcut_event_loop_add_idle            (GCutEventLoop *loop,
                                                         GSourceFunc function,
                                                         gpointer data);
guint               gcut_event_loop_add_idle_full       (GCutEventLoop *loop,
                                                         gint priority,
                                                         GSourceFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);
gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                         guint tag);

Object Hierarchy

  GObject
   +----GCutEventLoop

Description

GCutEventLoop encapsulates event loop. For example, event loop is used in GCutProcess. It uses the GLib's default main context for it.

Normally, a custom GCutEventLoop isn't required. It is needed some special case. For example, using libev as event loop backend instead of GLib's main loop.

GCutter provides GCutEventLoop for GLib's main context and main loop, GCutGLibEventLoop.

Details

GCUT_EVENT_LOOP_ERROR

#define GCUT_EVENT_LOOP_ERROR           (gcut_event_loop_error_quark())


GCutEventLoop

typedef struct _GCutEventLoop GCutEventLoop;


GCutEventLoopClass

typedef struct {
    GObjectClass parent_class;

    void     (*run)              (GCutEventLoop   *loop);
    gboolean (*iterate)          (GCutEventLoop   *loop,
                                  gboolean         may_block);
    void     (*quit)             (GCutEventLoop   *loop);

    guint    (*watch_io)         (GCutEventLoop   *loop,
                                  GIOChannel      *channel,
                                  GIOCondition     condition,
                                  GIOFunc          function,
                                  gpointer         data);
    guint    (*watch_child_full) (GCutEventLoop   *loop,
                                  gint             priority,
                                  GPid             pid,
                                  GChildWatchFunc  function,
                                  gpointer         data,
                                  GDestroyNotify   notify);
    guint    (*add_timeout_full) (GCutEventLoop   *loop,
                                  gint             priority,
                                  gdouble          interval_in_seconds,
                                  GSourceFunc      function,
                                  gpointer         data,
                                  GDestroyNotify   notify);
    guint    (*add_idle_full)    (GCutEventLoop   *loop,
                                  gint             priority,
                                  GSourceFunc      function,
                                  gpointer         data,
                                  GDestroyNotify   notify);
    gboolean (*remove)           (GCutEventLoop   *loop,
                                  guint            tag);
} GCutEventLoopClass;


gcut_event_loop_error_quark ()

GQuark              gcut_event_loop_error_quark         (void);

Returns :


gcut_event_loop_run ()

void                gcut_event_loop_run                 (GCutEventLoop *loop);

Runs the given event loop until gcut_event_loop_quit() is called on the loop.

loop :

a GCutEventLoop.

Since 1.1.6


gcut_event_loop_iterate ()

gboolean            gcut_event_loop_iterate             (GCutEventLoop *loop,
                                                         gboolean may_block);

Runs a single iteration for the given event loop. If no events are ready and may_block is TRUE, waiting for a event become ready. Otherwise, if may_block is FALSE, events are not waited to become ready.

loop :

a GCutEventLoop.

may_block :

whether the call may block.

Returns :

TRUE if a event was dispatched.

Since 1.1.6


gcut_event_loop_quit ()

void                gcut_event_loop_quit                (GCutEventLoop *loop);

Stops the loop from running.

loop :

a GCutEventLoop.

Since 1.1.6


gcut_event_loop_watch_io ()

guint               gcut_event_loop_watch_io            (GCutEventLoop *loop,
                                                         GIOChannel *channel,
                                                         GIOCondition condition,
                                                         GIOFunc function,
                                                         gpointer data);

Adds the channel into loop with the default priority. function is called when condition is met for the given channel.

loop :

a GCutEventLoop.

channel :

a GIOChannel

condition :

conditions to watch for

function :

function to call

data :

data to pass to function

Returns :

the event ID.

Since 1.1.6


gcut_event_loop_watch_child ()

guint               gcut_event_loop_watch_child         (GCutEventLoop *loop,
                                                         GPid pid,
                                                         GChildWatchFunc function,
                                                         gpointer data);

Adds the function to be called when the child indicated by pid exits into loop with the default priority.

loop :

a GCutEventLoop.

pid :

process ID to watch

function :

function to call

data :

data to pass to function

Returns :

the event ID.

Since 1.1.6


gcut_event_loop_watch_child_full ()

guint               gcut_event_loop_watch_child_full    (GCutEventLoop *loop,
                                                         gint priority,
                                                         GPid pid,
                                                         GChildWatchFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);

Adds the function to be called when the child indicated by pid exits into loop with the priority.

loop :

a GCutEventLoop.

priority :

the priority of the event.

pid :

process ID to watch

function :

function to call

data :

data to pass to function

notify :

function to call when the event is removed, or NULL

Returns :

the event ID.

Since 1.1.6


gcut_event_loop_add_timeout ()

guint               gcut_event_loop_add_timeout         (GCutEventLoop *loop,
                                                         gdouble interval_in_seconds,
                                                         GSourceFunc function,
                                                         gpointer data);

Adds the function to be called at regular intervals, with the default priority.

loop :

a GCutEventLoop.

interval_in_seconds :

the time between calls to the function, in seconds.

function :

function to call

data :

data to pass to function

Returns :

the event ID.

Since 1.1.6


gcut_event_loop_add_timeout_full ()

guint               gcut_event_loop_add_timeout_full    (GCutEventLoop *loop,
                                                         gint priority,
                                                         gdouble interval_in_seconds,
                                                         GSourceFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);

Adds the function to be called at regular intervals, with the priority.

loop :

a GCutEventLoop.

priority :

the priority of the event.

interval_in_seconds :

the time between calls to the function, in seconds.

function :

function to call

data :

data to pass to function

notify :

function to call when the event is removed, or NULL

Returns :

the event ID.

Since 1.1.6


gcut_event_loop_add_idle ()

guint               gcut_event_loop_add_idle            (GCutEventLoop *loop,
                                                         GSourceFunc function,
                                                         gpointer data);

Adds the function to be called whenever there are no higher priority events pending with the default priority.

loop :

a GCutEventLoop.

function :

function to call

data :

data to pass to function

Returns :

the event ID.

Since 1.1.6


gcut_event_loop_add_idle_full ()

guint               gcut_event_loop_add_idle_full       (GCutEventLoop *loop,
                                                         gint priority,
                                                         GSourceFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);

Adds the function to be called whenever there are no higher priority events pending with the priority.

loop :

a GCutEventLoop.

priority :

the priority of the event.

function :

function to call

data :

data to pass to function

notify :

function to call when the event is removed, or NULL

Returns :

the event ID.

Since 1.1.6


gcut_event_loop_remove ()

gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                         guint tag);

Removes the event with the given ID, tag.

loop :

a GCutEventLoop.

tag :

the ID of the source to remove

Returns :

TRUE if the source was found and removed.

Since 1.1.6

cutter-testing-framework-1.1.7/doc/reference/html/index-0-4.html0000644000175000017500000000311711525707421022622 0ustar koukou Index of new symbols in 0.4

Index of new symbols in 0.4

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-Utilities-for-GList.html0000644000175000017500000011735111525707421030253 0ustar koukou Assertion Utilities for GList

Assertion Utilities for GList

Assertion Utilities for GList — Utilities to write assertions related to GList more easily.

Synopsis

gboolean            gcut_list_equal                     (const GList *list1,
                                                         const GList *list2,
                                                         GEqualFunc equal_func);
gchar *             gcut_list_inspect                   (const GList *list,
                                                         GCutInspectFunction inspect_func,
                                                         gpointer user_data);
gboolean            gcut_list_equal_int                 (const GList *list1,
                                                         const GList *list2);
gchar *             gcut_list_inspect_int               (const GList *list);
gboolean            gcut_list_equal_uint                (const GList *list1,
                                                         const GList *list2);
gchar *             gcut_list_inspect_uint              (const GList *list);
gboolean            gcut_list_equal_string              (const GList *list1,
                                                         const GList *list2);
gchar *             gcut_list_inspect_string            (const GList *list);
gchar *             gcut_list_inspect_object            (const GList *list);
gchar *             gcut_list_inspect_enum              (GType type,
                                                         const GList *list);
gchar *             gcut_list_inspect_flags             (GType type,
                                                         const GList *list);
#define             gcut_list_int_equal                 (list1,
                                                         list2)
#define             gcut_list_int_inspect               (list)
#define             gcut_list_uint_equal                (list1,
                                                         list2)
#define             gcut_list_uint_inspect              (list)
#define             gcut_list_string_equal              (list1,
                                                         list2)
#define             gcut_list_string_inspect            (list)
#define             gcut_list_object_inspect            (list)
#define             gcut_list_enum_inspect              (list,
                                                         type)
#define             gcut_list_flags_inspect             (list,
                                                         type)

Description

To write assertions, you need to check equality and show expected and actual values.

The utilities help you to write assertions that are related to GList.

Details

gcut_list_equal ()

gboolean            gcut_list_equal                     (const GList *list1,
                                                         const GList *list2,
                                                         GEqualFunc equal_func);

Compares two GList, list1 and list2. equal_func is called for each corresponding values of list1 and list2.

e.g.:

1
TODO

list1 :

a GList to be compared.

list2 :

a GList to be compared.

equal_func :

a function that compares two values.

Returns :

TRUE if all corresponding values of list1 and list2 are reported TRUE by equal_func, FALSE otherwise.

Since 1.0.5


gcut_list_inspect ()

gchar *             gcut_list_inspect                   (const GList *list,
                                                         GCutInspectFunction inspect_func,
                                                         gpointer user_data);

Inspects list. Each value of list is inspected by inspect_func. The returned string should be freed when no longer needed.

e.g.:

1
TODO

list :

a GList to be inspected.

inspect_func :

a function that inspects each value.

user_data :

user data to pass to the function.

Returns :

inspected list as a string.

Since 1.0.5


gcut_list_equal_int ()

gboolean            gcut_list_equal_int                 (const GList *list1,
                                                         const GList *list2);

Compares two GList, list1 and list2. list1 and list2 should be GList of gint.

list1 :

a GList of gint to be compared.

list2 :

a GList of gint to be compared.

Returns :

TRUE if all corresponding integers of list1 and list2 are same value, FALSE otherwise.

Since 1.0.6


gcut_list_inspect_int ()

gchar *             gcut_list_inspect_int               (const GList *list);

Inspects list. list should be GList of gint. The returned string should be freed when no longer needed.

list :

a GList of gint to be inspected.

Returns :

inspected list as a string.

Since 1.0.6


gcut_list_equal_uint ()

gboolean            gcut_list_equal_uint                (const GList *list1,
                                                         const GList *list2);

Compares two GList, list1 and list2. list1 and list2 should be GList of guint.

list1 :

a GList of guint to be compared.

list2 :

a GList of guint to be compared.

Returns :

TRUE if all corresponding unsigned integers of list1 and list2 are same value, FALSE otherwise.

Since 1.0.6


gcut_list_inspect_uint ()

gchar *             gcut_list_inspect_uint              (const GList *list);

Inspects list. list should be GList of guint. The returned string should be freed when no longer needed.

list :

a GList of guint to be inspected.

Returns :

inspected list as a string.

Since 1.0.6


gcut_list_equal_string ()

gboolean            gcut_list_equal_string              (const GList *list1,
                                                         const GList *list2);

Compares two GList, list1 and list2. list1 and list2 should be GList of string.

list1 :

a GList of string to be compared.

list2 :

a GList of string to be compared.

Returns :

TRUE if all corresponding string of list1 and list2 are same content string, FALSE otherwise.

Since 1.0.6


gcut_list_inspect_string ()

gchar *             gcut_list_inspect_string            (const GList *list);

Inspects list. list should be GList of string. The returned string should be freed when no longer needed.

list :

a GList of string to be inspected.

Returns :

inspected list as a string.

Since 1.0.6


gcut_list_inspect_object ()

gchar *             gcut_list_inspect_object            (const GList *list);

Inspects list. list should be GList of GObject. The returned string should be freed when no longer needed.

list :

a GList of GObject to be inspected.

Returns :

inspected list as a string.

Since 1.0.6


gcut_list_inspect_enum ()

gchar *             gcut_list_inspect_enum              (GType type,
                                                         const GList *list);

Inspects list. list should be GList of enum value of GEnum. The returned string should be freed when no longer needed.

type :

a GEnum type.

list :

a GList of enum value to be inspected.

Returns :

inspected list as a string.

Since 1.0.6


gcut_list_inspect_flags ()

gchar *             gcut_list_inspect_flags             (GType type,
                                                         const GList *list);

Inspects list. list should be GList of flags value of GFlags. The returned string should be freed when no longer needed.

type :

a GFlags type.

list :

a GList of flags value to be inspected.

Returns :

inspected list as a string.

Since 1.0.6


gcut_list_int_equal()

#define             gcut_list_int_equal(list1, list2)

Warning

gcut_list_int_equal has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_equal_int() instead.

Compares two GList, list1 and list2. list1 and list2 should be GList of gint.

list1 :

a GList of gint to be compared.

list2 :

a GList of gint to be compared.

Returns :

TRUE if all corresponding integers of list1 and list2 are same value, FALSE otherwise.

Since 1.0.5


gcut_list_int_inspect()

#define             gcut_list_int_inspect(list)

Warning

gcut_list_int_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_int() instead.

Inspects list. list should be GList of gint. The returned string should be freed when no longer needed.

list :

a GList of gint to be inspected.

Returns :

inspected list as a string.

Since 1.0.5


gcut_list_uint_equal()

#define             gcut_list_uint_equal(list1, list2)

Warning

gcut_list_uint_equal has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_equal_uint() instead.

Compares two GList, list1 and list2. list1 and list2 should be GList of guint.

list1 :

a GList of guint to be compared.

list2 :

a GList of guint to be compared.

Returns :

TRUE if all corresponding unsigned integers of list1 and list2 are same value, FALSE otherwise.

Since 1.0.5


gcut_list_uint_inspect()

#define             gcut_list_uint_inspect(list)

Warning

gcut_list_uint_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_uint() instead.

Inspects list. list should be GList of guint. The returned string should be freed when no longer needed.

list :

a GList of guint to be inspected.

Returns :

inspected list as a string.

Since 1.0.5


gcut_list_string_equal()

#define             gcut_list_string_equal(list1, list2)

Warning

gcut_list_string_equal has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_equal_string() instead.

Compares two GList, list1 and list2. list1 and list2 should be GList of string.

list1 :

a GList of string to be compared.

list2 :

a GList of string to be compared.

Returns :

TRUE if all corresponding string of list1 and list2 are same content string, FALSE otherwise.

Since 1.0.5


gcut_list_string_inspect()

#define             gcut_list_string_inspect(list)

Warning

gcut_list_string_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_string() instead.

Inspects list. list should be GList of string. The returned string should be freed when no longer needed.

list :

a GList of string to be inspected.

Returns :

inspected list as a string.

Since 1.0.5


gcut_list_object_inspect()

#define             gcut_list_object_inspect(list)

Warning

gcut_list_object_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_object() instead.

Inspects list. list should be GList of GObject. The returned string should be freed when no longer needed.

list :

a GList of GObject to be inspected.

Returns :

inspected list as a string.

Since 1.0.5


gcut_list_enum_inspect()

#define             gcut_list_enum_inspect(list, type)

Warning

gcut_list_enum_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_enum() instead.

Inspects list. list should be GList of enum value of GEnum. The returned string should be freed when no longer needed.

list :

a GList of enum value to be inspected.

type :

a GEnum type.

Returns :

inspected list as a string.

Since 1.0.5


gcut_list_flags_inspect()

#define             gcut_list_flags_inspect(list, type)

Warning

gcut_list_flags_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_flags() instead.

Inspects list. list should be GList of flags value of GFlags. The returned string should be freed when no longer needed.

list :

a GList of flags value to be inspected.

type :

a GFlags type.

Returns :

inspected list as a string.

Since 1.0.5

cutter-testing-framework-1.1.7/doc/reference/html/index-0-3.html0000644000175000017500000000340011525707421022614 0ustar koukou Index of new symbols in 0.3

Index of new symbols in 0.3

C

cut_assert_equal_string_with_free, cut_assert_equal_string_with_free ()
cut_assert_null_string, cut_assert_null_string ()
cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-4.html0000644000175000017500000001777611525707421023000 0ustar koukou Index of new symbols in 1.0.4

Index of new symbols in 1.0.4

C

CutSubProcess, CutSubProcess
CutSubProcessGroup, CutSubProcessGroup
cut_get_current_test_context, cut_get_current_test_context
cut_set_attributes, cut_set_attributes()
cut_set_current_test_context, cut_set_current_test_context()
cut_sub_process_get_elapsed, cut_sub_process_get_elapsed ()
cut_sub_process_get_exclude_directories, cut_sub_process_get_exclude_directories ()
cut_sub_process_get_exclude_files, cut_sub_process_get_exclude_files ()
cut_sub_process_get_fatal_failures, cut_sub_process_get_fatal_failures ()
cut_sub_process_get_multi_thread, cut_sub_process_get_multi_thread ()
cut_sub_process_get_source_directory, cut_sub_process_get_source_directory ()
cut_sub_process_get_target_test_case_names, cut_sub_process_get_target_test_case_names ()
cut_sub_process_get_target_test_names, cut_sub_process_get_target_test_names ()
cut_sub_process_get_test_directory, cut_sub_process_get_test_directory ()
cut_sub_process_get_total_elapsed, cut_sub_process_get_total_elapsed ()
cut_sub_process_group_add, cut_sub_process_group_add ()
cut_sub_process_group_run, cut_sub_process_group_run ()
cut_sub_process_group_run_async, cut_sub_process_group_run_async ()
cut_sub_process_group_wait, cut_sub_process_group_wait ()
cut_sub_process_is_crashed, cut_sub_process_is_crashed ()
cut_sub_process_is_running, cut_sub_process_is_running ()
cut_sub_process_is_success, cut_sub_process_is_success ()
cut_sub_process_run, cut_sub_process_run ()
cut_sub_process_run_async, cut_sub_process_run_async ()
cut_sub_process_set_exclude_directories, cut_sub_process_set_exclude_directories ()
cut_sub_process_set_exclude_files, cut_sub_process_set_exclude_files ()
cut_sub_process_set_fatal_failures, cut_sub_process_set_fatal_failures ()
cut_sub_process_set_multi_thread, cut_sub_process_set_multi_thread ()
cut_sub_process_set_source_directory, cut_sub_process_set_source_directory ()
cut_sub_process_set_target_test_case_names, cut_sub_process_set_target_test_case_names ()
cut_sub_process_set_target_test_names, cut_sub_process_set_target_test_names ()
cut_sub_process_set_test_directory, cut_sub_process_set_test_directory ()
cut_sub_process_wait, cut_sub_process_wait ()
cut_take_new_sub_process, cut_take_new_sub_process ()
cut_take_new_sub_process_group, cut_take_new_sub_process_group ()

G

gcut_assert_equal_hash_table_string_string, gcut_assert_equal_hash_table_string_string ()
gcut_assert_equal_time_val, gcut_assert_equal_time_val ()
gcut_hash_table_string_string_new, gcut_hash_table_string_string_new ()
gcut_take_hash_table, gcut_take_hash_table ()
cutter-testing-framework-1.1.7/doc/reference/html/install-to-cygwin.html0000644000175000017500000000711011525707421024576 0ustar koukou Install to Cygwin

Install to Cygwin

Install to Cygwin — How to install Cutter to Cygwin

Introduction

This document explains how to install Cutter to Cygwin.

We can install Cutter to Cygwin 1.7 (should be confirmed: but we need to apply a patch to GLib).

Install Cygwin

First, we download Cygwin 1.7 installer:

<URL:http://cygwin.com/setup.exe>

Next, we install the following packages with the downloaded installer:

  • gcc4

  • gdb

  • libglib2.0-devel

  • gettext-devel

  • intltool

  • libiconv

  • libtool

  • make

  • pkg-config

  • wget

We enter into Cygwin. We run Cygwin.

Install Cutter

We install Cutter.

% cd
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz
% tar xvzf cutter-1.1.7.tar.gz
% cd cutter-1.1.7
% ./configure
% make
% make install

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/install.html0000644000175000017500000000634511525707421022671 0ustar koukou Install Cutter to your platform

Install Cutter to your platform

Install to Debian GNU/Linux — How to install Cutter to Debian GNU/Linux
Install to Ubuntu — How to install Cutter to Ubuntu
Install to Fedora — How to install Cutter to Fedora
Install to CentOS — How to install Cutter to CentOS
Install to FreeBSD — How to install Cutter to FreeBSD
Install to Solaris — How to install Cutter to Solaris
Install to Mac OS X — How to install Cutter to Mac OS X
Install to Cygwin — How to install Cutter to Cygwin
Install to other platform — How to install Cutter to other platform
cutter-testing-framework-1.1.7/doc/reference/html/cutter-Test-Utilities-with-GLib-support.html0000644000175000017500000013043111525707421030707 0ustar koukou Test Utilities with GLib support

Test Utilities with GLib support

Test Utilities with GLib support — Utilities to write tests more easily with GLib support.

Synopsis

GObject *           gcut_take_object                    (GObject *object);
GError *            gcut_take_error                     (GError *error);
const GList *       gcut_take_list                      (const GList *list,
                                                         CutDestroyFunction destroy_function);
GHashTable *        gcut_take_hash_table                (GHashTable *hash_table);
GString *           gcut_take_string                    (GString *string);
GString *           gcut_take_new_string                (const gchar *string);
GList *             gcut_list_new                       (const gpointer element,
                                                         ...);
GList *             gcut_list_int_new                   (guint n,
                                                         gint value,
                                                         ...);
GList *             gcut_list_uint_new                  (guint n,
                                                         guint value,
                                                         ...);
GList *             gcut_list_string_new                (const gchar *value,
                                                         ...);
GList *             gcut_list_string_new_array          (const gchar **strings);
const GList *       gcut_take_new_list_int              (guint n,
                                                         gint value,
                                                         ...);
const GList *       gcut_take_new_list_uint             (guint n,
                                                         guint value,
                                                         ...);
const GList *       gcut_take_new_list_string           (const gchar *value,
                                                         ...);
#define             gcut_take_new_list_string_backward_compatibility(value,
                                                         ...)
const GList *       gcut_take_new_list_string_array     (const gchar **strings);
#define             gcut_take_new_list_object           (object,
                                                         ...)
void                gcut_list_string_free               (GList *list);
void                gcut_list_object_free               (GList *list);
GHashTable *        gcut_hash_table_string_string_new   (const gchar *key,
                                                         ...);
GHashTable *        gcut_hash_table_string_string_new_va_list
                                                        (const gchar *key,
                                                         va_list args);
GHashTable *        gcut_take_new_hash_table_string_string
                                                        (const gchar *key,
                                                         ...);
GString *           gcut_get_fixture_data               (const gchar *path,
                                                         ...);

Description

To write tests, you need to write codes that set up/tear down test environment, prepare expected and actual values and so on. Cutter provides test utilities to you write your tests more easily.

The utilities work with GLib.

Details

gcut_take_object ()

GObject *           gcut_take_object                    (GObject *object);

Passes ownership of object to Cutter and returns object.

object :

the GObject to be owned by Cutter.

Returns :

object owned by Cutter. Don't g_object_unref() it.

Since 1.0.3


gcut_take_error ()

GError *            gcut_take_error                     (GError *error);

Passes ownership of error to Cutter and returns a error itself.

error :

the GError to be owned by Cutter.

Returns :

a GError owned by Cutter. Don't g_error_free() it.

Since 1.0.3


gcut_take_list ()

const GList *       gcut_take_list                      (const GList *list,
                                                         CutDestroyFunction destroy_function);

Passes ownership of list to Cutter and returns list itself.

list :

the GList to be owned by Cutter.

destroy_function :

the destroy function that destroys the elements of list, or NULL.

Returns :

a GList owned by Cutter. Don't g_list_free() it.

Since 1.0.3


gcut_take_hash_table ()

GHashTable *        gcut_take_hash_table                (GHashTable *hash_table);

Passes ownership of hash_table to Cutter and returns hash_table itself.

hash_table :

the GHashTable to be owned by Cutter.

Returns :

a GHashTable owned by Cutter. Don't g_hash_table_unref() it.

Since 1.0.4


gcut_take_string ()

GString *           gcut_take_string                    (GString *string);

Passes ownership of string to Cutter and returns string itself.

string :

the GString to be owned by Cutter.

Returns :

a GString owned by Cutter. Don't g_string_free() it.

Since 1.1.6


gcut_take_new_string ()

GString *           gcut_take_new_string                (const gchar *string);

Creates a GString object from passed string.

string :

the string. It can be NULL.

Returns :

a GString owned by Cutter. Don't g_string_free() it.

Since 1.1.6


gcut_list_new ()

GList *             gcut_list_new                       (const gpointer element,
                                                         ...);

Creates a list from passed elements.

e.g.:

1
2
3
4
5
GCutEgg *echo_egg, *cat_egg;

echo_egg = gcut_egg_new("echo", "Hello", NULL);
cat_egg = gcut_egg_new("cat", "/etc/hosts", NULL);
egg_list = gcut_list_new(echo_egg, cat_egg, NULL);

element :

the first gpointer.

... :

remaining elements in list. NULL-terminate.

Returns :

a newly-allocated GList that contains passed elements.

Since 1.1.1


gcut_list_int_new ()

GList *             gcut_list_int_new                   (guint n,
                                                         gint value,
                                                         ...);

Creates a list from passed integer values.

e.g.:

1
gcut_list_int_new(3, -10, 1, 29); -> (-10, 1, 29)

n :

the number of integer values.

value :

the first integer value.

... :

remaining integer values in list.

Returns :

a newly-allocated GList that contains passed integer values and must be freed with g_list_free().

Since 1.1.5


gcut_list_uint_new ()

GList *             gcut_list_uint_new                  (guint n,
                                                         guint value,
                                                         ...);

Creates a list from passed unsigned integer values.

e.g.:

1
gcut_list_uint_new(3, 0, 1, 2); -> (0, 1, 2)

n :

the number of unsigned integer values.

value :

the first unsigned integer value.

... :

remaining unsigned integer values in list.

Returns :

a newly-allocated GList that contains passed unsigned integer values and must be freed with g_list_free().

Since 1.1.5


gcut_list_string_new ()

GList *             gcut_list_string_new                (const gchar *value,
                                                         ...);

Creates a list from passed strings.

value :

the first string.

... :

remaining strings in list. NULL-terminate.

Returns :

a newly-allocated GList that contains passed strings and must be freed with gcut_list_string_free().

Since 1.0.3


gcut_list_string_new_array ()

GList *             gcut_list_string_new_array          (const gchar **strings);

Creates a list from passed string array.

strings :

the string array. NULL-terminate.

Returns :

a newly-allocated GList that contains passed string array and must be freed with gcut_list_string_free().

Since 1.0.6


gcut_take_new_list_int ()

const GList *       gcut_take_new_list_int              (guint n,
                                                         gint value,
                                                         ...);

Creates a list from passed integer values that is owned by Cutter.

e.g.:

1
gcut_take_new_list_int(3, -10, 1, 29); -> (-10, 1, 29)

n :

the number of integer values.

value :

the first integer value.

... :

remaining strings in list.

Returns :

a newly-allocated GList that contains passed integer values and is owned by Cutter.

Since 1.1.5


gcut_take_new_list_uint ()

const GList *       gcut_take_new_list_uint             (guint n,
                                                         guint value,
                                                         ...);

Creates a list from passed unsigned integer values that is owned by Cutter.

e.g.:

1
gcut_take_new_list_uint(3, 0, 1, 2); -> (0, 1, 2)

n :

the number of unsigned integer values.

value :

the first unsigned integer value.

... :

remaining strings in list.

Returns :

a newly-allocated GList that contains passed unsigned integer values and is owned by Cutter.

Since 1.1.5


gcut_take_new_list_string ()

const GList *       gcut_take_new_list_string           (const gchar *value,
                                                         ...);

Creates a list from passed strings that is owned by Cutter.

value :

the first string.

... :

remaining strings in list. NULL-terminate.

Returns :

a newly-allocated GList that contains passed strings and is owned by Cutter.

Since 1.0.5


gcut_take_new_list_string_backward_compatibility()

#define             gcut_take_new_list_string_backward_compatibility(value, ...)

Warning

gcut_take_new_list_string_backward_compatibility is deprecated and should not be used in newly-written code.

value :

... :


gcut_take_new_list_string_array ()

const GList *       gcut_take_new_list_string_array     (const gchar **strings);

Creates a list from passed string array that is owned by Cutter.

strings :

the string array. NULL-terminate.

Returns :

a newly-allocated GList that contains passed string array and is owned by Cutter.

Since 1.0.6


gcut_take_new_list_object()

#define             gcut_take_new_list_object(object, ...)

Creates a list from passed objects that is owned by Cutter.

object :

the first GObject.

... :

remaining objects in list. NULL-terminate.

Returns :

a newly-allocated GList that contains passed objects and is owned by Cutter.

Since 1.1.1


gcut_list_string_free ()

void                gcut_list_string_free               (GList *list);

Frees list and contained strings.

list :

the list that contains strings to be freed.

Since 1.0.3


gcut_list_object_free ()

void                gcut_list_object_free               (GList *list);

Frees list and contained objects. It's safe that list contains NULL.

list :

the list that contains GObject's to be unrefed.

Since 1.1.1


gcut_hash_table_string_string_new ()

GHashTable *        gcut_hash_table_string_string_new   (const gchar *key,
                                                         ...);

Creates a hash table that has string key and string value from passed key/value pairs.

key :

The first key string.

... :

A NULL-terminated list of rest arguments. The first item is the string value of the first key, followed optionally by more key/value pairs. It must end with NULL.

Returns :

a newly-allocated GHashTable that contains passed key/value pairs and must be freed with g_hash_table_unref().

Since 1.0.4


gcut_hash_table_string_string_new_va_list ()

GHashTable *        gcut_hash_table_string_string_new_va_list
                                                        (const gchar *key,
                                                         va_list args);

Creates a hash table that has string key and string value from passed key/value pairs.

key :

The first key string.

args :

A NULL-terminated list of rest arguments. The first item is the string value of the first key, followed optionally by more key/value pairs. It must end with NULL.

Returns :

a newly-allocated GHashTable that contains passed key/value pairs and must be freed with g_hash_table_unref().

Since 1.0.5


gcut_take_new_hash_table_string_string ()

GHashTable *        gcut_take_new_hash_table_string_string
                                                        (const gchar *key,
                                                         ...);

Creates a hash table that has string key and string value from passed key/value pairs. The created hash table is owned by Cutter. So don't g_hash_table_unref() it.

key :

The first key string.

... :

A NULL-terminated list of rest arguments. The string value of the first key, followed optionally by more key/value pairs. It must end with NULL.

Returns :

a newly-allocated GHashTable that contains passed key/value pairs.

Since 1.0.5


gcut_get_fixture_data ()

GString *           gcut_get_fixture_data               (const gchar *path,
                                                         ...);

Reads the fixture data at "path/..." and returns it as a GString that is owned by Cutter. The description of cut_build_fixture_path() shows how the fixture data path is determined.

path :

a first element of the path to the fixture data.

... :

remaining elements in path. NULL-terminate is required.

Returns :

a content of the fixture data as GString owend by Cutter. Don't free it.

Since 1.1.6

cutter-testing-framework-1.1.7/doc/reference/html/readme.html0000644000175000017500000004035511525707421022457 0ustar koukou README

README

README — An introduction of Cutter, a Unit Testing Framework for C and C++

Name

Cutter

Author

Program

  • Kouhei Sutou <kou@clear-code.com>

  • Hiroyuki Ikezoe <ikezoe@clear-code.com>

  • Yuto Hayamizu <y.hayamizu@gmail.com>


Kinotan Icons

  • Mayu & Co.

License

  • Source: LGPLv3 or later. (detail: license/lgpl-3.txt )

  • Document and kinotan icons: Triple license: LGPL, GFDL and/or CC.

  • Exceptions:

    • glib-compatible/glibintl.h, glib-compatible/gregex.*, glib-compatible/gscripttable.h, glib-compatible/gsequence.*, glib-compatible/gstring.*, glib-compatible/gunicode.h, glib-compatible/guniprop.c: LGPL v2.0 or later. (detail: glib-compatible/COPYING )

    • glib-compatible/pcre/: PCRE LICENSE. (detail: glib-compatible/pcre/COPYING )

    • html/blog.*, html/download.*, html/heading-mark.* html/install.*, html/readme.*, html/reference.*, html/tango-logo.png, html/tutorial.*, html/mini-*.svg: Public domain. They are deliverables by Tango Desktop Project . (Some of them are modified.)

    • html/ja.png, html/us.png, html/famfamfam-logo.png: Public domain. They are distributed by famfamfam.com .

What's this?

Cutter is a xUnit family Unit Testing Framework for C and C++.

This is a list of features of Cutter:

  • easy to write tests.

  • outputs result with useful format for debugging.

  • tests are built as shared libraries.

See FEATURES for more details.

Dependency libraries

  • GLib >= 2.16

Get

tar.gz:

% wget http://downloads.sourceforge.net/cutter/cutter-1.1.0.tar.gz

Subversion:

% svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter

Install

See Install .

Usage

% cutter [OPTION ...] TEST_DIRECTORY

TEST_DIRECTORY should have test_*.so. test_*.so are searched recursively.

See cutter for more details.

How to test

Executing flow of test is the following.

  1. Write a test.

  2. Compile it and build test_*.so.

  3. Execute cutter. It loads test_*.so and runs them.

See a tutorial and sample/stack/.

Test result

Here is an example test result:

..........F.................................................

1) Failure: test_test_case_count
<1 == cut_test_case_get_n_tests(test_object, NULL)>
expected: <1>
 but was: <0>
test/test-cut-test-case.c:143: test_test_case_count()

Finished in 0.020857 seconds

60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s)

Progress

A part that contains "." and "F" of the test result shows test progress:

..........F.................................................

Each "." and "F" shows a test case (test function). "." shows a test case that is succeeded and "F" shows a test case that is failed. There are "E", "P" and "N". They shows error, pending and notification respectively. Here is a summary of test case marks:

.

A succeeded test

F

A failed test

E

A test that had an error

P

A test that is marked as pending

N

A test that had an notification

The above marks are showed after each test is finished. We can confirm the test progress from the output in testing.


Summary of test result

Cutter outputs a summary of test result after all tests are finished. The first of a summary is a list of a detail of test result of non-succeeded test. In the example, cutter outputs a detail of test result because there is a failure.

1) Failure: test_test_case_count
<1 == cut_test_case_get_n_tests(test_object, NULL)>
expected: <1>
 but was: <0>
test/test-cut-test-case.c:143: test_test_case_count()

In the example, test_test_case_count test case is failed. We expected that cut_test_case_get_n_tests(test_object, NULL) is 1 but was 0. The failed assertion is in test_test_case_count() function in test/test-cut-test-case.c at 143th line.

Elapsed time for testing is showed after a list of a detail of test result:

Finished in 0.020857 seconds

The last line is an summary of test result:

60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s)

Here are the means of each output:

n test(s)

n test case(s) (test function(s)) are run.

n assertion(s)

n assertion(s) are passed.

n failure(s)

n assertion(s) are failed.

n error(s)

n error(s) are occurred (cut_error() is used n times)

n pending(s)

n test case(s) are pending (cut_pending() is used n times)

n notification(s)

n notification(s) are occurred (cut_notification() is used n times)

In the example, 60 test cases are run, 253 assertions are passed and an assertion is failed. There are no error, pending, notification.


XML report

Cutter reports test result as XML format if --xml-report option is specified. A reported XML has the following structure:

<report>
  <result>
    <test-case>
      <name>TEST CASE NAME</name>
      <description>DESCRIPTION OF TEST CASE (if exists)</description>
    </test-case>
    <test>
      <name>TEST NAME</name>
      <description>DESCRIPTION OF TEST CASE (if exists)</description>
      <option><!-- ATTRIBUTE INFORMATION (if exists) -->
        <name>ATTRIBUTE NAME (e.g.: bug)</name>
        <value>ATTRIBUTE VALUE (e.g.: 1234)</value>
      </option>
      <option>
        ...
      </option>
    </test>
    <status>TEST RESULT ([success|failure|error|pending|notification])</status>
    <detail>DETAIL OF TEST RESULT (if exists)</detail>
    <backtrace><!-- BACKTRACE (if exists) -->
      <entry>
        <file>FILE NAME</file>
        <line>LINE</line>
        <info>ADDITIONAL INFORMATION</info>
      </entry>
      <entry>
        ...
      </entry>
    </backtrace>
    <elapsed>ELAPSED TIME (e.g.: 0.000010)</elapsed>
  </result>
  <result>
    ...
  </result>
  ...
</report>

Test coverage

You can see the code coverage with Cutter if your system have LTP tools . To see the coverage, add the followling line in your configure.ac and type "make coverage".

AC_CHECK_COVERAGE

References

Assertions

See cutter/cut-assertions.h .


Attributes

You can add attributes to your test to get more useful information on failure. For example, you can add Bug ID like the following

void attributes_invalid_input(void);
void test_invalid_input(void);

void
attributes_invalid_input (void)
{
    cut_set_attributes("bug", "123");
}

void
test_invalid_input (void)
{
    cut_assert_equal("OK", get_input());
}

In the above example, test_invalid_input test has an attribute that the test is for Bug #123.

You need to define a function whose name is "attributes_#{TEST_NAME - 'test_' PREFIX}" to add attributes to a test. In the above example, attributes set function, "attributes_invalid_input", is defined to set "bug" attribute to "test_invalid_input" test.


Template

The following is a template of test.

#include <cutter.h>

#include "HEADER_FILE_OF_YOUR_PROGRAM"

void test_condition(void);
void test_strstr(void);

static int condition = 0;

void
cut_setup (void)
{
    condition = 1;
}

void
cut_teardown (void)
{
    condition = 0;
}

void
test_condition(void)
{
    cut_set_message("The condition value should be set to 1 in cut_setup()");
    cut_assert_equal_int(1, condition);
  ...
}

void
test_strstr(void)
{
    cut_assert_equal_string("sub-string",
                            strstr("string sub-string", "sub"));
    ...
}

Thanks

  • Kazumasa Matsunaga: reported a build bug.

  • Daijiro MORI: reported bugs.

  • UNNO Hideyuki:

    • reported a document bug.

    • assisted Solaris install document.

  • gunyara-kun: suggested API design.

  • Yamakawa Hiroshi: reported works on Cygwin.

  • Yoshinori K. Okuji:

    • reported locale related bugs.

    • suggested a new feature.

  • Zed Shaw: reported bugs.

  • Romuald Conty: reported a document bug.

  • Romain Tartière:

    • reported bugs.

    • suggested improvements.

  • Ilya Barygin:

    • reported bugs in test.

  • Hiroaki Nakamura:

    • reported a bug on CentOS.

cutter-testing-framework-1.1.7/doc/reference/html/command.html0000644000175000017500000000364711525707421022643 0ustar koukou Command

Command

cutter — xUnit family unit testing framework for C and C++
cut-diff — show difference between 2 files with color
cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-1.html0000644000175000017500000000313511525707421022755 0ustar koukou Index of new symbols in 1.0.1

Index of new symbols in 1.0.1

cutter-testing-framework-1.1.7/doc/reference/html/index-1-1-0.html0000644000175000017500000002001711525707421022753 0ustar koukou Index of new symbols in 1.1.0

Index of new symbols in 1.1.0

C

cppcut_message, cppcut_message()
cut_assert_equal_intmax, cut_assert_equal_intmax()
cut_assert_equal_intptr, cut_assert_equal_intptr()
cut_assert_equal_int_fast16, cut_assert_equal_int_fast16()
cut_assert_equal_int_fast32, cut_assert_equal_int_fast32()
cut_assert_equal_int_fast64, cut_assert_equal_int_fast64()
cut_assert_equal_int_fast8, cut_assert_equal_int_fast8()
cut_assert_equal_int_least16, cut_assert_equal_int_least16()
cut_assert_equal_int_least32, cut_assert_equal_int_least32()
cut_assert_equal_int_least64, cut_assert_equal_int_least64()
cut_assert_equal_int_least8, cut_assert_equal_int_least8()
cut_assert_equal_uintmax, cut_assert_equal_uintmax()
cut_assert_equal_uintptr, cut_assert_equal_uintptr()
cut_assert_equal_uint_fast16, cut_assert_equal_uint_fast16()
cut_assert_equal_uint_fast32, cut_assert_equal_uint_fast32()
cut_assert_equal_uint_fast64, cut_assert_equal_uint_fast64()
cut_assert_equal_uint_fast8, cut_assert_equal_uint_fast8()
cut_assert_equal_uint_least16, cut_assert_equal_uint_least16()
cut_assert_equal_uint_least32, cut_assert_equal_uint_least32()
cut_assert_equal_uint_least64, cut_assert_equal_uint_least64()
cut_assert_equal_uint_least8, cut_assert_equal_uint_least8()
cut_assert_not_equal_intmax, cut_assert_not_equal_intmax()
cut_assert_not_equal_intptr, cut_assert_not_equal_intptr()
cut_assert_not_equal_int_fast16, cut_assert_not_equal_int_fast16()
cut_assert_not_equal_int_fast32, cut_assert_not_equal_int_fast32()
cut_assert_not_equal_int_fast64, cut_assert_not_equal_int_fast64()
cut_assert_not_equal_int_fast8, cut_assert_not_equal_int_fast8()
cut_assert_not_equal_int_least16, cut_assert_not_equal_int_least16()
cut_assert_not_equal_int_least32, cut_assert_not_equal_int_least32()
cut_assert_not_equal_int_least64, cut_assert_not_equal_int_least64()
cut_assert_not_equal_int_least8, cut_assert_not_equal_int_least8()
cut_assert_not_equal_uintmax, cut_assert_not_equal_uintmax()
cut_assert_not_equal_uintptr, cut_assert_not_equal_uintptr()
cut_assert_not_equal_uint_fast16, cut_assert_not_equal_uint_fast16()
cut_assert_not_equal_uint_fast32, cut_assert_not_equal_uint_fast32()
cut_assert_not_equal_uint_fast64, cut_assert_not_equal_uint_fast64()
cut_assert_not_equal_uint_fast8, cut_assert_not_equal_uint_fast8()
cut_assert_not_equal_uint_least16, cut_assert_not_equal_uint_least16()
cut_assert_not_equal_uint_least32, cut_assert_not_equal_uint_least32()
cut_assert_not_equal_uint_least64, cut_assert_not_equal_uint_least64()
cut_assert_not_equal_uint_least8, cut_assert_not_equal_uint_least8()
cut_message, cut_message ()
cutter-testing-framework-1.1.7/doc/reference/html/colorized-diff.png0000644000175000017500000022116011525702754023741 0ustar koukouPNG  IHDRS\/VsRGBbKGD pHYs  :ݙtIME % `tEXtCommentCreated with GIMPW IDATxy|E;>Ip+7(+޺纻*벺^s*뵺"׊ w2=ݿ?&$@|>T=z[cƲb V^͔)S?gD"H$=wk9}fߗ.[es/C&H$D"LI$D")ŔȴISHR!'謦.MWˉO9{w[jYO@1}##%ߑߡOC!KwA0$Ca挩p PPN=!D׻&P~dgLZN⊓In8TJI$ZK˭&|LG x~x+S\0]kor%Jn*hY76Vv| hAI8;n7OEs?hx9J_[yP{>}:[&\I)eM!/6=}ƲhC;j~|'}RzA=ń/`c*g{}[#ǐyR?mxCA:*СyʸۣW2>Ă|OR.9v]/|#HՏ>FPzq*)SN!eZvu. c mVoW ;яbXrd*jf SjQ'rހML_nÜR[.0s9Cjw\)D-RWfv5:>6ݣ~Xmޣ,,ƠX^9ۢh4 fSl02%s)EaT<-e;.2؉g06-b~v'}EC#w(VXeJ^!iPOv颸ۣ)!L,xss!GKހ6_;R,:=a]~.ht7+ r ?xDl.{8^=IgߡqX VPfLFaJ[QrL$QeRcƞGC۹0frJ }Qv@3ܶ: [+d%GۯLRgmhI? gTNMȨ19/(]QP:a6*)9a\S&K0lUϾѩ,䵵' J|6(zq +( ד>"},\c=57 [_IY'ɧb|)~9sV9H.Ƒ J}#B7%ˎn/P%^~ɧ9z߆ULr8%JB&f{}ap|M<Ŭi_-~ b{RzPa|%`ԅE$HKT %_#,ߴz]0 `k6I`uLm̨l7N5%`@%4 ,{Z_{ܭeAA#r=#966i9XL4,Q-bd݅G1,oϣi!ץ۟y$ƛvH  UZp/ާCYV(nGVi.Cifgv> W]>D17w{J2Sm^(*)qkHMU"{Z vxr|5ފ:N#!upb 5䰴~X2uv4"\5QtśЪ * 4'p5 7 ,̿"vLW܍㘋Z`bJ^IQm Ϻد|Ԝdћ?!+_3}@v=!l#e| JUG0ׯ=9%?q2>rPhr40C׫ no}9!Q, &>Ō^YT&L'5^0l3j"x8axeg ̩ uM3|l`daoAXǀy9L` xt KRaM 1R3xjR3*}}P['k@̆XOHh:eqA<`Gǟ| se oo*Ȯ[b KPuCe:?Û5 'CN:SI4t ~[7ljW0Dw;Z.z-ZU%A@ PYI]i,oˑs;w{T25 /f%ݔ4/[ߦa"~6&_۩:c<( caTn)TI Cæ s1j1˨d)39=u$MĪCobycq3X&jj\qS N9{ NȃPB{%OK 91Tl | O';+݋(]uvOJ25ęް1=Mh= c@u}/$'q5mI)S#pvsNscGnJ֬[ڃv,`|o~{+S0bК=K?0EhTT 4A Sq.U ((.T?Nٷ> 5&݇>o'}l6*50TMā: 1:s66x:Q h>/;x`tT0=T>Ekh4oko|! nBMp$׆iX(0YAHq7zr(|.fΉbnHQT$6UM4b E  t I$*BW82Ȇۜ?%V1m|`G$e(dUCc)Qʶ0~ 'ƶc9Ar8khvUŪ_D9i9Vs" ->xdMXP49ӱ~1_7Zlk Dp:[/^jaj5PPm2^}Xڌ$g,h#)IAnS!:]/{6zgX##H$BrbmLLWpׄQD+ZVq)fCݘEˡmC5Dc랒LZ5r8!l-Bg %@\$NjSM^n Jt?7i#P|AO!>жQ%%%blI$*% 6 gŊŒ!>=dq5t5ttB8H9'WzI8rz>GBFZsGMr/V9#ў|bYT?f,9_ś~NαsRN솪=~HfA%K@}=d~D:͟Ppf _mF3OvM[g Cb*x}Sk'l<1/-->dLN晕?3##]ױEuqYg^i'u]۟o7!lX"|œ:⸍!nL"؅}7r8U<sb?d _1f҉ۻ/V kyW-:f Ms[101:&˷`VLuJ> J2y/o |sxia _rF]96fj0D".(Hˇe1Nu2iyG:7<+)t/{TrAv͋( boB^G$X .g/6ud-^Ԇ ݬQ0l6s.ujRYOcJ-0[Q);Tvv;N;`Opu7 Wmp7,81̹^V+gWHZtVDn"IbHe\ ::%lY4XOs:wۍ;%ŭ{qq1cnjeŊ^)Sܸb3N=K$+pEDgǔ7ZM))(BWW{TT܀+)$-hc (fA-+d%VY~#xLi`cR55Eл0:Iv`]OV'ga|)u,mƞ\vr6o}rθC赚3h}rm(ȘoGQw{j?tC_GVcH"c-b))!NF K( 6' > Y2ƜLzAhZO9IL~1p')UD$"+H$D")D"H$LI$D"4LD"'N&nHu=/ =KId2-)KYQu~LMP6%:9Bs囚Cqp*~֮]GsN6k"߾,=?5!Yy XUԘޣH"(&v ڃc5CQٿ<±6VY?%32BoL&'i=`ilJcɺI=㗔=4y wwC ?hx9J_[2ʘf6ִx(yAYwމcPE4W>1q\;mМL 8\=.!('61w^#?63u&O6J`K&~/߫v^il1Gr>3WA$Y&MDZV~ omD]ǭɒH߸^ШOE!?X6铱$x,m_.~ 'eQKӇ&&ϞEoT*С $ϛиWu?ed?.QgtKG_$z&qTv/mBG[Fx˯9=usS[̄ku|XrYX(RJUa=+!xJD5WQ4>ES|#T.C=[TY'o#uXG|:3(w?_8KmMægÒ5#{ӇwrdS]AK n?=ȶ*Hx ɒ}"NKdՏv; zs{o!vb Ro _r݉x_xm 傋Hs!)Ǣb+u~^xCe55"H}h3t>j]]#УZq8M(nG-b y˞Nj!/L~=2GxGLB| '@ۃM("FA6E?8*B@PC7 x-vѨ>7a2(Bt#q>Z׋‘'bv>B_&|np$Mr>Xڡ4nLH%sN=%=S.A1^•.ڏ]{ +=FYH>+[~ռLz4l5lo214{CkD\>0RLs&1ܱ@ulY)+7 "jv#nۋ,ⷛjS-I\vj>fI[Bɢ3wwbN-7r 12 &,zu%GθS_Ae3'O✽k)2ePNf[g;d.~Ͻ+jQ͉^^W"F)w ߓˆjXGC~ FIJpJ^[ۮ, A57rH^S!z})p+'_O8/S1ΞnF`qmw`ol}Jb9ޠ1 ud۬F˯#0@۰I磤AIlWvOٽqTJzNy窤$aKF }1l"׌ʍ}UiėO1>p}:#Ρ`Ϋn yXFZV" aBWA0eC#>v nwG{\0Mg`Gc^ԨsסMO~ʂkObٳn?< =Mg(t˟|zӋѴ?TaF:WT8Ͽ^U|}w6Ij0ɩ CM  VWzbFO-8_;ܾYdZl*\8rC{mBh:~ӆ~hOH6|;چLQxj(^]>PS9Z[ѷU; l/'$rNłX *?skq!CvɫϽ˧Vv T<}PV{TZv=Y@΍Ѩs/\Yq@_:C7Æ7kNJth*6r|5ފ:N#!u%?q2>r6xcuae]~)SS¤hOz&'`XCc5L+FZJ" XYA;~3ZL1]q7c."k*J~.mNՑtoӧe6AیʇIA B!e=SHч_ d~Ԁ#KC%¿/An p:5~8 O_"+ģȣʸI )&٘-cȘG{%Ծ`h? Jl>3'sʑgt1FWUMaQXz '8붱'  ^'8)hBR E{(}$gHZVqܿ0(JĽPYEΫ@(18qTٚ^ Y/tdHp6'ݽ7Vky&Or N@K'ӱ3kT9lmO:{F^T!$d$X5$ge~뤋џ1c>g^q$XHuJ57̞;_pmB[Nٳ/-d~ٷ߃=A⯎Cy; iq^v+Ѫ6a@-$k0U/9ݕL"[3i?( BQ _ rwi\^Vj-9#) mxj*hlk6=uo@1Yp(՜uLJKw#o<)ImO|.p66$DB:;-* ŊahE& cDnWX`Qq\zNZTʷ6j."eixy倬v7!lX"|œˀXm*#Ѣ!1 ʖV3yhWzs-H#C[&xS[:֛iiǟnn`n5mdFv0cX1ç J8rz>GBC|5*Y 5ttB8H9'W{d J5 ^(zk D:Л2~$>JɗeƛF@ m^A_I/O2-{ڹ o5K+kF#!&8o䡛fpbuqWRT'{GBM:g:w)O rT-I:(/_;84_5/,cΗ9<|tOdHN:?ƙ;Hmv/4_5XZ‚yR٠ve-ٷކY4ſA uu;'뎢fn{'X~79N3 Sn&&(]ipk=9_dkqVQksҏ!)(ty`|_ťF A RQz_(&Ҝ.A+f̓1 ˖dKgbzO' ݣ!RGhfN릨|*6hl%=ތΧ*J;F7J uԾSyyv| *q> ڑ{ɍXCx)OL8(/lxxLI ptʢ&Uu=ZT!Ы"!SRFC-ZMCteSZ2@Ft~_^JV #UQ)Fq)LYԲ/N֮_3[tR.{YIRBˌ U5t+xz%7zJ=/  A)Iϙ9d+y ڎʤ}(].\~yOlٴ*nl ?G|BUO՚,;B@-eߌEJz6_iUeM(lWD~W/y( 21Ͻ=ƤO vlOظݺ+l)UD6>vp4D"ij5?)4D""M H$D")D"H$LI$D"dJ"H$ga=>QU(6  KeD"H$ݕú25UU8F2{[2D"H$a5B k+H$D"3SD"H$యLe"lL o6 W&H$D")Ai[aPln,+H$D">L"H$;"LI$D"dJ"H$D&SD"H$=zfv 2D"H$\H$D"ɔD"H$L$D"Hd2%H$D")D"H$L$D"Hd2%H$D")D"H$LI$D"Hd2%H$D")D"H$LI$D"dJ"H$D&SD"H$LI$D"dJ"H$D&SD"H$2H$D"dJ"H$D&SD"H$2H$D"ɔD"H$D&SD"H$2H$D"}㞩yD"Hd2 Fsd5l8'et}f34#&Qje*XXf0tAר0\ytVs\6u4-d;]0rx#9 Deqv;ѡb#ekD"6MWOHo8a*Ljopd  ]Y cjv| nfעS]AK nld[aᵄ#eA6'Kb;-U?Rہ0:)[K$I{wϋ3[ng/gvu >4`ps0M"]g =&EnfN%kx.=svw %o*u'%$Se.YmU sQ.]p9ۤr yv I<*03T ~SMN2/h0P5q4w $* SUF7ӃܢhMmgՃEFjIS5 &NEOf;;1|ʖkv3 iɰAyE%^]ɧ`6́ؽ5<_0۲xdn7<'s{]Z9쓘: L| zXu?y]K7,?w*B+:O_F՜cWM7S~Z.0Xn?&O%h=ۓaʩ#H9+On/\Y=[…̌!iWK}uP&H$GuggcKB.2yb9M+ Z_0{@գs[0H@(#!!#w  C IEZ p?`Bd@MCO1qoXycq!DCרsסME`ĩړX2<.%0o@/|y}F06?E㩹X~hε7'i3Tjg~YdqcQʔbH6z?e˟A\ abԠܚSM Dn.#l'%ݏ5ʒEKbVszN:Z•'ڳ5ӹ_/a7$g2ڠA|Ҡ NlD:Bp2ߗ>Rh]l3Oo^^  ܠi* odjе3N`m,mКKH`1Wm`mgC"h3'ݽ7VkyfJt: N@K', Ehz+['{m֧ W;Ґ]6ڦ%!c$굼/kytX:KVou0S=,Y]]Y'|ԞKd]*hc8{+H$L5qxV:[5q"P1ܔG 5'WZ̪`F Xk,NIm1U+FU1t=˲70I9ۼZӾ=0YToDDV#9k.?J~kTSf$K i|/ T7_ c wr>t6]v4=FLD՞ϥaox p. r- xeB%Hz>qgtͪJb9\~eC7BQZ 8ܬҢxCЈ`zӟg5G x ;$0H;׵ZKoHoJa١OM%mmf8umBI1&PuvZ=zL4@5'rf)V C0B/:5` cDW+&`ZǥEU| qi8ʡ29H> gw62gR';(D"W:v?`?Hy/:&b9}\j6ssTB5Mb fz !Xn1エt YhRl.{'f0$W`FޟJi'V`^{|/uLuyssW B ?ZͰOU%,w! kWM+=j^(0Xr,* /Ws>5l͢, L^+ށH=^w5{p[uj.l8$+msرj)TN0Pǵonk/o[ gF2͝_S\HY˪p^'Lv :zSǭ#p8H$o.K[MŌ3+VzjLs.3~Μ5g.׵GK8:A c F}Fal natX9HPTX90vy8xf#&ml0mJ+zapYl'J89{LLBe S1[I7xQQ}@AT:X}|F f%":!!%HW)H$ݗwk9K2.[es/ge-Ƶ1Y7 8^gŲ"]VFEm۳m}i:\~P\K?ǃh}uuSN=࣬!9;"oŻkхNQs{8^4Q$[\n$-n͹K jk^S&'۹myuӡ'S"H~ɔ烻j5?)4D"x#4D"H$2H$D"'Sf[E1;9nu'9$D"~Fs'`wO%ENrJI$D3O$Acu)^O!OZ(2{j1HXJ Ψ69f&N۟lՔ4-)\~J_TH?/Lړ32wȑ(H$x5`ʌ3,g~؟LwC7w[u'9\3sǃ/3ӽ,(?lYNc9>y qѯ*娔H$Im reYNGUOìo1Oh>dfKnxC$d/6s:vq㋹5똬<}P,Z-ol2ZړX2<.%0o@緡f%ӿW閨b%liѽ>Xɒ]NLy5{N%GD"HzmeJ1'0!_’]})<0dNb_[˩[?ol?;. cwFBHky{[ P_P=a \=xi Np6O_~)&b% T =1}* ϲo y9v=rg5jN[ꌧr&n|S6sf s %H$(.)n3vXVXի2eJ̍\.Ə9s:-hbRzON˳U-IHC 4Rm=e[}VwL9-]<d?;6{?3;#F!`*bP=Q.VMaS8q\v!h<є%ew{1I#g6,J͚3̳}~Nc{|'JaE~[nIс}y+ yB!\1q30eX}h HUa؈>d vW<;B_X!xЪJT;E#-ps AG!v,w}Ƴ_ Bt+S/ۏV1yҏٝC@ ytt/jEh89{J%wyXmSƽ/7f7FG %.%.>.L{ ^L{'4]؝({VQ4OHܺl  0)~Cg ~7h YVӔŪ)1Wiss(-f* JBTIP7=*v{k?)-TceϪ;CwK)1$B*(6 xn,gudVF317z&Yyzv~^#DtTkLwm0phwF\sLW2BH0TA7O>~ZcZ;7vz]fWZYn?Z0twTy dT RO_Y{Bl߱ }<~fq`P &;o bJQYE@HWz s wU dv%9 Ynj ӄS5ֵaC S_!H!h|޲qpQE#Ru-NhIë]sd1\pI' rG;{z;sitוK$NYȭ# y(C%?d7\hvǃ{א_g"TəitV+&:A1_]7 #kLJZH ߶b<\YfB,+yO)SA?B,ϫ38I ^t4udߦ,L7ǫ"k.DB*JޡjyyyןkײqFFU8p 'O*PdU&˙惻RCHI]yTy&&ƣoW ]̭ +"STx` xC ~Z9¬Vq$9B!Xt0s&Yqx/Nm)kʸ2V,Xł>4[ ӆw$۪0lD}sxo kLKҖ^@LoѵΈEի7u=ڀHQ8iü[]՞}wE:U% k2Vf#kST*WbiX@QdU MoE_C瞠A<c33@fB_bepO.s_^ĹKXi+z^6k۔qKͯ =$48J\ (-q(qQ Z =H#65i֨ʋ]؝({VQ4OHܺl .0L^\i(<"+ V$ , VT?GL `A!B{E@%B£jʞx奔[ BwZLrLvI$ }Leڔ,!JroaAlv'+TpEKgUk"C:*p tEaH8Wo\cӈQ4L cߓt $[7gxa;"!hԥ=KMA9f]a[?*\yψO}ɤ7OHYXlpJ 0P}@2 FW~iJTh2U(QdԢBQPnA&S !x~e>F^nBsUIM;ocÃV6(-g ]nWTd?H{KDŽ1G&^ ($eaʎQT|ᔎIbj?P:0q2Bf2vL3i.6vxjwx 1d/BlAw;U2bYy*:U!0JLEa1tŭZ帀RaRf^CǃAAal[[V~nkU׾m2{BN)o.һQhyM tJ_gyfO2ksie xq .q|w x-dq7r^FInAO_s2GeZrfݳ슉F_Wp !A |eRfU^BXF ]L~0\b0HFf f=z(SQZi41tW-Ym1C}VȚ;)!ʼnCy>߯?k׮eƍ5ޙ1p@N|MN'PuE$115{G}L|WPӬsyN+^_) %&jE&UHJLL428Ť4)9 ~0B!~)^ 6oⲱU{}媕L2yL!p=rW3>}Mv p}ca5OVis?74B yбB!SB!L !BH0%B!B!`J!B)!B B!$B!L !BH0%B!B!SB!L !B B!$B!`J!B)!B!B!SB!L !BH0%B!$B!`J!Lťv󒫽ԝ\M7[1lN]&B Һ0eHR xߟz0̆CB!Dc4\}5O`׬vNiB!?`sx,^tr̛ / o 7E$%u1)ޟ{]*dM]wG7e !a5i>/_u&]=vpyEtTّ-<d$Z %.<zi!ueɥB!h J^w<ɳ= q9twctp?7GVח0N]vB!^Ħ8.wz`3dO !|eA UUEz_!LEH6$1d/BB!Dk!kK_C~ի`PUw^$+*̻w27O O4g+W !Be3zUV ߪ.aAmYHrF';Z!?` r~B!τ}I!B)!BSg{zY22BYB!`J!h|FL$s6zʷ약 B "RcȜ"uÖAqϾoSij_:%]--?=;eT!"ɢ~wo{ {WPv9i-b뗧-Gu=%_ͽɈB!D&ڲxyWo`1ML1/B!`*<8TB "Sc 4 2eL?(2jזǬONnYv~js>Zk\Rfn-A?V˹|:٭;)'WqP1 ULcv8)B!)igŝ0+:ŷnAҲ2%21Ǥ^ ŋ2݁<= `X*"3 =IY1[FI]/]YAI-E!#Ҍ#zTt8bGMAQʴr#}GЬ*X؁5VKPrp80UMm5&E'jvB!B4`*wE^{\63{9{5 vfTTk2Fj']'KΚՁscR[V 'Is?!B)5}mxv&1j4&(kVK, vf}E+\_GiiQ\wc['ڳlbXֆZ**eQd!FM2ĵ޾% X,P ~o.һQhyM t<&ݵcX214k=2mن\;#t\xN|&ɻofQal %~?7Rn]Ĥe$'wx/E!>z]W]m^|Oԍ0yauuk/#fIq$5 +N_PPcHފdU?Ө71qd$pq2PBL*q¦kbAkx?Dmw2 gPFB!R B!$B!8%~7PZ4>6^B!#+SB!L !BM{Oш7sF՝ZOB!TDj s_$]`2H67hw\/iW?5-6|̮ǟhE?OQ*>ʿ!SFB!4Y.b^`ooa *.'Elrׇ 磴97dЛ3oGJo+?0\:uK!B8Menz b& ,X޳#rK+ 0`:暋_2-9k !B4`ʿ!UE:$'<{>iH0Y\-Ig{o$B!D3 7 2z`l_޿|(e0 !&{mB*2*BѼ;ay3WhW +[M&B!y0GF+Di=t/`2*BѼeE tjQk_^mP&B&>6d vIٝy^tLٶ9K3Ct#38 xw:>w< l^K~쀰qC=]ƊXp؇5%Liml {P۷ZgN}F`Oޟzfsn_ۆSٟ5OHYO;gg'_\hsx,>5m0xrnKkᄫgr̛ZjUuT,0gēԕƴpi 0v2^Շ~^QVyê-S'jD0W-ُ-L`G<1m̹ bcs{οhu}ԷRmZ&=xu@u?`+_ '>#ͱZ! . k8}hX]ߩ\9dL#ą߀E@ј|*&C]1s䇦`⏸';ѣɳjop۸<ecM%. IDAT>^b(gT/65iֈLZ3K^-Flé-еMFHg^'//c%,Ak!,|ՙ,w%,mL~mm/|zQ%׳Ggّ-<d$^~&Կ績vcʘI;  qeII-k?I`i]^[|1fy̪xQx^҇|[;/geFu}շRmZQ,ڍYmKcR?{&f/bg'KcGu9V{§LXĜxz>Wfe|cC b;YY.tqW)KW3Ptor0<+w|@lbzڔ,!Jlɴ܆Sџt1 _?#W[Ej-IdhDR h,yzg{Vե(d/E[@^ضGgmmTO#P'^h,ߘC{7F|c~Ti';vki|u7ЊXv~o=<ägٌYu/)g[ N^]Ï96j׀Zx>M_:H) 8m,^X~i9v24g4-VA־Mj:sCRL`bIQjf|73u tfNx]a;^mSm^kMk W^m}N2V(@)(RƆYu əcmQn/;ftGgSHc4pjNp8;TFYvǬgh_Ŧآu}L3L1dBײVKYαp"p}]9q}GajϕM~kiqToُ8mmE`W4,U]ճuh]\9nRZ# pΕM5=&"5.z=8UA&sKp2 '\?ipmWT;4C6^;Sj7\Dx (&+F̳eQSzqNEј8>rp/ҸmFǗnEO%mcQLvM=®DG:X_!/91&95nWה+̇f2ctn ˭ ]t$6<1a,s8|*t(b-Y]u~zYXgyfO2ks)A_,`"`R΋ 'ӾDjCSg$՟u^vo.һQhyM t6ǃ{א_g"TAf;k ưdb,i2{r:FInAO_s2GDz\{LN¼{'{JnQ3M{og0rTrfݳYyklKGL>+L#-KP ?m)t̪~g_CAyMp_q]؍1/zWsQL5 DGG: ׆hX8sk+~֡73[eΚg}_S~D3cy5+//vZ6nȨQ=8p 'O~*>DMQ;.2dUӤ֘bNOgfxf-?%-/'%(uz6Է}5 Mџj7۞8.8>75]n;8|en|5$V;-xnJ|FD4log}8zʵ!5ԚWLL1<[\1A/c_q}؍u|9G]\}N fSmh9M]H}s ڑՙϝOp(8oϕp}诣K+}Aуn;M b$PTŽ]N<:{9 c`J!~\GG B!L !BH0%~y1LO=#HmAՖ 3\i;5m7 ,xϐьH !N?#Ţ6##2|,ߘC;qMvkA뢨Vf_0cNGK2|hy**-}-ޭq/er\o:tSv|^9 !$VfyndG.X.=bZRvg4rmcҭ+VM:6۽?ẂܾfKad[CϠxm|wp՗9w![̿brzc/֘<3-nLoѵ'xO;gg'_\(@r̛:+*Yygx_ /@}H-n}T{=R }!ے<5W e\ w+bP;`qp%'!nkOk@x6cOYۋ}h^tSBW{hV/?}ݽkMS4|~>P~W]BtF]z)݋vro~#tyG"O{)OyiJ~93la[C3R*MMk=}y.a%Jn y eP }vcVO枉KoX rTj,P^3=_[s v<9eeZrm2}~)w5[-x3YJY'fFOA}#Xl)':+}H,`*Z:[48Aָi]R/KWcP\Lx|A;|cow|cF~TbS"ֵ;n-&1w{R 4ZF x8TT^T£K6n/_XW}fp'{q8KYh+-wL2 o~ǾR_U<,17z&Yyz3~*ԧ L3bҶ;u4פ{i \9&xY6ʧ=זZSdf,^o. SfM&UAҥ15; l 4jFR>3nU<4(V/RvEr?;lp}Q^TSeZB6<Ϊʙ녞PA7݊j4tJ =m?7(LE`.%.5/b߯sM3n|&|ކ{N|R=6 Z٠Zk{\63{9{5 v΍۟ԧL=#Bs3_}GTeE3͒ jMVpG&6+ bO:nj7 {B/T2ت<0Naqq@B֚tgЩ wqIim- V4,ѯL:\y} gca_2F3k ưdb,i2{reں?cͣX6x>YK5YqRĤeXjU'>9C5?/͚{@ܾqڞ֡73[eN=%P^yyyןkײqFFU8p 'O|CZ9"pij!#Ɇ̍Y1q$j:ϻ5U8=<[\1A/cXսz kv)9%j"gDUp}VSۛBzѼ5y=!e~tY3Z#ϒ𕹩xԀNiܔkZ8x.ׯoBrrK1#i6;iq|>㔵=ew^?cO !W<Ȧ͛le^_j%ӦLkv^uO3 g^ez]nvqŅ'⾈n@Mw*->V%2>}ug>%} y38ͦwxf~H'H}VZ׼妶вzů>IoII Ppk^g>w>á\J| A7yŁf_ϦpCxs(*wE(ٌ%CwS =xԷo1B *>zC>nB $B!`J!B)!B B!$B!L !BH0%B!B!SB!B)!B B!$B!`J!B)!B!B!SB!L !BH0%B!$B!`J!B)!B ^zxxt;B!`*=xX<>c] }syrDfijo XxƢqYU4>Xeqfe(By`(inVeLݗKnuM{siĥv<"eİ;i0WtSZ\6B ނWUsXk(4X}uך} ˠM0S$5 Mqi]NpuIn=ٿJfp!- !/ J{Yw ﶓ8/" |:]A^܇mA㸏ix0؀4؁ UQ} J>o̡ٝCOkYOO`׬vNia9 !$jlGOўj)W){KT(`Bi0;dhtP'Ӭ|=+ h6Np.SgnEp@{U%: U'45t +Շ~U5[ ӆw$۪0lD}sxo ]M`~sx,>k F"xrØU ie,/`3PVw≫Vǜ7P]ϘBDN|* hUKMj_o:+}ےP ZgO++V ׃:g-ޗc+byFJe6tMV]'//c%,A'}T}۞"Q^J8o12y eS }vcVO枉KoX ۏ/_u&]=vpV0*d xk_%y/IM#Z}ֶ4K=\n}a%ے;茈ۅH !D >aT8C+>bBS7Ic\MVk fkj`i_8HR*6Lfheh晘Mن**]0I $49v~^#0`97搯lv'7zojlb:y`ҕTu]M)V0 t5NbS"ֵG5κ-&1w{R ǜ I4pFpq}7Ϧ/$=_ʷp{a%17z&Yyz}ji|c_P~dK4 /qf{~ Nx{mivg=|".8FnZ_Pcxߊ+kknW4LvTD 0k5-f9 p?4SŊ&[/[kٚ5&E'U1 vc/+/?ߍ4<͚L[uչ]{סN2V(@)( ʓi{޷yu.  (ZUjk *rzg<o~婴ہfmvg}|SY=gfL˞qq@I,P2f奓]3PʉK{:T^ujU"h4z?A7O>~Zcz\f=K\j3_|_lRM?6Vk@EUcafo#gF7Ў\d}`f_ v)δn++ bO:,KU=[N 4MJk{< Wl;jJ/I(W]K3S4k2t b6zӢP IDAT>Z݂n{}yJ'ⒶxNȈj#9g Gꗑibt gc0~B4)klKGL>5u{ y1XhXW6+%:jMBB߯Zl6̨)PIT,l6tM^1zEaJDu&]UCVsL<^yrfݳY{"Gxxr-<$&.#)= Ͻ3kFL˜x?J4ǟ-g)/+bC̟} A6sWk&4X],9؟wbcXܒ(-=(ku]8 vk2IVRUwdvoXɭFpjn8)>\߃r?WKc\Z%vRBn~ #m'Q};W;//vZ6nٻ*ߙےH7HY,(+ kY{AWX\"A4"EE@Czm3 $!=@~G3y3 :ˣO>;w⽉q<48xFiFc4P(u| M#Q`(l h4j8 zN0NA wGlAADie۴wb*ܟ$A̽(ßq|^xD\WiDd`,?mbBm].r d*ER9(EN-u.pQ޻W]v6=[&`N_MT?˅(=ܜʜCN!%St4K\Hdcj6!yP:iu݂tV֟";Uzpl'UϝQzg~IYzκLoΑ{xdyfCUikiMɩ^0LTB L.,Q,7B!SB!`qpF̤̄B3,yY]W҈䟆)NuG#52pBH0UCpgȯv[64?ȕz5{?T[t?7u`y&jȩma̚:cx@>iuo+4:PL+[ypDr|zLmS˿Ų5|>sUy.w n ၻ nݘ[i_6'0BS#,I.y |_ӓU(ۋ,r<`lɨS*2!]pem} 4ԟiLiS|'@!n c@kn<>mk39fdۓ2<1e<5˛ݠ LE3!_ŗ]==`ηǧeOFiܷXUez78"yx"w斯nEsN>>7z؞o|Uܣɸ+0N~bņD[/ꅹ՚W[u]+fMN埬6l]zj?L/6fE-@)!lhÛ]V1x.m/nӿamfVNϤEX3z# >!#mr^pmܜs5+ 0r4b+h}d#-Wa o ]êe{<|B :apɿ?37ּuJ$_qTPxkiOH:˫EVBgp&+yQ}9{~S)8#]#{٤D-\̪O$DաJ|ktÛY襸k/.^4\`Dm꿊颁dy!1-y榱=ߥF}ľaR06cɍ0eWtKKrN=Y= si&\A;4}e]ߺW@[8/ԴDIM{ڣtqV/eY6a\tMW%G ȯAz[C<]e5h{3'/&%L5Is[Em WW>͸<Â\Q9Ԥm%l?%;]7$372;#LYL}m nDR-¬mCXlpԘ΢utmWG?~rҩ;V}q$/is-v}E t"#BhAߣ=yx腅l/Сw޺1/%S{I>:~SzQ@y= 2aL Gnx0PkP}Q]J˪>:GҶi vmC|H.Lu"5qPpN&A)ĤlLNO7["?ۍtH !D%M*uvOJJ=Ybk׮eСx^^}ر'HGHCn "t$ß ҏWF8]X&[ $/maMrG2 nod!='Xy>msİJq//Lw?H`[QG?!{ʓ߰Q#G, 'TytAlxΊ_f!&ډEz8x omW \B!Tq0e=[3fsΞ*eWu<omWBQ@@!B)!B B!$B!J=pf39}9@ySO>/]UaN`Gx*\L܉ :/0:4Zaw_*\!StΨ6쵧6];m&ؚjihB :!=OhS{$D >Q| +k~\~dJ#t'@V?I]WAְ43$C?kOLFP [} .iVx(p`RBHw GCʇ_Mv^B#lN 38xՏ;k;D,{񘕨v$)rhT&O[nɕ#Y!ğ# kǓWuM۷3e6 ,^{^7𚴽h[}:xƒ3/do@\w@;5td2f%{#0 q6ACz1:/wTv}.lEkԭv؄Qݡ5cƄO;"WZO&@Y/1;~ 16p QYk4B C 􁭝NeBd<#{wQPtz Y@Wm؛鄵MRUŔw:V=xOߛo,޿KB!Έ{O]ׯ18|h \}9Ia -Nь3=V'c;{I`{D;^ְmt5[:}E~r 𚐛S@ZNF۴:bq9,"Ucdާ,YM0qhoR~Zg%j W\_#rVIyHE2'$}C=ǁI~ kI2~O5ѼZYu O÷JUaB׬hAZFGl4NX m ci/ކitMhBHb\>7/_?|?/7YYcGѬwjms|R%;gڝ fڝ,ra12׳`wGxeuv|y?1j>FMwkŽ:RˇO!c-}^M JL[``Wo<5B֯h>RqÏEGkAM^T+(Fl4IǒPm=y=˞}do:Q4rOx]^m-s@ef7`R)o\iXlͫ\)Kgp*; ]N1T7b}w KxJ4~LP󤟂TyAנѰ@/ᩁ*Kf4BFjp3D#[~` ` wau[var6k4}FP~YaTi6aP𙏔3S%ӘH#d< ay%ا/4/r4 !cSW˜g-ۘ=vK(Ol,bZljk86S8FqJ >wpSS|$|u%?ϗ0go zNR=eQ.QNmɂ/ٰY gBױ* v #Lbd,:_< {O X9Y U3IZTͥ`AyAu7؄˔Y!ęQgyȶ7cDL}'B#kųU4۹ߘ95VA岶#b5YL}m nDccsZhzQсާ3!-͂E¯d Ǹ߆OW=\vT'}U , 4muBzְ9crUk9[$?#p`z.EhӠ@ !{Oy3jR%0aS~Ҳk(s\f^^A.5ܦS(JP3+Y7$jwLb嗕298ыX!ը܊Y3KGS[B!DRG@WCR|2TK; dI-AB N]S*J!.E B!B!SB!Lơ|`n[,y?4l,YB5USK:MdڜӲ6];m&44а41nGJX,h\(3en9]ãZ/-lu4YhE_N2J(-HfMWB Ny#^e)ؚIff]-S vyܰ5\`^ӎw![ީ %Џ08{)AS nRRUP95-V.4(4M#h 4c]Y5EVNR%謰zFy8;\ ĖaV @*^w&Yu+]4VUiDc/L>W|8kѾۉflT4ҔnɎ*PjeaX`y S+_Uu/6Uh:3Ƚ ){sMcEǎ, 0cm(Ufam5%Ei c|YAu4&Yh@>6DU] Hy]cMJ)VǔJf#y=.GB3x=c_"Xg118>˨\,GޚϤױ+OZN^rs H) 00OѥemG5CZJ;0O'YfatO= ZXL 8 Gj¼͢PJMϛ Rb)^Jv_| (91up9BgEGnaDD :>o|濶^ cZ>d`|?6|U#|DK1Eo[mѕWlv4nd>&mvլC2MA&`}wCmQ^r`* |t(H7N>-< Eۛ4&ZurɨU^m)Yy*~.ar =G+W50WO|I-GaQ%B+ʿPB!36YGB(!g ]@!B)!B B!$B!`J!BH0%B!B!SB!L !B B!$B!`J!B)!B B!SB!L !BH0%B!B!`J!B)!B B!$B!L !B3 .(5-8_NGG{25'B 3~@xiQG4Gfak0O!t֧x 0ʝ٪{B!S\c[cuيһhևF%$z ú2<)Yw厂iԭv؄…Bqjm>#מâ/xx\U8~#q-b )*2 M¢71/ާB!NGSW; 펑,^Y]JLBfydڝvtd ֦To^}8x;dRB!8ꬿ&8Navىٱ2RB!8)OGhpqp*/B +?u'! {iA\ITLm&-BSκ<xrug5:R,_ _5 Ke6M8 J!~Za˜<.0y^ǬJ"b/1Kh!B)O B! d%!B B! uaWH !g)B!`J!̨|ֻ+M/߼Fp⵫ iOҰ/v4~gsf])x*Au2:; vnǔeAYgm,Hf?ԍk_!S!`=g" R1 <;l]`ބuZ6+REzxW|B.۹{ 35H{8mV@cqٲlV5 [$m";0Pdcxȁ[thMhHlxC:ŔZeo *!Bi)QYgi2c":f!igoS7?LzAv!r){ KL~KRʆj[b_~aüR4I r(wgeY% cT_αI)|T.wy#4@Xl!Յq6KB!ȁ{{! E(ʺtn ;GHky3AV>`GtA d6&C) B05a-i` ÂI(kgfAQ?Y6;#ʉ$㙵qww{pS`Wr/kIkB!wSPy^Xm8Bvh;AYx \܄ Fة{cxv|&۬F.r7lMiCv ygid|0({Z ϩ4]Ӥavdg,Q^>gȗ+Bق_aHjӢ96T3FNn c<4}I0xi6tǾM+[ypDS|pƷL KY\v}3x[;g=o?Er}Y/jћE t6=?<+ }AwگVoH$[vѯ&V!S.mJ1 ڞZy3jFalO`ǿĔ|/ov22l:|E#4T%?N=舕Ws5 vXش6FlZlaMx@)Ȥ當M TXsfEaћT>JH9dzF:HK-hFa=Us,ORбC,jB?{0x$Te:F"Iw,p^yxm,Vܯ̒V$BH0U,f9$רRl.x4MPi(H!`n%1-0ތ^?SLiEB!ğX7Dǧ'r]g\i;obâ҂B?:ҜqjFlN+d74+fmh8ROAɮ{g,noۙs:b;>b kqMy;'gvyx]!`fCs_2)G };؝Yz֫/vH_~F`,"lby^iB!S@oc"jʮbBK!BH0%BqFmkp<ύ\*h[Wƞ3潲v]3q>A_G~K9 dެƐ0kOjkZnSyn"t䯲<<DImuSp=PV H߳'h^}?2 ;y;n痟Wky@Yy#潲v]S&Wꉋ4nyBQ"ל/N܆8Ơ!=dɗ; kǓWuM۷3e6ᱝe Դt *yL^۰tdٹwjcɬeJ` j̫s{3<"L^2+'SOKoaZy8Ypj˳*Yey0],VRU$z}}\c[cuي҇Fevw_И<7s |UVTΈf}xitGKӨYyX7Zށ7-.杂[rLn=&}nſc:t0s>O*|U7ogy۬笚cʥ vgϤWzU]Fm^Y[][lμCq_LϏ/WZ.g,<^}پ*Kxƒ3/dWUy֦W\A_qf_q[cתjuxU0L?i9xM) -¢,v_e}+?'O~^,5׾%:,.9%O]Ffy<|&}n(.-#/ՀѶ*w2 i/Snnyi.~QeDyƵjL͎e;mY*,*/gg,d_ؘ:bq9,"UK"h=#Zr;KYM ^۸Gt(U3/u3GZm(_dɶ T^iq~Dt< KKw~\}r*svO~dgT4q6Z%INwюW5rʳmZ4"uk~A'Aeo ^L|~lu7 D-{rka+Ԁ(GH5y)}=k]s ry8(^Xy8<ߣ-K4<~_;-Y**r2}Qy&펑,^Y]RzN|S1w6nG' ҼWΊ^U:M_!G3)l2Yv'?Ȣ)՚wm"U}8x;dd-]5Ӽf^ԝG2/%'~ʬ69%8\ @lZƪh&(Ep 4 ylA >+~`T^Y6_s%XpWܵm(B jzLZUJl؂11EQ_3t{)Tӻv,pNSXCUH5y`uNGyVʬ_>&t,v M׊~).NtChE䛁{RڞtUYfUmEd{ʟu\[Wɯil?Wf}:gt[~6qU㯲v]['ڴ%b'(G,^cdTV>w[i>W[jWQyֶWw|^ /דWct]E0.|)yrId8rM玕U k !8liqvZ C!6k.eyVVf.yb9pYѨ4BR4<֧;of)j욅FluiteNMUn5=}Q@Q\8u -;T+'T.ʜT!G_/?u'! {i ̻x^e ='KΑ^n6QY:Oڦ.ghF嘖0yA4| ;vELy]~.u>͋5Bni IDATrUzp@F+faTvUծ+jU9(݆֍˚BʆZڪA_.kK΃ծڜ *C ւe{,4>kUZ>i? eL43k3oMØ<y5#<Đ+G2%KGm gVM= a^X\rPNA5!'E&M^˅"U.˳*s8<=3*QTPA@@² g'tw݅}>wj}ߪzcLqKF'&jN z+8a'3D{cū;>d] =FpULZٸ$ӧ3Wtn65BQQcFaΜ9̟?'쪪*Ǝɓ.]ee:Tv-f{'5TEIymw.ې{"Ν P-;s2UGkCkDL֐grwm۞ݵ.)x>+@vv:*F O >7iHs\=F[1h|@q#6ztRm?δ7qߗ%ζH=[k|i]O?q]jC[DpMgYuEy.9iTWv9v%ޓ b=1<>1 `(҇U:W=uӍ,XOlY39swϞ)cڔ7n!benY!Xԯjʊڐl#6<w[^51J}Dc~mԳ5HK{-ش]dT:s[zA ϮwDZKS?äI]V},F |r?My/)'3{"c楋}I.\~r6ZdhXtV#mp/H9, ?` `㪟vv׆xuOeBK啊nhP!$dԁy)A_ 5[31ϼͻ *MUgm zPߖ"AAqAAęڍS&Df Δ tLo.\t<==۲{&-{(WzQLϣgi:7jO&ޓC͈]靛7s q9~LF%h\]hBMTfM=>`L6Х2 !i}Pyi~nSZPl$ ˃-wf2!FPOJ=٣ e` ~b,'57>3sz7\})ٓ=P%+3tͤ[mU,nSn0DC)i Y Ggtl*aGsx]߲nX Jat[vW)h𛐿U;UKfPG浗?ZE[~ŒOq~x Y;z6~Y5m>{ }K[ԙJS [tt" w4_&X]@пUkەIa.y QR^LO_Z.{EYshOzH哆Qfxi7஋qH(`+%;/_i'ڍ˫/>S`/q ,C-v 0crz ߓ>Y5YۢuQ).*P7r?ro;%c޿a^c7rU_M̛pCo0'rdfȬYv؎y<:j}3pNk^b9v`}yMg/mg6[=hgW3z~YO:3ezs9(7>uy}YFOtv0ݢxw3VG [*l))q1VZvxҾ 6Yt)7M_c)a#q:F⏹͒f!z;Doëٟvg/ gLI[ǕKDYG@NuJ7;;hzrxa.e;y} ٲxEwhNe 2偷fp/qCs=ЕwmO[a|EWwe"P&SL5N?<=H*T?):ȥHfxrye<010HWz'_Mgb%Yb3̵},F)N.rPCNߔ&E n^* q'[#p8МYJzu7Xi;i0A.dr5c7\t]yD>㳟w^y72#2ӡwJWfNރkk__|+Q)Ah)}jD#Ѱǡ8Z^\jrᔣ/XʟLӶPm1A{|?\ۇiEr z KĒg<֍n[o3߻k]눡FIBJpw#Y_Q[r9sSYVǥeFe8q^]׵GgZ, |F2 eGЭyb /iمpw >+#toSL> O7=f>xu*Z۷G=aoqOvњMSF Zh #3++>r{MWۋ "2)T!U0r9J2|]ҕtCazrdHFrplKɴ=Yj+d˱0<sb]V/YNlPCpue`ͷqo5?:NM]Ƿ8l A]~us/{|p;\C(\ BR2{q\j7*CqY0'.?C[0zҞ׃8ri_{iezcA)\vms(yw_n+O`eѧ0.}܉sSFwܿ-n s*d3`!6js6Z3S(.ϫdPQ de7Gpb3S!π̪y3[cqB\r ŷJ]3syYIڲX9(cf̔t //L7bNE,ߟ%#ۧ5c(9ta^4rݪsoMu_Iݹי]\gϮ q݁\iiHA8's1&/-HZA:[wL܇ϿAFӽgwFinՃ2dϞ?|'˛o"euɥ{jC&0#zG7h=FpULZOZ UAO.**b1̙33~ bر<d%A4놫A҇u񤦒()ecn4eXtRSy"6ĺ7=Ty3Me;Ҳsmo|Xr OL)dz|T܄Kf-McZKZay|b>38zLVOWρ{|g[,_7>WY(Y?0osm7eVTlM_Â]0_sMef+Ƒᫀ -{#NYN?t-73"篛H ~j^yӝC Ϗ~٢=(e~Gd|d o~gM9]'ɒ^}(҇UYdyYhfrYgjg^vAT Lz}RWy8m6 ҭIMB,R#L7JQO. %K6HScdi_hzHʉlc=xRꔳ)$K Bk:SbɷRmplEe!50yl`6(~ۢW5nִvزijVhzHC_&AhmE팚g] Α#AAęAAgJAA)AAqAAqAAęAAgJAA)AAA)AAqAAęAAgJAA)AAA)AAqAAęAAgJAAgJAA)AAqAAę-1\s(nW!b6=S-˖Ӳe#WXt. #؃g>Zڬ `␭4U0@zi7\Ɗ˷Ǩq{xw]_' դdn}+møᄽfQe=<+nܴHSm".=KQHݖG_]wgYe_mVZgݭkb's8?WEfQA#S9r$Z`&S [m|G o?nzc *k{H.8D^v=_[m>=[]aI5p㥇kosm/L8W:jW_xڃ'0.Bݰ%, 4H Ԭ|ȺPִd=B]ߔkӋ9n-ŷfq65B*`sXg_^M▙m$`f?KYFVAqӄpTjal%ͲL es3/lWnvџ_+hyYik೫Q6^ENuJx: fzrxa2qrn{}1ZQ,g1#y#\ e\=b}<ǍOlr^_V q8& FaEI&g R, ׾I ]{`;?.5+b~Iɘ.jA9n>`>`NjOӷjCw7p)]_1{ڻvJOaε}*t2}wg14h4S y^xm&W#'-v'۾2p]´Z-o-kN牿̽p;%q Jrk(Ln>;OwEܴxDm 3x~׫kU~'2Q7g2YQWGl" #o![W(!BeE %5l߆XYm|Sn{ݹw`;Gְd˴R,8ǵ3]03TSfRA62q=+u ղi[5 ŭ-<dg%dN(_.ozwUJ2ӲSK?UbLYưiYFl[+ؼy#~^pm_lvZQFSkO͟yr]/SL96.KE!nc_0߰2@qI _rͿ?WcLx6a)@[~׮f;E W2crfۆX~f>O^KNԄ3rW(i*D K2\5"Sgh;skne֓Y( G9Nu~)އTt }z*|e|GnϔyU+(o eRhҫ,'n /;2oMA暑9 N:_y Х1>jRQ?`A]r IDATu!l]n2 #̽-%-KfYcҒm,z;/=|%! О,?dzdlpG!KrV]hMם|HAk˹;bWvl؅Sauf5_Y#9{ 8}fRlwS`2 B{LS!π̪y3[o܉sSFwi+NUdwfރ/A5ka<~o)2{68u w^| oNXdKڻ k0q9~"2nT0h ǸezҺR9SN 4fZ<6>G^<7IA{os͢J`9n:4=r.}(~D(M$cyx|zLJt J8hCɻe/64_n+O`eѧ0a=*V lW\f]9Gtg&c?<;? RLJ֮䒗77;n#g&,**T`+**b1̙33~ bرM }*S7ȂE xϜ5s:N|m|ڵ))mk_o|/ %IJdmp;.%]y'цh*crC//{)$K v]l!,cA '  3%  Δ  8S  L  L  3%  Δ  8S  8S  L  3%  Δ  8S  8S  L  3%  Δ   Δ  8S  L  3%  3 &<x襢2ϴуS z%M50yKY&Cڱp0Xl[VAɃ-aRPcye?:agLS&{z٫鯹6?4y_t#yy(.4-,L43:`о;; :jAi0Pk f<1^/G`9lsB=ILk*q)՚mSu4<Բ8AJTCo(vδRb/+ehe9Z߸RTNOQS]l&5"G-JXUð52S6/:._&@aP whe=N)4SfRdhL fNvyv8)ZđKXTC } |;Ĥ`+7+qq)EO CUc2{ OkbZiZc3-/OnA7`n$-M Bg #ySuVheEȱNt2[#Ư[ȝtQL뒀\œvק]b%kWk6w2tLzDʜ!ќQd8lu 6%B\l28b0!$B;+ p)(FkД7}A4N@{ݵ 7AǍ-'!n![q oVa8"hk $;RA(Kz՘nޏi_,o,-]+#ܱ 7"XPQ{*ExUhehLБ^q$t'C<5Iܛ%3Ě;f)x4Eq (T$c PPZ\ʴrG>7\MHkrU2ckCZP+Ϋ'^YP|T2K<2Ք9N֬ך iAV|T}auȬ7]jCxNFiP 6 *]Ŗ#_A͵dtl.v4 ePtM` 6Y:Yyx o-RMZUKVda18ۄfi}Fabp2RxUC"6̳++gʃAM0 ǭĂcM? z|p{dwC+<^D3KgLEemfֲO2( 6x4U)TP(BPny 8qy5p^GOmOϼ^S'M"'$ ^/4 n5m4yn<Rz,7G+f{=n$2I"6QQsmhUǷd_rDs&-nXv z9R5bttR&qXGCsl0遣c2vqRnWktS4Gԟ"Fh(zFɳFsffK2sRfe,imY6\@L%VZ,Y'޾RF'qԑniwYhu](;' tp^"6ё#hqg%#yJQ!m\Xںǭf c01k^Kqeaȕ' 3VxQ!o5-i;<}R6Qae$+j},EsqdRс*_Kyڻ BuC{yT>m>,,KD 1ﱎAKtϡ9 eOϮ>ZXE+BOz/Y[2.:fg˩n:ZDېl]ڢ fNo9%&;S n 'p#Y)ﮫ]p-`x*_U3p&]6?f-yDEq -+C>dՋn{ϛ-m(&PώL%6F,=zM^dN=1<>w߮œiR5N_Op"L )bR..4oK2kF@:lS'gX? }/+KLe&\xTdd|uwa{d89c62؃i|Ӆ3ɮP3P'f9hrb65IZk| 58k mCui6|y,eBUe0N;и30f&˂Jy8~ZUvʽ%k,#6|ov(-jMyٍƭ r ShAyk?[ǔ{lumOO734( 8kX A IDATŘ&~X #mYO3W+{N*_DR뾌q=Tഄ5J =j+Ye(aay@;}0]>7}JQÁL{w'@⏙mޅVcdK NAMzQnxP I<39wLTTT.Zތ}H=zڤK2 lzq#qAj}|6^o<8%ly@AT,g[)' Floh ͥ`(6$}WC{/C3BIҝI'gkƑ9 xAږ Ggx Gu7~N5_Dc{D(Y'w`5̎tĘ50H 17UQ+|x||kY+pGҲڽ7YތpT`"{2 qB0WS KMٽ=i9x: 8Ձ]KgM 8HZOɊyImu%+OBtrR`)# X2b_b\%8> ȑ6R@[w%YquH KJ~wvmXD`kk %Tu9)CU05j4>G=-Au۔^z4v]?}˒hs1"`ovOɻ}jX`'!FFsXhU#;w|w)3B=Vnd.uf)$Y͎?+FD2| O`R6BhNX^@`*2, =O%ڝhʹ^d@O&khFFʩ9jǍ#K&k{xtO%.|E}7:vK3(Z:v!{6F(p$Yѡ:x鶙钽y#&ڧϢnR.7g,Vʑ>OT!hsP H!\zDD|pfRGqunG{#>HvD1@L5*i9'~JHTPDObte\!t56^wFr.š8{XS׮NX3;O Ew;w%2;j@8ǀQ婉@D` bU- g3>WVW1aɒEƎ`Ɯ|3 J@,ı."kFHڦ˭#P6J_B9)sr&ۑtd! f] W,Vd7cW7V;|ֹgc`8A 2Ju7xN޾&g/S: ><-k"Q鶙x~2:48شcCaĆ^k<2a^ɸY?ɥRuÁ}|^ bANԟU=4"#nDN2ܓg!ne$6]5'q(~wăFޮ/V?&$"ЀaLKى}@nMs V;)>k2 Ўz7AG!ѱ4">hhq1şz🬿tL&g:hAAspX, 8A돞|g,zoD#$H!/d 3:QvJTH6f60Kd>kPU/]FblݗԚdmL&]ӭXTT@iiA l*8!g,%K۱@- `;ހ"9[}Tn/kB}84w9 svScf <_w>c Y-?9]0 -WY> N}RD>n,% *R_ A,*QMVF&?"KH(g"ҕ3L4Q6Kx L@ ʸcgiv^z*= Qb&'U{T,AsSv| r b_s&kL_m&3D?}*ݏz&hlo׳ 7;NKŇ[N,GL&vωHDue|]Um.$8mu"5z9Bqc3;yU/]s#gKhֱ5'];7P,>_H?;5̧!Wj񋔟QƧ ;i"y[Ʈ#"eDm"ƪgv`5o-gƛ#}ouS+`[?<~ZD^A&Is2dn1Z _e tCC74*-1ȮetnA:c ϐihȦ:eƔ5Wg{ 1'Lxi c{ L_r&! 61Jf dIFHśͽi.];dN .}00dewӛ2zӇM7ɗƗƎSMc^â7qG&,K8\MGe.`B4mBT}@6dCҬ.{p'c#QzT~²Tֱ}9P446 ̜1e˖rJN;4fΘho"50yda8|*ߙ˳ZF Ӌ f4!;ڱ{ԢM@ 7ͥcYyh tbǾ-5Fal+N/FalkM. 4ю=Y-@X]YOt902oi9ȟsXJvNb⺼ac8iߊ?cnLhyg7!o*W}HcB#7I|䡼]tۭYs>gߗ.z09S#L81*StG.^.P-0m*y)}Q(`7J:(v0evwBqXct:.fH; 8teQA߅5yM>z9GO)C) B5R05S$'QJP( ֬[P( Bn05y^rBP(<sZW|t&k%[HqSCjtժU.f4loiه!J>D7-gCe͚jBP 9}<~Itmy0کR&}+AS`};6]Y%M:! S)0F6Z~6)8Jn\#Ň4}ΰTz,X5E@F4M]g (\^7h|t1ePrdL壵,~ׁgr`j{9»YA{l#a!ylsɢP(Fg6!Iw&OA '{8„_9_;K@~bdj }>?r0t8Tz.y>ϑ㡷К7|ak1>pxyӁ!:0ȾCAɽ?ġ ZzQ1x ;sU8Gg {`/Audιҝi\g!{}2B-d;@;F"mjIL9 gܗU P({]~кglj /`G2:=C@u莦\vG)*ɜ\hSH`j6{6r#Ěҏ-۳vpo)"ocԂ ۛ~¸_wzw z؈v\%1@ 1w'GGLl){ljcXJP(a5+$;OYYp zBZoF,gޗ,'r(E 2UmOϥpٳ",F:Dwt| dR)B5[;ֳ]c_!ህ#*jҪ;T(ayLSq-x խϚ  9qCw.C)AƂ>x#.7KkB߹gQ>z `m~߮+K߂Aޕ?$vӗt=i󷍢'sj8NL-m(`>gݼHOuhNKȨAB;R]_>h\v ysf1K"#Z(b3?P`2pC^yesO "Gm4ĕyhE /ȣO!YUK5 ꏆ#\31XȞ F1~sd_qy'3S ;P r1 ުVYLf^+殷jYxb%ȉ&9 "XBP, p1 XH)-CӠΛ/iQvZ^߅V6YňHҶ3:Nڄ/|hxEch g|HW_Q8g ۏކeK4V[+6` l-~pRq1.c/d4~ޑ]]>&ܴΚUn(Jz3Ј- -LEUC': ͝mvTOK$boSȫhe=k YWIaQ!i** 춗 pgTQ~Du*B!ƫص ~ͯFHE]f>wX\1w kF[,˘;ez{l[* E/չ>U^Ĩ"1$l;H=Sn^ߵ;-҃\Bӫ J/=;ZϮ>~d? K}j Cz"SX+]~%a?+]iygj-8,;%^$frOI(KbTL$sηd &e[!׈UQ[ B9gëgqŷzWVw'_T<I'l";]xAOiF/)۷L0[6m5줧a'O: ӿk?e[FsȪrJuq/ 1Wr0m =* E^ bA9vc ri`8ԀpߗM[Nn"r KYT 46;+]ЫdI_Ž`Ɯ)%0Ypei%c u _."kFk0=S Zkzg?ԁ`C!\`FA"2wʬ c"p9u Oc\Ъh_Ԋ^q%cnzE6B&do Bw# o%=C"`''|mݛFЌ(^B* E9ԃla>{p-3҃6lm` t{%EZ6X @h%|w~cLœ.P,%ۛ Q}MHKvG"ӑEΠDV^qγbn>1w zY:kDCB Ȯ"sr}?Hӭ7Qs ޺؈>O=i9)nON9WƌVzq=2; /8Qb^@St?S|w#⭤fƹMCh:Q* Ed^u1BBO.XӬGp\݁dA:bw{1S}B"%K۱@-ėGz;Z_vk{Śn3]NBœ [-q7X,vCvY #qygQyzn Cҽohp$Գ`G"J}_uH_bMzjQc HDvGv]^MMKh%^ٌ:Q{XdY:/~ɘOX+Op @fL)/gi[Σ(D˿= 0UA4pTi^ٲ_q0Zmf!6`Lr!*sn._/R~Fޒr?;5̧r&1=M´Nڿ"e?ök !)|9=G',V7uEc3/0Ex]kL9Qcqe9S}Oj2dn1Z _eO(ZF8ƿ ljz3 6440sL-[ʕ+={6C:y@ /<`A W?iliBJ>0$eV1wG܌V͝pUo<棇=d BqFcxY,؉M~?cnLhyg7C#7 bA_+d]ooF$MvA.gߗ.LmH|koZy;ԷLZt ir*vְjc3+' غByNB؇HpW<ĩ-b=? if=-PXv,ۃN"2I,92;o_IDAT4OcгNX eVW×/ v nI+W2uC}z+OP(--C¡te9t;NJPSgVW( BH'V+ B8k'nUYz>eWBP(`jͺ5* BP(S_}OP( BTYAP( b9c2BP( Ez膎!P\TP( B,` ygp`LbUVR( BKEt`8 ĤK~4cfm/=aU( B?..'. ˅))IENDB`cutter-testing-framework-1.1.7/doc/reference/html/index-1-1-5.html0000644000175000017500000001702111525707421022761 0ustar koukou Index of new symbols in 1.1.5

Index of new symbols in 1.1.5

C

cut_assert_exist_path, cut_assert_exist_path ()
cut_assert_not_exist_path, cut_assert_not_exist_path ()
cut_build_path_array, cut_build_path_array ()
cut_get_source_directory, cut_get_source_directory ()

G

GCutProcess::error, The "error" signal
GCutProcess::error-received, The "error-received" signal
GCutProcess::output-received, The "output-received" signal
GCutProcess::reaped, The "reaped" signal
GCutProcessError, enum GCutProcessError
gcut_assert_equal_string, gcut_assert_equal_string ()
gcut_data_has_field, gcut_data_has_field ()
gcut_list_int_new, gcut_list_int_new ()
gcut_list_uint_new, gcut_list_uint_new ()
gcut_process_flush, gcut_process_flush ()
gcut_process_get_env, gcut_process_get_env ()
gcut_process_get_error_channel, gcut_process_get_error_channel ()
gcut_process_get_error_stream, gcut_process_get_error_stream ()
gcut_process_get_error_string, gcut_process_get_error_string ()
gcut_process_get_flags, gcut_process_get_flags ()
gcut_process_get_forced_termination_wait_time, gcut_process_get_forced_termination_wait_time ()
gcut_process_get_input_channel, gcut_process_get_input_channel ()
gcut_process_get_output_channel, gcut_process_get_output_channel ()
gcut_process_get_output_stream, gcut_process_get_output_stream ()
gcut_process_get_output_string, gcut_process_get_output_string ()
gcut_process_get_pid, gcut_process_get_pid ()
gcut_process_kill, gcut_process_kill ()
gcut_process_new, gcut_process_new ()
gcut_process_new_argv, gcut_process_new_argv ()
gcut_process_new_array, gcut_process_new_array ()
gcut_process_new_command_line, gcut_process_new_command_line ()
gcut_process_new_strings, gcut_process_new_strings ()
gcut_process_new_va_list, gcut_process_new_va_list ()
gcut_process_run, gcut_process_run ()
gcut_process_set_env, gcut_process_set_env ()
gcut_process_set_flags, gcut_process_set_flags ()
gcut_process_set_forced_termination_wait_time, gcut_process_set_forced_termination_wait_time ()
gcut_process_wait, gcut_process_wait ()
gcut_process_write, gcut_process_write ()
gcut_string_equal, gcut_string_equal ()
gcut_string_inspect, gcut_string_inspect ()
gcut_take_new_list_int, gcut_take_new_list_int ()
gcut_take_new_list_uint, gcut_take_new_list_uint ()
././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootcutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-Utilities-for-GEnum-and-GFlags.htmlcutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-Utilities-for-GEnum-and-GFlags.ht0000644000175000017500000003742711525707421031621 0ustar koukou Assertion Utilities for GEnum and GFlags

Assertion Utilities for GEnum and GFlags

Assertion Utilities for GEnum and GFlags — Utilities to write assertions related to GEnum or GFlags more easily.

Synopsis

#define             GCUT_ENUM_ERROR
GQuark              gcut_enum_error_quark               (void);
enum                GCutEnumError;
gchar *             gcut_enum_inspect                   (GType enum_type,
                                                         gint enum_value);
gint                gcut_enum_parse                     (GType enum_type,
                                                         const gchar *enum_value,
                                                         GError **error);
gchar *             gcut_flags_inspect                  (GType flags_type,
                                                         guint flags_value);
guint               gcut_flags_parse                    (GType flags_type,
                                                         const gchar *flags_value,
                                                         GError **error);
guint               gcut_flags_get_all                  (GType flags_type,
                                                         GError **error);

Description

To write assertions, you need to check equality and show expected and actual values.

The utilities help you to write assertions that are related to GEnum or GFlags.

Details

GCUT_ENUM_ERROR

#define GCUT_ENUM_ERROR (gcut_enum_error_quark())

Error domain for enum related operations. Errors in this domain will be from the GCutEnumError enumeration.

Since 1.0.6


gcut_enum_error_quark ()

GQuark              gcut_enum_error_quark               (void);

Returns :


enum GCutEnumError

typedef enum
{
    GCUT_ENUM_ERROR_INVALID_TYPE,
    GCUT_ENUM_ERROR_INVALID_VALUE
} GCutEnumError;

Error codes returned by enum related operation.

GCUT_ENUM_ERROR_INVALID_TYPE

Invalid type.

GCUT_ENUM_ERROR_INVALID_VALUE

Invalid value.

Since 1.0.6


gcut_enum_inspect ()

gchar *             gcut_enum_inspect                   (GType enum_type,
                                                         gint enum_value);

Inspects enum_type value, enum_value. The returned string should be freed when no longer needed.

enum_type :

a GEnum type.

enum_value :

a GEnum value to be inspected.

Returns :

inspected enum_value as a string.

Since 1.0.5


gcut_enum_parse ()

gint                gcut_enum_parse                     (GType enum_type,
                                                         const gchar *enum_value,
                                                         GError **error);

Parses enum_value and returns a enum value of enum_type. enum_value should be enum name or nick name. If enum_value isn't match then error is set to a GCutEnumError.

enum_type :

a GEnum type.

enum_value :

a string to be parsed.

error :

return location for an error, or NULL

Returns :

enum value of enum_type corresponded to enum_value.

Since 1.0.6


gcut_flags_inspect ()

gchar *             gcut_flags_inspect                  (GType flags_type,
                                                         guint flags_value);

Inspects flags_type value, flags_value. The returned string should be freed when no longer needed.

flags_type :

a GFlags type.

flags_value :

a GFlags value to be inspected.

Returns :

inspected flags_value as a string.

Since 1.0.5


gcut_flags_parse ()

guint               gcut_flags_parse                    (GType flags_type,
                                                         const gchar *flags_value,
                                                         GError **error);

Parses flags_value and returns a flags value of flags_type. flags_value should be formated as "nick-or-name1|nick-or-name2|...|nick-or-nameN". If flags_value includes unknown flag then error is set to a GCutEnumError.

flags_type :

a GFlags type.

flags_value :

a string to be parsed.

error :

return location for an error, or NULL

Returns :

flags value of flags_type corresponded to flags_value.

Since 1.0.6


gcut_flags_get_all ()

guint               gcut_flags_get_all                  (GType flags_type,
                                                         GError **error);

Gets a flags value that includes all available flag values.

flags_type :

a GFlags type.

error :

return location for an error, or NULL

Returns :

a flags value that includes all available flag values.

Since 1.0.6

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-Utilities-for-GError.html0000644000175000017500000001414311525707421030424 0ustar koukou Assertion Utilities for GError

Assertion Utilities for GError

Assertion Utilities for GError — Utilities to write assertions related to GError more easily.

Synopsis

gboolean            gcut_error_equal                    (const GError *error1,
                                                         const GError *error2);
gchar *             gcut_error_inspect                  (const GError *error);

Description

To write assertions, you need to check equality and show expected and actual values.

The utilities help you to write assertions that are related to GError.

Details

gcut_error_equal ()

gboolean            gcut_error_equal                    (const GError *error1,
                                                         const GError *error2);

Compares two GError, error1 and error2.

error1 :

a GError to be compared.

error2 :

a GError to be compared.

Returns :

TRUE if both of error1 and error2 have the same domain, code and message, FALSE otherwise.

Since 1.0.5


gcut_error_inspect ()

gchar *             gcut_error_inspect                  (const GError *error);

Inspects error. The returned string should be freed when no longer needed.

error :

a GError value.

Returns :

inspected error as a string.

Since 1.0.5

cutter-testing-framework-1.1.7/doc/reference/html/install-to-debian.html0000644000175000017500000000736311525707421024532 0ustar koukou Install to Debian GNU/Linux

Install to Debian GNU/Linux

Install to Debian GNU/Linux — How to install Cutter to Debian GNU/Linux

Introduction

This document explains how to install Cutter to Debian GNU/Linux.

Install

We can use aptitude because Cutter provides Debian packages.

There are packages for Debian GNU/Linux squeeze/sid i386/amd64. If you need a package for another environment, you can request on mailing list .

Here are apt lines for for squeeze. We put them into /etc/apt/sources.list.d/cutter.list.

/etc/apt/sources.list.d/cutter.list:

deb http://cutter.sourceforge.net/debian/ squeeze main
deb-src http://cutter.sourceforge.net/debian/ squeeze main

Here are apt lines for for sid. We put them into /etc/apt/sources.list.d/cutter.list.

/etc/apt/sources.list.d/cutter.list:

deb http://cutter.sourceforge.net/debian/ unstable main
deb-src http://cutter.sourceforge.net/debian/ unstable main

Cutter packages are signed by key of kou@cozmixng.org/kou@clear-code.com. If we trust the key, we can register the key:

% gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31
% gpg --export 1C837F31 | sudo apt-key add -

If we register the key, we can install Cutter by aptitude:

% sudo aptitude update
% sudo aptitude -V -D install cutter-testing-framework

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/index-deprecated.html0000644000175000017500000002232511525707421024424 0ustar koukou Index of deprecated symbols

Index of deprecated symbols

C

CPPCUT_BEGIN_TEST_DECLS, CPPCUT_BEGIN_TEST_DECLS
CPPCUT_END_TEST_DECLS, CPPCUT_END_TEST_DECLS
cut_add_data_backward_compatibility, cut_add_data_backward_compatibility()
cut_append_diff, cut_append_diff ()
cut_assert_equal_g_list_int, cut_assert_equal_g_list_int ()
cut_assert_equal_g_list_string, cut_assert_equal_g_list_string ()
cut_assert_equal_g_type, cut_assert_equal_g_type ()
cut_assert_equal_g_value, cut_assert_equal_g_value ()
cut_assert_equal_string_or_null, cut_assert_equal_string_or_null ()
cut_assert_file_exist, cut_assert_file_exist ()
cut_assert_g_error, cut_assert_g_error ()
cut_assert_path_exist, cut_assert_path_exist ()
cut_assert_path_not_exist, cut_assert_path_not_exist ()
cut_assert_remove_path, cut_assert_remove_path ()
cut_build_fixture_data_path, cut_build_fixture_data_path ()
cut_keep_message, cut_keep_message ()
cut_pending, cut_pending ()
cut_set_message, cut_set_message ()
cut_set_message_va_list, cut_set_message_va_list ()
cut_test_fail_va_list, cut_test_fail_va_list ()

G

GCutEgg, GCutEgg
GCutEggClass, GCutEggClass
GCutEggError, enum GCutEggError
gcut_egg_close, gcut_egg_close ()
GCUT_EGG_ERROR, GCUT_EGG_ERROR
gcut_egg_error_quark, gcut_egg_error_quark ()
gcut_egg_get_env, gcut_egg_get_env ()
gcut_egg_get_error, gcut_egg_get_error ()
gcut_egg_get_flags, gcut_egg_get_flags ()
gcut_egg_get_forced_termination_wait_time, gcut_egg_get_forced_termination_wait_time ()
gcut_egg_get_input, gcut_egg_get_input ()
gcut_egg_get_output, gcut_egg_get_output ()
gcut_egg_get_pid, gcut_egg_get_pid ()
gcut_egg_hatch, gcut_egg_hatch ()
gcut_egg_kill, gcut_egg_kill ()
gcut_egg_new, gcut_egg_new ()
gcut_egg_new_argv, gcut_egg_new_argv ()
gcut_egg_new_array, gcut_egg_new_array ()
gcut_egg_new_strings, gcut_egg_new_strings ()
gcut_egg_new_va_list, gcut_egg_new_va_list ()
gcut_egg_set_env, gcut_egg_set_env ()
gcut_egg_set_flags, gcut_egg_set_flags ()
gcut_egg_set_forced_termination_wait_time, gcut_egg_set_forced_termination_wait_time ()
gcut_egg_wait, gcut_egg_wait ()
gcut_egg_write, gcut_egg_write ()
gcut_list_enum_inspect, gcut_list_enum_inspect()
gcut_list_flags_inspect, gcut_list_flags_inspect()
gcut_list_int_equal, gcut_list_int_equal()
gcut_list_int_inspect, gcut_list_int_inspect()
gcut_list_object_inspect, gcut_list_object_inspect()
gcut_list_string_equal, gcut_list_string_equal()
gcut_list_string_inspect, gcut_list_string_inspect()
gcut_list_uint_equal, gcut_list_uint_equal()
gcut_list_uint_inspect, gcut_list_uint_inspect()
gcut_take_new_list_string_backward_compatibility, gcut_take_new_list_string_backward_compatibility()

S

setup, setup ()

T

teardown, teardown ()
cutter-testing-framework-1.1.7/doc/reference/html/home.png0000644000175000017500000000121611525702754021767 0ustar koukouPNG  IHDRw=bKGD pHYs  ~tIME1KvIDATxՕkq?rCp ~CnpCAAJ .B-\'G]:ܠC -(8 Ԁ!fDғklbRoyxwpðIJ<of_-@RHf֟t^ښ$Q|pgv;X^^&s(bwwZF9&3඙ ^IRZUE.0Z]]U PYM8HGIekqqҀ! $۬3n e{-/seeeÌXOͷ$8==USQRR'9-s+B^ Cەs+%<7W :2IENDB`cutter-testing-framework-1.1.7/doc/reference/html/features.html0000644000175000017500000003627211525707421023043 0ustar koukou Features

Features

Features — What can be done with Cutter

Introduction

Cutter has basic features of a unit testing framework:

  • Fixture

  • No test registration code

  • Result output with useful format for debugging

  • Many assertions

Cutter also has many useful advanced features:

  • Cross platform

  • Data-Driven Testing support

  • Coverage support

  • Backtrace on crash

  • Serialize/deserialize test result

  • Multi-process/multi-thread support

  • Image diff

  • ...

Basic

This section explains how Cutter provides features that are considered about basic unit testing framework features.

Fixture

Fixture in a unit testing framework is a mechanism that set up test data before each test. It is usually implemented by executing setup/teardown process. See also Test fixture (Wikipedia) .

In Cutter, if cut_setup()/cut_teardown() functions are defined in a test program like the following, their functions are treated as setup/teardown processes:

void
cut_setup (void)
{
   /* set up test data */
}

void
cut_teardown (void)
{
   /* tear down test data */
}

Cutter also supports cut_startup()/cut_shutdown() functions that are called on each test case starting/completing:

void
cut_startup (void)
{
   /* set up the test case */
}

void
cut_shutdown (void)
{
   /* tear down the test case*/
}

Their functions are called the following order:

  • cut_startup()

    • cut_setup()

      • run test1

    • cut_teardown()

    • cut_setup()

      • run test2

    • cut_teardown()

    • ...

  • cut_shutdown()

Cutter also supports functions that are called on all test starting/completing as experimental features. Their functions are called warmup/cooldown. Here is the call order:

  • run warmup

    • cut_startup() of test case1

      • cut_setup() of test case1

        • run test1-1

      • cut_teardown() of test case1

      • cut_setup() of test case1

        • run test1-2

      • cut_teardown() of test case1

      • ...

    • cut_shutdown() of test case1

    • cut_startup() of test case2

      • cut_setup() of test case2

        • run test2-1

      • cut_teardown() of test case2

      • cut_setup() of test case2

        • run test2-2

      • cut_teardown() of test case2

      • ...

    • cut_shutdown() of test case1

    • ...

  • run cooldown

The last two functions are useful for testing a library that has initialize/finalize functions of itself. But they are experimental features. So explanation of their usage is omitted. If you want to use them, please contact us.


No test registration code

Most of unit testing frameworks for dynamic languages doesn't require that users register their tests. Tests are found by frameworks and ran. But most of unit testing frameworks for C require that users register their tests.

Cutter finds test functions automatically like frameworks for dynamic languages to write tests easily. Public functions that their name starts with "test_" are recognized as test functions. Here is a sample test function definition:

void test_my_function (void);

void
test_my_function (void)
{
    /* a test function */
}

Result output with useful format for debugging

Cutter outputs a test result to confirm and fix a problem quickly. In particular Cutter outputs

  • no problem parts simply and

  • problem parts verbosely.

Cutter outputs no problem parts simply (they may not be displayed) to avoid important parts are buried.

Cutter outputs information of problem parts as many as possible to provide users information to judge what is a problem.

For example, we assume that an expected string and an actual string are different on string equality check test. Cutter arranges and displays the expected string and the actual string to confirm difference between them easily:

expected: <abc def ghi jkl>
 but was: <abc DEF ghi jkl>

If their aren't arranged or displayed in the same line, it's difficult to find difference between them:

expected: <abc def ghi jkl>
but was: <abc DEF ghi jkl>

<abc def ghi jkl> is expected but was <abc DEF ghi jkl>

Cutter also outputs diff between the expected string and the actual string to show where is different explicitly:

expected: <abc def ghi jkl>
 but was: <abc DEF ghi jkl>

diff:
- abc def ghi jkl
?     ^^^
+ abc DEF ghi jkl
?     ^^^

Cutter strongly helps us to confirm a problem on test failure as mentioned above.


Many assertions

xUnit based unit testing frameworks provides assertions to assert test target works as we had expected. For example, many frameworks provides assertions like the followings:

  • assert: asserts that target is true value

  • assert_equal: asserts that an actual value equals an expected value

In Cutter, the following assertions are corresponding the above assertions:

  • cut_assert()

  • cut_assert_true(): asserts same as cut_assert() but it clearly specifies "true value" (Cutter recommends to use it because it's self-describing rather than cut_assert())

  • cut_assert_equal_int()

  • cut_assert_equal_uint()

  • cut_assert_equal_string()

  • ...

Cutter also provides many built-in assertions than common assertions as mentioned above to write tests easily. For example, Cutter provides built-in assertions like the followings:

  • cut_assert_errno(): asserts that errno is 0

  • cut_assert_match(): asserts that an expected string matches an actual string

  • cut_assert_path_exist(): asserts that specified path exists

  • ...

See Assertions and Assertions with GLib support in the reference manual for assertion list.

Advanced

This section explains how Cutter provides features that are provided by a few unit testing frameworks or not provided any unit testing frameworks.

Cross platform

For now, Cutter works on the following platforms:

  • GNU/Linux

  • FreeBSD

  • Mac OS X

  • Windows (MinGW)


Data-Driven Testing support

There is a testing method called Data-Driven Testing .

Cutter supports Data-Driven Testing. See cut_add_data() for writing a data-driven test.

Data-driven tests are executed by the following order:

  • call data setup function

  • cut_setup()

    • run test with test data1

  • cut_teardown()

  • cut_setup()

    • run test with test data2

  • cut_teardown()

  • ...


Coverage support

Code coverage is a measure for how code is tested cyclopaedically.

Cutter provides a M4 macro to help us measuring code coverage. If you use GNU Autoconf/GNU Automake, you can add code coverage support into your build system easily.

See about AC_CHECK_COVERAGE in README and TUTORIAL .


Backtrace on crash

It's natural that a program written in C and/or C++crashes. Cutter tries to retrieve a backtrace on SEGV signal is raised. If a backtrace is retrieved, Cutter outputs it and exit. Of course Cutter cannot always retrieve a backtrace because the test process is broken.

To check details of a problem, we need to use a debugger like GDB. But we can use a backtrace as the first step.


Serialize/deserialize test result

There are some methods to confirm how high software's quality:

  • measuring transition between test status and number of found bugs.

  • measuring transition between test status and number of reported bugs.

  • measuring transition between test status and source code size.

For example, if number of tests are grown but number of found bugs aren't grown, we may be doing inefficient test or software quality might be high without test. If number of tests are grown but number of reported bugs are grown, we may be testing irrelevance points. If source code size is grown but number of tests aren't grown, we may lazy.

We can analyze software development status with test result logs in chronological order not just the current test result. We may use analyzed result to improve software quality.

Cutter can save a test result to a file as XML. Cutter can also read saved XML and restore a test result.

Cutter will provide a feature that charts test result logs.

cutter-testing-framework-1.1.7/doc/reference/html/index-1-1-1.html0000644000175000017500000000553011525707421022757 0ustar koukou Index of new symbols in 1.1.1

Index of new symbols in 1.1.1

C

cut_assert_equal_sockaddr, cut_assert_equal_sockaddr()
cut_equal_sockaddr, cut_equal_sockaddr()
cut_inspect_sockaddr, cut_inspect_sockaddr()
cut_make_directory, cut_make_directory ()

G

gcut_data_get_object, gcut_data_get_object()
gcut_list_new, gcut_list_new ()
gcut_list_object_free, gcut_list_object_free ()
gcut_take_new_list_object, gcut_take_new_list_object()
cutter-testing-framework-1.1.7/doc/reference/html/index-0-6.html0000644000175000017500000000311711525707421022624 0ustar koukou Index of new symbols in 0.6

Index of new symbols in 0.6

cutter-testing-framework-1.1.7/doc/reference/html/install-to-fedora.html0000644000175000017500000000532211525707421024541 0ustar koukou Install to Fedora

Install to Fedora

Install to Fedora — How to install Cutter to Fedora

Introduction

This document explains how to install Cutter to Fedora.

Install

We can use yum because Cutter provides a Yum repository.

First, we need to register Cutter Yum repository:

% sudo rpm -Uvh http://cutter.sourceforge.net/fedora/cutter-repository-1.0.0-1.noarch.rpm

Now, we can install Cutter by yum:

% sudo yum install -y cutter

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/tutorial.html0000644000175000017500000016343111525707421023066 0ustar koukou Tutorial

Tutorial

Tutorial — How to use Cutter

Introduction

We write a program (library) that implements a stack in C. We write a program with writing tests. To write tests, we use Cutter that is a unit testing framework for C.

We use GNU build system (GNU Autoconf/GNU Automake/GNU Libtool) for build system. GNU build system lessens disparities on build environment. For this reason, we can build our program and tests on several environment easily.

It's better that a program works on several environment without many costs. If tests of the program works on the environment too, we can verify the program works well on the environment easily. It's important that both a program and tests are works well on several environment easily.

Cutter requires only GLib. GLib is a very portable library that works on not only UNIX-like system but also Windows and Mac OS X. Cutter provides many useful test support features with portability due to GLib. Cutter is a testing framework and respects to xUnit style.

We will learn how to use Cutter with writing a stack implementation. We assume that Cutter is already installed into your system.

There are source codes of this program in sample/stack/.

Directory hierarchy

First, we need to setup a directory for our stack program. We use 'stack' as the directory name.

% mkdir -p /tmp/stack
% cd /tmp/stack

Next, we make some directories: config/ that is for build auxiliary files, src/ that is for our source files and test/ that is for tests.

[stack]% mkdir config src test

After the above, we get the following directory hierarchy:

stack/ -+- config/ for build auxiliary files
        |
        +- src/ for source files
        |
        +- test/ for tests

Use GNU build system

In GNU build system start-up, some commands are ran and they generates some files automatically. They usually are run from an authgen.sh shell script. We follow the convention.

autogen.sh:

#!/bin/sh

run()
{
    $@
    if test $? -ne 0; then
        echo "Failed $@"
        exit 1
    fi
}

run aclocal ${ACLOCAL_ARGS}
run libtoolize --copy --force
run autoheader
run automake --add-missing --foreign --copy
run autoconf

Don't forget to make the autogen.sh executable.

[stack]% chmod +x autogen.sh

run() is a convenience function to confirm a result of ran command. The following list shows what is done by them:

  • aclocal: collects macros that is used by Automake into aclocal.m4.

  • libtoolize: prepares files that is needed by libtool.

  • autoheader: generates config.h.in that is used by configure script.

  • automake: generates Makefile.in that is used by configure script.

  • autoconf: generates configure scripts.

If we installed Cutter into different prefix with aclocal's install prefix, you need to set ACLOCAL_ARGS environment variable. The environment variable is referred from autogen.sh. If we installed Cutter with $HOME/local prefix, here is an example command to set the environment variable:

[stack]% export ACLOCAL_ARGS="-I $HOME/local/share/aclocal"

The following is a result of autogen.sh at this point:

[stack]% ./autogen.sh
aclocal: `configure.ac' or `configure.in' is required
Failed aclocal

We need to prepare configure.ac that is for Autoconf.

configure.ac

The following is a minimum configure.ac for our autogen.sh.

configure.ac:

AC_PREREQ(2.59)

AC_INIT(stack, 0.0.1, you@example.com)
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_HEADER([src/config.h])

AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION)

AC_PROG_LIBTOOL

AC_CONFIG_FILES([Makefile])

AC_OUTPUT

The following is a result of autogen after preparing configure.ac.

[stack]% ./autogen.sh
Putting files in AC_CONFIG_AUX_DIR, `config'.
configure.ac:7: installing `config/install-sh'
configure.ac:7: installing `config/missing'
automake: no `Makefile.am' found for any configure output
Failed automake --add-missing --foreign --copy

We need to prepare Makefile.am for Automake.


Makefile.am

An empty Makefile.am is enough if the Makefile.am is just only for autogen.sh.

[stack]% touch Makefile.am
[stack]% ./autogen.sh
Putting files in AC_CONFIG_AUX_DIR, `config'.

A configure script can be generated. We can do 'configure; make; make install' like many popular softwares at this point:

[stack]% ./configure
...
[stack]% make
[stack]% make install

But for now, nothing is to happen because we doesn't have any items that are needed to build or install.

First test writing

We can write a test because we got a minimal build environment. First, we test that a newly created statck should be empty. The following code representes this test in C:

void
test_new_stack (void)
{
    Stack *stack;
    stack = stack_new();
    if (stack_is_empty(stack))
        PASS;
    else
        FAIL;
}

We change this test code to be able to run as a test code for Cutter.

Write a test program

A test program is put into test/. In this tutorial, we make a test program as test/test-stack.c.

First, we need to include cutter.h to use Cutter.

test/test-stack.c:

#include <cutter.h>

And we need to include stack.h that declares API for test target stack implementation. (stack.h will be made later.)

test/test-stack.c:

#include <stack.h>

Next, we write a test with the stack API:

test/test-stack.c:

void test_new_stack (void);

void
test_new_stack (void)
{
    Stack *stack;
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}

cut_assert() is a macro that fails if the first argument is 0, passes otherwise. Writing tests with Cutter means that writing a program that verifies a target program works as we expected at the specific situation.

The following test code is a whole test code to test "a newly created stack should be empty".

test/test-stack.c:

#include <cutter.h>
#include <stack.h>

void test_new_stack (void);

void
test_new_stack (void)
{
    Stack *stack;
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}

Build a test

Each test programs for Cutter are shared libraries. To build the above test program as shared library, we change Makefile.am.

Build configuration in test/

Makefile.am is empty for now.

First, put the following configuration to use ACLOCAL_ARGS environment variable for autogen.sh with aclocal invoked via make:

Makefile.am:

ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS

Next, to build test/test-stack.c in test/ directory, we need to specify that there is test/ directory as sub directory in Makefile.am.

Makefile.am:

...
SUBDIRS = test

make will detect Makefile.am is changed and update Makefile and so on automatically after we change Makefile.am and run make.

[stack]% make
 cd . && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign  Makefile
 cd . && /bin/sh ./config.status Makefile 
config.status: creating Makefile
Making all in test
config.status: creating Makefile
Making all in test
make[1]: Entering directory `/tmp/stack/test'
make[1]: *** No rule to make target `all'.  Stop.
make[1]: Leaving directory `/tmp/stack/test'
make: *** [all-recursive] Error 1

We find that make go down to test/ to build. But make is failed in test/ because test/Makefile doesn't exist.

To build in test/, we will make test/Makefile.am and indicate configure.ac to generate test/Makefile.

An empty test/Makefile.am is OK for just protecting make failure in test/.

[stack]% touch test/Makefile.am

Next, we indicate configure.ac to generate test/Makefile. Now, make will be done successfully.

configure.ac:

...
AC_CONFIG_FILES([Makefile
                 test/Makefile])
...

If we run make again, make re-runs configure and test/Makefile is generated. Now make doesn't fail in test/.

[stack]% make
...
config.status: creating test/Makefile
config.status: creating src/config.h
config.status: src/config.h is unchanged
config.status: executing depfiles commands
Making all in test
make[1]: Entering directory `/tmp/stack/test'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/tmp/stack/test'
make[1]: Entering directory `/tmp/stack'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/tmp/stack'

Build test/test_stack.so

We will edit test/Makefile.am to build test/test-stack.c as a shared library. A shared library for test should be named as "test_" prefix. (It's OK if "lib" is prepended to "test_" prefix.) We use "noinst_" because a test program isn't needed to be installed.

test/Makefile.am:

noinst_LTLIBRARIES = test_stack.la

Shared libraries for test are loaded dynamically by cutter that is a command included in Cutter to run test. Shared libraries that are loaded dynamically should be builded libtool with -module option. -rpath option is also required by -module option. Because of them LDFLAGS becomes the following. The reason why -avoid-version is specified is that shared libraries for test aren't needed to have version number. -no-undefined option tells libtool that it reports a error when there is any undefined symbol. On some environments, shared library isn't generated without -no-undefined option. (e.g. a case that generating DLL on Windows.)

test/Makefile.am:

...
LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

To build test/test_stack.la, test/test-stack.c is used. (test_stack.so is generated into test/.libs/.) We need to specify this.

test/Makefile.am:

...
test_stack_la_SOURCES = test-stack.c

Now, we can build test/test_stack.la.

[stack]% make
...
 cd .. && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign  test/Makefile
test/Makefile.am: required file `config/depcomp' not found
test/Makefile.am:   `automake --add-missing' can install `depcomp'
make[1]: *** [Makefile.in] Error 1
make[1]: Leaving directory `/tmp/stack/test'
make: *** [all-recursive] Error 1

To generate config/depcomp, we need to run automake with --add-missing option. To do this, we can use autogen.sh. Don't forget to re-run configure.

[stack]% ./autogen.sh
[stack]% ./configure

Now, we can build test/test_stack.la with make.

[stack]% make
...
test-stack.c:1:20: error: cutter.h: No such file or directory
test-stack.c:2:19: error: stack.h: No such file or directory
test-stack.c: In function 'test_new_stack':
test-stack.c:9: error: 'Stack' undeclared (first use in this function)
test-stack.c:9: error: (Each undeclared identifier is reported only once
test-stack.c:9: error: for each function it appears in.)
test-stack.c:9: error: 'stack' undeclared (first use in this function)
make[1]: *** [test-stack.lo] Error 1
make[1]: Leaving directory `/tmp/stack/test'
make: *** [all-recursive] Error 1

But there are the above errors because we don't setup to use Cutter yet. And we can't include stack.h because we don't have a stack implementation yet.

Use Cutter

We will support cutter.h including. Cutter provides a macro file for aclocal. Because of this, we can use Cutter with GNU build system.

First, we add a code to detect Cutter into configure.ac.

configure.ac:

...
AC_CHECK_CUTTER

AC_CONFIG_FILES([Makefile
                 test/Makefile])
...

We use detected Cutter information in test/Makefile.am:

test/Makefile.am:

...
INCLUDES = $(CUTTER_CFLAGS)
LIBS = $(CUTTER_LIBS)
...

The followings are the current whole configure.ac, Makefile.am and test/Makefile.am:

configure.ac:

AC_PREREQ(2.59)

AC_INIT(stack, 0.0.1, you@example.com)
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_HEADER([src/config.h])

AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION)

AC_PROG_LIBTOOL

AC_CHECK_CUTTER

AC_CONFIG_FILES([Makefile
                 test/Makefile])

AC_OUTPUT

Makefile.am:

ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS

SUBDIRS = test

test/Makefile.am:

noinst_LTLIBRARIES = test_stack.la

INCLUDES = $(CUTTER_CFLAGS)
LIBS = $(CUTTER_LIBS)

LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

test_stack_la_SOURCES = test-stack.c

AC_CHECK_CUTTER macro uses pkg-config which is a popular package information management tool. If we installed Cutter with different prefix of pkg-config, we need to set PKG_CONFIG_PATH environment variable. The environment variable is referred by pkg-config to find .pc file. If we installed Cutter with $HOME/local prefix, here is an example command to set the environment variable:

[stack]% export PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig

We run make again and make runs configure automatically and builds with Cutter configuration after the above changes.

[stack]% make
...
test-stack.c:2:19: error: stack.h: No such file or directory
test-stack.c: In function 'test_new_stack':
test-stack.c:9: error: 'Stack' undeclared (first use in this function)
test-stack.c:9: error: (Each undeclared identifier is reported only once
test-stack.c:9: error: for each function it appears in.)
test-stack.c:9: error: 'stack' undeclared (first use in this function)
make[1]: *** [test-stack.lo] Error 1
make[1]: Leaving directory `/tmp/stack/test'
make: *** [all-recursive] Error 1

An error that reports "cutter.h can't be included" is gone away.

Make stack API

We will fix an error that stack.h can't be included.

We put stack.h into src/stack.h because we make a stack implementation in src/.

[stack]% touch src/stack.h

To include stack.h from test program, we configure include path:

test/Makefile.am:

...
INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src
...

We will find that an error that stack.h can't be included is gone away if we run make again.

[stack]% make
...
test-stack.c: In function 'test_new_stack':
test-stack.c:9: error: 'Stack' undeclared (first use in this function)
test-stack.c:9: error: (Each undeclared identifier is reported only once
test-stack.c:9: error: for each function it appears in.)
test-stack.c:9: error: 'stack' undeclared (first use in this function)
make[1]: *** [test-stack.lo] Error 1
make[1]: Leaving directory `/tmp/stack/test'
make: *** [all-recursive] Error 1

There is only an error that Stack type isn't declared.

Declare Stack type

To build our test program, we declare Stack type in src/stack.h.

src/stack.h:

#ifndef __STACK_H__
#define __STACK_H__

typedef struct _Stack Stack;

#endif

We get a warning because stack_new() isn't declared but we can build a shared library.

[stack]% make
...
test-stack.c: In function 'test_new_stack':
test-stack.c:10: warning: assignment makes pointer from integer without a cast
...
[stack]% file test/.libs/test_stack.so
test/.libs/test_stack.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

NOTE: We can't generate a shared library (DLL) on Cygwin when we have unresolved symbols. We can go to the next step on Cygwin without caring the command result.

Declare stack_new()/stack_is_empty()

To suppress a warning, we declare stack_new() and stack_is_empty().

src/stack.h:

...
Stack *stack_new      (void);
int    stack_is_empty (Stack *stack);
...

We can confirm that make don't report any warnings now.

[stack]% make

Run test

Now, we can run a test because we got a shared library.

[stack]% cutter test/
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new

Loading our test is failed due to undefined stack_new() but we can confirm that our test is loaded.

NOTE: We get a "0 tests are ran and no failure" result report on Cygwin because we can't generate a DLL on Cygwin when we have unresolved symbols. We will implement stack and resolve all symbols. We can generate a DLL and run test after implementing stack. We can go to the next step on Cygwin without caring the command result.

Automate running test

GNU build system use 'make check' to run test. We follow the convention in our stack implementation.

First, we make a script test/run-test.sh that runs our test. A path of cutter command is passed from environment variable CUTTER.

test/run-test.sh:

#!/bin/sh

export BASE_DIR="`dirname $0`"
$CUTTER -s $BASE_DIR "$@" $BASE_DIR

Don't forget to make the test/run-test.sh executable.

[stack]% chmod +x test/run-test.sh

We need to specify that we use test/run-test.sh as a test runner script to test/Makefile.am.

test/Makefile.am:

TESTS = run-test.sh
TESTS_ENVIRONMENT = CUTTER="$(CUTTER)"
...

We pass a path of cutter command via environment variable CUTTER in TESTS_ENVIRONMENT. A path of cutter command is detected by AC_CHECK_CUTTER in configure.ac.

We can confirm that 'make -s check' runs our test. -s option is for silence mode. A test result can be confirmed more easier.

[stack]% make -s check
Making check in test
cutter: symbol lookup error: ./.libs/test_stack.so: undefined symbol: stack_new
FAIL: run-test.sh
================================
1 of 1 tests failed
Please report to you@example.com
================================
...

NOTE: As mentioned the above, we doesn't get an error on Cygwin because we can't generate a DLL for now. We doesn't need to care it. We can go to the next.

Make test/run-test.sh workable alone

In 'make -s check', there are outputs that isn't test result like build logs. They hid test result that is interested by us. So we want test/run-test.sh to work without invoking from 'make -s check'.

test/run-test.sh needs to detect a path of cutter command automatically if environment variable CUTTER isn't set. And test/run-test.sh needs to run make to rebuild necessary files if test/run-test.sh isn't invoked from 'make check'.

test/run-test.sh:

#!/bin/sh

export BASE_DIR="`dirname $0`"
top_dir="$BASE_DIR/.."

if test -z "$NO_MAKE"; then
    make -C $top_dir > /dev/null || exit 1
fi

if test -z "$CUTTER"; then
    CUTTER="`make -s -C $BASE_DIR echo-cutter`"
fi

$CUTTER -s $BASE_DIR "$@" $BASE_DIR

To support the test/run-test.sh, test/Makefile.am has some works.

test/Makefile.am:

...
TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)"
...
echo-cutter:
	@echo $(CUTTER)

The following is the whole of test/Makefile.am.

test/Makefile.am:

TESTS = run-test.sh
TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)"

noinst_LTLIBRARIES = test_stack.la

INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src
LIBS = $(CUTTER_LIBS)

LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

test_stack_la_SOURCES = test-stack.c

echo-cutter:
	@echo $(CUTTER)

We can confirm that test/run-test.sh runs test even if it's not invoked from 'make -s check'.

[stack]% test/run-test.sh
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new

NOTE: We doesn't get the error on Cygwin.

We will use test/run-test.sh instead of 'make -s check' from now. Test result that is what we are interested in will not be hid because test/run-test.sh just outputs build errors and/or warnings and test result.

We spent some times to build testing environment before we implement stack. It reduces costs to run test. If costs to run test isn't low, we will not run test gradually. It may cause quality loss.

Building testing environment at first delays start time of implementing a main program. But we need to keep quality of a main program by running test until a main program is developed and maintained. We will be able to collect costs that is spent for building testing environment. It's important that building testing environment at first to be developing a high-quality program comfortably.


Implement stack

We will start implementing stack because we built testing environment.

A straightforward stack_new() implementation

We will define stack_new() and resolve run-time error.

We implement stack in src/stack.c. It's a straightforward stack_new() implementation:

src/stack.c:

#include <stdlib.h>
#include "stack.h"

Stack *
stack_new (void)
{
    return NULL;
}

Build src/libstack.la

We will build src/stack.c with make. src/ should be included into build targets like test/.

Makefile.am:

ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS

SUBDIRS = src test

configure.ac:

...
AC_CONFIG_FILES([Makefile
                 src/Makefile
                 test/Makefile])
...

The above configurations are for what we want to do.

[stack]% test/run-test.sh
configure.ac:19: required file `src/Makefile.in' not found
make: *** [Makefile.in] Error 1

To resolve the above error, we need to make src/Makefile.am.

[stack]% touch src/Makefile.am
[stack]% test/run-test.sh
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new

NOTE: We doesn't get the error on Cygwin.

make doesn't report error but we still have an error that stack_new() is undefined. Because we don't build src/stack.c and test program also doesn't link libstack.so yet.

The following configurations in src/Makefile.am are for build libstack.so from src/stack.c.

src/Makefile.am:

lib_LTLIBRARIES = libstack.la

LDFLAGS = -no-undefined

libstack_la_SOURCES = stack.c

make will generate libstack.so.

[stack]% make
...
make[1]: Entering directory `/tmp/stack/src'
Makefile:275: .deps/stack.Plo: No such file or directory
make[1]: *** No rule to make target `.deps/stack.Plo'.  Stop.
...

To resolve the above error, we need to re-run configure.

[stack]% ./configure

make will generate src/.libs/libstack.so.0.0.0 now.

[stack]% make
[stack]% file src/.libs/libstack.so.0.0.0
src/.libs/libstack.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

NOTE: We will generate src/.libs/cyglibstack.dll on Cygwin.

Link src/libstack.la

libstack.so is generated but it's not linked into test program. So there is still run-time error.

[stack]% test/run-test.sh
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new

NOTE: We doesn't get the error on Cygwin.

To link libstack.so, we will change test/Makefile.am like the following.

test/Makefile.am:

...
LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la
...

We need to add src/.libs/ to PATH environment variable before run cutter to find DLL generated under src/.libs/ on Cygwin:

test/run-test.sh:

...
case `uname` in
    CYGWIN*)
        PATH="$top_dir/src/.libs:$PATH"
        ;;
    Darwin)
        DYLD_LIBRARY_PATH="$top_dir/src/.libs:$DYLD_LIBRARY_PATH"
        export DYLD_LIBRARY_PATH
        ;;
    *BSD)
        LD_LIBRARY_PATH="$top_dir/src.libs:$LD_LIBRARY_PATH"
        export LD_LIBRARY_PATH
        ;;
    *)
        :
        ;;
esac

$CUTTER -s $BASE_DIR "$@" $BASE_DIR

We need to run 'make clean' to re-link our test program.

[stack]% make clean
[stack]% make
[stack]% test/run-test.sh
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_is_empty

An error message is changed to stack_is_empty() isn't found from stack_new() isn't found. We can confirm that libstack.so is linked correctly by this change.

NOTE: We doesn't get the error on Cygwin.

Implement stack_is_empty()

We test a result of stack_is_empty() in our test program:

test/test-stack.c:

...
cut_assert(stack_is_empty(stack));
...

That means that stack_is_empty() should return true. So stack_is_empty() implementation in src/stack.c should return true.

src/stack.c:

...
#define TRUE 1
#define FALSE 0
...
int
stack_is_empty (Stack *stack)
{
    return TRUE;
}

The following is the whole of src/stack.c.

src/stack.c:

#include <stdlib.h>
#include "stack.h"

#define TRUE 1
#define FALSE 0

Stack *
stack_new (void)
{
    return NULL;
}

int
stack_is_empty (Stack *stack)
{
    return TRUE;
}

Our test should pass because the stack_is_empty() implementation always returns true.

[stack]% test/run-test.sh
.

Finished in 0.000028 seconds

1 test(s), 1 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

Great! This is the first success!!!

Displayed a "." means that a test is passed. The current number of tests is just one. So one "." means all tests are passed.

The above result may be displayed in green. This means that we may go to the next step because our all tests are passed.

We confirmed that test is worked. We will complete stack implementation with writing tests.

Implement push

We will implement push. We only accept integer for values in stack in this implementation.

Test for push

A stack should have 1 item and not be empty after we push a value. The following is a test for this.

test/test-stack.c:

...
void test_push (void);
...
void
test_push (void)
{
    Stack *stack;

    stack = stack_new();
    cut_assert_equal_int(0, stack_get_size(stack));
    stack_push(stack, 100);
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert(!stack_is_empty(stack));
}

We will get an error that says stack_get_size() isn't undefined if we run test.

[stack]% test/run-test.sh
cutter: symbol lookup error: ./test/.libs/test_stack.so: undefined symbol: stack_get_size

We will implement push to pass this test.

NOTE: We doesn't get the error on Cygwin.


Implement cut_stack_push()

We will implement stack_get_size() and stack_push() to be able to run test even if tests aren't passed.

First, we add declarations to src/stack.h.

src/stack.h:

...
int    stack_get_size (Stack *stack);
void   stack_push     (Stack *stack, int value);
...

And we add definitions to src/stack.c.

src/stack.c:

...
int
stack_get_size (Stack *stack)
{
    return 0;
}

void
stack_push (Stack *stack, int value)
{
}

The reason why stack_get_size() returns 0 is the first stack_get_size() call is expected to return 0 like the following.

test/test-stack.c:

...
stack = stack_new();
cut_assert_equal_int(0, stack_get_size(stack));
...

We run test because push is implemented.

[stack]% test/run-test.sh
.F

1) Failure: test_push
<1 == stack_get_size(stack)>
expected: <1>
 but was: <0>
test/test-stack.c:23: test_push()

Finished in 0.000113 seconds

2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
50% passed

"F" means that a test is Failed. The result may be showed in red. It indicates that it's dangerous to go to next stage because all of the current tests aren't passed. In other words, we should improve push implementation to pass the current tests before we implement pop.

The message form cutter command shows that the test is failed because return value of stack_get_size(stack) is 0 not 1 in test_push() function at the 23th line in test/test-stack.c. The target line is the following.

test/test-stack.c:23:

cut_assert_equal_int(1, stack_get_size(stack));

It's failed because our stack_get_size() implementation always return 0. We should increment an internal counter after stack_push() is called.


Free memory

stack_new() always returns NULL for now. Stack needs to allocate memory to have an internal counter. Stack should free memory that is unused if stack allocate memory.

For example, test_new_stack() should do like the following.

void
test_new_stack (void)
{
    Stack *stack;
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
    stack_free(stack);
}

But stack_free() will never be called if cut_assert() where it's the above of the stack_free() fails. Because cut_assert() returns the test function immediately if the expression (stack_is_empty(stack)) is false. (It will not cause big harm because most test programs are short-lived.)

Cutter supports registering functions that are surely called before/after test. They are cut_setup() and cut_teardown(). They are called even if test is failed. We can use them for freeing memory allocated in test surely.

To freeing allocated memory for test_new_stack() surely, we can use cut_setup() and cut_teardown() like the following.

test/test-stack.c:

...
static Stack *stack;

void
cut_setup (void)
{
    stack = NULL;
}

void
cut_teardown (void)
{
    if (stack)
        stack_free(stack);
}

void
test_new_stack (void)
{
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}
...

We can also modify test_push() to freeing allocated memory in tests by using static stack variable instead of local stack variable.

test/test-stack.c:

...
void
test_push (void)
{
    stack = stack_new();
    cut_assert_equal_int(0, stack_get_size(stack));
    stack_push(stack, 100);
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert(!stack_is_empty(stack));
}
...

Here is whole of the test/test-stack.c that uses cut_setup()/cut_teardown().

test/test-stack.c:

#include <cutter.h>
#include <stack.h>

void test_new_stack (void);
void test_push (void);

static Stack *stack;

void
cut_setup (void)
{
    stack = NULL;
}

void
cut_teardown (void)
{
    if (stack)
        stack_free(stack);
}

void
test_new_stack (void)
{
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}

void
test_push (void)
{
    stack = stack_new();
    cut_assert_equal_int(0, stack_get_size(stack));
    stack_push(stack, 100);
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert(!stack_is_empty(stack));
}

We can confirm that a result of test isn't changed after this change.

[stack]% test/run-test.sh
.F

1) Failure: test_push
<1 == stack_get_size(stack)>
expected: <1>
 but was: <0>
test/test-stack.c:35: test_push()

Finished in 0.000084 seconds

2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
50% passed

Implement stack_new() and stack_free()

We will implement stack_new() that allocate memory and stack_free() that free allocated memory.

First, we will declares stack_free() in src/stack.h.

src/stack.h:

...
void   stack_free     (Stack *stack);
...

Next, we will define Stack type in src/stack.c. Stack type has a field that hold stack size.

src/stack.c:

...
struct _Stack {
    int size;
};
...

stack_new() allocates memory for Stack and stack_free() frees memory allocated by stack_new().

src/stack.c:

...
Stack *
stack_new (void)
{
    Stack *stack;

    stack = malloc(sizeof(Stack));
    if (!stack)
        return NULL;

    stack->size = 0;
    return stack;
}

void
stack_free (Stack *stack)
{
    free(stack);
}
...

We can confirm that test works same as before the changes.

[stack]% test/run-test.sh
.F

1) Failure: test_push
<1 == stack_get_size(stack)>
expected: <1>
 but was: <0>
test/test-stack.c:35: test_push()

Finished in 0.000113 seconds

2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
50% passed

Really implement stack_push()

We will really implement stack_push() and stack_get_size() to pass our tests because a stack can have a stack size.

src/stack.c:

...
int
stack_get_size (Stack *stack)
{
    return stack->size;
}

void
stack_push (Stack *stack, int value)
{
    stack->size++;
}

Stack increments it's size each push and returns the size. A test for stack_get_size() that is failed until now will be passed.

[stack]% test/run-test.sh
.F

1) Failure: test_push
expected: <!stack_is_empty(stack)> is not FALSE/NULL
test/test-stack.c:36: test_push()

Finished in 0.000113 seconds

2 test(s), 3 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
50% passed

The test for stack_get_size() is passed as our expectation but there is still a failure. It's a test for stack_is_empty() in test/test-stack.c at the 36th line.

test/test-stack.c:36:

cut_assert(!stack_is_empty(stack));

A stack should not be empty after push.


Really implement stack_is_empty()

A stack should be empty only when a stack size is 0. So stack_is_empty() is changed to the following.

src/stack.c:

...
int
stack_is_empty (Stack *stack)
{
    return stack->size == 0;
}
...

We can run test again and confirm that all of tests are passed.

% test/run-test.sh
..

Finished in 0.000036 seconds

2 test(s), 4 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

A test for push is passed and the rest of tests are kept to pass. A result message is back to green because all of tests are passed. We can feel safe to go to the next stage; We will implement pop.

Implement pop

We will implement pop that retrieve a value that is inserted by push.

Test for pop

Pop returns a value that is inserted by the last push. Pop reduces stack size and finally a stack is empty. The following test represents expected push/pop behavior.

test/test-stack.c:

...
void test_pop (void);
...
void
test_pop (void)
{
    stack = stack_new();

    stack_push(stack, 10);
    stack_push(stack, 20);
    stack_push(stack, 30);

    cut_assert_equal_int(3, stack_get_size(stack));
    cut_assert_equal_int(30, stack_pop(stack));
    cut_assert_equal_int(2, stack_get_size(stack));
    cut_assert_equal_int(20, stack_pop(stack));
    cut_assert_equal_int(1, stack_get_size(stack));

    stack_push(stack, 40);
    cut_assert_equal_int(2, stack_get_size(stack));
    cut_assert_equal_int(40, stack_pop(stack));
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert_equal_int(10, stack_pop(stack));
    cut_assert_equal_int(0, stack_get_size(stack));
    cut_assert(stack_is_empty(stack));
}

We can run test.

[stack]% test/run-test.sh
..cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_pop

There is an error that reports stack_pop() isn't defined. We can confirm that existed two tests are passed because there are two "." before the error message.

NOTE: We doesn't get the error on Cygwin.


Implement stack_pop()

First, we declare stack_pop() in src/stack.h.

src/stack.h:

...
int    stack_pop      (Stack *stack);
...

Next, we define stack_pop() in src/stack.c.

src/stack.c:

...
int
stack_pop (Stack *stack)
{
    return 30;
}

stack_pop() always returns 30 because the first stack_pop() call is required to return 30:

test/test-stack.c:50:

cut_assert_equal_int(30, stack_pop(stack));

We can confirm that test can be run and a test for pop doesn't report any error.

[stack]% test/run-test.sh
..F

1) Failure: test_pop
<2 == stack_get_size(stack)>
expected: <2>
 but was: <3>
test/test-stack.c:51: test_pop()

Finished in 0.000307 seconds

3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
66.6667% passed

A test for pop is run but failed because the current stack_pop() implementation doesn't change stack size. The failure is occurred in test/test-stack.c at the 50th line and the reason is stack_get_size() in the target line returns 3 not expected 2.

test/test-stack.c:51:

cut_assert_equal_int(2, stack_get_size(stack));

Allocate memory for data

We can confirm that the test can be run. We will implement stack_pop() to pass the test.

A stack needs to save pushed data to retrieve by pop. A stack needs to have a new field to hold pushed data and stack_push()/stack_pop() allocates/frees memory for pushed data dynamically.

First, we will add a new field in Stack. stack_new() initializes the field and stack_free() frees the field.

src/stack.c:

...
struct _Stack {
    int size;
    int *data;
};

Stack *
stack_new (void)
{
    ...
    stack->data = NULL;
    ...
}

void
stack_free (Stack *stack)
{
    free(stack->data);
    free(stack);
}
...

At this point, we don't change any process that effects external program. So we can confirm that the test should be failed the same as before.

[stack]% test/run-test.sh
..F

1) Failure: test_pop
<2 == stack_get_size(stack)>
expected: <2>
 but was: <3>
test/test-stack.c:51: test_pop()

Finished in 0.000097 seconds

3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
66.6667% passed

Really implement stack_pop()

We added a new field to hold pushed data. stack_push()/stack_pop() can allocate needed memory to the field and save data.

src/stack.c:

...
void
stack_push (Stack *stack, int value)
{
    int *new_data;

    stack->size++;
    new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);
    if (!new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return;
    }
    stack->data = new_data;

    stack->data[stack->size - 1] = value;
}

int
stack_pop (Stack *stack)
{
    int value;
    int *new_data;

    stack->size--;
    value = stack->data[stack->size];

    new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);
    if (stack->size > 0 && !new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return value;
    }
    stack->data = new_data;

    return value;
}

We can confirm that the test for pop is passed.

[stack]% test/run-test.sh
...

Finished in 0.000076 seconds

3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

Eliminate duplications

stack_push() and stack_pop() implementations has duplications that are dynamic memory allocation process and error handling process when memory allocation is failed. It's generally not good that duplications exist because they may increase maintenance cost and so on.

In this section, we will eliminate duplications without changing existing semantics. We can confirm that existing semantics aren't changed by running our tests.

Eliminate a duplication in memory allocation process

First, we will eliminate a duplication in memory allocation process like the following:

src/stack.c:

new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);

We will extract the above part as stack_realloc().

src/stack.c:

...
static int *
stack_realloc (Stack *stack)
{
    return realloc(stack->data, sizeof(*stack->data) * stack->size);
}

void
stack_push (Stack *stack, int value)
{
    ...
    new_data = stack_realloc(stack);
    ...
}

int
stack_pop (Stack *stack)
{
    ...
    new_data = stack_realloc(stack);
    ...
}

We can confirm that existing semantics aren't changed by running tests.

[stack]% test/run-test.sh
...

Finished in 0.000078 seconds

3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

We can go to the next because the result is green.


Eliminate a duplication in error handling process

Next, we will eliminate a duplication in error handling process for memory allocation failure. The current implementation is the following:

src/stack.c:

...
void
stack_push (Stack *stack, int value)
{
    ...
    new_data = stack_realloc(stack);
    if (!new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return;
    }
    ...
}

int
stack_pop (Stack *stack)
{
    ...
    new_data = stack_realloc(stack);
    if (stack->size > 0 && !new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return value;
    }
    ...
}

We will move the above error handling process to stack_realloc() and stack_realloc() returns whether memory allocation is succeeded or failed instead of allocated memory.

src/stack.c:

...
static int
stack_realloc (Stack *stack)
{
    int *new_data;

    new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);
    if (stack->size > 0 && !new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return FALSE;
    }
    stack->data = new_data;

    return TRUE;
}

void
stack_push (Stack *stack, int value)
{
    stack->size++;
    if (!stack_realloc(stack))
        return;
    stack->data[stack->size - 1] = value;
}

int
stack_pop (Stack *stack)
{
    int value;

    stack->size--;
    value = stack->data[stack->size];
    stack_realloc(stack);
    return value;
}

We should confirm that the changes doesn't change existing semantics.

[stack]% test/run-test.sh
...

Finished in 0.000076 seconds

3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

w We confirmed that we can improve our program by eliminating duplications in our program without changing existing semantics.

Conclusion

This documentation shows how to setup a build environment system with GNU build system, write tests with Cutter and improve a program that has tests by using a small stack implementation.

Merit

GNU build system provides us portability.

Cutter provides us a method to write tests easily. Existing testing frameworks for C require to use macros to define a test or to register tests explicitly. We need to write many other things except writing tests. Cutter resolves this problem. Cutter doesn't require to use original macros to define a test. We can write a test as just a normal function. We can also write no test registration code.

We only used cut_assert() and cut_assert_equal_int() but Cutter provides many assertions to verify actual value is expected value like cut_assert_equal_string(). We will be able to write tests simply by them because we doesn't need to write our assertions for primitive types.

Cutter doesn't show needless information in test result message but show useful information as much as possible. It supports that we can find useful information easily and fix problems easily and rapidly. Cutter also tries to show backtraces on segmentation fault that is often caused for a program written by C for providing many information to fix problems.

It's very helpful for maintenance that improving internal structure of a program without changing existing semantics. We can easily confirm that existing semantics isn't changed with automated tests.

Automated tests also helps us when a new feature is developed. We can confirm that existing semantics isn't broken by codes for a new feature. Automated tests are useful for maintenance, developing new features and keeping high-quality.


Stack test

The following tests are the final version.

test/test-stack.c

#include <cutter.h>
#include <stack.h>

void test_new_stack (void);
void test_push (void);
void test_pop (void);

static Stack *stack;

void
cut_setup (void)
{
    stack = NULL;
}

void
cut_teardown (void)
{
    if (stack)
        stack_free(stack);
}

void
test_new_stack (void)
{
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}

void
test_push (void)
{
    stack = stack_new();
    cut_assert_equal_int(0, stack_get_size(stack));
    stack_push(stack, 100);
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert(!stack_is_empty(stack));
}

void
test_pop (void)
{
    stack = stack_new();

    stack_push(stack, 10);
    stack_push(stack, 20);
    stack_push(stack, 30);

    cut_assert_equal_int(3, stack_get_size(stack));
    cut_assert_equal_int(30, stack_pop(stack));
    cut_assert_equal_int(2, stack_get_size(stack));
    cut_assert_equal_int(20, stack_pop(stack));
    cut_assert_equal_int(1, stack_get_size(stack));

    stack_push(stack, 40);
    cut_assert_equal_int(2, stack_get_size(stack));
    cut_assert_equal_int(40, stack_pop(stack));
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert_equal_int(10, stack_pop(stack));
    cut_assert_equal_int(0, stack_get_size(stack));
    cut_assert(stack_is_empty(stack));
}

Stack implementation

The following codes are the final version. This stack implementation has some issues that error notification, performance tunings and so on because it's straightforward. But the implementation has basic features that is shown by test.

src/stack.c:

#include <stdlib.h>
#include "stack.h"

#define TRUE 1
#define FALSE 0

struct _Stack {
    int size;
    int *data;
};

Stack *
stack_new (void)
{
    Stack *stack;

    stack = malloc(sizeof(Stack));
    if (!stack)
        return NULL;

    stack->size = 0;
    stack->data = NULL;
    return stack;
}

void
stack_free (Stack *stack)
{
    free(stack->data);
    free(stack);
}

int
stack_is_empty (Stack *stack)
{
    return stack->size == 0;
}

int
stack_get_size (Stack *stack)
{
    return stack->size;
}

static int
stack_realloc (Stack *stack)
{
    int *new_data;

    new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);
    if (stack->size > 0 && !new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return FALSE;
    }
    stack->data = new_data;

    return TRUE;
}

void
stack_push (Stack *stack, int value)
{
    stack->size++;
    if (!stack_realloc(stack))
        return;
    stack->data[stack->size - 1] = value;
}

int
stack_pop (Stack *stack)
{
    int value;

    stack->size--;
    value = stack->data[stack->size];
    stack_realloc(stack);
    return value;
}

Support no Cutter installed environment

In this tutorial, test/test-stack.c build is failed on no Cutter installed environment. That is make fails. If you are a developer, you must run test. So this behavior is reasonable.

But it's better that this stack library can be built without Cutter for users that just want to use this stack implementation as a library. They will use a released library that is tested by developers.

The following is a way to support no Cutter installed environment.

First, we change AC_CHECK_CUTTER call in configure.ac to work autogen.sh (to be exact, aclocal) without cutter.m4. (If autogen.sh is ran only by developers, this change isn't needed. In the case, aclocal fails because AC_CHECK_CUTTER isn't defined.)

configure.ac:

...
m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"])
...

We use ac_cv_use_cutter as a variable name because AC_CHECK_CUTTER uses the same variable name. The variable becomes "no" if configure can't detect Cutter. On no cutter.m4 environment (no Cutter environment when autogen.sh is ran), we always can't detect Cutter.

Next, we define a condition that can be used in Makefile.am after AC_CHECK_CUTTER. The condition shows whether we detect Cutter or not.

configure.ac:

...
m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"])
AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"])
...

Last, we build test/test-stack.c and run test/run-test.sh only if WITH_CUTTER is true:

test/Makefile.am:

if WITH_CUTTER
TESTS = run-test.sh
TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)"

noinst_LTLIBRARIES = test_stack.la
endif
...

The followings are the whole of configure.ac and test/Makefile.am:

configure.ac:

AC_PREREQ(2.59)

AC_INIT(stack, 0.0.1, you@example.com)
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_HEADER([src/config.h])

AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION)

AC_PROG_LIBTOOL

m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"])
AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"])

m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE])

AC_CONFIG_FILES([Makefile
                 src/Makefile
                 test/Makefile])

AC_OUTPUT

test/Makefile.am:

if WITH_CUTTER
TESTS = run-test.sh
TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)"

noinst_LTLIBRARIES = test_stack.la
endif

INCLUDES = -I$(top_srcdir)/src
LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la

AM_CFLAGS = $(CUTTER_CFLAGS)

LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

test_stack_la_SOURCES = test-stack.c

echo-cutter:
	@echo $(CUTTER)

See also

  • xUnit: It's a library that supports a test style that uses assertXXX for verifying an actual value is an expected value. It also called testing framework. Cutter is one of xUnit testing framework. xUnit is implemented in many language:

    • SUnit (Smalltalk)

    • JUnit (Java)

    • Test::Unit (Ruby)

    • PyUnit (Pytnon)

    • ...

  • Extreme Programming (XP): It's a programming methodology to develop high-quality software. It's heavy on testing.

cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-6.html0000644000175000017500000002720511525707421022766 0ustar koukou Index of new symbols in 1.0.6

Index of new symbols in 1.0.6

C

cut_assert_equal_size, cut_assert_equal_size ()
cut_keep_message, cut_keep_message ()
cut_pop_backtrace, cut_pop_backtrace ()
cut_push_backtrace, cut_push_backtrace ()
CUT_RELATIVE_PATH, CUT_RELATIVE_PATH
cut_return, cut_return ()
cut_setup, cut_setup ()
cut_set_message, cut_set_message ()
cut_set_message_va_list, cut_set_message_va_list ()
cut_shutdown, cut_shutdown ()
cut_startup, cut_startup ()
cut_take_replace, cut_take_replace ()
cut_teardown, cut_teardown ()

G

GCutEgg::error, The "error" signal
GCutEgg::error-received, The "error-received" signal
GCutEgg::output-received, The "output-received" signal
GCutEgg::reaped, The "reaped" signal
GCutEggError, enum GCutEggError
GCutEnumError, enum GCutEnumError
GCutInspectFunction, GCutInspectFunction ()
GCUTTER_ENABLED, GCUTTER_ENABLED
gcut_add_datum, gcut_add_datum ()
gcut_assert_equal_hash_table, gcut_assert_equal_hash_table ()
gcut_assert_equal_list, gcut_assert_equal_list ()
gcut_assert_equal_pid, gcut_assert_equal_pid ()
gcut_data_get_enum, gcut_data_get_enum ()
gcut_data_get_flags, gcut_data_get_flags ()
gcut_data_get_int, gcut_data_get_int ()
gcut_data_get_pointer, gcut_data_get_pointer ()
gcut_data_get_string, gcut_data_get_string ()
gcut_data_get_type, gcut_data_get_type ()
gcut_data_get_uint, gcut_data_get_uint ()
gcut_egg_close, gcut_egg_close ()
gcut_egg_get_env, gcut_egg_get_env ()
gcut_egg_get_error, gcut_egg_get_error ()
gcut_egg_get_flags, gcut_egg_get_flags ()
gcut_egg_get_forced_termination_wait_time, gcut_egg_get_forced_termination_wait_time ()
gcut_egg_get_input, gcut_egg_get_input ()
gcut_egg_get_output, gcut_egg_get_output ()
gcut_egg_get_pid, gcut_egg_get_pid ()
gcut_egg_hatch, gcut_egg_hatch ()
gcut_egg_kill, gcut_egg_kill ()
gcut_egg_new, gcut_egg_new ()
gcut_egg_new_argv, gcut_egg_new_argv ()
gcut_egg_new_array, gcut_egg_new_array ()
gcut_egg_new_strings, gcut_egg_new_strings ()
gcut_egg_new_va_list, gcut_egg_new_va_list ()
gcut_egg_set_env, gcut_egg_set_env ()
gcut_egg_set_flags, gcut_egg_set_flags ()
gcut_egg_set_forced_termination_wait_time, gcut_egg_set_forced_termination_wait_time ()
gcut_egg_wait, gcut_egg_wait ()
gcut_egg_write, gcut_egg_write ()
GCUT_ENUM_ERROR, GCUT_ENUM_ERROR
gcut_enum_parse, gcut_enum_parse ()
gcut_flags_get_all, gcut_flags_get_all ()
gcut_flags_parse, gcut_flags_parse ()
gcut_inspect_direct, gcut_inspect_direct ()
gcut_inspect_enum, gcut_inspect_enum ()
gcut_inspect_flags, gcut_inspect_flags ()
gcut_inspect_int, gcut_inspect_int ()
gcut_inspect_pointer, gcut_inspect_pointer ()
gcut_inspect_string, gcut_inspect_string ()
gcut_inspect_type, gcut_inspect_type ()
gcut_inspect_uint, gcut_inspect_uint ()
gcut_list_equal_int, gcut_list_equal_int ()
gcut_list_equal_string, gcut_list_equal_string ()
gcut_list_equal_uint, gcut_list_equal_uint ()
gcut_list_inspect_enum, gcut_list_inspect_enum ()
gcut_list_inspect_flags, gcut_list_inspect_flags ()
gcut_list_inspect_int, gcut_list_inspect_int ()
gcut_list_inspect_object, gcut_list_inspect_object ()
gcut_list_inspect_string, gcut_list_inspect_string ()
gcut_list_inspect_uint, gcut_list_inspect_uint ()
gcut_list_string_new_array, gcut_list_string_new_array ()
gcut_take_new_list_string_array, gcut_take_new_list_string_array ()
GDKCUTTER_PIXBUF_ENABLED, GDKCUTTER_PIXBUF_ENABLED
cutter-testing-framework-1.1.7/doc/reference/html/install-to-mac-os-x.html0000644000175000017500000000560011525707421024724 0ustar koukou Install to Mac OS X

Install to Mac OS X

Install to Mac OS X — How to install Cutter to Mac OS X

Introduction

This document explains how to install Cutter to Mac OS X.

Install

We can use port because Cutter provides MacPorts.

First, we get MacPorts for Cutter:

% cd ~
% svn co https://cutter.svn.sourceforge.net/svnroot/cutter/macports/ cutter-macports

Next, we register MacPorts for Cutter:

% echo file://$HOME/cutter-macports | sudo sh -c "cat >> /opt/local/etc/macports/sources.conf"

We can install Cutter by port:

% sudo port install cutter

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/index-1-1-2.html0000644000175000017500000000337011525707421022760 0ustar koukou Index of new symbols in 1.1.2

Index of new symbols in 1.1.2

C

CUT_EXPORT, CUT_EXPORT
cutter-testing-framework-1.1.7/doc/reference/html/install-to-others.html0000644000175000017500000001030611525707421024603 0ustar koukou Install to other platform

Install to other platform

Install to other platform — How to install Cutter to other platform

Introduction

This document explains how to install Cutter to platforms except Debian GNU/Linux , Ubuntu Linux , FreeBSD , Solaris and Cygwin .

Install GLib

Cutter requires GLib 2.16 or later. We can install GLib that satisfies the condition by ourselves and use it if our system doesn't provide GLib that satisfies the condition. (e.g. CentOS)

Here is an instruction to install GLib into ~/local/:

% mkdir -p ~/src
% cd ~/src
% wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz
% tar xvfz glib-2.22.4.tar.gz
% cd glib-2.22.4
% ./configure --prefix=$HOME/local
% make
% make install

Install Cutter

Cutter can be installed like other free software because Cutter uses GNU build tools:

% mkdir -p ~/src
% cd ~/src
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz
% tar xvzf cutter-1.1.7.tar.gz
% cd cutter-1.1.7
% ./configure
% make
% sudo make install

Here is an instruction to use GLib installed into ~/local/ by ourselves. In the instruction, Cutter is also installed into ~/local/:

% mkdir -p ~/src
% cd ~/src
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz
% tar xvzf cutter-1.1.7.tar.gz
% cd cutter-1.1.7
% ./configure PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig LD_LIBRARY_PATH=$HOME/local/lib --prefix=$HOME/local
% make
% make install

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/cutter-GCutter.html0000644000175000017500000001224411525707421024077 0ustar koukou GCutter

GCutter

GCutter — Cutter with GLib support.

Synopsis

#define             GCUTTER_ENABLED

Description

GCutter adds many useful features based on GLib to Cutter. If you want to write tests with more easily, it's good idea that you consider GCutter to be used too.

It's easy to use GCutter. You just include <gcutter.h> instead of <cutter.h> and use gcutter.pc instead of cutter.pc:

test-xxx.c:

1
2
-#include <cutter.h>
+#include <gcutter.h>

configure.ac:

1
2
-AC_CHECK_CUTTER
+AC_CHECK_GCUTTER

Makefile.am:

1
2
3
4
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(GCUTTER_CFLAGS)
+XXX_LIBS = $(GCUTTER_LIBS)

Details

GCUTTER_ENABLED

#define GCUTTER_ENABLED 1

Defined when GCutter is enabled.

Since 1.0.6

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertions-with-GLib-support.html0000644000175000017500000024165711525707421030166 0ustar koukou Assertions with GLib support

Assertions with GLib support

Assertions with GLib support — Checks that your program works as you expect with GLib support.

Synopsis

void                gcut_assert_equal_type              (GType expected,
                                                         GType actual,
                                                         ...);
void                cut_assert_equal_g_type             (GType expected,
                                                         GType actual,
                                                         ...);
void                gcut_assert_equal_value             (GValue *expected,
                                                         GValue *actual,
                                                         ...);
void                cut_assert_equal_g_value            (GValue *expected,
                                                         GValue *actual,
                                                         ...);
void                gcut_assert_equal_list              (GList *expected,
                                                         GList *actual,
                                                         GEqualFunc equal_function,
                                                         GCutInspectFunction inspect_function,
                                                         gpointer inspect_user_data,
                                                         ...);
void                gcut_assert_equal_list_int          (GList *expected,
                                                         GList *actual,
                                                         ...);
void                cut_assert_equal_g_list_int         (GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_uint         (GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_string       (GList *expected,
                                                         GList *actual,
                                                         ...);
void                cut_assert_equal_g_list_string      (GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_object       (GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_object_custom
                                                        (GList *expected,
                                                         GList *actual,
                                                         GEqualFunc equal_function,
                                                         ...);
void                gcut_assert_equal_list_enum         (GType type,
                                                         GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_flags        (GType type,
                                                         GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_hash_table        (GHashTable *expected,
                                                         GHashTable *actual,
                                                         GEqualFunc equal_function,
                                                         GCutInspectFunction key_inspect_function,
                                                         GCutInspectFunction value_inspect_function,
                                                         gpointer inspect_user_data,
                                                         ...);
void                gcut_assert_equal_hash_table_string_string
                                                        (GHashTable *expected,
                                                         GHashTable *actual,
                                                         ...);
void                gcut_assert_error                   (GError *error,
                                                         ...);
void                cut_assert_g_error                  (GError *error,
                                                         ...);
void                gcut_assert_equal_error             (GError *expected,
                                                         GError *actual,
                                                         ...);
void                gcut_assert_remove_path             (const gchar *path,
                                                         ...);
void                cut_assert_remove_path              (const gchar *path,
                                                         ...);
void                gcut_assert_equal_time_val          (GTimeVal expected,
                                                         GTimeVal actual,
                                                         ...);
void                gcut_assert_equal_enum              (GType enum_type,
                                                         gint expected,
                                                         gint actual,
                                                         ...);
void                gcut_assert_equal_flags             (GType flags_type,
                                                         guint expected,
                                                         guint actual,
                                                         ...);
void                gcut_assert_equal_object            (GObject *expected,
                                                         GObject *actual,
                                                         ...);
void                gcut_assert_equal_object_custom     (GObject *expected,
                                                         GObject *actual,
                                                         GEqualFunc equal_function,
                                                         ...);
void                gcut_assert_equal_int64             (gint64 expected,
                                                         gint64 actual,
                                                         ...);
void                gcut_assert_not_equal_int64         (gint64 expected,
                                                         gint64 actual,
                                                         ...);
void                gcut_assert_equal_uint64            (guint64 expected,
                                                         guint64 actual,
                                                         ...);
void                gcut_assert_not_equal_uint64        (guint64 expected,
                                                         guint64 actual,
                                                         ...);
void                gcut_assert_equal_pid               (GPid expected,
                                                         GPid actual,
                                                         ...);
void                gcut_assert_not_equal_pid           (GPid expected,
                                                         GPid actual,
                                                         ...);
void                gcut_assert_equal_string            (GString *expected,
                                                         GString *actual,
                                                         ...);

Description

Details

gcut_assert_equal_type ()

void                gcut_assert_equal_type              (GType expected,
                                                         GType actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.3


cut_assert_equal_g_type ()

void                cut_assert_equal_g_type             (GType expected,
                                                         GType actual,
                                                         ...);

Warning

cut_assert_equal_g_type has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_type() instead.

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

gcut_assert_equal_value ()

void                gcut_assert_equal_value             (GValue *expected,
                                                         GValue *actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.3


cut_assert_equal_g_value ()

void                cut_assert_equal_g_value            (GValue *expected,
                                                         GValue *actual,
                                                         ...);

Warning

cut_assert_equal_g_value has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_value() instead.

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

gcut_assert_equal_list ()

void                gcut_assert_equal_list              (GList *expected,
                                                         GList *actual,
                                                         GEqualFunc equal_function,
                                                         GCutInspectFunction inspect_function,
                                                         gpointer inspect_user_data,
                                                         ...);

Passes if equal_function(expected, actual) == CUT_TRUE.

expected :

an expected list.

actual :

an actual list.

equal_function :

a function that compares each elements of expected and actual list.

inspect_function :

a function that inspected expected and actual list.

inspect_user_data :

a data to be passed to inspect_function.

... :

optional message. See cut_message() for details.

Since 1.0.6


gcut_assert_equal_list_int ()

void                gcut_assert_equal_list_int          (GList *expected,
                                                         GList *actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected list of integer.

actual :

an actual list of integer.

... :

optional message. See cut_message() for details.

Since 1.0.3


cut_assert_equal_g_list_int ()

void                cut_assert_equal_g_list_int         (GList *expected,
                                                         GList *actual,
                                                         ...);

Warning

cut_assert_equal_g_list_int has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_list_int() instead.

Passes if expected == actual.

expected :

an expected list of integer.

actual :

an actual list of integer.

... :

optional message. See cut_message() for details.

Since 0.8


gcut_assert_equal_list_uint ()

void                gcut_assert_equal_list_uint         (GList *expected,
                                                         GList *actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected list of unsigned integer.

actual :

an actual list of unsigned integer.

... :

optional message. See cut_message() for details.

Since 1.0.3


gcut_assert_equal_list_string ()

void                gcut_assert_equal_list_string       (GList *expected,
                                                         GList *actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected list of string.

actual :

an actual list of string.

... :

optional message. See cut_message() for details.

Since 1.0.3


cut_assert_equal_g_list_string ()

void                cut_assert_equal_g_list_string      (GList *expected,
                                                         GList *actual,
                                                         ...);

Warning

cut_assert_equal_g_list_string has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_list_string() instead.

Passes if expected == actual.

expected :

an expected list of string.

actual :

an actual list of string.

... :

optional message. See cut_message() for details.

Since 0.8


gcut_assert_equal_list_object ()

void                gcut_assert_equal_list_object       (GList *expected,
                                                         GList *actual,
                                                         ...);

Passes if expected and actual has same GObject * in same order.

expected :

an expected list of GObject.

actual :

an actual list of GObject.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_equal_list_object_custom ()

void                gcut_assert_equal_list_object_custom
                                                        (GList *expected,
                                                         GList *actual,
                                                         GEqualFunc equal_function,
                                                         ...);

Passes if expected and actual has same GObject in same order. Each comparison of GObject uses equal_function.

expected :

an expected list of GObject.

actual :

an actual list of GObject.

equal_function :

a function that compares two GObject.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_equal_list_enum ()

void                gcut_assert_equal_list_enum         (GType type,
                                                         GList *expected,
                                                         GList *actual,
                                                         ...);

Passes if expected and actual has same enum values in same order.

type :

a GEnum type.

expected :

an expected list of enum value.

actual :

an actual list of enum value.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_equal_list_flags ()

void                gcut_assert_equal_list_flags        (GType type,
                                                         GList *expected,
                                                         GList *actual,
                                                         ...);

Passes if expected and actual has same flags values in same order.

type :

a GFlags type.

expected :

an expected list of flags value.

actual :

an actual list of flags value.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_equal_hash_table ()

void                gcut_assert_equal_hash_table        (GHashTable *expected,
                                                         GHashTable *actual,
                                                         GEqualFunc equal_function,
                                                         GCutInspectFunction key_inspect_function,
                                                         GCutInspectFunction value_inspect_function,
                                                         gpointer inspect_user_data,
                                                         ...);

Passes if expected == actual.

expected :

an expected GHashTable of string.

actual :

an actual GHashTable of string.

equal_function :

a function that compares each values of expected and actual hash table.

key_inspect_function :

a function that inspected a key of expected and actual hash table.

value_inspect_function :

a function that inspected a value of expected and actual hash table.

inspect_user_data :

a data to be passed to inspect_function.

... :

optional message. See cut_message() for details.

Since 1.0.6


gcut_assert_equal_hash_table_string_string ()

void                gcut_assert_equal_hash_table_string_string
                                                        (GHashTable *expected,
                                                         GHashTable *actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected GHashTable of string.

actual :

an actual GHashTable of string.

... :

optional message. See cut_message() for details.

Since 1.0.4


gcut_assert_error ()

void                gcut_assert_error                   (GError *error,
                                                         ...);

Passes if error == NULL.

error :

a target GError.

... :

optional message. See cut_message() for details.

Since 1.0.3


cut_assert_g_error ()

void                cut_assert_g_error                  (GError *error,
                                                         ...);

Warning

cut_assert_g_error has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_error() instead.

Passes if error == NULL.

error :

a target GError.

... :

optional message. See cut_message() for details.

Since 1.0


gcut_assert_equal_error ()

void                gcut_assert_equal_error             (GError *expected,
                                                         GError *actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_remove_path ()

void                gcut_assert_remove_path             (const gchar *path,
                                                         ...);

Passes if cut_utils_build_path(path, ...) is removed successfully.

path :

a first element of the path to the removed path.

... :

remaining elements in path. NULL terminated.

Since 1.0.3


cut_assert_remove_path ()

void                cut_assert_remove_path              (const gchar *path,
                                                         ...);

Warning

cut_assert_remove_path has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_remove_path() instead.

Passes if cut_utils_build_path(path, ...) is removed successfully.

path :

a first element of the path to the removed path.

... :

remaining elements in path. NULL terminated.

Since 1.0.2


gcut_assert_equal_time_val ()

void                gcut_assert_equal_time_val          (GTimeVal expected,
                                                         GTimeVal actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.4


gcut_assert_equal_enum ()

void                gcut_assert_equal_enum              (GType enum_type,
                                                         gint expected,
                                                         gint actual,
                                                         ...);

Passes if expected == actual.

e.g.:

1
2
3
4
gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE,
                          GTK_DIR_LEFT, GTK_DIR_LEFT); -> Pass
gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE,
                          GTK_DIR_DOWN, GTK_DIR_LEFT); -> Fail

enum_type :

a GEnum type.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_equal_flags ()

void                gcut_assert_equal_flags             (GType flags_type,
                                                         guint expected,
                                                         guint actual,
                                                         ...);

Passes if expected == actual.

e.g.:

1
2
3
4
5
6
7
8
9
gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS,
                        GTK_DIALOG_DESTROY_MODAL |
                          GTK_DIALOG_DESTROY_WITH_PARENT,
                        GTK_DIALOG_DESTROY_MODAL |
                          GTK_DIALOG_DESTROY_WITH_PARENT); -> Pass
gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS,
                        GTK_DIALOG_DESTROY_MODAL |
                          GTK_DIALOG_DESTROY_WITH_PARENT,
                        GTK_DIALOG_DESTROY_MODAL); -> Fail

flags_type :

a GFlags type.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_equal_object ()

void                gcut_assert_equal_object            (GObject *expected,
                                                         GObject *actual,
                                                         ...);

Passes if expected == actual. See gcut_assert_equal_object_custom() when you need to customize equality check.

e.g.:

1
2
3
4
gcut_assert_equal_object(object, object);   -> Pass
gcut_assert_equal_object(object1, object2); -> Fail
gcut_assert_equal_object(NULL, NULL);       -> Pass
gcut_assert_equal_object(object1, NULL);    -> Fail

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_equal_object_custom ()

void                gcut_assert_equal_object_custom     (GObject *expected,
                                                         GObject *actual,
                                                         GEqualFunc equal_function,
                                                         ...);

Passes if equal_function(expected, actual) == CUT_TRUE.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
static gboolean
equal_name (gconstpointer data1, gconstpointer data2)
{
    return g_str_equal(my_object_get_name(MY_OBJECT(data1)),
                       my_object_get_name(MY_OBJECT(data2)));
}

gcut_assert_equal_object_custom(object, object, equal_name);   -> Pass
gcut_assert_equal_object_custom(same_name_object1,
                                same_name_object2,
                                equal_name);                   -> Pass
gcut_assert_equal_object_custom(different_name_object1,
                                different_name_object2,
                                equal_name);                   -> Fail

expected :

an expected value.

actual :

an actual value.

equal_function :

a function that compare two objects.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_equal_int64 ()

void                gcut_assert_equal_int64             (gint64 expected,
                                                         gint64 actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_not_equal_int64 ()

void                gcut_assert_not_equal_int64         (gint64 expected,
                                                         gint64 actual,
                                                         ...);

Passes if expected != actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.1.4


gcut_assert_equal_uint64 ()

void                gcut_assert_equal_uint64            (guint64 expected,
                                                         guint64 actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.5


gcut_assert_not_equal_uint64 ()

void                gcut_assert_not_equal_uint64        (guint64 expected,
                                                         guint64 actual,
                                                         ...);

Passes if expected != actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.1.4


gcut_assert_equal_pid ()

void                gcut_assert_equal_pid               (GPid expected,
                                                         GPid actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.6


gcut_assert_not_equal_pid ()

void                gcut_assert_not_equal_pid           (GPid expected,
                                                         GPid actual,
                                                         ...);

Passes if expected != actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.0.7


gcut_assert_equal_string ()

void                gcut_assert_equal_string            (GString *expected,
                                                         GString *actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

Since 1.1.5

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Convenience-test-data-API.html0000644000175000017500000013767611525707421027272 0ustar koukou Convenience test data API

Convenience test data API

Convenience test data API — API to create test data without structure definition.

Synopsis

void                gcut_add_datum                      (const gchar *name,
                                                         const gchar *first_field_name,
                                                         ...);
gboolean            gcut_data_has_field                 (gconstpointer data,
                                                         const gchar *field_name);
#define             gcut_data_get_char                  (data,
                                                         field_name)
const gchar *       gcut_data_get_string                (gconstpointer data,
                                                         const gchar *field_name);
gint                gcut_data_get_int                   (gconstpointer data,
                                                         const gchar *field_name);
guint               gcut_data_get_uint                  (gconstpointer data,
                                                         const gchar *field_name);
#define             gcut_data_get_int64                 (data,
                                                         field_name)
#define             gcut_data_get_uint64                (data,
                                                         field_name)
#define             gcut_data_get_size                  (data,
                                                         field_name)
GType               gcut_data_get_type                  (gconstpointer data,
                                                         const gchar *field_name);
guint               gcut_data_get_flags                 (gconstpointer data,
                                                         const gchar *field_name);
gint                gcut_data_get_enum                  (gconstpointer data,
                                                         const gchar *field_name);
gconstpointer       gcut_data_get_pointer               (gconstpointer data,
                                                         const gchar *field_name);
gconstpointer       gcut_data_get_boxed                 (gconstpointer data,
                                                         const gchar *field_name);
#define             gcut_data_get_object                (data,
                                                         field_name)
#define             gcut_data_get_boolean               (data,
                                                         field_name)
#define             gcut_data_get_double                (data,
                                                         field_name)

Description

cut_add_data() requires custom data type for complex test data. But it's not easy to write. gcut_add_datum() provides API to use complex test data without custom data type. It uses GType for providing complex data.

Details

gcut_add_datum ()

void                gcut_add_datum                      (const gchar *name,
                                                         const gchar *first_field_name,
                                                         ...);

Adds a datum to be used in data driven test. It's convenient rather than cut_add_data() because you doesn't need to define a new structure for a complex test data.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <gcutter.h>

void data_translate (void);
void test_translate (gconstpointer data);

static const gchar*
translate (gint input)
{
   switch(input) {
   case 1:
       return "first";
   case 111:
       return "a hundred eleven";
   default:
       return "unsupported";
   }
}

void
data_translate(void)
{
    gcut_add_datum("simple data",
                   "translated", G_TYPE_STRING, "first",
                   "input", G_TYPE_INT, 1,
                   NULL);
    gcut_add_datum("complex data",
                   "translated", G_TYPE_STRING, "a hundred eleven",
                   "input", G_TYPE_INT, 111,
                   NULL);
}

void
test_translate(gconstpointer data)
{
    cut_assert_equal_string(gcut_data_get_string(data, "translated"),
                            gcut_data_get_int(data, "input"));
}

Available types and their values are the followings:

G_TYPE_CHAR

gchar value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_CHAR, 'X',
               NULL);

G_TYPE_STRING

const gchar *value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_STRING, "string value",
               NULL);

G_TYPE_INT

gint value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_INT, 100,
               NULL);

G_TYPE_UINT

guint value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_UINT, 100,
               NULL);

G_TYPE_INT64

gint64 value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_INT64, G_GINT64_CONSTANT(100),
               NULL);

G_TYPE_UINT64

guint64 value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_UINT64, G_GUINT64_CONSTANT(100),
               NULL);

G_TYPE_GTYPE

GType value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_GTYPE, G_TYPE_OBJECT,
               NULL);

GFlags types

its type value.

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", GTK_TYPE_WIDGET_FLAGS, GTK_TOPLEVEL | GTK_MAPPED,
               NULL);

GEnum types

its type value.

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", GTK_TYPE_WRAP_MODE, GTK_WRAP_NONE,
               NULL);

G_TYPE_POINTER

gconstpointer value, GDestroyNotify notify

notify is called when value is destroyed.

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_POINTER, my_structure_new(...), my_structure_free,
               NULL);

NOTE: value's ownership is passed to Cutter. Don't free it.

GBoxed types

its type value.

e.g.:

1
2
3
4
5
6
gcut_add_datum("data name",
               "field-name", G_TYPE_HASH_TABLE,
               gcut_hash_table_string_string_new("name1", "value1",
                                                 "name2", "value2",
                                                 NULL),
               NULL);

NOTE: value's ownership is passed to Cutter. Don't free it.

G_TYPE_BOOLEAN

gboolean value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_BOOLEAN, TRUE,
               NULL);

G_TYPE_DOUBLE

gdouble value

e.g.:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_DOUBLE, 2.9,
               NULL);

name :

the name of the data.

first_field_name :

the first field name.

... :

the type and value pair of the first field, followed optionally by the next field name, type and value triples. NULL-terminated. See description for more details.

Since 1.0.6


gcut_data_has_field ()

gboolean            gcut_data_has_field                 (gconstpointer data,
                                                         const gchar *field_name);

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

TRUE if data has a field_name field is available, FALSE otherwise.

Since 1.1.5


gcut_data_get_char()

#define             gcut_data_get_char(data, field_name)

Gets a field value identified by field_name as char.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.1.3


gcut_data_get_string ()

const gchar *       gcut_data_get_string                (gconstpointer data,
                                                         const gchar *field_name);

Gets a field value identified by field_name as string.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.0.6


gcut_data_get_int ()

gint                gcut_data_get_int                   (gconstpointer data,
                                                         const gchar *field_name);

Gets a field value identified by field_name as integer.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.0.6


gcut_data_get_uint ()

guint               gcut_data_get_uint                  (gconstpointer data,
                                                         const gchar *field_name);

Gets a field value identified by field_name as unsigned integer.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.0.6


gcut_data_get_int64()

#define             gcut_data_get_int64(data, field_name)

Gets a field value identified by field_name as 64-bit integer.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.1.3


gcut_data_get_uint64()

#define             gcut_data_get_uint64(data, field_name)

Gets a field value identified by field_name as 64-bit unsigned integer.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.1.3


gcut_data_get_size()

#define             gcut_data_get_size(data, field_name)

Gets a field value identified by field_name as size_t.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.1.3


gcut_data_get_type ()

GType               gcut_data_get_type                  (gconstpointer data,
                                                         const gchar *field_name);

Gets a field value identified by field_name as GType.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.0.6


gcut_data_get_flags ()

guint               gcut_data_get_flags                 (gconstpointer data,
                                                         const gchar *field_name);

Gets a field value identified by field_name as unsigned integer of GFlags.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.0.6


gcut_data_get_enum ()

gint                gcut_data_get_enum                  (gconstpointer data,
                                                         const gchar *field_name);

Gets a field value identified by field_name as integer of GEnum type.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.0.6


gcut_data_get_pointer ()

gconstpointer       gcut_data_get_pointer               (gconstpointer data,
                                                         const gchar *field_name);

Gets a field value identified by field_name as pointer.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.0.6


gcut_data_get_boxed ()

gconstpointer       gcut_data_get_boxed                 (gconstpointer data,
                                                         const gchar *field_name);

Gets a field value identified by field_name as GBoxed type value.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.0.7


gcut_data_get_object()

#define             gcut_data_get_object(data, field_name)

Gets a field value identified by field_name as GObject type value.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.1.1


gcut_data_get_boolean()

#define             gcut_data_get_boolean(data, field_name)

Gets a field value identified by field_name as boolean.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.1.3


gcut_data_get_double()

#define             gcut_data_get_double(data, field_name)

Gets a field value identified by field_name as double floating point number.

data :

the data added by gcut_add_datum().

field_name :

the field name.

Returns :

a field value corresponded to field_name.

Since 1.1.3

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-Utilities-for-GHashTable.html0000644000175000017500000004614111525707421031171 0ustar koukou Assertion Utilities for GHashTable

Assertion Utilities for GHashTable

Assertion Utilities for GHashTable — Utilities to write assertions related to GHashTable more easily.

Synopsis

gboolean            gcut_hash_table_equal               (GHashTable *hash1,
                                                         GHashTable *hash2,
                                                         GEqualFunc equal_func);
gchar *             gcut_hash_table_inspect             (GHashTable *hash,
                                                         GCutInspectFunction key_inspect_func,
                                                         GCutInspectFunction value_inspect_func,
                                                         gpointer user_data);
gchar *             gcut_hash_table_inspect_sorted      (GHashTable *hash,
                                                         GCutInspectFunction key_inspect_func,
                                                         GCutInspectFunction value_inspect_func,
                                                         GCompareFunc key_compare_func,
                                                         gpointer user_data);
gboolean            gcut_hash_table_string_equal        (GHashTable *hash1,
                                                         GHashTable *hash2);
gchar *             gcut_hash_table_string_string_inspect
                                                        (GHashTable *hash);
GHashTable *        gcut_hash_table_string_string_copy  (GHashTable *hash);

Description

To write assertions, you need to check equality and show expected and actual values.

The utilities help you to write assertions that are related to GHashTable.

Details

gcut_hash_table_equal ()

gboolean            gcut_hash_table_equal               (GHashTable *hash1,
                                                         GHashTable *hash2,
                                                         GEqualFunc equal_func);

Compares two GHashTable, hash1 and hash2. equal_func is called for each values of the same key of hash1 and hash2.

e.g.:

1
TODO

hash1 :

a GHashTable to be compared.

hash2 :

a GHashTable to be compared.

equal_func :

a function that compares two values.

Returns :

TRUE if all same key's values of hash1 and hash2 are reported TRUE by equal_func, FALSE otherwise.

Since 1.0.5


gcut_hash_table_inspect ()

gchar *             gcut_hash_table_inspect             (GHashTable *hash,
                                                         GCutInspectFunction key_inspect_func,
                                                         GCutInspectFunction value_inspect_func,
                                                         gpointer user_data);

Inspects hash. Each key of hash is inspected by key_inspect_func and each value of hash is inspected by value_inspect_func. The returned string should be freed when no longer needed.

e.g.:

1
TODO

hash :

a GHashTable to be inspected.

key_inspect_func :

a function that inspects each key.

value_inspect_func :

a function that inspects each value.

user_data :

user data to pass to the function.

Returns :

inspected hash as a string.

Since 1.0.5


gcut_hash_table_inspect_sorted ()

gchar *             gcut_hash_table_inspect_sorted      (GHashTable *hash,
                                                         GCutInspectFunction key_inspect_func,
                                                         GCutInspectFunction value_inspect_func,
                                                         GCompareFunc key_compare_func,
                                                         gpointer user_data);

Sorts hash as key by key_compare_func and inspects it. Each key of hash is inspected by key_inspect_func and each value of hash is inspected by value_inspect_func. The returned string should be freed when no longer needed.

If key_compare_func is NULL, hash isn't sorted. It is the same behavior as gcut_hash_table_inspect().

e.g.:

1
TODO

hash :

a GHashTable to be inspected and sorted.

key_inspect_func :

a function that inspects each key.

value_inspect_func :

a function that inspects each value.

key_compare_func :

a function that compares each key.

user_data :

user data to pass to the function.

Returns :

inspected and sorted hash as a string.

Since 1.0.9


gcut_hash_table_string_equal ()

gboolean            gcut_hash_table_string_equal        (GHashTable *hash1,
                                                         GHashTable *hash2);

Compares two GHashTable, hash1 and hash2. hash1 and hash2 should have string key and string value.

hash1 :

a GHashTable to be compared.

hash2 :

a GHashTable to be compared.

Returns :

TRUE if all same key's values of hash1 and hash2 are same string content, FALSE otherwise.

Since 1.0.5


gcut_hash_table_string_string_inspect ()

gchar *             gcut_hash_table_string_string_inspect
                                                        (GHashTable *hash);

Inspects hash. hash should have string key and string value. The returned string should be freed when no longer needed.

hash :

a GHashTable to be inspected.

Returns :

inspected hash as a string.

Since 1.0.5


gcut_hash_table_string_string_copy ()

GHashTable *        gcut_hash_table_string_string_copy  (GHashTable *hash);

Copy hash. hash should have string key and string value. The returned hash should be freed by g_hash_table_unref().

hash :

a GHashTable to be copied.

Returns :

copied GHashTable. It should be freed when no longer needed.

Since 1.0.8

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-Utilities-for-GString.html0000644000175000017500000001401711525707421030601 0ustar koukou Assertion Utilities for GString

Assertion Utilities for GString

Assertion Utilities for GString — Utilities to write assertions related to GString more easily.

Synopsis

gboolean            gcut_string_equal                   (const GString *string1,
                                                         const GString *string2);
gchar *             gcut_string_inspect                 (const GString *string);

Description

To write assertions, you need to check equality and show expected and actual values.

The utilities help you to write assertions that are related to GString.

Details

gcut_string_equal ()

gboolean            gcut_string_equal                   (const GString *string1,
                                                         const GString *string2);

Compares two GString, string1 and string2.

string1 :

a GString to be compared.

string2 :

a GString to be compared.

Returns :

TRUE if both of string1 and string2 have the same content, FALSE otherwise.

Since 1.1.5


gcut_string_inspect ()

gchar *             gcut_string_inspect                 (const GString *string);

Inspects string. The returned string should be freed when no longer needed.

string :

a GString value.

Returns :

inspected string as a string.

Since 1.1.5

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Object-inspection-functions.html0000644000175000017500000012045411525707421030112 0ustar koukou Object inspection functions

Object inspection functions

Object inspection functions — Functions to inspect an object for debugging.

Synopsis

void                gcut_inspect_direct                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_int                    (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_uint                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_int64                  (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_uint64                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_size                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_char                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_string                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_type                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_flags                  (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_enum                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_pointer                (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_boolean                (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_double                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Description

In test result, we need to know detail of inspected objects for debugging. Functions of this section help us to inspect interested objects.

Details

gcut_inspect_direct ()

void                gcut_inspect_direct                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as unsigned integer.

e.g.:

1
gcut_inspect_direct(string, GUINT_TO_POINTER(100), NULL) -> "100"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.0.6


gcut_inspect_int ()

void                gcut_inspect_int                    (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as integer.

e.g.:

1
2
gint int_value = 100;
gcut_inspect_int(string, &int_value, NULL) -> "100"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.0.6


gcut_inspect_uint ()

void                gcut_inspect_uint                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as unsigned integer.

e.g.:

1
2
guint uint_value = 100;
gcut_inspect_uint(string, &uint_value, NULL) -> "100"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.0.6


gcut_inspect_int64 ()

void                gcut_inspect_int64                  (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as 64-bit integer.

e.g.:

1
2
gint64 int64_value = 100;
gcut_inspect_int64(string, &int64_value, NULL) -> "100"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.1.3


gcut_inspect_uint64 ()

void                gcut_inspect_uint64                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as 64-bit unsigned integer.

e.g.:

1
2
guint64 uint64_value = 100;
gcut_inspect_uint64(string, &uint64_value, NULL) -> "100"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.1.3


gcut_inspect_size ()

void                gcut_inspect_size                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as unsigned integer.

e.g.:

1
2
gsize size_value = 100;
gcut_inspect_size(string, &size_value, NULL) -> "100"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.1.3


gcut_inspect_char ()

void                gcut_inspect_char                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as character.

e.g.:

1
2
3
gcut_inspect_char(string, 'C', NULL) -> "'C'"
gcut_inspect_char(string, '\0', NULL) -> "'\0'"
gcut_inspect_char(string, '\n', NULL) -> "'\n'"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.1.3


gcut_inspect_string ()

void                gcut_inspect_string                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as string. It also accepts NULL.

e.g.:

1
gcut_inspect_string(string, "string", NULL) -> "\"string\""

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.0.6


gcut_inspect_type ()

void                gcut_inspect_type                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as GType.

e.g.:

1
gcut_inspect_type(string, GTK_TYPE_WINDOW, NULL) -> "<GtkWindow>"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.0.6


gcut_inspect_flags ()

void                gcut_inspect_flags                  (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as value a GFlags type.

e.g.:

1
2
3
4
5
6
7
GType flags_type;
GtkWidgetFlags flags;

flags_type = GTK_TYPE_WIDGET_FLAGS;
flags = GTK_TOPLEVEL | GTK_VISIBLE;
gcut_inspect_flags(string, &flags, &flags_type);
-> #<GtkWidgetFlags: toplevel|visible (GTK_TOPLEVEL:0x10)|(GTK_VISIBLE:0x100)>

string :

the output string.

data :

the interested target.

user_data :

the pointer of GFlags type.

Since 1.0.6


gcut_inspect_enum ()

void                gcut_inspect_enum                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as value of a GEnum type.

e.g.:

1
2
3
4
5
6
7
GType enum_type;
GtkWidgetHelpType value;

enum_type = GTK_TYPE_WIDGET_HELP_TYPE;
value = GTK_WIDGET_HELP_TOOLTIP;
gcut_inspect_enum(string, &value, &enum_type);
-> #<GtkWidgetHelpType: tooltip(GTK_WIDGET_HELP_TOOLTIP:0)>

string :

the output string.

data :

the interested target.

user_data :

the pointer of GEnum type.

Since 1.0.6


gcut_inspect_pointer ()

void                gcut_inspect_pointer                (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as a pointer.

e.g.:

1
2
memory = malloc(1);
gcut_inspect_pointer(string, memory, NULL) -> "#<0xXXXXXXX>"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.0.6


gcut_inspect_boolean ()

void                gcut_inspect_boolean                (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as boolean.

e.g.:

1
2
3
4
5
6
gboolean boolean_value;

boolean_value = TRUE;
gcut_inspect_boolean(string, &boolean_value, NULL) -> "TRUE"
boolean_value = FALSE;
gcut_inspect_boolean(string, &boolean_value, NULL) -> "FALSE"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.1.3


gcut_inspect_double ()

void                gcut_inspect_double                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

Shows data as double floating point number.

e.g.:

1
2
gdouble double_value = 2.9;
gcut_inspect_double(string, &double_value, NULL) -> "2.9"

string :

the output string.

data :

the interested target.

user_data :

the data passed by user. (ignored)

Since 1.1.3

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-Utilities-for-GObject.html0000644000175000017500000002252111525707421030540 0ustar koukou Assertion Utilities for GObject

Assertion Utilities for GObject

Assertion Utilities for GObject — Utilities to write assertions related to GObject more easily.

Synopsis

gboolean            gcut_object_equal                   (const GObject *object1,
                                                         const GObject *object2,
                                                         GEqualFunc equal_func);
gchar *             gcut_object_inspect                 (const GObject *object);
gchar *             gcut_object_inspect_custom          (const GObject *object,
                                                         GCutInspectFunction inspect_func,
                                                         gpointer user_data);

Description

To write assertions, you need to check equality and show expected and actual values.

The utilities help you to write assertions that are related to GObject.

Details

gcut_object_equal ()

gboolean            gcut_object_equal                   (const GObject *object1,
                                                         const GObject *object2,
                                                         GEqualFunc equal_func);

Compares two GObject, object1 and object2 by equal_func. If equal_func is NULL, object1 and object2 is just only compared by memory location.

object1 :

a GObject to be compared.

object2 :

a GObject to be compared.

equal_func :

a function that compares two GObject. NULL is OK.

Returns :

TRUE if object1 == object2 or equal_func(object1, object2), FALSE otherwise.

Since 1.0.5


gcut_object_inspect ()

gchar *             gcut_object_inspect                 (const GObject *object);

Inspects object's property. The returned string should be freed when no longer needed.

object :

a GObject.

Returns :

inspected object as a string.

Since 1.0.5


gcut_object_inspect_custom ()

gchar *             gcut_object_inspect_custom          (const GObject *object,
                                                         GCutInspectFunction inspect_func,
                                                         gpointer user_data);

Inspects object by inspect_func. The returned string should be freed when no longer needed.

object :

a GObject.

inspect_func :

a function that inspects object.

user_data :

user data to pass to the function.

Returns :

inspected object as a string.

Since 1.0.5

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Available-features.html0000644000175000017500000001163711525707421026223 0ustar koukou Available features

Available features

Available features — Available features in the installed Cutter.

Description

There are some macros to check a feature is available in the installed Cutter.

Details

CUT_SUPPORT_GLIB

#define CUT_SUPPORT_GLIB 1

Shows GLib support is available. That is, we can use <gcutter.h>. It is always defined.


CUT_SUPPORT_GDK_PIXBUF

#define CUT_SUPPORT_GDK_PIXBUF 1

Shows GdkPixbuf support is available. That is, we can use <gdkcutter-pixbuf.h>.


CUT_SUPPORT_GIO

#define CUT_SUPPORT_GIO 1

Shows GIO support is available.


CUT_SUPPORT_LIBSOUP

#define CUT_SUPPORT_LIBSOUP 1

Shows LibSoup support is available.


CUT_SUPPORT_C99_STDINT_TYPES

#define CUT_SUPPORT_C99_STDINT_TYPES 1

Shows C99 stdint types support is available. That is, we can use assertions that use C99 stdint types. e.g. cut_assert_equal_int_least8().

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Cutter.html0000644000175000017500000013022411525707421023767 0ustar koukou Cutter

Cutter

Cutter — A Unit Testing Framework for C and C++.

Synopsis

void                setup                               (void);
void                cut_setup                           (void);
void                teardown                            (void);
void                cut_teardown                        (void);
void                cut_startup                         (void);
void                cut_shutdown                        (void);
#define             cut_add_data                        (first_data_name,
                                                         ...)
#define             cut_add_data_backward_compatibility (context,
                                                         ...)
#define             cut_set_attributes                  (first_attribute_name,
                                                         ...)
#define             cut_get_current_test_context
#define             cut_set_current_test_context        (test_context)
void                cut_set_message                     (const char *format,
                                                         ...);
void                cut_set_message_va_list             (const char *format,
                                                         va_list args);
void                cut_keep_message                    (void);
void                cut_message                         (const char *format,
                                                         ...);
#define             CUT_EXPORT

Description

Cutter is a Unit Testing Framework for C and C++ and has the following features:

  • Easy to use. Cutter doesn't introduce any magic macros like CUTTER_DEFINE_TEST_START and CUTTER_DEFINE_TEST_END into your test program. You can write your test program like normal program. You only use cut_assert_XXX() to check that your program works as you expect.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <cutter.h>
    #include "my-stack.h"
    
    void
    test_my_stack (void)
    {
        MyStack *stack = my_stack_new();
    
        cut_assert_not_null(stack);
        cut_assert(my_stack_is_empty(stack));
        cut_assert_equal_int(0, my_stack_get_size(stack));
    
        my_stack_push(stack, 10);
        cut_assert(!my_stack_is_empty(stack));
        cut_assert_equal_int(1, my_stack_get_size(stack));
    
        my_stack_push(stack, 20);
        cut_assert_equal_int(2, my_stack_get_size(stack));
    
        cut_assert_equal(20, my_stack_pop(stack));
        cut_assert(!my_stack_is_empty(stack));
        cut_assert_equal_int(1, my_stack_get_size(stack));
    
        cut_assert_equal(10, my_stack_pop(stack));
        cut_assert(my_stack_is_empty(stack));
        cut_assert_equal_int(0, my_stack_get_size(stack));
    }

  • Simple but useful output. Cutter works quietly if tests are running without any problems by default. The following is an output of self test:

    1
    2
    3
    4
    5
    ...........................................................
    
    Finished in 0.213021 seconds
    
    59 test(s), 246 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 notification(s)

    Cutter just outputs "." for a passed test and a summary at the end. Cutter doesn't output each test name, how many assertions are used for a test and so because we don't need the information on success.

    Cutter outputs many information on failure:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .....................F.....................................
    
    1) Failure: test_error
    <"Strange" == cut_test_result_get_test_name(result)>
    expected: <Strange!!!>
     but was: <dummy-error-test>
    test/test-cut-assertions.c:240: cut_assert_test_result()
    
    Finished in 0.223657 seconds
    
    59 test(s), 242 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s)

    The above result is happened because I add a strange expected staring in Cutter's self test:

    1
    cut_assert_equal_string("Strange!!!", cut_test_result_get_test_name(result));

    The strange assertion is written in the 240th line in test/test-cut-assertions.c and the line is in the cut_assert_test_result() function. The function is called in test_error test. We expected cut_test_result_get_test_name(result) should return "Strange!!!" but got "dummy-error-name". We can get the above information from Cutter output. This will help your debug.

    Cutter's output format is pragmatic. ' but was:' is indented and aligned with the above 'expected:'. This helps that you find difference between expected value and actual value by your eyes easily. The problem line is formated as 'FILENAME:LINE: FUNCTION' to integrate Emacs. In Emacs's compilation-mode, if the format is appeared in *compilation* buffer, we can jump to FILENAME at LINE with next-error command. (C-x `) This helps that you find the problem line rapidly.

    Cutter supports not only easy test writing but also easy debugging.

Details

setup ()

void                setup                               (void);

Warning

setup has been deprecated since version 1.0.7 and should not be used in newly-written code. Use cut_setup() instead.

If you define setup() in your test program, cutter will call your setup() before each your test is run. If you define cut_setup(), setup() is ignored.


cut_setup ()

void                cut_setup                           (void);

If you define cut_setup() in your test program, cutter will call your cut_setup() before each your test is run. cut_setup() has priority over setup().

Since 1.0.6


teardown ()

void                teardown                            (void);

Warning

teardown has been deprecated since version 1.0.7 and should not be used in newly-written code. Use cut_teardown() instead.

If you define teardown() in your test program, cutter will call your teardown() after each your test is run even if a test is failed. If you define cut_teardown(), teardown() is ignored.


cut_teardown ()

void                cut_teardown                        (void);

If you define cut_teardown() in your test program, cutter will call your cut_teardown() after each your test is run even if a test is failed. cut_teardown() has priority over teardown().

Since 1.0.6


cut_startup ()

void                cut_startup                         (void);

If you define cut_startup() in your test program, cutter will call your cut_startup() before each your test case is run. cut_startup() has priority over startup().

Since 1.0.6


cut_shutdown ()

void                cut_shutdown                        (void);

If you define shutdown() in your test program, cutter will call your shutdown() after each your test case is run. cut_shutdown() has priority over shutdown().

Since 1.0.6


cut_add_data()

#define             cut_add_data(first_data_name, ...)

Adds data to use data driven test.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <cutter.h>

void data_translate (void);
void test_translate (const void *data);

static const char*
translate (int input)
{
   switch(input) {
   case 1:
       return "first";
   case 111:
       return "a hundred eleven";
   default:
       return "unsupported";
   }
}

typedef struct _TranslateTestData
{
    char *translated;
    int input;
} TranslateTestData;

static TranslateTestData *
translate_test_data_new (char *translated, int input)
{
    TranslateTestData *data;

    data = malloc(sizeof(TranslateTestData));
    data->translated = strdup(translated);
    data->input = input;

    return data;
}

static void
translate_test_data_free (TranslateTestData *data)
{
    free(data->translated);
    free(data);
}

void
data_translate(void)
{
    cut_add_data("simple data",
                 translate_test_data_new("first", 1),
                 translate_test_data_free,
                 "complex data",
                 translate_test_data_new("a hundred eleven", 111),
                 translate_test_data_free,
                 NULL);
}

void
test_translate(const void *data)
{
     const TranslateTestData *test_data = data;

     cut_assert_equal_string(test_data->translated,
                             translate(test_data->input));
}

first_data_name :

The first data name.

... :

The data and destroy function of the first data, followed optionally by more name/data/destroy_function(CutDestroyFunction) triples. The variable arguments should be terminated by NULL since 1.0.6.

Since 1.0.3


cut_add_data_backward_compatibility()

#define             cut_add_data_backward_compatibility(context, ...)

Warning

cut_add_data_backward_compatibility is deprecated and should not be used in newly-written code.

context :

... :


cut_set_attributes()

#define             cut_set_attributes(first_attribute_name, ...)

Sets attributes of the test.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cutter.h>

void attributes_repeat (void);
void test_repeat (void);

void
attributes_repeat(void)
{
    cut_set_attributes("description", "a test for repeat function",
                       "bug", "111",
                       "priority", "high",
                       NULL);
}

void
test_repeat(void)
{
     cut_assert_equal_string_with_free("XXX", repeat("X", 3));
}

first_attribute_name :

The first attribute name.

... :

The value of the first attribute, followed optionally by more name/value pairs. NULL-terminate is required since 1.0.7.

Since 1.0.4


cut_get_current_test_context

#define             cut_get_current_test_context()

Returns the current test context. The current test context is a thread local object. It means that you don't need to care this if you don't create a new thread in your test. This is only needed to care if you create a new thread. You need to pass the current test context in your test thread to the current test context in a created thread.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int
your_thread_function(void *data)
{
    CutTestContext *test_context = data;
    cut_set_current_test_context(test_context);
    ...
}

void
run_your_thread(void)
{
    int result;
    pthread_t your_thread;

    result = pthread_create(&your_thread, NULL,
                            your_thread_function,
                            cut_get_current_test_context());
    ...
}

Returns :

a CutTestContext.

Since 1.0.4


cut_set_current_test_context()

#define             cut_set_current_test_context(test_context)

Set test_context as the current test context. See cut_get_current_test_context() for more details.

test_context :

the CutTestContext to be the current test context.

Since 1.0.4


cut_set_message ()

void                cut_set_message                     (const char *format,
                                                         ...);

Warning

cut_set_message has been deprecated since version 1.1.0 and should not be used in newly-written code. Use cut_message() instead.

Sets a message to be used by the next assertion.

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

Since 1.0.6


cut_set_message_va_list ()

void                cut_set_message_va_list             (const char *format,
                                                         va_list args);

Warning

cut_set_message_va_list has been deprecated since version 1.1.0 and should not be used in newly-written code. Use cut_message() instead.

Sets a message to be used by the next assertion.

format :

the message format. See the printf() documentation.

args :

the parameters to insert into the format string.

Since 1.0.6


cut_keep_message ()

void                cut_keep_message                    (void);

Warning

cut_keep_message has been deprecated since version 1.1.0 and should not be used in newly-written code. Use cut_message() instead.

Keeps the current message set by cut_set_message() or cut_set_message_va_list() after the next assertion.

Since 1.0.6


cut_message ()

void                cut_message                         (const char *format,
                                                         ...);

Specifies optional assertion message.

e.g.:

1
2
cut_assert_equal_string("abc", "def",
                        cut_message("should fail!"));

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

Since 1.1.0


CUT_EXPORT

#define             CUT_EXPORT

Marks a function as a exported function. This is needed for just Windows environment. If you want to run your tests on Windows, you need to use this. Otherwise, you don't need to use this.

e.g.:

1
2
3
4
5
CUT_EXPORT void
test_add (void)
{
  ...
}

Since 1.1.2

See Also

Assertions
cutter-testing-framework-1.1.7/doc/reference/html/news.html0000644000175000017500000020521511525707421022174 0ustar koukou NEWS

NEWS

NEWS — The history of Cutter

1.1.7: 2011-02-13

Cutter

Improvements

  • Supported growlnotify.

Changes

  • Droped Debian GNU/Linux lenny support.

Fixes

  • Fixed using unknown symbol on CentOS 5.5. [Reported by Hiroaki Nakamura]


Document

===== Fixes

  • Fixed typos in tutorial. [Reported by Hiroaki Nakamura]


Thanks

  • Hiroaki Nakamura

1.1.6: 2011-02-09

Cutter

Improvments

Fixes

  • Fixed a wrong test. [Suggested by Ilya Barygin]


cut-diff

Improvements


Thanks

  • Romuald Conty

  • Ilya Barygin

1.1.5: 2010-09-06

Cutter

Improvements

Fixes

  • Fixed locale depended tests. [Suggested by Romain Tartière]


cut-diff

Improvements


Documentation

Improvements

  • Used ports on FreeBSD. [Suggested by Romain Tartière]


Thanks

  • Romain Tartière

1.1.4: 2010-06-10

Supported CentOS.

Cutter

Improvements

Fixes

  • Fixed a bug that assertion message is ignored.


Document

Fixes

  • Debian, Ubuntu: Fixed file paths. [Reported by Romuald Conty]


Thanks

  • Romuald Conty

1.1.3: 2010-04-13

Improved test driven test support.

Cutter

Improvements

  • AC_CHECK_ENABLE_COVERAGE: Added a new 'coverage-force' target that reports coverage even if 'make check' is failed.

Bug fixes

  • Removed unneeded memory free [Reported by Zed Shaw]

  • AC_CHECK_ENABLE_COVERAGE: Fixed a bug that 8 spaces instead of a TAB is printed into Makefile.


GCutter

Bug fixes

  • Fixed a bug that gcut_list_inspect_enum() and gcut_list_inspect_flags() is crashed on Mac OS X.


Document

Bug fixes

  • Fixed dependency package list for Cygwin 1.7.


Thanks

  • Zed Shaw

1.1.2: 2010-04-03

Improves Windows support.

Cutter

Improvements

  • Supported lcov 1.8

  • Supported --enable-coverage=SOMETHING style. [Reported by gunyara-kun]

  • #2976775: Supported cut_omit() in cut_setup() [Reported by Romain Tartière]

  • Supported building and testing with Visual Studio C++ 2008


CppCutter

Improvements

  • Added CUT_EXPORT that is a macro to mark test function on Windows


Document

Improvements

  • Supported Ubuntu Karmic Koara.


Thanks

  • Romain Tartière

  • gunyara-kun

1.1.1: 2010-03-11

Bug in 1.1.0 fixes and improvements of GObject and sockaddr support.

Cutter

Improvements

Fixes

  • Fixed a build problem on having stdint.h but not having inttypes.h.


GCutter

Improvements

1.1.0: 2009-11-03

NOTE: This release includes API incompatibility.

Cutter

Improvements


CppCutter

Improvements


Thanks

  • Yuto Hayamizu

1.0.9: 2009-10-20

Improvements


Bug fixes

  • Fix locale dependent bugs [Reported by Yoshinori K. Okuji]


Thanks

  • Yoshinori K. Okuji

1.0.7: 2009-05-20

1.0.5: 2008-10-15

1.0.4: 2008-08-27

1.0.3: 2008-07-15

1.0.2: 2008-06-27

  • Support fixture data

    • cut_set_fixture_data_dir()

    • cut_get_fixture_data_string()

    • cut_build_fixture_data_path()

  • Add a utility

    • cut_remove_path()

  • Add assertions

    • cut_assert_equal_fixture_data_string()

    • cut_assert_path_not_exist()

    • cut_assert_remove_path()

    • cut_error_errno()

  • Experimental:

    • Windows support

1.0.1: 2008-06-13

  • Improve AC_CHECK_COVERAGE

  • Document:

    • Fix: Require GLib >= 2.16

  • Experimental:

    • Support GStreamer:

      • Transport test result to remote machine and so on

    • Support warmup()/cooldown()

1.0.0: 2008-05-20

  • Add assertions:

    • cut_assert_equal_pointer()

    • cut_assert_g_error()

    • cut_assert_match()

    • cut_assert_match_with_free()

  • Add --exclude-file option that specifies excluded files from test targets

  • Add --exclude-dir option that specifies excluded directories from test targets

  • Add --without-cutter to cutter.m4 (configure option)

  • Experimental:

    • Implement Cutter protocol (CutXMLStreamer and CutStreamParser)

    • Add cut_take_g_error()

    • Support Mac OS X

0.9.0: 2008-05-12

  • Add assertions.

    • cut_assert_equal_string_array_with_free()

    • cut_assert_true()

    • cut_assert_false()

    • cut_assert_file_exist()

  • Add AC_CHECK_GCUTTER

  • Experimental: Support GObject:

    • cut_take_g_object()

0.8.0: 2008-05-07

  • LGPL2 -> LGPL3

  • Add assertions.

    • cut_assert_equal_g_list_int()

    • cut_assert_equal_g_list_string()

    • cut_assert_errno()

  • Support omission: cut_omit()

  • Support startup/shutdown hooks that are ran on before test case start and end.

  • Support diff.

  • Support gcov.

  • Experimental: Support fork:

    • cut_fork()

    • cut_wait_process()

    • cut_fork_get_stdout_message()

    • cut_fork_get_stderr_message()

0.7.0: 2008-03-26

  • Fixed packaging failure.

  • Fixed --help-all.

  • Added a document for XML format reported by Cutter.

0.6.0: 2008-03-21

  • Added --xml-report option for reporting test result as XML.

  • Added --test-case-order option for sorting test case by name.

  • Added --version option for outputting Cutter version.

  • Added --disable-bfd option to configure.

0.5.0: 2008-03-10

  • Included missing cutter/gbsearcharray.h.

0.4.0: 2008-02-28

  • cut_pending() -> cut_pend().

  • Supported attributes.

0.3.0: 2007-12-14

  • Fixed documentation.

  • Marked cut_assert_equal_string_or_null() as deprecated.

  • cut_assert_equal_string() accepted NULL.

  • Removed an experimental API from document.

0.2.0: 2007-11-29

  • Initial release on SF.net.

cutter-testing-framework-1.1.7/doc/reference/html/index-1-1-3.html0000644000175000017500000000763711525707421022773 0ustar koukou Index of new symbols in 1.1.3

Index of new symbols in 1.1.3

C

cut_assert_equal_char, cut_assert_equal_char()
cut_assert_not_equal_char, cut_assert_not_equal_char()
cut_take_convert, cut_take_convert()

G

gcut_data_get_boolean, gcut_data_get_boolean()
gcut_data_get_char, gcut_data_get_char()
gcut_data_get_double, gcut_data_get_double()
gcut_data_get_int64, gcut_data_get_int64()
gcut_data_get_size, gcut_data_get_size()
gcut_data_get_uint64, gcut_data_get_uint64()
gcut_inspect_boolean, gcut_inspect_boolean ()
gcut_inspect_char, gcut_inspect_char ()
gcut_inspect_double, gcut_inspect_double ()
gcut_inspect_int64, gcut_inspect_int64 ()
gcut_inspect_size, gcut_inspect_size ()
gcut_inspect_uint64, gcut_inspect_uint64 ()
GCUT_TYPE_SIZE, GCUT_TYPE_SIZE
cutter-testing-framework-1.1.7/doc/reference/html/cutter-SoupCutter.html0000644000175000017500000001267511525707421024647 0ustar koukou SoupCutter

SoupCutter

SoupCutter — HTTP supported Cutter with libsoup.

Synopsis

#define             SOUPCUTTER_ENABLED

Description

SoupCutter adds many useful HTTP related features based on libsoup to Cutter. If you want to write tests for HTTP, it's good idea that you consider SoupCutter to be used too.

It's easy to use SoupCutter. You just include <soupcuttter.h> instead of <cutter.h> or <gcutter.h> and use soupcutter-pixbuf.pc instead of cutter.pc or gcutter.pc:

test-xxx.c:

1
2
-#include <cutter.h>
+#include <soupcutter.h>

configure.ac:

1
2
-AC_CHECK_CUTTER
+AC_CHECK_SOUPCUTTER

Makefile.am:

1
2
3
4
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(SOUPCUTTER_CFLAGS)
+XXX_LIBS = $(SOUPCUTTER_LIBS)

Details

SOUPCUTTER_ENABLED

#define SOUPCUTTER_ENABLED 1

Defined when SoupCutter is enabled.

Since 1.0.8

cutter-testing-framework-1.1.7/doc/reference/html/index-1-1-7.html0000644000175000017500000000315311525707421022764 0ustar koukou Index of new symbols in 1.1.7

Index of new symbols in 1.1.7

cutter-testing-framework-1.1.7/doc/reference/html/cutter.html0000644000175000017500000002643711525707421022535 0ustar koukou cutter

cutter

cutter — xUnit family unit testing framework for C and C++

NAME

cutter - xUnit family unit testing framework for C and C++

SYNOPSIS

cutter [ option ... ] test-directory

cutter --mode=analyze [ option ... ] log-directory

DESCRIPTION

Cutter is a xUnit family unit testing framework for C and C++. Cutter provides programmers two important interfaces:

  1. easy to write API

  2. easy to debug UI

Cutter helps programmers to write their new tests, run their existing tests, get feedbacks from ran their tests.

test-directory is a directory which has test_*.so. test_*.so are searched recursively.

log-directory is a directory which has Cutter log files. Cutter logs test results when --stream-directory option is specified.

OPTIONS

--version

Cutter shows its own version and exits.

--mode=[test|analyze]

It specifies run mode. Cutter runs tests when run mode is test. Cutter analyzes test results when run mode is analyze.

The default is test.

-s DIRECTORY, --source-directory=DIRECTORY

Cutter prepends DIRECTORY to file name when test fails. This is for tolls (like Emacs) which have function jumping to error line.

-t TEST_CASE_NAME, --test-case=TEST_CASE_NAME

Cutter runs test cases that are matched with TEST_CASE_NAME. If TEST_CASE_NAME is surrounded by "/" (e.g. /test_/), TEST_CASE_NAME is handled as regular expression.

This option can be specified n times. In the case, Cutter runs test cases that are matched with any TEST_CASE_NAME. (OR)

-n TEST_NAME, --name=TEST_NAME

Cutter runs tests that are matched with TEST_NAME. If TEST_NAME is surrounded by "/" (e.g. /test_/), TEST_NAME is handled as regular expression.

This option can be specified n times. In the case, Cutter runs test that are matched with any TEST_NAME. (OR)

-m, --multi-thread

Cutter runs a test case in a new thread.

The default is off.

--max-threads=MAX_THREADS

Run test cases and iterated tests with MAX_THREADS threads concurrently at a maximum. -1 means no limit.

The default is 10.

--disable-signal-handling

Disable signal handling that provides aborting test by C-c, provides backtrace on SEGV and so on. If your test target uses signal, Cutter's signal handling may cause a problem. In the case, you should disable Cutter's signal handling by this option.

The default is enabled.

--test-case-order=[none|name|name-desc]

It specifies test case order.

If 'none' is specified, Cutter doesn't sort. If 'name' is specified, Cutter sorts test cases by name in ascending order. If 'name-desc' is specified, Cutter sorts test cases by name in descending order.

The default is none.

--exclude-file=FILE

Cutter doesn't read FILE on test collecting.

--exclude-directory=DIRECTORY

Cutter doesn't search tests under DIRECTORY.

--fatal-failures

Cutter treats failures as fatal problem. It means that Cutter stops test run.

The default is off.

--keep-opening-modules

Cutter keeps opening loaded modules to resolve symbols for debugging.

The default is off.

--enable-convenience-attribute-definition

It enables convenience but danger "#{ATTRIBUTE_NAME}_#{TEST_NAME - 'test_' PREFIX}" attribute set function.

The default is off.

--stop-before-test

It sets a breakpoint immediately before each test. You can dive into test function easily by running cutter on your debugger and stepping into the next function.

The default is off.

-u[console|gtk], --ui=[console|gtk]

It specifies UI.

The default is console UI.

-v[s|silent|n|normal|v|verbose], --verbose=[s|silent|n|normal|v|verbose]

It specifies verbose level.

This option is only for console UI.

-c[yes|true|no|false|auto], --color=[yes|true|no|false|auto]

If 'yes' or 'true' is specified, Cutter uses colorized output by escape sequence. If 'no' or 'false' is specified, Cutter never use colorized output. If 'auto' or the option is omitted, Cutter uses colorized output if available.

This option is only for console UI.

--pdf-report=FILE

Cutter outputs a test report to FILE as PDF format.

--xml-report=FILE

Cutter outputs a test report to FILE as XML format.

--stream=[xml]

It specifies stream backend. Stream backend streams test results.

There is only XML stream backend for now.

--stream-fd=FILE_DESCRIPTOR

It specifies output file descriptor. The XML stream backend streams to FILE_DESCRIPTOR.

This option is only for XML stream backend.

--stream-directory=DIRECTORY

It specifies output directory. The XML stream backend streams to a file under DIRECTORY.

This option is only for XML stream backend.

-?, --help

Cutter shows common options.

--help-stream

Cutter shows stream related options.

--help-report

Cutter shows report related options.

--help-ui

Cutter shows UI related options.

--help-all

Cutter shows all options.

EXIT STATUS

The exit status is 0 if all tests are passed and non-0 otherwise. Omission test result and notification test result are not treated as failure.

FILES

/usr/local/share/doc/cutter/

The directory has Cutter documents. e.g. reference manual, tutorial and so on.

EXAMPLE

In the following example, cutter runs tests under tests/ directory and shows test progress verbosely.

% cutter -v v test/

In the following example, test results are saved under logs/ directory:

% cutter --stream=xml --stream-directory=logs/ test/

SEE ALSO

GLib's reference manual.

cutter-testing-framework-1.1.7/doc/reference/html/index.html0000644000175000017500000003357511525707421022337 0ustar koukou Cutter Reference Manual

for Cutter 1.1.7


I. Introduction
Overview of Cutter
NEWS — The history of Cutter
README — An introduction of Cutter, a Unit Testing Framework for C and C++
Features — What can be done with Cutter
Users — Projects and developers that use Cutter
Install Cutter to your platform
Install to Debian GNU/Linux — How to install Cutter to Debian GNU/Linux
Install to Ubuntu — How to install Cutter to Ubuntu
Install to Fedora — How to install Cutter to Fedora
Install to CentOS — How to install Cutter to CentOS
Install to FreeBSD — How to install Cutter to FreeBSD
Install to Solaris — How to install Cutter to Solaris
Install to Mac OS X — How to install Cutter to Mac OS X
Install to Cygwin — How to install Cutter to Cygwin
Install to other platform — How to install Cutter to other platform
Getting start
Tutorial — How to use Cutter
II. Reference
Command
cutter — xUnit family unit testing framework for C and C++
cut-diff — show difference between 2 files with color
Writing test
Cutter — A Unit Testing Framework for C and C++.
Version Information — Variables and macros to check the Cutter version
Available features — Available features in the installed Cutter.
Assertions — Checks that your program works as you expect.
Test Utilities — Utilities to write tests more easily.
Types — Types that is used in test.
Multi Process — Utilities to run your tests on multi processes.
GCutter — Cutter with GLib support.
Assertions with GLib support — Checks that your program works as you expect with GLib support.
Test Utilities with GLib support — Utilities to write tests more easily with GLib support.
Types for GLib support — Types that is used in test with GLib support.
Convenience test data API — API to create test data without structure definition.
External command — Convenience API for using external command.
External command (deprecated) — Convenience API for using external command. (deprecated)
Abstracted event loop — Abstracted event loop API for customizing event loop in GCutter.
GLib event loop — Event loop API for GLib main context and loop.
CppCutter — Cutter with C++ support.
Assertions with C++ support — Checks that your program works as you expect with C++ support.
GdkCutter Pixbuf — Cutter with gdk-pixbuf support.
Assertions with gdk-pixbuf support — Checks that your program works as you expect with gdk-pixbuf support.
SoupCutter — HTTP supported Cutter with libsoup.
Assertions for HTTP client and server — Checks that your HTTP client/server works as you expect with libsoup support.
Convenience HTTP client API — API to work as HTTP client.
Convenience HTTP server API — API to work as HTTP server.
Experimental — Experimental API.
Writing assertion
Assertion writing helper — Symbols in this section help you writing your own assertions.
Assertion Utilities for GEnum and GFlags — Utilities to write assertions related to GEnum or GFlags more easily.
Assertion Utilities for GError — Utilities to write assertions related to GError more easily.
Assertion Utilities for GHashTable — Utilities to write assertions related to GHashTable more easily.
Assertion Utilities for GList — Utilities to write assertions related to GList more easily.
Assertion Utilities for GObject — Utilities to write assertions related to GObject more easily.
Assertion Utilities for GValue — Utilities to write assertions related to GValue more easily.
Object inspection functions — Functions to inspect an object for debugging.
Assertion Utilities for GString — Utilities to write assertions related to GString more easily.
Index of all symbols
Index of deprecated symbols
Index of new symbols in 1.1.7
Index of new symbols in 1.1.6
Index of new symbols in 1.1.5
Index of new symbols in 1.1.4
Index of new symbols in 1.1.3
Index of new symbols in 1.1.2
Index of new symbols in 1.1.1
Index of new symbols in 1.1.0
Index of new symbols in 1.0.9
Index of new symbols in 1.0.8
Index of new symbols in 1.0.7
Index of new symbols in 1.0.6
Index of new symbols in 1.0.5
Index of new symbols in 1.0.4
Index of new symbols in 1.0.3
Index of new symbols in 1.0.2
Index of new symbols in 1.0.1
Index of new symbols in 1.0
Index of new symbols in 0.9
Index of new symbols in 0.8
Index of new symbols in 0.7
Index of new symbols in 0.6
Index of new symbols in 0.5
Index of new symbols in 0.4
Index of new symbols in 0.3
cutter-testing-framework-1.1.7/doc/reference/html/cutter-Convenience-HTTP-server-API.html0000644000175000017500000001634411525707421027453 0ustar koukou Convenience HTTP server API

Convenience HTTP server API

Convenience HTTP server API — API to work as HTTP server.

Synopsis

SoupServer *        soupcut_server_take                 (SoupServer *server);
SoupServer *        soupcut_server_take_new             (GMainContext *context);
const gchar *       soupcut_server_build_uri            (SoupServer *server,
                                                         const gchar *path);

Description

Useful wrappers for SoupServer are provided.

Details

soupcut_server_take ()

SoupServer *        soupcut_server_take                 (SoupServer *server);

server is shut down and unref when tear down.

server :

a SoupServer.

Returns :

server owned by Cutter. Don't g_object_unref() it.

Since 1.0.8


soupcut_server_take_new ()

SoupServer *        soupcut_server_take_new             (GMainContext *context);

Creates and returns a new SoupServer, whose context is context. The server is shut down and unref when tear down.

context :

a GMainContext for the main loop of a new server.

Returns :

a new SoupServer owned by Cutter. Don't g_object_unref() it.

Since 1.0.8


soupcut_server_build_uri ()

const gchar *       soupcut_server_build_uri            (SoupServer *server,
                                                         const gchar *path);

an URI is built and returned with the base uri of server and path.

server :

a SoupServer.

path :

a path.

Returns :

a new uri string owned by Cutter. Don't free it.

Since 1.0.8

cutter-testing-framework-1.1.7/doc/reference/html/nested-circle.png0000644000175000017500000000414111525702754023560 0ustar koukouPNG  IHDRddpTsRGBbKGD pHYs  tIME  E\tEXtCommentCreated with GIMPWIDATx{LSW }TByhiFXIy5 d&j_{h2eh( \$\`"RZTK>pHuޖ9OwL{-`1Gӱ`a Jf 6<&[qy\{83}l +p8&$<. }.qx2iaSI!g +-y#reg@n}"}j=uWn1~CaaVfvEoeC<|֫Ai엿Nh M<yzSXK^@ŀ l63,hUA8-&3zXbpCH?W`3C pN{G1XU GnFcCVH϶KUp8b`씔xe]:PzG-D d (-Sq7F$#E=fP2Rj w}•ME;fS揽@wD,>* wH"Tq* d#f#Yn_zGCIhN!QG;Fm4e ]e@a$/#{~xn 0 v8zGS$(#! Bσ 'zG볣0hX=zG) o$wD.MB E}d#8/0h'nDP]dgQm*Hzdgo GrF@:t |3@]s`Jg Ɣ"Ev!=u H0RZ_F`$nOm@/22B-e-Ŕ"cZd"PGj78rZ:Q)phE%ғzE:ç_}&g⇦8(s8|H%X;F$Ӡ_g{kGϒ2zXj'\t WHG*IZ}_m{6 I7q6լW-OE5Np#ޓeS=9;-3Mhˉj`ηXޙ*V0v*ʊ 5=dM˔KܼꜾ\gcS-s~SY&e4 &$s8j*˥ Ȯ +}[.w8a]JcV:\S%D2H88n*RO'gD%g[{=ѳ!iFI a@&/c k_,8 ^eɭ_N`뻱b*@0, @0, @>ήZIENDB`cutter-testing-framework-1.1.7/doc/reference/html/reference.html0000644000175000017500000002213411525707421023153 0ustar koukou Part II. Reference

Part II. Reference

Table of Contents

Command
cutter — xUnit family unit testing framework for C and C++
cut-diff — show difference between 2 files with color
Writing test
Cutter — A Unit Testing Framework for C and C++.
Version Information — Variables and macros to check the Cutter version
Available features — Available features in the installed Cutter.
Assertions — Checks that your program works as you expect.
Test Utilities — Utilities to write tests more easily.
Types — Types that is used in test.
Multi Process — Utilities to run your tests on multi processes.
GCutter — Cutter with GLib support.
Assertions with GLib support — Checks that your program works as you expect with GLib support.
Test Utilities with GLib support — Utilities to write tests more easily with GLib support.
Types for GLib support — Types that is used in test with GLib support.
Convenience test data API — API to create test data without structure definition.
External command — Convenience API for using external command.
External command (deprecated) — Convenience API for using external command. (deprecated)
Abstracted event loop — Abstracted event loop API for customizing event loop in GCutter.
GLib event loop — Event loop API for GLib main context and loop.
CppCutter — Cutter with C++ support.
Assertions with C++ support — Checks that your program works as you expect with C++ support.
GdkCutter Pixbuf — Cutter with gdk-pixbuf support.
Assertions with gdk-pixbuf support — Checks that your program works as you expect with gdk-pixbuf support.
SoupCutter — HTTP supported Cutter with libsoup.
Assertions for HTTP client and server — Checks that your HTTP client/server works as you expect with libsoup support.
Convenience HTTP client API — API to work as HTTP client.
Convenience HTTP server API — API to work as HTTP server.
Experimental — Experimental API.
Writing assertion
Assertion writing helper — Symbols in this section help you writing your own assertions.
Assertion Utilities for GEnum and GFlags — Utilities to write assertions related to GEnum or GFlags more easily.
Assertion Utilities for GError — Utilities to write assertions related to GError more easily.
Assertion Utilities for GHashTable — Utilities to write assertions related to GHashTable more easily.
Assertion Utilities for GList — Utilities to write assertions related to GList more easily.
Assertion Utilities for GObject — Utilities to write assertions related to GObject more easily.
Assertion Utilities for GValue — Utilities to write assertions related to GValue more easily.
Object inspection functions — Functions to inspect an object for debugging.
Assertion Utilities for GString — Utilities to write assertions related to GString more easily.
cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertions.html0000644000175000017500000056526211525707421024671 0ustar koukou Assertions

Assertions

Assertions — Checks that your program works as you expect.

Synopsis

void                cut_assert                          (cut_boolean expression,
                                                         ...);
void                cut_assert_true                     (cut_boolean expression,
                                                         ...);
void                cut_assert_false                    (cut_boolean expression,
                                                         ...);
void                cut_assert_equal_boolean            (cut_boolean expected,
                                                         cut_boolean actual,
                                                         ...);
void                cut_assert_not_equal_boolean        (cut_boolean expected,
                                                         cut_boolean actual,
                                                         ...);
void                cut_assert_null                     (const void *expression,
                                                         ...);
void                cut_assert_null_string              (const char *string,
                                                         ...);
void                cut_assert_not_null                 (const void *expression,
                                                         ...);
void                cut_assert_equal_int                (int expected,
                                                         int actual,
                                                         ...);
void                cut_assert_not_equal_int            (int expected,
                                                         int actual,
                                                         ...);
#define             cut_assert_equal_int_least8         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_least8     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_least16        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_least16    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_least32        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_least32    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_least64        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_least64    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_fast8          (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_fast8      (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_fast16         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_fast16     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_fast32         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_fast32     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_fast64         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_fast64     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_intptr             (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_intptr         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_intmax             (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_intmax         (expected,
                                                         actual,
                                                         ...)
void                cut_assert_equal_uint               (unsigned int expected,
                                                         unsigned int actual,
                                                         ...);
void                cut_assert_not_equal_uint           (unsigned int expected,
                                                         unsigned int actual,
                                                         ...);
#define             cut_assert_equal_uint_least8        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_least8    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_least16       (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_least16   (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_least32       (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_least32   (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_least64       (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_least64   (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_fast8         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_fast8     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_fast16        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_fast16    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_fast32        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_fast32    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_fast64        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_fast64    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uintptr            (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uintptr        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uintmax            (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uintmax        (expected,
                                                         actual,
                                                         ...)
void                cut_assert_equal_size               (size_t expected,
                                                         size_t actual,
                                                         ...);
void                cut_assert_not_equal_size           (size_t expected,
                                                         size_t actual,
                                                         ...);
void                cut_assert_equal_double             (double expected,
                                                         double error,
                                                         double actual,
                                                         ...);
void                cut_assert_not_equal_double         (double expected,
                                                         double error,
                                                         double actual,
                                                         ...);
#define             cut_assert_equal_char               (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_char           (expected,
                                                         actual,
                                                         ...)
void                cut_assert_equal_string             (const char *expected,
                                                         const char *actual,
                                                         ...);
void                cut_assert_not_equal_string         (const char *expected,
                                                         const char *actual,
                                                         ...);
void                cut_assert_equal_string_with_free   (const char *expected,
                                                         const char *actual,
                                                         ...);
void                cut_assert_equal_string_or_null     (const char *expected,
                                                         const char *actual,
                                                         ...);
void                cut_assert_equal_substring          (const char *expected,
                                                         const char *actual,
                                                         size_t length,
                                                         ...);
void                cut_assert_not_equal_substring      (const char *expected,
                                                         const char *actual,
                                                         size_t length,
                                                         ...);
void                cut_assert_equal_memory             (const void *expected,
                                                         size_t expected_size,
                                                         const void *actual,
                                                         size_t actual_size,
                                                         ...);
void                cut_assert_not_equal_memory         (const void *expected,
                                                         size_t expected_size,
                                                         const void *actual,
                                                         size_t actual_size,
                                                         ...);
void                cut_assert_equal_string_array       (char **expected,
                                                         char **actual,
                                                         ...);
void                cut_assert_equal_string_array_with_free
                                                        (char **expected,
                                                         char **actual,
                                                         ...);
#define             cut_assert_operator                 (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_operator_int             (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_operator_uint            (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_operator_size            (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_operator_double          (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_equal                    (function,
                                                         expected,
                                                         actual,
                                                         ...)
void                cut_assert_errno                    (...);
void                cut_assert_file_exist               (const char *path,
                                                         ...);
void                cut_assert_path_exist               (const char *path,
                                                         ...);
void                cut_assert_exist_path               (const char *path,
                                                         ...);
void                cut_assert_path_not_exist           (const char *path,
                                                         ...);
void                cut_assert_not_exist_path           (const char *path,
                                                         ...);
void                cut_assert_match                    (const char *pattern,
                                                         const char *actual,
                                                         ...);
void                cut_assert_match_with_free          (const char *pattern,
                                                         const char *actual,
                                                         ...);
void                cut_assert_equal_pointer            (const void *expected,
                                                         const void *actual,
                                                         ...);
void                cut_assert_equal_fixture_data_string
                                                        (const char *expected,
                                                         const void *path,
                                                         ...);
#define             cut_assert_equal_sockaddr           (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_file_raw           (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_file_raw       (expected,
                                                         actual,
                                                         ...)
void                cut_error                           (const char *format,
                                                         ...);
void                cut_error_errno                     (...);
void                cut_fail                            (const char *format,
                                                         ...);
void                cut_pend                            (const char *format,
                                                         ...);
void                cut_pending                         (const char *format,
                                                         ...);
void                cut_notify                          (const char *format,
                                                         ...);
void                cut_omit                            (const char *format,
                                                         ...);
void                cut_return                          (void);

Description

To check that your program works as you expect, you use cut_assert_XXX() where you want to check expected value is got.

e.g.:

1
cut_assert_equal_int(3, 1 + 2);

Details

cut_assert ()

void                cut_assert                          (cut_boolean expression,
                                                         ...);

Passes if expression is not 0 or NULL.

e.g.:

1
2
3
char *string;
string = malloc(16);
cut_assert(string);

1
2
3
MyObject *object;
object = my_object_new();
cut_assert(object, cut_message("my_object_new() should not be failed"));

expression :

the expression to be checked.

... :

optional message. See cut_message() for details.

cut_assert_true ()

void                cut_assert_true                     (cut_boolean expression,
                                                         ...);

Passes if expression is CUT_TRUE value (not 0 or NULL).

expression :

the expression to be checked.

... :

optional message. See cut_message() for details.

Since 0.9


cut_assert_false ()

void                cut_assert_false                    (cut_boolean expression,
                                                         ...);

Passes if expression is 0 or NULL.

expression :

the expression to be checked.

... :

optional message. See cut_message() for details.

Since 0.9


cut_assert_equal_boolean ()

void                cut_assert_equal_boolean            (cut_boolean expected,
                                                         cut_boolean actual,
                                                         ...);

Passes if both of expected and actual are CUT_TRUE value or both of expected and actual are CUT_FALSE value.

e.g.:

1
2
3
cut_assert_equal_boolean(CUT_TRUE, CUT_TRUE);   -> Pass
cut_assert_equal_boolean(CUT_FALSE, CUT_FALSE); -> Pass
cut_assert_equal_boolean(CUT_TRUE, CUT_FALSE);  -> Fail

expected :

the expected boolean.

actual :

the actual boolean.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_not_equal_boolean ()

void                cut_assert_not_equal_boolean        (cut_boolean expected,
                                                         cut_boolean actual,
                                                         ...);

Passes if expected is CUT_TRUE value but actual is CUT_FALSE value or expected is CUT_FALSE value but actual is CUT_TRUE value.

e.g.:

1
2
3
cut_assert_not_equal_boolean(CUT_TRUE, CUT_TRUE);   -> Fail
cut_assert_not_equal_boolean(CUT_FALSE, CUT_FALSE); -> Fail
cut_assert_not_equal_boolean(CUT_TRUE, CUT_FALSE);  -> Pass

expected :

the expected boolean.

actual :

the actual boolean.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_null ()

void                cut_assert_null                     (const void *expression,
                                                         ...);

Passes if expression is NULL.

expression :

the expression to be checked.

... :

optional message. See cut_message() for details.

cut_assert_null_string ()

void                cut_assert_null_string              (const char *string,
                                                         ...);

Passes if string is NULL.

string :

the string to be checked.

... :

optional message. See cut_message() for details.

Since 0.3


cut_assert_not_null ()

void                cut_assert_not_null                 (const void *expression,
                                                         ...);

Passes if expression is not NULL.

expression :

the expression to be checked.

... :

optional message. See cut_message() for details.

cut_assert_equal_int ()

void                cut_assert_equal_int                (int expected,
                                                         int actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

cut_assert_not_equal_int ()

void                cut_assert_not_equal_int            (int expected,
                                                         int actual,
                                                         ...);

Passes if expected != actual.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_equal_int_least8()

#define             cut_assert_equal_int_least8(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_int_least8()

#define             cut_assert_not_equal_int_least8(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_int_least16()

#define             cut_assert_equal_int_least16(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_int_least16()

#define             cut_assert_not_equal_int_least16(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_int_least32()

#define             cut_assert_equal_int_least32(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_int_least32()

#define             cut_assert_not_equal_int_least32(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_int_least64()

#define             cut_assert_equal_int_least64(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_int_least64()

#define             cut_assert_not_equal_int_least64(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_int_fast8()

#define             cut_assert_equal_int_fast8(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_int_fast8()

#define             cut_assert_not_equal_int_fast8(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_int_fast16()

#define             cut_assert_equal_int_fast16(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_int_fast16()

#define             cut_assert_not_equal_int_fast16(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_int_fast32()

#define             cut_assert_equal_int_fast32(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_int_fast32()

#define             cut_assert_not_equal_int_fast32(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_int_fast64()

#define             cut_assert_equal_int_fast64(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_int_fast64()

#define             cut_assert_not_equal_int_fast64(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_intptr()

#define             cut_assert_equal_intptr(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_intptr()

#define             cut_assert_not_equal_intptr(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_intmax()

#define             cut_assert_equal_intmax(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_intmax()

#define             cut_assert_not_equal_intmax(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected integer value.

actual :

an actual integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uint ()

void                cut_assert_equal_uint               (unsigned int expected,
                                                         unsigned int actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

cut_assert_not_equal_uint ()

void                cut_assert_not_equal_uint           (unsigned int expected,
                                                         unsigned int actual,
                                                         ...);

Passes if expected != actual.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_equal_uint_least8()

#define             cut_assert_equal_uint_least8(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uint_least8()

#define             cut_assert_not_equal_uint_least8(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uint_least16()

#define             cut_assert_equal_uint_least16(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uint_least16()

#define             cut_assert_not_equal_uint_least16(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uint_least32()

#define             cut_assert_equal_uint_least32(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uint_least32()

#define             cut_assert_not_equal_uint_least32(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uint_least64()

#define             cut_assert_equal_uint_least64(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uint_least64()

#define             cut_assert_not_equal_uint_least64(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uint_fast8()

#define             cut_assert_equal_uint_fast8(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uint_fast8()

#define             cut_assert_not_equal_uint_fast8(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uint_fast16()

#define             cut_assert_equal_uint_fast16(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uint_fast16()

#define             cut_assert_not_equal_uint_fast16(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uint_fast32()

#define             cut_assert_equal_uint_fast32(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uint_fast32()

#define             cut_assert_not_equal_uint_fast32(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uint_fast64()

#define             cut_assert_equal_uint_fast64(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uint_fast64()

#define             cut_assert_not_equal_uint_fast64(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uintptr()

#define             cut_assert_equal_uintptr(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uintptr()

#define             cut_assert_not_equal_uintptr(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_uintmax()

#define             cut_assert_equal_uintmax(expected, actual, ...)

Passes if expected == actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_not_equal_uintmax()

#define             cut_assert_not_equal_uintmax(expected, actual, ...)

Passes if expected != actual.

This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined.

expected :

an expected unsigned integer value.

actual :

an actual unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.1.0


cut_assert_equal_size ()

void                cut_assert_equal_size               (size_t expected,
                                                         size_t actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected size_t value.

actual :

an actual size_t value.

... :

optional message. See cut_message() for details.

Since 1.0.6


cut_assert_not_equal_size ()

void                cut_assert_not_equal_size           (size_t expected,
                                                         size_t actual,
                                                         ...);

Passes if expected != actual.

expected :

an expected size_t value.

actual :

an actual size_t value.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_equal_double ()

void                cut_assert_equal_double             (double expected,
                                                         double error,
                                                         double actual,
                                                         ...);

Passes if (expected - error) <= actual <= (expected + error).

expected :

an expected float value.

error :

a float value that specifies error range.

actual :

an actual float value.

... :

optional message. See cut_message() for details.

cut_assert_not_equal_double ()

void                cut_assert_not_equal_double         (double expected,
                                                         double error,
                                                         double actual,
                                                         ...);

Passes if actual < (expected - error) && (expected + error) < actual.

expected :

an expected float value.

error :

a float value that specifies error range.

actual :

an actual float value.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_equal_char()

#define             cut_assert_equal_char(expected, actual, ...)

Passes if expected == actual.

e.g.:

1
2
cut_assert_equal_char('a', 'a'); -> Pass
cut_assert_equal_char('a', 'b'); -> Fail

expected :

an expected char value.

actual :

an actual char value.

... :

optional message. See cut_message() for details.

Since 1.1.3


cut_assert_not_equal_char()

#define             cut_assert_not_equal_char(expected, actual, ...)

Passes if expected != actual.

e.g.:

1
2
cut_assert_not_equal_char('a', 'b'); -> Pass
cut_assert_not_equal_char('a', 'a'); -> Fail

expected :

an expected char value.

actual :

an actual char value.

... :

optional message. See cut_message() for details.

Since 1.1.3


cut_assert_equal_string ()

void                cut_assert_equal_string             (const char *expected,
                                                         const char *actual,
                                                         ...);

Passes if both expected and actual are NULL or strcmp(expected, actual) == 0.

e.g.:

1
2
3
4
5
cut_assert_equal_string("abc", "abc"); -> Pass
cut_assert_equal_string(NULL, NULL);   -> Pass
cut_assert_equal_string("abc", "ABC"); -> Fail
cut_assert_equal_string("abc", NULL);  -> Fail
cut_assert_equal_string(NULL, "abc");  -> Fail

expected :

an expected string value.

actual :

an actual string value.

... :

optional message. See cut_message() for details.

cut_assert_not_equal_string ()

void                cut_assert_not_equal_string         (const char *expected,
                                                         const char *actual,
                                                         ...);

Passes if one of expected and actual is NULL or strcmp(expected, actual) != 0.

e.g.:

1
2
3
4
5
cut_assert_not_equal_string("abc", NULL);  -> Pass
cut_assert_not_equal_string(NULL, "abc");  -> Pass
cut_assert_not_equal_string("abc", "ABC"); -> Pass
cut_assert_not_equal_string("abc", "abc"); -> Fail
cut_assert_not_equal_string(NULL, NULL);   -> Fail

expected :

an expected string value.

actual :

an actual string value.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_equal_string_with_free ()

void                cut_assert_equal_string_with_free   (const char *expected,
                                                         const char *actual,
                                                         ...);

Passes if both expected and actual are NULL or strcmp(expected, actual) == 0.

See also cut_assert_equal_string() for examples.

expected :

an expected string value.

actual :

an actual string value that is freed.

... :

optional message. See cut_message() for details.

Since 0.3


cut_assert_equal_string_or_null ()

void                cut_assert_equal_string_or_null     (const char *expected,
                                                         const char *actual,
                                                         ...);

Warning

cut_assert_equal_string_or_null has been deprecated since version 0.3 and should not be used in newly-written code. Use cut_assert_equal_string() instead.

expected :

an expected string value.

actual :

an actual string value.

... :

optional message. See cut_message() for details.

cut_assert_equal_substring ()

void                cut_assert_equal_substring          (const char *expected,
                                                         const char *actual,
                                                         size_t length,
                                                         ...);

Passes if (1) both expected and actual are NULL and length == 1 or (2) strncmp(expected, actual, length) == 0.

e.g.:

1
2
3
4
5
6
cut_assert_equal_substring("abcdef", "abcDEF", 3); -> Pass
cut_assert_equal_substring(NULL, NULL, 0);         -> Pass
cut_assert_equal_substring(NULL, NULL, 3);         -> Fail
cut_assert_equal_substring("abc", "ABC", 3);       -> Fail
cut_assert_equal_substring("abc", NULL, 3);        -> Fail
cut_assert_equal_substring(NULL, "abc", 3);        -> Fail

expected :

an expected string value.

actual :

an actual string value.

length :

compared string length.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_not_equal_substring ()

void                cut_assert_not_equal_substring      (const char *expected,
                                                         const char *actual,
                                                         size_t length,
                                                         ...);

Passes if (1) one of expected and actual is NULL or (2) strncmp(expected, actual, length) != 0.

e.g.:

1
2
3
4
5
6
cut_assert_not_equal_substring("abc", "ABC", 3);       -> Pass
cut_assert_not_equal_substring("abc", NULL, 3);        -> Pass
cut_assert_not_equal_substring(NULL, "abc", 3);        -> Pass
cut_assert_not_equal_substring("abcdef", "abcDEF", 3); -> Fail
cut_assert_not_equal_substring(NULL, NULL, 0);         -> Fail
cut_assert_not_equal_substring(NULL, NULL, 3);         -> Fail

expected :

an expected string value.

actual :

an actual string value.

length :

compared string length.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_equal_memory ()

void                cut_assert_equal_memory             (const void *expected,
                                                         size_t expected_size,
                                                         const void *actual,
                                                         size_t actual_size,
                                                         ...);

Passes if expected_size == actual_size and memcmp(expected, actual, expected_size) == 0.

expected :

an expected data.

expected_size :

a size of expected.

actual :

an actual data.

actual_size :

a size of actual.

... :

optional message. See cut_message() for details.

cut_assert_not_equal_memory ()

void                cut_assert_not_equal_memory         (const void *expected,
                                                         size_t expected_size,
                                                         const void *actual,
                                                         size_t actual_size,
                                                         ...);

Passes if expected_size != actual_size or memcmp(expected, actual, expected_size) != 0.

expected :

an expected data.

expected_size :

a size of expected.

actual :

an actual data.

actual_size :

a size of actual.

... :

optional message. See cut_message() for details.

Since 1.0.7


cut_assert_equal_string_array ()

void                cut_assert_equal_string_array       (char **expected,
                                                         char **actual,
                                                         ...);

Passes if both expected and actual are not NULL and have same content (strcmp() == 0) strings.

expected :

an expected NULL-terminated array of strings.

actual :

an actual NULL-terminated array of strings.

... :

optional message. See cut_message() for details.

cut_assert_equal_string_array_with_free ()

void                cut_assert_equal_string_array_with_free
                                                        (char **expected,
                                                         char **actual,
                                                         ...);

Passes if both expected and actual are not NULL and have same content (strcmp() == 0) strings.

expected :

an expected NULL-terminated array of strings.

actual :

an actual NULL-terminated array of strings that are freed.

... :

optional message. See cut_message() for details.

Since 0.9


cut_assert_operator()

#define             cut_assert_operator(lhs, operator, rhs, ...)

Passes if (lhs operator rhs) is TRUE.

e.g.:

1
cut_assert_operator(1, <, 2) -> (1 < 2);

lhs :

a left hand side value.

operator :

a binary operator.

rhs :

a right hand side value.

... :

optional message. See cut_message() for details.

cut_assert_operator_int()

#define             cut_assert_operator_int(lhs, operator, rhs, ...)

Passes if (lhs operator rhs) is TRUE.

e.g.:

1
cut_assert_operator_int(1, <, 2) -> (1 < 2);

lhs :

a left hand side integer value.

operator :

a binary operator.

rhs :

a right hand side integer value.

... :

optional message. See cut_message() for details.

cut_assert_operator_uint()

#define             cut_assert_operator_uint(lhs, operator, rhs, ...)

Passes if (lhs operator rhs) is TRUE.

e.g.:

1
cut_assert_operator_uint(1, <, 2) -> (1 < 2);

lhs :

a left hand side unsigned integer value.

operator :

a binary operator.

rhs :

a right hand side unsigned integer value.

... :

optional message. See cut_message() for details.

Since 1.0.5


cut_assert_operator_size()

#define             cut_assert_operator_size(lhs, operator, rhs, ...)

Passes if (lhs operator rhs) is TRUE.

e.g.:

1
cut_assert_operator_size(1, <, 2) -> (1 < 2);

lhs :

a left hand side size_t value.

operator :

a binary operator.

rhs :

a right hand side size_t value.

... :

optional message. See cut_message() for details.

Since 1.0.5


cut_assert_operator_double()

#define             cut_assert_operator_double(lhs, operator, rhs, ...)

Passes if (lhs operator rhs) is TRUE.

e.g.:

1
cut_assert_operator_double(1.1, <, 2.2) -> (1.1 < 2.2);

lhs :

a left hand side double value.

operator :

a binary operator.

rhs :

a right hand side double value.

... :

optional message. See cut_message() for details.

Since 1.0.5


cut_assert_equal()

#define             cut_assert_equal(function, expected, actual, ...)

Passes if function(expected, actual) returns CUT_TRUE.

e.g.:

1
cut_assert_equal(!strcmp, "abc", "abc"); -> Pass

function :

a function that compares actual with expected.

expected :

an expected value.

actual :

an actual value.

... :

optional message. See cut_message() for details.

cut_assert_errno ()

void                cut_assert_errno                    (...);

Passes if errno is 0.

e.g.:

1
2
count = write(stdout, buffer, strlen(buffer));
cut_assert_errno("Failed to write");            -> Pass when count != -1

... :

optional message. See cut_message() for details.

Since 0.8


cut_assert_file_exist ()

void                cut_assert_file_exist               (const char *path,
                                                         ...);

Warning

cut_assert_file_exist has been deprecated since version 1.0.2 and should not be used in newly-written code. Use cut_assert_path_exist() instead.

Passes if path exists. It may or may not be a regular file.

e.g.:

1
2
cut_assert_file_exist("/tmp");             -> Pass on many environment
cut_assert_file_exist("/non-existent");    -> Fail

path :

the path to test.

... :

optional message. See cut_message() for details.

Since 0.9


cut_assert_path_exist ()

void                cut_assert_path_exist               (const char *path,
                                                         ...);

Warning

cut_assert_path_exist has been deprecated since version 1.1.5 and should not be used in newly-written code. Use cut_assert_exist_path() instead.

Passes if path exists. It may or may not be a regular file.

e.g.:

1
2
cut_assert_path_exist("/tmp");             -> Pass on many environment
cut_assert_path_exist("/non-existent");    -> Fail

path :

the path to test.

... :

optional message. See cut_message() for details.

Since 1.0.2


cut_assert_exist_path ()

void                cut_assert_exist_path               (const char *path,
                                                         ...);

Passes if path exists. It may or may not be a regular file.

e.g.:

1
2
cut_assert_exist_path("/tmp");             -> Pass on many environment
cut_assert_exist_path("/non-existent");    -> Fail

path :

the path to test.

... :

optional message. See cut_message() for details.

Since 1.1.5


cut_assert_path_not_exist ()

void                cut_assert_path_not_exist           (const char *path,
                                                         ...);

Warning

cut_assert_path_not_exist has been deprecated since version 1.1.5 and should not be used in newly-written code. Use cut_assert_not_exist_path() instead.

Passes if path doesn't exist.

e.g.:

1
2
cut_assert_path_not_exist("/non-existent");    -> Pass on many environment
cut_assert_path_not_exist("/tmp");             -> Fail

path :

the path to test.

... :

optional message. See cut_message() for details.

Since 1.0.2


cut_assert_not_exist_path ()

void                cut_assert_not_exist_path           (const char *path,
                                                         ...);

Passes if path doesn't exist.

e.g.:

1
2
cut_assert_not_exist_path("/non-existent");    -> Pass on many environment
cut_assert_not_exist_path("/tmp");             -> Fail

path :

the path to test.

... :

optional message. See cut_message() for details.

Since 1.1.5


cut_assert_match ()

void                cut_assert_match                    (const char *pattern,
                                                         const char *actual,
                                                         ...);

Passes if pattern matches string.

e.g.:

1
2
cut_assert_match("^abc", "abc");            -> Pass
cut_assert_match("^abc", " abc");           -> Fail

pattern :

the regular expression pattern.

actual :

the string to be matched.

... :

optional message. See cut_message() for details.

Since 1.0


cut_assert_match_with_free ()

void                cut_assert_match_with_free          (const char *pattern,
                                                         const char *actual,
                                                         ...);

Passes if pattern matches string. See cut_assert_match() for detail.

pattern :

the regular expression as string.

actual :

the string to be matched that is freed.

... :

optional message. See cut_message() for details.

Since 1.0


cut_assert_equal_pointer ()

void                cut_assert_equal_pointer            (const void *expected,
                                                         const void *actual,
                                                         ...);

Passes if expected == actual.

expected :

an expected pointer.

actual :

an actual pointer.

... :

optional message. See cut_message() for details.

Since 1.0


cut_assert_equal_fixture_data_string ()

void                cut_assert_equal_fixture_data_string
                                                        (const char *expected,
                                                         const void *path,
                                                         ...);

Passes if expected == cut_get_fixture_data_string(path, ...).

expected :

an expected string.

path :

a first element of the path to the fixture data.

... :

remaining elements in path. NULL terminated.

Since 1.0.2


cut_assert_equal_sockaddr()

#define             cut_assert_equal_sockaddr(expected, actual, ...)

Passes if expected == actual.

This assertion can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT.

expected :

an expected socket address.

actual :

an actual socket address.

... :

optional message. See cut_message() for details.

Since 1.1.1


cut_assert_equal_file_raw()

#define             cut_assert_equal_file_raw(expected, actual, ...)

Passes if the content of expected == the content of actual.

expected :

a path.

actual :

a path.

... :

optional message. See cut_message() for details.

Since 1.1.4


cut_assert_not_equal_file_raw()

#define             cut_assert_not_equal_file_raw(expected, actual, ...)

Passes if the content of expected != the content of actual.

expected :

a path.

actual :

a path.

... :

optional message. See cut_message() for details.

Since 1.1.4


cut_error ()

void                cut_error                           (const char *format,
                                                         ...);

Raises an error with message.

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

cut_error_errno ()

void                cut_error_errno                     (...);

e.g.:

1
2
3
4
5
6
7
void
setup (void)
{
    mkdir("tmp", 0700);
    cut_error_errno("Failed to make tmp directory");
      -> Error when tmp directory isn't made successfully.
}

... :

optional message. See cut_message() for details.

Since 1.0.2


cut_fail ()

void                cut_fail                            (const char *format,
                                                         ...);

Raises a failure with message.

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

cut_pend ()

void                cut_pend                            (const char *format,
                                                         ...);

Marks the test is pending with message. The test is stopped.

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

cut_pending ()

void                cut_pending                         (const char *format,
                                                         ...);

Warning

cut_pending has been deprecated since version 0.4 and should not be used in newly-written code. Use cut_pend() instead.

Marks the test is pending with message. The test is stopped.

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

cut_notify ()

void                cut_notify                          (const char *format,
                                                         ...);

Leaves a notification message. The test is continued.

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

cut_omit ()

void                cut_omit                            (const char *format,
                                                         ...);

Omit the test.

e.g.:

1
2
if (version < 2.0)
  cut_omit("Require >= 2.0");

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

Since 0.8


cut_return ()

void                cut_return                          (void);

Finish the test.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void
sub_xxx (void)
{
  some_assertions();
  if (no_need_more_test)
    cut_return();
  some_assertions();
}

void
test_xxx (void)
{
   some_assertions();
   cut_trace(sub_xxx());
   some_assertions();
}

Since 1.0.6

cutter-testing-framework-1.1.7/doc/reference/html/index.sgml0000644000175000017500000021004311525702754022324 0ustar koukou cutter-testing-framework-1.1.7/doc/reference/html/cutter-Version-Information.html0000644000175000017500000001307111525707421026431 0ustar koukou Version Information

Version Information

Version Information — Variables and macros to check the Cutter version

Synopsis

#define             CUTTER_VERSION_MAJOR
#define             CUTTER_VERSION_MINOR
#define             CUTTER_VERSION_MICRO
#define             CUTTER_VERSION_STRING
#define             CUTTER_CHECK_VERSION                (major,
                                                         minor,
                                                         micro)

Description

Cutter provides version information, primarily useful in configure checks for builds that have a configure script. Tests will not typically use the features described here.

Details

CUTTER_VERSION_MAJOR

#define CUTTER_VERSION_MAJOR 1

The major version number of the Cutter.


CUTTER_VERSION_MINOR

#define CUTTER_VERSION_MINOR 1

The minor version number of the Cutter.


CUTTER_VERSION_MICRO

#define CUTTER_VERSION_MICRO 7

The micro version number of the Cutter.


CUTTER_VERSION_STRING

#define CUTTER_VERSION_STRING "1.1.7"

The version number string of the Cutter with "#{MAJOR}.#{MINOR}.#{MICRO}" format.


CUTTER_CHECK_VERSION()

#define             CUTTER_CHECK_VERSION(major, minor, micro)

Checks the version of the Cutter. Returns true if the version of the Cutter header files is the same as or newer than the passed-in version.

major :

the major version number.

minor :

the minor version number.

micro :

the micro version number.

Since 1.0.7

cutter-testing-framework-1.1.7/doc/reference/html/cutter-GdkCutter-Pixbuf.html0000644000175000017500000001305111525707421025646 0ustar koukou GdkCutter Pixbuf

GdkCutter Pixbuf

GdkCutter Pixbuf — Cutter with gdk-pixbuf support.

Synopsis

#define             GDKCUTTER_PIXBUF_ENABLED

Description

GdkCutter Pixbuf adds many useful features based on gdk-pixbuf to Cutter. If you want to write tests for image, it's good idea that you consider GdkCutter Pixbuf to be used too.

It's easy to use GdkCutter Pixbuf. You just include <gdk-cutter-pixbuf.h> instead of <cutter.h> or <gcutter.h> and use gdkcutter-pixbuf.pc instead of cutter.pc or gcutter.pc:

test-xxx.c:

1
2
-#include <cutter.h>
+#include <gdkcutter-pixbuf.h>

configure.ac:

1
2
-AC_CHECK_CUTTER
+AC_CHECK_GDKCUTTER_PIXBUF

Makefile.am:

1
2
3
4
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(GDKCUTTER_PIXBUF_CFLAGS)
+XXX_LIBS = $(GDKCUTTER_PIXBUF_LIBS)

Details

GDKCUTTER_PIXBUF_ENABLED

#define GDKCUTTER_PIXBUF_ENABLED 1

Defined when GdkCutter Pixbuf is enabled.

Since 1.0.6

cutter-testing-framework-1.1.7/doc/reference/html/overview.html0000644000175000017500000000436311525707421023067 0ustar koukou Overview of Cutter

Overview of Cutter

NEWS — The history of Cutter
README — An introduction of Cutter, a Unit Testing Framework for C and C++
Features — What can be done with Cutter
Users — Projects and developers that use Cutter
cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertions-for-HTTP-client-and-server.html0000644000175000017500000003331411525707421031536 0ustar koukou Assertions for HTTP client and server

Assertions for HTTP client and server

Assertions for HTTP client and server — Checks that your HTTP client/server works as you expect with libsoup support.

Synopsis

void                soupcut_message_assert_equal_content_type
                                                        (const gchar *expected,
                                                         SoupMessage *message,
                                                         ...);
void                soupcut_client_assert_equal_content_type
                                                        (const gchar *expected,
                                                         SoupCutClient *client,
                                                         ...);
void                soupcut_client_assert_response      (SoupCutClient *client,
                                                         ...);
void                soupcut_client_assert_equal_body    (const gchar *expected,
                                                         SoupCutClient *client,
                                                         ...);
void                soupcut_client_assert_match_body    (const gchar *pattern,
                                                         SoupCutClient *client,
                                                         ...);

Description

Details

soupcut_message_assert_equal_content_type ()

void                soupcut_message_assert_equal_content_type
                                                        (const gchar *expected,
                                                         SoupMessage *message,
                                                         ...);

Passes if expected == message->response_headers->content_type.

expected :

an expected Content-Type.

message :

a SoupMessage.

... :

optional message. See cut_message() for details.

Since 1.0.8


soupcut_client_assert_equal_content_type ()

void                soupcut_client_assert_equal_content_type
                                                        (const gchar *expected,
                                                         SoupCutClient *client,
                                                         ...);

Passes if expected equals to Content-Type of the latest message of client.

expected :

an expected Content-Type.

client :

a SoupCutClient.

... :

optional message. See cut_message() for details.

Since 1.0.8


soupcut_client_assert_response ()

void                soupcut_client_assert_response      (SoupCutClient *client,
                                                         ...);

Passes if status code of client is 2XX.

client :

a SoupCutClient.

... :

optional message. See cut_message() for details.

Since 1.0.8


soupcut_client_assert_equal_body ()

void                soupcut_client_assert_equal_body    (const gchar *expected,
                                                         SoupCutClient *client,
                                                         ...);

Passes if expected == client->response_body->data.

expected :

an expected response body.

client :

a SoupCutClient.

... :

optional message. See cut_message() for details.

Since 1.0.8


soupcut_client_assert_match_body ()

void                soupcut_client_assert_match_body    (const gchar *pattern,
                                                         SoupCutClient *client,
                                                         ...);

Passes if pattern matches the response body of the latest message of client.

pattern :

the regular expression pattern.

client :

a SoupCutClient.

... :

optional message. See cut_message() for details.

Since 1.0.8

cutter-testing-framework-1.1.7/doc/reference/html/cutter-GCutGLibEventLoop.html0000644000175000017500000001224111525707421025753 0ustar koukou GLib event loop

GLib event loop

GLib event loop — Event loop API for GLib main context and loop.

Description

GCutGLibEventLoop is an GCutEventLoop implementation for GLib's main context and loop.

Details

GCutGLibEventLoop

typedef struct {
    GCutEventLoop object;
} GCutGLibEventLoop;


GCutGLibEventLoopClass

typedef struct {
    GCutEventLoopClass parent_class;
} GCutGLibEventLoopClass;


gcut_glib_event_loop_new ()

GCutEventLoop *     gcut_glib_event_loop_new            (GMainContext *context);

Creates a new GCutEeventLoop for context. If context is NULL, the default GLib's main context is used.

context :

a GMainContext or NULL

Returns :

a new GCutEventLoop.

Since 1.1.6

cutter-testing-framework-1.1.7/doc/reference/html/index-0-7.html0000644000175000017500000000311711525707421022625 0ustar koukou Index of new symbols in 0.7

Index of new symbols in 0.7

cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-5.html0000644000175000017500000002432411525707421022764 0ustar koukou Index of new symbols in 1.0.5

Index of new symbols in 1.0.5

C

cut_assert_operator_double, cut_assert_operator_double()
cut_assert_operator_size, cut_assert_operator_size()
cut_assert_operator_uint, cut_assert_operator_uint()
cut_equal_double, cut_equal_double ()
cut_equal_string, cut_equal_string ()
cut_sub_process_get_max_threads, cut_sub_process_get_max_threads ()
cut_sub_process_set_max_threads, cut_sub_process_set_max_threads ()
cut_take, cut_take ()
cut_take_memdup, cut_take_memdup ()
cut_take_memory, cut_take_memory ()
cut_take_strdup, cut_take_strdup ()
cut_take_strndup, cut_take_strndup ()
cut_test_fail, cut_test_fail ()
cut_test_fail_va_list, cut_test_fail_va_list ()
cut_test_pass, cut_test_pass ()
cut_trace, cut_trace()
cut_trace_with_info_expression, cut_trace_with_info_expression()

G

gcut_assert_equal_enum, gcut_assert_equal_enum ()
gcut_assert_equal_error, gcut_assert_equal_error ()
gcut_assert_equal_flags, gcut_assert_equal_flags ()
gcut_assert_equal_int64, gcut_assert_equal_int64 ()
gcut_assert_equal_list_enum, gcut_assert_equal_list_enum ()
gcut_assert_equal_list_flags, gcut_assert_equal_list_flags ()
gcut_assert_equal_list_object, gcut_assert_equal_list_object ()
gcut_assert_equal_list_object_custom, gcut_assert_equal_list_object_custom ()
gcut_assert_equal_object, gcut_assert_equal_object ()
gcut_assert_equal_object_custom, gcut_assert_equal_object_custom ()
gcut_assert_equal_uint64, gcut_assert_equal_uint64 ()
gcut_enum_inspect, gcut_enum_inspect ()
gcut_error_equal, gcut_error_equal ()
gcut_error_inspect, gcut_error_inspect ()
gcut_flags_inspect, gcut_flags_inspect ()
gcut_hash_table_equal, gcut_hash_table_equal ()
gcut_hash_table_inspect, gcut_hash_table_inspect ()
gcut_hash_table_string_equal, gcut_hash_table_string_equal ()
gcut_hash_table_string_string_inspect, gcut_hash_table_string_string_inspect ()
gcut_hash_table_string_string_new_va_list, gcut_hash_table_string_string_new_va_list ()
gcut_list_enum_inspect, gcut_list_enum_inspect()
gcut_list_equal, gcut_list_equal ()
gcut_list_flags_inspect, gcut_list_flags_inspect()
gcut_list_inspect, gcut_list_inspect ()
gcut_list_int_equal, gcut_list_int_equal()
gcut_list_int_inspect, gcut_list_int_inspect()
gcut_list_object_inspect, gcut_list_object_inspect()
gcut_list_string_equal, gcut_list_string_equal()
gcut_list_string_inspect, gcut_list_string_inspect()
gcut_list_uint_equal, gcut_list_uint_equal()
gcut_list_uint_inspect, gcut_list_uint_inspect()
gcut_object_equal, gcut_object_equal ()
gcut_object_inspect, gcut_object_inspect ()
gcut_object_inspect_custom, gcut_object_inspect_custom ()
gcut_take_new_hash_table_string_string, gcut_take_new_hash_table_string_string ()
gcut_take_new_list_string, gcut_take_new_list_string ()
gcut_value_equal, gcut_value_equal ()
gcut_value_register_equal_func, gcut_value_register_equal_func ()
gdkcut_pixbuf_assert_equal, gdkcut_pixbuf_assert_equal ()
cutter-testing-framework-1.1.7/doc/reference/html/index-all.html0000644000175000017500000020317711525707421023102 0ustar koukou Index of all symbols

Index of all symbols

C

CPPCUTTER_ENABLED, CPPCUTTER_ENABLED
cppcut_assert_equal, cppcut_assert_equal()
CPPCUT_BEGIN_TEST_DECLS, CPPCUT_BEGIN_TEST_DECLS
CPPCUT_END_TEST_DECLS, CPPCUT_END_TEST_DECLS
cppcut_message, cppcut_message()
CutCallbackFunction, CutCallbackFunction ()
CutDestroyFunction, CutDestroyFunction ()
CutSubProcess, CutSubProcess
CutSubProcessGroup, CutSubProcessGroup
CUTTER_CHECK_VERSION, CUTTER_CHECK_VERSION()
CUTTER_VERSION_MAJOR, CUTTER_VERSION_MAJOR
CUTTER_VERSION_MICRO, CUTTER_VERSION_MICRO
CUTTER_VERSION_MINOR, CUTTER_VERSION_MINOR
CUTTER_VERSION_STRING, CUTTER_VERSION_STRING
cut_add_data, cut_add_data()
cut_add_data_backward_compatibility, cut_add_data_backward_compatibility()
cut_append_diff, cut_append_diff ()
cut_assert, cut_assert ()
cut_assert_equal, cut_assert_equal()
cut_assert_equal_boolean, cut_assert_equal_boolean ()
cut_assert_equal_char, cut_assert_equal_char()
cut_assert_equal_double, cut_assert_equal_double ()
cut_assert_equal_file_raw, cut_assert_equal_file_raw()
cut_assert_equal_fixture_data_string, cut_assert_equal_fixture_data_string ()
cut_assert_equal_g_list_int, cut_assert_equal_g_list_int ()
cut_assert_equal_g_list_string, cut_assert_equal_g_list_string ()
cut_assert_equal_g_type, cut_assert_equal_g_type ()
cut_assert_equal_g_value, cut_assert_equal_g_value ()
cut_assert_equal_int, cut_assert_equal_int ()
cut_assert_equal_intmax, cut_assert_equal_intmax()
cut_assert_equal_intptr, cut_assert_equal_intptr()
cut_assert_equal_int_fast16, cut_assert_equal_int_fast16()
cut_assert_equal_int_fast32, cut_assert_equal_int_fast32()
cut_assert_equal_int_fast64, cut_assert_equal_int_fast64()
cut_assert_equal_int_fast8, cut_assert_equal_int_fast8()
cut_assert_equal_int_least16, cut_assert_equal_int_least16()
cut_assert_equal_int_least32, cut_assert_equal_int_least32()
cut_assert_equal_int_least64, cut_assert_equal_int_least64()
cut_assert_equal_int_least8, cut_assert_equal_int_least8()
cut_assert_equal_memory, cut_assert_equal_memory ()
cut_assert_equal_pointer, cut_assert_equal_pointer ()
cut_assert_equal_size, cut_assert_equal_size ()
cut_assert_equal_sockaddr, cut_assert_equal_sockaddr()
cut_assert_equal_string, cut_assert_equal_string ()
cut_assert_equal_string_array, cut_assert_equal_string_array ()
cut_assert_equal_string_array_with_free, cut_assert_equal_string_array_with_free ()
cut_assert_equal_string_or_null, cut_assert_equal_string_or_null ()
cut_assert_equal_string_with_free, cut_assert_equal_string_with_free ()
cut_assert_equal_substring, cut_assert_equal_substring ()
cut_assert_equal_uint, cut_assert_equal_uint ()
cut_assert_equal_uintmax, cut_assert_equal_uintmax()
cut_assert_equal_uintptr, cut_assert_equal_uintptr()
cut_assert_equal_uint_fast16, cut_assert_equal_uint_fast16()
cut_assert_equal_uint_fast32, cut_assert_equal_uint_fast32()
cut_assert_equal_uint_fast64, cut_assert_equal_uint_fast64()
cut_assert_equal_uint_fast8, cut_assert_equal_uint_fast8()
cut_assert_equal_uint_least16, cut_assert_equal_uint_least16()
cut_assert_equal_uint_least32, cut_assert_equal_uint_least32()
cut_assert_equal_uint_least64, cut_assert_equal_uint_least64()
cut_assert_equal_uint_least8, cut_assert_equal_uint_least8()
cut_assert_errno, cut_assert_errno ()
cut_assert_exist_path, cut_assert_exist_path ()
cut_assert_false, cut_assert_false ()
cut_assert_file_exist, cut_assert_file_exist ()
cut_assert_g_error, cut_assert_g_error ()
cut_assert_match, cut_assert_match ()
cut_assert_match_with_free, cut_assert_match_with_free ()
cut_assert_not_equal_boolean, cut_assert_not_equal_boolean ()
cut_assert_not_equal_char, cut_assert_not_equal_char()
cut_assert_not_equal_double, cut_assert_not_equal_double ()
cut_assert_not_equal_file_raw, cut_assert_not_equal_file_raw()
cut_assert_not_equal_int, cut_assert_not_equal_int ()
cut_assert_not_equal_intmax, cut_assert_not_equal_intmax()
cut_assert_not_equal_intptr, cut_assert_not_equal_intptr()
cut_assert_not_equal_int_fast16, cut_assert_not_equal_int_fast16()
cut_assert_not_equal_int_fast32, cut_assert_not_equal_int_fast32()
cut_assert_not_equal_int_fast64, cut_assert_not_equal_int_fast64()
cut_assert_not_equal_int_fast8, cut_assert_not_equal_int_fast8()
cut_assert_not_equal_int_least16, cut_assert_not_equal_int_least16()
cut_assert_not_equal_int_least32, cut_assert_not_equal_int_least32()
cut_assert_not_equal_int_least64, cut_assert_not_equal_int_least64()
cut_assert_not_equal_int_least8, cut_assert_not_equal_int_least8()
cut_assert_not_equal_memory, cut_assert_not_equal_memory ()
cut_assert_not_equal_size, cut_assert_not_equal_size ()
cut_assert_not_equal_string, cut_assert_not_equal_string ()
cut_assert_not_equal_substring, cut_assert_not_equal_substring ()
cut_assert_not_equal_uint, cut_assert_not_equal_uint ()
cut_assert_not_equal_uintmax, cut_assert_not_equal_uintmax()
cut_assert_not_equal_uintptr, cut_assert_not_equal_uintptr()
cut_assert_not_equal_uint_fast16, cut_assert_not_equal_uint_fast16()
cut_assert_not_equal_uint_fast32, cut_assert_not_equal_uint_fast32()
cut_assert_not_equal_uint_fast64, cut_assert_not_equal_uint_fast64()
cut_assert_not_equal_uint_fast8, cut_assert_not_equal_uint_fast8()
cut_assert_not_equal_uint_least16, cut_assert_not_equal_uint_least16()
cut_assert_not_equal_uint_least32, cut_assert_not_equal_uint_least32()
cut_assert_not_equal_uint_least64, cut_assert_not_equal_uint_least64()
cut_assert_not_equal_uint_least8, cut_assert_not_equal_uint_least8()
cut_assert_not_exist_path, cut_assert_not_exist_path ()
cut_assert_not_null, cut_assert_not_null ()
cut_assert_null, cut_assert_null ()
cut_assert_null_string, cut_assert_null_string ()
cut_assert_operator, cut_assert_operator()
cut_assert_operator_double, cut_assert_operator_double()
cut_assert_operator_int, cut_assert_operator_int()
cut_assert_operator_size, cut_assert_operator_size()
cut_assert_operator_uint, cut_assert_operator_uint()
cut_assert_path_exist, cut_assert_path_exist ()
cut_assert_path_not_exist, cut_assert_path_not_exist ()
cut_assert_remove_path, cut_assert_remove_path ()
cut_assert_true, cut_assert_true ()
cut_boolean, cut_boolean
cut_build_fixture_data_path, cut_build_fixture_data_path ()
cut_build_fixture_path, cut_build_fixture_path ()
cut_build_path, cut_build_path ()
cut_build_path_array, cut_build_path_array ()
cut_equal_double, cut_equal_double ()
cut_equal_sockaddr, cut_equal_sockaddr()
cut_equal_string, cut_equal_string ()
cut_error, cut_error ()
cut_error_errno, cut_error_errno ()
CUT_EXPORT, CUT_EXPORT
cut_fail, cut_fail ()
CUT_FALSE, CUT_FALSE
cut_fork, cut_fork
cut_fork_get_stderr_message, cut_fork_get_stderr_message()
cut_fork_get_stdout_message, cut_fork_get_stdout_message()
cut_get_current_test_context, cut_get_current_test_context
cut_get_fixture_data, cut_get_fixture_data ()
cut_get_fixture_data_string, cut_get_fixture_data_string ()
cut_get_source_directory, cut_get_source_directory ()
cut_get_test_directory, cut_get_test_directory ()
cut_inspect_sockaddr, cut_inspect_sockaddr()
cut_inspect_string_array, cut_inspect_string_array ()
cut_keep_message, cut_keep_message ()
cut_make_directory, cut_make_directory ()
cut_message, cut_message ()
cut_notify, cut_notify ()
cut_omit, cut_omit ()
cut_pend, cut_pend ()
cut_pending, cut_pending ()
cut_pop_backtrace, cut_pop_backtrace ()
cut_push_backtrace, cut_push_backtrace ()
CUT_RELATIVE_PATH, CUT_RELATIVE_PATH
cut_remove_path, cut_remove_path ()
cut_return, cut_return ()
cut_setup, cut_setup ()
cut_set_actual, cut_set_actual()
cut_set_attributes, cut_set_attributes()
cut_set_current_test_context, cut_set_current_test_context()
cut_set_expected, cut_set_expected()
cut_set_fixture_data_dir, cut_set_fixture_data_dir ()
cut_set_message, cut_set_message ()
cut_set_message_va_list, cut_set_message_va_list ()
cut_shutdown, cut_shutdown ()
cut_startup, cut_startup ()
cut_sub_process_get_elapsed, cut_sub_process_get_elapsed ()
cut_sub_process_get_exclude_directories, cut_sub_process_get_exclude_directories ()
cut_sub_process_get_exclude_files, cut_sub_process_get_exclude_files ()
cut_sub_process_get_fatal_failures, cut_sub_process_get_fatal_failures ()
cut_sub_process_get_max_threads, cut_sub_process_get_max_threads ()
cut_sub_process_get_multi_thread, cut_sub_process_get_multi_thread ()
cut_sub_process_get_source_directory, cut_sub_process_get_source_directory ()
cut_sub_process_get_target_test_case_names, cut_sub_process_get_target_test_case_names ()
cut_sub_process_get_target_test_names, cut_sub_process_get_target_test_names ()
cut_sub_process_get_test_directory, cut_sub_process_get_test_directory ()
cut_sub_process_get_total_elapsed, cut_sub_process_get_total_elapsed ()
cut_sub_process_group_add, cut_sub_process_group_add ()
cut_sub_process_group_run, cut_sub_process_group_run ()
cut_sub_process_group_run_async, cut_sub_process_group_run_async ()
cut_sub_process_group_wait, cut_sub_process_group_wait ()
cut_sub_process_is_crashed, cut_sub_process_is_crashed ()
cut_sub_process_is_running, cut_sub_process_is_running ()
cut_sub_process_is_success, cut_sub_process_is_success ()
cut_sub_process_run, cut_sub_process_run ()
cut_sub_process_run_async, cut_sub_process_run_async ()
cut_sub_process_set_exclude_directories, cut_sub_process_set_exclude_directories ()
cut_sub_process_set_exclude_files, cut_sub_process_set_exclude_files ()
cut_sub_process_set_fatal_failures, cut_sub_process_set_fatal_failures ()
cut_sub_process_set_max_threads, cut_sub_process_set_max_threads ()
cut_sub_process_set_multi_thread, cut_sub_process_set_multi_thread ()
cut_sub_process_set_source_directory, cut_sub_process_set_source_directory ()
cut_sub_process_set_target_test_case_names, cut_sub_process_set_target_test_case_names ()
cut_sub_process_set_target_test_names, cut_sub_process_set_target_test_names ()
cut_sub_process_set_test_directory, cut_sub_process_set_test_directory ()
cut_sub_process_wait, cut_sub_process_wait ()
CUT_SUPPORT_C99_STDINT_TYPES, CUT_SUPPORT_C99_STDINT_TYPES
CUT_SUPPORT_GDK_PIXBUF, CUT_SUPPORT_GDK_PIXBUF
CUT_SUPPORT_GIO, CUT_SUPPORT_GIO
CUT_SUPPORT_GLIB, CUT_SUPPORT_GLIB
CUT_SUPPORT_LIBSOUP, CUT_SUPPORT_LIBSOUP
cut_take, cut_take ()
cut_take_convert, cut_take_convert()
cut_take_diff, cut_take_diff ()
cut_take_inspect_string, cut_take_inspect_string ()
cut_take_memdup, cut_take_memdup ()
cut_take_memory, cut_take_memory ()
cut_take_new_sub_process, cut_take_new_sub_process ()
cut_take_new_sub_process_group, cut_take_new_sub_process_group ()
cut_take_printf, cut_take_printf ()
cut_take_replace, cut_take_replace ()
cut_take_strdup, cut_take_strdup ()
cut_take_string, cut_take_string ()
cut_take_string_array, cut_take_string_array ()
cut_take_strndup, cut_take_strndup ()
cut_teardown, cut_teardown ()
cut_test_fail, cut_test_fail ()
cut_test_fail_va_list, cut_test_fail_va_list ()
cut_test_pass, cut_test_pass ()
cut_trace, cut_trace()
cut_trace_with_info_expression, cut_trace_with_info_expression()
CUT_TRUE, CUT_TRUE
cut_wait_process, cut_wait_process()

G

GCutEgg, GCutEgg
GCutEgg::error, The "error" signal
GCutEgg::error-received, The "error-received" signal
GCutEgg::output-received, The "output-received" signal
GCutEgg::reaped, The "reaped" signal
GCutEgg:command, The "command" property
GCutEggClass, GCutEggClass
GCutEggError, enum GCutEggError
GCutEnumError, enum GCutEnumError
GCutEventLoop, GCutEventLoop
GCutEventLoopClass, GCutEventLoopClass
GCutGLibEventLoop, GCutGLibEventLoop
GCutGLibEventLoopClass, GCutGLibEventLoopClass
GCutInspectFunction, GCutInspectFunction ()
GCutProcess, GCutProcess
GCutProcess::error, The "error" signal
GCutProcess::error-received, The "error-received" signal
GCutProcess::output-received, The "output-received" signal
GCutProcess::reaped, The "reaped" signal
GCutProcess:command, The "command" property
GCutProcessClass, GCutProcessClass
GCutProcessError, enum GCutProcessError
GCUTTER_ENABLED, GCUTTER_ENABLED
gcut_add_datum, gcut_add_datum ()
gcut_assert_equal_enum, gcut_assert_equal_enum ()
gcut_assert_equal_error, gcut_assert_equal_error ()
gcut_assert_equal_flags, gcut_assert_equal_flags ()
gcut_assert_equal_hash_table, gcut_assert_equal_hash_table ()
gcut_assert_equal_hash_table_string_string, gcut_assert_equal_hash_table_string_string ()
gcut_assert_equal_int64, gcut_assert_equal_int64 ()
gcut_assert_equal_list, gcut_assert_equal_list ()
gcut_assert_equal_list_enum, gcut_assert_equal_list_enum ()
gcut_assert_equal_list_flags, gcut_assert_equal_list_flags ()
gcut_assert_equal_list_int, gcut_assert_equal_list_int ()
gcut_assert_equal_list_object, gcut_assert_equal_list_object ()
gcut_assert_equal_list_object_custom, gcut_assert_equal_list_object_custom ()
gcut_assert_equal_list_string, gcut_assert_equal_list_string ()
gcut_assert_equal_list_uint, gcut_assert_equal_list_uint ()
gcut_assert_equal_object, gcut_assert_equal_object ()
gcut_assert_equal_object_custom, gcut_assert_equal_object_custom ()
gcut_assert_equal_pid, gcut_assert_equal_pid ()
gcut_assert_equal_string, gcut_assert_equal_string ()
gcut_assert_equal_time_val, gcut_assert_equal_time_val ()
gcut_assert_equal_type, gcut_assert_equal_type ()
gcut_assert_equal_uint64, gcut_assert_equal_uint64 ()
gcut_assert_equal_value, gcut_assert_equal_value ()
gcut_assert_error, gcut_assert_error ()
gcut_assert_not_equal_int64, gcut_assert_not_equal_int64 ()
gcut_assert_not_equal_pid, gcut_assert_not_equal_pid ()
gcut_assert_not_equal_uint64, gcut_assert_not_equal_uint64 ()
gcut_assert_remove_path, gcut_assert_remove_path ()
gcut_data_get_boolean, gcut_data_get_boolean()
gcut_data_get_boxed, gcut_data_get_boxed ()
gcut_data_get_char, gcut_data_get_char()
gcut_data_get_double, gcut_data_get_double()
gcut_data_get_enum, gcut_data_get_enum ()
gcut_data_get_flags, gcut_data_get_flags ()
gcut_data_get_int, gcut_data_get_int ()
gcut_data_get_int64, gcut_data_get_int64()
gcut_data_get_object, gcut_data_get_object()
gcut_data_get_pointer, gcut_data_get_pointer ()
gcut_data_get_size, gcut_data_get_size()
gcut_data_get_string, gcut_data_get_string ()
gcut_data_get_type, gcut_data_get_type ()
gcut_data_get_uint, gcut_data_get_uint ()
gcut_data_get_uint64, gcut_data_get_uint64()
gcut_data_has_field, gcut_data_has_field ()
gcut_egg_close, gcut_egg_close ()
GCUT_EGG_ERROR, GCUT_EGG_ERROR
gcut_egg_error_quark, gcut_egg_error_quark ()
gcut_egg_get_env, gcut_egg_get_env ()
gcut_egg_get_error, gcut_egg_get_error ()
gcut_egg_get_flags, gcut_egg_get_flags ()
gcut_egg_get_forced_termination_wait_time, gcut_egg_get_forced_termination_wait_time ()
gcut_egg_get_input, gcut_egg_get_input ()
gcut_egg_get_output, gcut_egg_get_output ()
gcut_egg_get_pid, gcut_egg_get_pid ()
gcut_egg_hatch, gcut_egg_hatch ()
gcut_egg_kill, gcut_egg_kill ()
gcut_egg_new, gcut_egg_new ()
gcut_egg_new_argv, gcut_egg_new_argv ()
gcut_egg_new_array, gcut_egg_new_array ()
gcut_egg_new_strings, gcut_egg_new_strings ()
gcut_egg_new_va_list, gcut_egg_new_va_list ()
gcut_egg_set_env, gcut_egg_set_env ()
gcut_egg_set_flags, gcut_egg_set_flags ()
gcut_egg_set_forced_termination_wait_time, gcut_egg_set_forced_termination_wait_time ()
gcut_egg_wait, gcut_egg_wait ()
gcut_egg_write, gcut_egg_write ()
GCUT_ENUM_ERROR, GCUT_ENUM_ERROR
gcut_enum_error_quark, gcut_enum_error_quark ()
gcut_enum_inspect, gcut_enum_inspect ()
gcut_enum_parse, gcut_enum_parse ()
gcut_error_equal, gcut_error_equal ()
gcut_error_get_type, gcut_error_get_type ()
gcut_error_inspect, gcut_error_inspect ()
gcut_event_loop_add_idle, gcut_event_loop_add_idle ()
gcut_event_loop_add_idle_full, gcut_event_loop_add_idle_full ()
gcut_event_loop_add_timeout, gcut_event_loop_add_timeout ()
gcut_event_loop_add_timeout_full, gcut_event_loop_add_timeout_full ()
GCUT_EVENT_LOOP_ERROR, GCUT_EVENT_LOOP_ERROR
gcut_event_loop_error_quark, gcut_event_loop_error_quark ()
gcut_event_loop_iterate, gcut_event_loop_iterate ()
gcut_event_loop_quit, gcut_event_loop_quit ()
gcut_event_loop_remove, gcut_event_loop_remove ()
gcut_event_loop_run, gcut_event_loop_run ()
gcut_event_loop_watch_child, gcut_event_loop_watch_child ()
gcut_event_loop_watch_child_full, gcut_event_loop_watch_child_full ()
gcut_event_loop_watch_io, gcut_event_loop_watch_io ()
gcut_flags_get_all, gcut_flags_get_all ()
gcut_flags_inspect, gcut_flags_inspect ()
gcut_flags_parse, gcut_flags_parse ()
gcut_get_fixture_data, gcut_get_fixture_data ()
gcut_glib_event_loop_new, gcut_glib_event_loop_new ()
gcut_hash_table_equal, gcut_hash_table_equal ()
gcut_hash_table_inspect, gcut_hash_table_inspect ()
gcut_hash_table_inspect_sorted, gcut_hash_table_inspect_sorted ()
gcut_hash_table_string_equal, gcut_hash_table_string_equal ()
gcut_hash_table_string_string_copy, gcut_hash_table_string_string_copy ()
gcut_hash_table_string_string_inspect, gcut_hash_table_string_string_inspect ()
gcut_hash_table_string_string_new, gcut_hash_table_string_string_new ()
gcut_hash_table_string_string_new_va_list, gcut_hash_table_string_string_new_va_list ()
gcut_inspect_boolean, gcut_inspect_boolean ()
gcut_inspect_char, gcut_inspect_char ()
gcut_inspect_direct, gcut_inspect_direct ()
gcut_inspect_double, gcut_inspect_double ()
gcut_inspect_enum, gcut_inspect_enum ()
gcut_inspect_flags, gcut_inspect_flags ()
gcut_inspect_int, gcut_inspect_int ()
gcut_inspect_int64, gcut_inspect_int64 ()
gcut_inspect_pointer, gcut_inspect_pointer ()
gcut_inspect_size, gcut_inspect_size ()
gcut_inspect_string, gcut_inspect_string ()
gcut_inspect_type, gcut_inspect_type ()
gcut_inspect_uint, gcut_inspect_uint ()
gcut_inspect_uint64, gcut_inspect_uint64 ()
gcut_list_enum_inspect, gcut_list_enum_inspect()
gcut_list_equal, gcut_list_equal ()
gcut_list_equal_int, gcut_list_equal_int ()
gcut_list_equal_string, gcut_list_equal_string ()
gcut_list_equal_uint, gcut_list_equal_uint ()
gcut_list_flags_inspect, gcut_list_flags_inspect()
gcut_list_inspect, gcut_list_inspect ()
gcut_list_inspect_enum, gcut_list_inspect_enum ()
gcut_list_inspect_flags, gcut_list_inspect_flags ()
gcut_list_inspect_int, gcut_list_inspect_int ()
gcut_list_inspect_object, gcut_list_inspect_object ()
gcut_list_inspect_string, gcut_list_inspect_string ()
gcut_list_inspect_uint, gcut_list_inspect_uint ()
gcut_list_int_equal, gcut_list_int_equal()
gcut_list_int_inspect, gcut_list_int_inspect()
gcut_list_int_new, gcut_list_int_new ()
gcut_list_new, gcut_list_new ()
gcut_list_object_free, gcut_list_object_free ()
gcut_list_object_inspect, gcut_list_object_inspect()
gcut_list_string_equal, gcut_list_string_equal()
gcut_list_string_free, gcut_list_string_free ()
gcut_list_string_inspect, gcut_list_string_inspect()
gcut_list_string_new, gcut_list_string_new ()
gcut_list_string_new_array, gcut_list_string_new_array ()
gcut_list_uint_equal, gcut_list_uint_equal()
gcut_list_uint_inspect, gcut_list_uint_inspect()
gcut_list_uint_new, gcut_list_uint_new ()
gcut_object_equal, gcut_object_equal ()
gcut_object_inspect, gcut_object_inspect ()
gcut_object_inspect_custom, gcut_object_inspect_custom ()
GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR
gcut_process_error_quark, gcut_process_error_quark ()
gcut_process_flush, gcut_process_flush ()
gcut_process_get_env, gcut_process_get_env ()
gcut_process_get_error_channel, gcut_process_get_error_channel ()
gcut_process_get_error_stream, gcut_process_get_error_stream ()
gcut_process_get_error_string, gcut_process_get_error_string ()
gcut_process_get_event_loop, gcut_process_get_event_loop ()
gcut_process_get_flags, gcut_process_get_flags ()
gcut_process_get_forced_termination_wait_time, gcut_process_get_forced_termination_wait_time ()
gcut_process_get_input_channel, gcut_process_get_input_channel ()
gcut_process_get_output_channel, gcut_process_get_output_channel ()
gcut_process_get_output_stream, gcut_process_get_output_stream ()
gcut_process_get_output_string, gcut_process_get_output_string ()
gcut_process_get_pid, gcut_process_get_pid ()
gcut_process_kill, gcut_process_kill ()
gcut_process_new, gcut_process_new ()
gcut_process_new_argv, gcut_process_new_argv ()
gcut_process_new_array, gcut_process_new_array ()
gcut_process_new_command_line, gcut_process_new_command_line ()
gcut_process_new_strings, gcut_process_new_strings ()
gcut_process_new_va_list, gcut_process_new_va_list ()
gcut_process_run, gcut_process_run ()
gcut_process_set_env, gcut_process_set_env ()
gcut_process_set_event_loop, gcut_process_set_event_loop ()
gcut_process_set_flags, gcut_process_set_flags ()
gcut_process_set_forced_termination_wait_time, gcut_process_set_forced_termination_wait_time ()
gcut_process_wait, gcut_process_wait ()
gcut_process_write, gcut_process_write ()
gcut_size_get_type, gcut_size_get_type ()
gcut_string_equal, gcut_string_equal ()
gcut_string_inspect, gcut_string_inspect ()
gcut_take_error, gcut_take_error ()
gcut_take_hash_table, gcut_take_hash_table ()
gcut_take_list, gcut_take_list ()
gcut_take_new_hash_table_string_string, gcut_take_new_hash_table_string_string ()
gcut_take_new_list_int, gcut_take_new_list_int ()
gcut_take_new_list_object, gcut_take_new_list_object()
gcut_take_new_list_string, gcut_take_new_list_string ()
gcut_take_new_list_string_array, gcut_take_new_list_string_array ()
gcut_take_new_list_string_backward_compatibility, gcut_take_new_list_string_backward_compatibility()
gcut_take_new_list_uint, gcut_take_new_list_uint ()
gcut_take_new_string, gcut_take_new_string ()
gcut_take_object, gcut_take_object ()
gcut_take_string, gcut_take_string ()
GCUT_TYPE_ERROR, GCUT_TYPE_ERROR
GCUT_TYPE_SIZE, GCUT_TYPE_SIZE
gcut_value_equal, gcut_value_equal ()
gcut_value_register_equal_func, gcut_value_register_equal_func ()
GDKCUTTER_PIXBUF_ENABLED, GDKCUTTER_PIXBUF_ENABLED
gdkcut_pixbuf_assert_equal, gdkcut_pixbuf_assert_equal ()

S

setup, setup ()
SoupCutClient, SoupCutClient
SoupCutClient:async, The "async" property
SoupCutClientClass, SoupCutClientClass
SOUPCUTTER_ENABLED, SOUPCUTTER_ENABLED
soupcut_client_assert_equal_body, soupcut_client_assert_equal_body ()
soupcut_client_assert_equal_content_type, soupcut_client_assert_equal_content_type ()
soupcut_client_assert_match_body, soupcut_client_assert_match_body ()
soupcut_client_assert_response, soupcut_client_assert_response ()
soupcut_client_get, soupcut_client_get ()
soupcut_client_get_async_context, soupcut_client_get_async_context ()
soupcut_client_get_latest_message, soupcut_client_get_latest_message ()
soupcut_client_get_n_messages, soupcut_client_get_n_messages ()
soupcut_client_new, soupcut_client_new ()
soupcut_client_send_message, soupcut_client_send_message ()
soupcut_client_set_base, soupcut_client_set_base ()
soupcut_message_assert_equal_content_type, soupcut_message_assert_equal_content_type ()
soupcut_server_build_uri, soupcut_server_build_uri ()
soupcut_server_take, soupcut_server_take ()
soupcut_server_take_new, soupcut_server_take_new ()

T

teardown, teardown ()
cutter-testing-framework-1.1.7/doc/reference/html/index-1-0.html0000644000175000017500000000426611525707421022625 0ustar koukou Index of new symbols in 1.0

Index of new symbols in 1.0

C

cut_assert_equal_pointer, cut_assert_equal_pointer ()
cut_assert_g_error, cut_assert_g_error ()
cut_assert_match, cut_assert_match ()
cut_assert_match_with_free, cut_assert_match_with_free ()
cutter-testing-framework-1.1.7/doc/reference/html/style.css0000644000175000017500000001205611525702754022207 0ustar koukou.synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; border: solid 1px #d3d7cf; padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ background: #e6f3ff; border: solid 1px #729fcf; padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } @media screen { sup a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { position: relative; padding-top:4.5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 3.2em; padding-bottom: 20em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; z-index: 10; } .navigation a, .navigation a:visited { /* tango:scarlet red 3 */ color: #a40000; } .navigation a:hover { /* tango:scarlet red 1 */ color: #ef2929; } td.shortcuts { /* tango:scarlet red 1 */ color: #ef2929; font-size: 80%; white-space: nowrap; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } .navigation .title { font-size: 200%; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } hr { /* tango:aluminium 3 */ color: #babdb6; background: #babdb6; border: none 0px; height: 1px; clear: both; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .warning { /* tango:orange 0/1 */ background: #ffeed9; border-color: #ffb04f; } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; border-color: #abf562; } .note, .warning { padding: 0.5em; border-width: 1px; border-style: solid; } .note h3, .warning h3 { margin-top: 0.0em } .note p, .warning p { margin-bottom: 0.0em } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-size: 80%; font-weight: normal; } /* code listings */ .listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */ .listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */ .listing_code .programlisting .function { color: #000000; font-weight: bold; } .listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */ .listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */ .listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ .listing_code .programlisting .normal { color: #000000; } .listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */ .listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ .listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */ .listing_code .programlisting .type { color: #000000; } .listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */ .listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */ .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; } .listing_lines pre, .listing_code pre { margin: 0px; } cutter-testing-framework-1.1.7/doc/reference/html/start.html0000644000175000017500000000343211525707421022352 0ustar koukou Getting start

Getting start

Tutorial — How to use Cutter
cutter-testing-framework-1.1.7/doc/reference/html/cutter.devhelp20000644000175000017500000022722311525702754023302 0ustar koukou cutter-testing-framework-1.1.7/doc/reference/html/cutter-Multi-Process.html0000644000175000017500000020224011525707421025225 0ustar koukou Multi Process

Multi Process

Multi Process — Utilities to run your tests on multi processes.

Synopsis

                    CutSubProcess;
                    CutSubProcessGroup;
CutSubProcess *     cut_take_new_sub_process            (const char *test_directory);
cut_boolean         cut_sub_process_run                 (CutSubProcess *sub_process);
void                cut_sub_process_run_async           (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_wait                (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_is_success          (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_is_running          (CutSubProcess *sub_process);
const char *        cut_sub_process_get_test_directory  (CutSubProcess *sub_process);
void                cut_sub_process_set_test_directory  (CutSubProcess *sub_process,
                                                         const char *test_directory);
const char *        cut_sub_process_get_source_directory
                                                        (CutSubProcess *sub_process);
void                cut_sub_process_set_source_directory
                                                        (CutSubProcess *sub_process,
                                                         const char *source_directory);
cut_boolean         cut_sub_process_get_multi_thread    (CutSubProcess *sub_process);
void                cut_sub_process_set_multi_thread    (CutSubProcess *sub_process,
                                                         cut_boolean multi_thread);
int                 cut_sub_process_get_max_threads     (CutSubProcess *sub_process);
void                cut_sub_process_set_max_threads     (CutSubProcess *sub_process,
                                                         int max_threads);
const char **       cut_sub_process_get_exclude_files   (CutSubProcess *sub_process);
void                cut_sub_process_set_exclude_files   (CutSubProcess *sub_process,
                                                         const char **files);
const char **       cut_sub_process_get_exclude_directories
                                                        (CutSubProcess *sub_process);
void                cut_sub_process_set_exclude_directories
                                                        (CutSubProcess *sub_process,
                                                         const char **directories);
const char **       cut_sub_process_get_target_test_case_names
                                                        (CutSubProcess *sub_process);
void                cut_sub_process_set_target_test_case_names
                                                        (CutSubProcess *sub_process,
                                                         const char **names);
const char **       cut_sub_process_get_target_test_names
                                                        (CutSubProcess *sub_process);
void                cut_sub_process_set_target_test_names
                                                        (CutSubProcess *sub_process,
                                                         const char **names);
double              cut_sub_process_get_elapsed         (CutSubProcess *sub_process);
double              cut_sub_process_get_total_elapsed   (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_is_crashed          (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_get_fatal_failures  (CutSubProcess *sub_process);
void                cut_sub_process_set_fatal_failures  (CutSubProcess *sub_process,
                                                         cut_boolean fatal_failures);
CutSubProcessGroup * cut_take_new_sub_process_group     (void);
void                cut_sub_process_group_add           (CutSubProcessGroup *group,
                                                         CutSubProcess *sub_process);
cut_boolean         cut_sub_process_group_run           (CutSubProcessGroup *group);
void                cut_sub_process_group_run_async     (CutSubProcessGroup *group);
cut_boolean         cut_sub_process_group_wait          (CutSubProcessGroup *group);

Description

If your test target supports multi-process and/or multi-thread, you need to test them. You can use CutSubProcess and CutSubProcessGroup to do it.

CutSubProcess runs your test on another process and forwards results of it to a test on your main process. You will get results of test on another process as results of test on your main process.

CutSubProcessGroup is a convenience object to run some CutSubProcess.

Details

CutSubProcess

typedef struct _CutSubProcess CutSubProcess;

An object to represent sub cutter process. It contains sub cutter process's parameters and results of sub cutter process.

e.g.:

1
2
3
4
5
CutSubProcess *sub_process;

sub_process = cut_take_new_sub_process("test-dir");
cut_sub_process_set_multi_thread(sub_process, TRUE);
cut_assert_true(cut_sub_process_run(sub_process));

Since 1.0.4


CutSubProcessGroup

typedef struct _CutSubProcessGroup CutSubProcessGroup;

An object to run sub cutter processes. This is just for convenience.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
CutSubProcess *sub_process1, *sub_process2, *sub_process3;
CutSubProcessGroup *group;

sub_process1 = cut_take_new_sub_process("test-dir1");
sub_process2 = cut_take_new_sub_process("test-dir2");
sub_process3 = cut_take_new_sub_process("test-dir3");

group = cut_take_new_sub_process_group();
cut_sub_process_group_add(group, sub_process1);
cut_sub_process_group_add(group, sub_process2);
cut_sub_process_group_add(group, sub_process3);
cut_assert_true(cut_sub_process_group_run(group));

Since 1.0.4


cut_take_new_sub_process ()

CutSubProcess *     cut_take_new_sub_process            (const char *test_directory);

Creates sub cutter process that runs tests under test_directory and returns it. A created sub process is owned by Cutter.

test_directory :

a directory includes sub process test.

Returns :

a CutSubProcess.

Since 1.0.4


cut_sub_process_run ()

cut_boolean         cut_sub_process_run                 (CutSubProcess *sub_process);

Runs sub cutter process.

sub_process :

a CutSubProcess.

Returns :

CUT_TRUE if sub_process is completed successfully, CUT_FALSE otherwise.

Since 1.0.4


cut_sub_process_run_async ()

void                cut_sub_process_run_async           (CutSubProcess *sub_process);

Runs sub cutter process asynchronously. The result of sub_process can be gotten by cut_sub_process_wait().

sub_process :

a CutSubProcess.

Since 1.0.4


cut_sub_process_wait ()

cut_boolean         cut_sub_process_wait                (CutSubProcess *sub_process);

Waits for sub cutter process that is ran asynchronously to complete and returns the result.

sub_process :

a CutSubProcess.

Returns :

CUT_TRUE if sub_process is completed successfully, CUT_FALSE otherwise.

Since 1.0.4


cut_sub_process_is_success ()

cut_boolean         cut_sub_process_is_success          (CutSubProcess *sub_process);

Returns whether sub_process is completed successfully or not.

sub_process :

a CutSubProcess.

Returns :

CUT_TRUE if sub_process is completed successfully, CUT_FALSE otherwise.

Since 1.0.4


cut_sub_process_is_running ()

cut_boolean         cut_sub_process_is_running          (CutSubProcess *sub_process);

Returns whether sub_process is running or not.

sub_process :

a CutSubProcess.

Returns :

CUT_TRUE if sub_process is running, CUT_FALSE otherwise.

Since 1.0.4


cut_sub_process_get_test_directory ()

const char *        cut_sub_process_get_test_directory  (CutSubProcess *sub_process);

Returns a test directory that has tests to be ran.

sub_process :

a CutSubProcess.

Returns :

a test directory.

Since 1.0.4


cut_sub_process_set_test_directory ()

void                cut_sub_process_set_test_directory  (CutSubProcess *sub_process,
                                                         const char *test_directory);

Sets test_directory as a test directory that has tests to be ran. This is same as TEST_DIRECTORY required command line argument.

sub_process :

a CutSubProcess.

test_directory :

a test directory.

Since 1.0.4


cut_sub_process_get_source_directory ()

const char *        cut_sub_process_get_source_directory
                                                        (CutSubProcess *sub_process);

Returns a source directory that has source files.

sub_process :

a CutSubProcess.

Returns :

a source directory.

Since 1.0.4


cut_sub_process_set_source_directory ()

void                cut_sub_process_set_source_directory
                                                        (CutSubProcess *sub_process,
                                                         const char *source_directory);

Sets source_directory as a source directory that has source files. This is same as --source-directory command line option.

sub_process :

a CutSubProcess.

source_directory :

a source directory.

Since 1.0.4


cut_sub_process_get_multi_thread ()

cut_boolean         cut_sub_process_get_multi_thread    (CutSubProcess *sub_process);

Returns whether sub_process is ran in multi-thread mode.

sub_process :

a CutSubProcess.

Returns :

CUT_TRUE if sub_process is ran in multi-thread mode, CUT_FALSE otherwise.

Since 1.0.4


cut_sub_process_set_multi_thread ()

void                cut_sub_process_set_multi_thread    (CutSubProcess *sub_process,
                                                         cut_boolean multi_thread);

Sets whether sub_process is ran in multi-thread mode or not. This is same as --multi-thread command line option.

sub_process :

a CutSubProcess.

multi_thread :

CUT_TRUE to be ran in multi-thread mode.

Since 1.0.4


cut_sub_process_get_max_threads ()

int                 cut_sub_process_get_max_threads     (CutSubProcess *sub_process);

Returns how many threads are used concurrently at a maximum in sub_process.

sub_process :

a CutSubProcess.

Returns :

max number of threads used concurrently at a maximum in sub_process.

Since 1.0.5


cut_sub_process_set_max_threads ()

void                cut_sub_process_set_max_threads     (CutSubProcess *sub_process,
                                                         int max_threads);

Sets how many threads are used concurrently at a maximum in sub_process. -1 means no limit. This is same as --max-threads command line option.

sub_process :

a CutSubProcess.

max_threads :

max number of threads used concurrently at a maximum.

Since 1.0.5


cut_sub_process_get_exclude_files ()

const char **       cut_sub_process_get_exclude_files   (CutSubProcess *sub_process);

Returns file names that are excluded from target test files.

sub_process :

a CutSubProcess.

Returns :

file names that are excluded from target test files.

Since 1.0.4


cut_sub_process_set_exclude_files ()

void                cut_sub_process_set_exclude_files   (CutSubProcess *sub_process,
                                                         const char **files);

Sets file names that are excluded from target test files. This is same as --exclude-file command line option.

sub_process :

a CutSubProcess.

files :

file names that are excluded from target test files.

Since 1.0.4


cut_sub_process_get_exclude_directories ()

const char **       cut_sub_process_get_exclude_directories
                                                        (CutSubProcess *sub_process);

Returns directory names that are excluded from target test directories.

sub_process :

a CutSubProcess.

Returns :

directory names that are excluded from target test directories.

Since 1.0.4


cut_sub_process_set_exclude_directories ()

void                cut_sub_process_set_exclude_directories
                                                        (CutSubProcess *sub_process,
                                                         const char **directories);

Sets directory names that are excluded from target test directories. This is same as --exclude-directory command line option.

sub_process :

a CutSubProcess.

directories :

directory names that are excluded from target test directories.

Since 1.0.4


cut_sub_process_get_target_test_case_names ()

const char **       cut_sub_process_get_target_test_case_names
                                                        (CutSubProcess *sub_process);

Returns test case names that are ran.

sub_process :

a CutSubProcess.

Returns :

test case names that are ran.

Since 1.0.4


cut_sub_process_set_target_test_case_names ()

void                cut_sub_process_set_target_test_case_names
                                                        (CutSubProcess *sub_process,
                                                         const char **names);

Sets test case names that are ran. This is same as --test-case command line option.

sub_process :

a CutSubProcess.

names :

test case names that are ran.

Since 1.0.4


cut_sub_process_get_target_test_names ()

const char **       cut_sub_process_get_target_test_names
                                                        (CutSubProcess *sub_process);

Returns test names that are ran.

sub_process :

a CutSubProcess.

Returns :

test names that are ran.

Since 1.0.4


cut_sub_process_set_target_test_names ()

void                cut_sub_process_set_target_test_names
                                                        (CutSubProcess *sub_process,
                                                         const char **names);

Sets test names that are ran. This is same as --test command line option.

sub_process :

a CutSubProcess.

names :

test names that are ran.

Since 1.0.4


cut_sub_process_get_elapsed ()

double              cut_sub_process_get_elapsed         (CutSubProcess *sub_process);

Gets the time while sub_process was running.

sub_process :

a CutSubProcess.

Returns :

the time while sub_process was running.

Since 1.0.4


cut_sub_process_get_total_elapsed ()

double              cut_sub_process_get_total_elapsed   (CutSubProcess *sub_process);

Gets the sum of times that are used by each test.

sub_process :

a CutSubProcess.

Returns :

the sum of times that are used by each test.

Since 1.0.4


cut_sub_process_is_crashed ()

cut_boolean         cut_sub_process_is_crashed          (CutSubProcess *sub_process);

Returns whether sub_process was crashed or not.

sub_process :

a CutSubProcess.

Returns :

CUT_TRUE if sub_process was crashed, CUT_FALSE otherwise.

Since 1.0.4


cut_sub_process_get_fatal_failures ()

cut_boolean         cut_sub_process_get_fatal_failures  (CutSubProcess *sub_process);

Returns whether sub_process is ran in fatal-failures mode. See cut_sub_process_set_fatal_failures() more details of fatal-failures mode.

sub_process :

a CutSubProcess.

Returns :

CUT_TRUE if sub_process is ran in fatal-failures mode, CUT_FALSE otherwise.

Since 1.0.4


cut_sub_process_set_fatal_failures ()

void                cut_sub_process_set_fatal_failures  (CutSubProcess *sub_process,
                                                         cut_boolean fatal_failures);

Sets whether sub_process is ran in fatal-failures mode or not. In this mode, all failures are treated as fatal problems. It means that test is aborted on failure. On some environments, breakpoint is set.

This is same as --fatal-failures command line option.

sub_process :

a CutSubProcess.

fatal_failures :

CUT_TRUE to be ran in fatal-failures mode.

Since 1.0.4


cut_take_new_sub_process_group ()

CutSubProcessGroup * cut_take_new_sub_process_group     (void);

Creates a group of sub cutter process. A created group is owned by Cutter.

Returns :

a CutSubProcessGroup.

Since 1.0.4


cut_sub_process_group_add ()

void                cut_sub_process_group_add           (CutSubProcessGroup *group,
                                                         CutSubProcess *sub_process);

Adds sub_process to group.

group :

a CutSubProcessGroup.

sub_process :

a CutSubProcess.

Since 1.0.4


cut_sub_process_group_run ()

cut_boolean         cut_sub_process_group_run           (CutSubProcessGroup *group);

Runs all sub cutter processes of group and returns the result of them.

group :

a CutSubProcessGroup.

Returns :

CUT_TRUE if all sub cutter processes of group are completed successfully, CUT_FALSE otherwise.

Since 1.0.4


cut_sub_process_group_run_async ()

void                cut_sub_process_group_run_async     (CutSubProcessGroup *group);

Runs all sub cutter processes of group asynchronously. The result of them can be gotten by cut_sub_process_group_wait().

group :

a CutSubProcessGroup.

Since 1.0.4


cut_sub_process_group_wait ()

cut_boolean         cut_sub_process_group_wait          (CutSubProcessGroup *group);

Waits for all sub cutter processes of group that are ran asynchronously to complete and returns the result.

group :

a CutSubProcessGroup.

Returns :

CUT_TRUE if all sub cutter processes of group are completed successfully, CUT_FALSE otherwise.

Since 1.0.4

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertions-with-gdk-pixbuf-support.html0000644000175000017500000001363711525707421031404 0ustar koukou Assertions with gdk-pixbuf support

Assertions with gdk-pixbuf support

Assertions with gdk-pixbuf support — Checks that your program works as you expect with gdk-pixbuf support.

Synopsis

void                gdkcut_pixbuf_assert_equal          (const GdkPixbuf *expected,
                                                         const GdkPixbuf *actual,
                                                         guint threshold,
                                                         ...);

Description

Details

gdkcut_pixbuf_assert_equal ()

void                gdkcut_pixbuf_assert_equal          (const GdkPixbuf *expected,
                                                         const GdkPixbuf *actual,
                                                         guint threshold,
                                                         ...);

Passes if expected == actual. If difference of each corresponding pixel value is within threshold, expected and actual are treated as equal image.

If threshold is 3, pixel value of expected at (1, 1) is 127 and pixel value of actual at (1, 1) is 131, actual doesn't equals to expected. If pixel value of actual at (1, 1) is 130, actual may equal to expected. (All other corresponding pixel values are needed to fill this condition.)

expected :

an expected GdkPixbuf.

actual :

an actual GdkPixbuf.

threshold :

an threshold used for detecting pixel difference.

... :

optional message. See cut_message() for details.

Since 1.0.5

cutter-testing-framework-1.1.7/doc/reference/html/install-to-ubuntu.html0000644000175000017500000000732211525707421024625 0ustar koukou Install to Ubuntu

Install to Ubuntu

Install to Ubuntu — How to install Cutter to Ubuntu

Introduction

This document explains how to install Cutter to Ubuntu Linux.

Install

We can use aptitude because Cutter provides Debian packages.

There are packages for Ubuntu Lucid Lynx/Maverick Meerkat i386/amd64. If you need a package for another environment, you can request on mailing list .

Here are apt lines for for Lucid. We put them into /etc/apt/sources.list.d/cutter.list.

/etc/apt/sources.list.d/cutter.list:

deb http://cutter.sourceforge.net/ubuntu/ lucid main
deb-src http://cutter.sourceforge.net/ubuntu/ lucid main

Here are apt lines for for Maverick. We put them into /etc/apt/sources.list.d/cutter.list.

/etc/apt/sources.list.d/cutter.list:

deb http://cutter.sourceforge.net/ubuntu/ maverick main
deb-src http://cutter.sourceforge.net/ubuntu/ maverick main

Cutter packages are signed by key of kou@cozmixng.org/kou@clear-code.com. If we trust the key, we can register the key:

% gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31
% gpg --export 1C837F31 | sudo apt-key add -

If we register the key, we can install Cutter by aptitude:

% sudo aptitude update
% sudo aptitude -V -D install cutter-testing-framework

The next step

Installation is completed. We should try tutorial with the installed Cutter.

cutter-testing-framework-1.1.7/doc/reference/html/SoupCutClient.html0000644000175000017500000004315411525707421023763 0ustar koukou Convenience HTTP client API

Convenience HTTP client API

Convenience HTTP client API — API to work as HTTP client.

Synopsis

                    SoupCutClient;
                    SoupCutClientClass;
SoupCutClient *     soupcut_client_new                  (void);
void                soupcut_client_set_base             (SoupCutClient *client,
                                                         const gchar *uri);
guint               soupcut_client_send_message         (SoupCutClient *client,
                                                         SoupMessage *message);
guint               soupcut_client_get                  (SoupCutClient *client,
                                                         const gchar *uri,
                                                         const gchar *first_query_name,
                                                         ...);
guint               soupcut_client_get_n_messages       (SoupCutClient *client);
SoupMessage *       soupcut_client_get_latest_message   (SoupCutClient *client);
GMainContext *      soupcut_client_get_async_context    (SoupCutClient *client);

Object Hierarchy

  GObject
   +----SoupCutClient

Properties

  "async"                    gboolean              : Read / Write

Description

SoupCutClient works as a HTTP client. It accepts multiple requests and responses are managed by SoupCutClient. SoupCutClient related assertions are also provided.

Details

SoupCutClient

typedef struct _SoupCutClient SoupCutClient;


SoupCutClientClass

typedef struct {
    GObjectClass parent_class;
} SoupCutClientClass;


soupcut_client_new ()

SoupCutClient *     soupcut_client_new                  (void);

Creates and returns a new SoupCutClient

Returns :

a new SoupCutClient.

Since 1.0.8


soupcut_client_set_base ()

void                soupcut_client_set_base             (SoupCutClient *client,
                                                         const gchar *uri);

Set uri as a base uri of client.

client :

a SoupCutClient.

uri :

a base uri.

Since 1.0.8


soupcut_client_send_message ()

guint               soupcut_client_send_message         (SoupCutClient *client,
                                                         SoupMessage *message);

Send message with client. client remebers all the messages it sent.

client :

a SoupCutClient.

message :

a SoupMessage.

Returns :

a status code of the response.

Since 1.0.8


soupcut_client_get ()

guint               soupcut_client_get                  (SoupCutClient *client,
                                                         const gchar *uri,
                                                         const gchar *first_query_name,
                                                         ...);

Send a GET request to uri with queries. If the base URI of client is set by soupcut_client_set_base(), the destination URI is composed of the base URI and uri. If not, uri must be a fully qualified URI.

client :

a SoupCutClient.

uri :

an URI string.

first_query_name :

the name of the first query parameter.

... :

pairs of query parameter names and values, starting with first_query_name, terminated by NULL

Returns :

a status code of the response.

Since 1.0.8


soupcut_client_get_n_messages ()

guint               soupcut_client_get_n_messages       (SoupCutClient *client);

Returns the number of messages client sent.

client :

a SoupCutClient.

Returns :

the number of messages.

Since 1.0.8


soupcut_client_get_latest_message ()

SoupMessage *       soupcut_client_get_latest_message   (SoupCutClient *client);

Returns the latest SoupMessage client sent.

client :

a SoupCutClient.

Returns :

the latest SoupMessage.

Since 1.0.8


soupcut_client_get_async_context ()

GMainContext *      soupcut_client_get_async_context    (SoupCutClient *client);

Returns the asynch_context of client.

client :

a SoupCutClient.

Returns :

a GMainContext of client, which may be NULL.

Since 1.0.8

Property Details

The "async" property

  "async"                    gboolean              : Read / Write

True if the session is asynchronous.

Default value: FALSE

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-writing-helper.html0000644000175000017500000014016411525707421027432 0ustar koukou Assertion writing helper

Assertion writing helper

Assertion writing helper — Symbols in this section help you writing your own assertions.

Synopsis

void                cut_test_pass                       (void);
void                cut_test_fail                       (const char *system_message,
                                                         ...);
void                cut_test_fail_va_list               (const char *system_message,
                                                         const char *user_message_format);
#define             CUT_RELATIVE_PATH
void                cut_push_backtrace                  (const char *expression);
void                cut_pop_backtrace                   (void);
#define             cut_trace                           (expression)
#define             cut_trace_with_info_expression      (expression,
                                                         info_expression)
const char *        cut_append_diff                     (const char *message,
                                                         const char *from,
                                                         const char *to);
#define             cut_set_expected                    (expected)
#define             cut_set_actual                      (actual)
const char *        cut_inspect_string_array            (const char **strings);
cut_boolean         cut_equal_string                    (const char *string1,
                                                         const char *string2);
cut_boolean         cut_equal_double                    (double double1,
                                                         double double2,
                                                         double error);
#define             cut_equal_sockaddr                  (address1,
                                                         address2)
#define             cut_inspect_sockaddr                (address)
const char *        cut_get_test_directory              (void);
const char *        cut_get_source_directory            (void);

Description

You will need to write your own assertions for writing easy to read test. Symbols in this section help you writing your own assertions.

e.g.:

my-assertions.h:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef __MY_ASSERTIONS_H__
#define __MY_ASSERTIONS_H__

#include <cutter.h>

#ifdef __cplusplus
extern "C" {
#endif

#define my_assert_equal_int(expected, actual)                    \
    cut_trace_with_info_expression(                              \
        my_assert_equal_int_helper((expected), (actual),         \
                                   # expected, # actual),        \
        my_assert_equal_int(expected, actual, __VA_ARGS__))

void my_assert_equal_int_help (long expected,
                               long actual,
                               const char *expression_expected,
                               const char *expression_actual);

#ifdef __cplusplus
}
#endif

#endif

my-assertions.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "my-assertions.h"

void
my_assert_equal_int_helper (long expected,
                            long actual,
                            const char *expression_expected,
                            const char *expression_actual)
{
    if (expected == actual) {
        cut_test_pass();
    } else {
        cut_test_fail(cut_take_printf("<%s == %s>\n"
                                      "expected: <%ld>\n"
                                      "  actual: <%ld>",
                                      expression_expected,
                                      expression_actual,
                                      expected, actual));
    }
}

Makefile.am:

1
2
3
4
5
AM_CFLAGS = $(CUTTER_CFLAGS)
LIBS = $(CUTTER_LIBS)
noinst_LTLIBRARIES = libmy-assertions.la
libmy_assertions_la_SOURCES = my-assertions.c my-assertions.h
AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

Details

cut_test_pass ()

void                cut_test_pass                       (void);

Call cut_test_pass() if an assertion is passed. cut_test_pass() counts up n-assertions.

Since 1.0.5


cut_test_fail ()

void                cut_test_fail                       (const char *system_message,
                                                         ...);

Call cut_test_fail() if an assertion is failed. cut_test_fail() counts up n-failures and terminate the current test.

system_message :

a failure message from testing system.

... :

optional format string, followed by parameters to insert into the format string. (as with printf()) This is deprecated since 0.1.6. Use cut_set_message() instead.

Since 1.0.5


cut_test_fail_va_list ()

void                cut_test_fail_va_list               (const char *system_message,
                                                         const char *user_message_format);

Warning

cut_test_fail_va_list has been deprecated since version 1.0.6 and should not be used in newly-written code. Use cut_test_fail() instead.

See cut_test_fail() for cut_test_fail_va_list()'s behavior. user_message_format is the prior variable of variable length arguments.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
void
my_assert(cut_boolean result,
          const gchar *user_message_format,
          ...)
{
    if (result) {
        cut_test_pass();
    } else {
        cut_test_fail_va_list("Fail!", user_message_format);
    }
}

system_message :

a failure message from testing system.

user_message_format :

a failure message from user.

Since 1.0.5


CUT_RELATIVE_PATH

#  define CUT_RELATIVE_PATH NULL

Define this macro in a source code or build option (e.g. -DCUT_RELATIVE_PATH=\""sub/dir/"\") if the source code is built as shared library and used it as helper library of your test. If this path isn't set, you can't get correct path from cut_trace() and cut_trace_with_info_expression().

Here is an example structure for explain:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--- core-lib/ --- XXX.c # Your core library
 |             +- ...
 |             +- YYY.c
 +- util-lib/ --- AAA.c # Your utility library
 |             +- ...
 |             +- BBB.c
 |
 +- test/ --- core/ --- test-XXX.c # Tests for your core library
           |         +- ...
           |         +- test-YYY.c
           +- util/ --- test-AAA.c # Tests for your utility library
           |         +- ...
           |         +- test-BBB.c
           +- lib/  --- my-assertions.c # Your library of tests.
                     +- my-assertions.h # This library will be used
                     |                  # as shared library of your
                     |                  # tests (test/core/test-*.so
                     |                  # and test/util/test-*.so)
                     +- ...

  % cutter --source-directory=test test

In the above example structure, you need to define CUT_RELATIVE_PATH as "lib" in test/lib/my-assertions.c because my-assertions.c is in lib/ directory from source directory "test" specified by command line option --source-directory.

Here are example code and build option:

1
2
3
4
5
6
test/lib/my-assertions.c:
  #define CUT_RELATIVE_PATH "lib"
  #include <cutter.h>

build option:
  % gcc -DCUT_RELATIVE_PATH="\"lib\"" ...

Since 1.0.6


cut_push_backtrace ()

void                cut_push_backtrace                  (const char *expression);

Pushes expression and the current source place to the backtrace stack.

Normally, you don't need to use it directory. cut_trace() is enough.

expression :

an expression to be traced.

Since 1.0.6


cut_pop_backtrace ()

void                cut_pop_backtrace                   (void);

Pops a backtrace from the backtrace stack.

Normally, you don't need to use it directory. cut_trace() is enough.

Since 1.0.6


cut_trace()

#define             cut_trace(expression)

Mark the current file, line, function and expression and show it when assertion is failed in expression. Most of expression will be function call.

Note that you can't get return value of expression.

Here is an example of cut_trace(). If cut_assert_not_null(object) is failed, you will get a backtrace that contains two line; cut_assert_not_null(object) and create_my_object("my-name").

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static MyObject *object;

static void
create_my_object(const char *name)
{
    object = my_object_new(name);
    cut_assert_not_null(object);
}

void
test_my_object_name(void)
{
    cut_trace(create_my_object("my-name"));
    cut_assert_equal_string("my-name",
                            my_object_get_name(object));
}

You will use cut_trace() with macro for test readability:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static MyObject *object;

static void
create_my_object_helper(const char *name)
{
    object = my_object_new(name);
    cut_assert_not_null(object);
}

#define create_my_object(...)                        \
    cut_trace(create_my_object_helper(__VA_ARGS__))

void
test_my_object_name(void)
{
    create_my_object("my-name");
    cut_assert_equal_string("my-name",
                            my_object_get_name(object));
}

expression :

an expression to be traced.

Since 1.0.5


cut_trace_with_info_expression()

#define             cut_trace_with_info_expression(expression, info_expression)

It's difference between cut_trace() and cut_trace_with_info_expression() that traced expression is the same expression as expression or not. cut_trace_with_info_expression() is useful when you want to hide some information in expression for backtrace readability.

Here is an example of cut_trace_with_info_expression(). If cut_assert_not_null(object) is failed, you will get a backtrace that contains two line:

  • cut_assert_not_null(object)

  • create_my_object("my-name") not create_my_object_helper("my-name")

If you use cut_trace() instead of cut_trace_with_info_expression(), you will get create_my_object_helper("my-name"). You may be confused about 'Where is create_my_object_helper("my-name") from? test_my_object_name() uses create_my_object("my-name") but does not use create_my_object_helper("my-name").'.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static MyObject *object;

static void
create_my_object_helper(const char *name)
{
    object = my_object_new(name);
    cut_assert_not_null(object);
}

#define create_my_object(...)                        \
    cut_trace_with_info_expression(                  \
        create_my_object_helper(__VA_ARGS__),        \
        create_my_object(__VA_ARGS__))

void
test_my_object_name(void)
{
    create_my_object("my-name");
    cut_assert_equal_string("my-name",
                            my_object_get_name(object));
}

expression :

an expression to be traced.

info_expression :

a traced expression.

Since 1.0.5


cut_append_diff ()

const char *        cut_append_diff                     (const char *message,
                                                         const char *from,
                                                         const char *to);

Warning

cut_append_diff has been deprecated since version 1.0.9 and should not be used in newly-written code. Use cut_set_expected() and cut_set_actual() instead.

Computes diff between from and to and append the diff to message. Returned string is owned by Cutter.

message :

the string to be appended diff.

from :

the original string.

to :

the modified string.

Returns :

message with diff between from and to or same as message if the diff not interested. Don't free it.

Since 1.0.3


cut_set_expected()

#define             cut_set_expected(expected)

Sets an inspected expected object to be used by the next assertion.

If both of expected and actual object are set and diff of them is needed, the diff is generated automatically.

See also cut_set_actual().

expected :

the inspected expected object.

Since 1.0.9


cut_set_actual()

#define             cut_set_actual(actual)

Sets an inspected actual object to be used by the next assertion.

If both of expected and actual object are set and diff of them is needed, the diff is generated automatically.

See also cut_set_expected().

actual :

the inspected actual object.

Since 1.0.9


cut_inspect_string_array ()

const char *        cut_inspect_string_array            (const char **strings);

Formats strings as human readable string that is owned by Cutter.

strings :

the array of strings to be inspected.

Returns :

a inspected string owned by Cutter. Don't free it.

cut_equal_string ()

cut_boolean         cut_equal_string                    (const char *string1,
                                                         const char *string2);

Compare string1 to string2. string1 and/or string2 maybe NULL.

string1 :

a string.

string2 :

a string.

Returns :

CUT_TRUE if both string1 and string2 are NULL or have the same contents; CUT_FALSE otherwise.

Since 1.0.5


cut_equal_double ()

cut_boolean         cut_equal_double                    (double double1,
                                                         double double2,
                                                         double error);

Compare double1 to double2 with error range.

double1 :

a double value.

double2 :

a double value.

error :

a double value that specifies error range.

Returns :

CUT_TRUE if |double1 - double2| <= error; CUT_FALSE otherwise.

Since 1.0.5


cut_equal_sockaddr()

#define             cut_equal_sockaddr(address1, address2)

Compare address1 to address2.

This function can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT.

address1 :

a socket address.

address2 :

a socket address.

Returns :

CUT_TRUE if address1 == address2, CUT_FALSE otherwise.

Since 1.1.1


cut_inspect_sockaddr()

#define             cut_inspect_sockaddr(address)

Formats address as human readable string that is owned by Cutter.

This function can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT.

address :

the socket address to be inspected.

Returns :

a inspected socket address owned by Cutter. Don't free it.

Since 1.1.1


cut_get_test_directory ()

const char *        cut_get_test_directory              (void);

Gets the test directory name which is specified by command line.

Returns :

a string owned by Cutter that must not be modified or freed.

Since 1.1.4


cut_get_source_directory ()

const char *        cut_get_source_directory            (void);

Gets the source directory name which is specified by command line.

Returns :

a string owned by Cutter that must not be modified or freed.

Since 1.1.5

cutter-testing-framework-1.1.7/doc/reference/html/cut-diff.html0000644000175000017500000001207211525707421022716 0ustar koukou cut-diff

cut-diff

cut-diff — show difference between 2 files with color

NAME

cut-diff - show difference between 2 files with color

SYNOPSIS

cut-diff [ option ... ] file1 file2

DESCRIPTION

cut-diff is a diff command that uses diff feature in Cutter. It shows difference with color.

It's recommended that you use a normal diff(1) when you want to use with patch(1) or you don't need color.

OPTIONS

--version

cut-diff shows its own version and exits.

-c [yes|true|no|false|auto], --color=[yes|true|no|false|auto]

If 'yes' or 'true' is specified, cut-diff uses colorized output by escape sequence. If 'no' or 'false' is specified, cut-diff never use colorized output. If 'auto' or the option is omitted, cut-diff uses colorized output if available.

The default is auto.

-u, --unified

cut-diff uses unified diff format.

--context-lines=LINES

Shows diff context around LINES .

All lines are shown by default. When unified diff format is used, 3 lines are shown by default.

--label=LABEL, -L=LABEL

Uses LABEL as a header label. The first --label option value is used as file1 's label and the second --label option value is used as file2 's label.

Labels are the same as file names by default.

EXIT STATUS

The exit status is 0 for success, non-0 otherwise.

TODO: 0 for non-difference, 1 for difference and non-0 for errors.

EXAMPLE

In the following example, cut-diff shows difference between file1 and file2 :

% cut-diff file1 file2

In the following example, cut-diff shows difference between file1 and file2 with unified diff format:

% cut-diff -u file1 file2

SEE ALSO

diff(1)

cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertion-Utilities-for-GValue.html0000644000175000017500000001721111525707421030406 0ustar koukou Assertion Utilities for GValue

Assertion Utilities for GValue

Assertion Utilities for GValue — Utilities to write assertions related to GValue more easily.

Synopsis

gboolean            gcut_value_equal                    (const GValue *value1,
                                                         const GValue *value2);
void                gcut_value_register_equal_func      (GType type1,
                                                         GType type2,
                                                         GEqualFunc equal_func);

Description

To write assertions, you need to check equality and show expected and actual values.

The utilities help you to write assertions that are related to GValue.

Details

gcut_value_equal ()

gboolean            gcut_value_equal                    (const GValue *value1,
                                                         const GValue *value2);

Compares two GValue, value1 and value2 by registered equal function. (See gcut_value_register_equal_func() for detail of how to register equal function of GValue)

value1 :

a GValue to be compared.

value2 :

a GValue to be compared.

Returns :

TRUE if value1 equals to value2, FALSE otherwise.

Since 1.0.5


gcut_value_register_equal_func ()

void                gcut_value_register_equal_func      (GType type1,
                                                         GType type2,
                                                         GEqualFunc equal_func);

e.g.:

1
TODO

Registers equality check function between GValue of type1 and GValue of type2.

type1 :

a GType of compared GValue.

type2 :

a GType of compared GValue.

equal_func :

a function that compares type1's GValue with type2's GValue.

Since 1.0.5

cutter-testing-framework-1.1.7/doc/reference/html/cutter.devhelp0000644000175000017500000016566611525702754023234 0ustar koukou cutter-testing-framework-1.1.7/doc/reference/html/left.png0000644000175000017500000000071311525702754021772 0ustar koukouPNG  IHDRw=bKGD pHYs  ~tIME1&[(XIDATx!OPE*ID%~ꊯ"p'ŏ`sܖrKf hmiIz}ܯI.p\`x l?l[,Hk<#c%\AUx[S7n6rzEs1j@NL$ݤi0 5/}\EKIo͓$a0jdFbkIAh>WlC'?tk;|/t*INZ^`y4Nr]׮ J<ڐt`X1@p䀸dZ')hK $V?%]+LsgUK"w53OIENDB`cutter-testing-framework-1.1.7/doc/reference/html/cutter-Assertions-with-C++-support.html0000644000175000017500000001364411525707421027652 0ustar koukou Assertions with C++ support

Assertions with C++ support

Assertions with C++ support — Checks that your program works as you expect with C++ support.

Synopsis

#define             cppcut_assert_equal                 (expected,
                                                         actual,
                                                         ...)

Description

Details

cppcut_assert_equal()

#define             cppcut_assert_equal(expected, actual, ...)

This assertion is a generic method based on template. You can pass any object's reference as expected and actual.

Passes if expected == actual.

e.g.:

1
2
3
cppcut_assert_equal(3, 1 + 2);
cppcut_assert_equal(3, 1 + 2, cppcut_message("easy expression"));
cppcut_assert_equal(3, 1 + 2, cppcut_message() << "easy expression"));

expected :

an expected value.

actual :

an actual value.

... :

an optional message. Use cppcut_message() for this.

Since 1.0.9

cutter-testing-framework-1.1.7/doc/reference/html/introduction.html0000644000175000017500000001024311525707421023734 0ustar koukou Part I. Introduction

Part I. Introduction

Table of Contents

Overview of Cutter
NEWS — The history of Cutter
README — An introduction of Cutter, a Unit Testing Framework for C and C++
Features — What can be done with Cutter
Users — Projects and developers that use Cutter
Install Cutter to your platform
Install to Debian GNU/Linux — How to install Cutter to Debian GNU/Linux
Install to Ubuntu — How to install Cutter to Ubuntu
Install to Fedora — How to install Cutter to Fedora
Install to CentOS — How to install Cutter to CentOS
Install to FreeBSD — How to install Cutter to FreeBSD
Install to Solaris — How to install Cutter to Solaris
Install to Mac OS X — How to install Cutter to Mac OS X
Install to Cygwin — How to install Cutter to Cygwin
Install to other platform — How to install Cutter to other platform
Getting start
Tutorial — How to use Cutter
cutter-testing-framework-1.1.7/doc/reference/html/cutter-Test-Utilities.html0000644000175000017500000011050311525707421025407 0ustar koukou Test Utilities

Test Utilities

Test Utilities — Utilities to write tests more easily.

Synopsis

void *              cut_take                            (void *object,
                                                         CutDestroyFunction destroy_function);
const void *        cut_take_memory                     (void *memory);
const char *        cut_take_string                     (char *string);
const char *        cut_take_strdup                     (const char *string);
const char *        cut_take_strndup                    (const char *string,
                                                         size_t size);
const void *        cut_take_memdup                     (const void *memory,
                                                         size_t size);
const char *        cut_take_printf                     (const char *format,
                                                         ...);
char **             cut_take_string_array               (char **strings);
const char *        cut_take_diff                       (const char *from,
                                                         const char *to);
const char *        cut_take_replace                    (const char *target,
                                                         const char *pattern,
                                                         const char *replacement);
#define             cut_take_convert                    (string,
                                                         to_code_set,
                                                         from_code_set)
const char *        cut_take_inspect_string             (const char *string);
void                cut_set_fixture_data_dir            (const char *path,
                                                         ...);
char *              cut_build_fixture_data_path         (const char *path,
                                                         ...);
const char *        cut_build_fixture_path              (const char *path,
                                                         ...);
const char *        cut_get_fixture_data_string         (const char *path,
                                                         ...);
const char *        cut_get_fixture_data                (size_t *size,
                                                         const char *path,
                                                         ...);
void                cut_remove_path                     (const char *path,
                                                         ...);
const char *        cut_build_path                      (const char *path,
                                                         ...);
const char *        cut_build_path_array                (const char **paths);
void                cut_make_directory                  (const char *path,
                                                         ...);

Description

To write tests, you need to write codes that set up/tear down test environment, prepare expected and actual values and so on. Cutter provides test utilities to you write your tests more easily.

The utilities work without GLib support.

Details

cut_take ()

void *              cut_take                            (void *object,
                                                         CutDestroyFunction destroy_function);

Passes ownership of object to Cutter and returns object itself. object is destroyed by destroy_func.

object :

the object to be owned by Cutter.

destroy_function :

the destroy function for the object.

Returns :

object owned by Cutter. Don't free it.

Since 1.0.5


cut_take_memory ()

const void *        cut_take_memory                     (void *memory);

Passes ownership of memory to Cutter and returns memory itself. memory is destroyed by free().

memory :

the memory to be owned by Cutter.

Returns :

memory owned by Cutter. Don't free it.

Since 1.0.5


cut_take_string ()

const char *        cut_take_string                     (char *string);

Passes ownership of string to Cutter and returns string itself.

string :

the string to be owned by Cutter.

Returns :

string owned by Cutter. Don't free it.

cut_take_strdup ()

const char *        cut_take_strdup                     (const char *string);

Duplicates string, passes ownership of the duplicated string to Cutter and returns the duplicated string.

string :

the string to be duplicated.

Returns :

a duplicated string owned by Cutter. Don't free it.

Since 1.0.5


cut_take_strndup ()

const char *        cut_take_strndup                    (const char *string,
                                                         size_t size);

Duplicates the first size bytes of string, passes ownership of the duplicated string to Cutter and returns the duplicated string. The duplicated string is always NULL-terminated.

string :

the string to be duplicated.

size :

the number of bytes to duplicate.

Returns :

a duplicated string owned by Cutter. Don't free it.

Since 1.0.5


cut_take_memdup ()

const void *        cut_take_memdup                     (const void *memory,
                                                         size_t size);

Duplicates size bytes of memory, passes ownership of the duplicated memory to Cutter and returns the duplicated memory.

memory :

the memory to be duplicated.

size :

the number of bytes to duplicate.

Returns :

a duplicated memory owned by Cutter. Don't free it.

Since 1.0.5


cut_take_printf ()

const char *        cut_take_printf                     (const char *format,
                                                         ...);

Formats a string like printf() but the formatted string is owned by Cutter.

format :

the message format. See the printf() documentation.

... :

the parameters to insert into the format string.

Returns :

a formatted string owned by Cutter. Don't free it.

cut_take_string_array ()

char **             cut_take_string_array               (char **strings);

Passes ownership of the array of strings to Cutter and returns strings itself.

strings :

the array of strings to be owned by Cutter.

Returns :

strings owned by Cutter. Don't free it.

cut_take_diff ()

const char *        cut_take_diff                       (const char *from,
                                                         const char *to);

Computes diff between from and to that is owned by Cutter.

from :

the original string.

to :

the modified string.

Returns :

a diff between from and to owned by Cutter. Don't free it.

cut_take_replace ()

const char *        cut_take_replace                    (const char *target,
                                                         const char *pattern,
                                                         const char *replacement);

Replaces all occurrences of the pattern with the replacement in the target string.

target :

the replace target string.

pattern :

the regular expression pattern as string.

replacement :

text to replace each match with

Returns :

a replaced string owned by Cutter. Don't free it.

Since 1.0.6


cut_take_convert()

#define             cut_take_convert(string, to_code_set, from_code_set)

Converts string code set to to_code_set from from_code_set.

string :

the convert target string. It should be NULL-terminated.

to_code_set :

the code set name which to convert string.

from_code_set :

the code set name of string.

Returns :

a converted string owned by Cutter. Don't free it.

Since 1.1.3


cut_take_inspect_string ()

const char *        cut_take_inspect_string             (const char *string);

Inspects string.

string :

the inspect target string. It should be NULL or NULL-terminated.

Returns :

a inspected string owned by Cutter. Don't free it.

Since 1.1.4


cut_set_fixture_data_dir ()

void                cut_set_fixture_data_dir            (const char *path,
                                                         ...);

Set fixture data directory that is used by cut_get_fixture_data_string() and so on.

path :

a first element of the path to the fixture data directory.

... :

remaining elements in path. NULL-terminate is required since 1.0.7.

Since 1.0.2


cut_build_fixture_data_path ()

char *              cut_build_fixture_data_path         (const char *path,
                                                         ...);

Warning

cut_build_fixture_data_path has been deprecated since version 1.1.6 and should not be used in newly-written code. Use cut_build_fixture_path() instead.

Builds a path to the fixture data. If path is relative path, the path is handled as a relative path from a directory that is specified by cut_set_fixture_data_dir() or the current directory.

path :

a first element of the path to the fixture data.

... :

remaining elements in path. NULL-terminate is required since 1.0.7.

Returns :

a path to the fixture data. It should be freed when no longer needed.

Since 1.0.2


cut_build_fixture_path ()

const char *        cut_build_fixture_path              (const char *path,
                                                         ...);

Builds a path to the fixture data. If path is relative path, the path is handled as a relative path from a directory that is specified by cut_set_fixture_data_dir() or the current directory.

path :

a first element of the path to the fixture data.

... :

remaining elements in path. NULL-terminate is required.

Returns :

a path to the fixture data. It is owned by Cutter. Don't free it.

Since 1.1.6


cut_get_fixture_data_string ()

const char *        cut_get_fixture_data_string         (const char *path,
                                                         ...);

Reads the fixture data at "path/..." and returns it as a string that is owned by Cutter. The description of cut_build_fixture_path() shows how the fixture data path is determined.

path :

a first element of the path to the fixture data.

... :

remaining elements in path. NULL-terminate is required since 1.0.7.

Returns :

a content of the fixture data as string owend by Cutter. Don't free it.

Since 1.0.2


cut_get_fixture_data ()

const char *        cut_get_fixture_data                (size_t *size,
                                                         const char *path,
                                                         ...);

Reads the fixture data at "path/..." and returns it as a string that is owned by Cutter. The description of cut_build_fixture_path() shows how the fixture data path is determined.

size :

return location for a size of the fixture data, or NULL.

path :

a first element of the path to the fixture data.

... :

remaining elements in path. NULL-terminate is required.

Returns :

a content of the fixture data as string owend by Cutter. Don't free it.

Since 1.1.6


cut_remove_path ()

void                cut_remove_path                     (const char *path,
                                                         ...);

Removes path and it's children recursively. It doesn't report any errors.

path :

a first element of the path to be removed.

... :

remaining elements in path. NULL-terminate is required since 1.0.7.

Since 1.0.2


cut_build_path ()

const char *        cut_build_path                      (const char *path,
                                                         ...);

Builds path from path and the following elements.

path :

a first element of the path.

... :

remaining elements in path. NULL terminated.

Returns :

built path owned by Cutter. Don't free it.

Since 1.0.7


cut_build_path_array ()

const char *        cut_build_path_array                (const char **paths);

Builds path from paths.

paths :

NULL-terminated array of strings containing the path elements.

Returns :

built path owned by Cutter. Don't free it.

Since 1.1.5


cut_make_directory ()

void                cut_make_directory                  (const char *path,
                                                         ...);

Makes path and it's parents recursively. It doesn't report any errors.

path :

a first element of the path to be made.

... :

remaining elements in path. NULL terminated.

Since 1.1.1

cutter-testing-framework-1.1.7/doc/reference/html/index-0-9.html0000644000175000017500000000426311525707421022632 0ustar koukou Index of new symbols in 0.9

Index of new symbols in 0.9

C

cut_assert_equal_string_array_with_free, cut_assert_equal_string_array_with_free ()
cut_assert_false, cut_assert_false ()
cut_assert_file_exist, cut_assert_file_exist ()
cut_assert_true, cut_assert_true ()
cutter-testing-framework-1.1.7/doc/reference/html/index-0-5.html0000644000175000017500000000311711525707421022623 0ustar koukou Index of new symbols in 0.5

Index of new symbols in 0.5

cutter-testing-framework-1.1.7/doc/reference/html/index-1-1-4.html0000644000175000017500000000517611525707421022770 0ustar koukou Index of new symbols in 1.1.4

Index of new symbols in 1.1.4

C

cut_assert_equal_file_raw, cut_assert_equal_file_raw()
cut_assert_not_equal_file_raw, cut_assert_not_equal_file_raw()
cut_get_test_directory, cut_get_test_directory ()
cut_take_inspect_string, cut_take_inspect_string ()

G

gcut_assert_not_equal_int64, gcut_assert_not_equal_int64 ()
gcut_assert_not_equal_uint64, gcut_assert_not_equal_uint64 ()
cutter-testing-framework-1.1.7/doc/reference/html/users.html0000644000175000017500000000706611525707421022365 0ustar koukou Users

Users

Users — Projects and developers that use Cutter

List

  • Cutter : self test.

  • Senna : full-text search engine.

  • groonga : full-text search engine and column store.

  • mroonga : a MySQL pluggable storage engine for groonga.

  • milter manager : a milter to use milters effectively.

  • Kazehakase : a browser.

  • GtkIEEmbed : a GTK+ widget library to use HTML rendering engine of Internet Explorer.

  • GPointingDeviceSettings : a GUI tool for setting various pointing devices.

  • nfc-tools : Based on libnfc , Open Source Near Field Communication (NFC) Library, this project intent to provide useful tools for POSIX compliant operating systems.

cutter-testing-framework-1.1.7/doc/reference/html/dark-circle.png0000644000175000017500000000326511525702754023225 0ustar koukouPNG  IHDRddpTsRGBbKGD pHYs  tIME  sLtEXtCommentCreated with GIMPWIDATx]H[gOĐؘi*&\JZ*YLh z /F3zQWn*8lͱNhw%4#~XK45!Mbyߜn *;JNNAe| Tv]@TvoÀ/( ^@Tv}~ *;B-4vTY@=e.D ZE%!f3 EKD "J]xe!m F 3Bdjx0!xM ix(XXRӡnoyP3 ÇՏ_C46}@#d!YNQwU^ne։uuwtHbw2v|_;Gln}7$~YׯnA7Uۋsf׉譓||kE$T<9B. yqCwO_z.^׉UgyM\YW !VYW .mB,'3ο'rM뻽WG'K\HjqVf,¥-q4`!4eⱢDhɈy2!CX&d?pl˄,:!GLQ8p|7$ B@!B Q`7aIENDB`cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-2.html0000644000175000017500000000567411525707421022770 0ustar koukou Index of new symbols in 1.0.2

Index of new symbols in 1.0.2

C

cut_assert_equal_fixture_data_string, cut_assert_equal_fixture_data_string ()
cut_assert_path_exist, cut_assert_path_exist ()
cut_assert_path_not_exist, cut_assert_path_not_exist ()
cut_assert_remove_path, cut_assert_remove_path ()
cut_build_fixture_data_path, cut_build_fixture_data_path ()
cut_error_errno, cut_error_errno ()
cut_get_fixture_data_string, cut_get_fixture_data_string ()
cut_remove_path, cut_remove_path ()
cut_set_fixture_data_dir, cut_set_fixture_data_dir ()
cutter-testing-framework-1.1.7/doc/reference/html/GCutProcess.html0000644000175000017500000021302311525707421023415 0ustar koukou External command

External command

External command — Convenience API for using external command.

Synopsis

#define             GCUT_PROCESS_ERROR
                    GCutProcess;
                    GCutProcessClass;
enum                GCutProcessError;
GQuark              gcut_process_error_quark            (void);
GCutProcess *       gcut_process_new                    (const gchar *command,
                                                         ...);
GCutProcess *       gcut_process_new_command_line       (const gchar *command_line);
GCutProcess *       gcut_process_new_va_list            (const gchar *command,
                                                         va_list args);
GCutProcess *       gcut_process_new_argv               (gint argc,
                                                         gchar **argv);
GCutProcess *       gcut_process_new_strings            (const gchar **command);
GCutProcess *       gcut_process_new_array              (GArray *command);
void                gcut_process_set_flags              (GCutProcess *process,
                                                         GSpawnFlags flags);
GSpawnFlags         gcut_process_get_flags              (GCutProcess *process);
void                gcut_process_set_env                (GCutProcess *process,
                                                         const gchar *name,
                                                         ...);
gchar **            gcut_process_get_env                (GCutProcess *process);
gboolean            gcut_process_run                    (GCutProcess *process,
                                                         GError **error);
GPid                gcut_process_get_pid                (GCutProcess *process);
gint                gcut_process_wait                   (GCutProcess *process,
                                                         guint timeout,
                                                         GError **error);
gboolean            gcut_process_kill                   (GCutProcess *process,
                                                         gint signal_number,
                                                         GError **error);
gboolean            gcut_process_write                  (GCutProcess *process,
                                                         const gchar *chunk,
                                                         gsize size,
                                                         GError **error);
GIOStatus           gcut_process_flush                  (GCutProcess *process,
                                                         GError **error);
GString *           gcut_process_get_output_string      (GCutProcess *process);
GString *           gcut_process_get_error_string       (GCutProcess *process);
GIOChannel *        gcut_process_get_input_channel      (GCutProcess *process);
GIOChannel *        gcut_process_get_output_channel     (GCutProcess *process);
GIOChannel *        gcut_process_get_error_channel      (GCutProcess *process);
GInputStream *      gcut_process_get_output_stream      (GCutProcess *process);
GInputStream *      gcut_process_get_error_stream       (GCutProcess *process);
guint               gcut_process_get_forced_termination_wait_time
                                                        (GCutProcess *process);
void                gcut_process_set_forced_termination_wait_time
                                                        (GCutProcess *process,
                                                         guint timeout);
GCutEventLoop *     gcut_process_get_event_loop         (GCutProcess *process);
void                gcut_process_set_event_loop         (GCutProcess *process,
                                                         GCutEventLoop *loop);

Object Hierarchy

  GObject
   +----GCutProcess

Properties

  "command"                  gpointer              : Read / Write

Signals

  "error"                                          : Run Last
  "error-received"                                 : Run Last
  "output-received"                                : Run Last
  "reaped"                                         : Run Last

Description

GCutProcess encapsulates external command execution, communication and termination. GCutProcess reports an error as GError. It can be asserted easily by gcut_assert_error().

External command is specified to constructor like gcut_process_new(), gcut_process_new_strings() and so on. External command isn't run at the time. gcut_process_run() runs specified external command.

Standard/Error outputs of external command are passed by "output-received"/"error-received" signals or GIOChannel returned by gcut_process_get_output()/gcut_process_get_error(). gcut_process_write() writes a chunk to standard input of external command.

To wait external command finished, gcut_process_wait() can be used. It accepts timeout to avoid infinite waiting.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
static GString *output_string;
static GCutProcess *process;

void
cut_setup (void)
{
    output_string = g_string_new(NULL);
    process = NULL;
}

void
cut_teardown (void)
{
    if (output_string)
        g_string_free(output_string, TRUE);
    if (process)
        g_object_unref(process);
}

static void
cb_output_received (GCutProcess *process, const gchar *chunk, gsize size,
                    gpointer user_data)
{
    g_string_append_len(output_string, chunk, size);
}

void
test_echo (void)
{
    GError *error = NULL;

    process = gcut_process_new("echo", "XXX", NULL);
    g_signal_connect(process, "receive-output",
                     G_CALLBACK(cb_output_received), NULL);

    gcut_process_run(process, &error);
    gcut_assert_error(error);

    gcut_process_wait(process, 1000, &error);
    gcut_assert_error(error);
    cut_assert_equal_string("XXX\n", output_string->str);
}

Details

GCUT_PROCESS_ERROR

#define GCUT_PROCESS_ERROR           (gcut_process_error_quark())


GCutProcess

typedef struct _GCutProcess GCutProcess;


GCutProcessClass

typedef struct {
    GObjectClass parent_class;

    void (*output_received) (GCutProcess *process,
                             const gchar *chunk,
                             gsize        size);
    void (*error_received)  (GCutProcess *process,
                             const gchar *chunk,
                             gsize        size);
    void (*reaped)          (GCutProcess *process,
                             gint         status);
    void (*error)           (GCutProcess *process,
                             GError      *error);
} GCutProcessClass;


enum GCutProcessError

typedef enum
{
    GCUT_PROCESS_ERROR_COMMAND_LINE,
    GCUT_PROCESS_ERROR_IO_ERROR,
    GCUT_PROCESS_ERROR_ALREADY_RUNNING,
    GCUT_PROCESS_ERROR_NOT_RUNNING,
    GCUT_PROCESS_ERROR_INVALID_OBJECT,
    GCUT_PROCESS_ERROR_INVALID_SIGNAL,
    GCUT_PROCESS_ERROR_PERMISSION_DENIED,
    GCUT_PROCESS_ERROR_TIMEOUT
} GCutProcessError;

Error codes returned by GCutProcess related operations.

GCUT_PROCESS_ERROR_COMMAND_LINE

Command line related error.

GCUT_PROCESS_ERROR_IO_ERROR

IO error.

GCUT_PROCESS_ERROR_ALREADY_RUNNING

External command is already running.

GCUT_PROCESS_ERROR_NOT_RUNNING

External command isn't running.

GCUT_PROCESS_ERROR_INVALID_OBJECT

Invalid GCutProcess object is passed.

GCUT_PROCESS_ERROR_INVALID_SIGNAL

Invalid signal is passed.

GCUT_PROCESS_ERROR_PERMISSION_DENIED

Permission denied.

GCUT_PROCESS_ERROR_TIMEOUT

Timeout.

Since 1.1.5


gcut_process_error_quark ()

GQuark              gcut_process_error_quark            (void);

Returns :


gcut_process_new ()

GCutProcess *       gcut_process_new                    (const gchar *command,
                                                         ...);

Creates a new GCutProcess object that runs command.

command :

the external command name to be ran

... :

the arguments for command

Returns :

a new GCutProcess.

Since 1.1.5


gcut_process_new_command_line ()

GCutProcess *       gcut_process_new_command_line       (const gchar *command_line);

Creates a new GCutProcess object that runs command_line.

command_line :

a command line

Returns :

a new GCutProcess.

Since 1.1.5


gcut_process_new_va_list ()

GCutProcess *       gcut_process_new_va_list            (const gchar *command,
                                                         va_list args);

Creates a new GCutProcess object that runs command.

command :

the external command name to be ran

args :

arguments for command

Returns :

a new GCutProcess.

Since 1.1.5


gcut_process_new_argv ()

GCutProcess *       gcut_process_new_argv               (gint argc,
                                                         gchar **argv);

Creates a new GCutProcess object that runs command.

argc :

the number of elements of argv

argv :

the external command name to be ran and arguments of it.

Returns :

a new GCutProcess.

Since 1.1.5


gcut_process_new_strings ()

GCutProcess *       gcut_process_new_strings            (const gchar **command);

Creates a new GCutProcess object that runs command.

command :

the external command name to be ran and arguments of it. NULL-terminated.

Returns :

a new GCutProcess.

Since 1.1.5


gcut_process_new_array ()

GCutProcess *       gcut_process_new_array              (GArray *command);

Creates a new GCutProcess object that runs command.

command :

the external command name to be ran and arguments of it. The GArray should be zero-terminated.

Returns :

a new GCutProcess.

Since 1.1.5


gcut_process_set_flags ()

void                gcut_process_set_flags              (GCutProcess *process,
                                                         GSpawnFlags flags);

Sets flags for spawning.

process :

a GCutProcess

flags :

the flags to be passed to g_spawn_async_with_pipes().

Since 1.1.5


gcut_process_get_flags ()

GSpawnFlags         gcut_process_get_flags              (GCutProcess *process);

Gets flags for spawning.

process :

a GCutProcess

Returns :

the flags for spawning.

Since 1.1.5


gcut_process_set_env ()

void                gcut_process_set_env                (GCutProcess *process,
                                                         const gchar *name,
                                                         ...);

Sets environment variable for external command.

process :

a GCutProcess

name :

the first environment name.

... :

the value of name, followed by name and value pairs. NULL-terminated.

Since 1.1.5


gcut_process_get_env ()

gchar **            gcut_process_get_env                (GCutProcess *process);

Gets environment variable for external command.

process :

a GCutProcess

Returns :

a newly-allocated NULL-terminated environment variables. ("NAME1=VALUE1", "NAME2=VALUE2", ..., NULL) It should be freed by g_strfreev() when no longer needed.

Since 1.1.5


gcut_process_run ()

gboolean            gcut_process_run                    (GCutProcess *process,
                                                         GError **error);

Runs a new external process.

process :

a GCutProcess

error :

return location for an error, or NULL

Returns :

TRUE on success, otherwise FALSE

Since 1.1.5


gcut_process_get_pid ()

GPid                gcut_process_get_pid                (GCutProcess *process);

Gets the process ID of running external process. If external process isn't running, 0 is returned.

process :

a GCutProcess

Returns :

the process ID of running external process if external process is running, otherwise 0.

Since 1.1.5


gcut_process_wait ()

gint                gcut_process_wait                   (GCutProcess *process,
                                                         guint timeout,
                                                         GError **error);

Waits running external process is finished while timeout milliseconds. If external process isn't finished while timeout milliseconds, GCUT_PROCESS_ERROR_TIMEOUT error is set and -1 is returned. If external process isn't running, GCUT_PROCESS_ERROR_NOT_RUNNING error is set and -1 is returned.

process :

a GCutProcess

timeout :

the timeout period in milliseconds

error :

return location for an error, or NULL

Returns :

an exit status of external process on success, otherwise -1.

Since 1.1.5


gcut_process_kill ()

gboolean            gcut_process_kill                   (GCutProcess *process,
                                                         gint signal_number,
                                                         GError **error);

Sends signal_number signal to external process.

process :

a GCutProcess

signal_number :

the signal number to be sent to external process

error :

return location for an error, or NULL

Returns :

TRUE on success, otherwise FALSE

Since 1.1.5


gcut_process_write ()

gboolean            gcut_process_write                  (GCutProcess *process,
                                                         const gchar *chunk,
                                                         gsize size,
                                                         GError **error);

Writes chunk to external process's standard input.

process :

a GCutProcess

chunk :

the data to be wrote

size :

the size of chunk

error :

return location for an error, or NULL

Returns :

TRUE on success, otherwise FALSE

Since 1.1.5


gcut_process_flush ()

GIOStatus           gcut_process_flush                  (GCutProcess *process,
                                                         GError **error);

Flush buffered external process's standard input.

process :

a GCutProcess

error :

return location for an error, or NULL

Returns :

the status of the operation: One of G_IO_STATUS_NORMAL, G_IO_STATUS_AGAIN, or G_IO_STATUS_ERROR.

Since 1.1.5


gcut_process_get_output_string ()

GString *           gcut_process_get_output_string      (GCutProcess *process);

process :

a GCutProcess

Returns :

a GString that has all result of standard output of external process.

Since 1.1.5


gcut_process_get_error_string ()

GString *           gcut_process_get_error_string       (GCutProcess *process);

process :

a GCutProcess

Returns :

a GString that has all result of standard error of external process.

Since 1.1.5


gcut_process_get_input_channel ()

GIOChannel *        gcut_process_get_input_channel      (GCutProcess *process);

Gets a GIOChannel connected with standard input of external process.

process :

a GCutProcess

Returns :

a GIOChannel if external process is running, otherwise NULL.

Since 1.1.5


gcut_process_get_output_channel ()

GIOChannel *        gcut_process_get_output_channel     (GCutProcess *process);

Gets a GIOChannel connected with standard output of external process.

process :

a GCutProcess

Returns :

a GIOChannel if external process is running, otherwise NULL.

Since 1.1.5


gcut_process_get_error_channel ()

GIOChannel *        gcut_process_get_error_channel      (GCutProcess *process);

Gets a GIOChannel connected with standard error output of external process.

process :

a GCutProcess

Returns :

a GIOChannel if external process is running, otherwise NULL.

Since 1.1.5


gcut_process_get_output_stream ()

GInputStream *      gcut_process_get_output_stream      (GCutProcess *process);

Gets a GInputStream connected with standard output of external process.

process :

a GCutProcess

Returns :

a GInputStream if external process is running, otherwise NULL.

Since 1.1.5


gcut_process_get_error_stream ()

GInputStream *      gcut_process_get_error_stream       (GCutProcess *process);

Gets a GInputStream connected with standard error output of external process.

process :

a GCutProcess

Returns :

a GInputStream if external process is running, otherwise NULL.

Since 1.1.5


gcut_process_get_forced_termination_wait_time ()

guint               gcut_process_get_forced_termination_wait_time
                                                        (GCutProcess *process);

Gets a wait time in milliseconds for forced termination on dispose.

process :

a GCutProcess

Returns :

a timeout value for waiting forced terminated external command on dispose.

Since 1.1.5


gcut_process_set_forced_termination_wait_time ()

void                gcut_process_set_forced_termination_wait_time
                                                        (GCutProcess *process,
                                                         guint timeout);

Sets a wait time in milliseconds for forced termination on dispose. If timeout is 0, it doesn't wait termination of external process. The default value is 10.

process :

a GCutProcess

timeout :

the timeout value in milliseconds

Since 1.1.5


gcut_process_get_event_loop ()

GCutEventLoop *     gcut_process_get_event_loop         (GCutProcess *process);

Gets a event loop using by the process.

process :

a GCutProcess

Returns :

a GCutEventLoop.

Since 1.1.6


gcut_process_set_event_loop ()

void                gcut_process_set_event_loop         (GCutProcess *process,
                                                         GCutEventLoop *loop);

Sets a event loop for the process. If loop is NULL, the default GLib event loop will be used.

process :

a GCutProcess

loop :

the event loop or NULL

Since 1.1.6

Property Details

The "command" property

  "command"                  gpointer              : Read / Write

The command to be ran by the process.

Signal Details

The "error" signal

void                user_function                      (GCutProcess *process,
                                                        gpointer     error,
                                                        gpointer     user_data)      : Run Last

It is emitted each time an external process causes an error. (e.g. IO error)

process :

the object which received the signal.

error :

the error of an external process. (GError)

user_data :

user data set when the signal handler was connected.

Since 1.1.5


The "error-received" signal

void                user_function                      (GCutProcess *process,
                                                        gchar       *chunk,
                                                        guint64      size,
                                                        gpointer     user_data)      : Run Last

It is emitted each time an external process outputs something to its standard error output and it is read.

Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process's output is readable.

process :

the object which received the signal.

chunk :

the chunk read from an external process's standard error output.

size :

the size of chunk. (gsize)

user_data :

user data set when the signal handler was connected.

Since 1.1.5


The "output-received" signal

void                user_function                      (GCutProcess *process,
                                                        gchar       *chunk,
                                                        guint64      size,
                                                        gpointer     user_data)      : Run Last

It is emitted each time an external process outputs something to its standard output and it is read.

Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process's output is readable.

process :

the object which received the signal.

chunk :

the chunk read from an external process's standard output.

size :

the size of chunk. (gsize)

user_data :

user data set when the signal handler was connected.

Since 1.1.5


The "reaped" signal

void                user_function                      (GCutProcess *process,
                                                        gint         status,
                                                        gpointer     user_data)      : Run Last

It is emitted when an external process is exited.

Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process is exited.

process :

the object which received the signal.

status :

the exit status of an external process.

user_data :

user data set when the signal handler was connected.

Since 1.1.5

cutter-testing-framework-1.1.7/doc/reference/html/cutter-CppCutter.html0000644000175000017500000003052211525707421024432 0ustar koukou CppCutter

CppCutter

CppCutter — Cutter with C++ support.

Synopsis

#define             CPPCUTTER_ENABLED
#define             CPPCUT_BEGIN_TEST_DECLS
#define             CPPCUT_END_TEST_DECLS
#define             cppcut_message                      (...)

Description

CppCutter provides C++ friendly interface of Cutter. If you want to write tests with C++, it's good idea that you consider CppCutter to be used too.

It's easy to use CppCutter. You just include <cppcutter.h> instead of <cutter.h> and use cppcutter.pc instead of cutter.pc:

test-xxx.cpp:

1
2
-#include <cutter.h>
+#include <cppcutter.h>

configure.ac:

1
2
-AC_CHECK_CUTTER
+AC_CHECK_CPPCUTTER

Makefile.am:

1
2
3
4
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(CPPCUTTER_CFLAGS)
+XXX_LIBS = $(CPPCUTTER_LIBS)

Test functions are defined in namespace. Naming convention is the same as Cutter. i.e.: 'test_...' function is test function, 'setup' or 'cut_setup' is setup function and 'teardown' or 'cut_teardown' is teardown function.

test-calc.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cppcutter.h>

namespace calc
{
    void
    test_add (void)
    {
        cppcut_assert_equal(3, calc.add(1, 2));
    }

    void
    test_sub (void)
    {
        cppcut_assert_equal(5, calc.sub(9, 4));
    }
}

You just define a function for adding a new test. You don't need to use magical macros.

Details

CPPCUTTER_ENABLED

#define CPPCUTTER_ENABLED 1

Defined when CppCutter is enabled.

Since 1.0.9


CPPCUT_BEGIN_TEST_DECLS

#define CPPCUT_BEGIN_TEST_DECLS extern "C" {

Warning

CPPCUT_BEGIN_TEST_DECLS has been deprecated since version 1.1.0 and should not be used in newly-written code. Use namespace instead.

Use CPPCUT_BEGIN_TEST_DECLS and CPPCUT_END_TEST_DECLS pair for prototype declarations for test functions:

1
2
3
4
CPPCUT_BEGIN_TEST_DECLS
void test_add ();
void test_remove ();
CPPCUT_END_TEST_DECLS

Those macros just surround prototype declarations for test functions with 'extern "C" {...}'.

Since 1.0.9


CPPCUT_END_TEST_DECLS

#define CPPCUT_END_TEST_DECLS }

Warning

CPPCUT_END_TEST_DECLS has been deprecated since version 1.1.0 and should not be used in newly-written code. Use namespace instead.

See CPPCUT_BEGIN_TEST_DECLS.

Since 1.0.9


cppcut_message()

#define             cppcut_message(...)

Specifies optional assertion message with C++ friendly API. The optional message can be specified with printf() style API or "<<" stream style API.

e.g.:

1
2
3
4
cppcut_assert_equal("abc", "def",
                    cppcut_message("should fail!"));
cppcut_assert_equal("abc", "def",
                    cppcut_message() << "should fail!");

... :

the parameters to insert into the format string.

Returns :

Since 1.1.0

cutter-testing-framework-1.1.7/doc/reference/html/index-1-0-7.html0000644000175000017500000000756011525707421022771 0ustar koukou Index of new symbols in 1.0.7

Index of new symbols in 1.0.7

C

CUTTER_CHECK_VERSION, CUTTER_CHECK_VERSION()
cut_assert_equal_boolean, cut_assert_equal_boolean ()
cut_assert_equal_substring, cut_assert_equal_substring ()
cut_assert_not_equal_boolean, cut_assert_not_equal_boolean ()
cut_assert_not_equal_double, cut_assert_not_equal_double ()
cut_assert_not_equal_int, cut_assert_not_equal_int ()
cut_assert_not_equal_memory, cut_assert_not_equal_memory ()
cut_assert_not_equal_size, cut_assert_not_equal_size ()
cut_assert_not_equal_string, cut_assert_not_equal_string ()
cut_assert_not_equal_substring, cut_assert_not_equal_substring ()
cut_assert_not_equal_uint, cut_assert_not_equal_uint ()
cut_build_path, cut_build_path ()

G

gcut_assert_not_equal_pid, gcut_assert_not_equal_pid ()
gcut_data_get_boxed, gcut_data_get_boxed ()
GCUT_TYPE_ERROR, GCUT_TYPE_ERROR
cutter-testing-framework-1.1.7/doc/reference/html/cutter-Experimental.html0000644000175000017500000003126011525707421025156 0ustar koukou Experimental

Experimental

Experimental — Experimental API.

Synopsis

#define             cut_fork
#define             cut_wait_process                    (pid,
                                                         usec_timeout)
#define             cut_fork_get_stdout_message         (pid)
#define             cut_fork_get_stderr_message         (pid)

Description

This API may be changed in the future.

Details

cut_fork

#define             cut_fork()

Makes child process.

e.g.:

1
2
3
4
5
6
7
8
9
10
int pid;
pid = cut_fork();
cut_assert_errno();

if (pid == 0) {
  do_something_for_child_process();
  _exit(EXIT_SUCCESS);
}

do_something_for_parent_process();

Returns :

Process ID.

Since 0.8


cut_wait_process()

#define             cut_wait_process(pid, usec_timeout)

Waits a process specified by pid.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
int pid;
pid = cut_fork();
cut_assert_errno();

if (pid == 0) {
  do_something_for_child_process();
  _exit(EXIT_SUCCESS);
}

do_something_for_parent_process();
cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));

pid :

Process ID to wait.

usec_timeout :

Timeout in usec.

Since 0.8


cut_fork_get_stdout_message()

#define             cut_fork_get_stdout_message(pid)

Reads a message from a process specified by pid.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
int pid;
pid = cut_fork();
cut_assert_errno();

if (pid == 0) {
  g_print("I'm a child.");
  _exit(EXIT_SUCCESS);
}

cut_assert_equal_string("I'm a child.", cut_fork_get_stdout_message(pid));
cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));

pid :

Process ID.

Returns :

a message read from stdout of a process specified by pid.

Since 0.8


cut_fork_get_stderr_message()

#define             cut_fork_get_stderr_message(pid)

Reads a message from a process specified by pid.

e.g.:

1
2
3
4
5
6
7
8
9
10
11
int pid;
pid = cut_fork();
cut_assert_errno();

if (pid == 0) {
  g_print("I'm a child.");
  _exit(EXIT_SUCCESS);
}

cut_assert_equal_string("I'm a child.", cut_fork_get_stderr_message(pid));
cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));

pid :

Process ID.

Returns :

a message read from stderr of a process specified by pid.

Since 0.8

cutter-testing-framework-1.1.7/doc/reference/html/index-1-1-6.html0000644000175000017500000001062511525707421022765 0ustar koukou Index of new symbols in 1.1.6

Index of new symbols in 1.1.6

C

cut_build_fixture_path, cut_build_fixture_path ()
cut_get_fixture_data, cut_get_fixture_data ()

G

gcut_event_loop_add_idle, gcut_event_loop_add_idle ()
gcut_event_loop_add_idle_full, gcut_event_loop_add_idle_full ()
gcut_event_loop_add_timeout, gcut_event_loop_add_timeout ()
gcut_event_loop_add_timeout_full, gcut_event_loop_add_timeout_full ()
gcut_event_loop_iterate, gcut_event_loop_iterate ()
gcut_event_loop_quit, gcut_event_loop_quit ()
gcut_event_loop_remove, gcut_event_loop_remove ()
gcut_event_loop_run, gcut_event_loop_run ()
gcut_event_loop_watch_child, gcut_event_loop_watch_child ()
gcut_event_loop_watch_child_full, gcut_event_loop_watch_child_full ()
gcut_event_loop_watch_io, gcut_event_loop_watch_io ()
gcut_get_fixture_data, gcut_get_fixture_data ()
gcut_glib_event_loop_new, gcut_glib_event_loop_new ()
gcut_process_get_event_loop, gcut_process_get_event_loop ()
gcut_process_set_event_loop, gcut_process_set_event_loop ()
gcut_take_new_string, gcut_take_new_string ()
gcut_take_string, gcut_take_string ()
cutter-testing-framework-1.1.7/doc/reference/users.xml.ja0000644000175000017500000000454011525655563021651 0ustar koukou 利用者 Cutterライブラリ 利用者 Cutterを使っているプロジェクト・開発者 一覧 Cutter : セルフテスト Senna :全文検索エンジン groonga :全文検索エンジンとカラムストア mroonga :バックエンドにgroongaを使うMySQLのストレージエンジン milter manager : milterを効果的に使うためのmilter 風博士 :ブラウザ GtkIEEmbed :インターネットエクスプローラのHTMLレンダリングエンジンを使うためのGTK+用のウィジェットライブラリ GPointingDeviceSettings :ポインティングデバイスを設定するためのGUIツール nfc-tools :オープンソース近距離無線通信(NFC)ライブラリ libnfc を用いた、POSIX準拠OS用の便利なツールを提供するプロジェクト。 海野さん cutter-testing-framework-1.1.7/doc/reference/install-to-cygwin.xml.ja0000644000175000017500000000452111525655563024073 0ustar koukou Cygwinへインストール Cutterライブラリ Cygwinへインストール CygwinへのCutterのインストール方法 はじめに CygwinへのCutterのインストール方法を説明します。 Cygwin 1.7を対象とします。 Cygwinのインストール まず、Cygwin 1.7のインストーラをダウンロードします。 <URL:http://cygwin.com/setup.exe> 次に、インストーラを使って以下のパッケージをインストールします。 gcc4 gdb libglib2.0-devel gettext-devel intltool libiconv libtool make pkg-config wget ここからはCygwinの中で行います。Cygwinを起動してください。 Cutterのインストール これで下準備は整ったのでCutterをインストールします。 % cd % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % make % make install 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/news.xml.ja0000644000175000017500000014475711525702723021472 0ustar koukou お知らせ Cutterライブラリ お知らせ Cutterの歴史 1.1.7: 2011-02-13 Cutter 改良 growlnotify対応。 変更 Debian GNU/Linux lennyのサポートを終了。 修正 CentOS 5.5で動かない問題を修正。[中村弘輝さんが報告] ドキュメント ===== 修正 チュートリアルのtypoを修正。[中村弘輝さんが報告] 感謝 中村弘輝さん 1.1.6: 2011-02-09 Cutter 改良 ユーティリティの名前変更: cut_build_fixture_data_path() -> cut_build_fixture_path() ユーティリティの追加: gcut_take_string() cut_get_fixture_data() gcut_get_fixture_data() GCutEventLoop GCutGLibEventLoop Debian GNU/Linux squeeze対応。[Romuald Contyさんが提案] Ubuntu Maverick Meerkat対応。 Fedora 14対応。 cutter.m4: --config-cache対応。 cutter.m4: --enable-coverageが更新するMakefileとしてMakefile以外の名前に対応。(AC_CHECK_COVERAGE()の引数にMakefileのファイル名を指定) notify-send対応。 修正 間違ったテストを修正。[Ilya Baryginさんが提案] cut-diff 改良 ヘッダーのラベルを指定する --labelオプション を追加。 感謝 Romuald Contyさん Ilya Baryginさん 1.1.5: 2010-09-06 Cutter 改良 検証の名前変更: cut_assert_path_exist() -> cut_assert_exist_path() cut_assert_path_not_exist() -> cut_assert_not_exist_path() 検証の追加: gcut_assert_equal_string() ユーティリティの名前変更: GCutEgg -> GCutProcess ユーティリティの追加: cut_get_source_directory() cut_build_path_array() gcut_data_has_field() gcut_list_int_new() gcut_list_uint_new() gcut_take_new_list_int() gcut_take_new_list_uint() Ubuntu Lucid Lynx対応。 configure終了時に結果を報告。[Romain Tartièreさんが提案] libgoffice-0.8対応。(libgoffice-0.6対応は終了)[Romain Tartièreさんが提案] lcov 1.9対応。#3056684 [Romain Tartièreさんが改良] テスト説明文内の全角スペース表示に対応。 サブcutterプロセスがPATH上にあれば動作するように修正。[Romain Tartièreさんが改良] 修正 ロケールに依存したテストを修正。[Romain Tartièreさんが提案] cut-diff 改良 diffの周辺何行を表示するかを指定する --context-linesオプション を追加。 ドキュメント 改良 FreeBSDではportsを使うように変更。[Romain Tartièreさんが提案] 感謝 Romain Tartièreさん 1.1.4: 2010-06-10 CentOS対応。 Cutter 改良 検証の追加: cut_assert_equal_file_raw() cut_assert_not_equal_file_raw() gcut_assert_not_equal_int64() gcut_assert_not_equal_uint64() ユーティリティの追加: cut_get_test_directory() diffではできるだけタブを利用するように変更 CentOS対応 修正 検証に指定したメッセージが無視される問題の修正 ドキュメント 修正 Debian, Ubuntu: ファイルのパスを修正。[Romuald Contyさんが報告] 感謝 Romuald Contyさん 1.1.3: 2010-04-13 データ駆動テストサポートの強化。 Cutter 改良 AC_CHECK_ENABLE_COVERAGE: 'make check'に失敗してもカバレッジを出力するcoverage-forceターゲットを追加 バグ修正 不要なメモリ解放を削除 [Reported by Zed Shaw] AC_CHECK_ENABLE_COVERAGEがタブではなく空白を出力する問題の修正 GCutter 改良 データ駆動テストサポートの強化 gcut_data_get_size() gcut_data_get_char() gcut_data_get_boolean() gcut_data_get_int64() gcut_data_get_uint64() ユーティリティの追加: gcut_inspect_size() gcut_inspect_char() gcut_inspect_boolean() gcut_inspect_double() gcut_inspect_int64() gcut_inspect_uint64() バグ修正 Mac OS Xでgcut_list_inspect_enum()とgcut_list_inspect_flags()がクラッシュする問題の修正。 ドキュメント バグ修正 Cygwin 1.7での依存パッケージを修正 感謝 Zed Shaw 1.1.2: 2010-04-03 Windows対応強化。 Cutter 改良 lcov 1.8対応 --enable-coverage=SOMETHINGと指定しても動作するようにした[グニャラくんが報告] #2976775: cut_setup()内でのcut_omit()対応[Romain Tartièreさんが報告] Visual Studio C++ 2008でのビルド・テスト実行に対応 CppCutter 改良 Windows用でのテスト定義用マクロ CUT_EXPORT を追加 ドキュメント 改良 Ubuntu Karmic Koara対応 感謝 Romain Tartièreさん グニャラくん 1.1.1: 2010-03-11 1.1.0のバグ修正とGObject、sockaddr対応強化。 Cutter 改良 Visual C++で生成されたDLLに対応。 検証の追加: cut_assert_equal_sockaddr() テストユーティリティの追加: cut_equal_sockaddr() cut_inspect_sockaddr() cut_make_directory() 修正 stdint.hがあるがinttypes.hがない環境でビルドが失敗する問題の修正 GCutter 改良 データ駆動テストサポートの強化: gcut_data_get_object() ユーティリティの追加: gcut_list_new() gcut_take_new_list_object() gcut_list_object_free() 1.1.0: 2009-11-03 注意: APIに非互換があります。 Cutter 改良 stdint.hに定義されている型の検証を追加 [はやみずさん] API変更 : 省略可能な検証メッセージを再有効化 変更前: cut_assert_equal_string("a", "b", "message"); 変更後: cut_assert_equal_string("a", "b", cut_message("message")); cut_message() の追加 cut_set_message() を非推奨に変更 cut_set_message_va_list() を非推奨に変更 cut_keep_message() を非推奨に変更 CppCutter 改良 cppcut_assert_equal() が対応する型を追加 namespace内でのテスト定義検出に対応 CPPCUT_BEGIN_TEST_DECLS を非推奨に変更 CPPCUT_END_TEST_DECLS を非推奨に変更 省略可能な検証メッセージに対応 cppcut_message() の追加 感謝 はやみずさん 1.0.9: 2009-10-20 改良 GHashTable用の検証ユーティリティ に関数を追加: gcut_hash_table_inspect_sorted() ハッシュの詳細表示時に内容をキーでソート 色付き差分表示対応: colorized-diff.png テスト実行直前にブレークポイントを設定する--stop-before-testオプションの追加 [奥地さんによる提案] cut-diff コマンドの追加 unified diff対応 C++サポートの追加: CppCutter バグ修正 ロケール依存を修正 [奥地さんによる報告] 感謝 奥地さん 1.0.8: 2009-08-29 libsoupサポートの追加: HTTPクライアント機能: soupcut_client_new() soupcut_client_set_base() soupcut_client_send_message() soupcut_client_get() soupcut_client_get_n_messages() soupcut_client_get_latest_message() soupcut_client_get_async_context() HTTPサーバー機能: soupcut_server_take() soupcut_server_take_new() soupcut_server_build_uri() 検証: soupcut_message_assert_equal_content_type() soupcut_client_assert_equal_content_type() soupcut_client_assert_response() soupcut_client_assert_equal_body() soupcut_client_assert_match_body() GHashTable用の検証ユーティリティ に関数を追加: gcut_hash_table_string_string_copy() Cutter利用プロジェクトリスト にmroongaを追加 Fedora用rpmパッケージをサポート Debian用debパッケージをサポート Ubuntu用debパッケージをサポート lcov 1.7対応 ドキュメント: Ubuntu用インストールドキュメント を追加 FreeBSD用インストールドキュメント を追加 Mac OS X用インストールドキュメント を追加 Solaris用インストールドキュメント を追加 1.0.7: 2009-05-20 バージョン情報 を提供 GBoxed型のテストデータ をサポート クラッシュ時のテスト名表示(可能なら) 共有ライブラリ解析処理の追加 ELF(Linux/*BSD)、PE(Windows)、Mach-O(Mac OS X)に対応 BFDによる解析処理をデフォルト無効に変更 ドキュメント: cutterコマンドのman を追加 Debian用インストールドキュメント を追加 Cygwin用インストールドキュメント を追加 チュートリアル にCygwin関連の注意書きを追加[山川さん] テストユーティリティの追加: cut_build_path() 検証の追加: cut_assert_equal_boolean() cut_assert_not_equal_boolean() cut_assert_equal_substring() cut_assert_not_equal_substring() cut_assert_not_equal_double() [グニャラくん] cut_assert_not_equal_int() [グニャラくん] cut_assert_not_equal_uint() [グニャラくん] cut_assert_not_equal_memory() [グニャラくん] cut_assert_not_equal_size() [グニャラくん] cut_assert_not_equal_string() [グニャラくん] gcut_assert_not_equal_pid() [グニャラくん] 互換性: これまでの"cut_"プリフィックスなしのフィクスチャ用関数を非推奨に変更。[グニャラくん] setup() -> cut_setup() teardown() -> cut_teardown() startup() -> cut_startup() shutdown() -> cut_shutdown() バグ修正: チュートリアルのtypoを修正: [海野さん] ファイルディスクリプタのリダイレクト方法の修正: [海野さん] --disable-signal-handlingオプションの追加 1.0.6: 2009-03-01 Cutter利用プロジェクトリスト を追加 外部コマンドを便利に利用するためのAPI を追加 バックトレース検出機能の改良: CUT_RELATIVE_PATH 検証のユーザ指定のメッセージ関連APIを改良: 省略可能なメッセージを非推奨に変更 GCC以外のコンパイラをサポートするため 検証とは別にユーザ指定のメッセージを指定するAPIの追加: cut_set_message() cut_set_message_va_list() 複数の検証で同じメッセージを利用できるAPIの追加: cut_keep_message() データ駆動テスト作成支援の強化: 便利なテストデータ用API フィクスチャ関数へ"cut_"プレフィックスの追加: cut_setup() cut_teardown() cut_startup() cut_shutdown() テストユーティリティの追加: オブジェクト調査関数 cut_push_backtrace() cut_pop_backtrace() cut_take_replace() gcut_enum_parse() gcut_flags_get_all() gcut_flags_parse() gcut_list_equal_int() gcut_list_equal_uint() gcut_list_equal_string() gcut_list_inspect_enum() gcut_list_inspect_flags() gcut_list_inspect_int() gcut_list_inspect_object() gcut_list_inspect_string() gcut_list_inspect_uint() gcut_list_string_new_array() gcut_take_new_list_string_array() 検証の追加: cut_assert_equal_size() cut_return() gcut_assert_equal_list() gcut_assert_equal_pid() 1.0.5: 2008-10-15 最大同時スレッド数指定のサポート --max-threadsオプション サブプロセスに指定する場合: cut_sub_process_get_max_threads() cut_sub_process_set_max_threads() GdkPixbufのサポート: 画像比較 画像差分 期待値: dark-circle.png 実測値: nested-circle.png 差分: diff-dark-and-nested-circle.png デバッグ支援の強化: --keep-opening-modulesオプションの追加 デバッグ時にシンボル解決できるように開いたモジュールを閉じない SIGABORT時もSIGSEGV時のようにテスト結果を表示 --nameオプションによる繰り返しテストの指定をサポート 'but was:' -> 'actual:' テストユーティリティの追加: cut_take() cut_take_memdup() cut_take_memory() cut_take_strdup() cut_take_strndup() gcut_take_new_hash_table_string_string() gcut_take_new_list_string() gcut_hash_table_string_string_new() gcut_hash_table_string_string_new_va_list() 検証の追加: cut_assert_operator_double() cut_assert_operator_uint() gcut_assert_equal_enum() gcut_assert_equal_error() gcut_assert_equal_flags() gcut_assert_equal_int64() gcut_assert_equal_list_enum() gcut_assert_equal_list_flags() gcut_assert_equal_list_object() gcut_assert_equal_list_object_custom() gcut_assert_equal_object() gcut_assert_equal_object_custom() ユーザ独自検証作成サポートの強化: バックトレース対応 cut_trace() cut_trace_with_info_expression() 検証作成 検証作成の補助 GEnumとGFlags用の検証ユーティリティ GError用の検証ユーティリティ GHashTable用の検証ユーティリティ GList用の検証ユーティリティ GObject用の検証ユーティリティ GValue用の検証ユーティリティ cut_equal_double() cut_equal_string() バグ修正: メモリリークの修正(森さん) setup()/teardown()内での検証・エラーなどの結果がでないバグを修正 1.0.4: 2008-08-27 オプション: 過去のテスト結果をログとして保存する--stream-log-dirオプションの追加 テストが失敗したら中断する--fatal-failuresオプションの追加(デバッガとの連携のため) 結果出力: 行が長い場合は折りたたんでdiffした結果も表示 実行中を示す印(「.」や「F」)を適度に改行しながら出力 属性を設定する cut_set_attributes() の追加 マルチプロセスでのテスト をサポート データ駆動テストのマルチスレッド実行のサポート 検証の追加: gcut_assert_equal_hash_table_string_string() gcut_assert_equal_time_val() 便利機能の追加: gcut_hash_table_string_string_new() gcut_take_hash_table() 修正: GOfficeがない環境でビルドが失敗する問題の修正(Kazumasa Matsunagaさんによる報告) 実験的: ログを解析する--analyzerモードの追加 1.0.3: 2008-07-15 データ駆動テストのサポート: cut_add_data() 検証の追加: gcut_assert_equal_list_uint() 検証の名前変更: GLibサポートが必要な機能はcut_ではなくgcut_からはじまる名前に変更。以前からあるcut_はじまりの名前も使えるが非推奨。詳細は GLibサポート付きの検証 を参照。 便利機能の追加: cut_append_diff() :文字列にdiffを追加 gcut_list_string_new() / gcut_list_string_free() :文字列のリストの作成を支援。 gcut_take_error() : GError *の所有権をCutterに移譲 gcut_take_list() : GList *の所有権をCutterに移譲 gcut_take_object() : GObject *の所有権をCutterに移譲 1.0.2: 2008-06-27 フィクスチャデータのサポート: cut_set_fixture_data_dir() cut_get_fixture_data_string() cut_build_fixture_data_path() ユーティリティの追加: cut_remove_path() 検証の追加: cut_assert_equal_fixture_data_string() cut_assert_path_not_exist() cut_assert_remove_path() cut_error_errno() 実験的: Windowsサポート 1.0.1: 2008-06-13 AC_CHECK_COVERAGEの改良 ドキュメント: 追加: SennaのテストをCutterで書くには 修正: GLib 2.16以上が必要 実験的: GStreamerサポート: テスト結果をリモートへの転送するなど warmup()/cooldown()のサポート 1.0.0: 2008-05-20 検証の追加 cut_assert_equal_pointer() cut_assert_g_error() cut_assert_match() cut_assert_match_with_free() テスト対象から除外するファイルを指定する--exclude-fileオプションの追加 テスト対象から除外するディレクトリを指定する--exclude-dirオプションの追加 cutter.m4に--without-cutterを追加(configureのオプション) 実験的: Cutterプロトコルの実装(CutXMLStreamerとCutStreamParser) cut_take_g_error()の追加 Mac OS Xのサポート 0.9.0: 2008-05-12 検証の追加 cut_assert_equal_string_array_with_free() cut_assert_true() cut_assert_false() cut_assert_file_exist() AC_CHECK_GCUTTERの追加 実験的: GObjectサポート: cut_take_g_object() 0.8.0: 2008-05-07 LGPL2 -> LGPL3 検証の追加 cut_assert_equal_g_list_int() cut_assert_equal_g_list_string() cut_assert_errno() 省略のサポート: cut_omit() テストケースの最初と最後に実行するフックstartup/shutdownの追加 diffのサポート gcovのサポート 実験的: forkのサポート: cut_fork() cut_wait_process() cut_fork_get_stdout_message() cut_fork_get_stderr_message() 0.7.0: 2008-03-26 パッケージの修正 --help-allの修正 出力するXMLのフォーマットのドキュメントを追加 0.6.0: 2008-03-21 XMLで結果を出力する-xml-reportオプションの追加。 テストケース名で実行するテストケースを並び替える--test-case-orderオプションの追加。 バージョンを表示する--versionオプションの追加。 configureに--disable-bfdオプションの追加 0.5.0: 2008-03-10 パッケージもれのcutter/gbsearcharray.hを追加。 0.4.0: 2008-02-28 cut_pending() -> cut_pend()。 属性サポート。 0.3.0: 2007-12-14 ドキュメントの修正。 cut_assert_equal_string_or_null()を非推奨に変更。 代わりにcut_assert_equal_string()がNULLを受け付けるように変更。 実験的なAPIをドキュメントから除外。 0.2.0: 2007-11-29 SF.netでの最初のリリース。 cutter-testing-framework-1.1.7/doc/reference/colorized-diff.png0000644000175000017500000022116011271044466022772 0ustar koukouPNG  IHDRS\/VsRGBbKGD pHYs  :ݙtIME % `tEXtCommentCreated with GIMPW IDATxy|E;>Ip+7(+޺纻*벺^s*뵺"׊ w2=ݿ?&$@|>T=z[cƲb V^͔)S?gD"H$=wk9}fߗ.[es/C&H$D"LI$D")ŔȴISHR!'謦.MWˉO9{w[jYO@1}##%ߑߡOC!KwA0$Ca挩p PPN=!D׻&P~dgLZN⊓In8TJI$ZK˭&|LG x~x+S\0]kor%Jn*hY76Vv| hAI8;n7OEs?hx9J_[yP{>}:[&\I)eM!/6=}ƲhC;j~|'}RzA=ń/`c*g{}[#ǐyR?mxCA:*СyʸۣW2>Ă|OR.9v]/|#HՏ>FPzq*)SN!eZvu. c mVoW ;яbXrd*jf SjQ'rހML_nÜR[.0s9Cjw\)D-RWfv5:>6ݣ~Xmޣ,,ƠX^9ۢh4 fSl02%s)EaT<-e;.2؉g06-b~v'}EC#w(VXeJ^!iPOv颸ۣ)!L,xss!GKހ6_;R,:=a]~.ht7+ r ?xDl.{8^=IgߡqX VPfLFaJ[QrL$QeRcƞGC۹0frJ }Qv@3ܶ: [+d%GۯLRgmhI? gTNMȨ19/(]QP:a6*)9a\S&K0lUϾѩ,䵵' J|6(zq +( ד>"},\c=57 [_IY'ɧb|)~9sV9H.Ƒ J}#B7%ˎn/P%^~ɧ9z߆ULr8%JB&f{}ap|M<Ŭi_-~ b{RzPa|%`ԅE$HKT %_#,ߴz]0 `k6I`uLm̨l7N5%`@%4 ,{Z_{ܭeAA#r=#966i9XL4,Q-bd݅G1,oϣi!ץ۟y$ƛvH  UZp/ާCYV(nGVi.Cifgv> W]>D17w{J2Sm^(*)qkHMU"{Z vxr|5ފ:N#!upb 5䰴~X2uv4"\5QtśЪ * 4'p5 7 ,̿"vLW܍㘋Z`bJ^IQm Ϻد|Ԝdћ?!+_3}@v=!l#e| JUG0ׯ=9%?q2>rPhr40C׫ no}9!Q, &>Ō^YT&L'5^0l3j"x8axeg ̩ uM3|l`daoAXǀy9L` xt KRaM 1R3xjR3*}}P['k@̆XOHh:eqA<`Gǟ| se oo*Ȯ[b KPuCe:?Û5 'CN:SI4t ~[7ljW0Dw;Z.z-ZU%A@ PYI]i,oˑs;w{T25 /f%ݔ4/[ߦa"~6&_۩:c<( caTn)TI Cæ s1j1˨d)39=u$MĪCobycq3X&jj\qS N9{ NȃPB{%OK 91Tl | O';+݋(]uvOJ25ęް1=Mh= c@u}/$'q5mI)S#pvsNscGnJ֬[ڃv,`|o~{+S0bК=K?0EhTT 4A Sq.U ((.T?Nٷ> 5&݇>o'}l6*50TMā: 1:s66x:Q h>/;x`tT0=T>Ekh4oko|! nBMp$׆iX(0YAHq7zr(|.fΉbnHQT$6UM4b E  t I$*BW82Ȇۜ?%V1m|`G$e(dUCc)Qʶ0~ 'ƶc9Ar8khvUŪ_D9i9Vs" ->xdMXP49ӱ~1_7Zlk Dp:[/^jaj5PPm2^}Xڌ$g,h#)IAnS!:]/{6zgX##H$BrbmLLWpׄQD+ZVq)fCݘEˡmC5Dc랒LZ5r8!l-Bg %@\$NjSM^n Jt?7i#P|AO!>жQ%%%blI$*% 6 gŊŒ!>=dq5t5ttB8H9'WzI8rz>GBFZsGMr/V9#ў|bYT?f,9_ś~NαsRN솪=~HfA%K@}=d~D:͟Ppf _mF3OvM[g Cb*x}Sk'l<1/-->dLN晕?3##]ױEuqYg^i'u]۟o7!lX"|œ:⸍!nL"؅}7r8U<sb?d _1f҉ۻ/V kyW-:f Ms[101:&˷`VLuJ> J2y/o |sxia _rF]96fj0D".(Hˇe1Nu2iyG:7<+)t/{TrAv͋( boB^G$X .g/6ud-^Ԇ ݬQ0l6s.ujRYOcJ-0[Q);Tvv;N;`Opu7 Wmp7,81̹^V+gWHZtVDn"IbHe\ ::%lY4XOs:wۍ;%ŭ{qq1cnjeŊ^)Sܸb3N=K$+pEDgǔ7ZM))(BWW{TT܀+)$-hc (fA-+d%VY~#xLi`cR55Eл0:Iv`]OV'ga|)u,mƞ\vr6o}rθC赚3h}rm(ȘoGQw{j?tC_GVcH"c-b))!NF K( 6' > Y2ƜLzAhZO9IL~1p')UD$"+H$D")D"H$LI$D"4LD"'N&nHu=/ =KId2-)KYQu~LMP6%:9Bs囚Cqp*~֮]GsN6k"߾,=?5!Yy XUԘޣH"(&v ڃc5CQٿ<±6VY?%32BoL&'i=`ilJcɺI=㗔=4y wwC ?hx9J_[2ʘf6ִx(yAYwމcPE4W>1q\;mМL 8\=.!('61w^#?63u&O6J`K&~/߫v^il1Gr>3WA$Y&MDZV~ omD]ǭɒH߸^ШOE!?X6铱$x,m_.~ 'eQKӇ&&ϞEoT*С $ϛиWu?ed?.QgtKG_$z&qTv/mBG[Fx˯9=usS[̄ku|XrYX(RJUa=+!xJD5WQ4>ES|#T.C=[TY'o#uXG|:3(w?_8KmMægÒ5#{ӇwrdS]AK n?=ȶ*Hx ɒ}"NKdՏv; zs{o!vb Ro _r݉x_xm 傋Hs!)Ǣb+u~^xCe55"H}h3t>j]]#УZq8M(nG-b y˞Nj!/L~=2GxGLB| '@ۃM("FA6E?8*B@PC7 x-vѨ>7a2(Bt#q>Z׋‘'bv>B_&|np$Mr>Xڡ4nLH%sN=%=S.A1^•.ڏ]{ +=FYH>+[~ռLz4l5lo214{CkD\>0RLs&1ܱ@ulY)+7 "jv#nۋ,ⷛjS-I\vj>fI[Bɢ3wwbN-7r 12 &,zu%GθS_Ae3'O✽k)2ePNf[g;d.~Ͻ+jQ͉^^W"F)w ߓˆjXGC~ FIJpJ^[ۮ, A57rH^S!z})p+'_O8/S1ΞnF`qmw`ol}Jb9ޠ1 ud۬F˯#0@۰I磤AIlWvOٽqTJzNy窤$aKF }1l"׌ʍ}UiėO1>p}:#Ρ`Ϋn yXFZV" aBWA0eC#>v nwG{\0Mg`Gc^ԨsסMO~ʂkObٳn?< =Mg(t˟|zӋѴ?TaF:WT8Ͽ^U|}w6Ij0ɩ CM  VWzbFO-8_;ܾYdZl*\8rC{mBh:~ӆ~hOH6|;چLQxj(^]>PS9Z[ѷU; l/'$rNłX *?skq!CvɫϽ˧Vv T<}PV{TZv=Y@΍Ѩs/\Yq@_:C7Æ7kNJth*6r|5ފ:N#!u%?q2>r6xcuae]~)SS¤hOz&'`XCc5L+FZJ" XYA;~3ZL1]q7c."k*J~.mNՑtoӧe6AیʇIA B!e=SHч_ d~Ԁ#KC%¿/An p:5~8 O_"+ģȣʸI )&٘-cȘG{%Ծ`h? Jl>3'sʑgt1FWUMaQXz '8붱'  ^'8)hBR E{(}$gHZVqܿ0(JĽPYEΫ@(18qTٚ^ Y/tdHp6'ݽ7Vky&Or N@K'ӱ3kT9lmO:{F^T!$d$X5$ge~뤋џ1c>g^q$XHuJ57̞;_pmB[Nٳ/-d~ٷ߃=A⯎Cy; iq^v+Ѫ6a@-$k0U/9ݕL"[3i?( BQ _ rwi\^Vj-9#) mxj*hlk6=uo@1Yp(՜uLJKw#o<)ImO|.p66$DB:;-* ŊahE& cDnWX`Qq\zNZTʷ6j."eixy倬v7!lX"|œˀXm*#Ѣ!1 ʖV3yhWzs-H#C[&xS[:֛iiǟnn`n5mdFv0cX1ç J8rz>GBC|5*Y 5ttB8H9'W{d J5 ^(zk D:Л2~$>JɗeƛF@ m^A_I/O2-{ڹ o5K+kF#!&8o䡛fpbuqWRT'{GBM:g:w)O rT-I:(/_;84_5/,cΗ9<|tOdHN:?ƙ;Hmv/4_5XZ‚yR٠ve-ٷކY4ſA uu;'뎢fn{'X~79N3 Sn&&(]ipk=9_dkqVQksҏ!)(ty`|_ťF A RQz_(&Ҝ.A+f̓1 ˖dKgbzO' ݣ!RGhfN릨|*6hl%=ތΧ*J;F7J uԾSyyv| *q> ڑ{ɍXCx)OL8(/lxxLI ptʢ&Uu=ZT!Ы"!SRFC-ZMCteSZ2@Ft~_^JV #UQ)Fq)LYԲ/N֮_3[tR.{YIRBˌ U5t+xz%7zJ=/  A)Iϙ9d+y ڎʤ}(].\~yOlٴ*nl ?G|BUO՚,;B@-eߌEJz6_iUeM(lWD~W/y( 21Ͻ=ƤO vlOظݺ+l)UD6>vp4D"ij5?)4D""M H$D")D"H$LI$D"dJ"H$ga=>QU(6  KeD"H$ݕú25UU8F2{[2D"H$a5B k+H$D"3SD"H$యLe"lL o6 W&H$D")Ai[aPln,+H$D">L"H$;"LI$D"dJ"H$D&SD"H$=zfv 2D"H$\H$D"ɔD"H$L$D"Hd2%H$D")D"H$L$D"Hd2%H$D")D"H$LI$D"Hd2%H$D")D"H$LI$D"dJ"H$D&SD"H$LI$D"dJ"H$D&SD"H$2H$D"dJ"H$D&SD"H$2H$D"ɔD"H$D&SD"H$2H$D"}㞩yD"Hd2 Fsd5l8'et}f34#&Qje*XXf0tAר0\ytVs\6u4-d;]0rx#9 Deqv;ѡb#ekD"6MWOHo8a*Ljopd  ]Y cjv| nfעS]AK nld[aᵄ#eA6'Kb;-U?Rہ0:)[K$I{wϋ3[ng/gvu >4`ps0M"]g =&EnfN%kx.=svw %o*u'%$Se.YmU sQ.]p9ۤr yv I<*03T ~SMN2/h0P5q4w $* SUF7ӃܢhMmgՃEFjIS5 &NEOf;;1|ʖkv3 iɰAyE%^]ɧ`6́ؽ5<_0۲xdn7<'s{]Z9쓘: L| zXu?y]K7,?w*B+:O_F՜cWM7S~Z.0Xn?&O%h=ۓaʩ#H9+On/\Y=[…̌!iWK}uP&H$GuggcKB.2yb9M+ Z_0{@գs[0H@(#!!#w  C IEZ p?`Bd@MCO1qoXycq!DCרsסME`ĩړX2<.%0o@/|y}F06?E㩹X~hε7'i3Tjg~YdqcQʔbH6z?e˟A\ abԠܚSM Dn.#l'%ݏ5ʒEKbVszN:Z•'ڳ5ӹ_/a7$g2ڠA|Ҡ NlD:Bp2ߗ>Rh]l3Oo^^  ܠi* odjе3N`m,mКKH`1Wm`mgC"h3'ݽ7VkyfJt: N@K', Ehz+['{m֧ W;Ґ]6ڦ%!c$굼/kytX:KVou0S=,Y]]Y'|ԞKd]*hc8{+H$L5qxV:[5q"P1ܔG 5'WZ̪`F Xk,NIm1U+FU1t=˲70I9ۼZӾ=0YToDDV#9k.?J~kTSf$K i|/ T7_ c wr>t6]v4=FLD՞ϥaox p. r- xeB%Hz>qgtͪJb9\~eC7BQZ 8ܬҢxCЈ`zӟg5G x ;$0H;׵ZKoHoJa١OM%mmf8umBI1&PuvZ=zL4@5'rf)V C0B/:5` cDW+&`ZǥEU| qi8ʡ29H> gw62gR';(D"W:v?`?Hy/:&b9}\j6ssTB5Mb fz !Xn1エt YhRl.{'f0$W`FޟJi'V`^{|/uLuyssW B ?ZͰOU%,w! kWM+=j^(0Xr,* /Ws>5l͢, L^+ށH=^w5{p[uj.l8$+msرj)TN0Pǵonk/o[ gF2͝_S\HY˪p^'Lv :zSǭ#p8H$o.K[MŌ3+VzjLs.3~Μ5g.׵GK8:A c F}Fal natX9HPTX90vy8xf#&ml0mJ+zapYl'J89{LLBe S1[I7xQQ}@AT:X}|F f%":!!%HW)H$ݗwk9K2.[es/ge-Ƶ1Y7 8^gŲ"]VFEm۳m}i:\~P\K?ǃh}uuSN=࣬!9;"oŻkхNQs{8^4Q$[\n$-n͹K jk^S&'۹myuӡ'S"H~ɔ烻j5?)4D"x#4D"H$2H$D"'Sf[E1;9nu'9$D"~Fs'`wO%ENrJI$D3O$Acu)^O!OZ(2{j1HXJ Ψ69f&N۟lՔ4-)\~J_TH?/Lړ32wȑ(H$x5`ʌ3,g~؟LwC7w[u'9\3sǃ/3ӽ,(?lYNc9>y qѯ*娔H$Im reYNGUOìo1Oh>dfKnxC$d/6s:vq㋹5똬<}P,Z-ol2ZړX2<.%0o@緡f%ӿW閨b%liѽ>Xɒ]NLy5{N%GD"HzmeJ1'0!_’]})<0dNb_[˩[?ol?;. cwFBHky{[ P_P=a \=xi Np6O_~)&b% T =1}* ϲo y9v=rg5jN[ꌧr&n|S6sf s %H$(.)n3vXVXի2eJ̍\.Ə9s:-hbRzON˳U-IHC 4Rm=e[}VwL9-]<d?;6{?3;#F!`*bP=Q.VMaS8q\v!h<є%ew{1I#g6,J͚3̳}~Nc{|'JaE~[nIс}y+ yB!\1q30eX}h HUa؈>d vW<;B_X!xЪJT;E#-ps AG!v,w}Ƴ_ Bt+S/ۏV1yҏٝC@ ytt/jEh89{J%wyXmSƽ/7f7FG %.%.>.L{ ^L{'4]؝({VQ4OHܺl  0)~Cg ~7h YVӔŪ)1Wiss(-f* JBTIP7=*v{k?)-TceϪ;CwK)1$B*(6 xn,gudVF317z&Yyzv~^#DtTkLwm0phwF\sLW2BH0TA7O>~ZcZ;7vz]fWZYn?Z0twTy dT RO_Y{Bl߱ }<~fq`P &;o bJQYE@HWz s wU dv%9 Ynj ӄS5ֵaC S_!H!h|޲qpQE#Ru-NhIë]sd1\pI' rG;{z;sitוK$NYȭ# y(C%?d7\hvǃ{א_g"TəitV+&:A1_]7 #kLJZH ߶b<\YfB,+yO)SA?B,ϫ38I ^t4udߦ,L7ǫ"k.DB*JޡjyyyןkײqFFU8p 'O*PdU&˙惻RCHI]yTy&&ƣoW ]̭ +"STx` xC ~Z9¬Vq$9B!Xt0s&Yqx/Nm)kʸ2V,Xł>4[ ӆw$۪0lD}sxo kLKҖ^@LoѵΈEի7u=ڀHQ8iü[]՞}wE:U% k2Vf#kST*WbiX@QdU MoE_C瞠A<c33@fB_bepO.s_^ĹKXi+z^6k۔qKͯ =$48J\ (-q(qQ Z =H#65i֨ʋ]؝({VQ4OHܺl .0L^\i(<"+ V$ , VT?GL `A!B{E@%B£jʞx奔[ BwZLrLvI$ }Leڔ,!JroaAlv'+TpEKgUk"C:*p tEaH8Wo\cӈQ4L cߓt $[7gxa;"!hԥ=KMA9f]a[?*\yψO}ɤ7OHYXlpJ 0P}@2 FW~iJTh2U(QdԢBQPnA&S !x~e>F^nBsUIM;ocÃV6(-g ]nWTd?H{KDŽ1G&^ ($eaʎQT|ᔎIbj?P:0q2Bf2vL3i.6vxjwx 1d/BlAw;U2bYy*:U!0JLEa1tŭZ帀RaRf^CǃAAal[[V~nkU׾m2{BN)o.һQhyM tJ_gyfO2ksie xq .q|w x-dq7r^FInAO_s2GeZrfݳ슉F_Wp !A |eRfU^BXF ]L~0\b0HFf f=z(SQZi41tW-Ym1C}VȚ;)!ʼnCy>߯?k׮eƍ5ޙ1p@N|MN'PuE$115{G}L|WPӬsyN+^_) %&jE&UHJLL428Ť4)9 ~0B!~)^ 6oⲱU{}媕L2yL!p=rW3>}Mv p}ca5OVis?74B yбB!SB!L !BH0%B!B!`J!B)!B B!$B!L !BH0%B!B!SB!L !B B!$B!`J!B)!B!B!SB!L !BH0%B!$B!`J!Lťv󒫽ԝ\M7[1lN]&B Һ0eHR xߟz0̆CB!Dc4\}5O`׬vNiB!?`sx,^tr̛ / o 7E$%u1)ޟ{]*dM]wG7e !a5i>/_u&]=vpyEtTّ-<d$Z %.<zi!ueɥB!h J^w<ɳ= q9twctp?7GVח0N]vB!^Ħ8.wz`3dO !|eA UUEz_!LEH6$1d/BB!Dk!kK_C~ի`PUw^$+*̻w27O O4g+W !Be3zUV ߪ.aAmYHrF';Z!?` r~B!τ}I!B)!BSg{zY22BYB!`J!h|FL$s6zʷ약 B "RcȜ"uÖAqϾoSij_:%]--?=;eT!"ɢ~wo{ {WPv9i-b뗧-Gu=%_ͽɈB!D&ڲxyWo`1ML1/B!`*<8TB "Sc 4 2eL?(2jזǬONnYv~js>Zk\Rfn-A?V˹|:٭;)'WqP1 ULcv8)B!)igŝ0+:ŷnAҲ2%21Ǥ^ ŋ2݁<= `X*"3 =IY1[FI]/]YAI-E!#Ҍ#zTt8bGMAQʴr#}GЬ*X؁5VKPrp80UMm5&E'jvB!B4`*wE^{\63{9{5 vfTTk2Fj']'KΚՁscR[V 'Is?!B)5}mxv&1j4&(kVK, vf}E+\_GiiQ\wc['ڳlbXֆZ**eQd!FM2ĵ޾% X,P ~o.һQhyM t<&ݵcX214k=2mن\;#t\xN|&ɻofQal %~?7Rn]Ĥe$'wx/E!>z]W]m^|Oԍ0yauuk/#fIq$5 +N_PPcHފdU?Ө71qd$pq2PBL*q¦kbAkx?Dmw2 gPFB!R B!$B!8%~7PZ4>6^B!#+SB!L !BM{Oш7sF՝ZOB!TDj s_$]`2H67hw\/iW?5-6|̮ǟhE?OQ*>ʿ!SFB!4Y.b^`ooa *.'Elrׇ 磴97dЛ3oGJo+?0\:uK!B8Menz b& ,X޳#rK+ 0`:暋_2-9k !B4`ʿ!UE:$'<{>iH0Y\-Ig{o$B!D3 7 2z`l_޿|(e0 !&{mB*2*BѼ;ay3WhW +[M&B!y0GF+Di=t/`2*BѼeE tjQk_^mP&B&>6d vIٝy^tLٶ9K3Ct#38 xw:>w< l^K~쀰qC=]ƊXp؇5%Liml {P۷ZgN}F`Oޟzfsn_ۆSٟ5OHYO;gg'_\hsx,>5m0xrnKkᄫgr̛ZjUuT,0gēԕƴpi 0v2^Շ~^QVyê-S'jD0W-ُ-L`G<1m̹ bcs{οhu}ԷRmZ&=xu@u?`+_ '>#ͱZ! . k8}hX]ߩ\9dL#ą߀E@ј|*&C]1s䇦`⏸';ѣɳjop۸<ecM%. IDAT>^b(gT/65iֈLZ3K^-Flé-еMFHg^'//c%,Ak!,|ՙ,w%,mL~mm/|zQ%׳Ggّ-<d$^~&Կ績vcʘI;  qeII-k?I`i]^[|1fy̪xQx^҇|[;/geFu}շRmZQ,ڍYmKcR?{&f/bg'KcGu9V{§LXĜxz>Wfe|cC b;YY.tqW)KW3Ptor0<+w|@lbzڔ,!Jlɴ܆Sџt1 _?#W[Ej-IdhDR h,yzg{Vե(d/E[@^ضGgmmTO#P'^h,ߘC{7F|c~Ti';vki|u7ЊXv~o=<ägٌYu/)g[ N^]Ï96j׀Zx>M_:H) 8m,^X~i9v24g4-VA־Mj:sCRL`bIQjf|73u tfNx]a;^mSm^kMk W^m}N2V(@)(RƆYu əcmQn/;ftGgSHc4pjNp8;TFYvǬgh_Ŧآu}L3L1dBײVKYαp"p}]9q}GajϕM~kiqToُ8mmE`W4,U]ճuh]\9nRZ# pΕM5=&"5.z=8UA&sKp2 '\?ipmWT;4C6^;Sj7\Dx (&+F̳eQSzqNEј8>rp/ҸmFǗnEO%mcQLvM=®DG:X_!/91&95nWה+̇f2ctn ˭ ]t$6<1a,s8|*t(b-Y]u~zYXgyfO2ks)A_,`"`R΋ 'ӾDjCSg$՟u^vo.һQhyM t6ǃ{א_g"TAf;k ưdb,i2{r:FInAO_s2GDz\{LN¼{'{JnQ3M{og0rTrfݳYyklKGL>+L#-KP ?m)t̪~g_CAyMp_q]؍1/zWsQL5 DGG: ׆hX8sk+~֡73[eΚg}_S~D3cy5+//vZ6nȨQ=8p 'O~*>DMQ;.2dUӤ֘bNOgfxf-?%-/'%(uz6Է}5 Mџj7۞8.8>75]n;8|en|5$V;-xnJ|FD4log}8zʵ!5ԚWLL1<[\1A/c_q}؍u|9G]\}N fSmh9M]H}s ڑՙϝOp(8oϕp}诣K+}Aуn;M b$PTŽ]N<:{9 c`J!~\GG B!L !BH0%~y1LO=#HmAՖ 3\i;5m7 ,xϐьH !N?#Ţ6##2|,ߘC;qMvkA뢨Vf_0cNGK2|hy**-}-ޭq/er\o:tSv|^9 !$VfyndG.X.=bZRvg4rmcҭ+VM:6۽?ẂܾfKad[CϠxm|wp՗9w![̿brzc/֘<3-nLoѵ'xO;gg'_\(@r̛:+*Yygx_ /@}H-n}T{=R }!ے<5W e\ w+bP;`qp%'!nkOk@x6cOYۋ}h^tSBW{hV/?}ݽkMS4|~>P~W]BtF]z)݋vro~#tyG"O{)OyiJ~93la[C3R*MMk=}y.a%Jn y eP }vcVO枉KoX rTj,P^3=_[s v<9eeZrm2}~)w5[-x3YJY'fFOA}#Xl)':+}H,`*Z:[48Aָi]R/KWcP\Lx|A;|cow|cF~TbS"ֵ;n-&1w{R 4ZF x8TT^T£K6n/_XW}fp'{q8KYh+-wL2 o~ǾR_U<,17z&Yyz3~*ԧ L3bҶ;u4פ{i \9&xY6ʧ=זZSdf,^o. SfM&UAҥ15; l 4jFR>3nU<4(V/RvEr?;lp}Q^TSeZB6<Ϊʙ녞PA7݊j4tJ =m?7(LE`.%.5/b߯sM3n|&|ކ{N|R=6 Z٠Zk{\63{9{5 v΍۟ԧL=#Bs3_}GTeE3͒ jMVpG&6+ bO:nj7 {B/T2ت<0Naqq@B֚tgЩ wqIim- V4,ѯL:\y} gca_2F3k ưdb,i2{reں?cͣX6x>YK5YqRĤeXjU'>9C5?/͚{@ܾqڞ֡73[eN=%P^yyyןkײqFFU8p 'O|CZ9"pij!#Ɇ̍Y1q$j:ϻ5U8=<[\1A/cXսz kv)9%j"gDUp}VSۛBzѼ5y=!e~tY3Z#ϒ𕹩xԀNiܔkZ8x.ׯoBrrK1#i6;iq|>㔵=ew^?cO !W<Ȧ͛le^_j%ӦLkv^uO3 g^ez]nvqŅ'⾈n@Mw*->V%2>}ug>%} y38ͦwxf~H'H}VZ׼妶вzů>IoII Ppk^g>w>á\J| A7yŁf_ϦpCxs(*wE(ٌ%CwS =xԷo1B *>zC>nB $B!`J!B)!B B!$B!L !BH0%B!B!SB!B)!B B!$B!`J!B)!B!B!SB!L !BH0%B!$B!`J!B)!B ^zxxt;B!`*=xX<>c] }syrDfijo XxƢqYU4>Xeqfe(By`(inVeLݗKnuM{siĥv<"eİ;i0WtSZ\6B ނWUsXk(4X}uך} ˠM0S$5 Mqi]NpuIn=ٿJfp!- !/ J{Yw ﶓ8/" |:]A^܇mA㸏ix0؀4؁ UQ} J>o̡ٝCOkYOO`׬vNia9 !$jlGOўj)W){KT(`Bi0;dhtP'Ӭ|=+ h6Np.SgnEp@{U%: U'45t +Շ~U5[ ӆw$۪0lD}sxo ]M`~sx,>k F"xrØU ie,/`3PVw≫Vǜ7P]ϘBDN|* hUKMj_o:+}ےP ZgO++V ׃:g-ޗc+byFJe6tMV]'//c%,A'}T}۞"Q^J8o12y eS }vcVO枉KoX ۏ/_u&]=vpV0*d xk_%y/IM#Z}ֶ4K=\n}a%ے;茈ۅH !D >aT8C+>bBS7Ic\MVk fkj`i_8HR*6Lfheh晘Mن**]0I $49v~^#0`97搯lv'7zojlb:y`ҕTu]M)V0 t5NbS"ֵG5κ-&1w{R ǜ I4pFpq}7Ϧ/$=_ʷp{a%17z&Yyz}ji|c_P~dK4 /qf{~ Nx{mivg=|".8FnZ_Pcxߊ+kknW4LvTD 0k5-f9 p?4SŊ&[/[kٚ5&E'U1 vc/+/?ߍ4<͚L[uչ]{סN2V(@)( ʓi{޷yu.  (ZUjk *rzg<o~婴ہfmvg}|SY=gfL˞qq@I,P2f奓]3PʉK{:T^ujU"h4z?A7O>~Zcz\f=K\j3_|_lRM?6Vk@EUcafo#gF7Ў\d}`f_ v)δn++ bO:,KU=[N 4MJk{< Wl;jJ/I(W]K3S4k2t b6zӢP IDAT>Z݂n{}yJ'ⒶxNȈj#9g Gꗑibt gc0~B4)klKGL>5u{ y1XhXW6+%:jMBB߯Zl6̨)PIT,l6tM^1zEaJDu&]UCVsL<^yrfݳY{"Gxxr-<$&.#)= Ͻ3kFL˜x?J4ǟ-g)/+bC̟} A6sWk&4X],9؟wbcXܒ(-=(ku]8 vk2IVRUwdvoXɭFpjn8)>\߃r?WKc\Z%vRBn~ #m'Q};W;//vZ6nٻ*ߙےH7HY,(+ kY{AWX\"A4"EE@Czm3 $!=@~G3y3 :ˣO>;w⽉q<48xFiFc4P(u| M#Q`(l h4j8 zN0NA wGlAADie۴wb*ܟ$A̽(ßq|^xD\WiDd`,?mbBm].r d*ER9(EN-u.pQ޻W]v6=[&`N_MT?˅(=ܜʜCN!%St4K\Hdcj6!yP:iu݂tV֟";Uzpl'UϝQzg~IYzκLoΑ{xdyfCUikiMɩ^0LTB L.,Q,7B!SB!`qpF̤̄B3,yY]W҈䟆)NuG#52pBH0UCpgȯv[64?ȕz5{?T[t?7u`y&jȩma̚:cx@>iuo+4:PL+[ypDr|zLmS˿Ų5|>sUy.w n ၻ nݘ[i_6'0BS#,I.y |_ӓU(ۋ,r<`lɨS*2!]pem} 4ԟiLiS|'@!n c@kn<>mk39fdۓ2<1e<5˛ݠ LE3!_ŗ]==`ηǧeOFiܷXUez78"yx"w斯nEsN>>7z؞o|Uܣɸ+0N~bņD[/ꅹ՚W[u]+fMN埬6l]zj?L/6fE-@)!lhÛ]V1x.m/nӿamfVNϤEX3z# >!#mr^pmܜs5+ 0r4b+h}d#-Wa o ]êe{<|B :apɿ?37ּuJ$_qTPxkiOH:˫EVBgp&+yQ}9{~S)8#]#{٤D-\̪O$DաJ|ktÛY襸k/.^4\`Dm꿊颁dy!1-y榱=ߥF}ľaR06cɍ0eWtKKrN=Y= si&\A;4}e]ߺW@[8/ԴDIM{ڣtqV/eY6a\tMW%G ȯAz[C<]e5h{3'/&%L5Is[Em WW>͸<Â\Q9Ԥm%l?%;]7$372;#LYL}m nDR-¬mCXlpԘ΢utmWG?~rҩ;V}q$/is-v}E t"#BhAߣ=yx腅l/Сw޺1/%S{I>:~SzQ@y= 2aL Gnx0PkP}Q]J˪>:GҶi vmC|H.Lu"5qPpN&A)ĤlLNO7["?ۍtH !D%M*uvOJJ=Ybk׮eСx^^}ر'HGHCn "t$ß ҏWF8]X&[ $/maMrG2 nod!='Xy>msİJq//Lw?H`[QG?!{ʓ߰Q#G, 'TytAlxΊ_f!&ډEz8x omW \B!Tq0e=[3fsΞ*eWu<omWBQ@@!B)!B B!$B!J=pf39}9@ySO>/]UaN`Gx*\L܉ :/0:4Zaw_*\!StΨ6쵧6];m&ؚjihB :!=OhS{$D >Q| +k~\~dJ#t'@V?I]WAְ43$C?kOLFP [} .iVx(p`RBHw GCʇ_Mv^B#lN 38xՏ;k;D,{񘕨v$)rhT&O[nɕ#Y!ğ# kǓWuM۷3e6 ,^{^7𚴽h[}:xƒ3/do@\w@;5td2f%{#0 q6ACz1:/wTv}.lEkԭv؄Qݡ5cƄO;"WZO&@Y/1;~ 16p QYk4B C 􁭝NeBd<#{wQPtz Y@Wm؛鄵MRUŔw:V=xOߛo,޿KB!Έ{O]ׯ18|h \}9Ia -Nь3=V'c;{I`{D;^ְmt5[:}E~r 𚐛S@ZNF۴:bq9,"Ucdާ,YM0qhoR~Zg%j W\_#rVIyHE2'$}C=ǁI~ kI2~O5ѼZYu O÷JUaB׬hAZFGl4NX m ci/ކitMhBHb\>7/_?|?/7YYcGѬwjms|R%;gڝ fڝ,ra12׳`wGxeuv|y?1j>FMwkŽ:RˇO!c-}^M JL[``Wo<5B֯h>RqÏEGkAM^T+(Fl4IǒPm=y=˞}do:Q4rOx]^m-s@ef7`R)o\iXlͫ\)Kgp*; ]N1T7b}w KxJ4~LP󤟂TyAנѰ@/ᩁ*Kf4BFjp3D#[~` ` wau[var6k4}FP~YaTi6aP𙏔3S%ӘH#d< ay%ا/4/r4 !cSW˜g-ۘ=vK(Ol,bZljk86S8FqJ >wpSS|$|u%?ϗ0go zNR=eQ.QNmɂ/ٰY gBױ* v #Lbd,:_< {O X9Y U3IZTͥ`AyAu7؄˔Y!ęQgyȶ7cDL}'B#kųU4۹ߘ95VA岶#b5YL}m nDccsZhzQсާ3!-͂E¯d Ǹ߆OW=\vT'}U , 4muBzְ9crUk9[$?#p`z.EhӠ@ !{Oy3jR%0aS~Ҳk(s\f^^A.5ܦS(JP3+Y7$jwLb嗕298ыX!ը܊Y3KGS[B!DRG@WCR|2TK; dI-AB N]S*J!.E B!B!SB!Lơ|`n[,y?4l,YB5USK:MdڜӲ6];m&44а41nGJX,h\(3en9]ãZ/-lu4YhE_N2J(-HfMWB Ny#^e)ؚIff]-S vyܰ5\`^ӎw![ީ %Џ08{)AS nRRUP95-V.4(4M#h 4c]Y5EVNR%謰zFy8;\ ĖaV @*^w&Yu+]4VUiDc/L>W|8kѾۉflT4ҔnɎ*PjeaX`y S+_Uu/6Uh:3Ƚ ){sMcEǎ, 0cm(Ufam5%Ei c|YAu4&Yh@>6DU] Hy]cMJ)VǔJf#y=.GB3x=c_"Xg118>˨\,GޚϤױ+OZN^rs H) 00OѥemG5CZJ;0O'YfatO= ZXL 8 Gj¼͢PJMϛ Rb)^Jv_| (91up9BgEGnaDD :>o|濶^ cZ>d`|?6|U#|DK1Eo[mѕWlv4nd>&mvլC2MA&`}wCmQ^r`* |t(H7N>-< Eۛ4&ZurɨU^m)Yy*~.ar =G+W50WO|I-GaQ%B+ʿPB!36YGB(!g ]@!B)!B B!$B!`J!BH0%B!B!SB!L !B B!$B!`J!B)!B B!SB!L !BH0%B!B!`J!B)!B B!$B!L !B3 .(5-8_NGG{25'B 3~@xiQG4Gfak0O!t֧x 0ʝ٪{B!S\c[cuيһhևF%$z ú2<)Yw厂iԭv؄…Bqjm>#מâ/xx\U8~#q-b )*2 M¢71/ާB!NGSW; 펑,^Y]JLBfydڝvtd ֦To^}8x;dRB!8ꬿ&8Navىٱ2RB!8)OGhpqp*/B +?u'! {iA\ITLm&-BSκ<xrug5:R,_ _5 Ke6M8 J!~Za˜<.0y^ǬJ"b/1Kh!B)O B! d%!B B! uaWH !g)B!`J!̨|ֻ+M/߼Fp⵫ iOҰ/v4~gsf])x*Au2:; vnǔeAYgm,Hf?ԍk_!S!`=g" R1 <;l]`ބuZ6+REzxW|B.۹{ 35H{8mV@cqٲlV5 [$m";0Pdcxȁ[thMhHlxC:ŔZeo *!Bi)QYgi2c":f!igoS7?LzAv!r){ KL~KRʆj[b_~aüR4I r(wgeY% cT_αI)|T.wy#4@Xl!Յq6KB!ȁ{{! E(ʺtn ;GHky3AV>`GtA d6&C) B05a-i` ÂI(kgfAQ?Y6;#ʉ$㙵qww{pS`Wr/kIkB!wSPy^Xm8Bvh;AYx \܄ Fة{cxv|&۬F.r7lMiCv ygid|0({Z ϩ4]Ӥavdg,Q^>gȗ+Bق_aHjӢ96T3FNn c<4}I0xi6tǾM+[ypDS|pƷL KY\v}3x[;g=o?Er}Y/jћE t6=?<+ }AwگVoH$[vѯ&V!S.mJ1 ڞZy3jFalO`ǿĔ|/ov22l:|E#4T%?N=舕Ws5 vXش6FlZlaMx@)Ȥ當M TXsfEaћT>JH9dzF:HK-hFa=Us,ORбC,jB?{0x$Te:F"Iw,p^yxm,Vܯ̒V$BH0U,f9$רRl.x4MPi(H!`n%1-0ތ^?SLiEB!ğX7Dǧ'r]g\i;obâ҂B?:ҜqjFlN+d74+fmh8ROAɮ{g,noۙs:b;>b kqMy;'gvyx]!`fCs_2)G };؝Yz֫/vH_~F`,"lby^iB!S@oc"jʮbBK!BH0%BqFmkp<ύ\*h[Wƞ3潲v]3q>A_G~K9 dެƐ0kOjkZnSyn"t䯲<<DImuSp=PV H߳'h^}?2 ;y;n痟Wky@Yy#潲v]S&Wꉋ4nyBQ"ל/N܆8Ơ!=dɗ; kǓWuM۷3e6ᱝe Դt *yL^۰tdٹwjcɬeJ` j̫s{3<"L^2+'SOKoaZy8Ypj˳*Yey0],VRU$z}}\c[cuي҇Fevw_И<7s |UVTΈf}xitGKӨYyX7Zށ7-.杂[rLn=&}nſc:t0s>O*|U7ogy۬笚cʥ vgϤWzU]Fm^Y[][lμCq_LϏ/WZ.g,<^}پ*Kxƒ3/dWUy֦W\A_qf_q[cתjuxU0L?i9xM) -¢,v_e}+?'O~^,5׾%:,.9%O]Ffy<|&}n(.-#/ՀѶ*w2 i/Snnyi.~QeDyƵjL͎e;mY*,*/gg,d_ؘ:bq9,"UK"h=#Zr;KYM ^۸Gt(U3/u3GZm(_dɶ T^iq~Dt< KKw~\}r*svO~dgT4q6Z%INwюW5rʳmZ4"uk~A'Aeo ^L|~lu7 D-{rka+Ԁ(GH5y)}=k]s ry8(^Xy8<ߣ-K4<~_;-Y**r2}Qy&펑,^Y]RzN|S1w6nG' ҼWΊ^U:M_!G3)l2Yv'?Ȣ)՚wm"U}8x;dd-]5Ӽf^ԝG2/%'~ʬ69%8\ @lZƪh&(Ep 4 ylA >+~`T^Y6_s%XpWܵm(B jzLZUJl؂11EQ_3t{)Tӻv,pNSXCUH5y`uNGyVʬ_>&t,v M׊~).NtChE䛁{RڞtUYfUmEd{ʟu\[Wɯil?Wf}:gt[~6qU㯲v]['ڴ%b'(G,^cdTV>w[i>W[jWQyֶWw|^ /דWct]E0.|)yrId8rM玕U k !8liqvZ C!6k.eyVVf.yb9pYѨ4BR4<֧;of)j욅FluiteNMUn5=}Q@Q\8u -;T+'T.ʜT!G_/?u'! {i ̻x^e ='KΑ^n6QY:Oڦ.ghF嘖0yA4| ;vELy]~.u>͋5Bni IDATrUzp@F+faTvUծ+jU9(݆֍˚BʆZڪA_.kK΃ծڜ *C ւe{,4>kUZ>i? eL43k3oMØ<y5#<Đ+G2%KGm gVM= a^X\rPNA5!'E&M^˅"U.˳*s8<=3*QTPA@@² g'tw݅}>wj}ߪzcLqKF'&jN z+8a'3D{cū;>d] =FpULZٸ$ӧ3Wtn65BQQcFaΜ9̟?'쪪*Ǝɓ.]ee:Tv-f{'5TEIymw.ې{"Ν P-;s2UGkCkDL֐grwm۞ݵ.)x>+@vv:*F O >7iHs\=F[1h|@q#6ztRm?δ7qߗ%ζH=[k|i]O?q]jC[DpMgYuEy.9iTWv9v%ޓ b=1<>1 `(҇U:W=uӍ,XOlY39swϞ)cڔ7n!benY!Xԯjʊڐl#6<w[^51J}Dc~mԳ5HK{-ش]dT:s[zA ϮwDZKS?äI]V},F |r?My/)'3{"c楋}I.\~r6ZdhXtV#mp/H9, ?` `㪟vv׆xuOeBK啊nhP!$dԁy)A_ 5[31ϼͻ *MUgm zPߖ"AAqAAęڍS&Df Δ tLo.\t<==۲{&-{(WzQLϣgi:7jO&ޓC͈]靛7s q9~LF%h\]hBMTfM=>`L6Х2 !i}Pyi~nSZPl$ ˃-wf2!FPOJ=٣ e` ~b,'57>3sz7\})ٓ=P%+3tͤ[mU,nSn0DC)i Y Ggtl*aGsx]߲nX Jat[vW)h𛐿U;UKfPG浗?ZE[~ŒOq~x Y;z6~Y5m>{ }K[ԙJS [tt" w4_&X]@пUkەIa.y QR^LO_Z.{EYshOzH哆Qfxi7஋qH(`+%;/_i'ڍ˫/>S`/q ,C-v 0crz ߓ>Y5YۢuQ).*P7r?ro;%c޿a^c7rU_M̛pCo0'rdfȬYv؎y<:j}3pNk^b9v`}yMg/mg6[=hgW3z~YO:3ezs9(7>uy}YFOtv0ݢxw3VG [*l))q1VZvxҾ 6Yt)7M_c)a#q:F⏹͒f!z;Doëٟvg/ gLI[ǕKDYG@NuJ7;;hzrxa.e;y} ٲxEwhNe 2偷fp/qCs=ЕwmO[a|EWwe"P&SL5N?<=H*T?):ȥHfxrye<010HWz'_Mgb%Yb3̵},F)N.rPCNߔ&E n^* q'[#p8МYJzu7Xi;i0A.dr5c7\t]yD>㳟w^y72#2ӡwJWfNރkk__|+Q)Ah)}jD#Ѱǡ8Z^\jrᔣ/XʟLӶPm1A{|?\ۇiEr z KĒg<֍n[o3߻k]눡FIBJpw#Y_Q[r9sSYVǥeFe8q^]׵GgZ, |F2 eGЭyb /iمpw >+#toSL> O7=f>xu*Z۷G=aoqOvњMSF Zh #3++>r{MWۋ "2)T!U0r9J2|]ҕtCazrdHFrplKɴ=Yj+d˱0<sb]V/YNlPCpue`ͷqo5?:NM]Ƿ8l A]~us/{|p;\C(\ BR2{q\j7*CqY0'.?C[0zҞ׃8ri_{iezcA)\vms(yw_n+O`eѧ0.}܉sSFwܿ-n s*d3`!6js6Z3S(.ϫdPQ de7Gpb3S!π̪y3[cqB\r ŷJ]3syYIڲX9(cf̔t //L7bNE,ߟ%#ۧ5c(9ta^4rݪsoMu_Iݹי]\gϮ q݁\iiHA8's1&/-HZA:[wL܇ϿAFӽgwFinՃ2dϞ?|'˛o"euɥ{jC&0#zG7h=FpULZOZ UAO.**b1̙33~ bر<d%A4놫A҇u񤦒()ecn4eXtRSy"6ĺ7=Ty3Me;Ҳsmo|Xr OL)dz|T܄Kf-McZKZay|b>38zLVOWρ{|g[,_7>WY(Y?0osm7eVTlM_Â]0_sMef+Ƒᫀ -{#NYN?t-73"篛H ~j^yӝC Ϗ~٢=(e~Gd|d o~gM9]'ɒ^}(҇UYdyYhfrYgjg^vAT Lz}RWy8m6 ҭIMB,R#L7JQO. %K6HScdi_hzHʉlc=xRꔳ)$K Bk:SbɷRmplEe!50yl`6(~ۢW5nִvزijVhzHC_&AhmE팚g] Α#AAęAAgJAA)AAqAAqAAęAAgJAA)AAA)AAqAAęAAgJAA)AAA)AAqAAęAAgJAAgJAA)AAqAAę-1\s(nW!b6=S-˖Ӳe#WXt. #؃g>Zڬ `␭4U0@zi7\Ɗ˷Ǩq{xw]_' դdn}+møᄽfQe=<+nܴHSm".=KQHݖG_]wgYe_mVZgݭkb's8?WEfQA#S9r$Z`&S [m|G o?nzc *k{H.8D^v=_[m>=[]aI5p㥇kosm/L8W:jW_xڃ'0.Bݰ%, 4H Ԭ|ȺPִd=B]ߔkӋ9n-ŷfq65B*`sXg_^M▙m$`f?KYFVAqӄpTjal%ͲL es3/lWnvџ_+hyYik೫Q6^ENuJx: fzrxa2qrn{}1ZQ,g1#y#\ e\=b}<ǍOlr^_V q8& FaEI&g R, ׾I ]{`;?.5+b~Iɘ.jA9n>`>`NjOӷjCw7p)]_1{ڻvJOaε}*t2}wg14h4S y^xm&W#'-v'۾2p]´Z-o-kN牿̽p;%q Jrk(Ln>;OwEܴxDm 3x~׫kU~'2Q7g2YQWGl" #o![W(!BeE %5l߆XYm|Sn{ݹw`;Gְd˴R,8ǵ3]03TSfRA62q=+u ղi[5 ŭ-<dg%dN(_.ozwUJ2ӲSK?UbLYưiYFl[+ؼy#~^pm_lvZQFSkO͟yr]/SL96.KE!nc_0߰2@qI _rͿ?WcLx6a)@[~׮f;E W2crfۆX~f>O^KNԄ3rW(i*D K2\5"Sgh;skne֓Y( G9Nu~)އTt }z*|e|GnϔyU+(o eRhҫ,'n /;2oMA暑9 N:_y Х1>jRQ?`A]r IDATu!l]n2 #̽-%-KfYcҒm,z;/=|%! О,?dzdlpG!KrV]hMם|HAk˹;bWvl؅Sauf5_Y#9{ 8}fRlwS`2 B{LS!π̪y3[o܉sSFwi+NUdwfރ/A5ka<~o)2{68u w^| oNXdKڻ k0q9~"2nT0h ǸezҺR9SN 4fZ<6>G^<7IA{os͢J`9n:4=r.}(~D(M$cyx|zLJt J8hCɻe/64_n+O`eѧ0a=*V lW\f]9Gtg&c?<;? RLJ֮䒗77;n#g&,**T`+**b1̙33~ bرM }*S7ȂE xϜ5s:N|m|ڵ))mk_o|/ %IJdmp;.%]y'цh*crC//{)$K v]l!,cA '  3%  Δ  8S  L  L  3%  Δ  8S  8S  L  3%  Δ  8S  8S  L  3%  Δ   Δ  8S  L  3%  3 &<x襢2ϴуS z%M50yKY&Cڱp0Xl[VAɃ-aRPcye?:agLS&{z٫鯹6?4y_t#yy(.4-,L43:`о;; :jAi0Pk f<1^/G`9lsB=ILk*q)՚mSu4<Բ8AJTCo(vδRb/+ehe9Z߸RTNOQS]l&5"G-JXUð52S6/:._&@aP whe=N)4SfRdhL fNvyv8)ZđKXTC } |;Ĥ`+7+qq)EO CUc2{ OkbZiZc3-/OnA7`n$-M Bg #ySuVheEȱNt2[#Ư[ȝtQL뒀\œvק]b%kWk6w2tLzDʜ!ќQd8lu 6%B\l28b0!$B;+ p)(FkД7}A4N@{ݵ 7AǍ-'!n![q oVa8"hk $;RA(Kz՘nޏi_,o,-]+#ܱ 7"XPQ{*ExUhehLБ^q$t'C<5Iܛ%3Ě;f)x4Eq (T$c PPZ\ʴrG>7\MHkrU2ckCZP+Ϋ'^YP|T2K<2Ք9N֬ך iAV|T}auȬ7]jCxNFiP 6 *]Ŗ#_A͵dtl.v4 ePtM` 6Y:Yyx o-RMZUKVda18ۄfi}Fabp2RxUC"6̳++gʃAM0 ǭĂcM? z|p{dwC+<^D3KgLEemfֲO2( 6x4U)TP(BPny 8qy5p^GOmOϼ^S'M"'$ ^/4 n5m4yn<Rz,7G+f{=n$2I"6QQsmhUǷd_rDs&-nXv z9R5bttR&qXGCsl0遣c2vqRnWktS4Gԟ"Fh(zFɳFsffK2sRfe,imY6\@L%VZ,Y'޾RF'qԑniwYhu](;' tp^"6ё#hqg%#yJQ!m\Xںǭf c01k^Kqeaȕ' 3VxQ!o5-i;<}R6Qae$+j},EsqdRс*_Kyڻ BuC{yT>m>,,KD 1ﱎAKtϡ9 eOϮ>ZXE+BOz/Y[2.:fg˩n:ZDېl]ڢ fNo9%&;S n 'p#Y)ﮫ]p-`x*_U3p&]6?f-yDEq -+C>dՋn{ϛ-m(&PώL%6F,=zM^dN=1<>w߮œiR5N_Op"L )bR..4oK2kF@:lS'gX? }/+KLe&\xTdd|uwa{d89c62؃i|Ӆ3ɮP3P'f9hrb65IZk| 58k mCui6|y,eBUe0N;и30f&˂Jy8~ZUvʽ%k,#6|ov(-jMyٍƭ r ShAyk?[ǔ{lumOO734( 8kX A IDATŘ&~X #mYO3W+{N*_DR뾌q=Tഄ5J =j+Ye(aay@;}0]>7}JQÁL{w'@⏙mޅVcdK NAMzQnxP I<39wLTTT.Zތ}H=zڤK2 lzq#qAj}|6^o<8%ly@AT,g[)' Floh ͥ`(6$}WC{/C3BIҝI'gkƑ9 xAږ Ggx Gu7~N5_Dc{D(Y'w`5̎tĘ50H 17UQ+|x||kY+pGҲڽ7YތpT`"{2 qB0WS KMٽ=i9x: 8Ձ]KgM 8HZOɊyImu%+OBtrR`)# X2b_b\%8> ȑ6R@[w%YquH KJ~wvmXD`kk %Tu9)CU05j4>G=-Au۔^z4v]?}˒hs1"`ovOɻ}jX`'!FFsXhU#;w|w)3B=Vnd.uf)$Y͎?+FD2| O`R6BhNX^@`*2, =O%ڝhʹ^d@O&khFFʩ9jǍ#K&k{xtO%.|E}7:vK3(Z:v!{6F(p$Yѡ:x鶙钽y#&ڧϢnR.7g,Vʑ>OT!hsP H!\zDD|pfRGqunG{#>HvD1@L5*i9'~JHTPDObte\!t56^wFr.š8{XS׮NX3;O Ew;w%2;j@8ǀQ婉@D` bU- g3>WVW1aɒEƎ`Ɯ|3 J@,ı."kFHڦ˭#P6J_B9)sr&ۑtd! f] W,Vd7cW7V;|ֹgc`8A 2Ju7xN޾&g/S: ><-k"Q鶙x~2:48شcCaĆ^k<2a^ɸY?ɥRuÁ}|^ bANԟU=4"#nDN2ܓg!ne$6]5'q(~wăFޮ/V?&$"ЀaLKى}@nMs V;)>k2 Ўz7AG!ѱ4">hhq1şz🬿tL&g:hAAspX, 8A돞|g,zoD#$H!/d 3:QvJTH6f60Kd>kPU/]FblݗԚdmL&]ӭXTT@iiA l*8!g,%K۱@- `;ހ"9[}Tn/kB}84w9 svScf <_w>c Y-?9]0 -WY> N}RD>n,% *R_ A,*QMVF&?"KH(g"ҕ3L4Q6Kx L@ ʸcgiv^z*= Qb&'U{T,AsSv| r b_s&kL_m&3D?}*ݏz&hlo׳ 7;NKŇ[N,GL&vωHDue|]Um.$8mu"5z9Bqc3;yU/]s#gKhֱ5'];7P,>_H?;5̧!Wj񋔟QƧ ;i"y[Ʈ#"eDm"ƪgv`5o-gƛ#}ouS+`[?<~ZD^A&Is2dn1Z _e tCC74*-1ȮetnA:c ϐihȦ:eƔ5Wg{ 1'Lxi c{ L_r&! 61Jf dIFHśͽi.];dN .}00dewӛ2zӇM7ɗƗƎSMc^â7qG&,K8\MGe.`B4mBT}@6dCҬ.{p'c#QzT~²Tֱ}9P446 ̜1e˖rJN;4fΘho"50yda8|*ߙ˳ZF Ӌ f4!;ڱ{ԢM@ 7ͥcYyh tbǾ-5Fal+N/FalkM. 4ю=Y-@X]YOt902oi9ȟsXJvNb⺼ac8iߊ?cnLhyg7!o*W}HcB#7I|䡼]tۭYs>gߗ.z09S#L81*StG.^.P-0m*y)}Q(`7J:(v0evwBqXct:.fH; 8teQA߅5yM>z9GO)C) B5R05S$'QJP( ֬[P( Bn05y^rBP(<sZW|t&k%[HqSCjtժU.f4loiه!J>D7-gCe͚jBP 9}<~Itmy0کR&}+AS`};6]Y%M:! S)0F6Z~6)8Jn\#Ň4}ΰTz,X5E@F4M]g (\^7h|t1ePrdL壵,~ׁgr`j{9»YA{l#a!ylsɢP(Fg6!Iw&OA '{8„_9_;K@~bdj }>?r0t8Tz.y>ϑ㡷К7|ak1>pxyӁ!:0ȾCAɽ?ġ ZzQ1x ;sU8Gg {`/Audιҝi\g!{}2B-d;@;F"mjIL9 gܗU P({]~кglj /`G2:=C@u莦\vG)*ɜ\hSH`j6{6r#Ěҏ-۳vpo)"ocԂ ۛ~¸_wzw z؈v\%1@ 1w'GGLl){ljcXJP(a5+$;OYYp zBZoF,gޗ,'r(E 2UmOϥpٳ",F:Dwt| dR)B5[;ֳ]c_!ህ#*jҪ;T(ayLSq-x խϚ  9qCw.C)AƂ>x#.7KkB߹gQ>z `m~߮+K߂Aޕ?$vӗt=i󷍢'sj8NL-m(`>gݼHOuhNKȨAB;R]_>h\v ysf1K"#Z(b3?P`2pC^yesO "Gm4ĕyhE /ȣO!YUK5 ꏆ#\31XȞ F1~sd_qy'3S ;P r1 ުVYLf^+殷jYxb%ȉ&9 "XBP, p1 XH)-CӠΛ/iQvZ^߅V6YňHҶ3:Nڄ/|hxEch g|HW_Q8g ۏކeK4V[+6` l-~pRq1.c/d4~ޑ]]>&ܴΚUn(Jz3Ј- -LEUC': ͝mvTOK$boSȫhe=k YWIaQ!i** 춗 pgTQ~Du*B!ƫص ~ͯFHE]f>wX\1w kF[,˘;ez{l[* E/չ>U^Ĩ"1$l;H=Sn^ߵ;-҃\Bӫ J/=;ZϮ>~d? K}j Cz"SX+]~%a?+]iygj-8,;%^$frOI(KbTL$sηd &e[!׈UQ[ B9gëgqŷzWVw'_T<I'l";]xAOiF/)۷L0[6m5줧a'O: ӿk?e[FsȪrJuq/ 1Wr0m =* E^ bA9vc ri`8ԀpߗM[Nn"r KYT 46;+]ЫdI_Ž`Ɯ)%0Ypei%c u _."kFk0=S Zkzg?ԁ`C!\`FA"2wʬ c"p9u Oc\Ъh_Ԋ^q%cnzE6B&do Bw# o%=C"`''|mݛFЌ(^B* E9ԃla>{p-3҃6lm` t{%EZ6X @h%|w~cLœ.P,%ۛ Q}MHKvG"ӑEΠDV^qγbn>1w zY:kDCB Ȯ"sr}?Hӭ7Qs ޺؈>O=i9)nON9WƌVzq=2; /8Qb^@St?S|w#⭤fƹMCh:Q* Ed^u1BBO.XӬGp\݁dA:bw{1S}B"%K۱@-ėGz;Z_vk{Śn3]NBœ [-q7X,vCvY #qygQyzn Cҽohp$Գ`G"J}_uH_bMzjQc HDvGv]^MMKh%^ٌ:Q{XdY:/~ɘOX+Op @fL)/gi[Σ(D˿= 0UA4pTi^ٲ_q0Zmf!6`Lr!*sn._/R~Fޒr?;5̧r&1=M´Nڿ"e?ök !)|9=G',V7uEc3/0Ex]kL9Qcqe9S}Oj2dn1Z _eO(ZF8ƿ ljz3 6440sL-[ʕ+={6C:y@ /<`A W?iliBJ>0$eV1wG܌V͝pUo<棇=d BqFcxY,؉M~?cnLhyg7C#7 bA_+d]ooF$MvA.gߗ.LmH|koZy;ԷLZt ir*vְjc3+' غByNB؇HpW<ĩ-b=? if=-PXv,ۃN"2I,92;o_IDAT4OcгNX eVW×/ v nI+W2uC}z+OP(--C¡te9t;NJPSgVW( BH'V+ B8k'nUYz>eWBP(`jͺ5* BP(S_}OP( BTYAP( b9c2BP( Ez膎!P\TP( B,` ygp`LbUVR( BKEt`8 ĤK~4cfm/=aU( B?..'. ˅))IENDB`cutter-testing-framework-1.1.7/doc/reference/cut-diff.xml.ja0000644000175000017500000000753411525655563022217 0ustar koukou cut-diff Cutterライブラリ cut-diff 色付きで2つのファイルの違いを表示 名前 cut-diff - 色付きで2つのファイルの違いを表示 書式 cut-diff [ オプション... ] ファイル1 ファイル2 説明 cut-diffはCutterで使用している差分表示機能を利用したdiffコマンドです。色付きでわかりやすく差分を表示したい場合に便利です。patchコマンドと一緒に使う、色がなくても問題ない、などの場合は通常のdiffコマンドがおすすめです。 オプション --version バージョンを表示して終了します。 -c [yes|true|no|false|auto], --color=[yes|true|no|false|auto] 色付きで差分を表示するかどうかを指定します。 yes または true の場合は色付きで表示します。 no または false の場合は色なしで表示します。 auto の場合は色付けできそうな場合は色付きで表示し、そうでない場合は色なしで表示します。 デフォルトはautoです。 -u, --unified unified diff形式で出力します。 --context-lines=LINES 差分の周辺 LINES 行を表示します。 デフォルトでは全部の行を表示します。unified diff形式の場合は3行です。 --label=LABEL, -L=LABEL ヘッダのラベルに LABEL を使います。1つめの --label オプションで指定した値は file1 のラベルになり、2つめの --label オプションで指定した値は file2 のラベルになります。 デフォルトではファイル名を使います。 終了ステータス エラーが発生した場合は0以外、そうでない場合は0を返します。 TODO: 変更がない場合は0、変更があった場合は1、エラーが起きた場合は2を返すこと。 以下の例は、 file1file2 の差分を表示します。 % cut-diff file1 file2 以下の例は、 file1file2 の差分をunified diff形式で表示します。 % cut-diff -u file1 file2 関連項目 diff(1) cutter-testing-framework-1.1.7/doc/reference/install-to-ubuntu.xml0000644000175000017500000000435211525655563023526 0ustar koukou Install to Ubuntu CUTTER Library Install to Ubuntu How to install Cutter to Ubuntu Introduction This document explains how to install Cutter to Ubuntu Linux. Install We can use aptitude because Cutter provides Debian packages. There are packages for Ubuntu Lucid Lynx/Maverick Meerkat i386/amd64. If you need a package for another environment, you can request on mailing list . Here are apt lines for for Lucid. We put them into /etc/apt/sources.list.d/cutter.list. /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/ubuntu/ lucid main deb-src http://cutter.sourceforge.net/ubuntu/ lucid main Here are apt lines for for Maverick. We put them into /etc/apt/sources.list.d/cutter.list. /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/ubuntu/ maverick main deb-src http://cutter.sourceforge.net/ubuntu/ maverick main Cutter packages are signed by key of kou@cozmixng.org/kou@clear-code.com. If we trust the key, we can register the key: % gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31 % gpg --export 1C837F31 | sudo apt-key add - If we register the key, we can install Cutter by aptitude: % sudo aptitude update % sudo aptitude -V -D install cutter-testing-framework The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/sf-logo.html0000644000175000017500000000170511205747025021617 0ustar koukou

Get Cutter at SourceForge.net. Fast, secure and Free Open Source software downloads

cutter-testing-framework-1.1.7/doc/reference/cut-diff.xml0000644000175000017500000000655211525655563021625 0ustar koukou cut-diff CUTTER Library cut-diff show difference between 2 files with color NAME cut-diff - show difference between 2 files with color SYNOPSIS cut-diff [ option ... ] file1 file2 DESCRIPTION cut-diff is a diff command that uses diff feature in Cutter. It shows difference with color. It's recommended that you use a normal diff(1) when you want to use with patch(1) or you don't need color. OPTIONS --version cut-diff shows its own version and exits. -c [yes|true|no|false|auto], --color=[yes|true|no|false|auto] If 'yes' or 'true' is specified, cut-diff uses colorized output by escape sequence. If 'no' or 'false' is specified, cut-diff never use colorized output. If 'auto' or the option is omitted, cut-diff uses colorized output if available. The default is auto. -u, --unified cut-diff uses unified diff format. --context-lines=LINES Shows diff context around LINES . All lines are shown by default. When unified diff format is used, 3 lines are shown by default. --label=LABEL, -L=LABEL Uses LABEL as a header label. The first --label option value is used as file1 's label and the second --label option value is used as file2 's label. Labels are the same as file names by default. EXIT STATUS The exit status is 0 for success, non-0 otherwise. TODO: 0 for non-difference, 1 for difference and non-0 for errors. EXAMPLE In the following example, cut-diff shows difference between file1 and file2 : % cut-diff file1 file2 In the following example, cut-diff shows difference between file1 and file2 with unified diff format: % cut-diff -u file1 file2 SEE ALSO diff(1) cutter-testing-framework-1.1.7/doc/reference/ja.po0000644000175000017500000417100511525655247020333 0ustar koukou# ja.po for Cutter Reference. # Copyright (C) 2007-2011 Kouhei Sutou # This file is distributed under the same license as the Cutter package. # Kouhei Sutou , 2007. # msgid "" msgstr "" "Project-Id-Version: Cutter 1.1.7\n" "POT-Creation-Date: 2011-02-13 13:13+0900\n" "PO-Revision-Date: 2011-02-13 13:14+0900\n" "Last-Translator: Kouhei Sutou \n" "Language-Team: Japanese\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\n" #: xml/soupcutter.xml:7(refentrytitle) xml/soupcutter.xml:14(refname) #: xml/api-index-full.xml:541(link) xml/api-index-1.0.8.xml:10(link) msgid "SoupCutter" msgstr "" #: xml/soupcutter.xml:8(manvolnum) xml/soupcut-server.xml:8(manvolnum) #: xml/soupcut-client.xml:8(manvolnum) xml/soupcut-assertions.xml:8(manvolnum) #: xml/soupcut-assertions-helper.xml:8(manvolnum) #: xml/gdkcutter-pixbuf.xml:8(manvolnum) xml/gdkcut-pixbuf.xml:8(manvolnum) #: xml/gdkcut-pixbuf-assertions.xml:8(manvolnum) #: xml/gdkcut-pixbuf-assertions-helper.xml:8(manvolnum) #: xml/gcutter.xml:8(manvolnum) xml/gcut-value-equal.xml:8(manvolnum) #: xml/gcut-types.xml:8(manvolnum) xml/gcut-test-utils.xml:8(manvolnum) #: xml/gcut-string.xml:8(manvolnum) #: xml/gcut-string-io-channel.xml:8(manvolnum) #: xml/gcut-public.xml:8(manvolnum) xml/gcut-process.xml:8(manvolnum) #: xml/gcut-object.xml:8(manvolnum) xml/gcut-main.xml:8(manvolnum) #: xml/gcut-list.xml:8(manvolnum) xml/gcut-key-file.xml:8(manvolnum) #: xml/gcut-io.xml:8(manvolnum) xml/gcut-inspect.xml:8(manvolnum) #: xml/gcut-hash-table.xml:8(manvolnum) #: xml/gcut-glib-event-loop.xml:8(manvolnum) #: xml/gcut-event-loop.xml:8(manvolnum) xml/gcut-error.xml:8(manvolnum) #: xml/gcut-enum.xml:8(manvolnum) xml/gcut-egg.xml:8(manvolnum) #: xml/gcut-dynamic-data.xml:8(manvolnum) xml/gcut-data.xml:8(manvolnum) #: xml/gcut-data-helper.xml:8(manvolnum) xml/gcut-assertions.xml:8(manvolnum) #: xml/gcut-assertions-helper.xml:8(manvolnum) xml/cutter.xml:8(manvolnum) #: xml/cut-version.xml:8(manvolnum) xml/cut-unified-differ.xml:8(manvolnum) #: xml/cut-types.xml:8(manvolnum) xml/cut-test-utils.xml:8(manvolnum) #: xml/cut-string-diff-writer.xml:8(manvolnum) #: xml/cut-readable-differ.xml:8(manvolnum) #: xml/cut-multi-process.xml:8(manvolnum) xml/cut-helper.xml:8(manvolnum) #: xml/cut-features.xml:8(manvolnum) xml/cut-experimental.xml:8(manvolnum) #: xml/cut-differ.xml:8(manvolnum) xml/cut-diff-writer.xml:8(manvolnum) #: xml/cut-console.xml:8(manvolnum) #: xml/cut-console-diff-writer.xml:8(manvolnum) #: xml/cut-config.xml:8(manvolnum) xml/cut-colorize-differ.xml:8(manvolnum) #: xml/cut-assertions.xml:8(manvolnum) xml/cppcutter.xml:8(manvolnum) #: xml/cppcut-macros.xml:8(manvolnum) xml/cppcut-assertions.xml:8(manvolnum) msgid "3" msgstr "" #: xml/soupcutter.xml:9(refmiscinfo) xml/soupcut-server.xml:9(refmiscinfo) #: xml/soupcut-client.xml:9(refmiscinfo) #: xml/soupcut-assertions.xml:9(refmiscinfo) #: xml/soupcut-assertions-helper.xml:9(refmiscinfo) #: xml/gdkcutter-pixbuf.xml:9(refmiscinfo) #: xml/gdkcut-pixbuf.xml:9(refmiscinfo) #: xml/gdkcut-pixbuf-assertions.xml:9(refmiscinfo) #: xml/gdkcut-pixbuf-assertions-helper.xml:9(refmiscinfo) #: xml/gcutter.xml:9(refmiscinfo) xml/gcut-value-equal.xml:9(refmiscinfo) #: xml/gcut-types.xml:9(refmiscinfo) xml/gcut-test-utils.xml:9(refmiscinfo) #: xml/gcut-string.xml:9(refmiscinfo) #: xml/gcut-string-io-channel.xml:9(refmiscinfo) #: xml/gcut-public.xml:9(refmiscinfo) xml/gcut-process.xml:9(refmiscinfo) #: xml/gcut-object.xml:9(refmiscinfo) xml/gcut-main.xml:9(refmiscinfo) #: xml/gcut-list.xml:9(refmiscinfo) xml/gcut-key-file.xml:9(refmiscinfo) #: xml/gcut-io.xml:9(refmiscinfo) xml/gcut-inspect.xml:9(refmiscinfo) #: xml/gcut-hash-table.xml:9(refmiscinfo) #: xml/gcut-glib-event-loop.xml:9(refmiscinfo) #: xml/gcut-event-loop.xml:9(refmiscinfo) xml/gcut-error.xml:9(refmiscinfo) #: xml/gcut-enum.xml:9(refmiscinfo) xml/gcut-egg.xml:9(refmiscinfo) #: xml/gcut-dynamic-data.xml:9(refmiscinfo) xml/gcut-data.xml:9(refmiscinfo) #: xml/gcut-data-helper.xml:9(refmiscinfo) #: xml/gcut-assertions.xml:9(refmiscinfo) #: xml/gcut-assertions-helper.xml:9(refmiscinfo) xml/cutter.xml:9(refmiscinfo) #: xml/cut-version.xml:9(refmiscinfo) #: xml/cut-unified-differ.xml:9(refmiscinfo) xml/cut-types.xml:9(refmiscinfo) #: xml/cut-test-utils.xml:9(refmiscinfo) #: xml/cut-string-diff-writer.xml:9(refmiscinfo) #: xml/cut-readable-differ.xml:9(refmiscinfo) #: xml/cut-multi-process.xml:9(refmiscinfo) xml/cut-helper.xml:9(refmiscinfo) #: xml/cut-features.xml:9(refmiscinfo) xml/cut-experimental.xml:9(refmiscinfo) #: xml/cut-differ.xml:9(refmiscinfo) xml/cut-diff-writer.xml:9(refmiscinfo) #: xml/cut-console.xml:9(refmiscinfo) #: xml/cut-console-diff-writer.xml:9(refmiscinfo) #: xml/cut-config.xml:9(refmiscinfo) #: xml/cut-colorize-differ.xml:9(refmiscinfo) #: xml/cut-assertions.xml:9(refmiscinfo) xml/cppcutter.xml:9(refmiscinfo) #: xml/cppcut-macros.xml:9(refmiscinfo) #: xml/cppcut-assertions.xml:9(refmiscinfo) msgid "CUTTER Library" msgstr "Cutterライブラリ" #: xml/soupcutter.xml:15(refpurpose) msgid "HTTP supported Cutter with libsoup." msgstr "libsoupを用いたHTTPサポート付きのCutter。" #: xml/soupcutter.xml:19(title) xml/soupcut-server.xml:19(title) #: xml/soupcut-client.xml:19(title) xml/soupcut-assertions.xml:20(title) #: xml/soupcut-assertions-helper.xml:19(title) #: xml/gdkcutter-pixbuf.xml:19(title) xml/gdkcut-pixbuf.xml:19(title) #: xml/gdkcut-pixbuf-assertions.xml:20(title) #: xml/gdkcut-pixbuf-assertions-helper.xml:19(title) xml/gcutter.xml:19(title) #: xml/gcut-value-equal.xml:20(title) xml/gcut-types.xml:19(title) #: xml/gcut-test-utils.xml:20(title) xml/gcut-string.xml:20(title) #: xml/gcut-string-io-channel.xml:19(title) xml/gcut-public.xml:19(title) #: xml/gcut-process.xml:20(title) xml/gcut-object.xml:20(title) #: xml/gcut-main.xml:19(title) xml/gcut-list.xml:20(title) #: xml/gcut-key-file.xml:19(title) xml/gcut-io.xml:19(title) #: xml/gcut-inspect.xml:20(title) xml/gcut-hash-table.xml:20(title) #: xml/gcut-glib-event-loop.xml:20(title) xml/gcut-event-loop.xml:20(title) #: xml/gcut-error.xml:20(title) xml/gcut-enum.xml:20(title) #: xml/gcut-egg.xml:20(title) xml/gcut-dynamic-data.xml:19(title) #: xml/gcut-data.xml:20(title) xml/gcut-data-helper.xml:19(title) #: xml/gcut-assertions.xml:20(title) xml/gcut-assertions-helper.xml:19(title) #: xml/cutter.xml:19(title) xml/cut-version.xml:19(title) #: xml/cut-unified-differ.xml:19(title) xml/cut-types.xml:19(title) #: xml/cut-test-utils.xml:19(title) xml/cut-string-diff-writer.xml:19(title) #: xml/cut-readable-differ.xml:19(title) xml/cut-multi-process.xml:20(title) #: xml/cut-helper.xml:20(title) xml/cut-features.xml:19(title) #: xml/cut-experimental.xml:19(title) xml/cut-differ.xml:19(title) #: xml/cut-diff-writer.xml:19(title) xml/cut-console.xml:19(title) #: xml/cut-console-diff-writer.xml:19(title) xml/cut-config.xml:19(title) #: xml/cut-colorize-differ.xml:19(title) xml/cut-assertions.xml:19(title) #: xml/cppcutter.xml:19(title) xml/cppcut-macros.xml:19(title) #: xml/cppcut-assertions.xml:20(title) msgid "Synopsis" msgstr "概要" #: xml/soupcutter.xml:21(link) xml/soupcutter.xml:66(title) #: xml/soupcutter.xml:67(primary) xml/api-index-full.xml:541(link) #: xml/api-index-1.0.8.xml:10(link) msgid "SOUPCUTTER_ENABLED" msgstr "" #: xml/soupcutter.xml:21(synopsis) xml/gdkcutter-pixbuf.xml:21(synopsis) #: xml/gcutter.xml:21(synopsis) xml/cppcut-macros.xml:21(synopsis) #, no-wrap msgid "#define \n" msgstr "" #: xml/soupcutter.xml:26(title) xml/soupcut-server.xml:29(title) #: xml/soupcut-client.xml:52(title) xml/soupcut-assertions.xml:42(title) #: xml/soupcut-assertions-helper.xml:48(title) #: xml/gdkcutter-pixbuf.xml:26(title) xml/gdkcut-pixbuf.xml:38(title) #: xml/gdkcut-pixbuf-assertions.xml:30(title) #: xml/gdkcut-pixbuf-assertions-helper.xml:31(title) xml/gcutter.xml:26(title) #: xml/gcut-value-equal.xml:31(title) xml/gcut-types.xml:32(title) #: xml/gcut-test-utils.xml:69(title) xml/gcut-string.xml:29(title) #: xml/gcut-string-io-channel.xml:51(title) xml/gcut-public.xml:44(title) #: xml/gcut-process.xml:99(title) xml/gcut-object.xml:33(title) #: xml/gcut-main.xml:29(title) xml/gcut-list.xml:60(title) #: xml/gcut-key-file.xml:35(title) xml/gcut-io.xml:26(title) #: xml/gcut-inspect.xml:68(title) xml/gcut-hash-table.xml:43(title) #: xml/gcut-glib-event-loop.xml:29(title) xml/gcut-event-loop.xml:76(title) #: xml/gcut-error.xml:29(title) xml/gcut-enum.xml:41(title) #: xml/gcut-egg.xml:89(title) xml/gcut-dynamic-data.xml:25(title) #: xml/gcut-data.xml:61(title) xml/gcut-data-helper.xml:70(title) #: xml/gcut-assertions.xml:136(title) #: xml/gcut-assertions-helper.xml:144(title) xml/cutter.xml:47(title) #: xml/cut-version.xml:32(title) xml/cut-unified-differ.xml:25(title) #: xml/cut-types.xml:30(title) xml/cut-test-utils.xml:64(title) #: xml/cut-string-diff-writer.xml:29(title) #: xml/cut-readable-differ.xml:25(title) xml/cut-multi-process.xml:78(title) #: xml/cut-helper.xml:53(title) xml/cut-features.xml:30(title) #: xml/cut-experimental.xml:30(title) xml/cut-differ.xml:25(title) #: xml/cut-diff-writer.xml:25(title) xml/cut-console.xml:44(title) #: xml/cut-console-diff-writer.xml:58(title) xml/cut-config.xml:29(title) #: xml/cut-colorize-differ.xml:25(title) xml/cut-assertions.xml:303(title) #: xml/cppcutter.xml:29(title) xml/cppcut-macros.xml:26(title) #: xml/cppcut-assertions.xml:29(title) msgid "Description" msgstr "説明" #: xml/soupcutter.xml:27(para) msgid "" "SoupCutter adds many useful HTTP related features based on libsoup to " "Cutter. If you want to write tests for HTTP, it's good idea that you " "consider SoupCutter to be used too." msgstr "" "SoupCutterはlibsoupを用いたHTTP関連のたくさんの便利な機能をCutterに追加しま" "す。より簡単にHTTPのテストを書きたい場合はSoupCutterの使用を検討してくださ" "い。" #: xml/soupcutter.xml:33(para) msgid "" "It's easy to use SoupCutter. You just include <soupcuttter.h> instead " "of <cutter.h> or <gcutter.h> and use soupcutter-pixbuf.pc " "instead of cutter.pc or gcutter.pc:" msgstr "" "SoupCutterを使うことは簡単です。<cutter.h>または<gcutter.h>の代わ" "りに<soupcutter.h>をincludeし、cutter.pcまたはgcutter.pcの代わりに" "soupcutter.pcを使うだけです。" #: xml/soupcutter.xml:41(programlisting) #, no-wrap msgid "" "\n" "-#include <cutter.h>\n" "+#include <soupcutter.h>\n" msgstr "" #: xml/soupcutter.xml:39(para) xml/gdkcutter-pixbuf.xml:39(para) #: xml/gcutter.xml:37(para) msgid "test-xxx.c: " msgstr "" #: xml/soupcutter.xml:48(programlisting) #, no-wrap msgid "" "\n" "-AC_CHECK_CUTTER\n" "+AC_CHECK_SOUPCUTTER\n" msgstr "" #: xml/soupcutter.xml:46(para) xml/gdkcutter-pixbuf.xml:46(para) #: xml/gcutter.xml:44(para) xml/cppcutter.xml:47(para) msgid "configure.ac: " msgstr "" #: xml/soupcutter.xml:55(programlisting) #, no-wrap msgid "" "\n" "-XXX_CFLAGS = $(CUTTER_CFLAGS)\n" "-XXX_LIBS = $(CUTTER_LIBS)\n" "+XXX_CFLAGS = $(SOUPCUTTER_CFLAGS)\n" "+XXX_LIBS = $(SOUPCUTTER_LIBS)\n" msgstr "" #: xml/soupcutter.xml:53(para) xml/gdkcutter-pixbuf.xml:53(para) #: xml/gcutter.xml:51(para) xml/cut-helper.xml:116(para) #: xml/cppcutter.xml:54(para) msgid "Makefile.am: " msgstr "" #: xml/soupcutter.xml:64(title) xml/soupcut-server.xml:35(title) #: xml/soupcut-client.xml:61(title) xml/soupcut-assertions.xml:46(title) #: xml/soupcut-assertions-helper.xml:53(title) #: xml/gdkcutter-pixbuf.xml:64(title) xml/gdkcut-pixbuf.xml:43(title) #: xml/gdkcut-pixbuf-assertions.xml:34(title) #: xml/gdkcut-pixbuf-assertions-helper.xml:36(title) xml/gcutter.xml:62(title) #: xml/gcut-value-equal.xml:42(title) xml/gcut-types.xml:38(title) #: xml/gcut-test-utils.xml:81(title) xml/gcut-string.xml:40(title) #: xml/gcut-string-io-channel.xml:56(title) xml/gcut-public.xml:49(title) #: xml/gcut-process.xml:173(title) xml/gcut-object.xml:44(title) #: xml/gcut-main.xml:34(title) xml/gcut-list.xml:71(title) #: xml/gcut-key-file.xml:40(title) xml/gcut-io.xml:31(title) #: xml/gcut-inspect.xml:76(title) xml/gcut-hash-table.xml:54(title) #: xml/gcut-glib-event-loop.xml:36(title) xml/gcut-event-loop.xml:93(title) #: xml/gcut-error.xml:40(title) xml/gcut-enum.xml:52(title) #: xml/gcut-egg.xml:163(title) xml/gcut-dynamic-data.xml:30(title) #: xml/gcut-data.xml:70(title) xml/gcut-data-helper.xml:75(title) #: xml/gcut-assertions.xml:140(title) #: xml/gcut-assertions-helper.xml:149(title) xml/cutter.xml:149(title) #: xml/cut-version.xml:41(title) xml/cut-unified-differ.xml:30(title) #: xml/cut-types.xml:36(title) xml/cut-test-utils.xml:76(title) #: xml/cut-string-diff-writer.xml:34(title) #: xml/cut-readable-differ.xml:30(title) xml/cut-multi-process.xml:96(title) #: xml/cut-helper.xml:128(title) xml/cut-features.xml:37(title) #: xml/cut-experimental.xml:36(title) xml/cut-differ.xml:30(title) #: xml/cut-diff-writer.xml:30(title) xml/cut-console.xml:49(title) #: xml/cut-console-diff-writer.xml:63(title) xml/cut-config.xml:34(title) #: xml/cut-colorize-differ.xml:30(title) xml/cut-assertions.xml:317(title) #: xml/cppcutter.xml:97(title) xml/cppcut-macros.xml:31(title) #: xml/cppcut-assertions.xml:33(title) msgid "Details" msgstr "詳細" #: xml/soupcutter.xml:68(programlisting) #, no-wrap msgid "#define SOUPCUTTER_ENABLED 1\n" msgstr "" #: xml/soupcutter.xml:70(para) msgid "Defined when SoupCutter is enabled." msgstr "SoupCutterが有効なとき定義されます。" #: xml/soupcutter.xml:72(para) xml/soupcut-server.xml:49(para) #: xml/soupcut-server.xml:64(para) xml/soupcut-server.xml:82(para) #: xml/soupcut-client.xml:87(para) xml/soupcut-client.xml:102(para) #: xml/soupcut-client.xml:120(para) xml/soupcut-client.xml:147(para) #: xml/soupcut-client.xml:161(para) xml/soupcut-client.xml:175(para) #: xml/soupcut-client.xml:189(para) xml/soupcut-assertions.xml:66(para) #: xml/soupcut-assertions.xml:87(para) xml/soupcut-assertions.xml:102(para) #: xml/soupcut-assertions.xml:121(para) xml/soupcut-assertions.xml:141(para) #: xml/gcut-hash-table.xml:220(para) msgid "Since 1.0.8" msgstr "1.0.8から" #: xml/soupcutter.xml:76(title) xml/soupcut-server.xml:86(title) #: xml/soupcut-client.xml:201(title) xml/gdkcutter-pixbuf.xml:76(title) #: xml/gcutter.xml:74(title) xml/cutter.xml:488(title) #: xml/cppcutter.xml:164(title) msgid "See Also" msgstr "参考" #: xml/soupcutter.xml:78(link) msgid "Assertions for HTTP client/server based on libsoup" msgstr "libsoupを使ったHTTPクライアント・サーバ用の検証" #: xml/soupcut-server.xml:7(refentrytitle) xml/soupcut-server.xml:14(refname) #: xml/api-index-full.xml:559(link) xml/api-index-full.xml:560(link) #: xml/api-index-full.xml:561(link) xml/api-index-1.0.8.xml:23(link) #: xml/api-index-1.0.8.xml:24(link) xml/api-index-1.0.8.xml:25(link) msgid "Convenience HTTP server API" msgstr "便利なHTTPサーバーAPI" #: xml/soupcut-server.xml:15(refpurpose) msgid "API to work as HTTP server." msgstr "HTTPサーバーとして動作するためのAPI。" #: xml/soupcut-server.xml:21(returnvalue) xml/soupcut-server.xml:21(type) #: xml/soupcut-server.xml:22(returnvalue) xml/soupcut-server.xml:23(type) msgid "SoupServer" msgstr "" #: xml/soupcut-server.xml:21(link) xml/soupcut-server.xml:38(primary) #: xml/api-index-full.xml:560(link) xml/api-index-1.0.8.xml:24(link) msgid "soupcut_server_take" msgstr "" #: xml/soupcut-server.xml:21(parameter) xml/soupcut-server.xml:23(parameter) msgid " *server" msgstr "" #: xml/soupcut-server.xml:22(link) xml/soupcut-server.xml:52(primary) #: xml/api-index-full.xml:561(link) xml/api-index-1.0.8.xml:25(link) msgid "soupcut_server_take_new" msgstr "" #: xml/soupcut-server.xml:22(type) xml/soupcut-client.xml:34(returnvalue) #: xml/gcut-string-io-channel.xml:42(returnvalue) #: xml/gcut-string-io-channel.xml:46(type) #: xml/gcut-glib-event-loop.xml:24(type) msgid "GMainContext" msgstr "" #: xml/soupcut-server.xml:22(parameter) #: xml/gcut-glib-event-loop.xml:24(parameter) msgid " *context" msgstr "" #: xml/soupcut-server.xml:23(returnvalue) xml/soupcut-server.xml:24(type) #: xml/soupcut-client.xml:25(type) xml/soupcut-client.xml:29(type) #: xml/soupcut-client.xml:30(type) xml/soupcut-assertions.xml:23(type) #: xml/soupcut-assertions.xml:27(type) xml/soupcut-assertions.xml:32(type) #: xml/soupcut-assertions.xml:35(type) #: xml/soupcut-assertions-helper.xml:22(type) #: xml/soupcut-assertions-helper.xml:24(type) #: xml/soupcut-assertions-helper.xml:25(type) #: xml/soupcut-assertions-helper.xml:27(type) #: xml/soupcut-assertions-helper.xml:29(type) #: xml/soupcut-assertions-helper.xml:30(type) #: xml/soupcut-assertions-helper.xml:33(type) #: xml/soupcut-assertions-helper.xml:35(type) #: xml/soupcut-assertions-helper.xml:37(type) #: xml/soupcut-assertions-helper.xml:38(type) #: xml/soupcut-assertions-helper.xml:40(type) #: xml/soupcut-assertions-helper.xml:42(type) #: xml/soupcut-assertions-helper.xml:43(type) #: xml/gdkcut-pixbuf.xml:29(returnvalue) xml/gdkcut-pixbuf.xml:32(type) #: xml/gdkcut-pixbuf-assertions-helper.xml:24(type) #: xml/gdkcut-pixbuf-assertions-helper.xml:25(type) #: xml/gdkcut-pixbuf-assertions-helper.xml:26(type) #: xml/gcut-test-utils.xml:28(type) xml/gcut-test-utils.xml:37(type) #: xml/gcut-test-utils.xml:39(type) xml/gcut-test-utils.xml:46(type) #: xml/gcut-test-utils.xml:50(type) xml/gcut-test-utils.xml:55(type) #: xml/gcut-test-utils.xml:58(type) xml/gcut-test-utils.xml:61(type) #: xml/gcut-test-utils.xml:63(type) xml/gcut-string.xml:24(returnvalue) #: xml/gcut-string-io-channel.xml:21(type) xml/gcut-public.xml:33(type) #: xml/gcut-public.xml:34(type) xml/gcut-public.xml:37(type) #: xml/gcut-public.xml:38(type) xml/gcut-process.xml:27(type) #: xml/gcut-process.xml:29(type) xml/gcut-process.xml:30(type) #: xml/gcut-process.xml:33(type) xml/gcut-process.xml:34(type) #: xml/gcut-process.xml:40(type) xml/gcut-process.xml:42(returnvalue) #: xml/gcut-process.xml:53(type) xml/gcut-object.xml:25(returnvalue) #: xml/gcut-object.xml:26(returnvalue) xml/gcut-list.xml:25(returnvalue) #: xml/gcut-list.xml:30(returnvalue) xml/gcut-list.xml:33(returnvalue) #: xml/gcut-list.xml:36(returnvalue) xml/gcut-list.xml:37(returnvalue) #: xml/gcut-list.xml:38(returnvalue) xml/gcut-list.xml:40(returnvalue) #: xml/gcut-key-file.xml:22(type) xml/gcut-key-file.xml:23(type) #: xml/gcut-key-file.xml:27(type) xml/gcut-key-file.xml:28(type) #: xml/gcut-io.xml:21(returnvalue) xml/gcut-hash-table.xml:25(returnvalue) #: xml/gcut-hash-table.xml:29(returnvalue) #: xml/gcut-hash-table.xml:36(returnvalue) xml/gcut-error.xml:24(returnvalue) #: xml/gcut-enum.xml:25(returnvalue) xml/gcut-enum.xml:28(type) #: xml/gcut-enum.xml:30(returnvalue) xml/gcut-enum.xml:33(type) #: xml/gcut-egg.xml:27(type) xml/gcut-egg.xml:29(type) #: xml/gcut-egg.xml:32(type) xml/gcut-egg.xml:33(type) #: xml/gcut-egg.xml:39(type) xml/gcut-egg.xml:41(returnvalue) #: xml/gcut-egg.xml:46(type) xml/gcut-data.xml:22(type) #: xml/gcut-data.xml:23(type) xml/gcut-data.xml:26(type) #: xml/gcut-data.xml:29(returnvalue) xml/gcut-data.xml:30(type) #: xml/gcut-data.xml:32(type) xml/gcut-data.xml:34(type) #: xml/gcut-data.xml:42(type) xml/gcut-data.xml:44(type) #: xml/gcut-data.xml:46(type) xml/gcut-data.xml:48(type) #: xml/gcut-data.xml:50(type) xml/gcut-data-helper.xml:21(returnvalue) #: xml/gcut-data-helper.xml:22(type) xml/gcut-data-helper.xml:24(returnvalue) #: xml/gcut-data-helper.xml:25(type) xml/gcut-data-helper.xml:28(type) #: xml/gcut-data-helper.xml:31(type) xml/gcut-data-helper.xml:34(type) #: xml/gcut-data-helper.xml:37(type) xml/gcut-data-helper.xml:40(type) #: xml/gcut-data-helper.xml:43(type) xml/gcut-data-helper.xml:46(type) #: xml/gcut-data-helper.xml:49(type) xml/gcut-data-helper.xml:52(type) #: xml/gcut-data-helper.xml:55(type) xml/gcut-data-helper.xml:58(type) #: xml/gcut-data-helper.xml:61(type) xml/gcut-data-helper.xml:64(type) #: xml/gcut-assertions.xml:89(type) xml/gcut-assertions.xml:91(type) #: xml/gcut-assertions-helper.xml:23(type) #: xml/gcut-assertions-helper.xml:24(type) #: xml/gcut-assertions-helper.xml:27(type) #: xml/gcut-assertions-helper.xml:28(type) #: xml/gcut-assertions-helper.xml:34(type) #: xml/gcut-assertions-helper.xml:35(type) #: xml/gcut-assertions-helper.xml:36(type) #: xml/gcut-assertions-helper.xml:39(type) #: xml/gcut-assertions-helper.xml:40(type) #: xml/gcut-assertions-helper.xml:43(type) #: xml/gcut-assertions-helper.xml:44(type) #: xml/gcut-assertions-helper.xml:48(type) #: xml/gcut-assertions-helper.xml:49(type) #: xml/gcut-assertions-helper.xml:53(type) #: xml/gcut-assertions-helper.xml:54(type) #: xml/gcut-assertions-helper.xml:55(type) #: xml/gcut-assertions-helper.xml:59(type) #: xml/gcut-assertions-helper.xml:60(type) #: xml/gcut-assertions-helper.xml:61(type) #: xml/gcut-assertions-helper.xml:66(type) #: xml/gcut-assertions-helper.xml:67(type) #: xml/gcut-assertions-helper.xml:74(type) #: xml/gcut-assertions-helper.xml:75(type) #: xml/gcut-assertions-helper.xml:76(type) #: xml/gcut-assertions-helper.xml:80(type) #: xml/gcut-assertions-helper.xml:81(type) #: xml/gcut-assertions-helper.xml:83(type) #: xml/gcut-assertions-helper.xml:86(type) #: xml/gcut-assertions-helper.xml:87(type) #: xml/gcut-assertions-helper.xml:88(type) #: xml/gcut-assertions-helper.xml:92(type) #: xml/gcut-assertions-helper.xml:93(type) #: xml/gcut-assertions-helper.xml:97(type) #: xml/gcut-assertions-helper.xml:98(type) #: xml/gcut-assertions-helper.xml:99(type) #: xml/gcut-assertions-helper.xml:103(type) #: xml/gcut-assertions-helper.xml:104(type) #: xml/gcut-assertions-helper.xml:105(type) #: xml/gcut-assertions-helper.xml:109(type) #: xml/gcut-assertions-helper.xml:110(type) #: xml/gcut-assertions-helper.xml:111(type) #: xml/gcut-assertions-helper.xml:138(type) #: xml/gcut-assertions-helper.xml:139(type) #: xml/cut-string-diff-writer.xml:24(returnvalue) xml/cut-console.xml:36(type) #: xml/cut-console.xml:37(type) xml/cut-console-diff-writer.xml:26(type) #: xml/cut-console-diff-writer.xml:27(returnvalue) #: xml/cut-console-diff-writer.xml:31(type) #: xml/cut-console-diff-writer.xml:32(returnvalue) #: xml/cut-console-diff-writer.xml:36(type) #: xml/cut-console-diff-writer.xml:37(returnvalue) #: xml/cut-console-diff-writer.xml:41(type) #: xml/cut-console-diff-writer.xml:42(returnvalue) #: xml/cut-console-diff-writer.xml:46(type) #: xml/cut-console-diff-writer.xml:47(returnvalue) #: xml/cut-console-diff-writer.xml:51(type) #: xml/cut-console-diff-writer.xml:52(returnvalue) msgid "gchar" msgstr "" #: xml/soupcut-server.xml:23(link) xml/soupcut-server.xml:67(primary) #: xml/api-index-full.xml:559(link) xml/api-index-1.0.8.xml:23(link) msgid "soupcut_server_build_uri" msgstr "" #: xml/soupcut-server.xml:24(parameter) xml/gcut-test-utils.xml:63(parameter) #: xml/gcut-public.xml:34(parameter) xml/gcut-public.xml:38(parameter) #: xml/gcut-assertions.xml:89(parameter) xml/gcut-assertions.xml:91(parameter) #: xml/gcut-assertions-helper.xml:88(parameter) msgid "const *path" msgstr "" #: xml/soupcut-server.xml:21(synopsis) #, no-wrap msgid "" " * ();\n" " * ();\n" "const * (,\n" " );\n" msgstr "" #: xml/soupcut-server.xml:30(para) msgid "" "Useful wrappers for SoupServer are provided." msgstr "" "SoupServerの便利なラッパー。" #: xml/soupcut-server.xml:37(title) msgid "soupcut_server_take ()" msgstr "" #: xml/soupcut-server.xml:39(programlisting) #, no-wrap msgid "SoupServer * soupcut_server_take (SoupServer *server);" msgstr "" #: xml/soupcut-server.xml:40(para) msgid "server is shut down and unref when tear down." msgstr "" "サーバーは tear down 時に自動的にシャットダウンされ、g_object_unref()により解放されま" "す。" #: xml/soupcut-server.xml:43(term) xml/soupcut-server.xml:73(term) msgid "server :" msgstr "" #: xml/soupcut-server.xml:44(simpara) xml/soupcut-server.xml:74(simpara) msgid "a SoupServer." msgstr "" "SoupServerオブジェクト。" #: xml/soupcut-server.xml:46(term) xml/soupcut-server.xml:61(term) #: xml/soupcut-server.xml:79(term) xml/soupcut-client.xml:84(term) #: xml/soupcut-client.xml:117(term) xml/soupcut-client.xml:144(term) #: xml/soupcut-client.xml:158(term) xml/soupcut-client.xml:172(term) #: xml/soupcut-client.xml:186(term) xml/gdkcut-pixbuf.xml:57(term) #: xml/gdkcut-pixbuf.xml:77(term) xml/gdkcut-pixbuf.xml:97(term) #: xml/gdkcut-pixbuf.xml:125(term) xml/gcut-value-equal.xml:59(term) #: xml/gcut-types.xml:83(term) xml/gcut-types.xml:92(term) #: xml/gcut-test-utils.xml:92(term) xml/gcut-test-utils.xml:107(term) #: xml/gcut-test-utils.xml:128(term) xml/gcut-test-utils.xml:144(term) #: xml/gcut-test-utils.xml:160(term) xml/gcut-test-utils.xml:175(term) #: xml/gcut-test-utils.xml:204(term) xml/gcut-test-utils.xml:233(term) #: xml/gcut-test-utils.xml:262(term) xml/gcut-test-utils.xml:282(term) #: xml/gcut-test-utils.xml:297(term) xml/gcut-test-utils.xml:327(term) #: xml/gcut-test-utils.xml:357(term) xml/gcut-test-utils.xml:377(term) #: xml/gcut-test-utils.xml:407(term) xml/gcut-test-utils.xml:426(term) #: xml/gcut-test-utils.xml:472(term) xml/gcut-test-utils.xml:497(term) #: xml/gcut-test-utils.xml:522(term) xml/gcut-test-utils.xml:545(term) #: xml/gcut-string.xml:55(term) xml/gcut-string.xml:71(term) #: xml/gcut-string-io-channel.xml:66(term) #: xml/gcut-string-io-channel.xml:78(term) #: xml/gcut-string-io-channel.xml:101(term) #: xml/gcut-string-io-channel.xml:128(term) #: xml/gcut-string-io-channel.xml:155(term) #: xml/gcut-string-io-channel.xml:183(term) #: xml/gcut-string-io-channel.xml:211(term) xml/gcut-public.xml:63(term) #: xml/gcut-public.xml:79(term) xml/gcut-public.xml:99(term) #: xml/gcut-public.xml:115(term) xml/gcut-public.xml:131(term) #: xml/gcut-public.xml:155(term) xml/gcut-public.xml:179(term) #: xml/gcut-process.xml:272(term) xml/gcut-process.xml:289(term) #: xml/gcut-process.xml:303(term) xml/gcut-process.xml:321(term) #: xml/gcut-process.xml:340(term) xml/gcut-process.xml:355(term) #: xml/gcut-process.xml:370(term) xml/gcut-process.xml:399(term) #: xml/gcut-process.xml:433(term) xml/gcut-process.xml:454(term) #: xml/gcut-process.xml:469(term) xml/gcut-process.xml:497(term) #: xml/gcut-process.xml:520(term) xml/gcut-process.xml:546(term) #: xml/gcut-process.xml:564(term) xml/gcut-process.xml:578(term) #: xml/gcut-process.xml:591(term) xml/gcut-process.xml:607(term) #: xml/gcut-process.xml:623(term) xml/gcut-process.xml:639(term) #: xml/gcut-process.xml:655(term) xml/gcut-process.xml:671(term) #: xml/gcut-process.xml:688(term) xml/gcut-process.xml:721(term) #: xml/gcut-object.xml:66(term) xml/gcut-object.xml:82(term) #: xml/gcut-object.xml:105(term) xml/gcut-list.xml:97(term) #: xml/gcut-list.xml:128(term) xml/gcut-list.xml:147(term) #: xml/gcut-list.xml:163(term) xml/gcut-list.xml:182(term) #: xml/gcut-list.xml:198(term) xml/gcut-list.xml:217(term) #: xml/gcut-list.xml:233(term) xml/gcut-list.xml:248(term) #: xml/gcut-list.xml:268(term) xml/gcut-list.xml:288(term) #: xml/gcut-list.xml:307(term) xml/gcut-list.xml:324(term) #: xml/gcut-list.xml:343(term) xml/gcut-list.xml:360(term) #: xml/gcut-list.xml:379(term) xml/gcut-list.xml:396(term) #: xml/gcut-list.xml:412(term) xml/gcut-list.xml:432(term) #: xml/gcut-list.xml:452(term) xml/gcut-key-file.xml:66(term) #: xml/gcut-key-file.xml:94(term) xml/gcut-io.xml:41(term) #: xml/gcut-hash-table.xml:81(term) xml/gcut-hash-table.xml:118(term) #: xml/gcut-hash-table.xml:162(term) xml/gcut-hash-table.xml:182(term) #: xml/gcut-hash-table.xml:200(term) xml/gcut-hash-table.xml:216(term) #: xml/gcut-glib-event-loop.xml:66(term) xml/gcut-event-loop.xml:152(term) #: xml/gcut-event-loop.xml:184(term) xml/gcut-event-loop.xml:227(term) #: xml/gcut-event-loop.xml:254(term) xml/gcut-event-loop.xml:289(term) #: xml/gcut-event-loop.xml:316(term) xml/gcut-event-loop.xml:351(term) #: xml/gcut-event-loop.xml:374(term) xml/gcut-event-loop.xml:405(term) #: xml/gcut-event-loop.xml:423(term) xml/gcut-error.xml:55(term) #: xml/gcut-error.xml:71(term) xml/gcut-enum.xml:68(term) #: xml/gcut-enum.xml:109(term) xml/gcut-enum.xml:134(term) #: xml/gcut-enum.xml:153(term) xml/gcut-enum.xml:179(term) #: xml/gcut-enum.xml:198(term) xml/gcut-egg.xml:255(term) #: xml/gcut-egg.xml:273(term) xml/gcut-egg.xml:292(term) #: xml/gcut-egg.xml:312(term) xml/gcut-egg.xml:328(term) #: xml/gcut-egg.xml:344(term) xml/gcut-egg.xml:375(term) #: xml/gcut-egg.xml:411(term) xml/gcut-egg.xml:433(term) #: xml/gcut-egg.xml:473(term) xml/gcut-egg.xml:489(term) #: xml/gcut-egg.xml:518(term) xml/gcut-egg.xml:551(term) #: xml/gcut-egg.xml:568(term) xml/gcut-egg.xml:585(term) #: xml/gcut-egg.xml:603(term) xml/gcut-data.xml:331(term) #: xml/gcut-data.xml:349(term) xml/gcut-data.xml:367(term) #: xml/gcut-data.xml:385(term) xml/gcut-data.xml:404(term) #: xml/gcut-data.xml:422(term) xml/gcut-data.xml:440(term) #: xml/gcut-data.xml:457(term) xml/gcut-data.xml:475(term) #: xml/gcut-data.xml:494(term) xml/gcut-data.xml:513(term) #: xml/gcut-data.xml:532(term) xml/gcut-data.xml:551(term) #: xml/gcut-data.xml:569(term) xml/gcut-data.xml:586(term) #: xml/gcut-data.xml:604(term) xml/gcut-data-helper.xml:93(term) #: xml/gcut-data-helper.xml:113(term) xml/gcut-data-helper.xml:133(term) #: xml/gcut-data-helper.xml:153(term) xml/gcut-data-helper.xml:173(term) #: xml/gcut-data-helper.xml:193(term) xml/gcut-data-helper.xml:213(term) #: xml/gcut-data-helper.xml:233(term) xml/gcut-data-helper.xml:253(term) #: xml/gcut-data-helper.xml:273(term) xml/gcut-data-helper.xml:293(term) #: xml/gcut-data-helper.xml:313(term) xml/gcut-data-helper.xml:333(term) #: xml/gcut-data-helper.xml:353(term) xml/gcut-data-helper.xml:373(term) #: xml/cutter.xml:385(term) xml/cut-test-utils.xml:92(term) #: xml/cut-test-utils.xml:107(term) xml/cut-test-utils.xml:122(term) #: xml/cut-test-utils.xml:136(term) xml/cut-test-utils.xml:157(term) #: xml/cut-test-utils.xml:177(term) xml/cut-test-utils.xml:196(term) #: xml/cut-test-utils.xml:210(term) xml/cut-test-utils.xml:227(term) #: xml/cut-test-utils.xml:249(term) xml/cut-test-utils.xml:270(term) #: xml/cut-test-utils.xml:285(term) xml/cut-test-utils.xml:325(term) #: xml/cut-test-utils.xml:348(term) xml/cut-test-utils.xml:371(term) #: xml/cut-test-utils.xml:398(term) xml/cut-test-utils.xml:434(term) #: xml/cut-test-utils.xml:448(term) xml/cut-string-diff-writer.xml:59(term) #: xml/cut-string-diff-writer.xml:71(term) xml/cut-multi-process.xml:153(term) #: xml/cut-multi-process.xml:167(term) xml/cut-multi-process.xml:195(term) #: xml/cut-multi-process.xml:211(term) xml/cut-multi-process.xml:226(term) #: xml/cut-multi-process.xml:241(term) xml/cut-multi-process.xml:273(term) #: xml/cut-multi-process.xml:305(term) xml/cut-multi-process.xml:337(term) #: xml/cut-multi-process.xml:371(term) xml/cut-multi-process.xml:404(term) #: xml/cut-multi-process.xml:439(term) xml/cut-multi-process.xml:471(term) #: xml/cut-multi-process.xml:502(term) xml/cut-multi-process.xml:516(term) #: xml/cut-multi-process.xml:530(term) xml/cut-multi-process.xml:547(term) #: xml/cut-multi-process.xml:581(term) xml/cut-multi-process.xml:611(term) #: xml/cut-multi-process.xml:640(term) xml/cut-helper.xml:429(term) #: xml/cut-helper.xml:482(term) xml/cut-helper.xml:500(term) #: xml/cut-helper.xml:523(term) xml/cut-helper.xml:544(term) #: xml/cut-helper.xml:563(term) xml/cut-helper.xml:574(term) #: xml/cut-helper.xml:585(term) xml/cut-experimental.xml:59(term) #: xml/cut-experimental.xml:119(term) xml/cut-experimental.xml:149(term) #: xml/cut-console.xml:154(term) xml/cut-console.xml:178(term) #: xml/cut-console-diff-writer.xml:91(term) #: xml/cut-console-diff-writer.xml:119(term) #: xml/cut-console-diff-writer.xml:147(term) #: xml/cut-console-diff-writer.xml:175(term) #: xml/cut-console-diff-writer.xml:203(term) #: xml/cut-console-diff-writer.xml:231(term) #: xml/cut-console-diff-writer.xml:259(term) xml/cppcutter.xml:158(term) msgid "Returns :" msgstr "戻り値 :" #: xml/soupcut-server.xml:46(simpara) msgid "" "server owned by Cutter. Don't g_object_unref() it." msgstr "" "serverはCutterが所有権を持つので、g_object_unref()を呼ばないでくださ" "い。" #: xml/soupcut-server.xml:51(title) msgid "soupcut_server_take_new ()" msgstr "" #: xml/soupcut-server.xml:53(programlisting) #, no-wrap msgid "SoupServer * soupcut_server_take_new (GMainContext *context);" msgstr "" #: xml/soupcut-server.xml:54(para) msgid "" "Creates and returns a new SoupServer, whose context is context. The server is " "shut down and unref when tear down." msgstr "" "コンテキストがcontextであるSoupServerオブジェクトを生成して返します。サーバーは" "tear down 時に自動的にシャットダウンされ、g_object_unref()により解放されます。" #: xml/soupcut-server.xml:58(term) xml/gcut-public.xml:57(term) #: xml/gcut-public.xml:73(term) xml/gcut-public.xml:90(term) #: xml/gcut-public.xml:109(term) xml/gcut-public.xml:125(term) #: xml/gcut-public.xml:143(term) xml/gcut-public.xml:167(term) #: xml/gcut-glib-event-loop.xml:63(term) xml/cutter.xml:301(term) msgid "context :" msgstr "" #: xml/soupcut-server.xml:59(simpara) msgid "" "a GMainContext for the " "main loop of a new server." msgstr "" "サーバーのGMainContextコン" "テキスト。" #: xml/soupcut-server.xml:61(simpara) msgid "" "a new SoupServer owned by " "Cutter. Don't g_object_unref() it." msgstr "" "新たにSoupServerオブジェクト" "を生成します。作成されたサーバーはCutterが所有権を持つので、g_object_unref()を呼ばないでく" "ださい。" #: xml/soupcut-server.xml:66(title) msgid "soupcut_server_build_uri ()" msgstr "" #: xml/soupcut-server.xml:68(programlisting) #, no-wrap msgid "" "const gchar * soupcut_server_build_uri (SoupServer *server,\n" " const gchar *path);" msgstr "" #: xml/soupcut-server.xml:70(para) msgid "" "an URI is built and returned with the base uri of server and path." msgstr "" "@server のベースURIにパスとして @path を組み合わせたURIの文字列を作成します。" #: xml/soupcut-server.xml:76(term) xml/gcut-test-utils.xml:538(term) #: xml/gcut-public.xml:149(term) xml/gcut-public.xml:173(term) #: xml/gcut-assertions.xml:558(term) xml/gcut-assertions.xml:574(term) #: xml/gcut-assertions-helper.xml:494(term) xml/cut-test-utils.xml:298(term) #: xml/cut-test-utils.xml:318(term) xml/cut-test-utils.xml:341(term) #: xml/cut-test-utils.xml:364(term) xml/cut-test-utils.xml:391(term) #: xml/cut-test-utils.xml:412(term) xml/cut-test-utils.xml:428(term) #: xml/cut-test-utils.xml:461(term) xml/cut-assertions.xml:1988(term) #: xml/cut-assertions.xml:2011(term) xml/cut-assertions.xml:2033(term) #: xml/cut-assertions.xml:2056(term) xml/cut-assertions.xml:2078(term) #: xml/cut-assertions.xml:2163(term) msgid "path :" msgstr "" #: xml/soupcut-server.xml:77(simpara) xml/cut-assertions.xml:2198(simpara) #: xml/cut-assertions.xml:2201(simpara) xml/cut-assertions.xml:2215(simpara) #: xml/cut-assertions.xml:2218(simpara) msgid "a path." msgstr "パス。" #: xml/soupcut-server.xml:79(simpara) msgid "a new uri string owned by Cutter. Don't free it." msgstr "Cutterが所有するURI文字列。解放しないで下さい。" #: xml/soupcut-server.xml:88(link) xml/soupcut-client.xml:203(link) #: xml/soupcut-assertions.xml:7(refentrytitle) #: xml/soupcut-assertions.xml:14(refname) xml/api-index-full.xml:542(link) #: xml/api-index-full.xml:544(link) xml/api-index-full.xml:546(link) #: xml/api-index-full.xml:548(link) xml/api-index-full.xml:557(link) #: xml/api-index-1.0.8.xml:11(link) xml/api-index-1.0.8.xml:12(link) #: xml/api-index-1.0.8.xml:13(link) xml/api-index-1.0.8.xml:14(link) #: xml/api-index-1.0.8.xml:22(link) msgid "Assertions for HTTP client and server" msgstr "HTTPクライアント・サーバ用の検証" #: xml/soupcut-client.xml:7(refentrytitle) xml/soupcut-client.xml:14(refname) msgid "Convenience HTTP client API" msgstr "便利なHTTPクライアントAPI" #: xml/soupcut-client.xml:15(refpurpose) msgid "API to work as HTTP client." msgstr "HTTPクライアントとして動作するためのAPI。" #: xml/soupcut-client.xml:21(link) xml/soupcut-client.xml:23(returnvalue) #: xml/soupcut-client.xml:24(type) xml/soupcut-client.xml:26(type) #: xml/soupcut-client.xml:28(type) xml/soupcut-client.xml:32(type) #: xml/soupcut-client.xml:33(type) xml/soupcut-client.xml:34(type) #: xml/soupcut-client.xml:63(title) xml/soupcut-client.xml:64(primary) #: xml/soupcut-assertions.xml:28(type) xml/soupcut-assertions.xml:30(type) #: xml/soupcut-assertions.xml:33(type) xml/soupcut-assertions.xml:36(type) #: xml/soupcut-assertions-helper.xml:28(type) #: xml/soupcut-assertions-helper.xml:32(type) #: xml/soupcut-assertions-helper.xml:36(type) #: xml/soupcut-assertions-helper.xml:41(type) xml/api-index-full.xml:538(link) #: xml/api-index-full.xml:539(link) xml/api-index-full.xml:540(link) #: xml/api-index-full.xml:550(link) xml/api-index-full.xml:551(link) #: xml/api-index-full.xml:552(link) xml/api-index-full.xml:553(link) #: xml/api-index-full.xml:554(link) xml/api-index-full.xml:555(link) #: xml/api-index-full.xml:556(link) xml/api-index-1.0.8.xml:15(link) #: xml/api-index-1.0.8.xml:16(link) xml/api-index-1.0.8.xml:17(link) #: xml/api-index-1.0.8.xml:18(link) xml/api-index-1.0.8.xml:19(link) #: xml/api-index-1.0.8.xml:20(link) xml/api-index-1.0.8.xml:21(link) msgid "SoupCutClient" msgstr "" #: xml/soupcut-client.xml:22(link) xml/soupcut-client.xml:69(title) #: xml/soupcut-client.xml:70(primary) xml/api-index-full.xml:540(link) msgid "SoupCutClientClass" msgstr "" #: xml/soupcut-client.xml:23(link) xml/soupcut-client.xml:79(primary) #: xml/api-index-full.xml:554(link) xml/api-index-1.0.8.xml:19(link) msgid "soupcut_client_new" msgstr "" #: xml/soupcut-client.xml:23(type) xml/soupcut-client.xml:24(returnvalue) #: xml/soupcut-assertions.xml:22(returnvalue) #: xml/soupcut-assertions.xml:26(returnvalue) #: xml/soupcut-assertions.xml:30(returnvalue) #: xml/soupcut-assertions.xml:32(returnvalue) #: xml/soupcut-assertions.xml:35(returnvalue) #: xml/soupcut-assertions-helper.xml:21(returnvalue) #: xml/soupcut-assertions-helper.xml:26(returnvalue) #: xml/soupcut-assertions-helper.xml:31(returnvalue) #: xml/soupcut-assertions-helper.xml:34(returnvalue) #: xml/soupcut-assertions-helper.xml:39(returnvalue) #: xml/gdkcut-pixbuf-assertions.xml:22(returnvalue) #: xml/gdkcut-pixbuf-assertions-helper.xml:21(returnvalue) #: xml/gcut-value-equal.xml:24(returnvalue) xml/gcut-types.xml:21(returnvalue) #: xml/gcut-types.xml:26(type) xml/gcut-types.xml:27(type) #: xml/gcut-test-utils.xml:53(returnvalue) #: xml/gcut-test-utils.xml:54(returnvalue) #: xml/gcut-string-io-channel.xml:23(returnvalue) #: xml/gcut-string-io-channel.xml:26(returnvalue) #: xml/gcut-string-io-channel.xml:30(returnvalue) #: xml/gcut-string-io-channel.xml:34(returnvalue) #: xml/gcut-string-io-channel.xml:39(returnvalue) #: xml/gcut-string-io-channel.xml:44(returnvalue) #: xml/gcut-process.xml:26(type) xml/gcut-process.xml:36(returnvalue) #: xml/gcut-process.xml:39(returnvalue) xml/gcut-process.xml:67(returnvalue) #: xml/gcut-process.xml:71(returnvalue) xml/gcut-main.xml:21(returnvalue) #: xml/gcut-main.xml:21(type) xml/gcut-main.xml:22(returnvalue) #: xml/gcut-main.xml:22(type) xml/gcut-main.xml:23(returnvalue) #: xml/gcut-main.xml:23(type) xml/gcut-main.xml:24(returnvalue) #: xml/gcut-main.xml:24(type) xml/gcut-inspect.xml:22(returnvalue) #: xml/gcut-inspect.xml:25(returnvalue) xml/gcut-inspect.xml:28(returnvalue) #: xml/gcut-inspect.xml:31(returnvalue) xml/gcut-inspect.xml:34(returnvalue) #: xml/gcut-inspect.xml:37(returnvalue) xml/gcut-inspect.xml:40(returnvalue) #: xml/gcut-inspect.xml:43(returnvalue) xml/gcut-inspect.xml:46(returnvalue) #: xml/gcut-inspect.xml:49(returnvalue) xml/gcut-inspect.xml:52(returnvalue) #: xml/gcut-inspect.xml:55(returnvalue) xml/gcut-inspect.xml:58(returnvalue) #: xml/gcut-inspect.xml:61(returnvalue) xml/gcut-event-loop.xml:25(type) #: xml/gcut-event-loop.xml:26(returnvalue) #: xml/gcut-event-loop.xml:29(returnvalue) xml/gcut-enum.xml:23(type) #: xml/gcut-egg.xml:26(type) xml/gcut-egg.xml:35(returnvalue) #: xml/gcut-egg.xml:38(returnvalue) xml/gcut-egg.xml:44(returnvalue) #: xml/gcut-egg.xml:53(returnvalue) xml/gcut-egg.xml:60(returnvalue) #: xml/gcut-data.xml:22(returnvalue) xml/gcut-assertions.xml:22(returnvalue) #: xml/gcut-assertions.xml:25(returnvalue) #: xml/gcut-assertions.xml:28(returnvalue) #: xml/gcut-assertions.xml:31(returnvalue) #: xml/gcut-assertions.xml:34(returnvalue) #: xml/gcut-assertions.xml:40(returnvalue) #: xml/gcut-assertions.xml:43(returnvalue) #: xml/gcut-assertions.xml:46(returnvalue) #: xml/gcut-assertions.xml:49(returnvalue) #: xml/gcut-assertions.xml:52(returnvalue) #: xml/gcut-assertions.xml:55(returnvalue) #: xml/gcut-assertions.xml:58(returnvalue) #: xml/gcut-assertions.xml:63(returnvalue) #: xml/gcut-assertions.xml:67(returnvalue) #: xml/gcut-assertions.xml:71(returnvalue) #: xml/gcut-assertions.xml:78(returnvalue) #: xml/gcut-assertions.xml:82(returnvalue) #: xml/gcut-assertions.xml:84(returnvalue) #: xml/gcut-assertions.xml:86(returnvalue) #: xml/gcut-assertions.xml:89(returnvalue) #: xml/gcut-assertions.xml:91(returnvalue) #: xml/gcut-assertions.xml:93(returnvalue) #: xml/gcut-assertions.xml:96(returnvalue) #: xml/gcut-assertions.xml:100(returnvalue) #: xml/gcut-assertions.xml:104(returnvalue) #: xml/gcut-assertions.xml:107(returnvalue) #: xml/gcut-assertions.xml:111(returnvalue) #: xml/gcut-assertions.xml:114(returnvalue) #: xml/gcut-assertions.xml:117(returnvalue) #: xml/gcut-assertions.xml:120(returnvalue) #: xml/gcut-assertions.xml:123(returnvalue) #: xml/gcut-assertions.xml:126(returnvalue) #: xml/gcut-assertions.xml:129(returnvalue) #: xml/gcut-assertions-helper.xml:21(returnvalue) #: xml/gcut-assertions-helper.xml:25(returnvalue) #: xml/gcut-assertions-helper.xml:29(returnvalue) #: xml/gcut-assertions-helper.xml:37(returnvalue) #: xml/gcut-assertions-helper.xml:41(returnvalue) #: xml/gcut-assertions-helper.xml:45(returnvalue) #: xml/gcut-assertions-helper.xml:50(returnvalue) #: xml/gcut-assertions-helper.xml:56(returnvalue) #: xml/gcut-assertions-helper.xml:62(returnvalue) #: xml/gcut-assertions-helper.xml:68(returnvalue) #: xml/gcut-assertions-helper.xml:77(returnvalue) #: xml/gcut-assertions-helper.xml:82(returnvalue) #: xml/gcut-assertions-helper.xml:84(returnvalue) #: xml/gcut-assertions-helper.xml:88(returnvalue) #: xml/gcut-assertions-helper.xml:90(returnvalue) #: xml/gcut-assertions-helper.xml:94(returnvalue) #: xml/gcut-assertions-helper.xml:100(returnvalue) #: xml/gcut-assertions-helper.xml:106(returnvalue) #: xml/gcut-assertions-helper.xml:112(returnvalue) #: xml/gcut-assertions-helper.xml:116(returnvalue) #: xml/gcut-assertions-helper.xml:120(returnvalue) #: xml/gcut-assertions-helper.xml:124(returnvalue) #: xml/gcut-assertions-helper.xml:128(returnvalue) #: xml/gcut-assertions-helper.xml:132(returnvalue) #: xml/gcut-assertions-helper.xml:136(returnvalue) #: xml/cutter.xml:21(returnvalue) xml/cutter.xml:21(type) #: xml/cutter.xml:22(returnvalue) xml/cutter.xml:22(type) #: xml/cutter.xml:23(returnvalue) xml/cutter.xml:23(type) #: xml/cutter.xml:24(returnvalue) xml/cutter.xml:24(type) #: xml/cutter.xml:25(returnvalue) xml/cutter.xml:25(type) #: xml/cutter.xml:26(returnvalue) xml/cutter.xml:26(type) #: xml/cutter.xml:35(returnvalue) xml/cutter.xml:37(returnvalue) #: xml/cutter.xml:39(returnvalue) xml/cutter.xml:39(type) #: xml/cutter.xml:40(returnvalue) xml/cut-types.xml:21(returnvalue) #: xml/cut-types.xml:21(type) xml/cut-types.xml:22(returnvalue) #: xml/cut-types.xml:22(type) xml/cut-test-utils.xml:21(returnvalue) #: xml/cut-test-utils.xml:21(type) xml/cut-test-utils.xml:23(returnvalue) #: xml/cut-test-utils.xml:23(type) xml/cut-test-utils.xml:28(returnvalue) #: xml/cut-test-utils.xml:28(type) xml/cut-test-utils.xml:42(returnvalue) #: xml/cut-test-utils.xml:53(returnvalue) #: xml/cut-test-utils.xml:58(returnvalue) #: xml/cut-string-diff-writer.xml:23(type) #: xml/cut-multi-process.xml:26(returnvalue) #: xml/cut-multi-process.xml:31(returnvalue) #: xml/cut-multi-process.xml:35(returnvalue) #: xml/cut-multi-process.xml:39(returnvalue) #: xml/cut-multi-process.xml:42(returnvalue) #: xml/cut-multi-process.xml:45(returnvalue) #: xml/cut-multi-process.xml:49(returnvalue) #: xml/cut-multi-process.xml:54(returnvalue) #: xml/cut-multi-process.xml:59(returnvalue) #: xml/cut-multi-process.xml:66(returnvalue) #: xml/cut-multi-process.xml:68(type) #: xml/cut-multi-process.xml:69(returnvalue) #: xml/cut-multi-process.xml:72(returnvalue) #: xml/cut-helper.xml:22(returnvalue) xml/cut-helper.xml:22(type) #: xml/cut-helper.xml:23(returnvalue) xml/cut-helper.xml:25(returnvalue) #: xml/cut-helper.xml:28(returnvalue) xml/cut-helper.xml:29(returnvalue) #: xml/cut-helper.xml:29(type) xml/cut-helper.xml:47(type) #: xml/cut-helper.xml:48(type) xml/cut-console.xml:35(type) #: xml/cut-console-diff-writer.xml:24(returnvalue) #: xml/cut-console-diff-writer.xml:29(returnvalue) #: xml/cut-console-diff-writer.xml:34(returnvalue) #: xml/cut-console-diff-writer.xml:39(returnvalue) #: xml/cut-console-diff-writer.xml:44(returnvalue) #: xml/cut-console-diff-writer.xml:49(returnvalue) #: xml/cut-assertions.xml:21(returnvalue) #: xml/cut-assertions.xml:23(returnvalue) #: xml/cut-assertions.xml:25(returnvalue) #: xml/cut-assertions.xml:27(returnvalue) #: xml/cut-assertions.xml:30(returnvalue) #: xml/cut-assertions.xml:33(returnvalue) xml/cut-assertions.xml:33(type) #: xml/cut-assertions.xml:35(returnvalue) #: xml/cut-assertions.xml:37(returnvalue) xml/cut-assertions.xml:37(type) #: xml/cut-assertions.xml:39(returnvalue) #: xml/cut-assertions.xml:42(returnvalue) #: xml/cut-assertions.xml:105(returnvalue) #: xml/cut-assertions.xml:108(returnvalue) #: xml/cut-assertions.xml:171(returnvalue) #: xml/cut-assertions.xml:174(returnvalue) #: xml/cut-assertions.xml:177(returnvalue) #: xml/cut-assertions.xml:181(returnvalue) #: xml/cut-assertions.xml:191(returnvalue) #: xml/cut-assertions.xml:194(returnvalue) #: xml/cut-assertions.xml:197(returnvalue) #: xml/cut-assertions.xml:200(returnvalue) #: xml/cut-assertions.xml:203(returnvalue) #: xml/cut-assertions.xml:207(returnvalue) #: xml/cut-assertions.xml:211(returnvalue) xml/cut-assertions.xml:211(type) #: xml/cut-assertions.xml:213(type) xml/cut-assertions.xml:216(returnvalue) #: xml/cut-assertions.xml:216(type) xml/cut-assertions.xml:218(type) #: xml/cut-assertions.xml:221(returnvalue) #: xml/cut-assertions.xml:224(returnvalue) #: xml/cut-assertions.xml:252(returnvalue) #: xml/cut-assertions.xml:253(returnvalue) #: xml/cut-assertions.xml:255(returnvalue) #: xml/cut-assertions.xml:257(returnvalue) #: xml/cut-assertions.xml:259(returnvalue) #: xml/cut-assertions.xml:261(returnvalue) #: xml/cut-assertions.xml:263(returnvalue) #: xml/cut-assertions.xml:266(returnvalue) #: xml/cut-assertions.xml:269(returnvalue) xml/cut-assertions.xml:269(type) #: xml/cut-assertions.xml:270(type) xml/cut-assertions.xml:272(returnvalue) #: xml/cut-assertions.xml:274(type) xml/cut-assertions.xml:285(returnvalue) #: xml/cut-assertions.xml:287(returnvalue) #: xml/cut-assertions.xml:288(returnvalue) #: xml/cut-assertions.xml:290(returnvalue) #: xml/cut-assertions.xml:292(returnvalue) #: xml/cut-assertions.xml:294(returnvalue) #: xml/cut-assertions.xml:296(returnvalue) #: xml/cut-assertions.xml:298(returnvalue) xml/cut-assertions.xml:298(type) msgid "void" msgstr "" #: xml/soupcut-client.xml:24(link) xml/soupcut-client.xml:90(primary) #: xml/api-index-full.xml:556(link) xml/api-index-1.0.8.xml:21(link) msgid "soupcut_client_set_base" msgstr "" #: xml/soupcut-client.xml:24(parameter) xml/soupcut-client.xml:26(parameter) #: xml/soupcut-client.xml:28(parameter) xml/soupcut-client.xml:32(parameter) #: xml/soupcut-client.xml:33(parameter) xml/soupcut-client.xml:34(parameter) #: xml/soupcut-assertions.xml:28(parameter) #: xml/soupcut-assertions.xml:30(parameter) #: xml/soupcut-assertions.xml:33(parameter) #: xml/soupcut-assertions.xml:36(parameter) #: xml/soupcut-assertions-helper.xml:28(parameter) #: xml/soupcut-assertions-helper.xml:32(parameter) #: xml/soupcut-assertions-helper.xml:36(parameter) #: xml/soupcut-assertions-helper.xml:41(parameter) msgid " *client" msgstr "" #: xml/soupcut-client.xml:25(parameter) xml/soupcut-client.xml:29(parameter) msgid "const *uri" msgstr "" #: xml/soupcut-client.xml:26(returnvalue) #: xml/soupcut-client.xml:28(returnvalue) #: xml/soupcut-client.xml:32(returnvalue) xml/gdkcut-pixbuf.xml:25(type) #: xml/gdkcut-pixbuf.xml:28(type) xml/gdkcut-pixbuf.xml:31(type) #: xml/gdkcut-pixbuf-assertions.xml:24(type) #: xml/gdkcut-pixbuf-assertions-helper.xml:23(type) #: xml/gcut-test-utils.xml:31(type) xml/gcut-test-utils.xml:34(type) #: xml/gcut-test-utils.xml:35(type) xml/gcut-test-utils.xml:40(type) #: xml/gcut-test-utils.xml:43(type) xml/gcut-test-utils.xml:44(type) #: xml/gcut-process.xml:47(type) xml/gcut-process.xml:65(returnvalue) #: xml/gcut-process.xml:69(type) xml/gcut-key-file.xml:26(returnvalue) #: xml/gcut-event-loop.xml:30(returnvalue) #: xml/gcut-event-loop.xml:35(returnvalue) #: xml/gcut-event-loop.xml:39(returnvalue) #: xml/gcut-event-loop.xml:45(returnvalue) #: xml/gcut-event-loop.xml:49(returnvalue) #: xml/gcut-event-loop.xml:55(returnvalue) #: xml/gcut-event-loop.xml:58(returnvalue) xml/gcut-event-loop.xml:64(type) #: xml/gcut-enum.xml:31(type) xml/gcut-enum.xml:32(returnvalue) #: xml/gcut-enum.xml:35(returnvalue) xml/gcut-egg.xml:51(type) #: xml/gcut-egg.xml:58(returnvalue) xml/gcut-egg.xml:62(type) #: xml/gcut-data.xml:33(returnvalue) xml/gcut-data.xml:43(returnvalue) #: xml/gcut-data-helper.xml:30(returnvalue) #: xml/gcut-data-helper.xml:45(returnvalue) xml/gcut-assertions.xml:101(type) #: xml/gcut-assertions.xml:102(type) msgid "guint" msgstr "" #: xml/soupcut-client.xml:26(link) xml/soupcut-client.xml:105(primary) #: xml/api-index-full.xml:555(link) xml/api-index-1.0.8.xml:20(link) msgid "soupcut_client_send_message" msgstr "" #: xml/soupcut-client.xml:27(type) xml/soupcut-client.xml:33(returnvalue) #: xml/soupcut-assertions.xml:24(type) #: xml/soupcut-assertions-helper.xml:23(type) msgid "SoupMessage" msgstr "" #: xml/soupcut-client.xml:27(parameter) #: xml/soupcut-assertions.xml:24(parameter) #: xml/soupcut-assertions-helper.xml:23(parameter) msgid " *message" msgstr "" #: xml/soupcut-client.xml:28(link) xml/soupcut-client.xml:123(primary) #: xml/api-index-full.xml:550(link) xml/api-index-1.0.8.xml:15(link) msgid "soupcut_client_get" msgstr "" #: xml/soupcut-client.xml:30(parameter) msgid "const *first_query_name" msgstr "" #: xml/soupcut-client.xml:31(parameter) #: xml/soupcut-assertions.xml:25(parameter) #: xml/soupcut-assertions.xml:29(parameter) #: xml/soupcut-assertions.xml:31(parameter) #: xml/soupcut-assertions.xml:34(parameter) #: xml/soupcut-assertions.xml:37(parameter) #: xml/gdkcut-pixbuf-assertions.xml:25(parameter) #: xml/gcut-test-utils.xml:30(parameter) xml/gcut-test-utils.xml:33(parameter) #: xml/gcut-test-utils.xml:36(parameter) xml/gcut-test-utils.xml:38(parameter) #: xml/gcut-test-utils.xml:42(parameter) xml/gcut-test-utils.xml:45(parameter) #: xml/gcut-test-utils.xml:47(parameter) xml/gcut-test-utils.xml:56(parameter) #: xml/gcut-test-utils.xml:62(parameter) xml/gcut-test-utils.xml:64(parameter) #: xml/gcut-public.xml:35(parameter) xml/gcut-process.xml:28(parameter) #: xml/gcut-process.xml:41(parameter) xml/gcut-egg.xml:28(parameter) #: xml/gcut-egg.xml:40(parameter) xml/gcut-data.xml:24(parameter) #: xml/gcut-assertions.xml:24(parameter) xml/gcut-assertions.xml:27(parameter) #: xml/gcut-assertions.xml:30(parameter) xml/gcut-assertions.xml:33(parameter) #: xml/gcut-assertions.xml:39(parameter) xml/gcut-assertions.xml:42(parameter) #: xml/gcut-assertions.xml:45(parameter) xml/gcut-assertions.xml:48(parameter) #: xml/gcut-assertions.xml:51(parameter) xml/gcut-assertions.xml:54(parameter) #: xml/gcut-assertions.xml:57(parameter) xml/gcut-assertions.xml:62(parameter) #: xml/gcut-assertions.xml:66(parameter) xml/gcut-assertions.xml:70(parameter) #: xml/gcut-assertions.xml:77(parameter) xml/gcut-assertions.xml:81(parameter) #: xml/gcut-assertions.xml:83(parameter) xml/gcut-assertions.xml:85(parameter) #: xml/gcut-assertions.xml:88(parameter) xml/gcut-assertions.xml:90(parameter) #: xml/gcut-assertions.xml:92(parameter) xml/gcut-assertions.xml:95(parameter) #: xml/gcut-assertions.xml:99(parameter) #: xml/gcut-assertions.xml:103(parameter) #: xml/gcut-assertions.xml:106(parameter) #: xml/gcut-assertions.xml:110(parameter) #: xml/gcut-assertions.xml:113(parameter) #: xml/gcut-assertions.xml:116(parameter) #: xml/gcut-assertions.xml:119(parameter) #: xml/gcut-assertions.xml:122(parameter) #: xml/gcut-assertions.xml:125(parameter) #: xml/gcut-assertions.xml:128(parameter) #: xml/gcut-assertions.xml:131(parameter) #: xml/gcut-assertions-helper.xml:89(parameter) xml/cutter.xml:36(parameter) #: xml/cutter.xml:41(parameter) xml/cut-test-utils.xml:31(parameter) #: xml/cut-test-utils.xml:43(parameter) xml/cut-test-utils.xml:45(parameter) #: xml/cut-test-utils.xml:47(parameter) xml/cut-test-utils.xml:49(parameter) #: xml/cut-test-utils.xml:52(parameter) xml/cut-test-utils.xml:54(parameter) #: xml/cut-test-utils.xml:56(parameter) xml/cut-test-utils.xml:59(parameter) #: xml/cut-helper.xml:24(parameter) xml/cut-assertions.xml:22(parameter) #: xml/cut-assertions.xml:24(parameter) xml/cut-assertions.xml:26(parameter) #: xml/cut-assertions.xml:29(parameter) xml/cut-assertions.xml:32(parameter) #: xml/cut-assertions.xml:34(parameter) xml/cut-assertions.xml:36(parameter) #: xml/cut-assertions.xml:38(parameter) xml/cut-assertions.xml:41(parameter) #: xml/cut-assertions.xml:44(parameter) xml/cut-assertions.xml:107(parameter) #: xml/cut-assertions.xml:110(parameter) xml/cut-assertions.xml:173(parameter) #: xml/cut-assertions.xml:176(parameter) xml/cut-assertions.xml:180(parameter) #: xml/cut-assertions.xml:184(parameter) xml/cut-assertions.xml:193(parameter) #: xml/cut-assertions.xml:196(parameter) xml/cut-assertions.xml:199(parameter) #: xml/cut-assertions.xml:202(parameter) xml/cut-assertions.xml:206(parameter) #: xml/cut-assertions.xml:210(parameter) xml/cut-assertions.xml:215(parameter) #: xml/cut-assertions.xml:220(parameter) xml/cut-assertions.xml:223(parameter) #: xml/cut-assertions.xml:227(parameter) xml/cut-assertions.xml:252(parameter) #: xml/cut-assertions.xml:254(parameter) xml/cut-assertions.xml:256(parameter) #: xml/cut-assertions.xml:258(parameter) xml/cut-assertions.xml:260(parameter) #: xml/cut-assertions.xml:262(parameter) xml/cut-assertions.xml:265(parameter) #: xml/cut-assertions.xml:268(parameter) xml/cut-assertions.xml:271(parameter) #: xml/cut-assertions.xml:275(parameter) xml/cut-assertions.xml:286(parameter) #: xml/cut-assertions.xml:287(parameter) xml/cut-assertions.xml:289(parameter) #: xml/cut-assertions.xml:291(parameter) xml/cut-assertions.xml:293(parameter) #: xml/cut-assertions.xml:295(parameter) xml/cut-assertions.xml:297(parameter) msgid "..." msgstr "" #: xml/soupcut-client.xml:32(link) xml/soupcut-client.xml:150(primary) #: xml/api-index-full.xml:553(link) xml/api-index-1.0.8.xml:18(link) msgid "soupcut_client_get_n_messages" msgstr "" #: xml/soupcut-client.xml:33(link) xml/soupcut-client.xml:164(primary) #: xml/api-index-full.xml:552(link) xml/api-index-1.0.8.xml:17(link) msgid "soupcut_client_get_latest_message" msgstr "" #: xml/soupcut-client.xml:34(link) xml/soupcut-client.xml:178(primary) #: xml/api-index-full.xml:551(link) xml/api-index-1.0.8.xml:16(link) msgid "soupcut_client_get_async_context" msgstr "" #: xml/soupcut-client.xml:21(synopsis) #, no-wrap msgid "" " ;\n" " ;\n" " * ();\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " ();\n" " * ();\n" " * ();\n" msgstr "" #: xml/soupcut-client.xml:38(title) xml/gcut-process.xml:76(title) #: xml/gcut-event-loop.xml:68(title) xml/gcut-egg.xml:66(title) msgid "Object Hierarchy" msgstr "オブジェクト階層" #: xml/soupcut-client.xml:40(link) xml/gcut-test-utils.xml:22(returnvalue) #: xml/gcut-test-utils.xml:22(type) xml/gcut-public.xml:21(returnvalue) #: xml/gcut-public.xml:22(type) xml/gcut-process.xml:78(link) #: xml/gcut-object.xml:16(type) xml/gcut-object.xml:22(type) #: xml/gcut-object.xml:23(type) xml/gcut-object.xml:25(type) #: xml/gcut-object.xml:26(type) xml/gcut-event-loop.xml:70(link) #: xml/gcut-egg.xml:68(link) xml/gcut-assertions.xml:104(type) #: xml/gcut-assertions.xml:105(type) xml/gcut-assertions.xml:107(type) #: xml/gcut-assertions.xml:108(type) xml/gcut-assertions-helper.xml:106(type) #: xml/gcut-assertions-helper.xml:107(type) msgid "GObject" msgstr "" #: xml/soupcut-client.xml:39(synopsis) #, no-wrap msgid "" "\n" " \n" " +----SoupCutClient\n" msgstr "" #: xml/soupcut-client.xml:45(title) xml/gcut-process.xml:83(title) #: xml/gcut-egg.xml:73(title) msgid "Properties" msgstr "プロパティ" #: xml/soupcut-client.xml:47(link) msgid "async" msgstr "" #: xml/soupcut-client.xml:47(type) xml/gdkcut-pixbuf.xml:21(returnvalue) #: xml/gdkcut-pixbuf.xml:23(returnvalue) #: xml/gcut-value-equal.xml:22(returnvalue) #: xml/gcut-string.xml:22(returnvalue) #: xml/gcut-string-io-channel.xml:32(returnvalue) #: xml/gcut-string-io-channel.xml:36(type) #: xml/gcut-string-io-channel.xml:37(returnvalue) #: xml/gcut-string-io-channel.xml:41(type) #: xml/gcut-process.xml:43(returnvalue) xml/gcut-process.xml:49(returnvalue) #: xml/gcut-process.xml:52(returnvalue) xml/gcut-object.xml:22(returnvalue) #: xml/gcut-list.xml:22(returnvalue) xml/gcut-list.xml:28(returnvalue) #: xml/gcut-list.xml:31(returnvalue) xml/gcut-list.xml:34(returnvalue) #: xml/gcut-hash-table.xml:22(returnvalue) #: xml/gcut-hash-table.xml:34(returnvalue) #: xml/gcut-event-loop.xml:27(returnvalue) xml/gcut-event-loop.xml:28(type) #: xml/gcut-event-loop.xml:63(returnvalue) xml/gcut-error.xml:22(returnvalue) #: xml/gcut-egg.xml:42(returnvalue) xml/gcut-egg.xml:45(returnvalue) #: xml/gcut-data.xml:25(returnvalue) xml/gcut-data-helper.xml:60(returnvalue) #: xml/cut-console.xml:35(returnvalue) xml/cut-console.xml:36(returnvalue) #: xml/cut-console.xml:38(type) xml/cut-console-diff-writer.xml:23(type) msgid "gboolean" msgstr "" #: xml/soupcut-client.xml:46(synopsis) #, no-wrap msgid "" "\n" " \"\" : Read / Write\n" msgstr "" #: xml/soupcut-client.xml:53(para) msgid "" "SoupCutClient works as a " "HTTP client. It accepts multiple requests and responses are managed by SoupCutClient. SoupCutClient related assertions are " "also provided." msgstr "" "SoupCutClientオブジェクト" "はHTTPクライアントとして動作します。SoupCutClientは複数のリクエストやレスポンスを管理する" "ことができます。また、SoupCutClientに関連するアサーションのAPIも提供しています。" #: xml/soupcut-client.xml:65(programlisting) #, no-wrap msgid "typedef struct _SoupCutClient SoupCutClient;" msgstr "" #: xml/soupcut-client.xml:71(programlisting) #, no-wrap msgid "" "typedef struct {\n" " GObjectClass parent_class;\n" "} SoupCutClientClass;\n" msgstr "" #: xml/soupcut-client.xml:78(title) msgid "soupcut_client_new ()" msgstr "" #: xml/soupcut-client.xml:80(programlisting) #, no-wrap msgid "SoupCutClient * soupcut_client_new (void);" msgstr "" #: xml/soupcut-client.xml:81(para) msgid "" "Creates and returns a new SoupCutClient" msgstr "" "新たにSoupCutClientオブ" "ジェクトを生成して返します。" #: xml/soupcut-client.xml:84(simpara) msgid "" "a new SoupCutClient." msgstr "" "SoupCutClientオブジェク" "ト。" #: xml/soupcut-client.xml:89(title) msgid "soupcut_client_set_base ()" msgstr "" #: xml/soupcut-client.xml:91(programlisting) #, no-wrap msgid "" "void soupcut_client_set_base (SoupCutClient *client,\n" " const gchar *uri);" msgstr "" #: xml/soupcut-client.xml:93(para) msgid "" "Set uri as a base uri of client." msgstr "" "clientのベースURIをuriに設定し" "ます。" #: xml/soupcut-client.xml:96(term) xml/soupcut-client.xml:111(term) #: xml/soupcut-client.xml:132(term) xml/soupcut-client.xml:155(term) #: xml/soupcut-client.xml:169(term) xml/soupcut-client.xml:183(term) #: xml/soupcut-assertions.xml:81(term) xml/soupcut-assertions.xml:96(term) #: xml/soupcut-assertions.xml:115(term) xml/soupcut-assertions.xml:135(term) #: xml/soupcut-assertions-helper.xml:90(term) #: xml/soupcut-assertions-helper.xml:108(term) #: xml/soupcut-assertions-helper.xml:128(term) #: xml/soupcut-assertions-helper.xml:151(term) msgid "client :" msgstr "" #: xml/soupcut-client.xml:97(simpara) xml/soupcut-client.xml:112(simpara) #: xml/soupcut-client.xml:133(simpara) xml/soupcut-client.xml:156(simpara) #: xml/soupcut-client.xml:170(simpara) xml/soupcut-client.xml:184(simpara) #: xml/soupcut-assertions.xml:82(simpara) #: xml/soupcut-assertions.xml:97(simpara) #: xml/soupcut-assertions.xml:116(simpara) #: xml/soupcut-assertions.xml:136(simpara) msgid "a SoupCutClient." msgstr "" "SoupCutClientオブジェク" "ト。" #: xml/soupcut-client.xml:99(term) xml/soupcut-client.xml:135(term) msgid "uri :" msgstr "" #: xml/soupcut-client.xml:100(simpara) msgid "a base uri." msgstr "ベースURIの文字列。" #: xml/soupcut-client.xml:104(title) msgid "soupcut_client_send_message ()" msgstr "" #: xml/soupcut-client.xml:106(programlisting) #, no-wrap msgid "" "guint soupcut_client_send_message (SoupCutClient *client,\n" " SoupMessage *message);" msgstr "" #: xml/soupcut-client.xml:108(para) msgid "" "Send message with client. " "client remebers all the messages it sent." msgstr "" "clientを使ってmessageを送信しま" "す。clientは過去に送信した全てのSoupMessageの情報を保持しています。" #: xml/soupcut-client.xml:114(term) xml/soupcut-assertions.xml:60(term) #: xml/soupcut-assertions-helper.xml:67(term) xml/cut-helper.xml:420(term) msgid "message :" msgstr "" #: xml/soupcut-client.xml:115(simpara) xml/soupcut-assertions.xml:61(simpara) msgid "a SoupMessage." msgstr "" "SoupMessageオブジェクト。" #: xml/soupcut-client.xml:117(simpara) xml/soupcut-client.xml:144(simpara) msgid "a status code of the response." msgstr "レスポンスのステータスコード。" #: xml/soupcut-client.xml:122(title) msgid "soupcut_client_get ()" msgstr "" #: xml/soupcut-client.xml:124(programlisting) #, no-wrap msgid "" "guint soupcut_client_get (SoupCutClient *client,\n" " const gchar *uri,\n" " const gchar *first_query_name,\n" " ...);" msgstr "" #: xml/soupcut-client.xml:128(para) msgid "" "Send a GET request to uri with queries. If the base " "URI of client is set by soupcut_client_set_base(), the " "destination URI is composed of the base URI and uri. " "If not, uri must be a fully qualified URI." msgstr "" "uriとクエリパラメータで指定されたURIにGETリクエストを" "送信します。もしもclientのベースURIがsoupcut_client_set_base()によって設定されていた場合は、URIはベースURIとuri" "を組み合わせたものとなります。そうでない場合は、uriは" "絶対URIである必要があります。" #: xml/soupcut-client.xml:136(simpara) msgid "an URI string." msgstr "URI文字列。" #: xml/soupcut-client.xml:138(term) msgid "first_query_name :" msgstr "" #: xml/soupcut-client.xml:139(simpara) msgid "the name of the first query parameter." msgstr "ひとつめのクエリパラメータの名前" #: xml/soupcut-client.xml:141(term) xml/soupcut-assertions.xml:63(term) #: xml/soupcut-assertions.xml:84(term) xml/soupcut-assertions.xml:99(term) #: xml/soupcut-assertions.xml:118(term) xml/soupcut-assertions.xml:138(term) #: xml/gdkcut-pixbuf-assertions.xml:64(term) xml/gcut-test-utils.xml:201(term) #: xml/gcut-test-utils.xml:230(term) xml/gcut-test-utils.xml:259(term) #: xml/gcut-test-utils.xml:279(term) xml/gcut-test-utils.xml:324(term) #: xml/gcut-test-utils.xml:354(term) xml/gcut-test-utils.xml:374(term) #: xml/gcut-test-utils.xml:392(term) xml/gcut-test-utils.xml:423(term) #: xml/gcut-test-utils.xml:466(term) xml/gcut-test-utils.xml:517(term) #: xml/gcut-test-utils.xml:541(term) xml/gcut-public.xml:152(term) #: xml/gcut-process.xml:286(term) xml/gcut-process.xml:418(term) #: xml/gcut-egg.xml:270(term) xml/gcut-egg.xml:395(term) #: xml/gcut-data.xml:312(term) xml/gcut-assertions.xml:156(term) #: xml/gcut-assertions.xml:176(term) xml/gcut-assertions.xml:195(term) #: xml/gcut-assertions.xml:215(term) xml/gcut-assertions.xml:248(term) #: xml/gcut-assertions.xml:267(term) xml/gcut-assertions.xml:287(term) #: xml/gcut-assertions.xml:306(term) xml/gcut-assertions.xml:325(term) #: xml/gcut-assertions.xml:345(term) xml/gcut-assertions.xml:365(term) #: xml/gcut-assertions.xml:390(term) xml/gcut-assertions.xml:414(term) #: xml/gcut-assertions.xml:438(term) xml/gcut-assertions.xml:476(term) #: xml/gcut-assertions.xml:496(term) xml/gcut-assertions.xml:511(term) #: xml/gcut-assertions.xml:527(term) xml/gcut-assertions.xml:546(term) #: xml/gcut-assertions.xml:561(term) xml/gcut-assertions.xml:577(term) #: xml/gcut-assertions.xml:596(term) xml/gcut-assertions.xml:628(term) #: xml/gcut-assertions.xml:665(term) xml/gcut-assertions.xml:695(term) #: xml/gcut-assertions.xml:737(term) xml/gcut-assertions.xml:756(term) #: xml/gcut-assertions.xml:775(term) xml/gcut-assertions.xml:794(term) #: xml/gcut-assertions.xml:813(term) xml/gcut-assertions.xml:832(term) #: xml/gcut-assertions.xml:851(term) xml/gcut-assertions.xml:870(term) #: xml/gcut-assertions-helper.xml:497(term) xml/cutter.xml:286(term) #: xml/cutter.xml:304(term) xml/cutter.xml:342(term) xml/cutter.xml:414(term) #: xml/cutter.xml:461(term) xml/cut-test-utils.xml:193(term) #: xml/cut-test-utils.xml:301(term) xml/cut-test-utils.xml:321(term) #: xml/cut-test-utils.xml:344(term) xml/cut-test-utils.xml:367(term) #: xml/cut-test-utils.xml:394(term) xml/cut-test-utils.xml:415(term) #: xml/cut-test-utils.xml:431(term) xml/cut-test-utils.xml:464(term) #: xml/cut-helper.xml:150(term) xml/cut-assertions.xml:344(term) #: xml/cut-assertions.xml:359(term) xml/cut-assertions.xml:374(term) #: xml/cut-assertions.xml:403(term) xml/cut-assertions.xml:432(term) #: xml/cut-assertions.xml:447(term) xml/cut-assertions.xml:462(term) #: xml/cut-assertions.xml:477(term) xml/cut-assertions.xml:496(term) #: xml/cut-assertions.xml:515(term) xml/cut-assertions.xml:536(term) #: xml/cut-assertions.xml:557(term) xml/cut-assertions.xml:578(term) #: xml/cut-assertions.xml:599(term) xml/cut-assertions.xml:620(term) #: xml/cut-assertions.xml:641(term) xml/cut-assertions.xml:662(term) #: xml/cut-assertions.xml:683(term) xml/cut-assertions.xml:704(term) #: xml/cut-assertions.xml:725(term) xml/cut-assertions.xml:746(term) #: xml/cut-assertions.xml:767(term) xml/cut-assertions.xml:788(term) #: xml/cut-assertions.xml:809(term) xml/cut-assertions.xml:830(term) #: xml/cut-assertions.xml:851(term) xml/cut-assertions.xml:872(term) #: xml/cut-assertions.xml:893(term) xml/cut-assertions.xml:914(term) #: xml/cut-assertions.xml:935(term) xml/cut-assertions.xml:954(term) #: xml/cut-assertions.xml:973(term) xml/cut-assertions.xml:994(term) #: xml/cut-assertions.xml:1015(term) xml/cut-assertions.xml:1036(term) #: xml/cut-assertions.xml:1057(term) xml/cut-assertions.xml:1078(term) #: xml/cut-assertions.xml:1099(term) xml/cut-assertions.xml:1120(term) #: xml/cut-assertions.xml:1141(term) xml/cut-assertions.xml:1162(term) #: xml/cut-assertions.xml:1183(term) xml/cut-assertions.xml:1204(term) #: xml/cut-assertions.xml:1225(term) xml/cut-assertions.xml:1246(term) #: xml/cut-assertions.xml:1267(term) xml/cut-assertions.xml:1288(term) #: xml/cut-assertions.xml:1309(term) xml/cut-assertions.xml:1330(term) #: xml/cut-assertions.xml:1351(term) xml/cut-assertions.xml:1372(term) #: xml/cut-assertions.xml:1393(term) xml/cut-assertions.xml:1412(term) #: xml/cut-assertions.xml:1431(term) xml/cut-assertions.xml:1454(term) #: xml/cut-assertions.xml:1477(term) xml/cut-assertions.xml:1501(term) #: xml/cut-assertions.xml:1525(term) xml/cut-assertions.xml:1555(term) #: xml/cut-assertions.xml:1585(term) xml/cut-assertions.xml:1608(term) #: xml/cut-assertions.xml:1626(term) xml/cut-assertions.xml:1662(term) #: xml/cut-assertions.xml:1697(term) xml/cut-assertions.xml:1725(term) #: xml/cut-assertions.xml:1753(term) xml/cut-assertions.xml:1773(term) #: xml/cut-assertions.xml:1794(term) xml/cut-assertions.xml:1820(term) #: xml/cut-assertions.xml:1846(term) xml/cut-assertions.xml:1872(term) #: xml/cut-assertions.xml:1898(term) xml/cut-assertions.xml:1924(term) #: xml/cut-assertions.xml:1950(term) xml/cut-assertions.xml:1968(term) #: xml/cut-assertions.xml:1991(term) xml/cut-assertions.xml:2014(term) #: xml/cut-assertions.xml:2036(term) xml/cut-assertions.xml:2059(term) #: xml/cut-assertions.xml:2081(term) xml/cut-assertions.xml:2107(term) #: xml/cut-assertions.xml:2127(term) xml/cut-assertions.xml:2146(term) #: xml/cut-assertions.xml:2166(term) xml/cut-assertions.xml:2186(term) #: xml/cut-assertions.xml:2203(term) xml/cut-assertions.xml:2220(term) #: xml/cut-assertions.xml:2235(term) xml/cut-assertions.xml:2255(term) #: xml/cut-assertions.xml:2270(term) xml/cut-assertions.xml:2286(term) #: xml/cut-assertions.xml:2303(term) xml/cut-assertions.xml:2318(term) #: xml/cut-assertions.xml:2340(term) xml/cppcutter.xml:155(term) #: xml/cppcut-assertions.xml:59(term) msgid "... :" msgstr "" #: xml/soupcut-client.xml:142(simpara) msgid "" "pairs of query parameter names and values, starting with " "first_query_name, terminated by NULL" msgstr "" "first_query_nameから始まる、クエリパラメータの名前と値" "のペア。最後にNULLを指" "定しなければいけません。" #: xml/soupcut-client.xml:149(title) msgid "soupcut_client_get_n_messages ()" msgstr "" #: xml/soupcut-client.xml:151(programlisting) #, no-wrap msgid "guint soupcut_client_get_n_messages (SoupCutClient *client);" msgstr "" #: xml/soupcut-client.xml:152(para) msgid "Returns the number of messages client sent." msgstr "clientが送信した#SoupMessageの数。" #: xml/soupcut-client.xml:158(simpara) msgid "the number of messages." msgstr "SoupMessageの数。" #: xml/soupcut-client.xml:163(title) msgid "soupcut_client_get_latest_message ()" msgstr "" #: xml/soupcut-client.xml:165(programlisting) #, no-wrap msgid "SoupMessage * soupcut_client_get_latest_message (SoupCutClient *client);" msgstr "" #: xml/soupcut-client.xml:166(para) msgid "" "Returns the latest SoupMessage client sent." msgstr "" "clientが最後に送信したSoupMessageオブジェクト。" #: xml/soupcut-client.xml:172(simpara) msgid "" "the latest SoupMessage." msgstr "" "最後に送信されたSoupMessage" "オブジェクト。" #: xml/soupcut-client.xml:177(title) msgid "soupcut_client_get_async_context ()" msgstr "" #: xml/soupcut-client.xml:179(programlisting) #, no-wrap msgid "GMainContext * soupcut_client_get_async_context (SoupCutClient *client);" msgstr "" #: xml/soupcut-client.xml:180(para) msgid "Returns the asynch_context of client." msgstr "clientの非同期コンテキスト。" #: xml/soupcut-client.xml:186(simpara) msgid "" "a GMainContext of " "client, which may be NULL." msgstr "" "clientGMainContextNULLが返る可能性があります。" #: xml/soupcut-client.xml:193(title) xml/gcut-process.xml:744(title) #: xml/gcut-egg.xml:630(title) msgid "Property Details" msgstr "プロパティ詳細" #: xml/soupcut-client.xml:194(title) msgid "The \"async\" property" msgstr "\"async\"プロパティ" #: xml/soupcut-client.xml:195(primary) xml/api-index-full.xml:539(link) msgid "SoupCutClient:async" msgstr "" #: xml/soupcut-client.xml:196(programlisting) #, no-wrap msgid " \"async\" gboolean : Read / Write" msgstr "" #: xml/soupcut-client.xml:197(para) msgid "True if the session is asynchronous." msgstr "セッションが非同期の場合は真。" #: xml/soupcut-client.xml:197(para) msgid "Default value: FALSE" msgstr "デフォルト値: FALSE" #: xml/soupcut-assertions.xml:15(refpurpose) msgid "" "Checks that your HTTP client/server works as you expect with libsoup support." msgstr "" "libsoupを使ってあなたのHTTPクライアント・サーバが期待通りに動作しているかを検" "証します。" #: xml/soupcut-assertions.xml:22(link) xml/soupcut-assertions.xml:49(primary) #: xml/api-index-full.xml:557(link) xml/api-index-1.0.8.xml:22(link) msgid "soupcut_message_assert_equal_content_type" msgstr "" #: xml/soupcut-assertions.xml:23(parameter) #: xml/soupcut-assertions.xml:27(parameter) #: xml/soupcut-assertions.xml:32(parameter) #: xml/soupcut-assertions-helper.xml:22(parameter) #: xml/soupcut-assertions-helper.xml:27(parameter) #: xml/soupcut-assertions-helper.xml:35(parameter) msgid "const *expected" msgstr "" #: xml/soupcut-assertions.xml:26(link) xml/soupcut-assertions.xml:69(primary) #: xml/api-index-full.xml:544(link) xml/api-index-1.0.8.xml:12(link) msgid "soupcut_client_assert_equal_content_type" msgstr "" #: xml/soupcut-assertions.xml:30(link) xml/soupcut-assertions.xml:90(primary) #: xml/api-index-full.xml:548(link) xml/api-index-1.0.8.xml:14(link) msgid "soupcut_client_assert_response" msgstr "" #: xml/soupcut-assertions.xml:32(link) xml/soupcut-assertions.xml:105(primary) #: xml/api-index-full.xml:542(link) xml/api-index-1.0.8.xml:11(link) msgid "soupcut_client_assert_equal_body" msgstr "" #: xml/soupcut-assertions.xml:35(link) xml/soupcut-assertions.xml:124(primary) #: xml/api-index-full.xml:546(link) xml/api-index-1.0.8.xml:13(link) msgid "soupcut_client_assert_match_body" msgstr "" #: xml/soupcut-assertions.xml:35(parameter) #: xml/soupcut-assertions-helper.xml:40(parameter) msgid "const *pattern" msgstr "" #: xml/soupcut-assertions.xml:22(synopsis) #, no-wrap msgid "" " \n" " (,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" msgstr "" #: xml/soupcut-assertions.xml:48(title) msgid "soupcut_message_assert_equal_content_type ()" msgstr "" #: xml/soupcut-assertions.xml:50(programlisting) #, no-wrap msgid "" "void soupcut_message_assert_equal_content_type\n" " (const gchar *expected,\n" " SoupMessage *message,\n" " ...);" msgstr "" #: xml/soupcut-assertions.xml:54(para) msgid "" "Passes if expected == message->" "response_headers->content_type." msgstr "" "expected == message->response_headers-" ">content_typeが成り立つときパスします。" #: xml/soupcut-assertions.xml:57(term) xml/soupcut-assertions.xml:78(term) #: xml/soupcut-assertions.xml:112(term) #: xml/soupcut-assertions-helper.xml:64(term) #: xml/soupcut-assertions-helper.xml:87(term) #: xml/soupcut-assertions-helper.xml:125(term) #: xml/gdkcut-pixbuf-assertions.xml:55(term) #: xml/gdkcut-pixbuf-assertions-helper.xml:48(term) #: xml/gcut-assertions.xml:150(term) xml/gcut-assertions.xml:170(term) #: xml/gcut-assertions.xml:189(term) xml/gcut-assertions.xml:209(term) #: xml/gcut-assertions.xml:231(term) xml/gcut-assertions.xml:261(term) #: xml/gcut-assertions.xml:281(term) xml/gcut-assertions.xml:300(term) #: xml/gcut-assertions.xml:319(term) xml/gcut-assertions.xml:339(term) #: xml/gcut-assertions.xml:359(term) xml/gcut-assertions.xml:381(term) #: xml/gcut-assertions.xml:408(term) xml/gcut-assertions.xml:432(term) #: xml/gcut-assertions.xml:455(term) xml/gcut-assertions.xml:490(term) #: xml/gcut-assertions.xml:540(term) xml/gcut-assertions.xml:590(term) #: xml/gcut-assertions.xml:622(term) xml/gcut-assertions.xml:659(term) #: xml/gcut-assertions.xml:689(term) xml/gcut-assertions.xml:728(term) #: xml/gcut-assertions.xml:750(term) xml/gcut-assertions.xml:769(term) #: xml/gcut-assertions.xml:788(term) xml/gcut-assertions.xml:807(term) #: xml/gcut-assertions.xml:826(term) xml/gcut-assertions.xml:845(term) #: xml/gcut-assertions.xml:864(term) xml/gcut-assertions-helper.xml:159(term) #: xml/gcut-assertions-helper.xml:181(term) #: xml/gcut-assertions-helper.xml:207(term) #: xml/gcut-assertions-helper.xml:241(term) #: xml/gcut-assertions-helper.xml:263(term) #: xml/gcut-assertions-helper.xml:286(term) #: xml/gcut-assertions-helper.xml:313(term) #: xml/gcut-assertions-helper.xml:343(term) #: xml/gcut-assertions-helper.xml:370(term) #: xml/gcut-assertions-helper.xml:400(term) #: xml/gcut-assertions-helper.xml:438(term) #: xml/gcut-assertions-helper.xml:474(term) #: xml/gcut-assertions-helper.xml:510(term) #: xml/gcut-assertions-helper.xml:537(term) #: xml/gcut-assertions-helper.xml:567(term) #: xml/gcut-assertions-helper.xml:594(term) #: xml/gcut-assertions-helper.xml:622(term) #: xml/gcut-assertions-helper.xml:644(term) #: xml/gcut-assertions-helper.xml:666(term) #: xml/gcut-assertions-helper.xml:688(term) #: xml/gcut-assertions-helper.xml:710(term) #: xml/gcut-assertions-helper.xml:732(term) #: xml/gcut-assertions-helper.xml:754(term) xml/cut-helper.xml:449(term) #: xml/cut-assertions.xml:397(term) xml/cut-assertions.xml:426(term) #: xml/cut-assertions.xml:490(term) xml/cut-assertions.xml:509(term) #: xml/cut-assertions.xml:530(term) xml/cut-assertions.xml:551(term) #: xml/cut-assertions.xml:572(term) xml/cut-assertions.xml:593(term) #: xml/cut-assertions.xml:614(term) xml/cut-assertions.xml:635(term) #: xml/cut-assertions.xml:656(term) xml/cut-assertions.xml:677(term) #: xml/cut-assertions.xml:698(term) xml/cut-assertions.xml:719(term) #: xml/cut-assertions.xml:740(term) xml/cut-assertions.xml:761(term) #: xml/cut-assertions.xml:782(term) xml/cut-assertions.xml:803(term) #: xml/cut-assertions.xml:824(term) xml/cut-assertions.xml:845(term) #: xml/cut-assertions.xml:866(term) xml/cut-assertions.xml:887(term) #: xml/cut-assertions.xml:908(term) xml/cut-assertions.xml:929(term) #: xml/cut-assertions.xml:948(term) xml/cut-assertions.xml:967(term) #: xml/cut-assertions.xml:988(term) xml/cut-assertions.xml:1009(term) #: xml/cut-assertions.xml:1030(term) xml/cut-assertions.xml:1051(term) #: xml/cut-assertions.xml:1072(term) xml/cut-assertions.xml:1093(term) #: xml/cut-assertions.xml:1114(term) xml/cut-assertions.xml:1135(term) #: xml/cut-assertions.xml:1156(term) xml/cut-assertions.xml:1177(term) #: xml/cut-assertions.xml:1198(term) xml/cut-assertions.xml:1219(term) #: xml/cut-assertions.xml:1240(term) xml/cut-assertions.xml:1261(term) #: xml/cut-assertions.xml:1282(term) xml/cut-assertions.xml:1303(term) #: xml/cut-assertions.xml:1324(term) xml/cut-assertions.xml:1345(term) #: xml/cut-assertions.xml:1366(term) xml/cut-assertions.xml:1387(term) #: xml/cut-assertions.xml:1406(term) xml/cut-assertions.xml:1425(term) #: xml/cut-assertions.xml:1445(term) xml/cut-assertions.xml:1468(term) #: xml/cut-assertions.xml:1495(term) xml/cut-assertions.xml:1519(term) #: xml/cut-assertions.xml:1549(term) xml/cut-assertions.xml:1579(term) #: xml/cut-assertions.xml:1602(term) xml/cut-assertions.xml:1620(term) #: xml/cut-assertions.xml:1653(term) xml/cut-assertions.xml:1688(term) #: xml/cut-assertions.xml:1713(term) xml/cut-assertions.xml:1741(term) #: xml/cut-assertions.xml:1767(term) xml/cut-assertions.xml:1788(term) #: xml/cut-assertions.xml:1944(term) xml/cut-assertions.xml:2140(term) #: xml/cut-assertions.xml:2160(term) xml/cut-assertions.xml:2180(term) #: xml/cut-assertions.xml:2197(term) xml/cut-assertions.xml:2214(term) #: xml/cppcut-assertions.xml:53(term) msgid "expected :" msgstr "" #: xml/soupcut-assertions.xml:58(simpara) #: xml/soupcut-assertions.xml:79(simpara) msgid "an expected Content-Type." msgstr "期待するContent-Type。" #: xml/soupcut-assertions.xml:64(simpara) #: xml/soupcut-assertions.xml:85(simpara) #: xml/soupcut-assertions.xml:100(simpara) #: xml/soupcut-assertions.xml:119(simpara) #: xml/soupcut-assertions.xml:139(simpara) #: xml/gdkcut-pixbuf-assertions.xml:65(simpara) #: xml/gcut-assertions.xml:157(simpara) xml/gcut-assertions.xml:177(simpara) #: xml/gcut-assertions.xml:196(simpara) xml/gcut-assertions.xml:216(simpara) #: xml/gcut-assertions.xml:249(simpara) xml/gcut-assertions.xml:268(simpara) #: xml/gcut-assertions.xml:288(simpara) xml/gcut-assertions.xml:307(simpara) #: xml/gcut-assertions.xml:326(simpara) xml/gcut-assertions.xml:346(simpara) #: xml/gcut-assertions.xml:366(simpara) xml/gcut-assertions.xml:391(simpara) #: xml/gcut-assertions.xml:415(simpara) xml/gcut-assertions.xml:439(simpara) #: xml/gcut-assertions.xml:477(simpara) xml/gcut-assertions.xml:497(simpara) #: xml/gcut-assertions.xml:512(simpara) xml/gcut-assertions.xml:528(simpara) #: xml/gcut-assertions.xml:547(simpara) xml/gcut-assertions.xml:597(simpara) #: xml/gcut-assertions.xml:629(simpara) xml/gcut-assertions.xml:666(simpara) #: xml/gcut-assertions.xml:696(simpara) xml/gcut-assertions.xml:738(simpara) #: xml/gcut-assertions.xml:757(simpara) xml/gcut-assertions.xml:776(simpara) #: xml/gcut-assertions.xml:795(simpara) xml/gcut-assertions.xml:814(simpara) #: xml/gcut-assertions.xml:833(simpara) xml/gcut-assertions.xml:852(simpara) #: xml/gcut-assertions.xml:871(simpara) xml/cut-assertions.xml:345(simpara) #: xml/cut-assertions.xml:360(simpara) xml/cut-assertions.xml:375(simpara) #: xml/cut-assertions.xml:404(simpara) xml/cut-assertions.xml:433(simpara) #: xml/cut-assertions.xml:448(simpara) xml/cut-assertions.xml:463(simpara) #: xml/cut-assertions.xml:478(simpara) xml/cut-assertions.xml:497(simpara) #: xml/cut-assertions.xml:516(simpara) xml/cut-assertions.xml:537(simpara) #: xml/cut-assertions.xml:558(simpara) xml/cut-assertions.xml:579(simpara) #: xml/cut-assertions.xml:600(simpara) xml/cut-assertions.xml:621(simpara) #: xml/cut-assertions.xml:642(simpara) xml/cut-assertions.xml:663(simpara) #: xml/cut-assertions.xml:684(simpara) xml/cut-assertions.xml:705(simpara) #: xml/cut-assertions.xml:726(simpara) xml/cut-assertions.xml:747(simpara) #: xml/cut-assertions.xml:768(simpara) xml/cut-assertions.xml:789(simpara) #: xml/cut-assertions.xml:810(simpara) xml/cut-assertions.xml:831(simpara) #: xml/cut-assertions.xml:852(simpara) xml/cut-assertions.xml:873(simpara) #: xml/cut-assertions.xml:894(simpara) xml/cut-assertions.xml:915(simpara) #: xml/cut-assertions.xml:936(simpara) xml/cut-assertions.xml:955(simpara) #: xml/cut-assertions.xml:974(simpara) xml/cut-assertions.xml:995(simpara) #: xml/cut-assertions.xml:1016(simpara) xml/cut-assertions.xml:1037(simpara) #: xml/cut-assertions.xml:1058(simpara) xml/cut-assertions.xml:1079(simpara) #: xml/cut-assertions.xml:1100(simpara) xml/cut-assertions.xml:1121(simpara) #: xml/cut-assertions.xml:1142(simpara) xml/cut-assertions.xml:1163(simpara) #: xml/cut-assertions.xml:1184(simpara) xml/cut-assertions.xml:1205(simpara) #: xml/cut-assertions.xml:1226(simpara) xml/cut-assertions.xml:1247(simpara) #: xml/cut-assertions.xml:1268(simpara) xml/cut-assertions.xml:1289(simpara) #: xml/cut-assertions.xml:1310(simpara) xml/cut-assertions.xml:1331(simpara) #: xml/cut-assertions.xml:1352(simpara) xml/cut-assertions.xml:1373(simpara) #: xml/cut-assertions.xml:1394(simpara) xml/cut-assertions.xml:1413(simpara) #: xml/cut-assertions.xml:1432(simpara) xml/cut-assertions.xml:1455(simpara) #: xml/cut-assertions.xml:1478(simpara) xml/cut-assertions.xml:1502(simpara) #: xml/cut-assertions.xml:1526(simpara) xml/cut-assertions.xml:1556(simpara) #: xml/cut-assertions.xml:1586(simpara) xml/cut-assertions.xml:1609(simpara) #: xml/cut-assertions.xml:1627(simpara) xml/cut-assertions.xml:1663(simpara) #: xml/cut-assertions.xml:1698(simpara) xml/cut-assertions.xml:1726(simpara) #: xml/cut-assertions.xml:1754(simpara) xml/cut-assertions.xml:1774(simpara) #: xml/cut-assertions.xml:1795(simpara) xml/cut-assertions.xml:1821(simpara) #: xml/cut-assertions.xml:1847(simpara) xml/cut-assertions.xml:1873(simpara) #: xml/cut-assertions.xml:1899(simpara) xml/cut-assertions.xml:1925(simpara) #: xml/cut-assertions.xml:1951(simpara) xml/cut-assertions.xml:1969(simpara) #: xml/cut-assertions.xml:1992(simpara) xml/cut-assertions.xml:2015(simpara) #: xml/cut-assertions.xml:2037(simpara) xml/cut-assertions.xml:2060(simpara) #: xml/cut-assertions.xml:2082(simpara) xml/cut-assertions.xml:2108(simpara) #: xml/cut-assertions.xml:2128(simpara) xml/cut-assertions.xml:2147(simpara) #: xml/cut-assertions.xml:2187(simpara) xml/cut-assertions.xml:2204(simpara) #: xml/cut-assertions.xml:2221(simpara) xml/cut-assertions.xml:2256(simpara) msgid "" "optional message. See cut_message() for details." msgstr "" "追加メッセージ(省略可能)。詳細はcut_message()を見てください。" #: xml/soupcut-assertions.xml:68(title) msgid "soupcut_client_assert_equal_content_type ()" msgstr "" #: xml/soupcut-assertions.xml:70(programlisting) #, no-wrap msgid "" "void soupcut_client_assert_equal_content_type\n" " (const gchar *expected,\n" " SoupCutClient *client,\n" " ...);" msgstr "" #: xml/soupcut-assertions.xml:74(para) msgid "" "Passes if expected equals to Content-Type of the " "latest message of client." msgstr "" "expectedclientの最後のメッ" "セージのContent-Typeと等しいとパスします。" #: xml/soupcut-assertions.xml:89(title) msgid "soupcut_client_assert_response ()" msgstr "" #: xml/soupcut-assertions.xml:91(programlisting) #, no-wrap msgid "" "void soupcut_client_assert_response (SoupCutClient *client,\n" " ...);" msgstr "" #: xml/soupcut-assertions.xml:93(para) msgid "Passes if status code of client is 2XX." msgstr "clientのステータスコードが2XXならパスします。" #: xml/soupcut-assertions.xml:104(title) msgid "soupcut_client_assert_equal_body ()" msgstr "" #: xml/soupcut-assertions.xml:106(programlisting) #, no-wrap msgid "" "void soupcut_client_assert_equal_body (const gchar *expected,\n" " SoupCutClient *client,\n" " ...);" msgstr "" #: xml/soupcut-assertions.xml:109(para) msgid "" "Passes if expected == client->" "response_body->data." msgstr "" "expected == message->response_body->" "dataが成り立つときパスします。" #: xml/soupcut-assertions.xml:113(simpara) msgid "an expected response body." msgstr "期待するレスポンスの本体。" #: xml/soupcut-assertions.xml:123(title) msgid "soupcut_client_assert_match_body ()" msgstr "" #: xml/soupcut-assertions.xml:125(programlisting) #, no-wrap msgid "" "void soupcut_client_assert_match_body (const gchar *pattern,\n" " SoupCutClient *client,\n" " ...);" msgstr "" #: xml/soupcut-assertions.xml:128(para) msgid "" "Passes if pattern matches the response body of the " "latest message of client." msgstr "" "patternclientの最後のメッセー" "ジのレスポンスの本体にマッチしたときにパスします。" #: xml/soupcut-assertions.xml:132(term) #: xml/soupcut-assertions-helper.xml:148(term) #: xml/cut-test-utils.xml:243(term) xml/cut-assertions.xml:2101(term) #: xml/cut-assertions.xml:2121(term) msgid "pattern :" msgstr "" #: xml/soupcut-assertions.xml:133(simpara) #: xml/cut-assertions.xml:2102(simpara) msgid "the regular expression pattern." msgstr "正規表現。" #: xml/soupcut-assertions-helper.xml:7(refentrytitle) #: xml/soupcut-assertions-helper.xml:14(refname) #: xml/api-index-full.xml:543(link) xml/api-index-full.xml:545(link) #: xml/api-index-full.xml:547(link) xml/api-index-full.xml:549(link) #: xml/api-index-full.xml:558(link) msgid "soupcut-assertions-helper" msgstr "" #: xml/soupcut-assertions-helper.xml:21(link) #: xml/soupcut-assertions-helper.xml:56(primary) #: xml/api-index-full.xml:558(link) msgid "soupcut_message_assert_equal_content_type_helper" msgstr "" #: xml/soupcut-assertions-helper.xml:24(parameter) #: xml/soupcut-assertions-helper.xml:29(parameter) #: xml/soupcut-assertions-helper.xml:37(parameter) #: xml/gdkcut-pixbuf-assertions-helper.xml:24(parameter) #: xml/gcut-assertions-helper.xml:23(parameter) #: xml/gcut-assertions-helper.xml:27(parameter) #: xml/gcut-assertions-helper.xml:34(parameter) #: xml/gcut-assertions-helper.xml:39(parameter) #: xml/gcut-assertions-helper.xml:43(parameter) #: xml/gcut-assertions-helper.xml:48(parameter) #: xml/gcut-assertions-helper.xml:54(parameter) #: xml/gcut-assertions-helper.xml:60(parameter) #: xml/gcut-assertions-helper.xml:66(parameter) #: xml/gcut-assertions-helper.xml:74(parameter) #: xml/gcut-assertions-helper.xml:80(parameter) #: xml/gcut-assertions-helper.xml:86(parameter) #: xml/gcut-assertions-helper.xml:92(parameter) #: xml/gcut-assertions-helper.xml:98(parameter) #: xml/gcut-assertions-helper.xml:104(parameter) #: xml/gcut-assertions-helper.xml:109(parameter) #: xml/gcut-assertions-helper.xml:138(parameter) msgid "" "const *expression_expected" msgstr "" #: xml/soupcut-assertions-helper.xml:25(parameter) msgid "" "const *expression_message" msgstr "" #: xml/soupcut-assertions-helper.xml:26(link) #: xml/soupcut-assertions-helper.xml:79(primary) #: xml/api-index-full.xml:545(link) msgid "soupcut_client_assert_equal_content_type_helper" msgstr "" #: xml/soupcut-assertions-helper.xml:30(parameter) #: xml/soupcut-assertions-helper.xml:33(parameter) #: xml/soupcut-assertions-helper.xml:38(parameter) #: xml/soupcut-assertions-helper.xml:43(parameter) msgid "" "const *expression_client" msgstr "" #: xml/soupcut-assertions-helper.xml:31(link) #: xml/soupcut-assertions-helper.xml:102(primary) #: xml/api-index-full.xml:549(link) msgid "soupcut_client_assert_response_helper" msgstr "" #: xml/soupcut-assertions-helper.xml:34(link) #: xml/soupcut-assertions-helper.xml:117(primary) #: xml/api-index-full.xml:543(link) msgid "soupcut_client_assert_equal_body_helper" msgstr "" #: xml/soupcut-assertions-helper.xml:39(link) #: xml/soupcut-assertions-helper.xml:140(primary) #: xml/api-index-full.xml:547(link) msgid "soupcut_client_assert_match_body_helper" msgstr "" #: xml/soupcut-assertions-helper.xml:42(parameter) msgid "" "const *expression_pattern" msgstr "" #: xml/soupcut-assertions-helper.xml:21(synopsis) #, no-wrap msgid "" " \n" " (,\n" " ,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " ,\n" " );\n" " \n" " (,\n" " );\n" " \n" " (,\n" " ,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " ,\n" " );\n" msgstr "" #: xml/soupcut-assertions-helper.xml:55(title) msgid "soupcut_message_assert_equal_content_type_helper ()" msgstr "" #: xml/soupcut-assertions-helper.xml:57(programlisting) #, no-wrap msgid "" "void soupcut_message_assert_equal_content_type_helper\n" " (const gchar *expected,\n" " SoupMessage *message,\n" " const gchar *expression_expected,\n" " const gchar *expression_message);" msgstr "" #: xml/soupcut-assertions-helper.xml:70(term) #: xml/soupcut-assertions-helper.xml:93(term) #: xml/soupcut-assertions-helper.xml:131(term) #: xml/gdkcut-pixbuf-assertions-helper.xml:57(term) #: xml/gcut-assertions-helper.xml:165(term) #: xml/gcut-assertions-helper.xml:187(term) #: xml/gcut-assertions-helper.xml:222(term) #: xml/gcut-assertions-helper.xml:247(term) #: xml/gcut-assertions-helper.xml:269(term) #: xml/gcut-assertions-helper.xml:292(term) #: xml/gcut-assertions-helper.xml:322(term) #: xml/gcut-assertions-helper.xml:352(term) #: xml/gcut-assertions-helper.xml:379(term) #: xml/gcut-assertions-helper.xml:418(term) #: xml/gcut-assertions-helper.xml:444(term) #: xml/gcut-assertions-helper.xml:480(term) #: xml/gcut-assertions-helper.xml:516(term) #: xml/gcut-assertions-helper.xml:546(term) #: xml/gcut-assertions-helper.xml:576(term) #: xml/gcut-assertions-helper.xml:603(term) #: xml/gcut-assertions-helper.xml:628(term) #: xml/gcut-assertions-helper.xml:650(term) #: xml/gcut-assertions-helper.xml:672(term) #: xml/gcut-assertions-helper.xml:694(term) #: xml/gcut-assertions-helper.xml:716(term) #: xml/gcut-assertions-helper.xml:738(term) #: xml/gcut-assertions-helper.xml:760(term) msgid "expression_expected :" msgstr "" #: xml/soupcut-assertions-helper.xml:73(term) msgid "expression_message :" msgstr "" #: xml/soupcut-assertions-helper.xml:78(title) msgid "soupcut_client_assert_equal_content_type_helper ()" msgstr "" #: xml/soupcut-assertions-helper.xml:80(programlisting) #, no-wrap msgid "" "void soupcut_client_assert_equal_content_type_helper\n" " (const gchar *expected,\n" " SoupCutClient *client,\n" " const gchar *expression_expected,\n" " const gchar *expression_client);" msgstr "" #: xml/soupcut-assertions-helper.xml:96(term) #: xml/soupcut-assertions-helper.xml:111(term) #: xml/soupcut-assertions-helper.xml:134(term) #: xml/soupcut-assertions-helper.xml:157(term) msgid "expression_client :" msgstr "" #: xml/soupcut-assertions-helper.xml:101(title) msgid "soupcut_client_assert_response_helper ()" msgstr "" #: xml/soupcut-assertions-helper.xml:103(programlisting) #, no-wrap msgid "" "void soupcut_client_assert_response_helper\n" " (SoupCutClient *client,\n" " const gchar *expression_client);" msgstr "" #: xml/soupcut-assertions-helper.xml:116(title) msgid "soupcut_client_assert_equal_body_helper ()" msgstr "" #: xml/soupcut-assertions-helper.xml:118(programlisting) #, no-wrap msgid "" "void soupcut_client_assert_equal_body_helper\n" " (const gchar *expected,\n" " SoupCutClient *client,\n" " const gchar *expression_expected,\n" " const gchar *expression_client);" msgstr "" #: xml/soupcut-assertions-helper.xml:139(title) msgid "soupcut_client_assert_match_body_helper ()" msgstr "" #: xml/soupcut-assertions-helper.xml:141(programlisting) #, no-wrap msgid "" "void soupcut_client_assert_match_body_helper\n" " (const gchar *pattern,\n" " SoupCutClient *client,\n" " const gchar *expression_pattern,\n" " const gchar *expression_client);" msgstr "" #: xml/soupcut-assertions-helper.xml:154(term) msgid "expression_pattern :" msgstr "" #: xml/gdkcutter-pixbuf.xml:7(refentrytitle) #: xml/gdkcutter-pixbuf.xml:14(refname) xml/api-index-full.xml:414(link) #: xml/api-index-1.0.6.xml:71(link) msgid "GdkCutter Pixbuf" msgstr "" #: xml/gdkcutter-pixbuf.xml:15(refpurpose) msgid "Cutter with gdk-pixbuf support." msgstr "gdk-pixbufサポート付きのCutter。" #: xml/gdkcutter-pixbuf.xml:21(link) xml/gdkcutter-pixbuf.xml:66(title) #: xml/gdkcutter-pixbuf.xml:67(primary) xml/api-index-full.xml:414(link) #: xml/api-index-1.0.6.xml:71(link) msgid "GDKCUTTER_PIXBUF_ENABLED" msgstr "" #: xml/gdkcutter-pixbuf.xml:27(para) msgid "" "GdkCutter Pixbuf adds many useful features based on gdk-pixbuf to Cutter. If " "you want to write tests for image, it's good idea that you consider " "GdkCutter Pixbuf to be used too." msgstr "" "GdkCutter Pixbufはgdk-pixbufベースのたくさんの便利な機能をCutterに追加しま" "す。画像のテストを書きたい場合はGdkCutter Pixbufの使用を検討してください。" #: xml/gdkcutter-pixbuf.xml:33(para) msgid "" "It's easy to use GdkCutter Pixbuf. You just include <gdk-cutter-pixbuf." "h> instead of <cutter.h> or <gcutter.h> and use gdkcutter-" "pixbuf.pc instead of cutter.pc or gcutter.pc:" msgstr "" "GdkCutter Pixbufを使うことは簡単です。<cutter.h>または<gcutter.h>" "の代わりに<gdk-cutter-pixbuf.h>をincludeし、cutter.pcまたはgcutter.pcの" "代わりにgdkcutter-pixbuf.pcを使うだけです。" #: xml/gdkcutter-pixbuf.xml:41(programlisting) #, no-wrap msgid "" "\n" "-#include <cutter.h>\n" "+#include <gdkcutter-pixbuf.h>\n" msgstr "" #: xml/gdkcutter-pixbuf.xml:48(programlisting) #, no-wrap msgid "" "\n" "-AC_CHECK_CUTTER\n" "+AC_CHECK_GDKCUTTER_PIXBUF\n" msgstr "" #: xml/gdkcutter-pixbuf.xml:55(programlisting) #, no-wrap msgid "" "\n" "-XXX_CFLAGS = $(CUTTER_CFLAGS)\n" "-XXX_LIBS = $(CUTTER_LIBS)\n" "+XXX_CFLAGS = $(GDKCUTTER_PIXBUF_CFLAGS)\n" "+XXX_LIBS = $(GDKCUTTER_PIXBUF_LIBS)\n" msgstr "" #: xml/gdkcutter-pixbuf.xml:68(programlisting) #, no-wrap msgid "#define GDKCUTTER_PIXBUF_ENABLED 1\n" msgstr "" #: xml/gdkcutter-pixbuf.xml:70(para) msgid "Defined when GdkCutter Pixbuf is enabled." msgstr "GdkCutter Pixbufが有効なとき定義されます。" #: xml/gdkcutter-pixbuf.xml:72(para) xml/gcutter.xml:70(para) #: xml/gcut-types.xml:60(para) xml/gcut-test-utils.xml:301(para) #: xml/gcut-test-utils.xml:411(para) xml/gcut-list.xml:151(para) #: xml/gcut-list.xml:166(para) xml/gcut-list.xml:186(para) #: xml/gcut-list.xml:201(para) xml/gcut-list.xml:221(para) #: xml/gcut-list.xml:236(para) xml/gcut-list.xml:251(para) #: xml/gcut-list.xml:271(para) xml/gcut-list.xml:291(para) #: xml/gcut-inspect.xml:101(para) xml/gcut-inspect.xml:127(para) #: xml/gcut-inspect.xml:153(para) xml/gcut-inspect.xml:283(para) #: xml/gcut-inspect.xml:308(para) xml/gcut-inspect.xml:339(para) #: xml/gcut-inspect.xml:370(para) xml/gcut-inspect.xml:396(para) #: xml/gcut-enum.xml:61(para) xml/gcut-enum.xml:93(para) #: xml/gcut-enum.xml:137(para) xml/gcut-enum.xml:182(para) #: xml/gcut-enum.xml:202(para) xml/gcut-egg.xml:247(para) #: xml/gcut-egg.xml:276(para) xml/gcut-egg.xml:295(para) #: xml/gcut-egg.xml:315(para) xml/gcut-egg.xml:331(para) #: xml/gcut-egg.xml:347(para) xml/gcut-egg.xml:363(para) #: xml/gcut-egg.xml:378(para) xml/gcut-egg.xml:399(para) #: xml/gcut-egg.xml:417(para) xml/gcut-egg.xml:436(para) #: xml/gcut-egg.xml:449(para) xml/gcut-egg.xml:476(para) #: xml/gcut-egg.xml:493(para) xml/gcut-egg.xml:522(para) #: xml/gcut-egg.xml:538(para) xml/gcut-egg.xml:555(para) #: xml/gcut-egg.xml:572(para) xml/gcut-egg.xml:589(para) #: xml/gcut-egg.xml:607(para) xml/gcut-egg.xml:626(para) #: xml/gcut-egg.xml:655(para) xml/gcut-egg.xml:684(para) #: xml/gcut-egg.xml:712(para) xml/gcut-egg.xml:733(para) #: xml/gcut-data.xml:318(para) xml/gcut-data.xml:370(para) #: xml/gcut-data.xml:388(para) xml/gcut-data.xml:407(para) #: xml/gcut-data.xml:478(para) xml/gcut-data.xml:497(para) #: xml/gcut-data.xml:516(para) xml/gcut-data.xml:535(para) #: xml/gcut-assertions.xml:251(para) xml/gcut-assertions.xml:479(para) #: xml/gcut-assertions.xml:835(para) xml/cutter.xml:168(para) #: xml/cutter.xml:189(para) xml/cutter.xml:198(para) xml/cutter.xml:207(para) #: xml/cutter.xml:417(para) xml/cutter.xml:433(para) xml/cutter.xml:442(para) #: xml/cut-test-utils.xml:252(para) xml/cut-helper.xml:251(para) #: xml/cut-helper.xml:267(para) xml/cut-helper.xml:278(para) #: xml/cut-assertions.xml:1415(para) xml/cut-assertions.xml:2371(para) msgid "Since 1.0.6" msgstr "1.0.6から" #: xml/gdkcutter-pixbuf.xml:78(link) #: xml/gdkcut-pixbuf-assertions.xml:7(refentrytitle) #: xml/gdkcut-pixbuf-assertions.xml:14(refname) #: xml/api-index-full.xml:415(link) xml/api-index-1.0.5.xml:47(link) msgid "Assertions with gdk-pixbuf support" msgstr "gdk-pixbufサポート付きの検証" #: xml/gdkcut-pixbuf.xml:7(refentrytitle) xml/gdkcut-pixbuf.xml:14(refname) #: xml/api-index-full.xml:417(link) xml/api-index-full.xml:418(link) #: xml/api-index-full.xml:419(link) xml/api-index-full.xml:420(link) msgid "gdkcut-pixbuf" msgstr "" #: xml/gdkcut-pixbuf.xml:21(link) xml/gdkcut-pixbuf.xml:46(primary) #: xml/api-index-full.xml:419(link) msgid "gdkcut_pixbuf_equal_property" msgstr "" #: xml/gdkcut-pixbuf.xml:21(type) xml/gdkcut-pixbuf.xml:22(type) #: xml/gdkcut-pixbuf.xml:23(type) xml/gdkcut-pixbuf.xml:24(type) #: xml/gdkcut-pixbuf.xml:26(returnvalue) xml/gdkcut-pixbuf.xml:26(type) #: xml/gdkcut-pixbuf.xml:27(type) xml/gdkcut-pixbuf.xml:29(type) #: xml/gdkcut-pixbuf.xml:30(type) xml/gdkcut-pixbuf-assertions.xml:22(type) #: xml/gdkcut-pixbuf-assertions.xml:23(type) #: xml/gdkcut-pixbuf-assertions-helper.xml:21(type) #: xml/gdkcut-pixbuf-assertions-helper.xml:22(type) msgid "GdkPixbuf" msgstr "" #: xml/gdkcut-pixbuf.xml:21(parameter) xml/gdkcut-pixbuf.xml:23(parameter) #: xml/gdkcut-pixbuf.xml:26(parameter) xml/gdkcut-pixbuf.xml:29(parameter) msgid "const *pixbuf1" msgstr "" #: xml/gdkcut-pixbuf.xml:22(parameter) xml/gdkcut-pixbuf.xml:24(parameter) #: xml/gdkcut-pixbuf.xml:27(parameter) xml/gdkcut-pixbuf.xml:30(parameter) msgid "const *pixbuf2" msgstr "" #: xml/gdkcut-pixbuf.xml:23(link) xml/gdkcut-pixbuf.xml:62(primary) #: xml/api-index-full.xml:418(link) msgid "gdkcut_pixbuf_equal_content" msgstr "" #: xml/gdkcut-pixbuf.xml:25(parameter) xml/gdkcut-pixbuf.xml:28(parameter) #: xml/gdkcut-pixbuf.xml:31(parameter) #: xml/gdkcut-pixbuf-assertions.xml:24(parameter) #: xml/gdkcut-pixbuf-assertions-helper.xml:23(parameter) msgid " threshold" msgstr "" #: xml/gdkcut-pixbuf.xml:26(link) xml/gdkcut-pixbuf.xml:82(primary) #: xml/api-index-full.xml:417(link) msgid "gdkcut_pixbuf_diff" msgstr "" #: xml/gdkcut-pixbuf.xml:29(link) xml/gdkcut-pixbuf.xml:102(primary) #: xml/api-index-full.xml:420(link) msgid "gdkcut_pixbuf_save_diff" msgstr "" #: xml/gdkcut-pixbuf.xml:32(parameter) msgid "const *prefix" msgstr "" #: xml/gdkcut-pixbuf.xml:33(type) xml/gcut-test-utils.xml:23(returnvalue) #: xml/gcut-test-utils.xml:23(type) xml/gcut-public.xml:23(returnvalue) #: xml/gcut-public.xml:24(type) xml/gcut-process.xml:44(type) #: xml/gcut-process.xml:48(type) xml/gcut-process.xml:51(type) #: xml/gcut-process.xml:55(type) xml/gcut-process.xml:57(type) #: xml/gcut-key-file.xml:25(type) xml/gcut-key-file.xml:30(type) #: xml/gcut-error.xml:16(type) xml/gcut-error.xml:22(type) #: xml/gcut-error.xml:23(type) xml/gcut-error.xml:24(type) #: xml/gcut-enum.xml:29(type) xml/gcut-enum.xml:34(type) #: xml/gcut-enum.xml:36(type) xml/gcut-egg.xml:43(type) #: xml/gcut-egg.xml:48(type) xml/gcut-egg.xml:52(type) #: xml/gcut-assertions.xml:82(type) xml/gcut-assertions.xml:84(type) #: xml/gcut-assertions.xml:86(type) xml/gcut-assertions.xml:87(type) #: xml/gcut-assertions-helper.xml:82(type) #: xml/gcut-assertions-helper.xml:84(type) #: xml/gcut-assertions-helper.xml:85(type) xml/cut-console.xml:39(type) msgid "GError" msgstr "" #: xml/gdkcut-pixbuf.xml:33(parameter) xml/gcut-process.xml:44(parameter) #: xml/gcut-process.xml:48(parameter) xml/gcut-process.xml:51(parameter) #: xml/gcut-process.xml:55(parameter) xml/gcut-process.xml:57(parameter) #: xml/gcut-key-file.xml:25(parameter) xml/gcut-key-file.xml:30(parameter) #: xml/gcut-enum.xml:29(parameter) xml/gcut-enum.xml:34(parameter) #: xml/gcut-enum.xml:36(parameter) xml/gcut-egg.xml:43(parameter) #: xml/gcut-egg.xml:48(parameter) xml/gcut-egg.xml:52(parameter) #: xml/cut-console.xml:39(parameter) msgid " **error" msgstr "" #: xml/gdkcut-pixbuf.xml:21(synopsis) #, no-wrap msgid "" " (,\n" " );\n" " (,\n" " ,\n" " );\n" " * (,\n" " ,\n" " );\n" " * (,\n" " ,\n" " ,\n" " ,\n" " );\n" msgstr "" #: xml/gdkcut-pixbuf.xml:45(title) msgid "gdkcut_pixbuf_equal_property ()" msgstr "" #: xml/gdkcut-pixbuf.xml:47(programlisting) #, no-wrap msgid "" "gboolean gdkcut_pixbuf_equal_property (const GdkPixbuf *pixbuf1,\n" " const GdkPixbuf *pixbuf2);" msgstr "" #: xml/gdkcut-pixbuf.xml:51(term) xml/gdkcut-pixbuf.xml:68(term) #: xml/gdkcut-pixbuf.xml:88(term) xml/gdkcut-pixbuf.xml:110(term) msgid "pixbuf1 :" msgstr "" #: xml/gdkcut-pixbuf.xml:54(term) xml/gdkcut-pixbuf.xml:71(term) #: xml/gdkcut-pixbuf.xml:91(term) xml/gdkcut-pixbuf.xml:113(term) msgid "pixbuf2 :" msgstr "" #: xml/gdkcut-pixbuf.xml:61(title) msgid "gdkcut_pixbuf_equal_content ()" msgstr "" #: xml/gdkcut-pixbuf.xml:63(programlisting) #, no-wrap msgid "" "gboolean gdkcut_pixbuf_equal_content (const GdkPixbuf *pixbuf1,\n" " const GdkPixbuf *pixbuf2,\n" " guint threshold);" msgstr "" #: xml/gdkcut-pixbuf.xml:74(term) xml/gdkcut-pixbuf.xml:94(term) #: xml/gdkcut-pixbuf.xml:116(term) xml/gdkcut-pixbuf-assertions.xml:61(term) #: xml/gdkcut-pixbuf-assertions-helper.xml:54(term) msgid "threshold :" msgstr "" #: xml/gdkcut-pixbuf.xml:81(title) msgid "gdkcut_pixbuf_diff ()" msgstr "" #: xml/gdkcut-pixbuf.xml:83(programlisting) #, no-wrap msgid "" "GdkPixbuf * gdkcut_pixbuf_diff (const GdkPixbuf *pixbuf1,\n" " const GdkPixbuf *pixbuf2,\n" " guint threshold);" msgstr "" #: xml/gdkcut-pixbuf.xml:101(title) msgid "gdkcut_pixbuf_save_diff ()" msgstr "" #: xml/gdkcut-pixbuf.xml:103(programlisting) #, no-wrap msgid "" "gchar * gdkcut_pixbuf_save_diff (const GdkPixbuf *pixbuf1,\n" " const GdkPixbuf *pixbuf2,\n" " guint threshold,\n" " const gchar *prefix,\n" " GError **error);" msgstr "" #: xml/gdkcut-pixbuf.xml:119(term) msgid "prefix :" msgstr "" #: xml/gdkcut-pixbuf.xml:122(term) xml/gcut-test-utils.xml:104(term) #: xml/gcut-public.xml:76(term) xml/gcut-process.xml:451(term) #: xml/gcut-process.xml:494(term) xml/gcut-process.xml:517(term) #: xml/gcut-process.xml:543(term) xml/gcut-process.xml:561(term) #: xml/gcut-process.xml:764(term) xml/gcut-key-file.xml:63(term) #: xml/gcut-key-file.xml:91(term) xml/gcut-error.xml:68(term) #: xml/gcut-enum.xml:131(term) xml/gcut-enum.xml:176(term) #: xml/gcut-enum.xml:195(term) xml/gcut-egg.xml:430(term) #: xml/gcut-egg.xml:470(term) xml/gcut-egg.xml:515(term) #: xml/gcut-egg.xml:650(term) xml/gcut-assertions.xml:508(term) #: xml/gcut-assertions.xml:524(term) xml/gcut-assertions-helper.xml:458(term) #: xml/cut-helper.xml:520(term) xml/cut-console.xml:175(term) #: xml/cut-assertions.xml:1448(term) xml/cut-assertions.xml:1471(term) msgid "error :" msgstr "" #: xml/gdkcut-pixbuf-assertions.xml:15(refpurpose) msgid "Checks that your program works as you expect with gdk-pixbuf support." msgstr "" "gdk-pixbufサポート付きであなたのプログラムが期待通りに動作しているかを検証し" "ます。" #: xml/gdkcut-pixbuf-assertions.xml:22(link) #: xml/gdkcut-pixbuf-assertions.xml:37(primary) #: xml/api-index-full.xml:415(link) xml/api-index-1.0.5.xml:47(link) msgid "gdkcut_pixbuf_assert_equal" msgstr "" #: xml/gdkcut-pixbuf-assertions.xml:22(parameter) #: xml/gdkcut-pixbuf-assertions-helper.xml:21(parameter) msgid "const *expected" msgstr "" #: xml/gdkcut-pixbuf-assertions.xml:23(parameter) #: xml/gdkcut-pixbuf-assertions-helper.xml:22(parameter) msgid "const *actual" msgstr "" #: xml/gdkcut-pixbuf-assertions.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " ,\n" " );\n" msgstr "" #: xml/gdkcut-pixbuf-assertions.xml:36(title) msgid "gdkcut_pixbuf_assert_equal ()" msgstr "" #: xml/gdkcut-pixbuf-assertions.xml:38(programlisting) #, no-wrap msgid "" "void gdkcut_pixbuf_assert_equal (const GdkPixbuf *expected,\n" " const GdkPixbuf *actual,\n" " guint threshold,\n" " ...);" msgstr "" #: xml/gdkcut-pixbuf-assertions.xml:42(para) msgid "" "Passes if expected == actual. " "If difference of each corresponding pixel value is within threshold, " "expected and actual are " "treated as equal image." msgstr "" "expected == actualが成り立つと" "きパスします。もし、対応するピクセル値のそれぞれの違いがしきい値以内の場合は" "expectedactualは同じ画像とし" "て扱います。" #: xml/gdkcut-pixbuf-assertions.xml:47(para) msgid "" "If threshold is 3, pixel value of expected at (1, 1) " "is 127 and pixel value of actual at (1, 1) is 131, " "actual doesn't equals to expected. If pixel value of actual at (1, 1) is " "130, actual may equal to expected. (All other corresponding pixel values are needed to fill this " "condition.)" msgstr "" "もし、しきい値が3、expectedの(1, 1)のピクセル値が127、" "actualの(1, 1)のピクセル値が131とすると、" "actualexpectedは等しくありま" "せん。もし、actualの(1, 1)のピクセル値が130なら" "actualexpectedは等しいかもし" "れません。(等しくなるためには、他のすべての対応するピクセル値がこの条件を満" "たしている必要があります。)" #: xml/gdkcut-pixbuf-assertions.xml:56(simpara) msgid "an expected GdkPixbuf." msgstr "期待するGdkPixbuf。" #: xml/gdkcut-pixbuf-assertions.xml:58(term) #: xml/gdkcut-pixbuf-assertions-helper.xml:51(term) #: xml/gcut-assertions.xml:153(term) xml/gcut-assertions.xml:173(term) #: xml/gcut-assertions.xml:192(term) xml/gcut-assertions.xml:212(term) #: xml/gcut-assertions.xml:234(term) xml/gcut-assertions.xml:264(term) #: xml/gcut-assertions.xml:284(term) xml/gcut-assertions.xml:303(term) #: xml/gcut-assertions.xml:322(term) xml/gcut-assertions.xml:342(term) #: xml/gcut-assertions.xml:362(term) xml/gcut-assertions.xml:384(term) #: xml/gcut-assertions.xml:411(term) xml/gcut-assertions.xml:435(term) #: xml/gcut-assertions.xml:458(term) xml/gcut-assertions.xml:493(term) #: xml/gcut-assertions.xml:543(term) xml/gcut-assertions.xml:593(term) #: xml/gcut-assertions.xml:625(term) xml/gcut-assertions.xml:662(term) #: xml/gcut-assertions.xml:692(term) xml/gcut-assertions.xml:731(term) #: xml/gcut-assertions.xml:753(term) xml/gcut-assertions.xml:772(term) #: xml/gcut-assertions.xml:791(term) xml/gcut-assertions.xml:810(term) #: xml/gcut-assertions.xml:829(term) xml/gcut-assertions.xml:848(term) #: xml/gcut-assertions.xml:867(term) xml/gcut-assertions-helper.xml:162(term) #: xml/gcut-assertions-helper.xml:184(term) #: xml/gcut-assertions-helper.xml:210(term) #: xml/gcut-assertions-helper.xml:244(term) #: xml/gcut-assertions-helper.xml:266(term) #: xml/gcut-assertions-helper.xml:289(term) #: xml/gcut-assertions-helper.xml:316(term) #: xml/gcut-assertions-helper.xml:346(term) #: xml/gcut-assertions-helper.xml:373(term) #: xml/gcut-assertions-helper.xml:403(term) #: xml/gcut-assertions-helper.xml:441(term) #: xml/gcut-assertions-helper.xml:477(term) #: xml/gcut-assertions-helper.xml:513(term) #: xml/gcut-assertions-helper.xml:540(term) #: xml/gcut-assertions-helper.xml:570(term) #: xml/gcut-assertions-helper.xml:597(term) #: xml/gcut-assertions-helper.xml:625(term) #: xml/gcut-assertions-helper.xml:647(term) #: xml/gcut-assertions-helper.xml:669(term) #: xml/gcut-assertions-helper.xml:691(term) #: xml/gcut-assertions-helper.xml:713(term) #: xml/gcut-assertions-helper.xml:735(term) #: xml/gcut-assertions-helper.xml:757(term) xml/cut-helper.xml:468(term) #: xml/cut-assertions.xml:400(term) xml/cut-assertions.xml:429(term) #: xml/cut-assertions.xml:493(term) xml/cut-assertions.xml:512(term) #: xml/cut-assertions.xml:533(term) xml/cut-assertions.xml:554(term) #: xml/cut-assertions.xml:575(term) xml/cut-assertions.xml:596(term) #: xml/cut-assertions.xml:617(term) xml/cut-assertions.xml:638(term) #: xml/cut-assertions.xml:659(term) xml/cut-assertions.xml:680(term) #: xml/cut-assertions.xml:701(term) xml/cut-assertions.xml:722(term) #: xml/cut-assertions.xml:743(term) xml/cut-assertions.xml:764(term) #: xml/cut-assertions.xml:785(term) xml/cut-assertions.xml:806(term) #: xml/cut-assertions.xml:827(term) xml/cut-assertions.xml:848(term) #: xml/cut-assertions.xml:869(term) xml/cut-assertions.xml:890(term) #: xml/cut-assertions.xml:911(term) xml/cut-assertions.xml:932(term) #: xml/cut-assertions.xml:951(term) xml/cut-assertions.xml:970(term) #: xml/cut-assertions.xml:991(term) xml/cut-assertions.xml:1012(term) #: xml/cut-assertions.xml:1033(term) xml/cut-assertions.xml:1054(term) #: xml/cut-assertions.xml:1075(term) xml/cut-assertions.xml:1096(term) #: xml/cut-assertions.xml:1117(term) xml/cut-assertions.xml:1138(term) #: xml/cut-assertions.xml:1159(term) xml/cut-assertions.xml:1180(term) #: xml/cut-assertions.xml:1201(term) xml/cut-assertions.xml:1222(term) #: xml/cut-assertions.xml:1243(term) xml/cut-assertions.xml:1264(term) #: xml/cut-assertions.xml:1285(term) xml/cut-assertions.xml:1306(term) #: xml/cut-assertions.xml:1327(term) xml/cut-assertions.xml:1348(term) #: xml/cut-assertions.xml:1369(term) xml/cut-assertions.xml:1390(term) #: xml/cut-assertions.xml:1409(term) xml/cut-assertions.xml:1428(term) #: xml/cut-assertions.xml:1451(term) xml/cut-assertions.xml:1474(term) #: xml/cut-assertions.xml:1498(term) xml/cut-assertions.xml:1522(term) #: xml/cut-assertions.xml:1552(term) xml/cut-assertions.xml:1582(term) #: xml/cut-assertions.xml:1605(term) xml/cut-assertions.xml:1623(term) #: xml/cut-assertions.xml:1656(term) xml/cut-assertions.xml:1691(term) #: xml/cut-assertions.xml:1719(term) xml/cut-assertions.xml:1747(term) #: xml/cut-assertions.xml:1770(term) xml/cut-assertions.xml:1791(term) #: xml/cut-assertions.xml:1947(term) xml/cut-assertions.xml:2104(term) #: xml/cut-assertions.xml:2124(term) xml/cut-assertions.xml:2143(term) #: xml/cut-assertions.xml:2183(term) xml/cut-assertions.xml:2200(term) #: xml/cut-assertions.xml:2217(term) xml/cppcut-assertions.xml:56(term) msgid "actual :" msgstr "" #: xml/gdkcut-pixbuf-assertions.xml:59(simpara) msgid "an actual GdkPixbuf." msgstr "実際のGdkPixbuf。" #: xml/gdkcut-pixbuf-assertions.xml:62(simpara) msgid "an threshold used for detecting pixel difference." msgstr "ピクセルの違いを検出するために使われるしきい値。" #: xml/gdkcut-pixbuf-assertions.xml:67(para) xml/gcut-value-equal.xml:63(para) #: xml/gcut-value-equal.xml:90(para) xml/gcut-test-utils.xml:381(para) #: xml/gcut-test-utils.xml:502(para) xml/gcut-test-utils.xml:526(para) #: xml/gcut-object.xml:70(para) xml/gcut-object.xml:85(para) #: xml/gcut-object.xml:108(para) xml/gcut-list.xml:101(para) #: xml/gcut-list.xml:131(para) xml/gcut-list.xml:311(para) #: xml/gcut-list.xml:327(para) xml/gcut-list.xml:347(para) #: xml/gcut-list.xml:363(para) xml/gcut-list.xml:383(para) #: xml/gcut-list.xml:399(para) xml/gcut-list.xml:415(para) #: xml/gcut-list.xml:435(para) xml/gcut-list.xml:455(para) #: xml/gcut-hash-table.xml:86(para) xml/gcut-hash-table.xml:121(para) #: xml/gcut-hash-table.xml:186(para) xml/gcut-hash-table.xml:203(para) #: xml/gcut-error.xml:59(para) xml/gcut-error.xml:74(para) #: xml/gcut-enum.xml:112(para) xml/gcut-enum.xml:156(para) #: xml/gcut-assertions.xml:368(para) xml/gcut-assertions.xml:393(para) #: xml/gcut-assertions.xml:417(para) xml/gcut-assertions.xml:441(para) #: xml/gcut-assertions.xml:549(para) xml/gcut-assertions.xml:631(para) #: xml/gcut-assertions.xml:668(para) xml/gcut-assertions.xml:698(para) #: xml/gcut-assertions.xml:740(para) xml/gcut-assertions.xml:759(para) #: xml/gcut-assertions.xml:797(para) xml/cut-test-utils.xml:95(para) #: xml/cut-test-utils.xml:110(para) xml/cut-test-utils.xml:139(para) #: xml/cut-test-utils.xml:160(para) xml/cut-test-utils.xml:180(para) #: xml/cut-multi-process.xml:341(para) xml/cut-multi-process.xml:359(para) #: xml/cut-helper.xml:136(para) xml/cut-helper.xml:155(para) #: xml/cut-helper.xml:190(para) xml/cut-helper.xml:345(para) #: xml/cut-helper.xml:407(para) xml/cut-helper.xml:504(para) #: xml/cut-helper.xml:527(para) xml/cut-assertions.xml:1875(para) #: xml/cut-assertions.xml:1901(para) xml/cut-assertions.xml:1927(para) msgid "Since 1.0.5" msgstr "1.0.5から" #: xml/gdkcut-pixbuf-assertions-helper.xml:7(refentrytitle) #: xml/gdkcut-pixbuf-assertions-helper.xml:14(refname) #: xml/api-index-full.xml:416(link) msgid "gdkcut-pixbuf-assertions-helper" msgstr "" #: xml/gdkcut-pixbuf-assertions-helper.xml:21(link) #: xml/gdkcut-pixbuf-assertions-helper.xml:39(primary) #: xml/api-index-full.xml:416(link) msgid "gdkcut_pixbuf_assert_equal_helper" msgstr "" #: xml/gdkcut-pixbuf-assertions-helper.xml:25(parameter) #: xml/gcut-assertions-helper.xml:24(parameter) #: xml/gcut-assertions-helper.xml:28(parameter) #: xml/gcut-assertions-helper.xml:35(parameter) #: xml/gcut-assertions-helper.xml:40(parameter) #: xml/gcut-assertions-helper.xml:44(parameter) #: xml/gcut-assertions-helper.xml:49(parameter) #: xml/gcut-assertions-helper.xml:55(parameter) #: xml/gcut-assertions-helper.xml:61(parameter) #: xml/gcut-assertions-helper.xml:67(parameter) #: xml/gcut-assertions-helper.xml:75(parameter) #: xml/gcut-assertions-helper.xml:81(parameter) #: xml/gcut-assertions-helper.xml:87(parameter) #: xml/gcut-assertions-helper.xml:99(parameter) #: xml/gcut-assertions-helper.xml:105(parameter) #: xml/gcut-assertions-helper.xml:110(parameter) #: xml/gcut-assertions-helper.xml:139(parameter) msgid "" "const *expression_actual" msgstr "" #: xml/gdkcut-pixbuf-assertions-helper.xml:26(parameter) msgid "" "const *expression_threshold" msgstr "" #: xml/gdkcut-pixbuf-assertions-helper.xml:21(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" msgstr "" #: xml/gdkcut-pixbuf-assertions-helper.xml:38(title) msgid "gdkcut_pixbuf_assert_equal_helper ()" msgstr "" #: xml/gdkcut-pixbuf-assertions-helper.xml:40(programlisting) #, no-wrap msgid "" "void gdkcut_pixbuf_assert_equal_helper (const GdkPixbuf *expected,\n" " const GdkPixbuf *actual,\n" " guint threshold,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual,\n" " const gchar *expression_threshold);" msgstr "" #: xml/gdkcut-pixbuf-assertions-helper.xml:60(term) #: xml/gcut-assertions-helper.xml:168(term) #: xml/gcut-assertions-helper.xml:190(term) #: xml/gcut-assertions-helper.xml:225(term) #: xml/gcut-assertions-helper.xml:250(term) #: xml/gcut-assertions-helper.xml:272(term) #: xml/gcut-assertions-helper.xml:295(term) #: xml/gcut-assertions-helper.xml:325(term) #: xml/gcut-assertions-helper.xml:355(term) #: xml/gcut-assertions-helper.xml:382(term) #: xml/gcut-assertions-helper.xml:421(term) #: xml/gcut-assertions-helper.xml:447(term) #: xml/gcut-assertions-helper.xml:483(term) #: xml/gcut-assertions-helper.xml:549(term) #: xml/gcut-assertions-helper.xml:579(term) #: xml/gcut-assertions-helper.xml:606(term) #: xml/gcut-assertions-helper.xml:631(term) #: xml/gcut-assertions-helper.xml:653(term) #: xml/gcut-assertions-helper.xml:675(term) #: xml/gcut-assertions-helper.xml:697(term) #: xml/gcut-assertions-helper.xml:719(term) #: xml/gcut-assertions-helper.xml:741(term) #: xml/gcut-assertions-helper.xml:763(term) msgid "expression_actual :" msgstr "" #: xml/gdkcut-pixbuf-assertions-helper.xml:63(term) msgid "expression_threshold :" msgstr "" #: xml/gcutter.xml:7(refentrytitle) xml/gcutter.xml:14(refname) #: xml/api-index-full.xml:593(link) xml/api-index-1.0.6.xml:98(link) msgid "GCutter" msgstr "" #: xml/gcutter.xml:15(refpurpose) msgid "Cutter with GLib support." msgstr "GLibサポート付きのCutter。" #: xml/gcutter.xml:21(link) xml/gcutter.xml:64(title) #: xml/gcutter.xml:65(primary) xml/api-index-full.xml:593(link) #: xml/api-index-1.0.6.xml:98(link) msgid "GCUTTER_ENABLED" msgstr "" #: xml/gcutter.xml:27(para) msgid "" "GCutter adds many useful features based on GLib to Cutter. If you want to " "write tests with more easily, it's good idea that you consider GCutter to be " "used too." msgstr "" "GCutterはGLibベースのたくさんの便利な機能をCutterに追加します。より簡単にテス" "トを書きたい場合はGCutterの使用を検討してください。" #: xml/gcutter.xml:32(para) msgid "" "It's easy to use GCutter. You just include <gcutter.h> instead of <" "cutter.h> and use gcutter.pc instead of cutter.pc:" msgstr "" "GCutterを使うことは簡単です。<cutter.h>の代わりに<gcutter.h>を" "inlcudeして、cutter.pcの代わりにgcutter.pcを使うだけです。" #: xml/gcutter.xml:39(programlisting) #, no-wrap msgid "" "\n" "-#include <cutter.h>\n" "+#include <gcutter.h>\n" msgstr "" #: xml/gcutter.xml:46(programlisting) #, no-wrap msgid "" "\n" "-AC_CHECK_CUTTER\n" "+AC_CHECK_GCUTTER\n" msgstr "" #: xml/gcutter.xml:53(programlisting) #, no-wrap msgid "" "\n" "-XXX_CFLAGS = $(CUTTER_CFLAGS)\n" "-XXX_LIBS = $(CUTTER_LIBS)\n" "+XXX_CFLAGS = $(GCUTTER_CFLAGS)\n" "+XXX_LIBS = $(GCUTTER_LIBS)\n" msgstr "" #: xml/gcutter.xml:66(programlisting) #, no-wrap msgid "#define GCUTTER_ENABLED 1\n" msgstr "" #: xml/gcutter.xml:68(para) msgid "Defined when GCutter is enabled." msgstr "GCutterが有効なとき定義されます。" #: xml/gcutter.xml:76(link) xml/gcut-assertions.xml:7(refentrytitle) #: xml/gcut-assertions.xml:14(refname) xml/api-index-full.xml:8(link) #: xml/api-index-full.xml:10(link) xml/api-index-full.xml:12(link) #: xml/api-index-full.xml:14(link) xml/api-index-full.xml:16(link) #: xml/api-index-full.xml:18(link) xml/api-index-full.xml:20(link) #: xml/api-index-full.xml:21(link) xml/api-index-full.xml:23(link) #: xml/api-index-full.xml:26(link) xml/api-index-full.xml:28(link) #: xml/api-index-full.xml:29(link) xml/api-index-full.xml:31(link) #: xml/api-index-full.xml:33(link) xml/api-index-full.xml:35(link) #: xml/api-index-full.xml:36(link) xml/api-index-full.xml:38(link) #: xml/api-index-full.xml:40(link) xml/api-index-full.xml:42(link) #: xml/api-index-full.xml:44(link) xml/api-index-full.xml:46(link) #: xml/api-index-full.xml:48(link) xml/api-index-full.xml:50(link) #: xml/api-index-full.xml:52(link) xml/api-index-full.xml:54(link) #: xml/api-index-full.xml:56(link) xml/api-index-full.xml:58(link) #: xml/api-index-full.xml:91(link) xml/api-index-full.xml:92(link) #: xml/api-index-full.xml:93(link) xml/api-index-full.xml:94(link) #: xml/api-index-full.xml:131(link) xml/api-index-full.xml:175(link) #: xml/api-index-deprecated.xml:11(link) xml/api-index-deprecated.xml:12(link) #: xml/api-index-deprecated.xml:13(link) xml/api-index-deprecated.xml:14(link) #: xml/api-index-deprecated.xml:17(link) xml/api-index-deprecated.xml:20(link) #: xml/api-index-1.1.5.xml:7(link) xml/api-index-1.1.4.xml:7(link) #: xml/api-index-1.1.4.xml:8(link) xml/api-index-1.0.xml:8(link) #: xml/api-index-1.0.7.xml:7(link) xml/api-index-1.0.6.xml:8(link) #: xml/api-index-1.0.6.xml:9(link) xml/api-index-1.0.6.xml:10(link) #: xml/api-index-1.0.5.xml:7(link) xml/api-index-1.0.5.xml:8(link) #: xml/api-index-1.0.5.xml:9(link) xml/api-index-1.0.5.xml:10(link) #: xml/api-index-1.0.5.xml:11(link) xml/api-index-1.0.5.xml:12(link) #: xml/api-index-1.0.5.xml:13(link) xml/api-index-1.0.5.xml:14(link) #: xml/api-index-1.0.5.xml:15(link) xml/api-index-1.0.5.xml:16(link) #: xml/api-index-1.0.5.xml:17(link) xml/api-index-1.0.4.xml:7(link) #: xml/api-index-1.0.4.xml:8(link) xml/api-index-1.0.3.xml:7(link) #: xml/api-index-1.0.3.xml:8(link) xml/api-index-1.0.3.xml:9(link) #: xml/api-index-1.0.3.xml:10(link) xml/api-index-1.0.3.xml:11(link) #: xml/api-index-1.0.3.xml:12(link) xml/api-index-1.0.3.xml:13(link) #: xml/api-index-1.0.2.xml:10(link) xml/api-index-0.8.xml:7(link) #: xml/api-index-0.8.xml:8(link) msgid "Assertions with GLib support" msgstr "GLibサポート付きの検証" #: xml/gcut-value-equal.xml:7(refentrytitle) #: xml/gcut-value-equal.xml:14(refname) xml/api-index-full.xml:602(link) #: xml/api-index-full.xml:605(link) xml/api-index-1.0.5.xml:79(link) #: xml/api-index-1.0.5.xml:80(link) msgid "Assertion Utilities for GValue" msgstr "GValue用の検証ユーティリティ" #: xml/gcut-value-equal.xml:16(type) xml/gcut-value-equal.xml:22(type) #: xml/gcut-value-equal.xml:23(type) xml/gcut-assertions.xml:28(type) #: xml/gcut-assertions.xml:29(type) xml/gcut-assertions.xml:31(type) #: xml/gcut-assertions.xml:32(type) xml/gcut-assertions-helper.xml:25(type) #: xml/gcut-assertions-helper.xml:26(type) msgid "GValue" msgstr "" #: xml/gcut-value-equal.xml:15(refpurpose) msgid "" "Utilities to write assertions related to more easily." msgstr "" "に関する検証をもっと簡単に書" "くためのユーティリティ。" #: xml/gcut-value-equal.xml:22(link) xml/gcut-value-equal.xml:45(primary) #: xml/api-index-full.xml:602(link) xml/api-index-1.0.5.xml:79(link) msgid "gcut_value_equal" msgstr "" #: xml/gcut-value-equal.xml:22(parameter) msgid "const *value1" msgstr "" #: xml/gcut-value-equal.xml:23(parameter) msgid "const *value2" msgstr "" #: xml/gcut-value-equal.xml:24(link) xml/gcut-value-equal.xml:66(primary) #: xml/api-index-full.xml:605(link) xml/api-index-1.0.5.xml:80(link) msgid "gcut_value_register_equal_func" msgstr "" #: xml/gcut-value-equal.xml:24(type) xml/gcut-value-equal.xml:25(type) #: xml/gcut-types.xml:26(returnvalue) xml/gcut-types.xml:27(returnvalue) #: xml/gcut-list.xml:38(type) xml/gcut-list.xml:40(type) #: xml/gcut-key-file.xml:24(type) xml/gcut-key-file.xml:29(type) #: xml/gcut-enum.xml:25(type) xml/gcut-enum.xml:27(type) #: xml/gcut-enum.xml:30(type) xml/gcut-enum.xml:32(type) #: xml/gcut-enum.xml:35(type) xml/gcut-data.xml:41(returnvalue) #: xml/gcut-data-helper.xml:42(returnvalue) xml/gcut-assertions.xml:22(type) #: xml/gcut-assertions.xml:23(type) xml/gcut-assertions.xml:25(type) #: xml/gcut-assertions.xml:26(type) xml/gcut-assertions.xml:63(type) #: xml/gcut-assertions.xml:67(type) xml/gcut-assertions.xml:96(type) #: xml/gcut-assertions.xml:100(type) xml/gcut-assertions-helper.xml:21(type) #: xml/gcut-assertions-helper.xml:22(type) #: xml/gcut-assertions-helper.xml:50(type) #: xml/gcut-assertions-helper.xml:56(type) #: xml/gcut-assertions-helper.xml:94(type) #: xml/gcut-assertions-helper.xml:100(type) msgid "GType" msgstr "" #: xml/gcut-value-equal.xml:24(parameter) msgid " type1" msgstr "" #: xml/gcut-value-equal.xml:25(parameter) msgid " type2" msgstr "" #: xml/gcut-value-equal.xml:26(type) xml/gcut-object.xml:24(type) #: xml/gcut-list.xml:24(type) xml/gcut-hash-table.xml:24(type) #: xml/gcut-assertions.xml:36(type) xml/gcut-assertions.xml:61(type) #: xml/gcut-assertions.xml:73(type) xml/gcut-assertions.xml:109(type) #: xml/gcut-assertions-helper.xml:31(type) #: xml/gcut-assertions-helper.xml:65(type) #: xml/gcut-assertions-helper.xml:70(type) #: xml/gcut-assertions-helper.xml:108(type) msgid "GEqualFunc" msgstr "" #: xml/gcut-value-equal.xml:26(parameter) xml/gcut-object.xml:24(parameter) #: xml/gcut-list.xml:24(parameter) xml/gcut-hash-table.xml:24(parameter) msgid " equal_func" msgstr "" #: xml/gcut-value-equal.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " );\n" " (,\n" " ,\n" " );\n" msgstr "" #: xml/gcut-value-equal.xml:32(para) xml/gcut-string.xml:30(para) #: xml/gcut-object.xml:34(para) xml/gcut-list.xml:61(para) #: xml/gcut-hash-table.xml:44(para) xml/gcut-error.xml:30(para) #: xml/gcut-enum.xml:42(para) msgid "" "To write assertions, you need to check equality and show expected and actual " "values." msgstr "" "検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。" #: xml/gcut-value-equal.xml:36(para) msgid "" "The utilities help you to write assertions that are related to GValue." msgstr "" "このユーティリティはGValueに関す" "る検証を作成を補助します。" #: xml/gcut-value-equal.xml:44(title) msgid "gcut_value_equal ()" msgstr "" #: xml/gcut-value-equal.xml:46(programlisting) #, no-wrap msgid "" "gboolean gcut_value_equal (const GValue *value1,\n" " const GValue *value2);" msgstr "" #: xml/gcut-value-equal.xml:48(para) msgid "" "Compares two GValue, " "value1 and value2 by " "registered equal function. (See gcut_value_register_equal_func() for " "detail of how to register equal function of GValue)" msgstr "" "ふたつのGValue、" "value1value2を登録された比較" "関数で比較します。(GValueの比較" "関数の登録方法についてはgcut_value_register_equal_func()を見てくださ" "い。)" #: xml/gcut-value-equal.xml:53(term) msgid "value1 :" msgstr "" #: xml/gcut-value-equal.xml:54(simpara) xml/gcut-value-equal.xml:57(simpara) msgid "a GValue to be compared." msgstr "比較するGValue。" #: xml/gcut-value-equal.xml:56(term) msgid "value2 :" msgstr "" #: xml/gcut-value-equal.xml:59(simpara) msgid "" "TRUE if value1 equals to value2, FALSE otherwise." msgstr "" "value1value2が等しいときは" "TRUE、そうでない場合はFALSE。" #: xml/gcut-value-equal.xml:65(title) msgid "gcut_value_register_equal_func ()" msgstr "" #: xml/gcut-value-equal.xml:67(programlisting) #, no-wrap msgid "" "void gcut_value_register_equal_func (GType type1,\n" " GType type2,\n" " GEqualFunc equal_func);" msgstr "" #: xml/gcut-value-equal.xml:72(programlisting) #: xml/gcut-list.xml:84(programlisting) xml/gcut-list.xml:115(programlisting) #: xml/gcut-hash-table.xml:68(programlisting) #: xml/gcut-hash-table.xml:102(programlisting) #: xml/gcut-hash-table.xml:143(programlisting) #, no-wrap msgid "" "\n" "TODO\n" msgstr "" #: xml/gcut-value-equal.xml:70(para) xml/gcut-test-utils.xml:188(para) #: xml/gcut-test-utils.xml:218(para) xml/gcut-test-utils.xml:247(para) #: xml/gcut-test-utils.xml:312(para) xml/gcut-test-utils.xml:342(para) #: xml/gcut-process.xml:124(para) xml/gcut-list.xml:82(para) #: xml/gcut-list.xml:113(para) xml/gcut-inspect.xml:86(para) #: xml/gcut-inspect.xml:111(para) xml/gcut-inspect.xml:137(para) #: xml/gcut-inspect.xml:163(para) xml/gcut-inspect.xml:189(para) #: xml/gcut-inspect.xml:215(para) xml/gcut-inspect.xml:241(para) #: xml/gcut-inspect.xml:268(para) xml/gcut-inspect.xml:293(para) #: xml/gcut-inspect.xml:318(para) xml/gcut-inspect.xml:349(para) #: xml/gcut-inspect.xml:380(para) xml/gcut-inspect.xml:406(para) #: xml/gcut-inspect.xml:436(para) xml/gcut-hash-table.xml:66(para) #: xml/gcut-hash-table.xml:100(para) xml/gcut-hash-table.xml:141(para) #: xml/gcut-egg.xml:114(para) xml/gcut-data.xml:82(para) #: xml/gcut-data.xml:133(para) xml/gcut-data.xml:146(para) #: xml/gcut-data.xml:159(para) xml/gcut-data.xml:172(para) #: xml/gcut-data.xml:185(para) xml/gcut-data.xml:198(para) #: xml/gcut-data.xml:211(para) xml/gcut-data.xml:224(para) #: xml/gcut-data.xml:237(para) xml/gcut-data.xml:251(para) #: xml/gcut-data.xml:265(para) xml/gcut-data.xml:282(para) #: xml/gcut-data.xml:295(para) xml/gcut-assertions.xml:610(para) #: xml/gcut-assertions.xml:642(para) xml/gcut-assertions.xml:680(para) #: xml/gcut-assertions.xml:709(para) xml/cutter.xml:215(para) #: xml/cutter.xml:315(para) xml/cutter.xml:361(para) xml/cutter.xml:451(para) #: xml/cutter.xml:475(para) xml/cut-multi-process.xml:106(para) #: xml/cut-multi-process.xml:124(para) xml/cut-helper.xml:167(para) #: xml/cut-helper.xml:297(para) xml/cut-helper.xml:375(para) #: xml/cut-experimental.xml:44(para) xml/cut-experimental.xml:70(para) #: xml/cut-experimental.xml:100(para) xml/cut-experimental.xml:130(para) #: xml/cut-assertions.xml:309(para) xml/cut-assertions.xml:326(para) #: xml/cut-assertions.xml:389(para) xml/cut-assertions.xml:418(para) #: xml/cut-assertions.xml:1488(para) xml/cut-assertions.xml:1512(para) #: xml/cut-assertions.xml:1539(para) xml/cut-assertions.xml:1569(para) #: xml/cut-assertions.xml:1642(para) xml/cut-assertions.xml:1677(para) #: xml/cut-assertions.xml:1805(para) xml/cut-assertions.xml:1831(para) #: xml/cut-assertions.xml:1857(para) xml/cut-assertions.xml:1883(para) #: xml/cut-assertions.xml:1909(para) xml/cut-assertions.xml:1935(para) #: xml/cut-assertions.xml:1961(para) xml/cut-assertions.xml:1981(para) #: xml/cut-assertions.xml:2004(para) xml/cut-assertions.xml:2026(para) #: xml/cut-assertions.xml:2049(para) xml/cut-assertions.xml:2071(para) #: xml/cut-assertions.xml:2094(para) xml/cut-assertions.xml:2243(para) #: xml/cut-assertions.xml:2330(para) xml/cut-assertions.xml:2351(para) #: xml/cppcutter.xml:146(para) xml/cppcut-assertions.xml:45(para) msgid "e.g.: " msgstr "例: " #: xml/gcut-value-equal.xml:76(para) msgid "" "Registers equality check function between GValue of type1 and GValue of type2." msgstr "" "type1GValuetype2GValueの等価性を調べる関数を登録します。" #: xml/gcut-value-equal.xml:80(term) msgid "type1 :" msgstr "" #: xml/gcut-value-equal.xml:81(simpara) xml/gcut-value-equal.xml:84(simpara) msgid "" "a GType of compared GValue." msgstr "" "比較するGValueGType。" #: xml/gcut-value-equal.xml:83(term) msgid "type2 :" msgstr "" #: xml/gcut-value-equal.xml:86(term) xml/gcut-object.xml:62(term) #: xml/gcut-list.xml:94(term) xml/gcut-hash-table.xml:78(term) msgid "equal_func :" msgstr "" #: xml/gcut-value-equal.xml:87(simpara) msgid "" "a function that compares type1's GValue with type2's " "GValue." msgstr "" "type1GValuetype2GValueを比較する関数。" #: xml/gcut-types.xml:7(refentrytitle) xml/gcut-types.xml:14(refname) #: xml/api-index-full.xml:390(link) xml/api-index-full.xml:438(link) #: xml/api-index-full.xml:537(link) xml/api-index-full.xml:594(link) #: xml/api-index-full.xml:595(link) xml/api-index-1.1.3.xml:28(link) #: xml/api-index-1.0.7.xml:27(link) xml/api-index-1.0.6.xml:74(link) msgid "Types for GLib support" msgstr "GLibサポート用の型" #: xml/gcut-types.xml:15(refpurpose) msgid "Types that is used in test with GLib support." msgstr "GLibサポート付きテストで使う型です。" #: xml/gcut-types.xml:21(link) msgid "*GCutInspectFunction" msgstr "" #: xml/gcut-types.xml:21(type) xml/gcut-test-utils.xml:27(returnvalue) #: xml/gcut-test-utils.xml:27(type) xml/gcut-test-utils.xml:28(returnvalue) #: xml/gcut-test-utils.xml:63(returnvalue) xml/gcut-string.xml:16(type) #: xml/gcut-string.xml:22(type) xml/gcut-string.xml:23(type) #: xml/gcut-string.xml:24(type) xml/gcut-string-io-channel.xml:22(returnvalue) #: xml/gcut-public.xml:30(returnvalue) xml/gcut-public.xml:31(type) #: xml/gcut-public.xml:32(returnvalue) xml/gcut-public.xml:36(returnvalue) #: xml/gcut-process.xml:58(returnvalue) xml/gcut-process.xml:59(returnvalue) #: xml/gcut-inspect.xml:22(type) xml/gcut-inspect.xml:25(type) #: xml/gcut-inspect.xml:28(type) xml/gcut-inspect.xml:31(type) #: xml/gcut-inspect.xml:34(type) xml/gcut-inspect.xml:37(type) #: xml/gcut-inspect.xml:40(type) xml/gcut-inspect.xml:43(type) #: xml/gcut-inspect.xml:46(type) xml/gcut-inspect.xml:49(type) #: xml/gcut-inspect.xml:52(type) xml/gcut-inspect.xml:55(type) #: xml/gcut-inspect.xml:58(type) xml/gcut-inspect.xml:61(type) #: xml/gcut-assertions.xml:129(type) xml/gcut-assertions.xml:130(type) #: xml/gcut-assertions-helper.xml:136(type) #: xml/gcut-assertions-helper.xml:137(type) msgid "GString" msgstr "" #: xml/gcut-types.xml:21(parameter) xml/gcut-test-utils.xml:27(parameter) #: xml/gcut-public.xml:31(parameter) xml/gcut-inspect.xml:22(parameter) #: xml/gcut-inspect.xml:25(parameter) xml/gcut-inspect.xml:28(parameter) #: xml/gcut-inspect.xml:31(parameter) xml/gcut-inspect.xml:34(parameter) #: xml/gcut-inspect.xml:37(parameter) xml/gcut-inspect.xml:40(parameter) #: xml/gcut-inspect.xml:43(parameter) xml/gcut-inspect.xml:46(parameter) #: xml/gcut-inspect.xml:49(parameter) xml/gcut-inspect.xml:52(parameter) #: xml/gcut-inspect.xml:55(parameter) xml/gcut-inspect.xml:58(parameter) #: xml/gcut-inspect.xml:61(parameter) msgid " *string" msgstr "" #: xml/gcut-types.xml:22(type) xml/gcut-inspect.xml:23(type) #: xml/gcut-inspect.xml:26(type) xml/gcut-inspect.xml:29(type) #: xml/gcut-inspect.xml:32(type) xml/gcut-inspect.xml:35(type) #: xml/gcut-inspect.xml:38(type) xml/gcut-inspect.xml:41(type) #: xml/gcut-inspect.xml:44(type) xml/gcut-inspect.xml:47(type) #: xml/gcut-inspect.xml:50(type) xml/gcut-inspect.xml:53(type) #: xml/gcut-inspect.xml:56(type) xml/gcut-inspect.xml:59(type) #: xml/gcut-inspect.xml:62(type) xml/gcut-data.xml:25(type) #: xml/gcut-data.xml:29(type) xml/gcut-data.xml:31(type) #: xml/gcut-data.xml:33(type) xml/gcut-data.xml:41(type) #: xml/gcut-data.xml:43(type) xml/gcut-data.xml:45(type) #: xml/gcut-data.xml:47(returnvalue) xml/gcut-data.xml:47(type) #: xml/gcut-data.xml:49(returnvalue) xml/gcut-data.xml:49(type) #: xml/gcut-data-helper.xml:21(type) xml/gcut-data-helper.xml:24(type) #: xml/gcut-data-helper.xml:27(type) xml/gcut-data-helper.xml:30(type) #: xml/gcut-data-helper.xml:33(type) xml/gcut-data-helper.xml:36(type) #: xml/gcut-data-helper.xml:39(type) xml/gcut-data-helper.xml:42(type) #: xml/gcut-data-helper.xml:45(type) xml/gcut-data-helper.xml:48(type) #: xml/gcut-data-helper.xml:51(returnvalue) xml/gcut-data-helper.xml:51(type) #: xml/gcut-data-helper.xml:54(returnvalue) xml/gcut-data-helper.xml:54(type) #: xml/gcut-data-helper.xml:57(type) xml/gcut-data-helper.xml:60(type) #: xml/gcut-data-helper.xml:63(type) msgid "gconstpointer" msgstr "" #: xml/gcut-types.xml:22(parameter) xml/gcut-inspect.xml:23(parameter) #: xml/gcut-inspect.xml:26(parameter) xml/gcut-inspect.xml:29(parameter) #: xml/gcut-inspect.xml:32(parameter) xml/gcut-inspect.xml:35(parameter) #: xml/gcut-inspect.xml:38(parameter) xml/gcut-inspect.xml:41(parameter) #: xml/gcut-inspect.xml:44(parameter) xml/gcut-inspect.xml:47(parameter) #: xml/gcut-inspect.xml:50(parameter) xml/gcut-inspect.xml:53(parameter) #: xml/gcut-inspect.xml:56(parameter) xml/gcut-inspect.xml:59(parameter) #: xml/gcut-inspect.xml:62(parameter) xml/gcut-data.xml:25(parameter) #: xml/gcut-data.xml:29(parameter) xml/gcut-data.xml:31(parameter) #: xml/gcut-data.xml:33(parameter) xml/gcut-data.xml:41(parameter) #: xml/gcut-data.xml:43(parameter) xml/gcut-data.xml:45(parameter) #: xml/gcut-data.xml:47(parameter) xml/gcut-data.xml:49(parameter) #: xml/gcut-data-helper.xml:21(parameter) #: xml/gcut-data-helper.xml:24(parameter) #: xml/gcut-data-helper.xml:27(parameter) #: xml/gcut-data-helper.xml:30(parameter) #: xml/gcut-data-helper.xml:33(parameter) #: xml/gcut-data-helper.xml:36(parameter) #: xml/gcut-data-helper.xml:39(parameter) #: xml/gcut-data-helper.xml:42(parameter) #: xml/gcut-data-helper.xml:45(parameter) #: xml/gcut-data-helper.xml:48(parameter) #: xml/gcut-data-helper.xml:51(parameter) #: xml/gcut-data-helper.xml:54(parameter) #: xml/gcut-data-helper.xml:57(parameter) #: xml/gcut-data-helper.xml:60(parameter) #: xml/gcut-data-helper.xml:63(parameter) msgid " data" msgstr "" #: xml/gcut-types.xml:23(type) xml/gcut-test-utils.xml:29(type) #: xml/gcut-process.xml:85(type) xml/gcut-object.xml:28(type) #: xml/gcut-list.xml:27(type) xml/gcut-inspect.xml:24(type) #: xml/gcut-inspect.xml:27(type) xml/gcut-inspect.xml:30(type) #: xml/gcut-inspect.xml:33(type) xml/gcut-inspect.xml:36(type) #: xml/gcut-inspect.xml:39(type) xml/gcut-inspect.xml:42(type) #: xml/gcut-inspect.xml:45(type) xml/gcut-inspect.xml:48(type) #: xml/gcut-inspect.xml:51(type) xml/gcut-inspect.xml:54(type) #: xml/gcut-inspect.xml:57(type) xml/gcut-inspect.xml:60(type) #: xml/gcut-inspect.xml:63(type) xml/gcut-hash-table.xml:28(type) #: xml/gcut-hash-table.xml:33(type) xml/gcut-event-loop.xml:34(type) #: xml/gcut-event-loop.xml:38(type) xml/gcut-event-loop.xml:43(type) #: xml/gcut-event-loop.xml:48(type) xml/gcut-event-loop.xml:53(type) #: xml/gcut-event-loop.xml:57(type) xml/gcut-event-loop.xml:61(type) #: xml/gcut-egg.xml:75(type) xml/gcut-data-helper.xml:57(returnvalue) #: xml/gcut-assertions.xml:38(type) xml/gcut-assertions.xml:76(type) #: xml/gcut-assertions-helper.xml:33(type) #: xml/gcut-assertions-helper.xml:73(type) msgid "gpointer" msgstr "" #: xml/gcut-types.xml:23(parameter) xml/gcut-object.xml:28(parameter) #: xml/gcut-list.xml:27(parameter) xml/gcut-inspect.xml:24(parameter) #: xml/gcut-inspect.xml:27(parameter) xml/gcut-inspect.xml:30(parameter) #: xml/gcut-inspect.xml:33(parameter) xml/gcut-inspect.xml:36(parameter) #: xml/gcut-inspect.xml:39(parameter) xml/gcut-inspect.xml:42(parameter) #: xml/gcut-inspect.xml:45(parameter) xml/gcut-inspect.xml:48(parameter) #: xml/gcut-inspect.xml:51(parameter) xml/gcut-inspect.xml:54(parameter) #: xml/gcut-inspect.xml:57(parameter) xml/gcut-inspect.xml:60(parameter) #: xml/gcut-inspect.xml:63(parameter) xml/gcut-hash-table.xml:28(parameter) #: xml/gcut-hash-table.xml:33(parameter) msgid " user_data" msgstr "" #: xml/gcut-types.xml:24(link) xml/gcut-types.xml:62(title) #: xml/gcut-types.xml:63(primary) xml/api-index-full.xml:594(link) #: xml/api-index-1.0.7.xml:27(link) msgid "GCUT_TYPE_ERROR" msgstr "" #: xml/gcut-types.xml:25(link) xml/gcut-types.xml:70(title) #: xml/gcut-types.xml:71(primary) xml/api-index-full.xml:595(link) #: xml/api-index-1.1.3.xml:28(link) msgid "GCUT_TYPE_SIZE" msgstr "" #: xml/gcut-types.xml:26(link) xml/gcut-types.xml:79(primary) #: xml/api-index-full.xml:390(link) msgid "gcut_error_get_type" msgstr "" #: xml/gcut-types.xml:27(link) xml/gcut-types.xml:88(primary) #: xml/api-index-full.xml:537(link) msgid "gcut_size_get_type" msgstr "" #: xml/gcut-types.xml:21(synopsis) #, no-wrap msgid "" " () (,\n" " ,\n" " );\n" "#define \n" "#define \n" " ();\n" " ();\n" msgstr "" #: xml/gcut-types.xml:33(para) msgid "There are some types to be used in test with GLib support." msgstr "GLibサポート付きテストで使う型がいくつかあります。" #: xml/gcut-types.xml:40(title) msgid "GCutInspectFunction ()" msgstr "" #: xml/gcut-types.xml:41(primary) xml/gcut-object.xml:27(type) #: xml/gcut-list.xml:26(type) xml/gcut-hash-table.xml:26(type) #: xml/gcut-hash-table.xml:27(type) xml/gcut-hash-table.xml:30(type) #: xml/gcut-hash-table.xml:31(type) xml/gcut-assertions.xml:37(type) #: xml/gcut-assertions.xml:74(type) xml/gcut-assertions.xml:75(type) #: xml/gcut-assertions-helper.xml:32(type) #: xml/gcut-assertions-helper.xml:71(type) #: xml/gcut-assertions-helper.xml:72(type) xml/api-index-full.xml:438(link) #: xml/api-index-1.0.6.xml:74(link) msgid "GCutInspectFunction" msgstr "" #: xml/gcut-types.xml:42(programlisting) #, no-wrap msgid "" "void (*GCutInspectFunction) (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-types.xml:45(para) msgid "" "Specifies the type of function which is called when the data element is inspected. It is passed the pointer to the data " "element, should inspect data and append inspected " "string to string." msgstr "" "data要素の詳細を示すときに呼ばれる関数の型です。データ" "要素のポインタを渡されるので、dataの詳細を" "stringに追加してください。" #: xml/gcut-types.xml:51(term) xml/gcut-test-utils.xml:157(term) #: xml/gcut-test-utils.xml:172(term) xml/gcut-string.xml:68(term) #: xml/gcut-public.xml:128(term) xml/gcut-inspect.xml:92(term) #: xml/gcut-inspect.xml:118(term) xml/gcut-inspect.xml:144(term) #: xml/gcut-inspect.xml:170(term) xml/gcut-inspect.xml:196(term) #: xml/gcut-inspect.xml:222(term) xml/gcut-inspect.xml:249(term) #: xml/gcut-inspect.xml:274(term) xml/gcut-inspect.xml:299(term) #: xml/gcut-inspect.xml:330(term) xml/gcut-inspect.xml:361(term) #: xml/gcut-inspect.xml:387(term) xml/gcut-inspect.xml:417(term) #: xml/gcut-inspect.xml:443(term) xml/cut-test-utils.xml:119(term) #: xml/cut-test-utils.xml:133(term) xml/cut-test-utils.xml:151(term) #: xml/cut-test-utils.xml:261(term) xml/cut-test-utils.xml:281(term) #: xml/cut-assertions.xml:459(term) msgid "string :" msgstr "" #: xml/gcut-types.xml:52(simpara) msgid "" "the GString to be stored " "inspected result." msgstr "" "詳細情報を保存するGString。" #: xml/gcut-types.xml:54(term) xml/gcut-inspect.xml:95(term) #: xml/gcut-inspect.xml:121(term) xml/gcut-inspect.xml:147(term) #: xml/gcut-inspect.xml:173(term) xml/gcut-inspect.xml:199(term) #: xml/gcut-inspect.xml:225(term) xml/gcut-inspect.xml:252(term) #: xml/gcut-inspect.xml:277(term) xml/gcut-inspect.xml:302(term) #: xml/gcut-inspect.xml:333(term) xml/gcut-inspect.xml:364(term) #: xml/gcut-inspect.xml:390(term) xml/gcut-inspect.xml:420(term) #: xml/gcut-inspect.xml:446(term) xml/gcut-event-loop.xml:224(term) #: xml/gcut-event-loop.xml:251(term) xml/gcut-event-loop.xml:283(term) #: xml/gcut-event-loop.xml:313(term) xml/gcut-event-loop.xml:345(term) #: xml/gcut-event-loop.xml:371(term) xml/gcut-event-loop.xml:399(term) #: xml/gcut-data.xml:325(term) xml/gcut-data.xml:343(term) #: xml/gcut-data.xml:361(term) xml/gcut-data.xml:379(term) #: xml/gcut-data.xml:398(term) xml/gcut-data.xml:416(term) #: xml/gcut-data.xml:434(term) xml/gcut-data.xml:451(term) #: xml/gcut-data.xml:469(term) xml/gcut-data.xml:488(term) #: xml/gcut-data.xml:507(term) xml/gcut-data.xml:526(term) #: xml/gcut-data.xml:545(term) xml/gcut-data.xml:563(term) #: xml/gcut-data.xml:580(term) xml/gcut-data.xml:598(term) #: xml/gcut-data-helper.xml:84(term) xml/gcut-data-helper.xml:104(term) #: xml/gcut-data-helper.xml:124(term) xml/gcut-data-helper.xml:144(term) #: xml/gcut-data-helper.xml:164(term) xml/gcut-data-helper.xml:184(term) #: xml/gcut-data-helper.xml:204(term) xml/gcut-data-helper.xml:224(term) #: xml/gcut-data-helper.xml:244(term) xml/gcut-data-helper.xml:264(term) #: xml/gcut-data-helper.xml:284(term) xml/gcut-data-helper.xml:304(term) #: xml/gcut-data-helper.xml:324(term) xml/gcut-data-helper.xml:344(term) #: xml/gcut-data-helper.xml:364(term) xml/cut-types.xml:47(term) msgid "data :" msgstr "" #: xml/gcut-types.xml:55(simpara) msgid "the data element to be inspected." msgstr "詳細化されるデータ。" #: xml/gcut-types.xml:57(term) xml/gcut-process.xml:767(term) #: xml/gcut-process.xml:796(term) xml/gcut-process.xml:824(term) #: xml/gcut-process.xml:845(term) xml/gcut-object.xml:102(term) #: xml/gcut-list.xml:125(term) xml/gcut-inspect.xml:98(term) #: xml/gcut-inspect.xml:124(term) xml/gcut-inspect.xml:150(term) #: xml/gcut-inspect.xml:176(term) xml/gcut-inspect.xml:202(term) #: xml/gcut-inspect.xml:228(term) xml/gcut-inspect.xml:255(term) #: xml/gcut-inspect.xml:280(term) xml/gcut-inspect.xml:305(term) #: xml/gcut-inspect.xml:336(term) xml/gcut-inspect.xml:367(term) #: xml/gcut-inspect.xml:393(term) xml/gcut-inspect.xml:423(term) #: xml/gcut-inspect.xml:449(term) xml/gcut-hash-table.xml:115(term) #: xml/gcut-hash-table.xml:159(term) xml/gcut-egg.xml:653(term) #: xml/gcut-egg.xml:682(term) xml/gcut-egg.xml:710(term) #: xml/gcut-egg.xml:731(term) msgid "user_data :" msgstr "" #: xml/gcut-types.xml:58(simpara) xml/gcut-object.xml:103(simpara) #: xml/gcut-list.xml:126(simpara) xml/gcut-hash-table.xml:116(simpara) #: xml/gcut-hash-table.xml:160(simpara) msgid "user data to pass to the function." msgstr "関数に渡すユーザ用データ。" #: xml/gcut-types.xml:64(programlisting) #, no-wrap msgid "#define GCUT_TYPE_ERROR (gcut_error_get_type())\n" msgstr "" #: xml/gcut-types.xml:66(para) msgid "" "The GType for a boxed type " "holding a GError reference." msgstr "" "GErrorへの参照を保持するGBoxed型" "のGType。" #: xml/gcut-types.xml:68(para) xml/gcut-data.xml:554(para) #: xml/gcut-assertions.xml:854(para) xml/cut-version.xml:93(para) #: xml/cut-test-utils.xml:437(para) xml/cut-assertions.xml:406(para) #: xml/cut-assertions.xml:435(para) xml/cut-assertions.xml:518(para) #: xml/cut-assertions.xml:976(para) xml/cut-assertions.xml:1434(para) #: xml/cut-assertions.xml:1480(para) xml/cut-assertions.xml:1588(para) #: xml/cut-assertions.xml:1665(para) xml/cut-assertions.xml:1700(para) #: xml/cut-assertions.xml:1756(para) msgid "Since 1.0.7" msgstr "1.0.7から" #: xml/gcut-types.xml:72(programlisting) #, no-wrap msgid "#define GCUT_TYPE_SIZE (gcut_size_get_type())\n" msgstr "" #: xml/gcut-types.xml:74(para) msgid "" "The GType for gsize type." msgstr "" "gsizeのためのGType。" #: xml/gcut-types.xml:76(para) xml/gcut-inspect.xml:179(para) #: xml/gcut-inspect.xml:205(para) xml/gcut-inspect.xml:231(para) #: xml/gcut-inspect.xml:258(para) xml/gcut-inspect.xml:426(para) #: xml/gcut-inspect.xml:452(para) xml/gcut-data.xml:352(para) #: xml/gcut-data.xml:425(para) xml/gcut-data.xml:443(para) #: xml/gcut-data.xml:460(para) xml/gcut-data.xml:589(para) #: xml/gcut-data.xml:607(para) xml/cut-test-utils.xml:273(para) #: xml/cut-assertions.xml:1504(para) xml/cut-assertions.xml:1528(para) msgid "Since 1.1.3" msgstr "1.1.3から" #: xml/gcut-types.xml:78(title) msgid "gcut_error_get_type ()" msgstr "" #: xml/gcut-types.xml:80(programlisting) #, no-wrap msgid "GType gcut_error_get_type (void);" msgstr "" #: xml/gcut-types.xml:87(title) msgid "gcut_size_get_type ()" msgstr "" #: xml/gcut-types.xml:89(programlisting) #, no-wrap msgid "GType gcut_size_get_type (void);" msgstr "" #: xml/gcut-test-utils.xml:7(refentrytitle) #: xml/gcut-test-utils.xml:14(refname) xml/api-index-full.xml:421(link) #: xml/api-index-full.xml:433(link) xml/api-index-full.xml:434(link) #: xml/api-index-full.xml:475(link) xml/api-index-full.xml:476(link) #: xml/api-index-full.xml:477(link) xml/api-index-full.xml:480(link) #: xml/api-index-full.xml:482(link) xml/api-index-full.xml:483(link) #: xml/api-index-full.xml:486(link) xml/api-index-full.xml:579(link) #: xml/api-index-full.xml:580(link) xml/api-index-full.xml:581(link) #: xml/api-index-full.xml:582(link) xml/api-index-full.xml:583(link) #: xml/api-index-full.xml:584(link) xml/api-index-full.xml:585(link) #: xml/api-index-full.xml:586(link) xml/api-index-full.xml:587(link) #: xml/api-index-full.xml:588(link) xml/api-index-full.xml:589(link) #: xml/api-index-full.xml:590(link) xml/api-index-full.xml:591(link) #: xml/api-index-deprecated.xml:70(link) xml/api-index-1.1.6.xml:24(link) #: xml/api-index-1.1.6.xml:32(link) xml/api-index-1.1.6.xml:33(link) #: xml/api-index-1.1.5.xml:19(link) xml/api-index-1.1.5.xml:20(link) #: xml/api-index-1.1.5.xml:59(link) xml/api-index-1.1.5.xml:60(link) #: xml/api-index-1.1.1.xml:16(link) xml/api-index-1.1.1.xml:17(link) #: xml/api-index-1.1.1.xml:20(link) xml/api-index-1.0.6.xml:94(link) #: xml/api-index-1.0.6.xml:97(link) xml/api-index-1.0.5.xml:54(link) #: xml/api-index-1.0.5.xml:75(link) xml/api-index-1.0.5.xml:76(link) #: xml/api-index-1.0.4.xml:48(link) xml/api-index-1.0.4.xml:51(link) #: xml/api-index-1.0.3.xml:20(link) xml/api-index-1.0.3.xml:21(link) #: xml/api-index-1.0.3.xml:24(link) xml/api-index-1.0.3.xml:25(link) #: xml/api-index-1.0.3.xml:26(link) msgid "Test Utilities with GLib support" msgstr "GLibサポート付きテストユーティリティ" #: xml/gcut-test-utils.xml:15(refpurpose) msgid "Utilities to write tests more easily with GLib support." msgstr "テストをもっと簡単に書くためのGLibサポート付きユーティリティ。" #: xml/gcut-test-utils.xml:22(link) xml/gcut-test-utils.xml:84(primary) #: xml/api-index-full.xml:590(link) xml/api-index-1.0.3.xml:26(link) msgid "gcut_take_object" msgstr "" #: xml/gcut-test-utils.xml:22(parameter) xml/gcut-public.xml:22(parameter) msgid " *object" msgstr "" #: xml/gcut-test-utils.xml:23(link) xml/gcut-test-utils.xml:98(primary) #: xml/api-index-full.xml:579(link) xml/api-index-1.0.3.xml:24(link) msgid "gcut_take_error" msgstr "" #: xml/gcut-test-utils.xml:23(parameter) xml/gcut-public.xml:24(parameter) #: xml/gcut-assertions.xml:82(parameter) xml/gcut-assertions.xml:84(parameter) #: xml/gcut-assertions-helper.xml:82(parameter) msgid " *error" msgstr "" #: xml/gcut-test-utils.xml:24(returnvalue) xml/gcut-test-utils.xml:24(type) #: xml/gcut-test-utils.xml:29(returnvalue) #: xml/gcut-test-utils.xml:31(returnvalue) #: xml/gcut-test-utils.xml:34(returnvalue) #: xml/gcut-test-utils.xml:37(returnvalue) #: xml/gcut-test-utils.xml:39(returnvalue) #: xml/gcut-test-utils.xml:40(returnvalue) #: xml/gcut-test-utils.xml:43(returnvalue) #: xml/gcut-test-utils.xml:46(returnvalue) #: xml/gcut-test-utils.xml:50(returnvalue) xml/gcut-test-utils.xml:53(type) #: xml/gcut-test-utils.xml:54(type) xml/gcut-public.xml:25(returnvalue) #: xml/gcut-public.xml:26(type) xml/gcut-list.xml:16(type) #: xml/gcut-list.xml:22(type) xml/gcut-list.xml:23(type) #: xml/gcut-list.xml:25(type) xml/gcut-list.xml:28(type) #: xml/gcut-list.xml:29(type) xml/gcut-list.xml:30(type) #: xml/gcut-list.xml:31(type) xml/gcut-list.xml:32(type) #: xml/gcut-list.xml:33(type) xml/gcut-list.xml:34(type) #: xml/gcut-list.xml:35(type) xml/gcut-list.xml:36(type) #: xml/gcut-list.xml:37(type) xml/gcut-list.xml:39(type) #: xml/gcut-list.xml:41(type) xml/gcut-assertions.xml:34(type) #: xml/gcut-assertions.xml:35(type) xml/gcut-assertions.xml:40(type) #: xml/gcut-assertions.xml:41(type) xml/gcut-assertions.xml:43(type) #: xml/gcut-assertions.xml:44(type) xml/gcut-assertions.xml:46(type) #: xml/gcut-assertions.xml:47(type) xml/gcut-assertions.xml:49(type) #: xml/gcut-assertions.xml:50(type) xml/gcut-assertions.xml:52(type) #: xml/gcut-assertions.xml:53(type) xml/gcut-assertions.xml:55(type) #: xml/gcut-assertions.xml:56(type) xml/gcut-assertions.xml:59(type) #: xml/gcut-assertions.xml:60(type) xml/gcut-assertions.xml:64(type) #: xml/gcut-assertions.xml:65(type) xml/gcut-assertions.xml:68(type) #: xml/gcut-assertions.xml:69(type) xml/gcut-assertions-helper.xml:29(type) #: xml/gcut-assertions-helper.xml:30(type) #: xml/gcut-assertions-helper.xml:37(type) #: xml/gcut-assertions-helper.xml:38(type) #: xml/gcut-assertions-helper.xml:41(type) #: xml/gcut-assertions-helper.xml:42(type) #: xml/gcut-assertions-helper.xml:46(type) #: xml/gcut-assertions-helper.xml:47(type) #: xml/gcut-assertions-helper.xml:51(type) #: xml/gcut-assertions-helper.xml:52(type) #: xml/gcut-assertions-helper.xml:57(type) #: xml/gcut-assertions-helper.xml:58(type) #: xml/gcut-assertions-helper.xml:63(type) #: xml/gcut-assertions-helper.xml:64(type) msgid "GList" msgstr "" #: xml/gcut-test-utils.xml:24(link) xml/gcut-test-utils.xml:114(primary) #: xml/api-index-full.xml:581(link) xml/api-index-1.0.3.xml:25(link) msgid "gcut_take_list" msgstr "" #: xml/gcut-test-utils.xml:24(parameter) xml/gcut-list.xml:25(parameter) #: xml/gcut-list.xml:30(parameter) xml/gcut-list.xml:33(parameter) #: xml/gcut-list.xml:36(parameter) xml/gcut-list.xml:37(parameter) #: xml/gcut-list.xml:39(parameter) xml/gcut-list.xml:41(parameter) msgid "const *list" msgstr "" #: xml/gcut-test-utils.xml:25(type) xml/gcut-public.xml:27(type) #: xml/cut-types.xml:39(primary) xml/cut-test-utils.xml:22(type) #: xml/api-index-full.xml:71(link) msgid "CutDestroyFunction" msgstr "" #: xml/gcut-test-utils.xml:25(parameter) xml/cut-test-utils.xml:22(parameter) msgid "" " destroy_function" msgstr "" #: xml/gcut-test-utils.xml:26(returnvalue) xml/gcut-test-utils.xml:26(type) #: xml/gcut-test-utils.xml:55(returnvalue) #: xml/gcut-test-utils.xml:57(returnvalue) #: xml/gcut-test-utils.xml:60(returnvalue) xml/gcut-public.xml:28(returnvalue) #: xml/gcut-public.xml:29(type) xml/gcut-hash-table.xml:16(type) #: xml/gcut-hash-table.xml:22(type) xml/gcut-hash-table.xml:23(type) #: xml/gcut-hash-table.xml:25(type) xml/gcut-hash-table.xml:29(type) #: xml/gcut-hash-table.xml:34(type) xml/gcut-hash-table.xml:35(type) #: xml/gcut-hash-table.xml:37(type) xml/gcut-hash-table.xml:38(returnvalue) #: xml/gcut-hash-table.xml:38(type) xml/gcut-assertions.xml:71(type) #: xml/gcut-assertions.xml:72(type) xml/gcut-assertions.xml:79(type) #: xml/gcut-assertions.xml:80(type) xml/gcut-assertions-helper.xml:68(type) #: xml/gcut-assertions-helper.xml:69(type) #: xml/gcut-assertions-helper.xml:78(type) #: xml/gcut-assertions-helper.xml:79(type) msgid "GHashTable" msgstr "" #: xml/gcut-test-utils.xml:26(link) xml/gcut-test-utils.xml:135(primary) #: xml/api-index-full.xml:580(link) xml/api-index-1.0.4.xml:51(link) msgid "gcut_take_hash_table" msgstr "" #: xml/gcut-test-utils.xml:26(parameter) xml/gcut-public.xml:29(parameter) msgid " *hash_table" msgstr "" #: xml/gcut-test-utils.xml:27(link) xml/gcut-test-utils.xml:151(primary) #: xml/api-index-full.xml:591(link) xml/api-index-1.1.6.xml:33(link) msgid "gcut_take_string" msgstr "" #: xml/gcut-test-utils.xml:28(link) xml/gcut-test-utils.xml:167(primary) #: xml/api-index-full.xml:589(link) xml/api-index-1.1.6.xml:32(link) msgid "gcut_take_new_string" msgstr "" #: xml/gcut-test-utils.xml:28(parameter) msgid "const *string" msgstr "" #: xml/gcut-test-utils.xml:29(link) xml/gcut-test-utils.xml:182(primary) #: xml/api-index-full.xml:476(link) xml/api-index-1.1.1.xml:16(link) msgid "gcut_list_new" msgstr "" #: xml/gcut-test-utils.xml:29(parameter) msgid "const element" msgstr "" #: xml/gcut-test-utils.xml:31(link) xml/gcut-test-utils.xml:211(primary) #: xml/api-index-full.xml:475(link) xml/api-index-1.1.5.xml:19(link) msgid "gcut_list_int_new" msgstr "" #: xml/gcut-test-utils.xml:31(parameter) xml/gcut-test-utils.xml:34(parameter) #: xml/gcut-test-utils.xml:40(parameter) xml/gcut-test-utils.xml:43(parameter) msgid " n" msgstr "" #: xml/gcut-test-utils.xml:32(type) xml/gcut-test-utils.xml:41(type) #: xml/gcut-process.xml:32(type) xml/gcut-process.xml:46(returnvalue) #: xml/gcut-process.xml:50(type) xml/gcut-key-file.xml:21(returnvalue) #: xml/gcut-event-loop.xml:40(type) xml/gcut-event-loop.xml:50(type) #: xml/gcut-event-loop.xml:59(type) xml/gcut-enum.xml:26(type) #: xml/gcut-enum.xml:27(returnvalue) xml/gcut-egg.xml:31(type) #: xml/gcut-egg.xml:50(returnvalue) xml/gcut-egg.xml:54(type) #: xml/gcut-data.xml:31(returnvalue) xml/gcut-data.xml:45(returnvalue) #: xml/gcut-data-helper.xml:27(returnvalue) #: xml/gcut-data-helper.xml:48(returnvalue) xml/gcut-assertions.xml:97(type) #: xml/gcut-assertions.xml:98(type) xml/gcut-assertions-helper.xml:95(type) #: xml/gcut-assertions-helper.xml:96(type) #: xml/gcut-assertions-helper.xml:101(type) #: xml/gcut-assertions-helper.xml:102(type) msgid "gint" msgstr "" #: xml/gcut-test-utils.xml:32(parameter) xml/gcut-test-utils.xml:41(parameter) msgid " value" msgstr "" #: xml/gcut-test-utils.xml:34(link) xml/gcut-test-utils.xml:240(primary) #: xml/api-index-full.xml:486(link) xml/api-index-1.1.5.xml:20(link) msgid "gcut_list_uint_new" msgstr "" #: xml/gcut-test-utils.xml:35(parameter) xml/gcut-test-utils.xml:44(parameter) msgid " value" msgstr "" #: xml/gcut-test-utils.xml:37(link) xml/gcut-test-utils.xml:270(primary) #: xml/api-index-full.xml:482(link) xml/api-index-1.0.3.xml:21(link) msgid "gcut_list_string_new" msgstr "" #: xml/gcut-test-utils.xml:37(parameter) xml/gcut-test-utils.xml:46(parameter) #: xml/cut-console.xml:37(parameter) msgid "const *value" msgstr "" #: xml/gcut-test-utils.xml:39(link) xml/gcut-test-utils.xml:289(primary) #: xml/api-index-full.xml:483(link) xml/api-index-1.0.6.xml:94(link) msgid "gcut_list_string_new_array" msgstr "" #: xml/gcut-test-utils.xml:39(parameter) xml/gcut-test-utils.xml:50(parameter) msgid "const **strings" msgstr "" #: xml/gcut-test-utils.xml:40(link) xml/gcut-test-utils.xml:304(primary) #: xml/api-index-full.xml:583(link) xml/api-index-1.1.5.xml:59(link) msgid "gcut_take_new_list_int" msgstr "" #: xml/gcut-test-utils.xml:43(link) xml/gcut-test-utils.xml:334(primary) #: xml/api-index-full.xml:588(link) xml/api-index-1.1.5.xml:60(link) msgid "gcut_take_new_list_uint" msgstr "" #: xml/gcut-test-utils.xml:46(link) xml/gcut-test-utils.xml:364(primary) #: xml/api-index-full.xml:585(link) xml/api-index-1.0.5.xml:76(link) msgid "gcut_take_new_list_string" msgstr "" #: xml/gcut-test-utils.xml:48(link) xml/gcut-test-utils.xml:384(primary) #: xml/api-index-full.xml:587(link) xml/api-index-deprecated.xml:70(link) msgid "gcut_take_new_list_string_backward_compatibility" msgstr "" #: xml/gcut-test-utils.xml:50(link) xml/gcut-test-utils.xml:398(primary) #: xml/api-index-full.xml:586(link) xml/api-index-1.0.6.xml:97(link) msgid "gcut_take_new_list_string_array" msgstr "" #: xml/gcut-test-utils.xml:51(link) xml/gcut-test-utils.xml:414(primary) #: xml/api-index-full.xml:584(link) xml/api-index-1.1.1.xml:20(link) msgid "gcut_take_new_list_object" msgstr "" #: xml/gcut-test-utils.xml:53(link) xml/gcut-test-utils.xml:433(primary) #: xml/api-index-full.xml:480(link) xml/api-index-1.0.3.xml:20(link) msgid "gcut_list_string_free" msgstr "" #: xml/gcut-test-utils.xml:53(parameter) xml/gcut-test-utils.xml:54(parameter) #: xml/gcut-public.xml:26(parameter) msgid " *list" msgstr "" #: xml/gcut-test-utils.xml:54(link) xml/gcut-test-utils.xml:444(primary) #: xml/api-index-full.xml:477(link) xml/api-index-1.1.1.xml:17(link) msgid "gcut_list_object_free" msgstr "" #: xml/gcut-test-utils.xml:55(link) xml/gcut-test-utils.xml:456(primary) #: xml/api-index-full.xml:433(link) xml/api-index-1.0.4.xml:48(link) msgid "gcut_hash_table_string_string_new" msgstr "" #: xml/gcut-test-utils.xml:55(parameter) xml/gcut-test-utils.xml:58(parameter) #: xml/gcut-test-utils.xml:61(parameter) xml/gcut-key-file.xml:23(parameter) #: xml/gcut-key-file.xml:28(parameter) msgid "const *key" msgstr "" #: xml/gcut-test-utils.xml:57(link) xml/gcut-test-utils.xml:480(primary) #: xml/api-index-full.xml:434(link) xml/api-index-1.0.5.xml:54(link) msgid "gcut_hash_table_string_string_new_va_list" msgstr "" #: xml/gcut-test-utils.xml:59(type) xml/gcut-public.xml:39(type) #: xml/gcut-process.xml:31(type) xml/gcut-egg.xml:30(type) #: xml/cutter.xml:38(type) msgid "va_list" msgstr "" #: xml/gcut-test-utils.xml:59(parameter) xml/gcut-public.xml:39(parameter) #: xml/gcut-process.xml:31(parameter) xml/gcut-egg.xml:30(parameter) #: xml/cutter.xml:38(parameter) msgid " args" msgstr "" #: xml/gcut-test-utils.xml:60(link) xml/gcut-test-utils.xml:505(primary) #: xml/api-index-full.xml:582(link) xml/api-index-1.0.5.xml:75(link) msgid "gcut_take_new_hash_table_string_string" msgstr "" #: xml/gcut-test-utils.xml:63(link) xml/gcut-test-utils.xml:529(primary) #: xml/api-index-full.xml:421(link) xml/api-index-1.1.6.xml:24(link) msgid "gcut_get_fixture_data" msgstr "" #: xml/gcut-test-utils.xml:22(synopsis) #, no-wrap msgid "" " * ();\n" " * ();\n" "const * (,\n" " );\n" " * ();\n" " * ();\n" " * ();\n" " * (,\n" " );\n" " * (,\n" " ,\n" " );\n" " * (,\n" " ,\n" " );\n" " * (,\n" " );\n" " * ();\n" "const * (,\n" " ,\n" " );\n" "const * (,\n" " ,\n" " );\n" "const * (,\n" " );\n" "#define (value,\n" " ...)\n" "const * ();\n" "#define (object,\n" " ...)\n" " ();\n" " ();\n" " * (,\n" " );\n" " * \n" " (,\n" " );\n" " * \n" " (,\n" " );\n" " * (,\n" " );\n" msgstr "" #: xml/gcut-test-utils.xml:70(para) xml/cut-test-utils.xml:65(para) msgid "" "To write tests, you need to write codes that set up/tear down test " "environment, prepare expected and actual values and so on. Cutter provides " "test utilities to you write your tests more easily." msgstr "" "テストを書くためには、テスト環境を前処理・後処理するコードや、検証する結果を" "準備するコードなどたくさんのコードを書く必要があります。Cutterはもっと簡単に" "テストを書くためにユーティリティを提供します。" #: xml/gcut-test-utils.xml:76(para) msgid "The utilities work with GLib." msgstr "このユーティリティはGLibと一緒に使います。" #: xml/gcut-test-utils.xml:83(title) msgid "gcut_take_object ()" msgstr "" #: xml/gcut-test-utils.xml:85(programlisting) #, no-wrap msgid "GObject * gcut_take_object (GObject *object);" msgstr "" #: xml/gcut-test-utils.xml:86(para) msgid "" "Passes ownership of object to Cutter and returns " "object." msgstr "" "objectの所有権をCutterに渡し、objectを返します。" #: xml/gcut-test-utils.xml:89(term) xml/gcut-test-utils.xml:420(term) #: xml/gcut-public.xml:60(term) xml/gcut-object.xml:79(term) #: xml/gcut-object.xml:96(term) xml/cut-test-utils.xml:86(term) msgid "object :" msgstr "" #: xml/gcut-test-utils.xml:90(simpara) msgid "" "the GObject to be owned by " "Cutter." msgstr "" "Cutterに所有権を渡すGObject。" #: xml/gcut-test-utils.xml:92(simpara) msgid "" "object owned by Cutter. Don't g_object_unref() it." msgstr "" "Cutterが所有権をもつobjectg_object_unref()しないでください。" #: xml/gcut-test-utils.xml:95(para) xml/gcut-test-utils.xml:111(para) #: xml/gcut-test-utils.xml:132(para) xml/gcut-test-utils.xml:286(para) #: xml/gcut-test-utils.xml:441(para) xml/gcut-assertions.xml:159(para) #: xml/gcut-assertions.xml:198(para) xml/gcut-assertions.xml:270(para) #: xml/gcut-assertions.xml:309(para) xml/gcut-assertions.xml:328(para) #: xml/gcut-assertions.xml:514(para) xml/gcut-assertions.xml:564(para) #: xml/cutter.xml:293(para) xml/cut-helper.xml:433(para) msgid "Since 1.0.3" msgstr "1.0.3から" #: xml/gcut-test-utils.xml:97(title) msgid "gcut_take_error ()" msgstr "" #: xml/gcut-test-utils.xml:99(programlisting) #, no-wrap msgid "GError * gcut_take_error (GError *error);" msgstr "" #: xml/gcut-test-utils.xml:100(para) msgid "" "Passes ownership of error to Cutter and returns a " "error itself." msgstr "" "Cutterにerrorの所有権を渡し、errorそれ自身を返します。" #: xml/gcut-test-utils.xml:105(simpara) msgid "" "the GError to be owned by " "Cutter." msgstr "" "Cutterに所有権を渡すGError。" #: xml/gcut-test-utils.xml:107(simpara) msgid "" "a GError owned by Cutter. Don't " "g_error_free() it." msgstr "" "Cutterが所有権をもつGError。" "g_error_free()しな" "いでください。" #: xml/gcut-test-utils.xml:113(title) msgid "gcut_take_list ()" msgstr "" #: xml/gcut-test-utils.xml:115(programlisting) #, no-wrap msgid "" "const GList * gcut_take_list (const GList *list,\n" " CutDestroyFunction destroy_function);" msgstr "" #: xml/gcut-test-utils.xml:117(para) msgid "" "Passes ownership of list to Cutter and returns " "list itself." msgstr "" "listの所有権をCutterに渡し、listそれ自身を返します。" #: xml/gcut-test-utils.xml:121(term) xml/gcut-test-utils.xml:438(term) #: xml/gcut-test-utils.xml:450(term) xml/gcut-public.xml:93(term) #: xml/gcut-list.xml:119(term) xml/gcut-list.xml:160(term) #: xml/gcut-list.xml:195(term) xml/gcut-list.xml:230(term) #: xml/gcut-list.xml:245(term) xml/gcut-list.xml:265(term) #: xml/gcut-list.xml:285(term) xml/gcut-list.xml:321(term) #: xml/gcut-list.xml:357(term) xml/gcut-list.xml:393(term) #: xml/gcut-list.xml:409(term) xml/gcut-list.xml:426(term) #: xml/gcut-list.xml:446(term) msgid "list :" msgstr "" #: xml/gcut-test-utils.xml:122(simpara) msgid "" "the GList to be owned by Cutter." msgstr "" "Cutterに所有権を渡すGList。" #: xml/gcut-test-utils.xml:124(term) xml/cut-test-utils.xml:89(term) msgid "destroy_function :" msgstr "" #: xml/gcut-test-utils.xml:125(simpara) msgid "" "the destroy function that destroys the elements of list, or NULL." msgstr "" "listの各要素を破棄する関数、またはNULL。" #: xml/gcut-test-utils.xml:128(simpara) msgid "" "a GList owned by Cutter. Don't " "g_list_free() it." msgstr "" "Cutterが所有権を持つGListg_list_free()しないでくだ" "さい。" #: xml/gcut-test-utils.xml:134(title) msgid "gcut_take_hash_table ()" msgstr "" #: xml/gcut-test-utils.xml:136(programlisting) #, no-wrap msgid "GHashTable * gcut_take_hash_table (GHashTable *hash_table);" msgstr "" #: xml/gcut-test-utils.xml:137(para) msgid "" "Passes ownership of hash_table to Cutter and returns " "hash_table itself." msgstr "" "hash_tableの所有権をCutterに渡し、" "hash_tableそれ自身を返します。" #: xml/gcut-test-utils.xml:141(term) xml/gcut-public.xml:112(term) msgid "hash_table :" msgstr "" #: xml/gcut-test-utils.xml:142(simpara) msgid "" "the GHashTable to be owned " "by Cutter." msgstr "" "Cutterに所有権を渡すGHashTable。" #: xml/gcut-test-utils.xml:144(simpara) msgid "" "a GHashTable owned by " "Cutter. Don't g_hash_table_unref() it." msgstr "" "Cutterが所有権をもつGHashTableg_hash_table_unref()しないでください。" #: xml/gcut-test-utils.xml:148(para) xml/gcut-test-utils.xml:477(para) #: xml/gcut-assertions.xml:499(para) xml/gcut-assertions.xml:599(para) #: xml/cutter.xml:347(para) xml/cutter.xml:388(para) xml/cutter.xml:401(para) #: xml/cut-multi-process.xml:115(para) xml/cut-multi-process.xml:140(para) #: xml/cut-multi-process.xml:156(para) xml/cut-multi-process.xml:171(para) #: xml/cut-multi-process.xml:183(para) xml/cut-multi-process.xml:199(para) #: xml/cut-multi-process.xml:215(para) xml/cut-multi-process.xml:230(para) #: xml/cut-multi-process.xml:244(para) xml/cut-multi-process.xml:261(para) #: xml/cut-multi-process.xml:276(para) xml/cut-multi-process.xml:294(para) #: xml/cut-multi-process.xml:309(para) xml/cut-multi-process.xml:325(para) #: xml/cut-multi-process.xml:374(para) xml/cut-multi-process.xml:391(para) #: xml/cut-multi-process.xml:408(para) xml/cut-multi-process.xml:427(para) #: xml/cut-multi-process.xml:442(para) xml/cut-multi-process.xml:459(para) #: xml/cut-multi-process.xml:474(para) xml/cut-multi-process.xml:491(para) #: xml/cut-multi-process.xml:505(para) xml/cut-multi-process.xml:519(para) #: xml/cut-multi-process.xml:534(para) xml/cut-multi-process.xml:551(para) #: xml/cut-multi-process.xml:572(para) xml/cut-multi-process.xml:584(para) #: xml/cut-multi-process.xml:599(para) xml/cut-multi-process.xml:615(para) #: xml/cut-multi-process.xml:628(para) xml/cut-multi-process.xml:644(para) msgid "Since 1.0.4" msgstr "1.0.4から" #: xml/gcut-test-utils.xml:150(title) msgid "gcut_take_string ()" msgstr "" #: xml/gcut-test-utils.xml:152(programlisting) #, no-wrap msgid "GString * gcut_take_string (GString *string);" msgstr "" #: xml/gcut-test-utils.xml:153(para) xml/cut-test-utils.xml:115(para) msgid "" "Passes ownership of string to Cutter and returns " "string itself." msgstr "" "stringの所有権をCutterに渡し、stringそれ自身を返します。" #: xml/gcut-test-utils.xml:158(simpara) msgid "" "the GString to be owned by " "Cutter." msgstr "" "Cutterに所有権を渡すGString。" #: xml/gcut-test-utils.xml:160(simpara) xml/gcut-test-utils.xml:175(simpara) msgid "" "a GString owned by Cutter. " "Don't g_string_free() it." msgstr "" "Cutterが所有権を持つGString。" "g_string_free()し" "ないでください。" #: xml/gcut-test-utils.xml:164(para) xml/gcut-test-utils.xml:179(para) #: xml/gcut-test-utils.xml:549(para) xml/gcut-process.xml:724(para) #: xml/gcut-process.xml:740(para) xml/gcut-glib-event-loop.xml:69(para) #: xml/gcut-event-loop.xml:166(para) xml/gcut-event-loop.xml:187(para) #: xml/gcut-event-loop.xml:198(para) xml/gcut-event-loop.xml:230(para) #: xml/gcut-event-loop.xml:257(para) xml/gcut-event-loop.xml:292(para) #: xml/gcut-event-loop.xml:319(para) xml/gcut-event-loop.xml:354(para) #: xml/gcut-event-loop.xml:377(para) xml/gcut-event-loop.xml:408(para) #: xml/gcut-event-loop.xml:426(para) xml/cut-test-utils.xml:352(para) #: xml/cut-test-utils.xml:402(para) msgid "Since 1.1.6" msgstr "1.1.6から" #: xml/gcut-test-utils.xml:166(title) msgid "gcut_take_new_string ()" msgstr "" #: xml/gcut-test-utils.xml:168(programlisting) #, no-wrap msgid "GString * gcut_take_new_string (const gchar *string);" msgstr "" #: xml/gcut-test-utils.xml:169(para) msgid "" "Creates a GString object from " "passed string." msgstr "" "渡された文字列からGStringを作成" "します。" #: xml/gcut-test-utils.xml:173(simpara) msgid "" "the string. It can be NULL." msgstr "" "文字列。NULLも可。" #: xml/gcut-test-utils.xml:181(title) msgid "gcut_list_new ()" msgstr "" #: xml/gcut-test-utils.xml:183(programlisting) #, no-wrap msgid "" "GList * gcut_list_new (const gpointer element,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:185(para) msgid "Creates a list from passed elements." msgstr "渡された要素を含むリストを作ります。" #: xml/gcut-test-utils.xml:190(programlisting) #, no-wrap msgid "" "\n" "GCutEgg *echo_egg, *cat_egg;\n" "\n" "echo_egg = gcut_egg_new(\"echo\", \"Hello\", NULL);\n" "cat_egg = gcut_egg_new(\"cat\", \"/etc/hosts\", NULL);\n" "egg_list = gcut_list_new(echo_egg, cat_egg, NULL);\n" msgstr "" #: xml/gcut-test-utils.xml:198(term) msgid "element :" msgstr "" #: xml/gcut-test-utils.xml:199(simpara) msgid "the first gpointer." msgstr "最初のgpointer。" #: xml/gcut-test-utils.xml:202(simpara) msgid "" "remaining elements in list. NULL-terminate." msgstr "" "パスの残りの要素。NULL" "終端。" #: xml/gcut-test-utils.xml:204(simpara) msgid "" "a newly-allocated GList that " "contains passed elements." msgstr "" "新しく割り当てられたGList。渡され" "た要素を持ちます。" #: xml/gcut-test-utils.xml:208(para) xml/gcut-test-utils.xml:430(para) #: xml/gcut-test-utils.xml:453(para) xml/gcut-data.xml:572(para) #: xml/cut-test-utils.xml:467(para) xml/cut-helper.xml:548(para) #: xml/cut-helper.xml:566(para) xml/cut-assertions.xml:2189(para) msgid "Since 1.1.1" msgstr "1.1.1から" #: xml/gcut-test-utils.xml:210(title) msgid "gcut_list_int_new ()" msgstr "" #: xml/gcut-test-utils.xml:212(programlisting) #, no-wrap msgid "" "GList * gcut_list_int_new (guint n,\n" " gint value,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:215(para) msgid "Creates a list from passed integer values." msgstr "渡された整数からリストを作ります。" #: xml/gcut-test-utils.xml:220(programlisting) #, no-wrap msgid "" "\n" "gcut_list_int_new(3, -10, 1, 29); -> (-10, 1, 29)\n" msgstr "" #: xml/gcut-test-utils.xml:224(term) xml/gcut-test-utils.xml:253(term) #: xml/gcut-test-utils.xml:318(term) xml/gcut-test-utils.xml:348(term) msgid "n :" msgstr "" #: xml/gcut-test-utils.xml:225(simpara) xml/gcut-test-utils.xml:319(simpara) msgid "the number of integer values." msgstr "整数の数。" #: xml/gcut-test-utils.xml:227(term) xml/gcut-test-utils.xml:256(term) #: xml/gcut-test-utils.xml:276(term) xml/gcut-test-utils.xml:321(term) #: xml/gcut-test-utils.xml:351(term) xml/gcut-test-utils.xml:371(term) #: xml/gcut-test-utils.xml:389(term) xml/cut-console.xml:169(term) msgid "value :" msgstr "" #: xml/gcut-test-utils.xml:228(simpara) xml/gcut-test-utils.xml:322(simpara) msgid "the first integer value." msgstr "最初の整数値。" #: xml/gcut-test-utils.xml:231(simpara) msgid "remaining integer values in list." msgstr "リストの残りの整数値。" #: xml/gcut-test-utils.xml:233(simpara) msgid "" "a newly-allocated GList that " "contains passed integer values and must be freed with g_list_free()." msgstr "" "渡された整数を含むGListg_list_free()で開放するこ" "と。" #: xml/gcut-test-utils.xml:237(para) xml/gcut-test-utils.xml:267(para) #: xml/gcut-test-utils.xml:331(para) xml/gcut-test-utils.xml:361(para) #: xml/gcut-string.xml:59(para) xml/gcut-string.xml:74(para) #: xml/gcut-process.xml:265(para) xml/gcut-process.xml:292(para) #: xml/gcut-process.xml:306(para) xml/gcut-process.xml:324(para) #: xml/gcut-process.xml:343(para) xml/gcut-process.xml:358(para) #: xml/gcut-process.xml:373(para) xml/gcut-process.xml:388(para) #: xml/gcut-process.xml:402(para) xml/gcut-process.xml:422(para) #: xml/gcut-process.xml:439(para) xml/gcut-process.xml:457(para) #: xml/gcut-process.xml:473(para) xml/gcut-process.xml:501(para) #: xml/gcut-process.xml:523(para) xml/gcut-process.xml:549(para) #: xml/gcut-process.xml:569(para) xml/gcut-process.xml:582(para) #: xml/gcut-process.xml:595(para) xml/gcut-process.xml:611(para) #: xml/gcut-process.xml:627(para) xml/gcut-process.xml:643(para) #: xml/gcut-process.xml:659(para) xml/gcut-process.xml:675(para) #: xml/gcut-process.xml:692(para) xml/gcut-process.xml:710(para) #: xml/gcut-process.xml:769(para) xml/gcut-process.xml:798(para) #: xml/gcut-process.xml:826(para) xml/gcut-process.xml:847(para) #: xml/gcut-data.xml:335(para) xml/gcut-assertions.xml:873(para) #: xml/cut-test-utils.xml:451(para) xml/cut-helper.xml:588(para) #: xml/cut-assertions.xml:2039(para) xml/cut-assertions.xml:2084(para) msgid "Since 1.1.5" msgstr "1.1.5から" #: xml/gcut-test-utils.xml:239(title) msgid "gcut_list_uint_new ()" msgstr "" #: xml/gcut-test-utils.xml:241(programlisting) #, no-wrap msgid "" "GList * gcut_list_uint_new (guint n,\n" " guint value,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:244(para) msgid "Creates a list from passed unsigned integer values." msgstr "渡された符号無し整数からリストを作ります。" #: xml/gcut-test-utils.xml:249(programlisting) #, no-wrap msgid "" "\n" "gcut_list_uint_new(3, 0, 1, 2); -> (0, 1, 2)\n" msgstr "" #: xml/gcut-test-utils.xml:254(simpara) xml/gcut-test-utils.xml:349(simpara) msgid "the number of unsigned integer values." msgstr "符号無し符号整数の数。" #: xml/gcut-test-utils.xml:257(simpara) xml/gcut-test-utils.xml:352(simpara) msgid "the first unsigned integer value." msgstr "最初の符号無し符号整数値。" #: xml/gcut-test-utils.xml:260(simpara) msgid "remaining unsigned integer values in list." msgstr "リストの残りの符号無し符号整数値。" #: xml/gcut-test-utils.xml:262(simpara) msgid "" "a newly-allocated GList that " "contains passed unsigned integer values and must be freed with g_list_free()." msgstr "" "渡された符号無し整数を含むGList。" "g_list_free()で開放" "すること。" #: xml/gcut-test-utils.xml:269(title) msgid "gcut_list_string_new ()" msgstr "" #: xml/gcut-test-utils.xml:271(programlisting) #, no-wrap msgid "" "GList * gcut_list_string_new (const gchar *value,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:273(para) msgid "Creates a list from passed strings." msgstr "渡された文字列からリストを作ります。" #: xml/gcut-test-utils.xml:277(simpara) xml/gcut-test-utils.xml:372(simpara) msgid "the first string." msgstr "最初の文字列。" #: xml/gcut-test-utils.xml:280(simpara) xml/gcut-test-utils.xml:375(simpara) msgid "" "remaining strings in list. NULL-terminate." msgstr "" "リストの残りの文字列。NULL終端。" #: xml/gcut-test-utils.xml:282(simpara) msgid "" "a newly-allocated GList that " "contains passed strings and must be freed with gcut_list_string_free()." msgstr "" "渡された文字列を含むGListgcut_list_string_free()で開放すること。" #: xml/gcut-test-utils.xml:288(title) msgid "gcut_list_string_new_array ()" msgstr "" #: xml/gcut-test-utils.xml:290(programlisting) #, no-wrap msgid "GList * gcut_list_string_new_array (const gchar **strings);" msgstr "" #: xml/gcut-test-utils.xml:291(para) msgid "Creates a list from passed string array." msgstr "渡された文字列配列からリストを作ります。" #: xml/gcut-test-utils.xml:294(term) xml/gcut-test-utils.xml:404(term) #: xml/cut-test-utils.xml:207(term) xml/cut-helper.xml:479(term) msgid "strings :" msgstr "" #: xml/gcut-test-utils.xml:295(simpara) xml/gcut-test-utils.xml:405(simpara) msgid "" "the string array. NULL-" "terminate." msgstr "" "文字列の配列。NULL終" "端。" #: xml/gcut-test-utils.xml:297(simpara) msgid "" "a newly-allocated GList that " "contains passed string array and must be freed with gcut_list_string_free()." msgstr "" "渡された文字列配列と同じ内容のGListgcut_list_string_free()で開放すること。" #: xml/gcut-test-utils.xml:303(title) msgid "gcut_take_new_list_int ()" msgstr "" #: xml/gcut-test-utils.xml:305(programlisting) #, no-wrap msgid "" "const GList * gcut_take_new_list_int (guint n,\n" " gint value,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:308(para) msgid "Creates a list from passed integer values that is owned by Cutter." msgstr "" "渡された整数からリストを作ります。作られたリストはCutterが所有権を持ちます。" #: xml/gcut-test-utils.xml:314(programlisting) #, no-wrap msgid "" "\n" "gcut_take_new_list_int(3, -10, 1, 29); -> (-10, 1, 29)\n" msgstr "" #: xml/gcut-test-utils.xml:325(simpara) xml/gcut-test-utils.xml:355(simpara) msgid "remaining strings in list." msgstr "リストの残りの文字列。" #: xml/gcut-test-utils.xml:327(simpara) msgid "" "a newly-allocated GList that " "contains passed integer values and is owned by Cutter." msgstr "" "渡された整数と同じ内容のGList。" "Cutterが所有権を持ちます。" #: xml/gcut-test-utils.xml:333(title) msgid "gcut_take_new_list_uint ()" msgstr "" #: xml/gcut-test-utils.xml:335(programlisting) #, no-wrap msgid "" "const GList * gcut_take_new_list_uint (guint n,\n" " guint value,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:338(para) msgid "" "Creates a list from passed unsigned integer values that is owned by Cutter." msgstr "" "渡された符号無し整数からリストを作ります。作られたリストはCutterが所有権を持" "ちます。" #: xml/gcut-test-utils.xml:344(programlisting) #, no-wrap msgid "" "\n" "gcut_take_new_list_uint(3, 0, 1, 2); -> (0, 1, 2)\n" msgstr "" #: xml/gcut-test-utils.xml:357(simpara) msgid "" "a newly-allocated GList that " "contains passed unsigned integer values and is owned by Cutter." msgstr "" "渡された符号無し整数と同じ内容のGList。Cutterが所有権を持ちます。" #: xml/gcut-test-utils.xml:363(title) msgid "gcut_take_new_list_string ()" msgstr "" #: xml/gcut-test-utils.xml:365(programlisting) #, no-wrap msgid "" "const GList * gcut_take_new_list_string (const gchar *value,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:367(para) msgid "Creates a list from passed strings that is owned by Cutter." msgstr "" "渡された文字列からリストを作ります。作られたリストはCutterが所有権を持ちま" "す。" #: xml/gcut-test-utils.xml:377(simpara) msgid "" "a newly-allocated GList that " "contains passed strings and is owned by Cutter." msgstr "" "渡された文字列と同じ内容のGList。" "Cutterが所有権を持ちます。" #: xml/gcut-test-utils.xml:383(title) msgid "gcut_take_new_list_string_backward_compatibility()" msgstr "" #: xml/gcut-test-utils.xml:385(programlisting) #, no-wrap msgid "#define gcut_take_new_list_string_backward_compatibility(value, ...)" msgstr "" #: xml/gcut-test-utils.xml:386(para) msgid "" "gcut_take_new_list_string_backward_compatibility is " "deprecated and should not be used in newly-written code." msgstr "" "gcut_take_new_list_string_backward_compatibilityは非推奨で" "す。新しいコードでは使わないでください。" #: xml/gcut-test-utils.xml:397(title) msgid "gcut_take_new_list_string_array ()" msgstr "" #: xml/gcut-test-utils.xml:399(programlisting) #, no-wrap msgid "const GList * gcut_take_new_list_string_array (const gchar **strings);" msgstr "" #: xml/gcut-test-utils.xml:400(para) msgid "Creates a list from passed string array that is owned by Cutter." msgstr "渡された文字列の配列からリストを作ります。Cutterが所有権を持ちます。" #: xml/gcut-test-utils.xml:407(simpara) msgid "" "a newly-allocated GList that " "contains passed string array and is owned by Cutter." msgstr "" "渡された文字列の配列と同じ内容のGList。Cutterが所有。" #: xml/gcut-test-utils.xml:413(title) msgid "gcut_take_new_list_object()" msgstr "" #: xml/gcut-test-utils.xml:415(programlisting) #, no-wrap msgid "#define gcut_take_new_list_object(object, ...)" msgstr "" #: xml/gcut-test-utils.xml:416(para) msgid "Creates a list from passed objects that is owned by Cutter." msgstr "" "渡されたオブジェクトからリストを作ります。作られたリストはCutterが所有権を持" "ちます。" #: xml/gcut-test-utils.xml:421(simpara) msgid "the first GObject." msgstr "最初のGObject。" #: xml/gcut-test-utils.xml:424(simpara) msgid "" "remaining objects in list. NULL-terminate." msgstr "" "リストの残りのオブジェクト。NULL終端。" #: xml/gcut-test-utils.xml:426(simpara) msgid "" "a newly-allocated GList that " "contains passed objects and is owned by Cutter." msgstr "" "新しく割り当てられたGList。リスト" "には渡されたオブジェクトが含まれます。Cutterが所有権を持ちます。" #: xml/gcut-test-utils.xml:432(title) msgid "gcut_list_string_free ()" msgstr "" #: xml/gcut-test-utils.xml:434(programlisting) #, no-wrap msgid "void gcut_list_string_free (GList *list);" msgstr "" #: xml/gcut-test-utils.xml:435(para) msgid "Frees list and contained strings." msgstr "" "listlist内にある文字列を開放" "します。" #: xml/gcut-test-utils.xml:439(simpara) msgid "the list that contains strings to be freed." msgstr "開放する文字列のリスト。" #: xml/gcut-test-utils.xml:443(title) msgid "gcut_list_object_free ()" msgstr "" #: xml/gcut-test-utils.xml:445(programlisting) #, no-wrap msgid "void gcut_list_object_free (GList *list);" msgstr "" #: xml/gcut-test-utils.xml:446(para) msgid "" "Frees list and contained objects. It's safe that " "list contains NULL." msgstr "" "listと中のオブジェクトを破棄します。listNULLが含ま" "れていても大丈夫です。" #: xml/gcut-test-utils.xml:451(simpara) msgid "" "the list that contains GObject's to be unrefed." msgstr "" "リファレンスを減らしたいGObject" "を含んだリスト。" #: xml/gcut-test-utils.xml:455(title) msgid "gcut_hash_table_string_string_new ()" msgstr "" #: xml/gcut-test-utils.xml:457(programlisting) #, no-wrap msgid "" "GHashTable * gcut_hash_table_string_string_new (const gchar *key,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:459(para) xml/gcut-test-utils.xml:484(para) msgid "" "Creates a hash table that has string key and string value from passed key/" "value pairs." msgstr "" "引数で指定されたキーと値のペアから、文字列のキーと値を持つハッシュテーブルを" "作成します。" #: xml/gcut-test-utils.xml:463(term) xml/gcut-test-utils.xml:488(term) #: xml/gcut-test-utils.xml:514(term) xml/gcut-key-file.xml:57(term) #: xml/gcut-key-file.xml:85(term) msgid "key :" msgstr "" #: xml/gcut-test-utils.xml:464(simpara) xml/gcut-test-utils.xml:489(simpara) #: xml/gcut-test-utils.xml:515(simpara) msgid "The first key string." msgstr "最初のキー文字列。" #: xml/gcut-test-utils.xml:467(simpara) xml/gcut-test-utils.xml:492(simpara) msgid "" "A NULL-terminated list " "of rest arguments. The first item is the string value of the first key, " "followed optionally by more key/value pairs. It must end with NULL." msgstr "" "残りの引数のNULL終端の" "リスト。まず、最初のキーの文字列値を指定します。続いて、任意の数だけキー・値" "のペアを指定します。最後にNULLを指定しなければいけません。" #: xml/gcut-test-utils.xml:472(simpara) xml/gcut-test-utils.xml:497(simpara) msgid "" "a newly-allocated GHashTable that contains passed key/value pairs and must be freed with g_hash_table_unref()." msgstr "" "渡されたキー・値を持つGHashTableg_hash_table_unref()で開放してください。" #: xml/gcut-test-utils.xml:479(title) msgid "gcut_hash_table_string_string_new_va_list ()" msgstr "" #: xml/gcut-test-utils.xml:481(programlisting) #, no-wrap msgid "" "GHashTable * gcut_hash_table_string_string_new_va_list\n" " (const gchar *key,\n" " va_list args);" msgstr "" #: xml/gcut-test-utils.xml:491(term) xml/gcut-public.xml:176(term) #: xml/gcut-process.xml:318(term) xml/gcut-egg.xml:289(term) #: xml/cutter.xml:430(term) msgid "args :" msgstr "" #: xml/gcut-test-utils.xml:504(title) msgid "gcut_take_new_hash_table_string_string ()" msgstr "" #: xml/gcut-test-utils.xml:506(programlisting) #, no-wrap msgid "" "GHashTable * gcut_take_new_hash_table_string_string\n" " (const gchar *key,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:509(para) msgid "" "Creates a hash table that has string key and string value from passed key/" "value pairs. The created hash table is owned by Cutter. So don't g_hash_table_unref() it." msgstr "" "渡されたキー・値のペアから文字列のキー・値を持つハッシュテーブルを作成しま" "す。作成されたハッシュテーブルはCutterが所有権を持つので、g_hash_table_unref()を呼ばない" "でください。" #: xml/gcut-test-utils.xml:518(simpara) msgid "" "A NULL-terminated list " "of rest arguments. The string value of the first key, followed optionally by " "more key/value pairs. It must end with NULL." msgstr "" "残りの引数のNULL終端の" "リスト。まず、最初のキーの文字列値を指定します。続いて、任意の数だけキー・値" "のペアを指定します。最後にNULLを指定しなければいけません。" #: xml/gcut-test-utils.xml:522(simpara) msgid "" "a newly-allocated GHashTable that contains passed key/value pairs." msgstr "" "渡されたキー・値を持つGHashTable。" #: xml/gcut-test-utils.xml:528(title) msgid "gcut_get_fixture_data ()" msgstr "" #: xml/gcut-test-utils.xml:530(programlisting) #, no-wrap msgid "" "GString * gcut_get_fixture_data (const gchar *path,\n" " ...);" msgstr "" #: xml/gcut-test-utils.xml:532(para) msgid "" "Reads the fixture data at \"path/...\" and returns it " "as a GString that is owned by " "Cutter. The description of cut_build_fixture_path() shows how the " "fixture data path is determined." msgstr "" "path/...\"にあるフィクスチャデータを読み込み、GStringとして返します。GStringは" "Cutterが所持します。cut_build_fixture_data_path()の説明にはフィク" "スチャデータのパスがどのように決定されるかが書かれています。" #: xml/gcut-test-utils.xml:539(simpara) xml/cut-test-utils.xml:319(simpara) #: xml/cut-test-utils.xml:342(simpara) xml/cut-test-utils.xml:365(simpara) #: xml/cut-test-utils.xml:392(simpara) xml/cut-assertions.xml:2164(simpara) msgid "a first element of the path to the fixture data." msgstr "フィクスチャデータのパスの最初の要素。" #: xml/gcut-test-utils.xml:542(simpara) xml/cut-test-utils.xml:345(simpara) #: xml/cut-test-utils.xml:395(simpara) msgid "" "remaining elements in path. NULL-terminate is required." msgstr "" "パスの残りの要素。NULL" "終端が必須です。" #: xml/gcut-test-utils.xml:545(simpara) msgid "" "a content of the fixture data as GString owend by Cutter. Don't free it." msgstr "" "フィクスチャデータの内容が入ったGString。GStringはCutterが所持します。開放しないでください。" #: xml/gcut-string.xml:7(refentrytitle) xml/gcut-string.xml:14(refname) #: xml/api-index-full.xml:562(link) xml/api-index-full.xml:563(link) #: xml/api-index-1.1.5.xml:55(link) xml/api-index-1.1.5.xml:56(link) msgid "Assertion Utilities for GString" msgstr "GString用の検証ユーティリティ" #: xml/gcut-string.xml:15(refpurpose) msgid "" "Utilities to write assertions related to more easily." msgstr "" "に関する検証をもっと簡単に書" "くためのユーティリティ。" #: xml/gcut-string.xml:22(link) xml/gcut-string.xml:43(primary) #: xml/api-index-full.xml:562(link) xml/api-index-1.1.5.xml:55(link) msgid "gcut_string_equal" msgstr "" #: xml/gcut-string.xml:22(parameter) msgid "const *string1" msgstr "" #: xml/gcut-string.xml:23(parameter) msgid "const *string2" msgstr "" #: xml/gcut-string.xml:24(link) xml/gcut-string.xml:62(primary) #: xml/api-index-full.xml:563(link) xml/api-index-1.1.5.xml:56(link) msgid "gcut_string_inspect" msgstr "" #: xml/gcut-string.xml:24(parameter) msgid "const *string" msgstr "" #: xml/gcut-string.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " );\n" " * ();\n" msgstr "" #: xml/gcut-string.xml:34(para) msgid "" "The utilities help you to write assertions that are related to GString." msgstr "" "このユーティリティはGStringに関" "する検証の作成を補助します。" #: xml/gcut-string.xml:42(title) msgid "gcut_string_equal ()" msgstr "" #: xml/gcut-string.xml:44(programlisting) #, no-wrap msgid "" "gboolean gcut_string_equal (const GString *string1,\n" " const GString *string2);" msgstr "" #: xml/gcut-string.xml:46(para) msgid "" "Compares two GString, " "string1 and string2." msgstr "" "ふたつのGString、" "string1string2を比較します。" #: xml/gcut-string.xml:49(term) xml/cut-helper.xml:494(term) msgid "string1 :" msgstr "" #: xml/gcut-string.xml:50(simpara) xml/gcut-string.xml:53(simpara) msgid "a GString to be compared." msgstr "比較するGString。" #: xml/gcut-string.xml:52(term) xml/cut-helper.xml:497(term) msgid "string2 :" msgstr "" #: xml/gcut-string.xml:55(simpara) msgid "" "TRUE if both of " "string1 and string2 have the " "same content, FALSE " "otherwise." msgstr "" "string1string2が同じ内容なら" "TRUE、そうでなれば" "FALSE。" #: xml/gcut-string.xml:61(title) msgid "gcut_string_inspect ()" msgstr "" #: xml/gcut-string.xml:63(programlisting) #, no-wrap msgid "gchar * gcut_string_inspect (const GString *string);" msgstr "" #: xml/gcut-string.xml:64(para) msgid "" "Inspects string. The returned string should be freed " "when no longer needed." msgstr "" "stringの詳細を返します。返された文字列が必要なくなった" "ときは開放してください。" #: xml/gcut-string.xml:69(simpara) msgid "a GString value." msgstr "GStringの値。" #: xml/gcut-string.xml:71(simpara) msgid "inspected string as a string." msgstr "stringの詳細を示した文字列。" #: xml/gcut-string-io-channel.xml:7(refentrytitle) #: xml/gcut-string-io-channel.xml:14(refname) xml/api-index-full.xml:564(link) #: xml/api-index-full.xml:565(link) xml/api-index-full.xml:566(link) #: xml/api-index-full.xml:567(link) xml/api-index-full.xml:568(link) #: xml/api-index-full.xml:569(link) xml/api-index-full.xml:570(link) #: xml/api-index-full.xml:571(link) xml/api-index-full.xml:572(link) #: xml/api-index-full.xml:573(link) xml/api-index-full.xml:574(link) #: xml/api-index-full.xml:575(link) xml/api-index-full.xml:576(link) msgid "gcut-string-io-channel" msgstr "" #: xml/gcut-string-io-channel.xml:21(returnvalue) #: xml/gcut-string-io-channel.xml:22(type) #: xml/gcut-string-io-channel.xml:23(type) #: xml/gcut-string-io-channel.xml:25(type) #: xml/gcut-string-io-channel.xml:27(type) #: xml/gcut-string-io-channel.xml:29(type) #: xml/gcut-string-io-channel.xml:30(type) #: xml/gcut-string-io-channel.xml:33(type) #: xml/gcut-string-io-channel.xml:35(type) #: xml/gcut-string-io-channel.xml:38(type) #: xml/gcut-string-io-channel.xml:40(type) #: xml/gcut-string-io-channel.xml:43(type) #: xml/gcut-string-io-channel.xml:45(type) #: xml/gcut-process.xml:60(returnvalue) xml/gcut-process.xml:61(returnvalue) #: xml/gcut-process.xml:62(returnvalue) xml/gcut-event-loop.xml:31(type) #: xml/gcut-egg.xml:55(returnvalue) xml/gcut-egg.xml:56(returnvalue) #: xml/gcut-egg.xml:57(returnvalue) msgid "GIOChannel" msgstr "" #: xml/gcut-string-io-channel.xml:21(link) #: xml/gcut-string-io-channel.xml:59(primary) xml/api-index-full.xml:571(link) msgid "gcut_string_io_channel_new" msgstr "" #: xml/gcut-string-io-channel.xml:21(parameter) msgid "const *initial" msgstr "" #: xml/gcut-string-io-channel.xml:22(link) #: xml/gcut-string-io-channel.xml:71(primary) xml/api-index-full.xml:570(link) msgid "gcut_string_io_channel_get_string" msgstr "" #: xml/gcut-string-io-channel.xml:22(parameter) #: xml/gcut-string-io-channel.xml:23(parameter) #: xml/gcut-string-io-channel.xml:25(parameter) #: xml/gcut-string-io-channel.xml:27(parameter) #: xml/gcut-string-io-channel.xml:29(parameter) #: xml/gcut-string-io-channel.xml:30(parameter) #: xml/gcut-string-io-channel.xml:33(parameter) #: xml/gcut-string-io-channel.xml:35(parameter) #: xml/gcut-string-io-channel.xml:38(parameter) #: xml/gcut-string-io-channel.xml:40(parameter) #: xml/gcut-string-io-channel.xml:43(parameter) #: xml/gcut-string-io-channel.xml:45(parameter) #: xml/gcut-event-loop.xml:31(parameter) msgid " *channel" msgstr "" #: xml/gcut-string-io-channel.xml:23(link) #: xml/gcut-string-io-channel.xml:83(primary) xml/api-index-full.xml:564(link) msgid "gcut_string_io_channel_clear" msgstr "" #: xml/gcut-string-io-channel.xml:24(returnvalue) #: xml/gcut-string-io-channel.xml:28(type) #: xml/gcut-string-io-channel.xml:29(returnvalue) #: xml/gcut-string-io-channel.xml:31(type) xml/gcut-process.xml:54(type) #: xml/gcut-egg.xml:47(type) xml/gcut-data-helper.xml:39(returnvalue) msgid "gsize" msgstr "" #: xml/gcut-string-io-channel.xml:24(link) #: xml/gcut-string-io-channel.xml:93(primary) xml/api-index-full.xml:565(link) msgid "gcut_string_io_channel_get_buffer_limit" msgstr "" #: xml/gcut-string-io-channel.xml:26(link) #: xml/gcut-string-io-channel.xml:106(primary) #: xml/api-index-full.xml:572(link) msgid "gcut_string_io_channel_set_buffer_limit" msgstr "" #: xml/gcut-string-io-channel.xml:28(parameter) #: xml/gcut-string-io-channel.xml:31(parameter) msgid " limit" msgstr "" #: xml/gcut-string-io-channel.xml:29(link) #: xml/gcut-string-io-channel.xml:121(primary) #: xml/api-index-full.xml:566(link) msgid "gcut_string_io_channel_get_limit" msgstr "" #: xml/gcut-string-io-channel.xml:30(link) #: xml/gcut-string-io-channel.xml:133(primary) #: xml/api-index-full.xml:573(link) msgid "gcut_string_io_channel_set_limit" msgstr "" #: xml/gcut-string-io-channel.xml:32(link) #: xml/gcut-string-io-channel.xml:147(primary) #: xml/api-index-full.xml:569(link) msgid "gcut_string_io_channel_get_read_fail" msgstr "" #: xml/gcut-string-io-channel.xml:34(link) #: xml/gcut-string-io-channel.xml:160(primary) #: xml/api-index-full.xml:576(link) msgid "gcut_string_io_channel_set_read_fail" msgstr "" #: xml/gcut-string-io-channel.xml:36(parameter) msgid " read_fail" msgstr "" #: xml/gcut-string-io-channel.xml:37(link) #: xml/gcut-string-io-channel.xml:175(primary) #: xml/api-index-full.xml:568(link) msgid "gcut_string_io_channel_get_pipe_mode" msgstr "" #: xml/gcut-string-io-channel.xml:39(link) #: xml/gcut-string-io-channel.xml:188(primary) #: xml/api-index-full.xml:575(link) msgid "gcut_string_io_channel_set_pipe_mode" msgstr "" #: xml/gcut-string-io-channel.xml:41(parameter) msgid " pipe_mode" msgstr "" #: xml/gcut-string-io-channel.xml:42(link) #: xml/gcut-string-io-channel.xml:203(primary) #: xml/api-index-full.xml:567(link) msgid "gcut_string_io_channel_get_main_context" msgstr "" #: xml/gcut-string-io-channel.xml:44(link) #: xml/gcut-string-io-channel.xml:216(primary) #: xml/api-index-full.xml:574(link) msgid "gcut_string_io_channel_set_main_context" msgstr "" #: xml/gcut-string-io-channel.xml:46(parameter) msgid " *main_context" msgstr "" #: xml/gcut-string-io-channel.xml:21(synopsis) #, no-wrap msgid "" " * ();\n" " * ();\n" " ();\n" " \n" " ();\n" " \n" " (,\n" " );\n" " ();\n" " (,\n" " );\n" " \n" " ();\n" " \n" " (,\n" " );\n" " \n" " ();\n" " \n" " (,\n" " );\n" " * \n" " ();\n" " \n" " (,\n" " );\n" msgstr "" #: xml/gcut-string-io-channel.xml:58(title) msgid "gcut_string_io_channel_new ()" msgstr "" #: xml/gcut-string-io-channel.xml:60(programlisting) #, no-wrap msgid "GIOChannel * gcut_string_io_channel_new (const gchar *initial);" msgstr "" #: xml/gcut-string-io-channel.xml:63(term) msgid "initial :" msgstr "" #: xml/gcut-string-io-channel.xml:70(title) msgid "gcut_string_io_channel_get_string ()" msgstr "" #: xml/gcut-string-io-channel.xml:72(programlisting) #, no-wrap msgid "GString * gcut_string_io_channel_get_string (GIOChannel *channel);" msgstr "" #: xml/gcut-string-io-channel.xml:75(term) #: xml/gcut-string-io-channel.xml:87(term) #: xml/gcut-string-io-channel.xml:98(term) #: xml/gcut-string-io-channel.xml:112(term) #: xml/gcut-string-io-channel.xml:125(term) #: xml/gcut-string-io-channel.xml:138(term) #: xml/gcut-string-io-channel.xml:152(term) #: xml/gcut-string-io-channel.xml:166(term) #: xml/gcut-string-io-channel.xml:180(term) #: xml/gcut-string-io-channel.xml:194(term) #: xml/gcut-string-io-channel.xml:208(term) #: xml/gcut-string-io-channel.xml:222(term) xml/gcut-event-loop.xml:215(term) msgid "channel :" msgstr "" #: xml/gcut-string-io-channel.xml:82(title) msgid "gcut_string_io_channel_clear ()" msgstr "" #: xml/gcut-string-io-channel.xml:84(programlisting) #, no-wrap msgid "void gcut_string_io_channel_clear (GIOChannel *channel);" msgstr "" #: xml/gcut-string-io-channel.xml:92(title) msgid "gcut_string_io_channel_get_buffer_limit ()" msgstr "" #: xml/gcut-string-io-channel.xml:94(programlisting) #, no-wrap msgid "" "gsize gcut_string_io_channel_get_buffer_limit\n" " (GIOChannel *channel);" msgstr "" #: xml/gcut-string-io-channel.xml:105(title) msgid "gcut_string_io_channel_set_buffer_limit ()" msgstr "" #: xml/gcut-string-io-channel.xml:107(programlisting) #, no-wrap msgid "" "void gcut_string_io_channel_set_buffer_limit\n" " (GIOChannel *channel,\n" " gsize limit);" msgstr "" #: xml/gcut-string-io-channel.xml:115(term) #: xml/gcut-string-io-channel.xml:141(term) msgid "limit :" msgstr "" #: xml/gcut-string-io-channel.xml:120(title) msgid "gcut_string_io_channel_get_limit ()" msgstr "" #: xml/gcut-string-io-channel.xml:122(programlisting) #, no-wrap msgid "gsize gcut_string_io_channel_get_limit (GIOChannel *channel);" msgstr "" #: xml/gcut-string-io-channel.xml:132(title) msgid "gcut_string_io_channel_set_limit ()" msgstr "" #: xml/gcut-string-io-channel.xml:134(programlisting) #, no-wrap msgid "" "void gcut_string_io_channel_set_limit (GIOChannel *channel,\n" " gsize limit);" msgstr "" #: xml/gcut-string-io-channel.xml:146(title) msgid "gcut_string_io_channel_get_read_fail ()" msgstr "" #: xml/gcut-string-io-channel.xml:148(programlisting) #, no-wrap msgid "" "gboolean gcut_string_io_channel_get_read_fail\n" " (GIOChannel *channel);" msgstr "" #: xml/gcut-string-io-channel.xml:159(title) msgid "gcut_string_io_channel_set_read_fail ()" msgstr "" #: xml/gcut-string-io-channel.xml:161(programlisting) #, no-wrap msgid "" "void gcut_string_io_channel_set_read_fail\n" " (GIOChannel *channel,\n" " gboolean read_fail);" msgstr "" #: xml/gcut-string-io-channel.xml:169(term) msgid "read_fail :" msgstr "" #: xml/gcut-string-io-channel.xml:174(title) msgid "gcut_string_io_channel_get_pipe_mode ()" msgstr "" #: xml/gcut-string-io-channel.xml:176(programlisting) #, no-wrap msgid "" "gboolean gcut_string_io_channel_get_pipe_mode\n" " (GIOChannel *channel);" msgstr "" #: xml/gcut-string-io-channel.xml:187(title) msgid "gcut_string_io_channel_set_pipe_mode ()" msgstr "" #: xml/gcut-string-io-channel.xml:189(programlisting) #, no-wrap msgid "" "void gcut_string_io_channel_set_pipe_mode\n" " (GIOChannel *channel,\n" " gboolean pipe_mode);" msgstr "" #: xml/gcut-string-io-channel.xml:197(term) msgid "pipe_mode :" msgstr "" #: xml/gcut-string-io-channel.xml:202(title) msgid "gcut_string_io_channel_get_main_context ()" msgstr "" #: xml/gcut-string-io-channel.xml:204(programlisting) #, no-wrap msgid "" "GMainContext * gcut_string_io_channel_get_main_context\n" " (GIOChannel *channel);" msgstr "" #: xml/gcut-string-io-channel.xml:215(title) msgid "gcut_string_io_channel_set_main_context ()" msgstr "" #: xml/gcut-string-io-channel.xml:217(programlisting) #, no-wrap msgid "" "void gcut_string_io_channel_set_main_context\n" " (GIOChannel *channel,\n" " GMainContext *main_context);" msgstr "" #: xml/gcut-string-io-channel.xml:225(term) msgid "main_context :" msgstr "" #: xml/gcut-public.xml:7(refentrytitle) xml/gcut-public.xml:14(refname) #: xml/api-index-full.xml:307(link) xml/api-index-full.xml:308(link) #: xml/api-index-full.xml:309(link) xml/api-index-full.xml:310(link) #: xml/api-index-full.xml:311(link) xml/api-index-full.xml:598(link) #: xml/api-index-full.xml:599(link) msgid "gcut-public" msgstr "" #: xml/gcut-public.xml:21(link) xml/gcut-public.xml:52(primary) #: xml/api-index-full.xml:310(link) msgid "cut_test_context_take_g_object" msgstr "" #: xml/gcut-public.xml:21(type) xml/gcut-public.xml:23(type) #: xml/gcut-public.xml:25(type) xml/gcut-public.xml:28(type) #: xml/gcut-public.xml:30(type) xml/gcut-public.xml:32(type) #: xml/gcut-public.xml:36(type) msgid "CutTestContext" msgstr "" #: xml/gcut-public.xml:21(parameter) xml/gcut-public.xml:23(parameter) #: xml/gcut-public.xml:25(parameter) xml/gcut-public.xml:28(parameter) #: xml/gcut-public.xml:30(parameter) xml/gcut-public.xml:32(parameter) #: xml/gcut-public.xml:36(parameter) msgid " *context" msgstr "" #: xml/gcut-public.xml:23(link) xml/gcut-public.xml:68(primary) #: xml/api-index-full.xml:307(link) msgid "cut_test_context_take_g_error" msgstr "" #: xml/gcut-public.xml:25(link) xml/gcut-public.xml:84(primary) #: xml/api-index-full.xml:309(link) msgid "cut_test_context_take_g_list" msgstr "" #: xml/gcut-public.xml:27(parameter) msgid " destroy" msgstr "" #: xml/gcut-public.xml:28(link) xml/gcut-public.xml:104(primary) #: xml/api-index-full.xml:308(link) msgid "cut_test_context_take_g_hash_table" msgstr "" #: xml/gcut-public.xml:30(link) xml/gcut-public.xml:120(primary) #: xml/api-index-full.xml:311(link) msgid "cut_test_context_take_g_string" msgstr "" #: xml/gcut-public.xml:32(link) xml/gcut-public.xml:136(primary) #: xml/api-index-full.xml:598(link) msgid "gcut_utils_get_fixture_data" msgstr "" #: xml/gcut-public.xml:33(parameter) xml/gcut-public.xml:37(parameter) msgid "const **full_path" msgstr "" #: xml/gcut-public.xml:36(link) xml/gcut-public.xml:160(primary) #: xml/api-index-full.xml:599(link) msgid "gcut_utils_get_fixture_data_va_list" msgstr "" #: xml/gcut-public.xml:21(synopsis) #, no-wrap msgid "" " * (,\n" " );\n" "const * (,\n" " );\n" "const * (,\n" " ,\n" " );\n" " * (,\n" " );\n" " * (,\n" " );\n" " * (,\n" " ,\n" " ,\n" " );\n" " * (,\n" " ,\n" " ,\n" " );\n" msgstr "" #: xml/gcut-public.xml:51(title) msgid "cut_test_context_take_g_object ()" msgstr "" #: xml/gcut-public.xml:53(programlisting) #, no-wrap msgid "" "GObject * cut_test_context_take_g_object (CutTestContext *context,\n" " GObject *object);" msgstr "" #: xml/gcut-public.xml:67(title) msgid "cut_test_context_take_g_error ()" msgstr "" #: xml/gcut-public.xml:69(programlisting) #, no-wrap msgid "" "const GError * cut_test_context_take_g_error (CutTestContext *context,\n" " GError *error);" msgstr "" #: xml/gcut-public.xml:83(title) msgid "cut_test_context_take_g_list ()" msgstr "" #: xml/gcut-public.xml:85(programlisting) #, no-wrap msgid "" "const GList * cut_test_context_take_g_list (CutTestContext *context,\n" " GList *list,\n" " CutDestroyFunction destroy);" msgstr "" #: xml/gcut-public.xml:96(term) msgid "destroy :" msgstr "" #: xml/gcut-public.xml:103(title) msgid "cut_test_context_take_g_hash_table ()" msgstr "" #: xml/gcut-public.xml:105(programlisting) #, no-wrap msgid "" "GHashTable * cut_test_context_take_g_hash_table (CutTestContext *context,\n" " GHashTable *hash_table);" msgstr "" #: xml/gcut-public.xml:119(title) msgid "cut_test_context_take_g_string ()" msgstr "" #: xml/gcut-public.xml:121(programlisting) #, no-wrap msgid "" "GString * cut_test_context_take_g_string (CutTestContext *context,\n" " GString *string);" msgstr "" #: xml/gcut-public.xml:135(title) msgid "gcut_utils_get_fixture_data ()" msgstr "" #: xml/gcut-public.xml:137(programlisting) #, no-wrap msgid "" "GString * gcut_utils_get_fixture_data (CutTestContext *context,\n" " const gchar **full_path,\n" " const gchar *path,\n" " ...);" msgstr "" #: xml/gcut-public.xml:146(term) xml/gcut-public.xml:170(term) msgid "full_path :" msgstr "" #: xml/gcut-public.xml:159(title) msgid "gcut_utils_get_fixture_data_va_list ()" msgstr "" #: xml/gcut-public.xml:161(programlisting) #, no-wrap msgid "" "GString * gcut_utils_get_fixture_data_va_list (CutTestContext *context,\n" " const gchar **full_path,\n" " const gchar *path,\n" " va_list args);" msgstr "" #: xml/gcut-process.xml:7(refentrytitle) xml/gcut-process.xml:14(refname) msgid "External command" msgstr "外部コマンド" #: xml/gcut-process.xml:15(refpurpose) msgid "Convenience API for using external command." msgstr "外部コマンドを使うための便利API" #: xml/gcut-process.xml:22(link) xml/gcut-process.xml:175(title) #: xml/gcut-process.xml:176(primary) xml/api-index-full.xml:502(link) msgid "GCUT_PROCESS_ERROR" msgstr "" #: xml/gcut-process.xml:23(link) xml/gcut-process.xml:27(returnvalue) #: xml/gcut-process.xml:29(returnvalue) xml/gcut-process.xml:30(returnvalue) #: xml/gcut-process.xml:32(returnvalue) xml/gcut-process.xml:34(returnvalue) #: xml/gcut-process.xml:35(returnvalue) xml/gcut-process.xml:36(type) #: xml/gcut-process.xml:38(type) xml/gcut-process.xml:39(type) #: xml/gcut-process.xml:42(type) xml/gcut-process.xml:43(type) #: xml/gcut-process.xml:45(type) xml/gcut-process.xml:46(type) #: xml/gcut-process.xml:49(type) xml/gcut-process.xml:52(type) #: xml/gcut-process.xml:56(type) xml/gcut-process.xml:58(type) #: xml/gcut-process.xml:59(type) xml/gcut-process.xml:60(type) #: xml/gcut-process.xml:61(type) xml/gcut-process.xml:62(type) #: xml/gcut-process.xml:63(type) xml/gcut-process.xml:64(type) #: xml/gcut-process.xml:66(type) xml/gcut-process.xml:68(type) #: xml/gcut-process.xml:70(type) xml/gcut-process.xml:71(type) #: xml/gcut-process.xml:182(title) xml/gcut-process.xml:183(primary) #: xml/api-index-full.xml:494(link) xml/api-index-full.xml:495(link) #: xml/api-index-full.xml:496(link) xml/api-index-full.xml:497(link) #: xml/api-index-full.xml:498(link) xml/api-index-full.xml:499(link) #: xml/api-index-full.xml:500(link) xml/api-index-full.xml:501(link) #: xml/api-index-full.xml:502(link) xml/api-index-full.xml:503(link) #: xml/api-index-full.xml:504(link) xml/api-index-full.xml:505(link) #: xml/api-index-full.xml:506(link) xml/api-index-full.xml:507(link) #: xml/api-index-full.xml:508(link) xml/api-index-full.xml:509(link) #: xml/api-index-full.xml:510(link) xml/api-index-full.xml:511(link) #: xml/api-index-full.xml:512(link) xml/api-index-full.xml:513(link) #: xml/api-index-full.xml:514(link) xml/api-index-full.xml:515(link) #: xml/api-index-full.xml:516(link) xml/api-index-full.xml:517(link) #: xml/api-index-full.xml:518(link) xml/api-index-full.xml:519(link) #: xml/api-index-full.xml:520(link) xml/api-index-full.xml:521(link) #: xml/api-index-full.xml:522(link) xml/api-index-full.xml:523(link) #: xml/api-index-full.xml:524(link) xml/api-index-full.xml:525(link) #: xml/api-index-full.xml:526(link) xml/api-index-full.xml:527(link) #: xml/api-index-full.xml:528(link) xml/api-index-full.xml:529(link) #: xml/api-index-full.xml:530(link) xml/api-index-1.1.6.xml:28(link) #: xml/api-index-1.1.6.xml:29(link) xml/api-index-1.1.5.xml:23(link) #: xml/api-index-1.1.5.xml:24(link) xml/api-index-1.1.5.xml:25(link) #: xml/api-index-1.1.5.xml:26(link) xml/api-index-1.1.5.xml:27(link) #: xml/api-index-1.1.5.xml:28(link) xml/api-index-1.1.5.xml:29(link) #: xml/api-index-1.1.5.xml:30(link) xml/api-index-1.1.5.xml:31(link) #: xml/api-index-1.1.5.xml:32(link) xml/api-index-1.1.5.xml:33(link) #: xml/api-index-1.1.5.xml:34(link) xml/api-index-1.1.5.xml:35(link) #: xml/api-index-1.1.5.xml:36(link) xml/api-index-1.1.5.xml:37(link) #: xml/api-index-1.1.5.xml:38(link) xml/api-index-1.1.5.xml:39(link) #: xml/api-index-1.1.5.xml:40(link) xml/api-index-1.1.5.xml:41(link) #: xml/api-index-1.1.5.xml:42(link) xml/api-index-1.1.5.xml:43(link) #: xml/api-index-1.1.5.xml:44(link) xml/api-index-1.1.5.xml:45(link) #: xml/api-index-1.1.5.xml:46(link) xml/api-index-1.1.5.xml:47(link) #: xml/api-index-1.1.5.xml:48(link) xml/api-index-1.1.5.xml:49(link) #: xml/api-index-1.1.5.xml:50(link) xml/api-index-1.1.5.xml:51(link) #: xml/api-index-1.1.5.xml:52(link) msgid "GCutProcess" msgstr "" #: xml/gcut-process.xml:24(link) xml/gcut-process.xml:188(title) #: xml/gcut-process.xml:189(primary) xml/api-index-full.xml:500(link) msgid "GCutProcessClass" msgstr "" #: xml/gcut-process.xml:25(link) xml/gcut-process.xml:209(primary) #: xml/api-index-full.xml:501(link) xml/api-index-1.1.5.xml:27(link) msgid "GCutProcessError" msgstr "" #: xml/gcut-process.xml:26(returnvalue) #: xml/gcut-event-loop.xml:25(returnvalue) xml/gcut-enum.xml:23(returnvalue) #: xml/gcut-egg.xml:26(returnvalue) msgid "GQuark" msgstr "" #: xml/gcut-process.xml:26(link) xml/gcut-process.xml:268(primary) #: xml/api-index-full.xml:503(link) msgid "gcut_process_error_quark" msgstr "" #: xml/gcut-process.xml:27(link) xml/gcut-process.xml:277(primary) #: xml/api-index-full.xml:518(link) xml/api-index-1.1.5.xml:41(link) msgid "gcut_process_new" msgstr "" #: xml/gcut-process.xml:27(parameter) xml/gcut-process.xml:30(parameter) #: xml/gcut-egg.xml:27(parameter) xml/gcut-egg.xml:29(parameter) msgid "const *command" msgstr "" #: xml/gcut-process.xml:29(link) xml/gcut-process.xml:295(primary) #: xml/api-index-full.xml:521(link) xml/api-index-1.1.5.xml:44(link) msgid "gcut_process_new_command_line" msgstr "" #: xml/gcut-process.xml:29(parameter) msgid "const *command_line" msgstr "" #: xml/gcut-process.xml:30(link) xml/gcut-process.xml:309(primary) #: xml/api-index-full.xml:523(link) xml/api-index-1.1.5.xml:46(link) msgid "gcut_process_new_va_list" msgstr "" #: xml/gcut-process.xml:32(link) xml/gcut-process.xml:327(primary) #: xml/api-index-full.xml:519(link) xml/api-index-1.1.5.xml:42(link) msgid "gcut_process_new_argv" msgstr "" #: xml/gcut-process.xml:32(parameter) xml/gcut-egg.xml:31(parameter) msgid " argc" msgstr "" #: xml/gcut-process.xml:33(parameter) xml/gcut-egg.xml:32(parameter) msgid " **argv" msgstr "" #: xml/gcut-process.xml:34(link) xml/gcut-process.xml:346(primary) #: xml/api-index-full.xml:522(link) xml/api-index-1.1.5.xml:45(link) msgid "gcut_process_new_strings" msgstr "" #: xml/gcut-process.xml:34(parameter) xml/gcut-egg.xml:33(parameter) msgid "const **command" msgstr "" #: xml/gcut-process.xml:35(link) xml/gcut-process.xml:361(primary) #: xml/api-index-full.xml:520(link) xml/api-index-1.1.5.xml:43(link) msgid "gcut_process_new_array" msgstr "" #: xml/gcut-process.xml:35(type) xml/gcut-egg.xml:34(type) msgid "GArray" msgstr "" #: xml/gcut-process.xml:35(parameter) xml/gcut-egg.xml:34(parameter) msgid " *command" msgstr "" #: xml/gcut-process.xml:36(link) xml/gcut-process.xml:376(primary) #: xml/api-index-full.xml:527(link) xml/api-index-1.1.5.xml:49(link) msgid "gcut_process_set_flags" msgstr "" #: xml/gcut-process.xml:36(parameter) xml/gcut-process.xml:38(parameter) #: xml/gcut-process.xml:39(parameter) xml/gcut-process.xml:42(parameter) #: xml/gcut-process.xml:43(parameter) xml/gcut-process.xml:45(parameter) #: xml/gcut-process.xml:46(parameter) xml/gcut-process.xml:49(parameter) #: xml/gcut-process.xml:52(parameter) xml/gcut-process.xml:56(parameter) #: xml/gcut-process.xml:58(parameter) xml/gcut-process.xml:59(parameter) #: xml/gcut-process.xml:60(parameter) xml/gcut-process.xml:61(parameter) #: xml/gcut-process.xml:62(parameter) xml/gcut-process.xml:63(parameter) #: xml/gcut-process.xml:64(parameter) xml/gcut-process.xml:66(parameter) #: xml/gcut-process.xml:68(parameter) xml/gcut-process.xml:70(parameter) #: xml/gcut-process.xml:71(parameter) msgid " *process" msgstr "" #: xml/gcut-process.xml:37(type) xml/gcut-process.xml:38(returnvalue) #: xml/gcut-egg.xml:36(type) xml/gcut-egg.xml:37(returnvalue) msgid "GSpawnFlags" msgstr "" #: xml/gcut-process.xml:37(parameter) xml/gcut-egg.xml:36(parameter) msgid " flags" msgstr "" #: xml/gcut-process.xml:38(link) xml/gcut-process.xml:391(primary) #: xml/api-index-full.xml:510(link) xml/api-index-1.1.5.xml:33(link) msgid "gcut_process_get_flags" msgstr "" #: xml/gcut-process.xml:39(link) xml/gcut-process.xml:405(primary) #: xml/api-index-full.xml:525(link) xml/api-index-1.1.5.xml:48(link) msgid "gcut_process_set_env" msgstr "" #: xml/gcut-process.xml:40(parameter) xml/gcut-egg.xml:39(parameter) #: xml/gcut-data.xml:22(parameter) msgid "const *name" msgstr "" #: xml/gcut-process.xml:42(link) xml/gcut-process.xml:425(primary) #: xml/api-index-full.xml:505(link) xml/api-index-1.1.5.xml:29(link) msgid "gcut_process_get_env" msgstr "" #: xml/gcut-process.xml:43(link) xml/gcut-process.xml:442(primary) #: xml/api-index-full.xml:524(link) xml/api-index-1.1.5.xml:47(link) msgid "gcut_process_run" msgstr "" #: xml/gcut-process.xml:45(returnvalue) xml/gcut-event-loop.xml:36(type) #: xml/gcut-event-loop.xml:41(type) xml/gcut-egg.xml:49(returnvalue) #: xml/gcut-assertions.xml:123(type) xml/gcut-assertions.xml:124(type) #: xml/gcut-assertions.xml:126(type) xml/gcut-assertions.xml:127(type) #: xml/gcut-assertions-helper.xml:128(type) #: xml/gcut-assertions-helper.xml:129(type) #: xml/gcut-assertions-helper.xml:132(type) #: xml/gcut-assertions-helper.xml:133(type) msgid "GPid" msgstr "" #: xml/gcut-process.xml:45(link) xml/gcut-process.xml:460(primary) #: xml/api-index-full.xml:516(link) xml/api-index-1.1.5.xml:39(link) msgid "gcut_process_get_pid" msgstr "" #: xml/gcut-process.xml:46(link) xml/gcut-process.xml:476(primary) #: xml/api-index-full.xml:529(link) xml/api-index-1.1.5.xml:51(link) msgid "gcut_process_wait" msgstr "" #: xml/gcut-process.xml:47(parameter) xml/gcut-process.xml:69(parameter) #: xml/gcut-egg.xml:51(parameter) xml/gcut-egg.xml:62(parameter) msgid " timeout" msgstr "" #: xml/gcut-process.xml:49(link) xml/gcut-process.xml:504(primary) #: xml/api-index-full.xml:517(link) xml/api-index-1.1.5.xml:40(link) msgid "gcut_process_kill" msgstr "" #: xml/gcut-process.xml:50(parameter) xml/gcut-egg.xml:54(parameter) msgid " signal_number" msgstr "" #: xml/gcut-process.xml:52(link) xml/gcut-process.xml:526(primary) #: xml/api-index-full.xml:530(link) xml/api-index-1.1.5.xml:52(link) msgid "gcut_process_write" msgstr "" #: xml/gcut-process.xml:53(parameter) xml/gcut-egg.xml:46(parameter) msgid "const *chunk" msgstr "" #: xml/gcut-process.xml:54(parameter) xml/gcut-egg.xml:47(parameter) msgid " size" msgstr "" #: xml/gcut-process.xml:56(returnvalue) msgid "GIOStatus" msgstr "" #: xml/gcut-process.xml:56(link) xml/gcut-process.xml:552(primary) #: xml/api-index-full.xml:504(link) xml/api-index-1.1.5.xml:28(link) msgid "gcut_process_flush" msgstr "" #: xml/gcut-process.xml:58(link) xml/gcut-process.xml:572(primary) #: xml/api-index-full.xml:515(link) xml/api-index-1.1.5.xml:38(link) msgid "gcut_process_get_output_string" msgstr "" #: xml/gcut-process.xml:59(link) xml/gcut-process.xml:585(primary) #: xml/api-index-full.xml:508(link) xml/api-index-1.1.5.xml:32(link) msgid "gcut_process_get_error_string" msgstr "" #: xml/gcut-process.xml:60(link) xml/gcut-process.xml:598(primary) #: xml/api-index-full.xml:512(link) xml/api-index-1.1.5.xml:35(link) msgid "gcut_process_get_input_channel" msgstr "" #: xml/gcut-process.xml:61(link) xml/gcut-process.xml:614(primary) #: xml/api-index-full.xml:513(link) xml/api-index-1.1.5.xml:36(link) msgid "gcut_process_get_output_channel" msgstr "" #: xml/gcut-process.xml:62(link) xml/gcut-process.xml:630(primary) #: xml/api-index-full.xml:506(link) xml/api-index-1.1.5.xml:30(link) msgid "gcut_process_get_error_channel" msgstr "" #: xml/gcut-process.xml:63(returnvalue) xml/gcut-process.xml:64(returnvalue) msgid "GInputStream" msgstr "" #: xml/gcut-process.xml:63(link) xml/gcut-process.xml:646(primary) #: xml/api-index-full.xml:514(link) xml/api-index-1.1.5.xml:37(link) msgid "gcut_process_get_output_stream" msgstr "" #: xml/gcut-process.xml:64(link) xml/gcut-process.xml:662(primary) #: xml/api-index-full.xml:507(link) xml/api-index-1.1.5.xml:31(link) msgid "gcut_process_get_error_stream" msgstr "" #: xml/gcut-process.xml:65(link) xml/gcut-process.xml:678(primary) #: xml/api-index-full.xml:511(link) xml/api-index-1.1.5.xml:34(link) msgid "gcut_process_get_forced_termination_wait_time" msgstr "" #: xml/gcut-process.xml:67(link) xml/gcut-process.xml:695(primary) #: xml/api-index-full.xml:528(link) xml/api-index-1.1.5.xml:50(link) msgid "gcut_process_set_forced_termination_wait_time" msgstr "" #: xml/gcut-process.xml:70(returnvalue) xml/gcut-process.xml:72(type) #: xml/gcut-glib-event-loop.xml:24(returnvalue) #: xml/gcut-event-loop.xml:23(link) xml/gcut-event-loop.xml:26(type) #: xml/gcut-event-loop.xml:27(type) xml/gcut-event-loop.xml:29(type) #: xml/gcut-event-loop.xml:30(type) xml/gcut-event-loop.xml:35(type) #: xml/gcut-event-loop.xml:39(type) xml/gcut-event-loop.xml:45(type) #: xml/gcut-event-loop.xml:49(type) xml/gcut-event-loop.xml:55(type) #: xml/gcut-event-loop.xml:58(type) xml/gcut-event-loop.xml:63(type) #: xml/gcut-event-loop.xml:102(title) xml/gcut-event-loop.xml:103(primary) #: xml/api-index-full.xml:392(link) xml/api-index-full.xml:393(link) #: xml/api-index-full.xml:394(link) xml/api-index-full.xml:395(link) #: xml/api-index-full.xml:396(link) xml/api-index-full.xml:397(link) #: xml/api-index-full.xml:398(link) xml/api-index-full.xml:399(link) #: xml/api-index-full.xml:400(link) xml/api-index-full.xml:401(link) #: xml/api-index-full.xml:402(link) xml/api-index-full.xml:403(link) #: xml/api-index-full.xml:404(link) xml/api-index-full.xml:405(link) #: xml/api-index-full.xml:406(link) xml/api-index-1.1.6.xml:11(link) #: xml/api-index-1.1.6.xml:12(link) xml/api-index-1.1.6.xml:13(link) #: xml/api-index-1.1.6.xml:14(link) xml/api-index-1.1.6.xml:15(link) #: xml/api-index-1.1.6.xml:16(link) xml/api-index-1.1.6.xml:17(link) #: xml/api-index-1.1.6.xml:18(link) xml/api-index-1.1.6.xml:19(link) #: xml/api-index-1.1.6.xml:20(link) xml/api-index-1.1.6.xml:21(link) msgid "GCutEventLoop" msgstr "" #: xml/gcut-process.xml:70(link) xml/gcut-process.xml:713(primary) #: xml/api-index-full.xml:509(link) xml/api-index-1.1.6.xml:28(link) msgid "gcut_process_get_event_loop" msgstr "" #: xml/gcut-process.xml:71(link) xml/gcut-process.xml:727(primary) #: xml/api-index-full.xml:526(link) xml/api-index-1.1.6.xml:29(link) msgid "gcut_process_set_event_loop" msgstr "" #: xml/gcut-process.xml:72(parameter) xml/gcut-event-loop.xml:26(parameter) #: xml/gcut-event-loop.xml:27(parameter) xml/gcut-event-loop.xml:29(parameter) #: xml/gcut-event-loop.xml:30(parameter) xml/gcut-event-loop.xml:35(parameter) #: xml/gcut-event-loop.xml:39(parameter) xml/gcut-event-loop.xml:45(parameter) #: xml/gcut-event-loop.xml:49(parameter) xml/gcut-event-loop.xml:55(parameter) #: xml/gcut-event-loop.xml:58(parameter) xml/gcut-event-loop.xml:63(parameter) msgid " *loop" msgstr "" #: xml/gcut-process.xml:22(synopsis) #, no-wrap msgid "" "#define \n" " ;\n" " ;\n" "enum ;\n" " ();\n" " * (,\n" " );\n" " * ();\n" " * (,\n" " );\n" " * (,\n" " );\n" " * ();\n" " * ();\n" " (,\n" " );\n" " ();\n" " (,\n" " ,\n" " );\n" " ** ();\n" " (,\n" " );\n" " ();\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " );\n" " * ();\n" " * ();\n" " * ();\n" " * ();\n" " * ();\n" " * ();\n" " * ();\n" " \n" " ();\n" " \n" " (,\n" " );\n" " * ();\n" " (,\n" " );\n" msgstr "" #: xml/gcut-process.xml:77(synopsis) #, no-wrap msgid "" "\n" " \n" " +----GCutProcess\n" msgstr "" #: xml/gcut-process.xml:85(link) xml/gcut-egg.xml:75(link) msgid "command" msgstr "" #: xml/gcut-process.xml:84(synopsis) xml/gcut-egg.xml:74(synopsis) #, no-wrap msgid "" "\n" " \"\" : Read / Write\n" msgstr "" #: xml/gcut-process.xml:89(title) xml/gcut-egg.xml:79(title) msgid "Signals" msgstr "シグナル" #: xml/gcut-process.xml:91(link) xml/gcut-egg.xml:81(link) msgid "error" msgstr "" #: xml/gcut-process.xml:92(link) xml/gcut-egg.xml:82(link) msgid "error-received" msgstr "" #: xml/gcut-process.xml:93(link) xml/gcut-egg.xml:83(link) msgid "output-received" msgstr "" #: xml/gcut-process.xml:94(link) xml/gcut-egg.xml:84(link) msgid "reaped" msgstr "" #: xml/gcut-process.xml:90(synopsis) xml/gcut-egg.xml:80(synopsis) #, no-wrap msgid "" "\n" " \"\" : Run Last\n" " \"\" : Run Last\n" " \"\" : Run Last\n" " \"\" : Run Last\n" msgstr "" #: xml/gcut-process.xml:100(para) msgid "" "GCutProcess encapsulates " "external command execution, communication and termination. GCutProcess reports an error as GError. It can be asserted easily by " "gcut_assert_error()." msgstr "" "GCutProcessは外部コマンドの" "実行・通信・終了をカプセル化します。GCutProcessはエラーをGErrorとして報告します。エラーはgcut_assert_error()を使うことによ" "り簡単に検証できます。" #: xml/gcut-process.xml:106(para) msgid "" "External command is specified to constructor like gcut_process_new(), gcut_process_new_strings() and so on. External command isn't run at the time. gcut_process_run() " "runs specified external command." msgstr "" "外部コマンドはgcut_process_new()" "gcut_process_new_strings()などのようなコンスト" "ラクタで指定します。この時点では外部コマンドは実行されません。gcut_process_hatch()で指定" "された外部コマンドが実行されます。" #: xml/gcut-process.xml:112(para) msgid "" "Standard/Error outputs of external command are passed by \"output-received\"/" "\"error-received\" signals or GIOChannel returned by gcut_process_get_output()/gcut_process_get_error(). gcut_process_write() writes a chunk to standard input of external command." msgstr "" "外部コマンドの標準出力・エラー出力は\"output-received\"シグナル・\"error-received\"シグナ" "ル、あるいは、gcut_process_get_output()gcut_process_get_error()が返すGIOChannelで取得" "できます。gcut_process_write()" "は外部コマンドの標準入力にデータを書き込みます。" #: xml/gcut-process.xml:120(para) msgid "" "To wait external command finished, gcut_process_wait() can be used. It accepts " "timeout to avoid infinite waiting." msgstr "" "外部コマンドの終了を待つためにはgcut_process_wait()を使うことができます。無限" "待ちを避けるために、タイムアウトを指定することができます。" #: xml/gcut-process.xml:126(programlisting) #, no-wrap msgid "" "\n" "static GString *output_string;\n" "static GCutProcess *process;\n" "\n" "void\n" "cut_setup (void)\n" "{\n" " output_string = g_string_new(NULL);\n" " process = NULL;\n" "}\n" "\n" "void\n" "cut_teardown (void)\n" "{\n" " if (output_string)\n" " g_string_free(output_string, TRUE);\n" " if (process)\n" " g_object_unref(process);\n" "}\n" "\n" "static void\n" "cb_output_received (GCutProcess *process, const gchar *chunk, gsize size,\n" " gpointer user_data)\n" "{\n" " g_string_append_len(output_string, chunk, size);\n" "}\n" "\n" "void\n" "test_echo (void)\n" "{\n" " GError *error = NULL;\n" "\n" " process = gcut_process_new(\"echo\", \"XXX\", NULL);\n" " g_signal_connect(process, \"receive-output\",\n" " G_CALLBACK(cb_output_received), NULL);\n" "\n" " gcut_process_run(process, &error);\n" " gcut_assert_error(error);\n" "\n" " gcut_process_wait(process, 1000, &error);\n" " gcut_assert_error(error);\n" " cut_assert_equal_string(\"XXX\\n\", output_string->str);\n" "}\n" msgstr "" #: xml/gcut-process.xml:177(programlisting) #, no-wrap msgid "#define GCUT_PROCESS_ERROR (gcut_process_error_quark())\n" msgstr "" #: xml/gcut-process.xml:184(programlisting) #, no-wrap msgid "typedef struct _GCutProcess GCutProcess;" msgstr "" #: xml/gcut-process.xml:190(programlisting) #, no-wrap msgid "" "typedef struct {\n" " GObjectClass parent_class;\n" "\n" " void (*output_received) (GCutProcess *process,\n" " const gchar *chunk,\n" " gsize size);\n" " void (*error_received) (GCutProcess *process,\n" " const gchar *chunk,\n" " gsize size);\n" " void (*reaped) (GCutProcess *process,\n" " gint status);\n" " void (*error) (GCutProcess *process,\n" " GError *error);\n" "} GCutProcessClass;\n" msgstr "" #: xml/gcut-process.xml:208(title) msgid "enum GCutProcessError" msgstr "" #: xml/gcut-process.xml:210(programlisting) #, no-wrap msgid "" "typedef enum\n" "{\n" " GCUT_PROCESS_ERROR_COMMAND_LINE,\n" " GCUT_PROCESS_ERROR_IO_ERROR,\n" " GCUT_PROCESS_ERROR_ALREADY_RUNNING,\n" " GCUT_PROCESS_ERROR_NOT_RUNNING,\n" " GCUT_PROCESS_ERROR_INVALID_OBJECT,\n" " GCUT_PROCESS_ERROR_INVALID_SIGNAL,\n" " GCUT_PROCESS_ERROR_PERMISSION_DENIED,\n" " GCUT_PROCESS_ERROR_TIMEOUT\n" "} GCutProcessError;\n" msgstr "" #: xml/gcut-process.xml:222(para) msgid "" "Error codes returned by GCutProcess related operations." msgstr "" "GCutProcess関連の操作で返さ" "れるエラーコード。" #: xml/gcut-process.xml:226(literal) msgid "GCUT_PROCESS_ERROR_COMMAND_LINE" msgstr "" #: xml/gcut-process.xml:227(simpara) xml/gcut-egg.xml:219(simpara) msgid "Command line related error." msgstr "コマンドライン関連のエラー。" #: xml/gcut-process.xml:231(literal) msgid "GCUT_PROCESS_ERROR_IO_ERROR" msgstr "" #: xml/gcut-process.xml:232(simpara) xml/gcut-egg.xml:224(simpara) msgid "IO error." msgstr "入出力エラー。" #: xml/gcut-process.xml:236(literal) msgid "GCUT_PROCESS_ERROR_ALREADY_RUNNING" msgstr "" #: xml/gcut-process.xml:237(simpara) xml/gcut-egg.xml:229(simpara) msgid "External command is already running." msgstr "外部コマンドはすでに実行されています。" #: xml/gcut-process.xml:241(literal) msgid "GCUT_PROCESS_ERROR_NOT_RUNNING" msgstr "" #: xml/gcut-process.xml:242(simpara) xml/gcut-egg.xml:234(simpara) msgid "External command isn't running." msgstr "外部こもアンドが実行されていません。" #: xml/gcut-process.xml:246(literal) msgid "GCUT_PROCESS_ERROR_INVALID_OBJECT" msgstr "" #: xml/gcut-process.xml:247(simpara) msgid "" "Invalid GCutProcess object " "is passed." msgstr "" "不正なGCutProcessオブジェク" "トが渡されました。" #: xml/gcut-process.xml:251(literal) msgid "GCUT_PROCESS_ERROR_INVALID_SIGNAL" msgstr "" #: xml/gcut-process.xml:252(simpara) msgid "Invalid signal is passed." msgstr "不正なシグナルが渡されました。" #: xml/gcut-process.xml:256(literal) msgid "GCUT_PROCESS_ERROR_PERMISSION_DENIED" msgstr "" #: xml/gcut-process.xml:257(simpara) msgid "Permission denied." msgstr "許可がありません。" #: xml/gcut-process.xml:261(literal) msgid "GCUT_PROCESS_ERROR_TIMEOUT" msgstr "" #: xml/gcut-process.xml:262(simpara) xml/gcut-egg.xml:244(simpara) msgid "Timeout." msgstr "タイムアウト。" #: xml/gcut-process.xml:267(title) msgid "gcut_process_error_quark ()" msgstr "" #: xml/gcut-process.xml:269(programlisting) #, no-wrap msgid "GQuark gcut_process_error_quark (void);" msgstr "" #: xml/gcut-process.xml:276(title) msgid "gcut_process_new ()" msgstr "" #: xml/gcut-process.xml:278(programlisting) #, no-wrap msgid "" "GCutProcess * gcut_process_new (const gchar *command,\n" " ...);" msgstr "" #: xml/gcut-process.xml:280(para) xml/gcut-process.xml:312(para) #: xml/gcut-process.xml:330(para) xml/gcut-process.xml:348(para) #: xml/gcut-process.xml:363(para) msgid "" "Creates a new GCutProcess " "object that runs command." msgstr "" "commandを実行する新しいGCutProcessオブジェクトを生成します。" #: xml/gcut-process.xml:283(term) xml/gcut-process.xml:315(term) #: xml/gcut-process.xml:351(term) xml/gcut-process.xml:366(term) #: xml/gcut-egg.xml:267(term) xml/gcut-egg.xml:286(term) #: xml/gcut-egg.xml:324(term) xml/gcut-egg.xml:340(term) msgid "command :" msgstr "" #: xml/gcut-process.xml:284(simpara) xml/gcut-process.xml:316(simpara) #: xml/gcut-egg.xml:268(simpara) xml/gcut-egg.xml:287(simpara) msgid "the external command name to be ran" msgstr "実行する外部コマンド名。" #: xml/gcut-process.xml:287(simpara) xml/gcut-egg.xml:271(simpara) msgid "the arguments for command" msgstr "commandの引数" #: xml/gcut-process.xml:289(simpara) xml/gcut-process.xml:303(simpara) #: xml/gcut-process.xml:321(simpara) xml/gcut-process.xml:340(simpara) #: xml/gcut-process.xml:355(simpara) xml/gcut-process.xml:370(simpara) msgid "a new GCutProcess." msgstr "" "GCutProcessオブジェクト。" #: xml/gcut-process.xml:294(title) msgid "gcut_process_new_command_line ()" msgstr "" #: xml/gcut-process.xml:296(programlisting) #, no-wrap msgid "GCutProcess * gcut_process_new_command_line (const gchar *command_line);" msgstr "" #: xml/gcut-process.xml:297(para) msgid "" "Creates a new GCutProcess " "object that runs command_line." msgstr "" "command_lineを実行する新しいGCutProcessオブジェクトを生成します。" #: xml/gcut-process.xml:300(term) msgid "command_line :" msgstr "" #: xml/gcut-process.xml:301(simpara) msgid "a command line" msgstr "コマンドライン" #: xml/gcut-process.xml:308(title) msgid "gcut_process_new_va_list ()" msgstr "" #: xml/gcut-process.xml:310(programlisting) #, no-wrap msgid "" "GCutProcess * gcut_process_new_va_list (const gchar *command,\n" " va_list args);" msgstr "" #: xml/gcut-process.xml:319(simpara) xml/gcut-egg.xml:290(simpara) msgid "arguments for command" msgstr "commandの引数" #: xml/gcut-process.xml:326(title) msgid "gcut_process_new_argv ()" msgstr "" #: xml/gcut-process.xml:328(programlisting) #, no-wrap msgid "" "GCutProcess * gcut_process_new_argv (gint argc,\n" " gchar **argv);" msgstr "" #: xml/gcut-process.xml:333(term) xml/gcut-egg.xml:305(term) msgid "argc :" msgstr "" #: xml/gcut-process.xml:334(simpara) xml/gcut-egg.xml:306(simpara) msgid "the number of elements of argv" msgstr "argvの要素数" #: xml/gcut-process.xml:336(term) xml/gcut-egg.xml:308(term) msgid "argv :" msgstr "" #: xml/gcut-process.xml:337(simpara) xml/gcut-egg.xml:309(simpara) msgid "the external command name to be ran and arguments of it." msgstr "実行する外部コマンド名とコマンド引数。" #: xml/gcut-process.xml:345(title) msgid "gcut_process_new_strings ()" msgstr "" #: xml/gcut-process.xml:347(programlisting) #, no-wrap msgid "GCutProcess * gcut_process_new_strings (const gchar **command);" msgstr "" #: xml/gcut-process.xml:352(simpara) xml/gcut-egg.xml:325(simpara) msgid "" "the external command name to be ran and arguments of it. NULL-terminated." msgstr "" "実行する外部コマンド名とコマンド引数。NULL終端。" #: xml/gcut-process.xml:360(title) msgid "gcut_process_new_array ()" msgstr "" #: xml/gcut-process.xml:362(programlisting) #, no-wrap msgid "GCutProcess * gcut_process_new_array (GArray *command);" msgstr "" #: xml/gcut-process.xml:367(simpara) xml/gcut-egg.xml:341(simpara) msgid "" "the external command name to be ran and arguments of it. The GArray should be zero-terminated." msgstr "" "実行する外部コマンド名とコマンド引数。GArrayは0終端にして下さい。" #: xml/gcut-process.xml:375(title) msgid "gcut_process_set_flags ()" msgstr "" #: xml/gcut-process.xml:377(programlisting) #, no-wrap msgid "" "void gcut_process_set_flags (GCutProcess *process,\n" " GSpawnFlags flags);" msgstr "" #: xml/gcut-process.xml:379(para) xml/gcut-egg.xml:354(para) msgid "Sets flags for spawning." msgstr "外部コマンドを実行するときのflagsを設定します。" #: xml/gcut-process.xml:382(term) xml/gcut-process.xml:396(term) #: xml/gcut-process.xml:412(term) xml/gcut-process.xml:430(term) #: xml/gcut-process.xml:448(term) xml/gcut-process.xml:466(term) #: xml/gcut-process.xml:488(term) xml/gcut-process.xml:511(term) #: xml/gcut-process.xml:534(term) xml/gcut-process.xml:558(term) #: xml/gcut-process.xml:575(term) xml/gcut-process.xml:588(term) #: xml/gcut-process.xml:604(term) xml/gcut-process.xml:620(term) #: xml/gcut-process.xml:636(term) xml/gcut-process.xml:652(term) #: xml/gcut-process.xml:668(term) xml/gcut-process.xml:685(term) #: xml/gcut-process.xml:704(term) xml/gcut-process.xml:718(term) #: xml/gcut-process.xml:734(term) xml/gcut-process.xml:761(term) #: xml/gcut-process.xml:786(term) xml/gcut-process.xml:814(term) #: xml/gcut-process.xml:839(term) msgid "process :" msgstr "" #: xml/gcut-process.xml:383(simpara) xml/gcut-process.xml:397(simpara) #: xml/gcut-process.xml:413(simpara) xml/gcut-process.xml:431(simpara) #: xml/gcut-process.xml:449(simpara) xml/gcut-process.xml:467(simpara) #: xml/gcut-process.xml:489(simpara) xml/gcut-process.xml:512(simpara) #: xml/gcut-process.xml:535(simpara) xml/gcut-process.xml:559(simpara) #: xml/gcut-process.xml:576(simpara) xml/gcut-process.xml:589(simpara) #: xml/gcut-process.xml:605(simpara) xml/gcut-process.xml:621(simpara) #: xml/gcut-process.xml:637(simpara) xml/gcut-process.xml:653(simpara) #: xml/gcut-process.xml:669(simpara) xml/gcut-process.xml:686(simpara) #: xml/gcut-process.xml:705(simpara) xml/gcut-process.xml:719(simpara) #: xml/gcut-process.xml:735(simpara) msgid "a GCutProcess" msgstr "GCutProcess" #: xml/gcut-process.xml:385(term) xml/gcut-egg.xml:360(term) msgid "flags :" msgstr "" #: xml/gcut-process.xml:386(simpara) xml/gcut-egg.xml:361(simpara) msgid "" "the flags to be passed to g_spawn_async_with_pipes()." msgstr "" "g_spawn_async_with_pipes" "()に渡すフラグ。" #: xml/gcut-process.xml:390(title) msgid "gcut_process_get_flags ()" msgstr "" #: xml/gcut-process.xml:392(programlisting) #, no-wrap msgid "GSpawnFlags gcut_process_get_flags (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:393(para) xml/gcut-egg.xml:369(para) msgid "Gets flags for spawning." msgstr "外部コマンドを実行する時のflagsを取得します。" #: xml/gcut-process.xml:399(simpara) xml/gcut-egg.xml:375(simpara) msgid "the flags for spawning." msgstr "外部コマンドを実行するときのフラグ。" #: xml/gcut-process.xml:404(title) msgid "gcut_process_set_env ()" msgstr "" #: xml/gcut-process.xml:406(programlisting) #, no-wrap msgid "" "void gcut_process_set_env (GCutProcess *process,\n" " const gchar *name,\n" " ...);" msgstr "" #: xml/gcut-process.xml:409(para) xml/gcut-egg.xml:386(para) msgid "Sets environment variable for external command." msgstr "外部コマンドの環境変数を設定します。" #: xml/gcut-process.xml:415(term) xml/gcut-egg.xml:392(term) #: xml/gcut-data.xml:306(term) msgid "name :" msgstr "" #: xml/gcut-process.xml:416(simpara) xml/gcut-egg.xml:393(simpara) msgid "the first environment name." msgstr "最初の環境変数名。" #: xml/gcut-process.xml:419(simpara) xml/gcut-egg.xml:396(simpara) msgid "" "the value of name, followed by name and value pairs. " "NULL-terminated." msgstr "" "nameに対応する値。その後に、名前と値のペアを任意の数だ" "け指定します。最後の引数はNULLにしてください。" #: xml/gcut-process.xml:424(title) msgid "gcut_process_get_env ()" msgstr "" #: xml/gcut-process.xml:426(programlisting) #, no-wrap msgid "gchar ** gcut_process_get_env (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:427(para) xml/gcut-egg.xml:405(para) msgid "Gets environment variable for external command." msgstr "外部コマンドの環境変数を取得します。" #: xml/gcut-process.xml:433(simpara) xml/gcut-egg.xml:411(simpara) msgid "" "a newly-allocated NULL-" "terminated environment variables. (\"NAME1=VALUE1\", \"NAME2=VALUE2\", ..., " "NULL) It should be " "freed by g_strfreev() when no longer needed." msgstr "" "新しく割り当てられたNULL終端の環境変数のリスト(\"名前1=値1\", \"名前2=値2\", ..., NULL)を返します。必要がなく" "なったらg_strfreev()" "で開放してください。" #: xml/gcut-process.xml:441(title) msgid "gcut_process_run ()" msgstr "" #: xml/gcut-process.xml:443(programlisting) #, no-wrap msgid "" "gboolean gcut_process_run (GCutProcess *process,\n" " GError **error);" msgstr "" #: xml/gcut-process.xml:445(para) msgid "Runs a new external process." msgstr "新しい外部プロセスを実行します。" #: xml/gcut-process.xml:452(simpara) xml/gcut-process.xml:495(simpara) #: xml/gcut-process.xml:518(simpara) xml/gcut-process.xml:544(simpara) #: xml/gcut-process.xml:562(simpara) xml/gcut-enum.xml:132(simpara) #: xml/gcut-enum.xml:177(simpara) xml/gcut-enum.xml:196(simpara) #: xml/gcut-egg.xml:431(simpara) xml/gcut-egg.xml:471(simpara) #: xml/gcut-egg.xml:516(simpara) msgid "" "return location for an error, or NULL" msgstr "" "エラーを返すアドレスまたはNULL。" #: xml/gcut-process.xml:454(simpara) xml/gcut-process.xml:520(simpara) #: xml/gcut-process.xml:546(simpara) xml/gcut-egg.xml:433(simpara) #: xml/gcut-egg.xml:473(simpara) msgid "" "TRUE on success, " "otherwise FALSE" msgstr "" "成功したときはTRUE、そ" "うでない場合はFALSE。" #: xml/gcut-process.xml:459(title) msgid "gcut_process_get_pid ()" msgstr "" #: xml/gcut-process.xml:461(programlisting) #, no-wrap msgid "GPid gcut_process_get_pid (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:462(para) xml/gcut-egg.xml:482(para) msgid "" "Gets the process ID of running external process. If external process isn't " "running, 0 is returned." msgstr "" "実行している外部プロセスのプロセスIDを取得します。外部コマンドが実行されてい" "ない場合は0が返ります。" #: xml/gcut-process.xml:469(simpara) xml/gcut-egg.xml:489(simpara) msgid "" "the process ID of running external process if external process is running, " "otherwise 0." msgstr "実行中の外部コマンドのプロセスID。実行していない場合は0。" #: xml/gcut-process.xml:475(title) msgid "gcut_process_wait ()" msgstr "" #: xml/gcut-process.xml:477(programlisting) #, no-wrap msgid "" "gint gcut_process_wait (GCutProcess *process,\n" " guint timeout,\n" " GError **error);" msgstr "" #: xml/gcut-process.xml:480(para) msgid "" "Waits running external process is finished while timeout milliseconds. If external process isn't finished while " "timeout milliseconds, GCUT_PROCESS_ERROR_TIMEOUT " "error is set and -1 is returned. If external process isn't running, GCUT_PROCESS_ERROR_NOT_RUNNING error is set and " "-1 is returned." msgstr "" "実行中の外部プロセスが終了することをtimeoutミリ秒待ち" "ます。外部コマンドがtimeoutミリ秒以内に終了しなかった" "場合は、GCUT_PROCESS_ERROR_TIMEOUTエラーが設定され、-1が" "返ります。外部プロセスが実行されていない場合は、GCUT_PROCESS_ERROR_NOT_RUNNINGエラーが設定され、-1が返ります。" #: xml/gcut-process.xml:491(term) xml/gcut-process.xml:707(term) #: xml/gcut-egg.xml:512(term) xml/gcut-egg.xml:623(term) msgid "timeout :" msgstr "" #: xml/gcut-process.xml:492(simpara) xml/gcut-egg.xml:513(simpara) msgid "the timeout period in milliseconds" msgstr "タイムアウト時間(ミリ秒)" #: xml/gcut-process.xml:497(simpara) xml/gcut-egg.xml:518(simpara) msgid "an exit status of external process on success, otherwise -1." msgstr "外部プロセスが終了した場合は終了ステータス。そうでない場合は-1。" #: xml/gcut-process.xml:503(title) msgid "gcut_process_kill ()" msgstr "" #: xml/gcut-process.xml:505(programlisting) #, no-wrap msgid "" "gboolean gcut_process_kill (GCutProcess *process,\n" " gint signal_number,\n" " GError **error);" msgstr "" #: xml/gcut-process.xml:508(para) xml/gcut-egg.xml:529(para) msgid "Sends signal_number signal to external process." msgstr "外部プロセスにsignal_numberシグナルを送ります。" #: xml/gcut-process.xml:514(term) xml/gcut-egg.xml:535(term) msgid "signal_number :" msgstr "" #: xml/gcut-process.xml:515(simpara) xml/gcut-egg.xml:536(simpara) msgid "the signal number to be sent to external process" msgstr "外部プロセスに送るシグナル番号。" #: xml/gcut-process.xml:525(title) msgid "gcut_process_write ()" msgstr "" #: xml/gcut-process.xml:527(programlisting) #, no-wrap msgid "" "gboolean gcut_process_write (GCutProcess *process,\n" " const gchar *chunk,\n" " gsize size,\n" " GError **error);" msgstr "" #: xml/gcut-process.xml:531(para) xml/gcut-egg.xml:458(para) msgid "" "Writes chunk to external process's standard input." msgstr "外部プロセスの標準入力にchunkを書き込みます。" #: xml/gcut-process.xml:537(term) xml/gcut-process.xml:789(term) #: xml/gcut-process.xml:817(term) xml/gcut-egg.xml:464(term) #: xml/gcut-egg.xml:675(term) xml/gcut-egg.xml:703(term) msgid "chunk :" msgstr "" #: xml/gcut-process.xml:538(simpara) xml/gcut-egg.xml:465(simpara) msgid "the data to be wrote" msgstr "書き込むデータ" #: xml/gcut-process.xml:540(term) xml/gcut-process.xml:793(term) #: xml/gcut-process.xml:821(term) xml/gcut-egg.xml:467(term) #: xml/gcut-egg.xml:679(term) xml/gcut-egg.xml:707(term) #: xml/cut-test-utils.xml:154(term) xml/cut-test-utils.xml:174(term) #: xml/cut-test-utils.xml:388(term) msgid "size :" msgstr "" #: xml/gcut-process.xml:541(simpara) xml/gcut-egg.xml:468(simpara) msgid "the size of chunk" msgstr "chunkのサイズ" #: xml/gcut-process.xml:551(title) msgid "gcut_process_flush ()" msgstr "" #: xml/gcut-process.xml:553(programlisting) #, no-wrap msgid "" "GIOStatus gcut_process_flush (GCutProcess *process,\n" " GError **error);" msgstr "" #: xml/gcut-process.xml:555(para) msgid "Flush buffered external process's standard input." msgstr "外部プロセスの標準出力から読み込んだデータ。" #: xml/gcut-process.xml:564(simpara) msgid "" "the status of the operation: One of G_IO_STATUS_NORMAL, G_IO_STATUS_AGAIN, or G_IO_STATUS_ERROR." msgstr "" #: xml/gcut-process.xml:571(title) msgid "gcut_process_get_output_string ()" msgstr "" #: xml/gcut-process.xml:573(programlisting) #, no-wrap msgid "GString * gcut_process_get_output_string (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:578(simpara) msgid "" "a GString that has all result " "of standard output of external process." msgstr "" "外部プロセスの標準出力の結果をすべて持ったGString。" #: xml/gcut-process.xml:584(title) msgid "gcut_process_get_error_string ()" msgstr "" #: xml/gcut-process.xml:586(programlisting) #, no-wrap msgid "GString * gcut_process_get_error_string (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:591(simpara) msgid "" "a GString that has all result " "of standard error of external process." msgstr "" "外部プロセスの標準エラー出力の結果をすべて持ったGString。" #: xml/gcut-process.xml:597(title) msgid "gcut_process_get_input_channel ()" msgstr "" #: xml/gcut-process.xml:599(programlisting) #, no-wrap msgid "GIOChannel * gcut_process_get_input_channel (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:600(para) xml/gcut-egg.xml:544(para) msgid "" "Gets a GIOChannel connected " "with standard input of external process." msgstr "" "外部プロセスの標準入力と結びついたGIOChannelを取得します。" #: xml/gcut-process.xml:607(simpara) xml/gcut-process.xml:623(simpara) #: xml/gcut-process.xml:639(simpara) xml/gcut-egg.xml:551(simpara) #: xml/gcut-egg.xml:568(simpara) xml/gcut-egg.xml:585(simpara) msgid "" "a GIOChannel if external " "process is running, otherwise NULL." msgstr "" "外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL。" #: xml/gcut-process.xml:613(title) msgid "gcut_process_get_output_channel ()" msgstr "" #: xml/gcut-process.xml:615(programlisting) #, no-wrap msgid "GIOChannel * gcut_process_get_output_channel (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:616(para) xml/gcut-egg.xml:561(para) msgid "" "Gets a GIOChannel connected " "with standard output of external process." msgstr "" "外部プロセスの標準出力と結びついたGIOChannelを取得します。" #: xml/gcut-process.xml:629(title) msgid "gcut_process_get_error_channel ()" msgstr "" #: xml/gcut-process.xml:631(programlisting) #, no-wrap msgid "GIOChannel * gcut_process_get_error_channel (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:632(para) xml/gcut-egg.xml:578(para) msgid "" "Gets a GIOChannel connected " "with standard error output of external process." msgstr "" "外部プロセスのエラー出力に結びついたGIOChannelを返します。" #: xml/gcut-process.xml:645(title) msgid "gcut_process_get_output_stream ()" msgstr "" #: xml/gcut-process.xml:647(programlisting) #, no-wrap msgid "GInputStream * gcut_process_get_output_stream (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:648(para) msgid "" "Gets a GInputStream " "connected with standard output of external process." msgstr "" "外部プロセスの標準出力と結びついたGInputStreamを取得します。" #: xml/gcut-process.xml:655(simpara) xml/gcut-process.xml:671(simpara) msgid "" "a GInputStream if " "external process is running, otherwise NULL." msgstr "" "外部プロセスが実行中の場合はGInputStream。そうでない場合はNULL。" #: xml/gcut-process.xml:661(title) msgid "gcut_process_get_error_stream ()" msgstr "" #: xml/gcut-process.xml:663(programlisting) #, no-wrap msgid "GInputStream * gcut_process_get_error_stream (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:664(para) msgid "" "Gets a GInputStream " "connected with standard error output of external process." msgstr "" "外部プロセスの標準エラー出力に結びついたGInputStreamを返します。" #: xml/gcut-process.xml:677(title) msgid "gcut_process_get_forced_termination_wait_time ()" msgstr "" #: xml/gcut-process.xml:679(programlisting) #, no-wrap msgid "" "guint gcut_process_get_forced_termination_wait_time\n" " (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:681(para) xml/gcut-egg.xml:596(para) msgid "Gets a wait time in milliseconds for forced termination on dispose." msgstr "" "オブジェクトが破棄されるときに行われる外部コマンド強制終了後に待つ時間(ミリ" "秒)を取得します。" #: xml/gcut-process.xml:688(simpara) xml/gcut-egg.xml:603(simpara) msgid "" "a timeout value for waiting forced terminated external command on dispose." msgstr "破棄時の強制終了待ちの時間。" #: xml/gcut-process.xml:694(title) msgid "gcut_process_set_forced_termination_wait_time ()" msgstr "" #: xml/gcut-process.xml:696(programlisting) #, no-wrap msgid "" "void gcut_process_set_forced_termination_wait_time\n" " (GCutProcess *process,\n" " guint timeout);" msgstr "" #: xml/gcut-process.xml:699(para) xml/gcut-egg.xml:615(para) msgid "" "Sets a wait time in milliseconds for forced termination on dispose. If " "timeout is 0, it doesn't wait termination of external " "process. The default value is 10." msgstr "" "オブジェクトが破棄されるときに行われる外部コマンド強制終了時に待つ時間(ミリ" "秒)を設定します。timeoutが0なら外部コマンドの終了を待" "ちません。デフォルト値は10です。" #: xml/gcut-process.xml:708(simpara) xml/gcut-egg.xml:624(simpara) msgid "the timeout value in milliseconds" msgstr "タイムアウト時間(ミリ秒)" #: xml/gcut-process.xml:712(title) msgid "gcut_process_get_event_loop ()" msgstr "" #: xml/gcut-process.xml:714(programlisting) #, no-wrap msgid "GCutEventLoop * gcut_process_get_event_loop (GCutProcess *process);" msgstr "" #: xml/gcut-process.xml:715(para) msgid "Gets a event loop using by the process." msgstr "processが使っているイベントループを取得します。" #: xml/gcut-process.xml:721(simpara) xml/gcut-event-loop.xml:164(simpara) #: xml/gcut-event-loop.xml:179(simpara) xml/gcut-event-loop.xml:196(simpara) #: xml/gcut-event-loop.xml:213(simpara) xml/gcut-event-loop.xml:243(simpara) #: xml/gcut-event-loop.xml:272(simpara) xml/gcut-event-loop.xml:305(simpara) #: xml/gcut-event-loop.xml:334(simpara) xml/gcut-event-loop.xml:366(simpara) #: xml/gcut-event-loop.xml:391(simpara) xml/gcut-event-loop.xml:418(simpara) msgid "a GCutEventLoop." msgstr "GCutEventLoop。" #: xml/gcut-process.xml:726(title) msgid "gcut_process_set_event_loop ()" msgstr "" #: xml/gcut-process.xml:728(programlisting) #, no-wrap msgid "" "void gcut_process_set_event_loop (GCutProcess *process,\n" " GCutEventLoop *loop);" msgstr "" #: xml/gcut-process.xml:730(para) msgid "" "Sets a event loop for the process. If " "loop is NULL, the default GLib event loop will be used." msgstr "" "processのイベントループを設定します。loopNULLなら、" "デフォルトのGLibイベントループが使われます。" #: xml/gcut-process.xml:737(term) xml/gcut-event-loop.xml:163(term) #: xml/gcut-event-loop.xml:178(term) xml/gcut-event-loop.xml:195(term) #: xml/gcut-event-loop.xml:212(term) xml/gcut-event-loop.xml:242(term) #: xml/gcut-event-loop.xml:271(term) xml/gcut-event-loop.xml:304(term) #: xml/gcut-event-loop.xml:333(term) xml/gcut-event-loop.xml:365(term) #: xml/gcut-event-loop.xml:390(term) xml/gcut-event-loop.xml:417(term) msgid "loop :" msgstr "" #: xml/gcut-process.xml:738(simpara) msgid "" "the event loop or NULL" msgstr "" "イベントループまたはNULL。" #: xml/gcut-process.xml:745(title) xml/gcut-egg.xml:631(title) msgid "The \"command\" property" msgstr "\"command\"プロパティ" #: xml/gcut-process.xml:746(primary) xml/api-index-full.xml:499(link) msgid "GCutProcess:command" msgstr "" #: xml/gcut-process.xml:747(programlisting) #: xml/gcut-egg.xml:633(programlisting) #, no-wrap msgid " \"command\" gpointer : Read / Write" msgstr "" #: xml/gcut-process.xml:748(para) msgid "The command to be ran by the process." msgstr "このプロセスが実行する外部コマンド。" #: xml/gcut-process.xml:751(title) xml/gcut-egg.xml:637(title) msgid "Signal Details" msgstr "シグナル詳細" #: xml/gcut-process.xml:752(title) xml/gcut-egg.xml:638(title) msgid "The \"error\" signal" msgstr "\"error\"シグナル" #: xml/gcut-process.xml:753(primary) xml/api-index-full.xml:495(link) #: xml/api-index-1.1.5.xml:23(link) msgid "GCutProcess::error" msgstr "" #: xml/gcut-process.xml:754(programlisting) #, no-wrap msgid "" "void user_function (GCutProcess *process,\n" " gpointer error,\n" " gpointer user_data) : Run Last" msgstr "" #: xml/gcut-process.xml:757(para) xml/gcut-egg.xml:643(para) msgid "" "It is emitted each time an external process causes an error. (e.g. IO error)" msgstr "" "外部プロセス関連のエラーが発生した毎に発行されます。(例: 入出力エラー)" #: xml/gcut-process.xml:762(simpara) xml/gcut-process.xml:787(simpara) #: xml/gcut-process.xml:815(simpara) xml/gcut-process.xml:840(simpara) #: xml/gcut-egg.xml:648(simpara) xml/gcut-egg.xml:673(simpara) #: xml/gcut-egg.xml:701(simpara) xml/gcut-egg.xml:726(simpara) msgid "the object which received the signal." msgstr "シグナルを受け取るオブジェクト。" #: xml/gcut-process.xml:765(simpara) xml/gcut-egg.xml:651(simpara) msgid "" "the error of an external process. (GError)" msgstr "" "外部プロセスのエラー。(GError)" #: xml/gcut-process.xml:768(simpara) xml/gcut-process.xml:797(simpara) #: xml/gcut-process.xml:825(simpara) xml/gcut-process.xml:846(simpara) #: xml/gcut-egg.xml:654(simpara) xml/gcut-egg.xml:683(simpara) #: xml/gcut-egg.xml:711(simpara) xml/gcut-egg.xml:732(simpara) msgid "user data set when the signal handler was connected." msgstr "シグナルハンドラが接続された時にユーザが指定したデータ。" #: xml/gcut-process.xml:769(title) xml/gcut-egg.xml:655(title) msgid "The \"error-received\" signal" msgstr "\"error-received\"シグナル" #: xml/gcut-process.xml:770(primary) xml/api-index-full.xml:496(link) #: xml/api-index-1.1.5.xml:24(link) msgid "GCutProcess::error-received" msgstr "" #: xml/gcut-process.xml:771(programlisting) #: xml/gcut-process.xml:800(programlisting) #, no-wrap msgid "" "void user_function (GCutProcess *process,\n" " gchar *chunk,\n" " guint64 size,\n" " gpointer user_data) : Run Last" msgstr "" #: xml/gcut-process.xml:775(para) xml/gcut-egg.xml:661(para) msgid "" "It is emitted each time an external process outputs something to its " "standard error output and it is read." msgstr "" "外部プロセスが標準エラー出力に出力したデータが読み込まれる毎に発行されます。" #: xml/gcut-process.xml:780(para) xml/gcut-process.xml:808(para) #: xml/gcut-egg.xml:666(para) xml/gcut-egg.xml:694(para) msgid "" "Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() " "and so on for detecting an external process's output is readable." msgstr "" "外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()や" "g_main_context_iteration" "()などでGLibのメインループをまわす必要があることに注意して" "ください。" #: xml/gcut-process.xml:790(simpara) xml/gcut-egg.xml:676(simpara) msgid "the chunk read from an external process's standard error output." msgstr "外部プロセスの標準エラー出力から読み込んだデータ。" #: xml/gcut-process.xml:794(simpara) xml/gcut-process.xml:822(simpara) #: xml/gcut-egg.xml:680(simpara) xml/gcut-egg.xml:708(simpara) msgid "" "the size of chunk. (gsize)" msgstr "" "chunkのサイズ。(gsize)" #: xml/gcut-process.xml:798(title) xml/gcut-egg.xml:684(title) msgid "The \"output-received\" signal" msgstr "\"output-received\"シグナル" #: xml/gcut-process.xml:799(primary) xml/api-index-full.xml:497(link) #: xml/api-index-1.1.5.xml:25(link) msgid "GCutProcess::output-received" msgstr "" #: xml/gcut-process.xml:804(para) xml/gcut-egg.xml:690(para) msgid "" "It is emitted each time an external process outputs something to its " "standard output and it is read." msgstr "外部プロセスが標準出力に出力したデータが読み込まれる毎に発行されます。" #: xml/gcut-process.xml:818(simpara) xml/gcut-egg.xml:704(simpara) msgid "the chunk read from an external process's standard output." msgstr "外部プロセスの標準出力から読み込んだデータ。" #: xml/gcut-process.xml:826(title) xml/gcut-egg.xml:712(title) msgid "The \"reaped\" signal" msgstr "\"reaped\"シグナル" #: xml/gcut-process.xml:827(primary) xml/api-index-full.xml:498(link) #: xml/api-index-1.1.5.xml:26(link) msgid "GCutProcess::reaped" msgstr "" #: xml/gcut-process.xml:828(programlisting) #, no-wrap msgid "" "void user_function (GCutProcess *process,\n" " gint status,\n" " gpointer user_data) : Run Last" msgstr "" #: xml/gcut-process.xml:831(para) xml/gcut-egg.xml:717(para) msgid "It is emitted when an external process is exited." msgstr "外部プロセスが終了した時に発行されます。" #: xml/gcut-process.xml:834(para) xml/gcut-egg.xml:720(para) msgid "" "Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() " "and so on for detecting an external process is exited." msgstr "" "外部コマンドが終了したこと検出するために、g_main_loop_run()g_main_context_iteration()な" "どでGLibのメインループをまわす必要があることに注意してください。" #: xml/gcut-process.xml:842(term) xml/gcut-egg.xml:728(term) msgid "status :" msgstr "" #: xml/gcut-process.xml:843(simpara) xml/gcut-egg.xml:729(simpara) msgid "the exit status of an external process." msgstr "外部プロセスの終了ステータス。" #: xml/gcut-object.xml:7(refentrytitle) xml/gcut-object.xml:14(refname) #: xml/api-index-full.xml:489(link) xml/api-index-full.xml:490(link) #: xml/api-index-full.xml:491(link) xml/api-index-1.0.5.xml:70(link) #: xml/api-index-1.0.5.xml:71(link) xml/api-index-1.0.5.xml:72(link) msgid "Assertion Utilities for GObject" msgstr "GObject用の検証ユーティリティ" #: xml/gcut-object.xml:15(refpurpose) msgid "" "Utilities to write assertions related to more easily." msgstr "" "に関する検証をもっと簡単に書" "くためのユーティリティ。" #: xml/gcut-object.xml:22(link) xml/gcut-object.xml:47(primary) #: xml/api-index-full.xml:489(link) xml/api-index-1.0.5.xml:70(link) msgid "gcut_object_equal" msgstr "" #: xml/gcut-object.xml:22(parameter) msgid "const *object1" msgstr "" #: xml/gcut-object.xml:23(parameter) msgid "const *object2" msgstr "" #: xml/gcut-object.xml:25(link) xml/gcut-object.xml:73(primary) #: xml/api-index-full.xml:490(link) xml/api-index-1.0.5.xml:71(link) msgid "gcut_object_inspect" msgstr "" #: xml/gcut-object.xml:25(parameter) xml/gcut-object.xml:26(parameter) msgid "const *object" msgstr "" #: xml/gcut-object.xml:26(link) xml/gcut-object.xml:88(primary) #: xml/api-index-full.xml:491(link) xml/api-index-1.0.5.xml:72(link) msgid "gcut_object_inspect_custom" msgstr "" #: xml/gcut-object.xml:27(parameter) xml/gcut-list.xml:26(parameter) msgid "" " inspect_func" msgstr "" #: xml/gcut-object.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " );\n" " * ();\n" " * (,\n" " ,\n" " );\n" msgstr "" #: xml/gcut-object.xml:38(para) msgid "" "The utilities help you to write assertions that are related to GObject." msgstr "" "このユーティリティはGObjectに関" "する検証の作成を補助します。" #: xml/gcut-object.xml:46(title) msgid "gcut_object_equal ()" msgstr "" #: xml/gcut-object.xml:48(programlisting) #, no-wrap msgid "" "gboolean gcut_object_equal (const GObject *object1,\n" " const GObject *object2,\n" " GEqualFunc equal_func);" msgstr "" #: xml/gcut-object.xml:51(para) msgid "" "Compares two GObject, " "object1 and object2 by " "equal_func. If equal_func is " "NULL, object1 and object2 is " "just only compared by memory location." msgstr "" "ふたつのGObject、" "object1object2を" "equal_funcで比較します。equal_funcがNULLの場合はobject1object2は単にメモリの位置だけで比較します。" #: xml/gcut-object.xml:56(term) msgid "object1 :" msgstr "" #: xml/gcut-object.xml:57(simpara) xml/gcut-object.xml:60(simpara) msgid "a GObject to be compared." msgstr "比較するGObject。" #: xml/gcut-object.xml:59(term) msgid "object2 :" msgstr "" #: xml/gcut-object.xml:63(simpara) msgid "" "a function that compares two GObject. NULL is OK." msgstr "" "ふたつのGObjectを比較する関数。" "NULLも可。" #: xml/gcut-object.xml:66(simpara) msgid "" "TRUE if object1 == object2 or " "equal_func(object1, " "object2), FALSE otherwise." msgstr "" "object1 == object2あるいは" "equal_func(object1, " "object2)がTRUEならTRUE、そうでない場合はFALSE。" #: xml/gcut-object.xml:72(title) msgid "gcut_object_inspect ()" msgstr "" #: xml/gcut-object.xml:74(programlisting) #, no-wrap msgid "gchar * gcut_object_inspect (const GObject *object);" msgstr "" #: xml/gcut-object.xml:75(para) msgid "" "Inspects object's property. The returned string " "should be freed when no longer needed." msgstr "" "objectのプロパティの詳細を返します。返された文字列が必" "要なくなったときは開放してください。" #: xml/gcut-object.xml:80(simpara) xml/gcut-object.xml:97(simpara) msgid "a GObject." msgstr "GObject。" #: xml/gcut-object.xml:82(simpara) xml/gcut-object.xml:105(simpara) msgid "inspected object as a string." msgstr "objectの詳細を示した文字列。" #: xml/gcut-object.xml:87(title) msgid "gcut_object_inspect_custom ()" msgstr "" #: xml/gcut-object.xml:89(programlisting) #, no-wrap msgid "" "gchar * gcut_object_inspect_custom (const GObject *object,\n" " GCutInspectFunction inspect_func,\n" " gpointer user_data);" msgstr "" #: xml/gcut-object.xml:92(para) msgid "" "Inspects object by inspect_func. The returned string should be freed when no longer needed." msgstr "" "objectinspect_funcで詳細を示" "します。返された文字列が必要なくなったときは開放してください。" #: xml/gcut-object.xml:99(term) xml/gcut-list.xml:122(term) msgid "inspect_func :" msgstr "" #: xml/gcut-object.xml:100(simpara) msgid "a function that inspects object." msgstr "objectの詳細を示す関数。" #: xml/gcut-main.xml:7(refentrytitle) xml/gcut-main.xml:14(refname) #: xml/api-index-full.xml:437(link) xml/api-index-full.xml:533(link) #: xml/api-index-full.xml:603(link) xml/api-index-full.xml:604(link) msgid "gcut-main" msgstr "" #: xml/gcut-main.xml:21(link) xml/gcut-main.xml:37(primary) #: xml/api-index-full.xml:437(link) msgid "gcut_init" msgstr "" #: xml/gcut-main.xml:22(link) xml/gcut-main.xml:43(primary) #: xml/api-index-full.xml:603(link) msgid "gcut_value_equal_init" msgstr "" #: xml/gcut-main.xml:23(link) xml/gcut-main.xml:49(primary) #: xml/api-index-full.xml:533(link) msgid "gcut_quit" msgstr "" #: xml/gcut-main.xml:24(link) xml/gcut-main.xml:55(primary) #: xml/api-index-full.xml:604(link) msgid "gcut_value_equal_quit" msgstr "" #: xml/gcut-main.xml:21(synopsis) #, no-wrap msgid "" " ();\n" " ();\n" " ();\n" " ();\n" msgstr "" #: xml/gcut-main.xml:36(title) msgid "gcut_init ()" msgstr "" #: xml/gcut-main.xml:38(programlisting) #, no-wrap msgid "void gcut_init (void);" msgstr "" #: xml/gcut-main.xml:42(title) msgid "gcut_value_equal_init ()" msgstr "" #: xml/gcut-main.xml:44(programlisting) #, no-wrap msgid "void gcut_value_equal_init (void);" msgstr "" #: xml/gcut-main.xml:48(title) msgid "gcut_quit ()" msgstr "" #: xml/gcut-main.xml:50(programlisting) #, no-wrap msgid "void gcut_quit (void);" msgstr "" #: xml/gcut-main.xml:54(title) msgid "gcut_value_equal_quit ()" msgstr "" #: xml/gcut-main.xml:56(programlisting) #, no-wrap msgid "void gcut_value_equal_quit (void);" msgstr "" #: xml/gcut-list.xml:7(refentrytitle) xml/gcut-list.xml:14(refname) #: xml/api-index-full.xml:460(link) xml/api-index-full.xml:461(link) #: xml/api-index-full.xml:462(link) xml/api-index-full.xml:463(link) #: xml/api-index-full.xml:464(link) xml/api-index-full.xml:465(link) #: xml/api-index-full.xml:466(link) xml/api-index-full.xml:467(link) #: xml/api-index-full.xml:468(link) xml/api-index-full.xml:469(link) #: xml/api-index-full.xml:470(link) xml/api-index-full.xml:471(link) #: xml/api-index-full.xml:472(link) xml/api-index-full.xml:473(link) #: xml/api-index-full.xml:474(link) xml/api-index-full.xml:478(link) #: xml/api-index-full.xml:479(link) xml/api-index-full.xml:481(link) #: xml/api-index-full.xml:484(link) xml/api-index-full.xml:485(link) #: xml/api-index-deprecated.xml:56(link) xml/api-index-deprecated.xml:57(link) #: xml/api-index-deprecated.xml:58(link) xml/api-index-deprecated.xml:59(link) #: xml/api-index-deprecated.xml:60(link) xml/api-index-deprecated.xml:61(link) #: xml/api-index-deprecated.xml:62(link) xml/api-index-deprecated.xml:63(link) #: xml/api-index-deprecated.xml:64(link) xml/api-index-1.0.6.xml:85(link) #: xml/api-index-1.0.6.xml:86(link) xml/api-index-1.0.6.xml:87(link) #: xml/api-index-1.0.6.xml:88(link) xml/api-index-1.0.6.xml:89(link) #: xml/api-index-1.0.6.xml:90(link) xml/api-index-1.0.6.xml:91(link) #: xml/api-index-1.0.6.xml:92(link) xml/api-index-1.0.6.xml:93(link) #: xml/api-index-1.0.5.xml:57(link) xml/api-index-1.0.5.xml:58(link) #: xml/api-index-1.0.5.xml:59(link) xml/api-index-1.0.5.xml:60(link) #: xml/api-index-1.0.5.xml:61(link) xml/api-index-1.0.5.xml:62(link) #: xml/api-index-1.0.5.xml:63(link) xml/api-index-1.0.5.xml:64(link) #: xml/api-index-1.0.5.xml:65(link) xml/api-index-1.0.5.xml:66(link) #: xml/api-index-1.0.5.xml:67(link) msgid "Assertion Utilities for GList" msgstr "GList用の検証ユーティリティ" #: xml/gcut-list.xml:15(refpurpose) msgid "" "Utilities to write assertions related to more easily." msgstr "" "に関する検証をもっと簡単に書く" "ためのユーティリティ。" #: xml/gcut-list.xml:22(link) xml/gcut-list.xml:74(primary) #: xml/api-index-full.xml:461(link) xml/api-index-1.0.5.xml:58(link) msgid "gcut_list_equal" msgstr "" #: xml/gcut-list.xml:22(parameter) xml/gcut-list.xml:28(parameter) #: xml/gcut-list.xml:31(parameter) xml/gcut-list.xml:34(parameter) msgid "const *list1" msgstr "" #: xml/gcut-list.xml:23(parameter) xml/gcut-list.xml:29(parameter) #: xml/gcut-list.xml:32(parameter) xml/gcut-list.xml:35(parameter) msgid "const *list2" msgstr "" #: xml/gcut-list.xml:25(link) xml/gcut-list.xml:104(primary) #: xml/api-index-full.xml:466(link) xml/api-index-1.0.5.xml:60(link) msgid "gcut_list_inspect" msgstr "" #: xml/gcut-list.xml:28(link) xml/gcut-list.xml:134(primary) #: xml/api-index-full.xml:462(link) xml/api-index-1.0.6.xml:85(link) msgid "gcut_list_equal_int" msgstr "" #: xml/gcut-list.xml:30(link) xml/gcut-list.xml:154(primary) #: xml/api-index-full.xml:469(link) xml/api-index-1.0.6.xml:90(link) msgid "gcut_list_inspect_int" msgstr "" #: xml/gcut-list.xml:31(link) xml/gcut-list.xml:169(primary) #: xml/api-index-full.xml:464(link) xml/api-index-1.0.6.xml:87(link) msgid "gcut_list_equal_uint" msgstr "" #: xml/gcut-list.xml:33(link) xml/gcut-list.xml:189(primary) #: xml/api-index-full.xml:472(link) xml/api-index-1.0.6.xml:93(link) msgid "gcut_list_inspect_uint" msgstr "" #: xml/gcut-list.xml:34(link) xml/gcut-list.xml:204(primary) #: xml/api-index-full.xml:463(link) xml/api-index-1.0.6.xml:86(link) msgid "gcut_list_equal_string" msgstr "" #: xml/gcut-list.xml:36(link) xml/gcut-list.xml:224(primary) #: xml/api-index-full.xml:471(link) xml/api-index-1.0.6.xml:92(link) msgid "gcut_list_inspect_string" msgstr "" #: xml/gcut-list.xml:37(link) xml/gcut-list.xml:239(primary) #: xml/api-index-full.xml:470(link) xml/api-index-1.0.6.xml:91(link) msgid "gcut_list_inspect_object" msgstr "" #: xml/gcut-list.xml:38(link) xml/gcut-list.xml:254(primary) #: xml/api-index-full.xml:467(link) xml/api-index-1.0.6.xml:88(link) msgid "gcut_list_inspect_enum" msgstr "" #: xml/gcut-list.xml:38(parameter) xml/gcut-list.xml:40(parameter) #: xml/gcut-assertions.xml:63(parameter) xml/gcut-assertions.xml:67(parameter) #: xml/gcut-assertions-helper.xml:50(parameter) #: xml/gcut-assertions-helper.xml:56(parameter) msgid " type" msgstr "" #: xml/gcut-list.xml:40(link) xml/gcut-list.xml:274(primary) #: xml/api-index-full.xml:468(link) xml/api-index-1.0.6.xml:89(link) msgid "gcut_list_inspect_flags" msgstr "" #: xml/gcut-list.xml:42(link) xml/gcut-list.xml:294(primary) #: xml/api-index-full.xml:473(link) xml/api-index-deprecated.xml:58(link) #: xml/api-index-1.0.5.xml:61(link) msgid "gcut_list_int_equal" msgstr "" #: xml/gcut-list.xml:44(link) xml/gcut-list.xml:314(primary) #: xml/api-index-full.xml:474(link) xml/api-index-deprecated.xml:59(link) #: xml/api-index-1.0.5.xml:62(link) msgid "gcut_list_int_inspect" msgstr "" #: xml/gcut-list.xml:45(link) xml/gcut-list.xml:330(primary) #: xml/api-index-full.xml:484(link) xml/api-index-deprecated.xml:63(link) #: xml/api-index-1.0.5.xml:66(link) msgid "gcut_list_uint_equal" msgstr "" #: xml/gcut-list.xml:47(link) xml/gcut-list.xml:350(primary) #: xml/api-index-full.xml:485(link) xml/api-index-deprecated.xml:64(link) #: xml/api-index-1.0.5.xml:67(link) msgid "gcut_list_uint_inspect" msgstr "" #: xml/gcut-list.xml:48(link) xml/gcut-list.xml:366(primary) #: xml/api-index-full.xml:479(link) xml/api-index-deprecated.xml:61(link) #: xml/api-index-1.0.5.xml:64(link) msgid "gcut_list_string_equal" msgstr "" #: xml/gcut-list.xml:50(link) xml/gcut-list.xml:386(primary) #: xml/api-index-full.xml:481(link) xml/api-index-deprecated.xml:62(link) #: xml/api-index-1.0.5.xml:65(link) msgid "gcut_list_string_inspect" msgstr "" #: xml/gcut-list.xml:51(link) xml/gcut-list.xml:402(primary) #: xml/api-index-full.xml:478(link) xml/api-index-deprecated.xml:60(link) #: xml/api-index-1.0.5.xml:63(link) msgid "gcut_list_object_inspect" msgstr "" #: xml/gcut-list.xml:52(link) xml/gcut-list.xml:418(primary) #: xml/api-index-full.xml:460(link) xml/api-index-deprecated.xml:56(link) #: xml/api-index-1.0.5.xml:57(link) msgid "gcut_list_enum_inspect" msgstr "" #: xml/gcut-list.xml:54(link) xml/gcut-list.xml:438(primary) #: xml/api-index-full.xml:465(link) xml/api-index-deprecated.xml:57(link) #: xml/api-index-1.0.5.xml:59(link) msgid "gcut_list_flags_inspect" msgstr "" #: xml/gcut-list.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " );\n" " * (,\n" " ,\n" " );\n" " (,\n" " );\n" " * ();\n" " (,\n" " );\n" " * ();\n" " (,\n" " );\n" " * ();\n" " * ();\n" " * (,\n" " );\n" " * (,\n" " );\n" "#define (list1,\n" " list2)\n" "#define (list)\n" "#define (list1,\n" " list2)\n" "#define (list)\n" "#define (list1,\n" " list2)\n" "#define (list)\n" "#define (list)\n" "#define (list,\n" " type)\n" "#define (list,\n" " type)\n" msgstr "" #: xml/gcut-list.xml:65(para) msgid "" "The utilities help you to write assertions that are related to GList." msgstr "" "このユーティリティはGListに関する" "検証の作成を補助します。" #: xml/gcut-list.xml:73(title) msgid "gcut_list_equal ()" msgstr "" #: xml/gcut-list.xml:75(programlisting) #, no-wrap msgid "" "gboolean gcut_list_equal (const GList *list1,\n" " const GList *list2,\n" " GEqualFunc equal_func);" msgstr "" #: xml/gcut-list.xml:78(para) msgid "" "Compares two GList, " "list1 and list2. " "equal_func is called for each corresponding values of " "list1 and list2." msgstr "" "ふたつのGListlist1list2を比較します。equal_funclist1list2の対応" "する値それぞれに対して呼ばれます。" #: xml/gcut-list.xml:88(term) xml/gcut-list.xml:141(term) #: xml/gcut-list.xml:176(term) xml/gcut-list.xml:211(term) #: xml/gcut-list.xml:301(term) xml/gcut-list.xml:337(term) #: xml/gcut-list.xml:373(term) msgid "list1 :" msgstr "" #: xml/gcut-list.xml:89(simpara) xml/gcut-list.xml:92(simpara) msgid "a GList to be compared." msgstr "比較するGList。" #: xml/gcut-list.xml:91(term) xml/gcut-list.xml:144(term) #: xml/gcut-list.xml:179(term) xml/gcut-list.xml:214(term) #: xml/gcut-list.xml:304(term) xml/gcut-list.xml:340(term) #: xml/gcut-list.xml:376(term) msgid "list2 :" msgstr "" #: xml/gcut-list.xml:95(simpara) xml/gcut-hash-table.xml:79(simpara) msgid "a function that compares two values." msgstr "ふたつの値を比較する関数。" #: xml/gcut-list.xml:97(simpara) msgid "" "TRUE if all corresponding values of list1 and " "list2 are reported TRUE by equal_func, FALSE otherwise." msgstr "" "list1list2のすべての対応する" "値がequal_funcでTRUEの場合はTRUE、そうでない場合は" "FALSE。" #: xml/gcut-list.xml:103(title) msgid "gcut_list_inspect ()" msgstr "" #: xml/gcut-list.xml:105(programlisting) #, no-wrap msgid "" "gchar * gcut_list_inspect (const GList *list,\n" " GCutInspectFunction inspect_func,\n" " gpointer user_data);" msgstr "" #: xml/gcut-list.xml:108(para) msgid "" "Inspects list. Each value of list is inspected by inspect_func. The returned " "string should be freed when no longer needed." msgstr "" "listの詳細を返します。listのそ" "れぞれの値はinspect_funcで詳細化されます。返された文字" "列が必要なくなったときは開放してください。" #: xml/gcut-list.xml:120(simpara) msgid "a GList to be inspected." msgstr "詳細を示すGList。" #: xml/gcut-list.xml:123(simpara) xml/gcut-hash-table.xml:113(simpara) #: xml/gcut-hash-table.xml:154(simpara) msgid "a function that inspects each value." msgstr "各値の詳細を示す関数。" #: xml/gcut-list.xml:128(simpara) xml/gcut-list.xml:163(simpara) #: xml/gcut-list.xml:198(simpara) xml/gcut-list.xml:233(simpara) #: xml/gcut-list.xml:248(simpara) xml/gcut-list.xml:268(simpara) #: xml/gcut-list.xml:288(simpara) xml/gcut-list.xml:324(simpara) #: xml/gcut-list.xml:360(simpara) xml/gcut-list.xml:396(simpara) #: xml/gcut-list.xml:412(simpara) xml/gcut-list.xml:432(simpara) #: xml/gcut-list.xml:452(simpara) msgid "inspected list as a string." msgstr "listの詳細を示した文字列。" #: xml/gcut-list.xml:133(title) msgid "gcut_list_equal_int ()" msgstr "" #: xml/gcut-list.xml:135(programlisting) #, no-wrap msgid "" "gboolean gcut_list_equal_int (const GList *list1,\n" " const GList *list2);" msgstr "" #: xml/gcut-list.xml:137(para) xml/gcut-list.xml:297(para) msgid "" "Compares two GList, " "list1 and list2. " "list1 and list2 should be " "GList of gint." msgstr "" "ふたつのGListlist1list2を比較します。list1list2gintGListでなければいけ" "ません。" #: xml/gcut-list.xml:142(simpara) xml/gcut-list.xml:145(simpara) #: xml/gcut-list.xml:302(simpara) xml/gcut-list.xml:305(simpara) msgid "" "a GList of gint to be compared." msgstr "" "比較するgintGList。" #: xml/gcut-list.xml:147(simpara) xml/gcut-list.xml:307(simpara) msgid "" "TRUE if all corresponding integers of list1 and " "list2 are same value, FALSE otherwise." msgstr "" "list1list2の対応するすべての" "値が同じ場合はTRUE、そうでない場合はFALSE。" #: xml/gcut-list.xml:153(title) msgid "gcut_list_inspect_int ()" msgstr "" #: xml/gcut-list.xml:155(programlisting) #, no-wrap msgid "gchar * gcut_list_inspect_int (const GList *list);" msgstr "" #: xml/gcut-list.xml:156(para) xml/gcut-list.xml:317(para) msgid "" "Inspects list. list should be " "GList of gint. The returned string should be freed when no " "longer needed." msgstr "" "listの詳細を返します。listは" "gintGListでなければいけません。返された文字列が必要なく" "なったときは開放してください。" #: xml/gcut-list.xml:161(simpara) xml/gcut-list.xml:322(simpara) msgid "" "a GList of gint to be inspected." msgstr "" "詳細を示すgintGList。" #: xml/gcut-list.xml:168(title) msgid "gcut_list_equal_uint ()" msgstr "" #: xml/gcut-list.xml:170(programlisting) #, no-wrap msgid "" "gboolean gcut_list_equal_uint (const GList *list1,\n" " const GList *list2);" msgstr "" #: xml/gcut-list.xml:172(para) xml/gcut-list.xml:333(para) msgid "" "Compares two GList, " "list1 and list2. " "list1 and list2 should be " "GList of guint." msgstr "" "ふたつのGListlist1list2を比較します。list1list2guintGListでなければいけません。" #: xml/gcut-list.xml:177(simpara) xml/gcut-list.xml:180(simpara) #: xml/gcut-list.xml:338(simpara) xml/gcut-list.xml:341(simpara) msgid "" "a GList of guint to be compared." msgstr "" "比較するguintGList。" #: xml/gcut-list.xml:182(simpara) xml/gcut-list.xml:343(simpara) msgid "" "TRUE if all corresponding unsigned integers of list1 " "and list2 are same value, FALSE otherwise." msgstr "" "list1list2のすべての対応する" "符号なし整数値が同じ値の場合はTRUE、そうでない場合はFALSE。" #: xml/gcut-list.xml:188(title) msgid "gcut_list_inspect_uint ()" msgstr "" #: xml/gcut-list.xml:190(programlisting) #, no-wrap msgid "gchar * gcut_list_inspect_uint (const GList *list);" msgstr "" #: xml/gcut-list.xml:191(para) xml/gcut-list.xml:353(para) msgid "" "Inspects list. list should be " "GList of guint. The returned string should be freed when no " "longer needed." msgstr "" "listの詳細を返します。listは" "guintGListでなければいけません。返された文字列が必要なく" "なったときは開放してください。" #: xml/gcut-list.xml:196(simpara) xml/gcut-list.xml:358(simpara) msgid "" "a GList of guint to be inspected." msgstr "" "詳細を示すguintGListです。" #: xml/gcut-list.xml:203(title) msgid "gcut_list_equal_string ()" msgstr "" #: xml/gcut-list.xml:205(programlisting) #, no-wrap msgid "" "gboolean gcut_list_equal_string (const GList *list1,\n" " const GList *list2);" msgstr "" #: xml/gcut-list.xml:207(para) xml/gcut-list.xml:369(para) msgid "" "Compares two GList, " "list1 and list2. " "list1 and list2 should be " "GList of string." msgstr "" "ふたつのGListlist1list2を比較します。list1list2は文字列のGListでなければいけません。" #: xml/gcut-list.xml:212(simpara) xml/gcut-list.xml:215(simpara) #: xml/gcut-list.xml:374(simpara) xml/gcut-list.xml:377(simpara) msgid "" "a GList of string to be compared." msgstr "比較する文字列のGList。" #: xml/gcut-list.xml:217(simpara) xml/gcut-list.xml:379(simpara) msgid "" "TRUE if all corresponding string of list1 and " "list2 are same content string, FALSE otherwise." msgstr "" "list1list2のすべての対応する" "文字列が同じ内容の文字列の場合はTRUE、そうでない場合はFALSE。" #: xml/gcut-list.xml:223(title) msgid "gcut_list_inspect_string ()" msgstr "" #: xml/gcut-list.xml:225(programlisting) #, no-wrap msgid "gchar * gcut_list_inspect_string (const GList *list);" msgstr "" #: xml/gcut-list.xml:226(para) xml/gcut-list.xml:389(para) msgid "" "Inspects list. list should be " "GList of string. The returned " "string should be freed when no longer needed." msgstr "" "listの詳細を返します。listは文" "字列のGListでなければいけません。" "返された文字列が必要なくなったときは開放してください。" #: xml/gcut-list.xml:231(simpara) xml/gcut-list.xml:394(simpara) msgid "" "a GList of string to be " "inspected." msgstr "詳細を示す文字列のGList。" #: xml/gcut-list.xml:238(title) msgid "gcut_list_inspect_object ()" msgstr "" #: xml/gcut-list.xml:240(programlisting) #, no-wrap msgid "gchar * gcut_list_inspect_object (const GList *list);" msgstr "" #: xml/gcut-list.xml:241(para) xml/gcut-list.xml:405(para) msgid "" "Inspects list. list should be " "GList of GObject. The returned string should be freed when no " "longer needed." msgstr "" "listの詳細を返します。listは" "GObjectGListでなければいけません。返された文字列が必要なく" "なったときは開放してください。" #: xml/gcut-list.xml:246(simpara) xml/gcut-list.xml:410(simpara) msgid "" "a GList of GObject to be inspected." msgstr "" "詳細を示すGObjectGList。" #: xml/gcut-list.xml:253(title) msgid "gcut_list_inspect_enum ()" msgstr "" #: xml/gcut-list.xml:255(programlisting) #, no-wrap msgid "" "gchar * gcut_list_inspect_enum (GType type,\n" " const GList *list);" msgstr "" #: xml/gcut-list.xml:257(para) xml/gcut-list.xml:421(para) msgid "" "Inspects list. list should be " "GList of enum value of GEnum. The returned string should be " "freed when no longer needed." msgstr "" "listの詳細を返します。listは" "GEnumの列挙値のGListでなければいけません。返された文字列が必要" "なくなったときは開放してください。" #: xml/gcut-list.xml:262(term) xml/gcut-list.xml:282(term) #: xml/gcut-list.xml:429(term) xml/gcut-list.xml:449(term) #: xml/gcut-assertions.xml:405(term) xml/gcut-assertions.xml:429(term) #: xml/gcut-assertions-helper.xml:310(term) #: xml/gcut-assertions-helper.xml:340(term) msgid "type :" msgstr "" #: xml/gcut-list.xml:263(simpara) xml/gcut-list.xml:430(simpara) #: xml/gcut-enum.xml:104(simpara) xml/gcut-enum.xml:126(simpara) #: xml/gcut-assertions.xml:406(simpara) xml/gcut-assertions.xml:620(simpara) msgid "a GEnum type." msgstr "GEnumの型。" #: xml/gcut-list.xml:266(simpara) xml/gcut-list.xml:427(simpara) msgid "" "a GList of enum value to be " "inspected." msgstr "詳細を示す列挙値のGList。" #: xml/gcut-list.xml:273(title) msgid "gcut_list_inspect_flags ()" msgstr "" #: xml/gcut-list.xml:275(programlisting) #, no-wrap msgid "" "gchar * gcut_list_inspect_flags (GType type,\n" " const GList *list);" msgstr "" #: xml/gcut-list.xml:277(para) xml/gcut-list.xml:441(para) msgid "" "Inspects list. list should be " "GList of flags value of GFlags. The returned string should be " "freed when no longer needed." msgstr "" "listの詳細を返します。listは" "GFlagsのフラグ値のGListでなければいけません。返された文字列が必要" "なくなったときは開放してください。" #: xml/gcut-list.xml:283(simpara) xml/gcut-list.xml:450(simpara) #: xml/gcut-enum.xml:148(simpara) xml/gcut-enum.xml:171(simpara) #: xml/gcut-enum.xml:193(simpara) xml/gcut-assertions.xml:430(simpara) #: xml/gcut-assertions.xml:657(simpara) msgid "a GFlags type." msgstr "GFlagsの型。" #: xml/gcut-list.xml:286(simpara) xml/gcut-list.xml:447(simpara) msgid "" "a GList of flags value to be " "inspected." msgstr "" "詳細を示すフラグ値のGList。" #: xml/gcut-list.xml:293(title) msgid "gcut_list_int_equal()" msgstr "" #: xml/gcut-list.xml:295(programlisting) #, no-wrap msgid "#define gcut_list_int_equal(list1, list2)" msgstr "" #: xml/gcut-list.xml:296(para) msgid "" "gcut_list_int_equal has been deprecated since version " "1.0.6 and should not be used in newly-written code. Use gcut_list_equal_int() instead." msgstr "" "gcut_list_int_equalはバージョン1.0.6から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_list_equal_int()を使って下" "さい。" #: xml/gcut-list.xml:313(title) msgid "gcut_list_int_inspect()" msgstr "" #: xml/gcut-list.xml:315(programlisting) #, no-wrap msgid "#define gcut_list_int_inspect(list)" msgstr "" #: xml/gcut-list.xml:316(para) msgid "" "gcut_list_int_inspect has been deprecated since version " "1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_int() " "instead." msgstr "" "gcut_list_int_inspectはバージョン1.0.6から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_int()を使っ" "てください。" #: xml/gcut-list.xml:329(title) msgid "gcut_list_uint_equal()" msgstr "" #: xml/gcut-list.xml:331(programlisting) #, no-wrap msgid "#define gcut_list_uint_equal(list1, list2)" msgstr "" #: xml/gcut-list.xml:332(para) msgid "" "gcut_list_uint_equal has been deprecated since version " "1.0.6 and should not be used in newly-written code. Use gcut_list_equal_uint() instead." msgstr "" "gcut_list_uint_equalはバージョン1.0.6から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_list_equal_uint()を使って" "ください。" #: xml/gcut-list.xml:349(title) msgid "gcut_list_uint_inspect()" msgstr "" #: xml/gcut-list.xml:351(programlisting) #, no-wrap msgid "#define gcut_list_uint_inspect(list)" msgstr "" #: xml/gcut-list.xml:352(para) msgid "" "gcut_list_uint_inspect has been deprecated since version " "1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_uint() " "instead." msgstr "" "gcut_list_uint_inspectはバージョン1.0.6から非推奨になりま" "した。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_uint()を" "使ってください。" #: xml/gcut-list.xml:365(title) msgid "gcut_list_string_equal()" msgstr "" #: xml/gcut-list.xml:367(programlisting) #, no-wrap msgid "#define gcut_list_string_equal(list1, list2)" msgstr "" #: xml/gcut-list.xml:368(para) msgid "" "gcut_list_string_equal has been deprecated since version " "1.0.6 and should not be used in newly-written code. Use gcut_list_equal_string() " "instead." msgstr "" "gcut_list_string_equalはバージョン1.0.6から非推奨になりま" "した。新しく書くコードでは使わないでください。代わりにgcut_list_equal_string()を" "使ってください。" #: xml/gcut-list.xml:385(title) msgid "gcut_list_string_inspect()" msgstr "" #: xml/gcut-list.xml:387(programlisting) #, no-wrap msgid "#define gcut_list_string_inspect(list)" msgstr "" #: xml/gcut-list.xml:388(para) msgid "" "gcut_list_string_inspect has been deprecated since " "version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_string() instead." msgstr "" "gcut_list_string_inspectはバージョン1.0.6から非推奨になり" "ました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_string()" "を使ってください。" #: xml/gcut-list.xml:401(title) msgid "gcut_list_object_inspect()" msgstr "" #: xml/gcut-list.xml:403(programlisting) #, no-wrap msgid "#define gcut_list_object_inspect(list)" msgstr "" #: xml/gcut-list.xml:404(para) msgid "" "gcut_list_object_inspect has been deprecated since " "version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_object() instead." msgstr "" "gcut_list_object_inspectはバージョン1.0.6から非推奨になり" "ました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_object()" "を使ってください。" #: xml/gcut-list.xml:417(title) msgid "gcut_list_enum_inspect()" msgstr "" #: xml/gcut-list.xml:419(programlisting) #, no-wrap msgid "#define gcut_list_enum_inspect(list, type)" msgstr "" #: xml/gcut-list.xml:420(para) msgid "" "gcut_list_enum_inspect has been deprecated since version " "1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_enum() " "instead." msgstr "" "gcut_list_enum_inspectはバージョン1.0.6から非推奨になりま" "した。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_enum()を" "使ってください。" #: xml/gcut-list.xml:437(title) msgid "gcut_list_flags_inspect()" msgstr "" #: xml/gcut-list.xml:439(programlisting) #, no-wrap msgid "#define gcut_list_flags_inspect(list, type)" msgstr "" #: xml/gcut-list.xml:440(para) msgid "" "gcut_list_flags_inspect has been deprecated since version " "1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_flags() " "instead." msgstr "" "gcut_list_flags_inspectはバージョン1.0.6から非推奨になりま" "した。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_flags()を" "使ってください。" #: xml/gcut-key-file.xml:7(refentrytitle) xml/gcut-key-file.xml:14(refname) #: xml/api-index-full.xml:456(link) xml/api-index-full.xml:457(link) msgid "gcut-key-file" msgstr "" #: xml/gcut-key-file.xml:21(link) xml/gcut-key-file.xml:43(primary) #: xml/api-index-full.xml:456(link) msgid "gcut_key_file_get_enum" msgstr "" #: xml/gcut-key-file.xml:21(type) xml/gcut-key-file.xml:26(type) msgid "GKeyFile" msgstr "" #: xml/gcut-key-file.xml:21(parameter) xml/gcut-key-file.xml:26(parameter) msgid " *key_file" msgstr "" #: xml/gcut-key-file.xml:22(parameter) xml/gcut-key-file.xml:27(parameter) msgid "const *group_name" msgstr "" #: xml/gcut-key-file.xml:24(parameter) xml/gcut-enum.xml:25(parameter) #: xml/gcut-enum.xml:27(parameter) xml/gcut-assertions.xml:96(parameter) #: xml/gcut-assertions-helper.xml:94(parameter) msgid " enum_type" msgstr "" #: xml/gcut-key-file.xml:26(link) xml/gcut-key-file.xml:71(primary) #: xml/api-index-full.xml:457(link) msgid "gcut_key_file_get_flags" msgstr "" #: xml/gcut-key-file.xml:29(parameter) xml/gcut-enum.xml:30(parameter) #: xml/gcut-enum.xml:32(parameter) xml/gcut-enum.xml:35(parameter) #: xml/gcut-assertions.xml:100(parameter) #: xml/gcut-assertions-helper.xml:100(parameter) msgid " flags_type" msgstr "" #: xml/gcut-key-file.xml:21(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " );\n" msgstr "" #: xml/gcut-key-file.xml:42(title) msgid "gcut_key_file_get_enum ()" msgstr "" #: xml/gcut-key-file.xml:44(programlisting) #, no-wrap msgid "" "gint gcut_key_file_get_enum (GKeyFile *key_file,\n" " const gchar *group_name,\n" " const gchar *key,\n" " GType enum_type,\n" " GError **error);" msgstr "" #: xml/gcut-key-file.xml:51(term) xml/gcut-key-file.xml:79(term) msgid "key_file :" msgstr "" #: xml/gcut-key-file.xml:54(term) xml/gcut-key-file.xml:82(term) msgid "group_name :" msgstr "" #: xml/gcut-key-file.xml:60(term) xml/gcut-enum.xml:103(term) #: xml/gcut-enum.xml:125(term) xml/gcut-assertions.xml:619(term) #: xml/gcut-assertions-helper.xml:534(term) msgid "enum_type :" msgstr "" #: xml/gcut-key-file.xml:70(title) msgid "gcut_key_file_get_flags ()" msgstr "" #: xml/gcut-key-file.xml:72(programlisting) #, no-wrap msgid "" "guint gcut_key_file_get_flags (GKeyFile *key_file,\n" " const gchar *group_name,\n" " const gchar *key,\n" " GType flags_type,\n" " GError **error);" msgstr "" #: xml/gcut-key-file.xml:88(term) xml/gcut-enum.xml:147(term) #: xml/gcut-enum.xml:170(term) xml/gcut-enum.xml:192(term) #: xml/gcut-assertions.xml:656(term) xml/gcut-assertions-helper.xml:564(term) msgid "flags_type :" msgstr "" #: xml/gcut-io.xml:7(refentrytitle) xml/gcut-io.xml:14(refname) #: xml/api-index-full.xml:453(link) msgid "gcut-io" msgstr "" #: xml/gcut-io.xml:21(link) xml/gcut-io.xml:34(primary) #: xml/api-index-full.xml:453(link) msgid "gcut_io_inspect_condition" msgstr "" #: xml/gcut-io.xml:21(type) xml/gcut-event-loop.xml:32(type) msgid "GIOCondition" msgstr "" #: xml/gcut-io.xml:21(parameter) xml/gcut-event-loop.xml:32(parameter) msgid " condition" msgstr "" #: xml/gcut-io.xml:21(synopsis) #, no-wrap msgid " * ();\n" msgstr "" #: xml/gcut-io.xml:33(title) msgid "gcut_io_inspect_condition ()" msgstr "" #: xml/gcut-io.xml:35(programlisting) #, no-wrap msgid "gchar * gcut_io_inspect_condition (GIOCondition condition);" msgstr "" #: xml/gcut-io.xml:38(term) xml/gcut-event-loop.xml:218(term) msgid "condition :" msgstr "" #: xml/gcut-inspect.xml:7(refentrytitle) xml/gcut-inspect.xml:14(refname) #: xml/api-index-full.xml:439(link) xml/api-index-full.xml:440(link) #: xml/api-index-full.xml:441(link) xml/api-index-full.xml:442(link) #: xml/api-index-full.xml:443(link) xml/api-index-full.xml:444(link) #: xml/api-index-full.xml:445(link) xml/api-index-full.xml:446(link) #: xml/api-index-full.xml:447(link) xml/api-index-full.xml:448(link) #: xml/api-index-full.xml:449(link) xml/api-index-full.xml:450(link) #: xml/api-index-full.xml:451(link) xml/api-index-full.xml:452(link) #: xml/api-index-1.1.3.xml:20(link) xml/api-index-1.1.3.xml:21(link) #: xml/api-index-1.1.3.xml:22(link) xml/api-index-1.1.3.xml:23(link) #: xml/api-index-1.1.3.xml:24(link) xml/api-index-1.1.3.xml:25(link) #: xml/api-index-1.0.6.xml:75(link) xml/api-index-1.0.6.xml:76(link) #: xml/api-index-1.0.6.xml:77(link) xml/api-index-1.0.6.xml:78(link) #: xml/api-index-1.0.6.xml:79(link) xml/api-index-1.0.6.xml:80(link) #: xml/api-index-1.0.6.xml:81(link) xml/api-index-1.0.6.xml:82(link) msgid "Object inspection functions" msgstr "オブジェクト調査関数" #: xml/gcut-inspect.xml:15(refpurpose) msgid "Functions to inspect an object for debugging." msgstr "デバッグ用にオブジェクトの詳細を示す関数です。" #: xml/gcut-inspect.xml:22(link) xml/gcut-inspect.xml:79(primary) #: xml/api-index-full.xml:441(link) xml/api-index-1.0.6.xml:75(link) msgid "gcut_inspect_direct" msgstr "" #: xml/gcut-inspect.xml:25(link) xml/gcut-inspect.xml:104(primary) #: xml/api-index-full.xml:445(link) xml/api-index-1.0.6.xml:78(link) msgid "gcut_inspect_int" msgstr "" #: xml/gcut-inspect.xml:28(link) xml/gcut-inspect.xml:130(primary) #: xml/api-index-full.xml:451(link) xml/api-index-1.0.6.xml:82(link) msgid "gcut_inspect_uint" msgstr "" #: xml/gcut-inspect.xml:31(link) xml/gcut-inspect.xml:156(primary) #: xml/api-index-full.xml:446(link) xml/api-index-1.1.3.xml:23(link) msgid "gcut_inspect_int64" msgstr "" #: xml/gcut-inspect.xml:34(link) xml/gcut-inspect.xml:182(primary) #: xml/api-index-full.xml:452(link) xml/api-index-1.1.3.xml:25(link) msgid "gcut_inspect_uint64" msgstr "" #: xml/gcut-inspect.xml:37(link) xml/gcut-inspect.xml:208(primary) #: xml/api-index-full.xml:448(link) xml/api-index-1.1.3.xml:24(link) msgid "gcut_inspect_size" msgstr "" #: xml/gcut-inspect.xml:40(link) xml/gcut-inspect.xml:234(primary) #: xml/api-index-full.xml:440(link) xml/api-index-1.1.3.xml:21(link) msgid "gcut_inspect_char" msgstr "" #: xml/gcut-inspect.xml:43(link) xml/gcut-inspect.xml:261(primary) #: xml/api-index-full.xml:449(link) xml/api-index-1.0.6.xml:80(link) msgid "gcut_inspect_string" msgstr "" #: xml/gcut-inspect.xml:46(link) xml/gcut-inspect.xml:286(primary) #: xml/api-index-full.xml:450(link) xml/api-index-1.0.6.xml:81(link) msgid "gcut_inspect_type" msgstr "" #: xml/gcut-inspect.xml:49(link) xml/gcut-inspect.xml:311(primary) #: xml/api-index-full.xml:444(link) xml/api-index-1.0.6.xml:77(link) msgid "gcut_inspect_flags" msgstr "" #: xml/gcut-inspect.xml:52(link) xml/gcut-inspect.xml:342(primary) #: xml/api-index-full.xml:443(link) xml/api-index-1.0.6.xml:76(link) msgid "gcut_inspect_enum" msgstr "" #: xml/gcut-inspect.xml:55(link) xml/gcut-inspect.xml:373(primary) #: xml/api-index-full.xml:447(link) xml/api-index-1.0.6.xml:79(link) msgid "gcut_inspect_pointer" msgstr "" #: xml/gcut-inspect.xml:58(link) xml/gcut-inspect.xml:399(primary) #: xml/api-index-full.xml:439(link) xml/api-index-1.1.3.xml:20(link) msgid "gcut_inspect_boolean" msgstr "" #: xml/gcut-inspect.xml:61(link) xml/gcut-inspect.xml:429(primary) #: xml/api-index-full.xml:442(link) xml/api-index-1.1.3.xml:22(link) msgid "gcut_inspect_double" msgstr "" #: xml/gcut-inspect.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" msgstr "" #: xml/gcut-inspect.xml:69(para) msgid "" "In test result, we need to know detail of inspected objects for debugging. " "Functions of this section help us to inspect interested objects." msgstr "" "デバッグするために、テスト結果ではオブジェクトの詳細を示す必要があります。こ" "のセクションの関数はオブジェクトの詳細を示す場合に役立ちます。" #: xml/gcut-inspect.xml:78(title) msgid "gcut_inspect_direct ()" msgstr "" #: xml/gcut-inspect.xml:80(programlisting) #, no-wrap msgid "" "void gcut_inspect_direct (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:83(para) xml/gcut-inspect.xml:134(para) #: xml/gcut-inspect.xml:212(para) msgid "Shows data as unsigned integer." msgstr "符号なし整数としてdataの詳細を示します。" #: xml/gcut-inspect.xml:88(programlisting) #, no-wrap msgid "" "\n" "gcut_inspect_direct(string, GUINT_TO_POINTER(100), NULL) -> \"100\"\n" msgstr "" #: xml/gcut-inspect.xml:93(simpara) xml/gcut-inspect.xml:119(simpara) #: xml/gcut-inspect.xml:145(simpara) xml/gcut-inspect.xml:171(simpara) #: xml/gcut-inspect.xml:197(simpara) xml/gcut-inspect.xml:223(simpara) #: xml/gcut-inspect.xml:250(simpara) xml/gcut-inspect.xml:275(simpara) #: xml/gcut-inspect.xml:300(simpara) xml/gcut-inspect.xml:331(simpara) #: xml/gcut-inspect.xml:362(simpara) xml/gcut-inspect.xml:388(simpara) #: xml/gcut-inspect.xml:418(simpara) xml/gcut-inspect.xml:444(simpara) msgid "the output string." msgstr "出力の文字列。" #: xml/gcut-inspect.xml:96(simpara) xml/gcut-inspect.xml:122(simpara) #: xml/gcut-inspect.xml:148(simpara) xml/gcut-inspect.xml:174(simpara) #: xml/gcut-inspect.xml:200(simpara) xml/gcut-inspect.xml:226(simpara) #: xml/gcut-inspect.xml:253(simpara) xml/gcut-inspect.xml:278(simpara) #: xml/gcut-inspect.xml:303(simpara) xml/gcut-inspect.xml:334(simpara) #: xml/gcut-inspect.xml:365(simpara) xml/gcut-inspect.xml:391(simpara) #: xml/gcut-inspect.xml:421(simpara) xml/gcut-inspect.xml:447(simpara) msgid "the interested target." msgstr "関心のある対象。" #: xml/gcut-inspect.xml:99(simpara) xml/gcut-inspect.xml:125(simpara) #: xml/gcut-inspect.xml:151(simpara) xml/gcut-inspect.xml:177(simpara) #: xml/gcut-inspect.xml:203(simpara) xml/gcut-inspect.xml:229(simpara) #: xml/gcut-inspect.xml:256(simpara) xml/gcut-inspect.xml:281(simpara) #: xml/gcut-inspect.xml:306(simpara) xml/gcut-inspect.xml:394(simpara) #: xml/gcut-inspect.xml:424(simpara) xml/gcut-inspect.xml:450(simpara) msgid "the data passed by user. (ignored)" msgstr "ユーザが渡したデータ。(無視されます)" #: xml/gcut-inspect.xml:103(title) msgid "gcut_inspect_int ()" msgstr "" #: xml/gcut-inspect.xml:105(programlisting) #, no-wrap msgid "" "void gcut_inspect_int (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:108(para) msgid "Shows data as integer." msgstr "整数としてdataの詳細を示します。" #: xml/gcut-inspect.xml:113(programlisting) #, no-wrap msgid "" "\n" "gint int_value = 100;\n" "gcut_inspect_int(string, &int_value, NULL) -> \"100\"\n" msgstr "" #: xml/gcut-inspect.xml:129(title) msgid "gcut_inspect_uint ()" msgstr "" #: xml/gcut-inspect.xml:131(programlisting) #, no-wrap msgid "" "void gcut_inspect_uint (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:139(programlisting) #, no-wrap msgid "" "\n" "guint uint_value = 100;\n" "gcut_inspect_uint(string, &uint_value, NULL) -> \"100\"\n" msgstr "" #: xml/gcut-inspect.xml:155(title) msgid "gcut_inspect_int64 ()" msgstr "" #: xml/gcut-inspect.xml:157(programlisting) #, no-wrap msgid "" "void gcut_inspect_int64 (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:160(para) msgid "Shows data as 64-bit integer." msgstr "64bit整数としてdataの詳細を示します。" #: xml/gcut-inspect.xml:165(programlisting) #, no-wrap msgid "" "\n" "gint64 int64_value = 100;\n" "gcut_inspect_int64(string, &int64_value, NULL) -> \"100\"\n" msgstr "" #: xml/gcut-inspect.xml:181(title) msgid "gcut_inspect_uint64 ()" msgstr "" #: xml/gcut-inspect.xml:183(programlisting) #, no-wrap msgid "" "void gcut_inspect_uint64 (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:186(para) msgid "Shows data as 64-bit unsigned integer." msgstr "64bit符号なし整数としてdataの詳細を示します。" #: xml/gcut-inspect.xml:191(programlisting) #, no-wrap msgid "" "\n" "guint64 uint64_value = 100;\n" "gcut_inspect_uint64(string, &uint64_value, NULL) -> \"100\"\n" msgstr "" #: xml/gcut-inspect.xml:207(title) msgid "gcut_inspect_size ()" msgstr "" #: xml/gcut-inspect.xml:209(programlisting) #, no-wrap msgid "" "void gcut_inspect_size (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:217(programlisting) #, no-wrap msgid "" "\n" "gsize size_value = 100;\n" "gcut_inspect_size(string, &size_value, NULL) -> \"100\"\n" msgstr "" #: xml/gcut-inspect.xml:233(title) msgid "gcut_inspect_char ()" msgstr "" #: xml/gcut-inspect.xml:235(programlisting) #, no-wrap msgid "" "void gcut_inspect_char (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:238(para) msgid "Shows data as character." msgstr "文字としてdataの詳細を示します。" #: xml/gcut-inspect.xml:243(programlisting) #, no-wrap msgid "" "\n" "gcut_inspect_char(string, 'C', NULL) -> \"'C'\"\n" "gcut_inspect_char(string, '\\0', NULL) -> \"'\\0'\"\n" "gcut_inspect_char(string, '\\n', NULL) -> \"'\\n'\"\n" msgstr "" #: xml/gcut-inspect.xml:260(title) msgid "gcut_inspect_string ()" msgstr "" #: xml/gcut-inspect.xml:262(programlisting) #, no-wrap msgid "" "void gcut_inspect_string (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:265(para) msgid "" "Shows data as string. It also accepts NULL." msgstr "" "文字列としてdataの詳細を示します。NULLでも構いません。" #: xml/gcut-inspect.xml:270(programlisting) #, no-wrap msgid "" "\n" "gcut_inspect_string(string, \"string\", NULL) -> \"\\\"string\\\"\"\n" msgstr "" #: xml/gcut-inspect.xml:285(title) msgid "gcut_inspect_type ()" msgstr "" #: xml/gcut-inspect.xml:287(programlisting) #, no-wrap msgid "" "void gcut_inspect_type (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:290(para) msgid "" "Shows data as GType." msgstr "" "GTypeとして" "dataの詳細を示します。" #: xml/gcut-inspect.xml:295(programlisting) #, no-wrap msgid "" "\n" "gcut_inspect_type(string, GTK_TYPE_WINDOW, NULL) -> \"<GtkWindow>\"\n" msgstr "" #: xml/gcut-inspect.xml:310(title) msgid "gcut_inspect_flags ()" msgstr "" #: xml/gcut-inspect.xml:312(programlisting) #, no-wrap msgid "" "void gcut_inspect_flags (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:315(para) msgid "Shows data as value a GFlags type." msgstr "GFlagsの型の値としてdataの詳細を示します。" #: xml/gcut-inspect.xml:320(programlisting) #, no-wrap msgid "" "\n" "GType flags_type;\n" "GtkWidgetFlags flags;\n" "\n" "flags_type = GTK_TYPE_WIDGET_FLAGS;\n" "flags = GTK_TOPLEVEL | GTK_VISIBLE;\n" "gcut_inspect_flags(string, &flags, &flags_type);\n" "-> #<GtkWidgetFlags: toplevel|visible (GTK_TOPLEVEL:0x10)|(GTK_VISIBLE:0x100)>\n" msgstr "" #: xml/gcut-inspect.xml:337(simpara) msgid "the pointer of GFlags type." msgstr "GFlagsの型のポインタ。" #: xml/gcut-inspect.xml:341(title) msgid "gcut_inspect_enum ()" msgstr "" #: xml/gcut-inspect.xml:343(programlisting) #, no-wrap msgid "" "void gcut_inspect_enum (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:346(para) msgid "Shows data as value of a GEnum type." msgstr "GEnumの型の値としてdataの詳細を示します。" #: xml/gcut-inspect.xml:351(programlisting) #, no-wrap msgid "" "\n" "GType enum_type;\n" "GtkWidgetHelpType value;\n" "\n" "enum_type = GTK_TYPE_WIDGET_HELP_TYPE;\n" "value = GTK_WIDGET_HELP_TOOLTIP;\n" "gcut_inspect_enum(string, &value, &enum_type);\n" "-> #<GtkWidgetHelpType: tooltip(GTK_WIDGET_HELP_TOOLTIP:0)>\n" msgstr "" #: xml/gcut-inspect.xml:368(simpara) msgid "the pointer of GEnum type." msgstr "GEnumの型のポインタ。" #: xml/gcut-inspect.xml:372(title) msgid "gcut_inspect_pointer ()" msgstr "" #: xml/gcut-inspect.xml:374(programlisting) #, no-wrap msgid "" "void gcut_inspect_pointer (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:377(para) msgid "Shows data as a pointer." msgstr "ポインタとしてdataの詳細を示します。" #: xml/gcut-inspect.xml:382(programlisting) #, no-wrap msgid "" "\n" "memory = malloc(1);\n" "gcut_inspect_pointer(string, memory, NULL) -> \"#<0xXXXXXXX>\"\n" msgstr "" #: xml/gcut-inspect.xml:398(title) msgid "gcut_inspect_boolean ()" msgstr "" #: xml/gcut-inspect.xml:400(programlisting) #, no-wrap msgid "" "void gcut_inspect_boolean (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:403(para) msgid "Shows data as boolean." msgstr "真偽値としてdataの詳細を示します。" #: xml/gcut-inspect.xml:408(programlisting) #, no-wrap msgid "" "\n" "gboolean boolean_value;\n" "\n" "boolean_value = TRUE;\n" "gcut_inspect_boolean(string, &boolean_value, NULL) -> \"TRUE\"\n" "boolean_value = FALSE;\n" "gcut_inspect_boolean(string, &boolean_value, NULL) -> \"FALSE\"\n" msgstr "" #: xml/gcut-inspect.xml:428(title) msgid "gcut_inspect_double ()" msgstr "" #: xml/gcut-inspect.xml:430(programlisting) #, no-wrap msgid "" "void gcut_inspect_double (GString *string,\n" " gconstpointer data,\n" " gpointer user_data);" msgstr "" #: xml/gcut-inspect.xml:433(para) msgid "Shows data as double floating point number." msgstr "倍精度浮動小数点数としてdataの詳細を示します。" #: xml/gcut-inspect.xml:438(programlisting) #, no-wrap msgid "" "\n" "gdouble double_value = 2.9;\n" "gcut_inspect_double(string, &double_value, NULL) -> \"2.9\"\n" msgstr "" #: xml/gcut-hash-table.xml:7(refentrytitle) #: xml/gcut-hash-table.xml:14(refname) xml/api-index-full.xml:427(link) #: xml/api-index-full.xml:428(link) xml/api-index-full.xml:429(link) #: xml/api-index-full.xml:430(link) xml/api-index-full.xml:431(link) #: xml/api-index-full.xml:432(link) xml/api-index-1.0.9.xml:15(link) #: xml/api-index-1.0.8.xml:7(link) xml/api-index-1.0.5.xml:50(link) #: xml/api-index-1.0.5.xml:51(link) xml/api-index-1.0.5.xml:52(link) #: xml/api-index-1.0.5.xml:53(link) msgid "Assertion Utilities for GHashTable" msgstr "GHashTable用の検証ユーティリティ" #: xml/gcut-hash-table.xml:15(refpurpose) msgid "" "Utilities to write assertions related to more easily." msgstr "" "に関する検証をもっと簡単" "に書くためのユーティリティ。" #: xml/gcut-hash-table.xml:22(link) xml/gcut-hash-table.xml:57(primary) #: xml/api-index-full.xml:427(link) xml/api-index-1.0.5.xml:50(link) msgid "gcut_hash_table_equal" msgstr "" #: xml/gcut-hash-table.xml:22(parameter) xml/gcut-hash-table.xml:34(parameter) msgid " *hash1" msgstr "" #: xml/gcut-hash-table.xml:23(parameter) xml/gcut-hash-table.xml:35(parameter) msgid " *hash2" msgstr "" #: xml/gcut-hash-table.xml:25(link) xml/gcut-hash-table.xml:89(primary) #: xml/api-index-full.xml:428(link) xml/api-index-1.0.5.xml:51(link) msgid "gcut_hash_table_inspect" msgstr "" #: xml/gcut-hash-table.xml:25(parameter) xml/gcut-hash-table.xml:29(parameter) #: xml/gcut-hash-table.xml:37(parameter) xml/gcut-hash-table.xml:38(parameter) msgid " *hash" msgstr "" #: xml/gcut-hash-table.xml:26(parameter) xml/gcut-hash-table.xml:30(parameter) msgid "" " " "key_inspect_func" msgstr "" #: xml/gcut-hash-table.xml:27(parameter) xml/gcut-hash-table.xml:31(parameter) msgid "" " " "value_inspect_func" msgstr "" #: xml/gcut-hash-table.xml:29(link) xml/gcut-hash-table.xml:124(primary) #: xml/api-index-full.xml:429(link) xml/api-index-1.0.9.xml:15(link) msgid "gcut_hash_table_inspect_sorted" msgstr "" #: xml/gcut-hash-table.xml:32(type) msgid "GCompareFunc" msgstr "" #: xml/gcut-hash-table.xml:32(parameter) msgid " key_compare_func" msgstr "" #: xml/gcut-hash-table.xml:34(link) xml/gcut-hash-table.xml:168(primary) #: xml/api-index-full.xml:430(link) xml/api-index-1.0.5.xml:52(link) msgid "gcut_hash_table_string_equal" msgstr "" #: xml/gcut-hash-table.xml:36(link) xml/gcut-hash-table.xml:189(primary) #: xml/api-index-full.xml:432(link) xml/api-index-1.0.5.xml:53(link) msgid "gcut_hash_table_string_string_inspect" msgstr "" #: xml/gcut-hash-table.xml:38(link) xml/gcut-hash-table.xml:206(primary) #: xml/api-index-full.xml:431(link) xml/api-index-1.0.8.xml:7(link) msgid "gcut_hash_table_string_string_copy" msgstr "" #: xml/gcut-hash-table.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " );\n" " * (,\n" " ,\n" " ,\n" " );\n" " * (,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " );\n" " * \n" " ();\n" " * ();\n" msgstr "" #: xml/gcut-hash-table.xml:48(para) msgid "" "The utilities help you to write assertions that are related to GHashTable." msgstr "" "このユーティリティはGHashTableに関する検証の作成を補助します。" #: xml/gcut-hash-table.xml:56(title) msgid "gcut_hash_table_equal ()" msgstr "" #: xml/gcut-hash-table.xml:58(programlisting) #, no-wrap msgid "" "gboolean gcut_hash_table_equal (GHashTable *hash1,\n" " GHashTable *hash2,\n" " GEqualFunc equal_func);" msgstr "" #: xml/gcut-hash-table.xml:61(para) msgid "" "Compares two GHashTable, " "hash1 and hash2. " "equal_func is called for each values of the same key " "of hash1 and hash2." msgstr "" "ふたつのGHashTable、" "hash1hash2を比較します。" "equal_funchash1と" "hash2の同じキーに対応する値それぞれについて呼ばれま" "す。" #: xml/gcut-hash-table.xml:72(term) xml/gcut-hash-table.xml:176(term) msgid "hash1 :" msgstr "" #: xml/gcut-hash-table.xml:73(simpara) xml/gcut-hash-table.xml:76(simpara) #: xml/gcut-hash-table.xml:177(simpara) xml/gcut-hash-table.xml:180(simpara) msgid "" "a GHashTable to be compared." msgstr "比較するGHashTable。" #: xml/gcut-hash-table.xml:75(term) xml/gcut-hash-table.xml:179(term) msgid "hash2 :" msgstr "" #: xml/gcut-hash-table.xml:81(simpara) msgid "" "TRUE if all same key's values of hash1 and " "hash2 are reported TRUE by equal_func, FALSE otherwise." msgstr "" "同じキーに対応するすべてのhash1hash2の値がequal_funcでTRUEとなったらTRUE、そうで" "ない場合はFALSE。" #: xml/gcut-hash-table.xml:88(title) msgid "gcut_hash_table_inspect ()" msgstr "" #: xml/gcut-hash-table.xml:90(programlisting) #, no-wrap msgid "" "gchar * gcut_hash_table_inspect (GHashTable *hash,\n" " GCutInspectFunction key_inspect_func,\n" " GCutInspectFunction value_inspect_func,\n" " gpointer user_data);" msgstr "" #: xml/gcut-hash-table.xml:94(para) msgid "" "Inspects hash. Each key of hash is inspected by key_inspect_func and each " "value of hash is inspected by " "value_inspect_func. The returned string should be " "freed when no longer needed." msgstr "" "hashの詳細を返します。hashの各" "キーはkey_inspect_funcで詳細化し、hashの各値はvalue_inspect_funcで詳細化します。返" "された文字列が必要なくなったときは開放してください。" #: xml/gcut-hash-table.xml:106(term) xml/gcut-hash-table.xml:147(term) #: xml/gcut-hash-table.xml:197(term) xml/gcut-hash-table.xml:213(term) msgid "hash :" msgstr "" #: xml/gcut-hash-table.xml:107(simpara) xml/gcut-hash-table.xml:198(simpara) msgid "" "a GHashTable to be " "inspected." msgstr "" "詳細を示すGHashTable。" #: xml/gcut-hash-table.xml:109(term) xml/gcut-hash-table.xml:150(term) msgid "key_inspect_func :" msgstr "" #: xml/gcut-hash-table.xml:110(simpara) xml/gcut-hash-table.xml:151(simpara) msgid "a function that inspects each key." msgstr "各キーの詳細を示す関数。" #: xml/gcut-hash-table.xml:112(term) xml/gcut-hash-table.xml:153(term) msgid "value_inspect_func :" msgstr "" #: xml/gcut-hash-table.xml:118(simpara) xml/gcut-hash-table.xml:200(simpara) msgid "inspected hash as a string." msgstr "hashの詳細を示した文字列。" #: xml/gcut-hash-table.xml:123(title) msgid "gcut_hash_table_inspect_sorted ()" msgstr "" #: xml/gcut-hash-table.xml:125(programlisting) #, no-wrap msgid "" "gchar * gcut_hash_table_inspect_sorted (GHashTable *hash,\n" " GCutInspectFunction key_inspect_func,\n" " GCutInspectFunction value_inspect_func,\n" " GCompareFunc key_compare_func,\n" " gpointer user_data);" msgstr "" #: xml/gcut-hash-table.xml:130(para) msgid "" "Sorts hash as key by key_compare_func and inspects it. Each key of hash is " "inspected by key_inspect_func and each value of " "hash is inspected by value_inspect_func. The returned string should be freed when no longer needed." msgstr "" "key_compare_funcを使ってキーを基準にして" "hashを並び替えて、その詳細を返します。" "hashの各キーはkey_inspect_func" "で詳細化し、hashの各値は" "value_inspect_funcで詳細化します。返された文字列が必要" "なくなったときは開放してください。" #: xml/gcut-hash-table.xml:137(para) msgid "" "If key_compare_func is NULL, hash isn't sorted. " "It is the same behavior as gcut_hash_table_inspect()." msgstr "" "key_compare_funcNULLならhashを並び替えま" "せん。これはgcut_hash_table_inspect()と同じ動作です。" #: xml/gcut-hash-table.xml:148(simpara) msgid "" "a GHashTable to be " "inspected and sorted." msgstr "" "並び替えて詳細を示すGHashTable。" #: xml/gcut-hash-table.xml:156(term) msgid "key_compare_func :" msgstr "" #: xml/gcut-hash-table.xml:157(simpara) msgid "a function that compares each key." msgstr "各キーを比較する関数。" #: xml/gcut-hash-table.xml:162(simpara) msgid "inspected and sorted hash as a string." msgstr "hashを並び替えて詳細を示した文字列。" #: xml/gcut-hash-table.xml:165(para) xml/cut-helper.xml:452(para) #: xml/cut-helper.xml:471(para) xml/cppcutter.xml:105(para) #: xml/cppcutter.xml:127(para) xml/cppcutter.xml:136(para) #: xml/cppcut-assertions.xml:62(para) msgid "Since 1.0.9" msgstr "1.0.9から" #: xml/gcut-hash-table.xml:167(title) msgid "gcut_hash_table_string_equal ()" msgstr "" #: xml/gcut-hash-table.xml:169(programlisting) #, no-wrap msgid "" "gboolean gcut_hash_table_string_equal (GHashTable *hash1,\n" " GHashTable *hash2);" msgstr "" #: xml/gcut-hash-table.xml:171(para) msgid "" "Compares two GHashTable, " "hash1 and hash2. " "hash1 and hash2 should have " "string key and string value." msgstr "" "ふたつのGHashTable、" "hash1hash2を比較します。" "hash1hash2は文字列のキーと文" "字列の値を持っていなければいけません。" #: xml/gcut-hash-table.xml:182(simpara) msgid "" "TRUE if all same key's values of hash1 and " "hash2 are same string content, FALSE otherwise." msgstr "" "hash1hash2の同じキーの値それ" "ぞれすべてが同じ内容の文字列の場合TRUE、そうでない場合はFALSE。" #: xml/gcut-hash-table.xml:188(title) msgid "gcut_hash_table_string_string_inspect ()" msgstr "" #: xml/gcut-hash-table.xml:190(programlisting) #, no-wrap msgid "" "gchar * gcut_hash_table_string_string_inspect\n" " (GHashTable *hash);" msgstr "" #: xml/gcut-hash-table.xml:192(para) msgid "" "Inspects hash. hash should " "have string key and string value. The returned string should be freed when " "no longer needed." msgstr "" "hashの詳細を返します。hashは文" "字列のキーと文字列の値を持っていなければいけません。返された文字列が必要なく" "なったときは開放してください。" #: xml/gcut-hash-table.xml:205(title) msgid "gcut_hash_table_string_string_copy ()" msgstr "" #: xml/gcut-hash-table.xml:207(programlisting) #, no-wrap msgid "GHashTable * gcut_hash_table_string_string_copy (GHashTable *hash);" msgstr "" #: xml/gcut-hash-table.xml:208(para) msgid "" "Copy hash. hash should have " "string key and string value. The returned hash should " "be freed by g_hash_table_unref" "()." msgstr "" "hashを複製します。hashは文字列" "のキーと文字列の値を持っていなければいけません。返されたhashg_hash_table_unref" "()で開放しなければいけません。" #: xml/gcut-hash-table.xml:214(simpara) msgid "" "a GHashTable to be copied." msgstr "複製するGHashTable。" #: xml/gcut-hash-table.xml:216(simpara) msgid "" "copied GHashTable. It " "should be freed when no longer needed." msgstr "" "複製されたGHashTable。必要が" "なくなったら開放しなければいけません。" #: xml/gcut-glib-event-loop.xml:7(refentrytitle) #: xml/gcut-glib-event-loop.xml:14(refname) msgid "GLib event loop" msgstr "GLib用イベントループ" #: xml/gcut-glib-event-loop.xml:15(refpurpose) msgid "Event loop API for GLib main context and loop." msgstr "GLibのGMainContextとGMainLoop用のイベントループAPI。" #: xml/gcut-glib-event-loop.xml:22(link) #: xml/gcut-glib-event-loop.xml:38(title) #: xml/gcut-glib-event-loop.xml:39(primary) xml/api-index-full.xml:422(link) #: xml/api-index-full.xml:423(link) xml/api-index-full.xml:424(link) #: xml/api-index-1.1.6.xml:25(link) msgid "GCutGLibEventLoop" msgstr "" #: xml/gcut-glib-event-loop.xml:23(link) #: xml/gcut-glib-event-loop.xml:47(title) #: xml/gcut-glib-event-loop.xml:48(primary) xml/api-index-full.xml:423(link) msgid "GCutGLibEventLoopClass" msgstr "" #: xml/gcut-glib-event-loop.xml:24(link) #: xml/gcut-glib-event-loop.xml:57(primary) xml/api-index-full.xml:424(link) #: xml/api-index-1.1.6.xml:25(link) msgid "gcut_glib_event_loop_new" msgstr "" #: xml/gcut-glib-event-loop.xml:22(synopsis) #, no-wrap msgid "" " ;\n" " ;\n" " * ();\n" msgstr "" #: xml/gcut-glib-event-loop.xml:30(para) msgid "" "GCutGLibEventLoop is " "an GCutEventLoop " "implementation for GLib's main context and loop." msgstr "" "GCutGLibEventLoopは" "GLibのGMainContextとGMainLoop用のGCutEventLoop実装です。" #: xml/gcut-glib-event-loop.xml:40(programlisting) #, no-wrap msgid "" "typedef struct {\n" " GCutEventLoop object;\n" "} GCutGLibEventLoop;\n" msgstr "" #: xml/gcut-glib-event-loop.xml:49(programlisting) #, no-wrap msgid "" "typedef struct {\n" " GCutEventLoopClass parent_class;\n" "} GCutGLibEventLoopClass;\n" msgstr "" #: xml/gcut-glib-event-loop.xml:56(title) msgid "gcut_glib_event_loop_new ()" msgstr "" #: xml/gcut-glib-event-loop.xml:58(programlisting) #, no-wrap msgid "GCutEventLoop * gcut_glib_event_loop_new (GMainContext *context);" msgstr "" #: xml/gcut-glib-event-loop.xml:59(para) msgid "" "Creates a new GCutEeventLoop for context. If context " "is NULL, the default " "GLib's main context is used." msgstr "" "context用の新しいGCutEeventLoopを作ります。contextNULLなら" "GLibのデフォルトGMainContextが使われます。" #: xml/gcut-glib-event-loop.xml:64(simpara) msgid "" "a GMainContext or NULL" msgstr "" "GMainContextまたはNULL。" #: xml/gcut-glib-event-loop.xml:66(simpara) msgid "" "a new GCutEventLoop." msgstr "" "新しいGCutEventLoop。" #: xml/gcut-event-loop.xml:7(refentrytitle) #: xml/gcut-event-loop.xml:14(refname) msgid "Abstracted event loop" msgstr "抽象化されたイベントループ" #: xml/gcut-event-loop.xml:15(refpurpose) msgid "Abstracted event loop API for customizing event loop in GCutter." msgstr "" "GCutterで使うイベントループをカスタマイズするための抽象化されたイベントループ" "API。" #: xml/gcut-event-loop.xml:22(link) xml/gcut-event-loop.xml:95(title) #: xml/gcut-event-loop.xml:96(primary) xml/api-index-full.xml:398(link) msgid "GCUT_EVENT_LOOP_ERROR" msgstr "" #: xml/gcut-event-loop.xml:24(link) xml/gcut-event-loop.xml:108(title) #: xml/gcut-event-loop.xml:109(primary) xml/api-index-full.xml:393(link) msgid "GCutEventLoopClass" msgstr "" #: xml/gcut-event-loop.xml:25(link) xml/gcut-event-loop.xml:148(primary) #: xml/api-index-full.xml:399(link) msgid "gcut_event_loop_error_quark" msgstr "" #: xml/gcut-event-loop.xml:26(link) xml/gcut-event-loop.xml:157(primary) #: xml/api-index-full.xml:403(link) xml/api-index-1.1.6.xml:18(link) msgid "gcut_event_loop_run" msgstr "" #: xml/gcut-event-loop.xml:27(link) xml/gcut-event-loop.xml:169(primary) #: xml/api-index-full.xml:400(link) xml/api-index-1.1.6.xml:15(link) msgid "gcut_event_loop_iterate" msgstr "" #: xml/gcut-event-loop.xml:28(parameter) msgid " may_block" msgstr "" #: xml/gcut-event-loop.xml:29(link) xml/gcut-event-loop.xml:190(primary) #: xml/api-index-full.xml:401(link) xml/api-index-1.1.6.xml:16(link) msgid "gcut_event_loop_quit" msgstr "" #: xml/gcut-event-loop.xml:30(link) xml/gcut-event-loop.xml:201(primary) #: xml/api-index-full.xml:406(link) xml/api-index-1.1.6.xml:21(link) msgid "gcut_event_loop_watch_io" msgstr "" #: xml/gcut-event-loop.xml:33(type) msgid "GIOFunc" msgstr "" #: xml/gcut-event-loop.xml:33(parameter) msgid " function" msgstr "" #: xml/gcut-event-loop.xml:34(parameter) xml/gcut-event-loop.xml:38(parameter) #: xml/gcut-event-loop.xml:43(parameter) xml/gcut-event-loop.xml:48(parameter) #: xml/gcut-event-loop.xml:53(parameter) xml/gcut-event-loop.xml:57(parameter) #: xml/gcut-event-loop.xml:61(parameter) msgid " data" msgstr "" #: xml/gcut-event-loop.xml:35(link) xml/gcut-event-loop.xml:233(primary) #: xml/api-index-full.xml:404(link) xml/api-index-1.1.6.xml:19(link) msgid "gcut_event_loop_watch_child" msgstr "" #: xml/gcut-event-loop.xml:36(parameter) xml/gcut-event-loop.xml:41(parameter) msgid " pid" msgstr "" #: xml/gcut-event-loop.xml:37(type) xml/gcut-event-loop.xml:42(type) msgid "GChildWatchFunc" msgstr "" #: xml/gcut-event-loop.xml:37(parameter) xml/gcut-event-loop.xml:42(parameter) msgid " function" msgstr "" #: xml/gcut-event-loop.xml:39(link) xml/gcut-event-loop.xml:260(primary) #: xml/api-index-full.xml:405(link) xml/api-index-1.1.6.xml:20(link) msgid "gcut_event_loop_watch_child_full" msgstr "" #: xml/gcut-event-loop.xml:40(parameter) xml/gcut-event-loop.xml:50(parameter) #: xml/gcut-event-loop.xml:59(parameter) msgid " priority" msgstr "" #: xml/gcut-event-loop.xml:44(type) xml/gcut-event-loop.xml:54(type) #: xml/gcut-event-loop.xml:62(type) msgid "GDestroyNotify" msgstr "" #: xml/gcut-event-loop.xml:44(parameter) xml/gcut-event-loop.xml:54(parameter) #: xml/gcut-event-loop.xml:62(parameter) msgid " notify" msgstr "" #: xml/gcut-event-loop.xml:45(link) xml/gcut-event-loop.xml:295(primary) #: xml/api-index-full.xml:396(link) xml/api-index-1.1.6.xml:13(link) msgid "gcut_event_loop_add_timeout" msgstr "" #: xml/gcut-event-loop.xml:46(type) xml/gcut-event-loop.xml:51(type) #: xml/gcut-data-helper.xml:63(returnvalue) msgid "gdouble" msgstr "" #: xml/gcut-event-loop.xml:46(parameter) xml/gcut-event-loop.xml:51(parameter) msgid " interval_in_seconds" msgstr "" #: xml/gcut-event-loop.xml:47(type) xml/gcut-event-loop.xml:52(type) #: xml/gcut-event-loop.xml:56(type) xml/gcut-event-loop.xml:60(type) msgid "GSourceFunc" msgstr "" #: xml/gcut-event-loop.xml:47(parameter) xml/gcut-event-loop.xml:52(parameter) #: xml/gcut-event-loop.xml:56(parameter) xml/gcut-event-loop.xml:60(parameter) msgid " function" msgstr "" #: xml/gcut-event-loop.xml:49(link) xml/gcut-event-loop.xml:322(primary) #: xml/api-index-full.xml:397(link) xml/api-index-1.1.6.xml:14(link) msgid "gcut_event_loop_add_timeout_full" msgstr "" #: xml/gcut-event-loop.xml:55(link) xml/gcut-event-loop.xml:357(primary) #: xml/api-index-full.xml:394(link) xml/api-index-1.1.6.xml:11(link) msgid "gcut_event_loop_add_idle" msgstr "" #: xml/gcut-event-loop.xml:58(link) xml/gcut-event-loop.xml:380(primary) #: xml/api-index-full.xml:395(link) xml/api-index-1.1.6.xml:12(link) msgid "gcut_event_loop_add_idle_full" msgstr "" #: xml/gcut-event-loop.xml:63(link) xml/gcut-event-loop.xml:411(primary) #: xml/api-index-full.xml:402(link) xml/api-index-1.1.6.xml:17(link) msgid "gcut_event_loop_remove" msgstr "" #: xml/gcut-event-loop.xml:64(parameter) msgid " tag" msgstr "" #: xml/gcut-event-loop.xml:22(synopsis) #, no-wrap msgid "" "#define \n" " ;\n" " ;\n" " ();\n" " ();\n" " (,\n" " );\n" " ();\n" " (,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " );\n" msgstr "" #: xml/gcut-event-loop.xml:69(synopsis) #, no-wrap msgid "" "\n" " \n" " +----GCutEventLoop\n" msgstr "" #: xml/gcut-event-loop.xml:77(para) msgid "" "GCutEventLoop " "encapsulates event loop. For example, event loop is used in GCutProcess. It uses the GLib's default " "main context for it." msgstr "" "GCutEventLoopはイベント" "ループをカプセル化します。イベントループはGCutProcessで使われています。GCutProcessはデフォルトで" "はGLibのデフォルトGMainContextを使います。" #: xml/gcut-event-loop.xml:82(para) msgid "" "Normally, a custom GCutEventLoop isn't required. It is needed some special case. For example, " "using libev as event loop backend instead of GLib's main loop." msgstr "" "ふつうはカスタムGCutEventLoopは必要ありません。必要になるのは特別な場合だけです。例えば、イベントルー" "プのバックエンドにGLibのGMainLoopではなく、libevのイベントループに使っている" "場合です。" #: xml/gcut-event-loop.xml:87(para) msgid "" "GCutter provides GCutEventLoop for GLib's main context and main loop, GCutGLibEventLoop." msgstr "" "GCutterはGLibのGMainContextとGMainLoop用のGCutEventLoopであるGCutGLibEventLoopを提供します。" #: xml/gcut-event-loop.xml:97(programlisting) #, no-wrap msgid "#define GCUT_EVENT_LOOP_ERROR (gcut_event_loop_error_quark())\n" msgstr "" #: xml/gcut-event-loop.xml:104(programlisting) #, no-wrap msgid "typedef struct _GCutEventLoop GCutEventLoop;" msgstr "" #: xml/gcut-event-loop.xml:110(programlisting) #, no-wrap msgid "" "typedef struct {\n" " GObjectClass parent_class;\n" "\n" " void (*run) (GCutEventLoop *loop);\n" " gboolean (*iterate) (GCutEventLoop *loop,\n" " gboolean may_block);\n" " void (*quit) (GCutEventLoop *loop);\n" "\n" " guint (*watch_io) (GCutEventLoop *loop,\n" " GIOChannel *channel,\n" " GIOCondition condition,\n" " GIOFunc function,\n" " gpointer data);\n" " guint (*watch_child_full) (GCutEventLoop *loop,\n" " gint priority,\n" " GPid pid,\n" " GChildWatchFunc function,\n" " gpointer data,\n" " GDestroyNotify notify);\n" " guint (*add_timeout_full) (GCutEventLoop *loop,\n" " gint priority,\n" " gdouble interval_in_seconds,\n" " GSourceFunc function,\n" " gpointer data,\n" " GDestroyNotify notify);\n" " guint (*add_idle_full) (GCutEventLoop *loop,\n" " gint priority,\n" " GSourceFunc function,\n" " gpointer data,\n" " GDestroyNotify notify);\n" " gboolean (*remove) (GCutEventLoop *loop,\n" " guint tag);\n" "} GCutEventLoopClass;\n" msgstr "" #: xml/gcut-event-loop.xml:147(title) msgid "gcut_event_loop_error_quark ()" msgstr "" #: xml/gcut-event-loop.xml:149(programlisting) #, no-wrap msgid "GQuark gcut_event_loop_error_quark (void);" msgstr "" #: xml/gcut-event-loop.xml:156(title) msgid "gcut_event_loop_run ()" msgstr "" #: xml/gcut-event-loop.xml:158(programlisting) #, no-wrap msgid "void gcut_event_loop_run (GCutEventLoop *loop);" msgstr "" #: xml/gcut-event-loop.xml:159(para) msgid "" "Runs the given event loop until gcut_event_loop_quit() is called on the loop." msgstr "" "gcut_event_loop_quit()が呼ばれるまでイベントループを回します。" #: xml/gcut-event-loop.xml:168(title) msgid "gcut_event_loop_iterate ()" msgstr "" #: xml/gcut-event-loop.xml:170(programlisting) #, no-wrap msgid "" "gboolean gcut_event_loop_iterate (GCutEventLoop *loop,\n" " gboolean may_block);" msgstr "" #: xml/gcut-event-loop.xml:172(para) msgid "" "Runs a single iteration for the given event loop. If no events are ready and " "may_block is TRUE, waiting for a event become ready. " "Otherwise, if may_block is FALSE, events are not waited to become ready." msgstr "" "イベントループを1回だけ回します。もし、イベントがなくmay_blockTRUEなら、" "イベントがくるまで待ちつづけます。may_blockFALSEなら、イベントがくるの" "を待ちません。" #: xml/gcut-event-loop.xml:181(term) msgid "may_block :" msgstr "" #: xml/gcut-event-loop.xml:182(simpara) msgid "whether the call may block." msgstr "呼び出しがブロックするかどうか。" #: xml/gcut-event-loop.xml:184(simpara) msgid "" "TRUE if a event was " "dispatched." msgstr "" "イベントを処理したらTRUE。" #: xml/gcut-event-loop.xml:189(title) msgid "gcut_event_loop_quit ()" msgstr "" #: xml/gcut-event-loop.xml:191(programlisting) #, no-wrap msgid "void gcut_event_loop_quit (GCutEventLoop *loop);" msgstr "" #: xml/gcut-event-loop.xml:192(para) msgid "Stops the loop from running." msgstr "実行中のloopを止めます。" #: xml/gcut-event-loop.xml:200(title) msgid "gcut_event_loop_watch_io ()" msgstr "" #: xml/gcut-event-loop.xml:202(programlisting) #, no-wrap msgid "" "guint gcut_event_loop_watch_io (GCutEventLoop *loop,\n" " GIOChannel *channel,\n" " GIOCondition condition,\n" " GIOFunc function,\n" " gpointer data);" msgstr "" #: xml/gcut-event-loop.xml:207(para) msgid "" "Adds the channel into loop " "with the default priority. function is called when " "condition is met for the given channel." msgstr "" "channelをデフォルトの優先度でloopに追加します。channelに" "conditionイベントが発生したらfunctionが呼ばれます。" #: xml/gcut-event-loop.xml:216(simpara) msgid "a GIOChannel" msgstr "GIOChannel。" #: xml/gcut-event-loop.xml:219(simpara) msgid "conditions to watch for" msgstr "監視する状態。" #: xml/gcut-event-loop.xml:221(term) xml/gcut-event-loop.xml:248(term) #: xml/gcut-event-loop.xml:280(term) xml/gcut-event-loop.xml:310(term) #: xml/gcut-event-loop.xml:342(term) xml/gcut-event-loop.xml:368(term) #: xml/gcut-event-loop.xml:396(term) xml/cut-assertions.xml:1941(term) msgid "function :" msgstr "" #: xml/gcut-event-loop.xml:222(simpara) xml/gcut-event-loop.xml:249(simpara) #: xml/gcut-event-loop.xml:281(simpara) xml/gcut-event-loop.xml:311(simpara) #: xml/gcut-event-loop.xml:343(simpara) xml/gcut-event-loop.xml:369(simpara) #: xml/gcut-event-loop.xml:397(simpara) msgid "function to call" msgstr "呼び出される関数" #: xml/gcut-event-loop.xml:225(simpara) xml/gcut-event-loop.xml:252(simpara) #: xml/gcut-event-loop.xml:284(simpara) xml/gcut-event-loop.xml:314(simpara) #: xml/gcut-event-loop.xml:346(simpara) xml/gcut-event-loop.xml:372(simpara) #: xml/gcut-event-loop.xml:400(simpara) msgid "data to pass to function" msgstr "functionに渡されるデータ" #: xml/gcut-event-loop.xml:227(simpara) xml/gcut-event-loop.xml:254(simpara) #: xml/gcut-event-loop.xml:289(simpara) xml/gcut-event-loop.xml:316(simpara) #: xml/gcut-event-loop.xml:351(simpara) xml/gcut-event-loop.xml:374(simpara) #: xml/gcut-event-loop.xml:405(simpara) msgid "the event ID." msgstr "イベントID。" #: xml/gcut-event-loop.xml:232(title) msgid "gcut_event_loop_watch_child ()" msgstr "" #: xml/gcut-event-loop.xml:234(programlisting) #, no-wrap msgid "" "guint gcut_event_loop_watch_child (GCutEventLoop *loop,\n" " GPid pid,\n" " GChildWatchFunc function,\n" " gpointer data);" msgstr "" #: xml/gcut-event-loop.xml:238(para) msgid "" "Adds the function to be called when the child " "indicated by pid exits into loop with the default priority." msgstr "" "pidの子プロセスが終了した時に呼ばれる" "functionをデフォルトの優先度でloopに追加します。" #: xml/gcut-event-loop.xml:245(term) xml/gcut-event-loop.xml:277(term) #: xml/cut-experimental.xml:86(term) xml/cut-experimental.xml:116(term) #: xml/cut-experimental.xml:146(term) msgid "pid :" msgstr "" #: xml/gcut-event-loop.xml:246(simpara) xml/gcut-event-loop.xml:278(simpara) msgid "process ID to watch" msgstr "監視するプロセスのID" #: xml/gcut-event-loop.xml:259(title) msgid "gcut_event_loop_watch_child_full ()" msgstr "" #: xml/gcut-event-loop.xml:261(programlisting) #, no-wrap msgid "" "guint gcut_event_loop_watch_child_full (GCutEventLoop *loop,\n" " gint priority,\n" " GPid pid,\n" " GChildWatchFunc function,\n" " gpointer data,\n" " GDestroyNotify notify);" msgstr "" #: xml/gcut-event-loop.xml:267(para) msgid "" "Adds the function to be called when the child " "indicated by pid exits into loop with the priority." msgstr "" "pidの子プロセスが終了した時に呼ばれる" "functionをデフォルトの優先度でloopに追加します。" #: xml/gcut-event-loop.xml:274(term) xml/gcut-event-loop.xml:336(term) #: xml/gcut-event-loop.xml:393(term) msgid "priority :" msgstr "" #: xml/gcut-event-loop.xml:275(simpara) xml/gcut-event-loop.xml:337(simpara) #: xml/gcut-event-loop.xml:394(simpara) msgid "the priority of the event." msgstr "このイベントの優先度。" #: xml/gcut-event-loop.xml:286(term) xml/gcut-event-loop.xml:348(term) #: xml/gcut-event-loop.xml:402(term) msgid "notify :" msgstr "" #: xml/gcut-event-loop.xml:287(simpara) xml/gcut-event-loop.xml:349(simpara) #: xml/gcut-event-loop.xml:403(simpara) msgid "" "function to call when the event is removed, or NULL" msgstr "" "このイベントが削除された時に呼ばれる関数またはNULL。" #: xml/gcut-event-loop.xml:294(title) msgid "gcut_event_loop_add_timeout ()" msgstr "" #: xml/gcut-event-loop.xml:296(programlisting) #, no-wrap msgid "" "guint gcut_event_loop_add_timeout (GCutEventLoop *loop,\n" " gdouble interval_in_seconds,\n" " GSourceFunc function,\n" " gpointer data);" msgstr "" #: xml/gcut-event-loop.xml:300(para) msgid "" "Adds the function to be called at regular intervals, " "with the default priority." msgstr "" "一定間隔で呼び出されるfunctionをデフォルト優先度で追加" "します。" #: xml/gcut-event-loop.xml:307(term) xml/gcut-event-loop.xml:339(term) msgid "interval_in_seconds :" msgstr "" #: xml/gcut-event-loop.xml:308(simpara) xml/gcut-event-loop.xml:340(simpara) msgid "" "the time between calls to the function, in seconds." msgstr "functionを呼び出す感覚。単位は秒。" #: xml/gcut-event-loop.xml:321(title) msgid "gcut_event_loop_add_timeout_full ()" msgstr "" #: xml/gcut-event-loop.xml:323(programlisting) #, no-wrap msgid "" "guint gcut_event_loop_add_timeout_full (GCutEventLoop *loop,\n" " gint priority,\n" " gdouble interval_in_seconds,\n" " GSourceFunc function,\n" " gpointer data,\n" " GDestroyNotify notify);" msgstr "" #: xml/gcut-event-loop.xml:329(para) msgid "" "Adds the function to be called at regular intervals, " "with the priority." msgstr "" "定期的に呼び出される関数を優先度priorityで追加します。" #: xml/gcut-event-loop.xml:356(title) msgid "gcut_event_loop_add_idle ()" msgstr "" #: xml/gcut-event-loop.xml:358(programlisting) #, no-wrap msgid "" "guint gcut_event_loop_add_idle (GCutEventLoop *loop,\n" " GSourceFunc function,\n" " gpointer data);" msgstr "" #: xml/gcut-event-loop.xml:361(para) msgid "" "Adds the function to be called whenever there are no " "higher priority events pending with the default priority." msgstr "" "デフォルト優先度より高い優先度がない場合に呼び出される関数" "functionを追加します。" #: xml/gcut-event-loop.xml:379(title) msgid "gcut_event_loop_add_idle_full ()" msgstr "" #: xml/gcut-event-loop.xml:381(programlisting) #, no-wrap msgid "" "guint gcut_event_loop_add_idle_full (GCutEventLoop *loop,\n" " gint priority,\n" " GSourceFunc function,\n" " gpointer data,\n" " GDestroyNotify notify);" msgstr "" #: xml/gcut-event-loop.xml:386(para) msgid "" "Adds the function to be called whenever there are no " "higher priority events pending with the priority." msgstr "" "優先度priorityより高い優先度のイベントがない場合に呼び" "出される関数functionを追加します。" #: xml/gcut-event-loop.xml:410(title) msgid "gcut_event_loop_remove ()" msgstr "" #: xml/gcut-event-loop.xml:412(programlisting) #, no-wrap msgid "" "gboolean gcut_event_loop_remove (GCutEventLoop *loop,\n" " guint tag);" msgstr "" #: xml/gcut-event-loop.xml:414(para) msgid "Removes the event with the given ID, tag." msgstr "IDがtagのイベントを削除します。" #: xml/gcut-event-loop.xml:420(term) msgid "tag :" msgstr "" #: xml/gcut-event-loop.xml:421(simpara) msgid "the ID of the source to remove" msgstr "削除するソースのID。" #: xml/gcut-event-loop.xml:423(simpara) msgid "" "TRUE if the source was " "found and removed." msgstr "" "ソースが見つかって削除されたらTRUE。" #: xml/gcut-error.xml:7(refentrytitle) xml/gcut-error.xml:14(refname) #: xml/api-index-full.xml:389(link) xml/api-index-full.xml:391(link) #: xml/api-index-1.0.5.xml:40(link) xml/api-index-1.0.5.xml:41(link) msgid "Assertion Utilities for GError" msgstr "GError用の検証ユーティリティ" #: xml/gcut-error.xml:15(refpurpose) msgid "" "Utilities to write assertions related to more easily." msgstr "" "に関する検証をもっと簡単に書" "くためのユーティリティ。" #: xml/gcut-error.xml:22(link) xml/gcut-error.xml:43(primary) #: xml/api-index-full.xml:389(link) xml/api-index-1.0.5.xml:40(link) msgid "gcut_error_equal" msgstr "" #: xml/gcut-error.xml:22(parameter) msgid "const *error1" msgstr "" #: xml/gcut-error.xml:23(parameter) msgid "const *error2" msgstr "" #: xml/gcut-error.xml:24(link) xml/gcut-error.xml:62(primary) #: xml/api-index-full.xml:391(link) xml/api-index-1.0.5.xml:41(link) msgid "gcut_error_inspect" msgstr "" #: xml/gcut-error.xml:24(parameter) msgid "const *error" msgstr "" #: xml/gcut-error.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " );\n" " * ();\n" msgstr "" #: xml/gcut-error.xml:34(para) msgid "" "The utilities help you to write assertions that are related to GError." msgstr "" "このユーティリティはGErrorに関す" "る検証の作成を補助します。" #: xml/gcut-error.xml:42(title) msgid "gcut_error_equal ()" msgstr "" #: xml/gcut-error.xml:44(programlisting) #, no-wrap msgid "" "gboolean gcut_error_equal (const GError *error1,\n" " const GError *error2);" msgstr "" #: xml/gcut-error.xml:46(para) msgid "" "Compares two GError, " "error1 and error2." msgstr "" "ふたつのGError、" "error1error2を比較します。" #: xml/gcut-error.xml:49(term) msgid "error1 :" msgstr "" #: xml/gcut-error.xml:50(simpara) xml/gcut-error.xml:53(simpara) msgid "a GError to be compared." msgstr "比較するGErrorの値。" #: xml/gcut-error.xml:52(term) msgid "error2 :" msgstr "" #: xml/gcut-error.xml:55(simpara) msgid "" "TRUE if both of " "error1 and error2 have the " "same domain, code and message, FALSE otherwise." msgstr "" "error1error2が同じドメイン、" "コード、メッセージならTRUE、そうでなればFALSE。" #: xml/gcut-error.xml:61(title) msgid "gcut_error_inspect ()" msgstr "" #: xml/gcut-error.xml:63(programlisting) #, no-wrap msgid "gchar * gcut_error_inspect (const GError *error);" msgstr "" #: xml/gcut-error.xml:64(para) msgid "" "Inspects error. The returned string should be freed " "when no longer needed." msgstr "" "errorの詳細を返します。返された文字列が必要なくなった" "ときは開放してください。" #: xml/gcut-error.xml:69(simpara) msgid "a GError value." msgstr "GErrorの値。" #: xml/gcut-error.xml:71(simpara) msgid "inspected error as a string." msgstr "errorの詳細を示した文字列。" #: xml/gcut-enum.xml:7(refentrytitle) xml/gcut-enum.xml:14(refname) #: xml/api-index-full.xml:384(link) xml/api-index-full.xml:385(link) #: xml/api-index-full.xml:386(link) xml/api-index-full.xml:387(link) #: xml/api-index-full.xml:388(link) xml/api-index-full.xml:409(link) #: xml/api-index-full.xml:410(link) xml/api-index-full.xml:411(link) #: xml/api-index-1.0.6.xml:62(link) xml/api-index-1.0.6.xml:63(link) #: xml/api-index-1.0.6.xml:64(link) xml/api-index-1.0.6.xml:67(link) #: xml/api-index-1.0.6.xml:68(link) xml/api-index-1.0.5.xml:39(link) #: xml/api-index-1.0.5.xml:44(link) msgid "Assertion Utilities for GEnum and GFlags" msgstr "GEnumとGFlags用の検証ユーティリティ" #: xml/gcut-enum.xml:16(type) msgid "GEnum" msgstr "" #: xml/gcut-enum.xml:16(type) msgid "GFlags" msgstr "" #: xml/gcut-enum.xml:15(refpurpose) msgid "" "Utilities to write assertions related to or more easily." msgstr "" "またはに関する検証をもっと簡単に書くためのユーティリ" "ティ。" #: xml/gcut-enum.xml:22(link) xml/gcut-enum.xml:54(title) #: xml/gcut-enum.xml:55(primary) xml/api-index-full.xml:385(link) #: xml/api-index-1.0.6.xml:63(link) msgid "GCUT_ENUM_ERROR" msgstr "" #: xml/gcut-enum.xml:23(link) xml/gcut-enum.xml:64(primary) #: xml/api-index-full.xml:386(link) msgid "gcut_enum_error_quark" msgstr "" #: xml/gcut-enum.xml:24(link) xml/gcut-enum.xml:73(primary) #: xml/api-index-full.xml:384(link) xml/api-index-1.0.6.xml:62(link) msgid "GCutEnumError" msgstr "" #: xml/gcut-enum.xml:25(link) xml/gcut-enum.xml:96(primary) #: xml/api-index-full.xml:387(link) xml/api-index-1.0.5.xml:39(link) msgid "gcut_enum_inspect" msgstr "" #: xml/gcut-enum.xml:26(parameter) msgid " enum_value" msgstr "" #: xml/gcut-enum.xml:27(link) xml/gcut-enum.xml:115(primary) #: xml/api-index-full.xml:388(link) xml/api-index-1.0.6.xml:64(link) msgid "gcut_enum_parse" msgstr "" #: xml/gcut-enum.xml:28(parameter) msgid "const *enum_value" msgstr "" #: xml/gcut-enum.xml:30(link) xml/gcut-enum.xml:140(primary) #: xml/api-index-full.xml:410(link) xml/api-index-1.0.5.xml:44(link) msgid "gcut_flags_inspect" msgstr "" #: xml/gcut-enum.xml:31(parameter) msgid " flags_value" msgstr "" #: xml/gcut-enum.xml:32(link) xml/gcut-enum.xml:159(primary) #: xml/api-index-full.xml:411(link) xml/api-index-1.0.6.xml:68(link) msgid "gcut_flags_parse" msgstr "" #: xml/gcut-enum.xml:33(parameter) msgid "const *flags_value" msgstr "" #: xml/gcut-enum.xml:35(link) xml/gcut-enum.xml:185(primary) #: xml/api-index-full.xml:409(link) xml/api-index-1.0.6.xml:67(link) msgid "gcut_flags_get_all" msgstr "" #: xml/gcut-enum.xml:22(synopsis) #, no-wrap msgid "" "#define \n" " ();\n" "enum ;\n" " * (,\n" " );\n" " (,\n" " ,\n" " );\n" " * (,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " );\n" msgstr "" #: xml/gcut-enum.xml:46(para) msgid "" "The utilities help you to write assertions that are related to GEnum or GFlags." msgstr "" "このユーティリティはGEnumまたは" "GFlagsに関する検証の作成を補助し" "ます。" #: xml/gcut-enum.xml:56(programlisting) #, no-wrap msgid "#define GCUT_ENUM_ERROR (gcut_enum_error_quark())\n" msgstr "" #: xml/gcut-enum.xml:58(para) msgid "" "Error domain for enum related operations. Errors in this domain will be from " "the GCutEnumError " "enumeration." msgstr "" "列挙型関連操作用のエラードメインです。このドメインのエラーはGCutEnumError列挙型のどれかです。" #: xml/gcut-enum.xml:63(title) msgid "gcut_enum_error_quark ()" msgstr "" #: xml/gcut-enum.xml:65(programlisting) #, no-wrap msgid "GQuark gcut_enum_error_quark (void);" msgstr "" #: xml/gcut-enum.xml:72(title) msgid "enum GCutEnumError" msgstr "" #: xml/gcut-enum.xml:74(programlisting) #, no-wrap msgid "" "typedef enum\n" "{\n" " GCUT_ENUM_ERROR_INVALID_TYPE,\n" " GCUT_ENUM_ERROR_INVALID_VALUE\n" "} GCutEnumError;\n" msgstr "" #: xml/gcut-enum.xml:80(para) msgid "Error codes returned by enum related operation." msgstr "列挙型関連操作で返されるエラーコード。" #: xml/gcut-enum.xml:84(literal) msgid "GCUT_ENUM_ERROR_INVALID_TYPE" msgstr "" #: xml/gcut-enum.xml:85(simpara) msgid "Invalid type." msgstr "不正な型。" #: xml/gcut-enum.xml:89(literal) msgid "GCUT_ENUM_ERROR_INVALID_VALUE" msgstr "" #: xml/gcut-enum.xml:90(simpara) msgid "Invalid value." msgstr "不正な値。" #: xml/gcut-enum.xml:95(title) msgid "gcut_enum_inspect ()" msgstr "" #: xml/gcut-enum.xml:97(programlisting) #, no-wrap msgid "" "gchar * gcut_enum_inspect (GType enum_type,\n" " gint enum_value);" msgstr "" #: xml/gcut-enum.xml:99(para) msgid "" "Inspects enum_type value, enum_value. The returned string should be freed when no longer needed." msgstr "" "enum_typeの値enum_valueの詳細を" "返します。返された文字列が必要なくなったときは開放してください。" #: xml/gcut-enum.xml:106(term) xml/gcut-enum.xml:128(term) msgid "enum_value :" msgstr "" #: xml/gcut-enum.xml:107(simpara) msgid "" "a GEnum value to be inspected." msgstr "詳細を示すGEnumの値。" #: xml/gcut-enum.xml:109(simpara) msgid "inspected enum_value as a string." msgstr "enum_valueの詳細を示した文字列。" #: xml/gcut-enum.xml:114(title) msgid "gcut_enum_parse ()" msgstr "" #: xml/gcut-enum.xml:116(programlisting) #, no-wrap msgid "" "gint gcut_enum_parse (GType enum_type,\n" " const gchar *enum_value,\n" " GError **error);" msgstr "" #: xml/gcut-enum.xml:119(para) msgid "" "Parses enum_value and returns a enum value of " "enum_type. enum_value should " "be enum name or nick name. If enum_value isn't match " "then error is set to a GCutEnumError." msgstr "" "enum_valueをパースし、enum_type" "型の列挙値を返します。enum_valueは列挙名またはニック" "ネームでなければいけません。enum_valueがマッチしない場" "合はerrorGCutEnumErrorエラーが設定されます。" #: xml/gcut-enum.xml:129(simpara) xml/gcut-enum.xml:174(simpara) msgid "a string to be parsed." msgstr "パースされる文字列。" #: xml/gcut-enum.xml:134(simpara) msgid "" "enum value of enum_type corresponded to " "enum_value." msgstr "" "enum_valueに対応するenum_typeの" "値。" #: xml/gcut-enum.xml:139(title) msgid "gcut_flags_inspect ()" msgstr "" #: xml/gcut-enum.xml:141(programlisting) #, no-wrap msgid "" "gchar * gcut_flags_inspect (GType flags_type,\n" " guint flags_value);" msgstr "" #: xml/gcut-enum.xml:143(para) msgid "" "Inspects flags_type value, flags_value. The returned string should be freed when no longer needed." msgstr "" "flags_typeの値flags_valueの詳細" "を返します。返された文字列が必要なくなったときは開放してください。" #: xml/gcut-enum.xml:150(term) xml/gcut-enum.xml:173(term) msgid "flags_value :" msgstr "" #: xml/gcut-enum.xml:151(simpara) msgid "" "a GFlags value to be inspected." msgstr "詳細を示すGFlagsの値。" #: xml/gcut-enum.xml:153(simpara) msgid "inspected flags_value as a string." msgstr "flags_valueの詳細を示した文字列。" #: xml/gcut-enum.xml:158(title) msgid "gcut_flags_parse ()" msgstr "" #: xml/gcut-enum.xml:160(programlisting) #, no-wrap msgid "" "guint gcut_flags_parse (GType flags_type,\n" " const gchar *flags_value,\n" " GError **error);" msgstr "" #: xml/gcut-enum.xml:163(para) msgid "" "Parses flags_value and returns a flags value of " "flags_type. flags_value should " "be formated as \"nick-or-name1|nick-or-name2|...|nick-or-nameN\". If " "flags_value includes unknown flag then " "error is set to a GCutEnumError." msgstr "" "flags_valueをパースし、flags_type型のフラグ値を返します。flags_valueは\"ニッ" "クネームまたは名前1|ニックネームまたは名前2|...|ニックネームまたは名前N\"とい" "う書式でなければいけません。flags_valueが未知のフラグ" "を含んでいる場合は、errorGCutEnumErrorエラーが設定されます。" #: xml/gcut-enum.xml:179(simpara) msgid "" "flags value of flags_type corresponded to " "flags_value." msgstr "" "flags_valueに対応するflags_type" "の値。" #: xml/gcut-enum.xml:184(title) msgid "gcut_flags_get_all ()" msgstr "" #: xml/gcut-enum.xml:186(programlisting) #, no-wrap msgid "" "guint gcut_flags_get_all (GType flags_type,\n" " GError **error);" msgstr "" #: xml/gcut-enum.xml:188(para) msgid "Gets a flags value that includes all available flag values." msgstr "すべてのフラグ値が有効なフラグ値を返します。" #: xml/gcut-enum.xml:198(simpara) msgid "a flags value that includes all available flag values." msgstr "すべてのフラグ値が有効なフラグ値。" #: xml/gcut-egg.xml:7(refentrytitle) xml/gcut-egg.xml:14(refname) msgid "External command (deprecated)" msgstr "外部コマンド(非推奨)" #: xml/gcut-egg.xml:15(refpurpose) msgid "Convenience API for using external command. (deprecated)" msgstr "外部コマンドを使うための便利API(非推奨)" #: xml/gcut-egg.xml:22(link) xml/gcut-egg.xml:165(title) #: xml/gcut-egg.xml:166(primary) xml/api-index-full.xml:363(link) #: xml/api-index-deprecated.xml:33(link) msgid "GCUT_EGG_ERROR" msgstr "" #: xml/gcut-egg.xml:23(link) xml/gcut-egg.xml:27(returnvalue) #: xml/gcut-egg.xml:29(returnvalue) xml/gcut-egg.xml:31(returnvalue) #: xml/gcut-egg.xml:33(returnvalue) xml/gcut-egg.xml:34(returnvalue) #: xml/gcut-egg.xml:35(type) xml/gcut-egg.xml:37(type) #: xml/gcut-egg.xml:38(type) xml/gcut-egg.xml:41(type) #: xml/gcut-egg.xml:42(type) xml/gcut-egg.xml:44(type) #: xml/gcut-egg.xml:45(type) xml/gcut-egg.xml:49(type) #: xml/gcut-egg.xml:50(type) xml/gcut-egg.xml:53(type) #: xml/gcut-egg.xml:55(type) xml/gcut-egg.xml:56(type) #: xml/gcut-egg.xml:57(type) xml/gcut-egg.xml:59(type) #: xml/gcut-egg.xml:61(type) xml/gcut-egg.xml:173(title) #: xml/gcut-egg.xml:174(primary) xml/api-index-full.xml:354(link) #: xml/api-index-full.xml:355(link) xml/api-index-full.xml:356(link) #: xml/api-index-full.xml:357(link) xml/api-index-full.xml:358(link) #: xml/api-index-full.xml:359(link) xml/api-index-full.xml:360(link) #: xml/api-index-full.xml:361(link) xml/api-index-full.xml:362(link) #: xml/api-index-full.xml:363(link) xml/api-index-full.xml:364(link) #: xml/api-index-full.xml:365(link) xml/api-index-full.xml:366(link) #: xml/api-index-full.xml:367(link) xml/api-index-full.xml:368(link) #: xml/api-index-full.xml:369(link) xml/api-index-full.xml:370(link) #: xml/api-index-full.xml:371(link) xml/api-index-full.xml:372(link) #: xml/api-index-full.xml:373(link) xml/api-index-full.xml:374(link) #: xml/api-index-full.xml:375(link) xml/api-index-full.xml:376(link) #: xml/api-index-full.xml:377(link) xml/api-index-full.xml:378(link) #: xml/api-index-full.xml:379(link) xml/api-index-full.xml:380(link) #: xml/api-index-full.xml:381(link) xml/api-index-full.xml:382(link) #: xml/api-index-full.xml:383(link) xml/api-index-deprecated.xml:29(link) #: xml/api-index-deprecated.xml:30(link) xml/api-index-deprecated.xml:31(link) #: xml/api-index-deprecated.xml:32(link) xml/api-index-deprecated.xml:33(link) #: xml/api-index-deprecated.xml:34(link) xml/api-index-deprecated.xml:35(link) #: xml/api-index-deprecated.xml:36(link) xml/api-index-deprecated.xml:37(link) #: xml/api-index-deprecated.xml:38(link) xml/api-index-deprecated.xml:39(link) #: xml/api-index-deprecated.xml:40(link) xml/api-index-deprecated.xml:41(link) #: xml/api-index-deprecated.xml:42(link) xml/api-index-deprecated.xml:43(link) #: xml/api-index-deprecated.xml:44(link) xml/api-index-deprecated.xml:45(link) #: xml/api-index-deprecated.xml:46(link) xml/api-index-deprecated.xml:47(link) #: xml/api-index-deprecated.xml:48(link) xml/api-index-deprecated.xml:49(link) #: xml/api-index-deprecated.xml:50(link) xml/api-index-deprecated.xml:51(link) #: xml/api-index-deprecated.xml:52(link) xml/api-index-deprecated.xml:53(link) #: xml/api-index-1.0.6.xml:37(link) xml/api-index-1.0.6.xml:38(link) #: xml/api-index-1.0.6.xml:39(link) xml/api-index-1.0.6.xml:40(link) #: xml/api-index-1.0.6.xml:41(link) xml/api-index-1.0.6.xml:42(link) #: xml/api-index-1.0.6.xml:43(link) xml/api-index-1.0.6.xml:44(link) #: xml/api-index-1.0.6.xml:45(link) xml/api-index-1.0.6.xml:46(link) #: xml/api-index-1.0.6.xml:47(link) xml/api-index-1.0.6.xml:48(link) #: xml/api-index-1.0.6.xml:49(link) xml/api-index-1.0.6.xml:50(link) #: xml/api-index-1.0.6.xml:51(link) xml/api-index-1.0.6.xml:52(link) #: xml/api-index-1.0.6.xml:53(link) xml/api-index-1.0.6.xml:54(link) #: xml/api-index-1.0.6.xml:55(link) xml/api-index-1.0.6.xml:56(link) #: xml/api-index-1.0.6.xml:57(link) xml/api-index-1.0.6.xml:58(link) #: xml/api-index-1.0.6.xml:59(link) xml/api-index-1.0.6.xml:60(link) #: xml/api-index-1.0.6.xml:61(link) msgid "GCutEgg" msgstr "" #: xml/gcut-egg.xml:24(link) xml/gcut-egg.xml:180(title) #: xml/gcut-egg.xml:181(primary) xml/api-index-full.xml:360(link) #: xml/api-index-deprecated.xml:30(link) msgid "GCutEggClass" msgstr "" #: xml/gcut-egg.xml:25(link) xml/gcut-egg.xml:202(primary) #: xml/api-index-full.xml:361(link) xml/api-index-deprecated.xml:31(link) #: xml/api-index-1.0.6.xml:41(link) msgid "GCutEggError" msgstr "" #: xml/gcut-egg.xml:26(link) xml/gcut-egg.xml:250(primary) #: xml/api-index-full.xml:364(link) xml/api-index-deprecated.xml:34(link) msgid "gcut_egg_error_quark" msgstr "" #: xml/gcut-egg.xml:27(link) xml/gcut-egg.xml:260(primary) #: xml/api-index-full.xml:374(link) xml/api-index-deprecated.xml:44(link) #: xml/api-index-1.0.6.xml:52(link) msgid "gcut_egg_new" msgstr "" #: xml/gcut-egg.xml:29(link) xml/gcut-egg.xml:279(primary) #: xml/api-index-full.xml:378(link) xml/api-index-deprecated.xml:48(link) #: xml/api-index-1.0.6.xml:56(link) msgid "gcut_egg_new_va_list" msgstr "" #: xml/gcut-egg.xml:31(link) xml/gcut-egg.xml:298(primary) #: xml/api-index-full.xml:375(link) xml/api-index-deprecated.xml:45(link) #: xml/api-index-1.0.6.xml:53(link) msgid "gcut_egg_new_argv" msgstr "" #: xml/gcut-egg.xml:33(link) xml/gcut-egg.xml:318(primary) #: xml/api-index-full.xml:377(link) xml/api-index-deprecated.xml:47(link) #: xml/api-index-1.0.6.xml:55(link) msgid "gcut_egg_new_strings" msgstr "" #: xml/gcut-egg.xml:34(link) xml/gcut-egg.xml:334(primary) #: xml/api-index-full.xml:376(link) xml/api-index-deprecated.xml:46(link) #: xml/api-index-1.0.6.xml:54(link) msgid "gcut_egg_new_array" msgstr "" #: xml/gcut-egg.xml:35(link) xml/gcut-egg.xml:350(primary) #: xml/api-index-full.xml:380(link) xml/api-index-deprecated.xml:50(link) #: xml/api-index-1.0.6.xml:58(link) msgid "gcut_egg_set_flags" msgstr "" #: xml/gcut-egg.xml:35(parameter) xml/gcut-egg.xml:37(parameter) #: xml/gcut-egg.xml:38(parameter) xml/gcut-egg.xml:41(parameter) #: xml/gcut-egg.xml:42(parameter) xml/gcut-egg.xml:44(parameter) #: xml/gcut-egg.xml:45(parameter) xml/gcut-egg.xml:49(parameter) #: xml/gcut-egg.xml:50(parameter) xml/gcut-egg.xml:53(parameter) #: xml/gcut-egg.xml:55(parameter) xml/gcut-egg.xml:56(parameter) #: xml/gcut-egg.xml:57(parameter) xml/gcut-egg.xml:59(parameter) #: xml/gcut-egg.xml:61(parameter) msgid " *egg" msgstr "" #: xml/gcut-egg.xml:37(link) xml/gcut-egg.xml:366(primary) #: xml/api-index-full.xml:367(link) xml/api-index-deprecated.xml:37(link) #: xml/api-index-1.0.6.xml:45(link) msgid "gcut_egg_get_flags" msgstr "" #: xml/gcut-egg.xml:38(link) xml/gcut-egg.xml:381(primary) #: xml/api-index-full.xml:379(link) xml/api-index-deprecated.xml:49(link) #: xml/api-index-1.0.6.xml:57(link) msgid "gcut_egg_set_env" msgstr "" #: xml/gcut-egg.xml:41(link) xml/gcut-egg.xml:402(primary) #: xml/api-index-full.xml:365(link) xml/api-index-deprecated.xml:35(link) #: xml/api-index-1.0.6.xml:43(link) msgid "gcut_egg_get_env" msgstr "" #: xml/gcut-egg.xml:42(link) xml/gcut-egg.xml:420(primary) #: xml/api-index-full.xml:372(link) xml/api-index-deprecated.xml:42(link) #: xml/api-index-1.0.6.xml:50(link) msgid "gcut_egg_hatch" msgstr "" #: xml/gcut-egg.xml:44(link) xml/gcut-egg.xml:439(primary) #: xml/api-index-full.xml:362(link) xml/api-index-deprecated.xml:32(link) #: xml/api-index-1.0.6.xml:42(link) msgid "gcut_egg_close" msgstr "" #: xml/gcut-egg.xml:45(link) xml/gcut-egg.xml:452(primary) #: xml/api-index-full.xml:383(link) xml/api-index-deprecated.xml:53(link) #: xml/api-index-1.0.6.xml:61(link) msgid "gcut_egg_write" msgstr "" #: xml/gcut-egg.xml:49(link) xml/gcut-egg.xml:479(primary) #: xml/api-index-full.xml:371(link) xml/api-index-deprecated.xml:41(link) #: xml/api-index-1.0.6.xml:49(link) msgid "gcut_egg_get_pid" msgstr "" #: xml/gcut-egg.xml:50(link) xml/gcut-egg.xml:496(primary) #: xml/api-index-full.xml:382(link) xml/api-index-deprecated.xml:52(link) #: xml/api-index-1.0.6.xml:60(link) msgid "gcut_egg_wait" msgstr "" #: xml/gcut-egg.xml:53(link) xml/gcut-egg.xml:525(primary) #: xml/api-index-full.xml:373(link) xml/api-index-deprecated.xml:43(link) #: xml/api-index-1.0.6.xml:51(link) msgid "gcut_egg_kill" msgstr "" #: xml/gcut-egg.xml:55(link) xml/gcut-egg.xml:541(primary) #: xml/api-index-full.xml:369(link) xml/api-index-deprecated.xml:39(link) #: xml/api-index-1.0.6.xml:47(link) msgid "gcut_egg_get_input" msgstr "" #: xml/gcut-egg.xml:56(link) xml/gcut-egg.xml:558(primary) #: xml/api-index-full.xml:370(link) xml/api-index-deprecated.xml:40(link) #: xml/api-index-1.0.6.xml:48(link) msgid "gcut_egg_get_output" msgstr "" #: xml/gcut-egg.xml:57(link) xml/gcut-egg.xml:575(primary) #: xml/api-index-full.xml:366(link) xml/api-index-deprecated.xml:36(link) #: xml/api-index-1.0.6.xml:44(link) msgid "gcut_egg_get_error" msgstr "" #: xml/gcut-egg.xml:58(link) xml/gcut-egg.xml:592(primary) #: xml/api-index-full.xml:368(link) xml/api-index-deprecated.xml:38(link) #: xml/api-index-1.0.6.xml:46(link) msgid "gcut_egg_get_forced_termination_wait_time" msgstr "" #: xml/gcut-egg.xml:60(link) xml/gcut-egg.xml:610(primary) #: xml/api-index-full.xml:381(link) xml/api-index-deprecated.xml:51(link) #: xml/api-index-1.0.6.xml:59(link) msgid "gcut_egg_set_forced_termination_wait_time" msgstr "" #: xml/gcut-egg.xml:22(synopsis) #, no-wrap msgid "" "#define \n" " ;\n" " ;\n" "enum ;\n" " ();\n" " * (,\n" " );\n" " * (,\n" " );\n" " * (,\n" " );\n" " * ();\n" " * ();\n" " (,\n" " );\n" " ();\n" " (,\n" " ,\n" " );\n" " ** ();\n" " (,\n" " );\n" " ();\n" " (,\n" " ,\n" " ,\n" " );\n" " ();\n" " (,\n" " ,\n" " );\n" " (,\n" " );\n" " * ();\n" " * ();\n" " * ();\n" " \n" " ();\n" " \n" " (,\n" " );\n" msgstr "" #: xml/gcut-egg.xml:67(synopsis) #, no-wrap msgid "" "\n" " \n" " +----GCutEgg\n" msgstr "" #: xml/gcut-egg.xml:90(para) msgid "" "GCutEgg encapsulates external " "command execution, communication and termination. GCutEgg reports an error as GError. It can be asserted easily by gcut_assert_error()." msgstr "" "GCutEggは外部コマンドの実行・通" "信・終了をカプセル化します。GCutEggはエラーをGErrorとして報告" "します。エラーはgcut_assert_error()を使うことにより簡単に検証" "できます。" #: xml/gcut-egg.xml:96(para) msgid "" "External command is specified to constructor like gcut_egg_new(), gcut_egg_new_strings() and so on. " "External command isn't run at the time. gcut_egg_hatch() runs specified external " "command." msgstr "" "外部コマンドはgcut_egg_new()gcut_egg_new_strings()などのようなコンストラク" "タで指定します。この時点では外部コマンドは実行されません。gcut_egg_hatch()で指定された外" "部コマンドが実行されます。" #: xml/gcut-egg.xml:102(para) msgid "" "Standard/Error outputs of external command are passed by \"output-received\"/\"error-received\" " "signals or GIOChannel " "returned by gcut_egg_get_output()/gcut_egg_get_error(). gcut_egg_write() " "writes a chunk to standard input of external command." msgstr "" "外部コマンドの標準出力・エラー出力は\"output-received\"シグナル・\"error-received\"シグナル、あるいは、" "gcut_egg_get_output()gcut_egg_get_error()が返すGIOChannelで取得できます。gcut_egg_write()は外部コマンド" "の標準入力にデータを書き込みます。" #: xml/gcut-egg.xml:110(para) msgid "" "To wait external command finished, gcut_egg_wait() can be used. It accepts " "timeout to avoid infinite waiting." msgstr "" "外部コマンドの終了を待つためにはgcut_egg_wait()を使うことができます。無限待ち" "を避けるために、タイムアウトを指定することができます。" #: xml/gcut-egg.xml:116(programlisting) #, no-wrap msgid "" "\n" "static GString *output_string;\n" "static GCutEgg *egg;\n" "\n" "void\n" "cut_setup (void)\n" "{\n" " output_string = g_string_new(NULL);\n" " egg = NULL;\n" "}\n" "\n" "void\n" "cut_teardown (void)\n" "{\n" " if (output_string)\n" " g_string_free(output_string, TRUE);\n" " if (egg)\n" " g_object_unref(egg);\n" "}\n" "\n" "static void\n" "cb_output_received (GCutEgg *egg, const gchar *chunk, gsize size,\n" " gpointer user_data)\n" "{\n" " g_string_append_len(output_string, chunk, size);\n" "}\n" "\n" "void\n" "test_echo (void)\n" "{\n" " GError *error = NULL;\n" "\n" " egg = gcut_egg_new(\"echo\", \"XXX\", NULL);\n" " g_signal_connect(egg, \"receive-output\",\n" " G_CALLBACK(cb_output_received), NULL);\n" "\n" " gcut_egg_hatch(egg, &error);\n" " gcut_assert_error(error);\n" "\n" " gcut_egg_wait(egg, 1000, &error);\n" " gcut_assert_error(error);\n" " cut_assert_equal_string(\"XXX\\n\", output_string->str);\n" "}\n" msgstr "" #: xml/gcut-egg.xml:167(programlisting) #, no-wrap msgid "#define GCUT_EGG_ERROR (gcut_egg_error_quark())\n" msgstr "" #: xml/gcut-egg.xml:169(para) msgid "" "GCUT_EGG_ERROR is deprecated and should not be used in " "newly-written code." msgstr "" "GCUT_EGG_ERRORは非推奨です。新しいコードでは使わないでくだ" "さい。" #: xml/gcut-egg.xml:175(programlisting) #, no-wrap msgid "typedef struct _GCutEgg GCutEgg;" msgstr "" #: xml/gcut-egg.xml:176(para) msgid "" "GCutEgg is deprecated and should not be used in newly-" "written code." msgstr "" "GCutEggは非推奨です。新しいコードでは使わないでください。" #: xml/gcut-egg.xml:182(programlisting) #, no-wrap msgid "" "typedef struct {\n" " GObjectClass parent_class;\n" "\n" " void (*output_received) (GCutEgg *egg,\n" " const gchar *chunk,\n" " gsize size);\n" " void (*error_received) (GCutEgg *egg,\n" " const gchar *chunk,\n" " gsize size);\n" " void (*reaped) (GCutEgg *egg,\n" " gint status);\n" " void (*error) (GCutEgg *egg,\n" " GError *error);\n" "} GCutEggClass;\n" msgstr "" #: xml/gcut-egg.xml:197(para) msgid "" "GCutEggClass is deprecated and should not be used in " "newly-written code." msgstr "" "GCutEggClassは非推奨です。新しいコードでは使わないでくださ" "い。" #: xml/gcut-egg.xml:201(title) msgid "enum GCutEggError" msgstr "" #: xml/gcut-egg.xml:203(programlisting) #, no-wrap msgid "" "typedef enum\n" "{\n" " GCUT_EGG_ERROR_COMMAND_LINE,\n" " GCUT_EGG_ERROR_IO_ERROR,\n" " GCUT_EGG_ERROR_ALREADY_RUNNING,\n" " GCUT_EGG_ERROR_NOT_RUNNING,\n" " GCUT_EGG_ERROR_INVALID_OBJECT,\n" " GCUT_EGG_ERROR_TIMEOUT\n" "} GCutEggError;\n" msgstr "" #: xml/gcut-egg.xml:213(para) msgid "" "GCutEggError has been deprecated since version 1.1.5 and " "should not be used in newly-written code. Use GCutProcessError instead." msgstr "" "GCutEggErrorはバージョン1.1.5から非推奨になりました。新し" "く書くコードでは使わないでください。代わりにGCutProcessErrorを使ってください。" #: xml/gcut-egg.xml:214(para) msgid "" "Error codes returned by GCutEgg related operations." msgstr "" "GCutEgg関連の操作で返されるエ" "ラーコード。" #: xml/gcut-egg.xml:218(literal) msgid "GCUT_EGG_ERROR_COMMAND_LINE" msgstr "" #: xml/gcut-egg.xml:223(literal) msgid "GCUT_EGG_ERROR_IO_ERROR" msgstr "" #: xml/gcut-egg.xml:228(literal) msgid "GCUT_EGG_ERROR_ALREADY_RUNNING" msgstr "" #: xml/gcut-egg.xml:233(literal) msgid "GCUT_EGG_ERROR_NOT_RUNNING" msgstr "" #: xml/gcut-egg.xml:238(literal) msgid "GCUT_EGG_ERROR_INVALID_OBJECT" msgstr "" #: xml/gcut-egg.xml:239(simpara) msgid "" "Invalid GCutEgg object is " "passed." msgstr "" "不正なGCutEggオブジェクトが渡さ" "れました。" #: xml/gcut-egg.xml:243(literal) msgid "GCUT_EGG_ERROR_TIMEOUT" msgstr "" #: xml/gcut-egg.xml:249(title) msgid "gcut_egg_error_quark ()" msgstr "" #: xml/gcut-egg.xml:251(programlisting) #, no-wrap msgid "GQuark gcut_egg_error_quark (void);" msgstr "" #: xml/gcut-egg.xml:252(para) msgid "" "gcut_egg_error_quark is deprecated and should not be used " "in newly-written code." msgstr "" "gcut_egg_error_quarkは非推奨です。新しいコードでは使わない" "でください。" #: xml/gcut-egg.xml:259(title) msgid "gcut_egg_new ()" msgstr "" #: xml/gcut-egg.xml:261(programlisting) #, no-wrap msgid "" "GCutEgg * gcut_egg_new (const gchar *command,\n" " ...);" msgstr "" #: xml/gcut-egg.xml:263(para) msgid "" "gcut_egg_new has been deprecated since version 1.1.5 and " "should not be used in newly-written code. Use gcut_process_new() instead." msgstr "" "gcut_egg_newはバージョン1.1.5から非推奨になりました。新し" "く書くコードでは使わないでください。代わりにgcut_process_new()を使ってください。" #: xml/gcut-egg.xml:264(para) xml/gcut-egg.xml:283(para) #: xml/gcut-egg.xml:302(para) xml/gcut-egg.xml:321(para) #: xml/gcut-egg.xml:337(para) msgid "" "Creates a new GCutEgg object " "that runs command." msgstr "" "commandを実行する新しいGCutEggオブジェクトを生成します。" #: xml/gcut-egg.xml:273(simpara) xml/gcut-egg.xml:292(simpara) #: xml/gcut-egg.xml:312(simpara) xml/gcut-egg.xml:328(simpara) #: xml/gcut-egg.xml:344(simpara) msgid "a new GCutEgg." msgstr "新しいGCutEgg。" #: xml/gcut-egg.xml:278(title) msgid "gcut_egg_new_va_list ()" msgstr "" #: xml/gcut-egg.xml:280(programlisting) #, no-wrap msgid "" "GCutEgg * gcut_egg_new_va_list (const gchar *command,\n" " va_list args);" msgstr "" #: xml/gcut-egg.xml:282(para) msgid "" "gcut_egg_new_va_list has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use gcut_process_new_va_list() " "instead." msgstr "" "gcut_egg_new_va_listはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないで下さい。代わりにgcut_process_new_va_list()" "を使ってください。" #: xml/gcut-egg.xml:297(title) msgid "gcut_egg_new_argv ()" msgstr "" #: xml/gcut-egg.xml:299(programlisting) #, no-wrap msgid "" "GCutEgg * gcut_egg_new_argv (gint argc,\n" " gchar **argv);" msgstr "" #: xml/gcut-egg.xml:301(para) msgid "" "gcut_egg_new_argv has been deprecated since version 1.1.5 " "and should not be used in newly-written code. Use gcut_process_new_argv() " "instead." msgstr "" "gcut_egg_new_argvはバージョン1.1.5から非推奨になりました。" "新しく書くコードでは使わないでください。代わりにgcut_egg_new_argv()を使ってください。" #: xml/gcut-egg.xml:317(title) msgid "gcut_egg_new_strings ()" msgstr "" #: xml/gcut-egg.xml:319(programlisting) #, no-wrap msgid "GCutEgg * gcut_egg_new_strings (const gchar **command);" msgstr "" #: xml/gcut-egg.xml:320(para) msgid "" "gcut_egg_new_strings has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use gcut_process_new_strings() " "instead." msgstr "" "gcut_egg_new_stringsはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_process_new_strings()" "を使ってください。" #: xml/gcut-egg.xml:333(title) msgid "gcut_egg_new_array ()" msgstr "" #: xml/gcut-egg.xml:335(programlisting) #, no-wrap msgid "GCutEgg * gcut_egg_new_array (GArray *command);" msgstr "" #: xml/gcut-egg.xml:336(para) msgid "" "gcut_egg_new_array has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use gcut_process_new_array() " "instead." msgstr "" "gcut_egg_new_arrayはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_egg_new_array()を使ってくださ" "い。" #: xml/gcut-egg.xml:349(title) msgid "gcut_egg_set_flags ()" msgstr "" #: xml/gcut-egg.xml:351(programlisting) #, no-wrap msgid "" "void gcut_egg_set_flags (GCutEgg *egg,\n" " GSpawnFlags flags);" msgstr "" #: xml/gcut-egg.xml:353(para) msgid "" "gcut_egg_set_flags has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use gcut_process_set_flags() " "instead." msgstr "" "gcut_egg_set_flagsはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_process_set_flags()を" "使ってください。" #: xml/gcut-egg.xml:357(term) xml/gcut-egg.xml:372(term) #: xml/gcut-egg.xml:389(term) xml/gcut-egg.xml:408(term) #: xml/gcut-egg.xml:427(term) xml/gcut-egg.xml:446(term) #: xml/gcut-egg.xml:461(term) xml/gcut-egg.xml:486(term) #: xml/gcut-egg.xml:509(term) xml/gcut-egg.xml:532(term) #: xml/gcut-egg.xml:548(term) xml/gcut-egg.xml:565(term) #: xml/gcut-egg.xml:582(term) xml/gcut-egg.xml:600(term) #: xml/gcut-egg.xml:620(term) xml/gcut-egg.xml:647(term) #: xml/gcut-egg.xml:672(term) xml/gcut-egg.xml:700(term) #: xml/gcut-egg.xml:725(term) msgid "egg :" msgstr "" #: xml/gcut-egg.xml:358(simpara) xml/gcut-egg.xml:373(simpara) #: xml/gcut-egg.xml:390(simpara) xml/gcut-egg.xml:409(simpara) #: xml/gcut-egg.xml:428(simpara) xml/gcut-egg.xml:447(simpara) #: xml/gcut-egg.xml:462(simpara) xml/gcut-egg.xml:487(simpara) #: xml/gcut-egg.xml:510(simpara) xml/gcut-egg.xml:533(simpara) #: xml/gcut-egg.xml:549(simpara) xml/gcut-egg.xml:566(simpara) #: xml/gcut-egg.xml:583(simpara) xml/gcut-egg.xml:601(simpara) #: xml/gcut-egg.xml:621(simpara) msgid "a GCutEgg" msgstr "GCutEgg" #: xml/gcut-egg.xml:365(title) msgid "gcut_egg_get_flags ()" msgstr "" #: xml/gcut-egg.xml:367(programlisting) #, no-wrap msgid "GSpawnFlags gcut_egg_get_flags (GCutEgg *egg);" msgstr "" #: xml/gcut-egg.xml:368(para) msgid "" "gcut_egg_get_flags has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use gcut_process_get_flags() " "instead." msgstr "" "gcut_egg_get_flagsはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_process_get_flags()を" "使ってください。" #: xml/gcut-egg.xml:380(title) msgid "gcut_egg_set_env ()" msgstr "" #: xml/gcut-egg.xml:382(programlisting) #, no-wrap msgid "" "void gcut_egg_set_env (GCutEgg *egg,\n" " const gchar *name,\n" " ...);" msgstr "" #: xml/gcut-egg.xml:385(para) msgid "" "gcut_egg_set_env has been deprecated since version 1.1.5 " "and should not be used in newly-written code. Use gcut_process_set_env() instead." msgstr "" "gcut_egg_set_envはバージョン1.1.5から非推奨になりました。" "新しく書くコードでは使わないでください。代わりにgcut_process_set_env()を使ってくださ" "い。" #: xml/gcut-egg.xml:401(title) msgid "gcut_egg_get_env ()" msgstr "" #: xml/gcut-egg.xml:403(programlisting) #, no-wrap msgid "gchar ** gcut_egg_get_env (GCutEgg *egg);" msgstr "" #: xml/gcut-egg.xml:404(para) msgid "" "gcut_egg_get_env has been deprecated since version 1.1.5 " "and should not be used in newly-written code. Use gcut_process_get_env() instead." msgstr "" "gcut_egg_get_envはバージョン1.1.5から非推奨になりました。" "新しく書くコードでは使わないでください。代わりにgcut_process_get_env()を使ってくださ" "い。" #: xml/gcut-egg.xml:419(title) msgid "gcut_egg_hatch ()" msgstr "" #: xml/gcut-egg.xml:421(programlisting) #, no-wrap msgid "" "gboolean gcut_egg_hatch (GCutEgg *egg,\n" " GError **error);" msgstr "" #: xml/gcut-egg.xml:423(para) msgid "" "gcut_egg_hatch has been deprecated since version 1.1.5 " "and should not be used in newly-written code. Use gcut_process_run() instead." msgstr "" "gcut_egg_hatchはバージョン1.1.5から非推奨になりました。新" "しく書くコードでは使わないでください。代わりにgcut_process_run()を使ってください。" #: xml/gcut-egg.xml:424(para) msgid "Hatches a new external process." msgstr "新しい外部プロセスを実行します。" #: xml/gcut-egg.xml:438(title) msgid "gcut_egg_close ()" msgstr "" #: xml/gcut-egg.xml:440(programlisting) #, no-wrap msgid "void gcut_egg_close (GCutEgg *egg);" msgstr "" #: xml/gcut-egg.xml:441(para) msgid "" "gcut_egg_close has been deprecated since version 1.1.5 " "and should not be used in newly-written code. no need to close explicitly on " "GCutProcess." msgstr "" "gcut_egg_closeはバージョン1.1.5から非推奨になりました。新" "しく書くコードでは使わないでください。代わりにGCutProcessを使ってください。" #: xml/gcut-egg.xml:442(para) msgid "Closes a hatched external process. It is closed implicitly on destroy." msgstr "" "実行した外部コマンドのリソースを回収します。破棄されるときに暗黙的に回収され" "ます。" #: xml/gcut-egg.xml:451(title) msgid "gcut_egg_write ()" msgstr "" #: xml/gcut-egg.xml:453(programlisting) #, no-wrap msgid "" "gboolean gcut_egg_write (GCutEgg *egg,\n" " const gchar *chunk,\n" " gsize size,\n" " GError **error);" msgstr "" #: xml/gcut-egg.xml:457(para) msgid "" "gcut_egg_write has been deprecated since version 1.1.5 " "and should not be used in newly-written code. Use gcut_process_write() instead." msgstr "" "gcut_egg_writeはバージョン1.1.5から非推奨になりました。新" "しく書くコードでは使わないでください。代わりにgcut_process_write()を使ってください。" #: xml/gcut-egg.xml:478(title) msgid "gcut_egg_get_pid ()" msgstr "" #: xml/gcut-egg.xml:480(programlisting) #, no-wrap msgid "GPid gcut_egg_get_pid (GCutEgg *egg);" msgstr "" #: xml/gcut-egg.xml:481(para) msgid "" "gcut_egg_get_pid has been deprecated since version 1.1.5 " "and should not be used in newly-written code. Use gcut_process_get_pid() instead." msgstr "" "gcut_egg_get_pidはバージョン1.1.5から非推奨になりました。" "新しく書くコードでは使わないでください。代わりにgcut_process_get_pid()を使ってくださ" "い。" #: xml/gcut-egg.xml:495(title) msgid "gcut_egg_wait ()" msgstr "" #: xml/gcut-egg.xml:497(programlisting) #, no-wrap msgid "" "gint gcut_egg_wait (GCutEgg *egg,\n" " guint timeout,\n" " GError **error);" msgstr "" #: xml/gcut-egg.xml:500(para) msgid "" "gcut_egg_wait has been deprecated since version 1.1.5 and " "should not be used in newly-written code. Use gcut_process_wait() instead." msgstr "" "gcut_egg_waitはバージョン1.1.5から非推奨になりました。新し" "く書くコードでは使わないでください。代わりにgcut_process_wait()を使ってください。" #: xml/gcut-egg.xml:501(para) msgid "" "Waits running external process is finished while timeout milliseconds. If external process isn't finished while " "timeout milliseconds, GCUT_EGG_ERROR_TIMEOUT error is set " "and -1 is returned. If external process isn't running, GCUT_EGG_ERROR_NOT_RUNNING error is set and -1 is returned." msgstr "" "実行中の外部プロセスが終了することをtimeoutミリ秒待ち" "ます。外部コマンドがtimeoutミリ秒以内に終了しなかった" "場合は、GCUT_EGG_ERROR_TIMEOUTエラーが設定され、-1が返り" "ます。外部プロセスが実行されていない場合は、GCUT_EGG_ERROR_NOT_RUNNINGエラー" "が設定され、-1が返ります。" #: xml/gcut-egg.xml:524(title) msgid "gcut_egg_kill ()" msgstr "" #: xml/gcut-egg.xml:526(programlisting) #, no-wrap msgid "" "void gcut_egg_kill (GCutEgg *egg,\n" " gint signal_number);" msgstr "" #: xml/gcut-egg.xml:528(para) msgid "" "gcut_egg_kill has been deprecated since version 1.1.5 and " "should not be used in newly-written code. Use gcut_process_kill() instead." msgstr "" "gcut_egg_killはバージョン1.1.5から非推奨になりました。新し" "く書くコードでは使わないで下さい。代わりにgcut_process_kill()を使ってください。" #: xml/gcut-egg.xml:540(title) msgid "gcut_egg_get_input ()" msgstr "" #: xml/gcut-egg.xml:542(programlisting) #, no-wrap msgid "GIOChannel * gcut_egg_get_input (GCutEgg *egg);" msgstr "" #: xml/gcut-egg.xml:543(para) msgid "" "gcut_egg_get_input has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use gcut_process_get_input_channel() instead." msgstr "" "gcut_egg_get_inputはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_process_get_input_channel()を使ってください。" #: xml/gcut-egg.xml:557(title) msgid "gcut_egg_get_output ()" msgstr "" #: xml/gcut-egg.xml:559(programlisting) #, no-wrap msgid "GIOChannel * gcut_egg_get_output (GCutEgg *egg);" msgstr "" #: xml/gcut-egg.xml:560(para) msgid "" "gcut_egg_get_output has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use gcut_process_get_output_channel() instead." msgstr "" "gcut_egg_get_outputはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_process_get_output_channel()を使ってください。" #: xml/gcut-egg.xml:574(title) msgid "gcut_egg_get_error ()" msgstr "" #: xml/gcut-egg.xml:576(programlisting) #, no-wrap msgid "GIOChannel * gcut_egg_get_error (GCutEgg *egg);" msgstr "" #: xml/gcut-egg.xml:577(para) msgid "" "gcut_egg_get_error has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use gcut_process_get_error_channel() instead." msgstr "" "gcut_egg_get_errorはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_egg_get_error()を使ってくださ" "い。" #: xml/gcut-egg.xml:591(title) msgid "gcut_egg_get_forced_termination_wait_time ()" msgstr "" #: xml/gcut-egg.xml:593(programlisting) #, no-wrap msgid "" "guint gcut_egg_get_forced_termination_wait_time\n" " (GCutEgg *egg);" msgstr "" #: xml/gcut-egg.xml:595(para) msgid "" "gcut_egg_get_forced_termination_wait_time has been " "deprecated since version 1.1.5 and should not be used in newly-written code. " "Use gcut_process_get_forced_termination_wait_time() instead." msgstr "" "gcut_egg_get_forced_termination_wait_timeはバージョン1.1.5" "から非推奨になりました。新しく書くコードでは使わないでください。代わりに" "gcut_process_get_forced_termination_wait_time()を使ってください。" #: xml/gcut-egg.xml:609(title) msgid "gcut_egg_set_forced_termination_wait_time ()" msgstr "" #: xml/gcut-egg.xml:611(programlisting) #, no-wrap msgid "" "void gcut_egg_set_forced_termination_wait_time\n" " (GCutEgg *egg,\n" " guint timeout);" msgstr "" #: xml/gcut-egg.xml:614(para) msgid "" "gcut_egg_set_forced_termination_wait_time has been " "deprecated since version 1.1.5 and should not be used in newly-written code. " "Use gcut_process_set_forced_termination_wait_time() instead." msgstr "" "gcut_egg_set_forced_termination_wait_timeはバージョン1.1.5" "から非推奨になりました。新しく書くコードでは使わないでください。代わりに" "gcut_egg_set_forced_termination_wait_time()を" "使ってください。" #: xml/gcut-egg.xml:632(primary) xml/api-index-full.xml:359(link) msgid "GCutEgg:command" msgstr "" #: xml/gcut-egg.xml:634(para) msgid "The command to be ran by the egg." msgstr "実行する外部コマンド。" #: xml/gcut-egg.xml:639(primary) xml/api-index-full.xml:355(link) #: xml/api-index-1.0.6.xml:37(link) msgid "GCutEgg::error" msgstr "" #: xml/gcut-egg.xml:640(programlisting) #, no-wrap msgid "" "void user_function (GCutEgg *egg,\n" " gpointer error,\n" " gpointer user_data) : Run Last" msgstr "" #: xml/gcut-egg.xml:656(primary) xml/api-index-full.xml:356(link) #: xml/api-index-1.0.6.xml:38(link) msgid "GCutEgg::error-received" msgstr "" #: xml/gcut-egg.xml:657(programlisting) xml/gcut-egg.xml:686(programlisting) #, no-wrap msgid "" "void user_function (GCutEgg *egg,\n" " gchar *chunk,\n" " guint64 size,\n" " gpointer user_data) : Run Last" msgstr "" #: xml/gcut-egg.xml:685(primary) xml/api-index-full.xml:357(link) #: xml/api-index-1.0.6.xml:39(link) msgid "GCutEgg::output-received" msgstr "" #: xml/gcut-egg.xml:713(primary) xml/api-index-full.xml:358(link) #: xml/api-index-1.0.6.xml:40(link) msgid "GCutEgg::reaped" msgstr "" #: xml/gcut-egg.xml:714(programlisting) #, no-wrap msgid "" "void user_function (GCutEgg *egg,\n" " gint status,\n" " gpointer user_data) : Run Last" msgstr "" #: xml/gcut-dynamic-data.xml:7(refentrytitle) #: xml/gcut-dynamic-data.xml:14(refname) msgid "GCutDynamicData" msgstr "" #: xml/gcut-data.xml:7(refentrytitle) xml/gcut-data.xml:14(refname) #: xml/api-index-full.xml:7(link) xml/api-index-full.xml:321(link) #: xml/api-index-full.xml:323(link) xml/api-index-full.xml:325(link) #: xml/api-index-full.xml:327(link) xml/api-index-full.xml:329(link) #: xml/api-index-full.xml:331(link) xml/api-index-full.xml:333(link) #: xml/api-index-full.xml:334(link) xml/api-index-full.xml:337(link) #: xml/api-index-full.xml:339(link) xml/api-index-full.xml:341(link) #: xml/api-index-full.xml:343(link) xml/api-index-full.xml:345(link) #: xml/api-index-full.xml:347(link) xml/api-index-full.xml:348(link) #: xml/api-index-full.xml:351(link) xml/api-index-1.1.5.xml:16(link) #: xml/api-index-1.1.3.xml:12(link) xml/api-index-1.1.3.xml:13(link) #: xml/api-index-1.1.3.xml:14(link) xml/api-index-1.1.3.xml:15(link) #: xml/api-index-1.1.3.xml:16(link) xml/api-index-1.1.3.xml:17(link) #: xml/api-index-1.1.1.xml:13(link) xml/api-index-1.0.7.xml:24(link) #: xml/api-index-1.0.6.xml:7(link) xml/api-index-1.0.6.xml:28(link) #: xml/api-index-1.0.6.xml:29(link) xml/api-index-1.0.6.xml:30(link) #: xml/api-index-1.0.6.xml:31(link) xml/api-index-1.0.6.xml:32(link) #: xml/api-index-1.0.6.xml:33(link) xml/api-index-1.0.6.xml:34(link) msgid "Convenience test data API" msgstr "便利なテストデータ用API" #: xml/gcut-data.xml:15(refpurpose) msgid "API to create test data without structure definition." msgstr "構造体定義なしでテストデータを作成するためのAPI。" #: xml/gcut-data.xml:22(link) xml/gcut-data.xml:73(primary) #: xml/api-index-full.xml:7(link) xml/api-index-1.0.6.xml:7(link) msgid "gcut_add_datum" msgstr "" #: xml/gcut-data.xml:23(parameter) msgid "const *first_field_name" msgstr "" #: xml/gcut-data.xml:25(link) xml/gcut-data.xml:321(primary) #: xml/api-index-full.xml:351(link) xml/api-index-1.1.5.xml:16(link) msgid "gcut_data_has_field" msgstr "" #: xml/gcut-data.xml:26(parameter) xml/gcut-data.xml:30(parameter) #: xml/gcut-data.xml:32(parameter) xml/gcut-data.xml:34(parameter) #: xml/gcut-data.xml:42(parameter) xml/gcut-data.xml:44(parameter) #: xml/gcut-data.xml:46(parameter) xml/gcut-data.xml:48(parameter) #: xml/gcut-data.xml:50(parameter) xml/gcut-data-helper.xml:22(parameter) #: xml/gcut-data-helper.xml:25(parameter) #: xml/gcut-data-helper.xml:28(parameter) #: xml/gcut-data-helper.xml:31(parameter) #: xml/gcut-data-helper.xml:34(parameter) #: xml/gcut-data-helper.xml:37(parameter) #: xml/gcut-data-helper.xml:40(parameter) #: xml/gcut-data-helper.xml:43(parameter) #: xml/gcut-data-helper.xml:46(parameter) #: xml/gcut-data-helper.xml:49(parameter) #: xml/gcut-data-helper.xml:52(parameter) #: xml/gcut-data-helper.xml:55(parameter) #: xml/gcut-data-helper.xml:58(parameter) #: xml/gcut-data-helper.xml:61(parameter) #: xml/gcut-data-helper.xml:64(parameter) msgid "const *field_name" msgstr "" #: xml/gcut-data.xml:27(link) xml/gcut-data.xml:338(primary) #: xml/api-index-full.xml:325(link) xml/api-index-1.1.3.xml:13(link) msgid "gcut_data_get_char" msgstr "" #: xml/gcut-data.xml:29(link) xml/gcut-data.xml:355(primary) #: xml/api-index-full.xml:343(link) xml/api-index-1.0.6.xml:32(link) msgid "gcut_data_get_string" msgstr "" #: xml/gcut-data.xml:31(link) xml/gcut-data.xml:373(primary) #: xml/api-index-full.xml:333(link) xml/api-index-1.0.6.xml:30(link) msgid "gcut_data_get_int" msgstr "" #: xml/gcut-data.xml:33(link) xml/gcut-data.xml:391(primary) #: xml/api-index-full.xml:347(link) xml/api-index-1.0.6.xml:34(link) msgid "gcut_data_get_uint" msgstr "" #: xml/gcut-data.xml:35(link) xml/gcut-data.xml:410(primary) #: xml/api-index-full.xml:334(link) xml/api-index-1.1.3.xml:15(link) msgid "gcut_data_get_int64" msgstr "" #: xml/gcut-data.xml:37(link) xml/gcut-data.xml:428(primary) #: xml/api-index-full.xml:348(link) xml/api-index-1.1.3.xml:17(link) msgid "gcut_data_get_uint64" msgstr "" #: xml/gcut-data.xml:39(link) xml/gcut-data.xml:446(primary) #: xml/api-index-full.xml:341(link) xml/api-index-1.1.3.xml:16(link) msgid "gcut_data_get_size" msgstr "" #: xml/gcut-data.xml:41(link) xml/gcut-data.xml:463(primary) #: xml/api-index-full.xml:345(link) xml/api-index-1.0.6.xml:33(link) msgid "gcut_data_get_type" msgstr "" #: xml/gcut-data.xml:43(link) xml/gcut-data.xml:481(primary) #: xml/api-index-full.xml:331(link) xml/api-index-1.0.6.xml:29(link) msgid "gcut_data_get_flags" msgstr "" #: xml/gcut-data.xml:45(link) xml/gcut-data.xml:500(primary) #: xml/api-index-full.xml:329(link) xml/api-index-1.0.6.xml:28(link) msgid "gcut_data_get_enum" msgstr "" #: xml/gcut-data.xml:47(link) xml/gcut-data.xml:519(primary) #: xml/api-index-full.xml:339(link) xml/api-index-1.0.6.xml:31(link) msgid "gcut_data_get_pointer" msgstr "" #: xml/gcut-data.xml:49(link) xml/gcut-data.xml:538(primary) #: xml/api-index-full.xml:323(link) xml/api-index-1.0.7.xml:24(link) msgid "gcut_data_get_boxed" msgstr "" #: xml/gcut-data.xml:51(link) xml/gcut-data.xml:557(primary) #: xml/api-index-full.xml:337(link) xml/api-index-1.1.1.xml:13(link) msgid "gcut_data_get_object" msgstr "" #: xml/gcut-data.xml:53(link) xml/gcut-data.xml:575(primary) #: xml/api-index-full.xml:321(link) xml/api-index-1.1.3.xml:12(link) msgid "gcut_data_get_boolean" msgstr "" #: xml/gcut-data.xml:55(link) xml/gcut-data.xml:592(primary) #: xml/api-index-full.xml:327(link) xml/api-index-1.1.3.xml:14(link) msgid "gcut_data_get_double" msgstr "" #: xml/gcut-data.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " );\n" " (,\n" " );\n" "#define (data,\n" " field_name)\n" "const * (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" "#define (data,\n" " field_name)\n" "#define (data,\n" " field_name)\n" "#define (data,\n" " field_name)\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" "#define (data,\n" " field_name)\n" "#define (data,\n" " field_name)\n" "#define (data,\n" " field_name)\n" msgstr "" #: xml/gcut-data.xml:62(para) msgid "" "cut_add_data() " "requires custom data type for complex test data. But it's not easy to write. " "gcut_add_datum() provides API to use complex test data without custom data type. It " "uses GType for providing complex " "data." msgstr "" "cut_add_data()で複" "雑なテストデータを使用したい場合はテストデータ用にデータ型を定義する必要があ" "ります。しかし、それは少し面倒です。gcut_add_datum()はデータ型を定義せずに複雑なテ" "ストデータを使用するためのAPIを提供します。このAPIは複雑なデータを扱うために" "GTypeを使います。" #: xml/gcut-data.xml:72(title) msgid "gcut_add_datum ()" msgstr "" #: xml/gcut-data.xml:74(programlisting) #, no-wrap msgid "" "void gcut_add_datum (const gchar *name,\n" " const gchar *first_field_name,\n" " ...);" msgstr "" #: xml/gcut-data.xml:77(para) msgid "" "Adds a datum to be used in data driven test. It's convenient rather than " "cut_add_data() " "because you doesn't need to define a new structure for a complex test data." msgstr "" "データ駆動テスト用のデータを追加します。複雑なテストデータのために新しく構造" "体を定義する必要がないため、cut_add_data()よりも便利です。" #: xml/gcut-data.xml:84(programlisting) #, no-wrap msgid "" "\n" "#include <gcutter.h>\n" "\n" "void data_translate (void);\n" "void test_translate (gconstpointer data);\n" "\n" "static const gchar*\n" "translate (gint input)\n" "{\n" " switch(input) {\n" " case 1:\n" " return \"first\";\n" " case 111:\n" " return \"a hundred eleven\";\n" " default:\n" " return \"unsupported\";\n" " }\n" "}\n" "\n" "void\n" "data_translate(void)\n" "{\n" " gcut_add_datum(\"simple data\",\n" " \"translated\", G_TYPE_STRING, \"first\",\n" " \"input\", G_TYPE_INT, 1,\n" " NULL);\n" " gcut_add_datum(\"complex data\",\n" " \"translated\", G_TYPE_STRING, \"a hundred eleven\",\n" " \"input\", G_TYPE_INT, 111,\n" " NULL);\n" "}\n" "\n" "void\n" "test_translate(gconstpointer data)\n" "{\n" " cut_assert_equal_string(gcut_data_get_string(data, \"translated\"),\n" " gcut_data_get_int(data, \"input\"));\n" "}\n" msgstr "" #: xml/gcut-data.xml:124(para) msgid "Available types and their values are the followings:" msgstr "利用可能な型とその時の値は以下の通りです。" #: xml/gcut-data.xml:130(type) msgid "G_TYPE_CHAR" msgstr "" #: xml/gcut-data.xml:132(para) msgid "gchar value" msgstr "gcharの値。" #: xml/gcut-data.xml:134(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_CHAR, 'X',\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:143(type) msgid "G_TYPE_STRING" msgstr "" #: xml/gcut-data.xml:145(para) msgid "const gchar *value" msgstr "" #: xml/gcut-data.xml:147(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_STRING, \"string value\",\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:156(type) msgid "G_TYPE_INT" msgstr "" #: xml/gcut-data.xml:158(para) msgid "gint value" msgstr "gintの値。" #: xml/gcut-data.xml:160(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_INT, 100,\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:169(type) msgid "G_TYPE_UINT" msgstr "" #: xml/gcut-data.xml:171(para) msgid "guint value" msgstr "guintの値。" #: xml/gcut-data.xml:173(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_UINT, 100,\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:182(type) msgid "G_TYPE_INT64" msgstr "" #: xml/gcut-data.xml:184(para) msgid "gint64 value" msgstr "gint64の値。" #: xml/gcut-data.xml:186(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_INT64, G_GINT64_CONSTANT(100),\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:195(type) msgid "G_TYPE_UINT64" msgstr "" #: xml/gcut-data.xml:197(para) msgid "guint64 value" msgstr "guint64の値。" #: xml/gcut-data.xml:199(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_UINT64, G_GUINT64_CONSTANT(100),\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:208(type) msgid "G_TYPE_GTYPE" msgstr "" #: xml/gcut-data.xml:210(para) msgid "GType value" msgstr "GTypeの値。" #: xml/gcut-data.xml:212(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_GTYPE, G_TYPE_OBJECT,\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:221(term) msgid "GFlags types" msgstr "GFlagsの型" #: xml/gcut-data.xml:223(para) xml/gcut-data.xml:236(para) #: xml/gcut-data.xml:264(para) msgid "its type value." msgstr "その型の値。" #: xml/gcut-data.xml:225(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", GTK_TYPE_WIDGET_FLAGS, GTK_TOPLEVEL | GTK_MAPPED,\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:234(term) msgid "GEnum types" msgstr "GEnumの型" #: xml/gcut-data.xml:238(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", GTK_TYPE_WRAP_MODE, GTK_WRAP_NONE,\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:247(type) msgid "G_TYPE_POINTER" msgstr "" #: xml/gcut-data.xml:249(para) msgid "" "gconstpointer value, " "GDestroyNotify notify" msgstr "" "gconstpointer value, " "GDestroyNotify notify" #: xml/gcut-data.xml:250(para) msgid "notify is called when value is destroyed." msgstr "valueが破棄されるときにnotifyが呼ばれます。" #: xml/gcut-data.xml:252(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_POINTER, my_structure_new(...), my_structure_free,\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:258(para) xml/gcut-data.xml:275(para) msgid "NOTE: value's ownership is passed to Cutter. Don't free it." msgstr "注意: 値の所有者はCutterになります。解放しないで下さい。" #: xml/gcut-data.xml:262(term) msgid "GBoxed types" msgstr "GBoxedの型" #: xml/gcut-data.xml:266(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_HASH_TABLE,\n" " gcut_hash_table_string_string_new(\"name1\", \"value1\",\n" " \"name2\", \"value2\",\n" " NULL),\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:279(type) msgid "G_TYPE_BOOLEAN" msgstr "" #: xml/gcut-data.xml:281(para) msgid "gboolean value" msgstr "gbooleanの値。" #: xml/gcut-data.xml:283(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_BOOLEAN, TRUE,\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:292(type) msgid "G_TYPE_DOUBLE" msgstr "" #: xml/gcut-data.xml:294(para) msgid "gdouble value" msgstr "gdoubleの値。" #: xml/gcut-data.xml:296(programlisting) #, no-wrap msgid "" "\n" "gcut_add_datum(\"data name\",\n" " \"field-name\", G_TYPE_DOUBLE, 2.9,\n" " NULL);\n" msgstr "" #: xml/gcut-data.xml:307(simpara) msgid "the name of the data." msgstr "データの名前。" #: xml/gcut-data.xml:309(term) msgid "first_field_name :" msgstr "" #: xml/gcut-data.xml:310(simpara) msgid "the first field name." msgstr "最初のフィールド名。" #: xml/gcut-data.xml:313(simpara) msgid "" "the type and value pair of the first field, followed optionally by the next " "field name, type and value triples. NULL-terminated. See description for more " "details." msgstr "" "最初のフィールドの型と値。その後に、フィールドの名前と型と値の3つを任意の数だ" "け指定します。最後の引数はNULLにしてください。詳細は関数の説明文のところにあります。" #: xml/gcut-data.xml:320(title) msgid "gcut_data_has_field ()" msgstr "" #: xml/gcut-data.xml:322(programlisting) #, no-wrap msgid "" "gboolean gcut_data_has_field (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:326(simpara) xml/gcut-data.xml:344(simpara) #: xml/gcut-data.xml:362(simpara) xml/gcut-data.xml:380(simpara) #: xml/gcut-data.xml:399(simpara) xml/gcut-data.xml:417(simpara) #: xml/gcut-data.xml:435(simpara) xml/gcut-data.xml:452(simpara) #: xml/gcut-data.xml:470(simpara) xml/gcut-data.xml:489(simpara) #: xml/gcut-data.xml:508(simpara) xml/gcut-data.xml:527(simpara) #: xml/gcut-data.xml:546(simpara) xml/gcut-data.xml:564(simpara) #: xml/gcut-data.xml:581(simpara) xml/gcut-data.xml:599(simpara) msgid "" "the data added by gcut_add_datum()" "." msgstr "" "gcut_add_datum()" "で追加したデータ。" #: xml/gcut-data.xml:328(term) xml/gcut-data.xml:346(term) #: xml/gcut-data.xml:364(term) xml/gcut-data.xml:382(term) #: xml/gcut-data.xml:401(term) xml/gcut-data.xml:419(term) #: xml/gcut-data.xml:437(term) xml/gcut-data.xml:454(term) #: xml/gcut-data.xml:472(term) xml/gcut-data.xml:491(term) #: xml/gcut-data.xml:510(term) xml/gcut-data.xml:529(term) #: xml/gcut-data.xml:548(term) xml/gcut-data.xml:566(term) #: xml/gcut-data.xml:583(term) xml/gcut-data.xml:601(term) #: xml/gcut-data-helper.xml:87(term) xml/gcut-data-helper.xml:107(term) #: xml/gcut-data-helper.xml:127(term) xml/gcut-data-helper.xml:147(term) #: xml/gcut-data-helper.xml:167(term) xml/gcut-data-helper.xml:187(term) #: xml/gcut-data-helper.xml:207(term) xml/gcut-data-helper.xml:227(term) #: xml/gcut-data-helper.xml:247(term) xml/gcut-data-helper.xml:267(term) #: xml/gcut-data-helper.xml:287(term) xml/gcut-data-helper.xml:307(term) #: xml/gcut-data-helper.xml:327(term) xml/gcut-data-helper.xml:347(term) #: xml/gcut-data-helper.xml:367(term) msgid "field_name :" msgstr "" #: xml/gcut-data.xml:329(simpara) xml/gcut-data.xml:347(simpara) #: xml/gcut-data.xml:365(simpara) xml/gcut-data.xml:383(simpara) #: xml/gcut-data.xml:402(simpara) xml/gcut-data.xml:420(simpara) #: xml/gcut-data.xml:438(simpara) xml/gcut-data.xml:455(simpara) #: xml/gcut-data.xml:473(simpara) xml/gcut-data.xml:492(simpara) #: xml/gcut-data.xml:511(simpara) xml/gcut-data.xml:530(simpara) #: xml/gcut-data.xml:549(simpara) xml/gcut-data.xml:567(simpara) #: xml/gcut-data.xml:584(simpara) xml/gcut-data.xml:602(simpara) msgid "the field name." msgstr "フィールド名。" #: xml/gcut-data.xml:331(simpara) msgid "" "TRUE if " "data has a field_name field is " "available, FALSE " "otherwise." msgstr "" "datafield_nameフィールドがあ" "ればTRUE、そうでなけれ" "ばFALSE。" #: xml/gcut-data.xml:337(title) msgid "gcut_data_get_char()" msgstr "" #: xml/gcut-data.xml:339(programlisting) #, no-wrap msgid "#define gcut_data_get_char(data, field_name)" msgstr "" #: xml/gcut-data.xml:340(para) msgid "" "Gets a field value identified by field_name as char." msgstr "" "field_nameフィールドの値を文字として取得します。" #: xml/gcut-data.xml:349(simpara) xml/gcut-data.xml:367(simpara) #: xml/gcut-data.xml:385(simpara) xml/gcut-data.xml:404(simpara) #: xml/gcut-data.xml:422(simpara) xml/gcut-data.xml:440(simpara) #: xml/gcut-data.xml:457(simpara) xml/gcut-data.xml:475(simpara) #: xml/gcut-data.xml:494(simpara) xml/gcut-data.xml:513(simpara) #: xml/gcut-data.xml:532(simpara) xml/gcut-data.xml:551(simpara) #: xml/gcut-data.xml:569(simpara) xml/gcut-data.xml:586(simpara) #: xml/gcut-data.xml:604(simpara) msgid "a field value corresponded to field_name." msgstr "field_nameに対応するフィールドの値。" #: xml/gcut-data.xml:354(title) msgid "gcut_data_get_string ()" msgstr "" #: xml/gcut-data.xml:356(programlisting) #, no-wrap msgid "" "const gchar * gcut_data_get_string (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:358(para) msgid "" "Gets a field value identified by field_name as string." msgstr "" "field_nameフィールドの値を文字列として取得します。" #: xml/gcut-data.xml:372(title) msgid "gcut_data_get_int ()" msgstr "" #: xml/gcut-data.xml:374(programlisting) #, no-wrap msgid "" "gint gcut_data_get_int (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:376(para) msgid "" "Gets a field value identified by field_name as " "integer." msgstr "" "field_nameフィールドの値を整数として取得します。" #: xml/gcut-data.xml:390(title) msgid "gcut_data_get_uint ()" msgstr "" #: xml/gcut-data.xml:392(programlisting) #, no-wrap msgid "" "guint gcut_data_get_uint (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:394(para) msgid "" "Gets a field value identified by field_name as " "unsigned integer." msgstr "field_nameの値を符号なし整数として取得します。" #: xml/gcut-data.xml:409(title) msgid "gcut_data_get_int64()" msgstr "" #: xml/gcut-data.xml:411(programlisting) #, no-wrap msgid "#define gcut_data_get_int64(data, field_name)" msgstr "" #: xml/gcut-data.xml:412(para) msgid "" "Gets a field value identified by field_name as 64-bit " "integer." msgstr "" "field_nameフィールドの値を64bit整数として取得します。" #: xml/gcut-data.xml:427(title) msgid "gcut_data_get_uint64()" msgstr "" #: xml/gcut-data.xml:429(programlisting) #, no-wrap msgid "#define gcut_data_get_uint64(data, field_name)" msgstr "" #: xml/gcut-data.xml:430(para) msgid "" "Gets a field value identified by field_name as 64-bit " "unsigned integer." msgstr "" "field_nameの値を64bit符号なし整数として取得します。" #: xml/gcut-data.xml:445(title) msgid "gcut_data_get_size()" msgstr "" #: xml/gcut-data.xml:447(programlisting) #, no-wrap msgid "#define gcut_data_get_size(data, field_name)" msgstr "" #: xml/gcut-data.xml:448(para) msgid "" "Gets a field value identified by field_name as size_t." msgstr "" "field_nameフィールドの値をsize_tとして取得します。" #: xml/gcut-data.xml:462(title) msgid "gcut_data_get_type ()" msgstr "" #: xml/gcut-data.xml:464(programlisting) #, no-wrap msgid "" "GType gcut_data_get_type (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:466(para) msgid "" "Gets a field value identified by field_name as GType." msgstr "" "field_nameフィールドの値をGTypeとして取得します。" #: xml/gcut-data.xml:480(title) msgid "gcut_data_get_flags ()" msgstr "" #: xml/gcut-data.xml:482(programlisting) #, no-wrap msgid "" "guint gcut_data_get_flags (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:484(para) msgid "" "Gets a field value identified by field_name as " "unsigned integer of GFlags." msgstr "" "field_nameの値をGFlags型の符号なし整数として取得しま" "す。" #: xml/gcut-data.xml:499(title) msgid "gcut_data_get_enum ()" msgstr "" #: xml/gcut-data.xml:501(programlisting) #, no-wrap msgid "" "gint gcut_data_get_enum (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:503(para) msgid "" "Gets a field value identified by field_name as " "integer of GEnum type." msgstr "" "field_nameフィールドの値をGEnum型の整数として取得しま" "す。" #: xml/gcut-data.xml:518(title) msgid "gcut_data_get_pointer ()" msgstr "" #: xml/gcut-data.xml:520(programlisting) #, no-wrap msgid "" "gconstpointer gcut_data_get_pointer (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:522(para) msgid "" "Gets a field value identified by field_name as " "pointer." msgstr "field_nameの値をポインタとして取得します。" #: xml/gcut-data.xml:537(title) msgid "gcut_data_get_boxed ()" msgstr "" #: xml/gcut-data.xml:539(programlisting) #, no-wrap msgid "" "gconstpointer gcut_data_get_boxed (gconstpointer data,\n" " const gchar *field_name);" msgstr "" #: xml/gcut-data.xml:541(para) msgid "" "Gets a field value identified by field_name as GBoxed " "type value." msgstr "" "field_nameフィールドの値をGBoxed型の値として取得しま" "す。" #: xml/gcut-data.xml:556(title) msgid "gcut_data_get_object()" msgstr "" #: xml/gcut-data.xml:558(programlisting) #, no-wrap msgid "#define gcut_data_get_object(data, field_name)" msgstr "" #: xml/gcut-data.xml:559(para) msgid "" "Gets a field value identified by field_name as GObject type value." msgstr "" "field_nameフィールドの値をGObjectとして取得します。" #: xml/gcut-data.xml:574(title) msgid "gcut_data_get_boolean()" msgstr "" #: xml/gcut-data.xml:576(programlisting) #, no-wrap msgid "#define gcut_data_get_boolean(data, field_name)" msgstr "" #: xml/gcut-data.xml:577(para) msgid "" "Gets a field value identified by field_name as " "boolean." msgstr "field_nameの値を真偽値として取得します。" #: xml/gcut-data.xml:591(title) msgid "gcut_data_get_double()" msgstr "" #: xml/gcut-data.xml:593(programlisting) #, no-wrap msgid "#define gcut_data_get_double(data, field_name)" msgstr "" #: xml/gcut-data.xml:594(para) msgid "" "Gets a field value identified by field_name as double " "floating point number." msgstr "" "field_nameの値を倍精度浮動小数点数として取得します。" #: xml/gcut-data-helper.xml:7(refentrytitle) #: xml/gcut-data-helper.xml:14(refname) xml/api-index-full.xml:322(link) #: xml/api-index-full.xml:324(link) xml/api-index-full.xml:326(link) #: xml/api-index-full.xml:328(link) xml/api-index-full.xml:330(link) #: xml/api-index-full.xml:332(link) xml/api-index-full.xml:335(link) #: xml/api-index-full.xml:336(link) xml/api-index-full.xml:338(link) #: xml/api-index-full.xml:340(link) xml/api-index-full.xml:342(link) #: xml/api-index-full.xml:344(link) xml/api-index-full.xml:346(link) #: xml/api-index-full.xml:349(link) xml/api-index-full.xml:350(link) msgid "gcut-data-helper" msgstr "" #: xml/gcut-data-helper.xml:21(link) xml/gcut-data-helper.xml:78(primary) #: xml/api-index-full.xml:326(link) msgid "gcut_data_get_char_helper" msgstr "" #: xml/gcut-data-helper.xml:23(type) xml/gcut-data-helper.xml:26(type) #: xml/gcut-data-helper.xml:29(type) xml/gcut-data-helper.xml:32(type) #: xml/gcut-data-helper.xml:35(type) xml/gcut-data-helper.xml:38(type) #: xml/gcut-data-helper.xml:41(type) xml/gcut-data-helper.xml:44(type) #: xml/gcut-data-helper.xml:47(type) xml/gcut-data-helper.xml:50(type) #: xml/gcut-data-helper.xml:53(type) xml/gcut-data-helper.xml:56(type) #: xml/gcut-data-helper.xml:59(type) xml/gcut-data-helper.xml:62(type) #: xml/gcut-data-helper.xml:65(type) xml/cut-types.xml:53(primary) #: xml/api-index-full.xml:68(link) msgid "CutCallbackFunction" msgstr "" #: xml/gcut-data-helper.xml:23(parameter) #: xml/gcut-data-helper.xml:26(parameter) #: xml/gcut-data-helper.xml:29(parameter) #: xml/gcut-data-helper.xml:32(parameter) #: xml/gcut-data-helper.xml:35(parameter) #: xml/gcut-data-helper.xml:38(parameter) #: xml/gcut-data-helper.xml:41(parameter) #: xml/gcut-data-helper.xml:44(parameter) #: xml/gcut-data-helper.xml:47(parameter) #: xml/gcut-data-helper.xml:50(parameter) #: xml/gcut-data-helper.xml:53(parameter) #: xml/gcut-data-helper.xml:56(parameter) #: xml/gcut-data-helper.xml:59(parameter) #: xml/gcut-data-helper.xml:62(parameter) #: xml/gcut-data-helper.xml:65(parameter) msgid " callback" msgstr "" "CutCallbackFunction" "コールバック。" #: xml/gcut-data-helper.xml:24(link) xml/gcut-data-helper.xml:98(primary) #: xml/api-index-full.xml:344(link) msgid "gcut_data_get_string_helper" msgstr "" #: xml/gcut-data-helper.xml:27(link) xml/gcut-data-helper.xml:118(primary) #: xml/api-index-full.xml:336(link) msgid "gcut_data_get_int_helper" msgstr "" #: xml/gcut-data-helper.xml:30(link) xml/gcut-data-helper.xml:138(primary) #: xml/api-index-full.xml:350(link) msgid "gcut_data_get_uint_helper" msgstr "" #: xml/gcut-data-helper.xml:33(returnvalue) xml/gcut-assertions.xml:111(type) #: xml/gcut-assertions.xml:112(type) xml/gcut-assertions.xml:114(type) #: xml/gcut-assertions.xml:115(type) xml/gcut-assertions-helper.xml:112(type) #: xml/gcut-assertions-helper.xml:113(type) #: xml/gcut-assertions-helper.xml:116(type) #: xml/gcut-assertions-helper.xml:117(type) msgid "gint64" msgstr "" #: xml/gcut-data-helper.xml:33(link) xml/gcut-data-helper.xml:158(primary) #: xml/api-index-full.xml:335(link) msgid "gcut_data_get_int64_helper" msgstr "" #: xml/gcut-data-helper.xml:36(returnvalue) xml/gcut-assertions.xml:117(type) #: xml/gcut-assertions.xml:118(type) xml/gcut-assertions.xml:120(type) #: xml/gcut-assertions.xml:121(type) xml/gcut-assertions-helper.xml:120(type) #: xml/gcut-assertions-helper.xml:121(type) #: xml/gcut-assertions-helper.xml:124(type) #: xml/gcut-assertions-helper.xml:125(type) msgid "guint64" msgstr "" #: xml/gcut-data-helper.xml:36(link) xml/gcut-data-helper.xml:178(primary) #: xml/api-index-full.xml:349(link) msgid "gcut_data_get_uint64_helper" msgstr "" #: xml/gcut-data-helper.xml:39(link) xml/gcut-data-helper.xml:198(primary) #: xml/api-index-full.xml:342(link) msgid "gcut_data_get_size_helper" msgstr "" #: xml/gcut-data-helper.xml:42(link) xml/gcut-data-helper.xml:218(primary) #: xml/api-index-full.xml:346(link) msgid "gcut_data_get_type_helper" msgstr "" #: xml/gcut-data-helper.xml:45(link) xml/gcut-data-helper.xml:238(primary) #: xml/api-index-full.xml:332(link) msgid "gcut_data_get_flags_helper" msgstr "" #: xml/gcut-data-helper.xml:48(link) xml/gcut-data-helper.xml:258(primary) #: xml/api-index-full.xml:330(link) msgid "gcut_data_get_enum_helper" msgstr "" #: xml/gcut-data-helper.xml:51(link) xml/gcut-data-helper.xml:278(primary) #: xml/api-index-full.xml:340(link) msgid "gcut_data_get_pointer_helper" msgstr "" #: xml/gcut-data-helper.xml:54(link) xml/gcut-data-helper.xml:298(primary) #: xml/api-index-full.xml:324(link) msgid "gcut_data_get_boxed_helper" msgstr "" #: xml/gcut-data-helper.xml:57(link) xml/gcut-data-helper.xml:318(primary) #: xml/api-index-full.xml:338(link) msgid "gcut_data_get_object_helper" msgstr "" #: xml/gcut-data-helper.xml:60(link) xml/gcut-data-helper.xml:338(primary) #: xml/api-index-full.xml:322(link) msgid "gcut_data_get_boolean_helper" msgstr "" #: xml/gcut-data-helper.xml:63(link) xml/gcut-data-helper.xml:358(primary) #: xml/api-index-full.xml:328(link) msgid "gcut_data_get_double_helper" msgstr "" #: xml/gcut-data-helper.xml:21(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " );\n" "const * (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" msgstr "" #: xml/gcut-data-helper.xml:77(title) msgid "gcut_data_get_char_helper ()" msgstr "" #: xml/gcut-data-helper.xml:79(programlisting) #, no-wrap msgid "" "gchar gcut_data_get_char_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:90(term) xml/gcut-data-helper.xml:110(term) #: xml/gcut-data-helper.xml:130(term) xml/gcut-data-helper.xml:150(term) #: xml/gcut-data-helper.xml:170(term) xml/gcut-data-helper.xml:190(term) #: xml/gcut-data-helper.xml:210(term) xml/gcut-data-helper.xml:230(term) #: xml/gcut-data-helper.xml:250(term) xml/gcut-data-helper.xml:270(term) #: xml/gcut-data-helper.xml:290(term) xml/gcut-data-helper.xml:310(term) #: xml/gcut-data-helper.xml:330(term) xml/gcut-data-helper.xml:350(term) #: xml/gcut-data-helper.xml:370(term) msgid "callback :" msgstr "" #: xml/gcut-data-helper.xml:97(title) msgid "gcut_data_get_string_helper ()" msgstr "" #: xml/gcut-data-helper.xml:99(programlisting) #, no-wrap msgid "" "const gchar * gcut_data_get_string_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:117(title) msgid "gcut_data_get_int_helper ()" msgstr "" #: xml/gcut-data-helper.xml:119(programlisting) #, no-wrap msgid "" "gint gcut_data_get_int_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:137(title) msgid "gcut_data_get_uint_helper ()" msgstr "" #: xml/gcut-data-helper.xml:139(programlisting) #, no-wrap msgid "" "guint gcut_data_get_uint_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:157(title) msgid "gcut_data_get_int64_helper ()" msgstr "" #: xml/gcut-data-helper.xml:159(programlisting) #, no-wrap msgid "" "gint64 gcut_data_get_int64_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:177(title) msgid "gcut_data_get_uint64_helper ()" msgstr "" #: xml/gcut-data-helper.xml:179(programlisting) #, no-wrap msgid "" "guint64 gcut_data_get_uint64_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:197(title) msgid "gcut_data_get_size_helper ()" msgstr "" #: xml/gcut-data-helper.xml:199(programlisting) #, no-wrap msgid "" "gsize gcut_data_get_size_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:217(title) msgid "gcut_data_get_type_helper ()" msgstr "" #: xml/gcut-data-helper.xml:219(programlisting) #, no-wrap msgid "" "GType gcut_data_get_type_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:237(title) msgid "gcut_data_get_flags_helper ()" msgstr "" #: xml/gcut-data-helper.xml:239(programlisting) #, no-wrap msgid "" "guint gcut_data_get_flags_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:257(title) msgid "gcut_data_get_enum_helper ()" msgstr "" #: xml/gcut-data-helper.xml:259(programlisting) #, no-wrap msgid "" "gint gcut_data_get_enum_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:277(title) msgid "gcut_data_get_pointer_helper ()" msgstr "" #: xml/gcut-data-helper.xml:279(programlisting) #, no-wrap msgid "" "gconstpointer gcut_data_get_pointer_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:297(title) msgid "gcut_data_get_boxed_helper ()" msgstr "" #: xml/gcut-data-helper.xml:299(programlisting) #, no-wrap msgid "" "gconstpointer gcut_data_get_boxed_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:317(title) msgid "gcut_data_get_object_helper ()" msgstr "" #: xml/gcut-data-helper.xml:319(programlisting) #, no-wrap msgid "" "gpointer gcut_data_get_object_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:337(title) msgid "gcut_data_get_boolean_helper ()" msgstr "" #: xml/gcut-data-helper.xml:339(programlisting) #, no-wrap msgid "" "gboolean gcut_data_get_boolean_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-data-helper.xml:357(title) msgid "gcut_data_get_double_helper ()" msgstr "" #: xml/gcut-data-helper.xml:359(programlisting) #, no-wrap msgid "" "gdouble gcut_data_get_double_helper (gconstpointer data,\n" " const gchar *field_name,\n" " CutCallbackFunction callback);" msgstr "" #: xml/gcut-assertions.xml:15(refpurpose) msgid "Checks that your program works as you expect with GLib support." msgstr "" "GLibサポート付きであなたのプログラムが期待通りに動作しているかを検証します。" #: xml/gcut-assertions.xml:22(link) xml/gcut-assertions.xml:143(primary) #: xml/api-index-full.xml:44(link) xml/api-index-1.0.3.xml:10(link) msgid "gcut_assert_equal_type" msgstr "" #: xml/gcut-assertions.xml:22(parameter) xml/gcut-assertions.xml:25(parameter) #: xml/gcut-assertions-helper.xml:21(parameter) msgid " expected" msgstr "" #: xml/gcut-assertions.xml:23(parameter) xml/gcut-assertions.xml:26(parameter) #: xml/gcut-assertions-helper.xml:22(parameter) msgid " actual" msgstr "" #: xml/gcut-assertions.xml:25(link) xml/gcut-assertions.xml:162(primary) #: xml/api-index-full.xml:93(link) xml/api-index-deprecated.xml:13(link) msgid "cut_assert_equal_g_type" msgstr "" #: xml/gcut-assertions.xml:28(link) xml/gcut-assertions.xml:182(primary) #: xml/api-index-full.xml:48(link) xml/api-index-1.0.3.xml:11(link) msgid "gcut_assert_equal_value" msgstr "" #: xml/gcut-assertions.xml:28(parameter) xml/gcut-assertions.xml:31(parameter) #: xml/gcut-assertions-helper.xml:25(parameter) msgid " *expected" msgstr "" #: xml/gcut-assertions.xml:29(parameter) xml/gcut-assertions.xml:32(parameter) #: xml/gcut-assertions-helper.xml:26(parameter) msgid " *actual" msgstr "" #: xml/gcut-assertions.xml:31(link) xml/gcut-assertions.xml:201(primary) #: xml/api-index-full.xml:94(link) xml/api-index-deprecated.xml:14(link) msgid "cut_assert_equal_g_value" msgstr "" #: xml/gcut-assertions.xml:34(link) xml/gcut-assertions.xml:221(primary) #: xml/api-index-full.xml:20(link) xml/api-index-1.0.6.xml:9(link) msgid "gcut_assert_equal_list" msgstr "" #: xml/gcut-assertions.xml:34(parameter) xml/gcut-assertions.xml:40(parameter) #: xml/gcut-assertions.xml:43(parameter) xml/gcut-assertions.xml:46(parameter) #: xml/gcut-assertions.xml:49(parameter) xml/gcut-assertions.xml:52(parameter) #: xml/gcut-assertions.xml:55(parameter) xml/gcut-assertions.xml:59(parameter) #: xml/gcut-assertions.xml:64(parameter) xml/gcut-assertions.xml:68(parameter) msgid " *expected" msgstr "" #: xml/gcut-assertions.xml:35(parameter) xml/gcut-assertions.xml:41(parameter) #: xml/gcut-assertions.xml:44(parameter) xml/gcut-assertions.xml:47(parameter) #: xml/gcut-assertions.xml:50(parameter) xml/gcut-assertions.xml:53(parameter) #: xml/gcut-assertions.xml:56(parameter) xml/gcut-assertions.xml:60(parameter) #: xml/gcut-assertions.xml:65(parameter) xml/gcut-assertions.xml:69(parameter) msgid " *actual" msgstr "" #: xml/gcut-assertions.xml:36(parameter) xml/gcut-assertions.xml:61(parameter) #: xml/gcut-assertions.xml:73(parameter) #: xml/gcut-assertions.xml:109(parameter) #: xml/gcut-assertions-helper.xml:31(parameter) #: xml/gcut-assertions-helper.xml:65(parameter) #: xml/gcut-assertions-helper.xml:70(parameter) #: xml/gcut-assertions-helper.xml:108(parameter) msgid " equal_function" msgstr "" #: xml/gcut-assertions.xml:37(parameter) #: xml/gcut-assertions-helper.xml:32(parameter) msgid "" " " "inspect_function" msgstr "" #: xml/gcut-assertions.xml:38(parameter) xml/gcut-assertions.xml:76(parameter) #: xml/gcut-assertions-helper.xml:33(parameter) #: xml/gcut-assertions-helper.xml:73(parameter) msgid " inspect_user_data" msgstr "" #: xml/gcut-assertions.xml:40(link) xml/gcut-assertions.xml:254(primary) #: xml/api-index-full.xml:26(link) xml/api-index-1.0.3.xml:7(link) msgid "gcut_assert_equal_list_int" msgstr "" #: xml/gcut-assertions.xml:43(link) xml/gcut-assertions.xml:273(primary) #: xml/api-index-full.xml:91(link) xml/api-index-deprecated.xml:11(link) #: xml/api-index-0.8.xml:7(link) msgid "cut_assert_equal_g_list_int" msgstr "" #: xml/gcut-assertions.xml:46(link) xml/gcut-assertions.xml:293(primary) #: xml/api-index-full.xml:33(link) xml/api-index-1.0.3.xml:9(link) msgid "gcut_assert_equal_list_uint" msgstr "" #: xml/gcut-assertions.xml:49(link) xml/gcut-assertions.xml:312(primary) #: xml/api-index-full.xml:31(link) xml/api-index-1.0.3.xml:8(link) msgid "gcut_assert_equal_list_string" msgstr "" #: xml/gcut-assertions.xml:52(link) xml/gcut-assertions.xml:331(primary) #: xml/api-index-full.xml:92(link) xml/api-index-deprecated.xml:12(link) #: xml/api-index-0.8.xml:8(link) msgid "cut_assert_equal_g_list_string" msgstr "" #: xml/gcut-assertions.xml:55(link) xml/gcut-assertions.xml:351(primary) #: xml/api-index-full.xml:28(link) xml/api-index-1.0.5.xml:13(link) msgid "gcut_assert_equal_list_object" msgstr "" #: xml/gcut-assertions.xml:58(link) xml/gcut-assertions.xml:371(primary) #: xml/api-index-full.xml:29(link) xml/api-index-1.0.5.xml:14(link) msgid "gcut_assert_equal_list_object_custom" msgstr "" #: xml/gcut-assertions.xml:63(link) xml/gcut-assertions.xml:396(primary) #: xml/api-index-full.xml:21(link) xml/api-index-1.0.5.xml:11(link) msgid "gcut_assert_equal_list_enum" msgstr "" #: xml/gcut-assertions.xml:67(link) xml/gcut-assertions.xml:420(primary) #: xml/api-index-full.xml:23(link) xml/api-index-1.0.5.xml:12(link) msgid "gcut_assert_equal_list_flags" msgstr "" #: xml/gcut-assertions.xml:71(link) xml/gcut-assertions.xml:444(primary) #: xml/api-index-full.xml:14(link) xml/api-index-1.0.6.xml:8(link) msgid "gcut_assert_equal_hash_table" msgstr "" #: xml/gcut-assertions.xml:71(parameter) xml/gcut-assertions.xml:79(parameter) #: xml/gcut-assertions-helper.xml:68(parameter) #: xml/gcut-assertions-helper.xml:78(parameter) msgid " *expected" msgstr "" #: xml/gcut-assertions.xml:72(parameter) xml/gcut-assertions.xml:80(parameter) #: xml/gcut-assertions-helper.xml:69(parameter) #: xml/gcut-assertions-helper.xml:79(parameter) msgid " *actual" msgstr "" #: xml/gcut-assertions.xml:74(parameter) #: xml/gcut-assertions-helper.xml:71(parameter) msgid "" " " "key_inspect_function" msgstr "" #: xml/gcut-assertions.xml:75(parameter) #: xml/gcut-assertions-helper.xml:72(parameter) msgid "" " " "value_inspect_function" msgstr "" #: xml/gcut-assertions.xml:78(link) xml/gcut-assertions.xml:482(primary) #: xml/api-index-full.xml:16(link) xml/api-index-1.0.4.xml:7(link) msgid "gcut_assert_equal_hash_table_string_string" msgstr "" #: xml/gcut-assertions.xml:82(link) xml/gcut-assertions.xml:502(primary) #: xml/api-index-full.xml:50(link) xml/api-index-1.0.3.xml:12(link) msgid "gcut_assert_error" msgstr "" #: xml/gcut-assertions.xml:84(link) xml/gcut-assertions.xml:517(primary) #: xml/api-index-full.xml:131(link) xml/api-index-deprecated.xml:17(link) #: xml/api-index-1.0.xml:8(link) msgid "cut_assert_g_error" msgstr "" #: xml/gcut-assertions.xml:86(link) xml/gcut-assertions.xml:533(primary) #: xml/api-index-full.xml:10(link) xml/api-index-1.0.5.xml:8(link) msgid "gcut_assert_equal_error" msgstr "" #: xml/gcut-assertions.xml:86(parameter) msgid " *expected" msgstr "" #: xml/gcut-assertions.xml:87(parameter) msgid " *actual" msgstr "" #: xml/gcut-assertions.xml:89(link) xml/gcut-assertions.xml:552(primary) #: xml/api-index-full.xml:58(link) xml/api-index-1.0.3.xml:13(link) msgid "gcut_assert_remove_path" msgstr "" #: xml/gcut-assertions.xml:91(link) xml/gcut-assertions.xml:567(primary) #: xml/api-index-full.xml:175(link) xml/api-index-deprecated.xml:20(link) #: xml/api-index-1.0.2.xml:10(link) msgid "cut_assert_remove_path" msgstr "" #: xml/gcut-assertions.xml:93(link) xml/gcut-assertions.xml:583(primary) #: xml/api-index-full.xml:42(link) xml/api-index-1.0.4.xml:8(link) msgid "gcut_assert_equal_time_val" msgstr "" #: xml/gcut-assertions.xml:93(type) xml/gcut-assertions.xml:94(type) #: xml/gcut-assertions-helper.xml:90(type) #: xml/gcut-assertions-helper.xml:91(type) msgid "GTimeVal" msgstr "" #: xml/gcut-assertions.xml:93(parameter) msgid " expected" msgstr "" #: xml/gcut-assertions.xml:94(parameter) msgid " actual" msgstr "" #: xml/gcut-assertions.xml:96(link) xml/gcut-assertions.xml:602(primary) #: xml/api-index-full.xml:8(link) xml/api-index-1.0.5.xml:7(link) msgid "gcut_assert_equal_enum" msgstr "" #: xml/gcut-assertions.xml:97(parameter) #: xml/gcut-assertions-helper.xml:95(parameter) #: xml/gcut-assertions-helper.xml:101(parameter) msgid " expected" msgstr "" #: xml/gcut-assertions.xml:98(parameter) #: xml/gcut-assertions-helper.xml:96(parameter) #: xml/gcut-assertions-helper.xml:102(parameter) msgid " actual" msgstr "" #: xml/gcut-assertions.xml:100(link) xml/gcut-assertions.xml:634(primary) #: xml/api-index-full.xml:12(link) xml/api-index-1.0.5.xml:9(link) msgid "gcut_assert_equal_flags" msgstr "" #: xml/gcut-assertions.xml:101(parameter) msgid " expected" msgstr "" #: xml/gcut-assertions.xml:102(parameter) msgid " actual" msgstr "" #: xml/gcut-assertions.xml:104(link) xml/gcut-assertions.xml:671(primary) #: xml/api-index-full.xml:35(link) xml/api-index-1.0.5.xml:15(link) msgid "gcut_assert_equal_object" msgstr "" #: xml/gcut-assertions.xml:104(parameter) #: xml/gcut-assertions.xml:107(parameter) #: xml/gcut-assertions-helper.xml:106(parameter) msgid " *expected" msgstr "" #: xml/gcut-assertions.xml:105(parameter) #: xml/gcut-assertions.xml:108(parameter) #: xml/gcut-assertions-helper.xml:107(parameter) msgid " *actual" msgstr "" #: xml/gcut-assertions.xml:107(link) xml/gcut-assertions.xml:701(primary) #: xml/api-index-full.xml:36(link) xml/api-index-1.0.5.xml:16(link) msgid "gcut_assert_equal_object_custom" msgstr "" #: xml/gcut-assertions.xml:111(link) xml/gcut-assertions.xml:743(primary) #: xml/api-index-full.xml:18(link) xml/api-index-1.0.5.xml:10(link) msgid "gcut_assert_equal_int64" msgstr "" #: xml/gcut-assertions.xml:111(parameter) #: xml/gcut-assertions.xml:114(parameter) #: xml/gcut-assertions-helper.xml:112(parameter) #: xml/gcut-assertions-helper.xml:116(parameter) msgid " expected" msgstr "" #: xml/gcut-assertions.xml:112(parameter) #: xml/gcut-assertions.xml:115(parameter) #: xml/gcut-assertions-helper.xml:113(parameter) #: xml/gcut-assertions-helper.xml:117(parameter) msgid " actual" msgstr "" #: xml/gcut-assertions.xml:114(link) xml/gcut-assertions.xml:762(primary) #: xml/api-index-full.xml:52(link) xml/api-index-1.1.4.xml:7(link) msgid "gcut_assert_not_equal_int64" msgstr "" #: xml/gcut-assertions.xml:117(link) xml/gcut-assertions.xml:781(primary) #: xml/api-index-full.xml:46(link) xml/api-index-1.0.5.xml:17(link) msgid "gcut_assert_equal_uint64" msgstr "" #: xml/gcut-assertions.xml:117(parameter) #: xml/gcut-assertions.xml:120(parameter) #: xml/gcut-assertions-helper.xml:120(parameter) #: xml/gcut-assertions-helper.xml:124(parameter) msgid " expected" msgstr "" #: xml/gcut-assertions.xml:118(parameter) #: xml/gcut-assertions.xml:121(parameter) #: xml/gcut-assertions-helper.xml:121(parameter) #: xml/gcut-assertions-helper.xml:125(parameter) msgid " actual" msgstr "" #: xml/gcut-assertions.xml:120(link) xml/gcut-assertions.xml:800(primary) #: xml/api-index-full.xml:56(link) xml/api-index-1.1.4.xml:8(link) msgid "gcut_assert_not_equal_uint64" msgstr "" #: xml/gcut-assertions.xml:123(link) xml/gcut-assertions.xml:819(primary) #: xml/api-index-full.xml:38(link) xml/api-index-1.0.6.xml:10(link) msgid "gcut_assert_equal_pid" msgstr "" #: xml/gcut-assertions.xml:123(parameter) #: xml/gcut-assertions.xml:126(parameter) #: xml/gcut-assertions-helper.xml:128(parameter) #: xml/gcut-assertions-helper.xml:132(parameter) msgid " expected" msgstr "" #: xml/gcut-assertions.xml:124(parameter) #: xml/gcut-assertions.xml:127(parameter) #: xml/gcut-assertions-helper.xml:129(parameter) #: xml/gcut-assertions-helper.xml:133(parameter) msgid " actual" msgstr "" #: xml/gcut-assertions.xml:126(link) xml/gcut-assertions.xml:838(primary) #: xml/api-index-full.xml:54(link) xml/api-index-1.0.7.xml:7(link) msgid "gcut_assert_not_equal_pid" msgstr "" #: xml/gcut-assertions.xml:129(link) xml/gcut-assertions.xml:857(primary) #: xml/api-index-full.xml:40(link) xml/api-index-1.1.5.xml:7(link) msgid "gcut_assert_equal_string" msgstr "" #: xml/gcut-assertions.xml:129(parameter) msgid " *expected" msgstr "" #: xml/gcut-assertions.xml:130(parameter) msgid " *actual" msgstr "" #: xml/gcut-assertions.xml:22(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" msgstr "" #: xml/gcut-assertions.xml:142(title) msgid "gcut_assert_equal_type ()" msgstr "" #: xml/gcut-assertions.xml:144(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_type (GType expected,\n" " GType actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:147(para) xml/gcut-assertions.xml:167(para) #: xml/gcut-assertions.xml:186(para) xml/gcut-assertions.xml:206(para) #: xml/gcut-assertions.xml:258(para) xml/gcut-assertions.xml:278(para) #: xml/gcut-assertions.xml:297(para) xml/gcut-assertions.xml:316(para) #: xml/gcut-assertions.xml:336(para) xml/gcut-assertions.xml:452(para) #: xml/gcut-assertions.xml:487(para) xml/gcut-assertions.xml:537(para) #: xml/gcut-assertions.xml:587(para) xml/gcut-assertions.xml:607(para) #: xml/gcut-assertions.xml:639(para) xml/gcut-assertions.xml:747(para) #: xml/gcut-assertions.xml:785(para) xml/gcut-assertions.xml:823(para) #: xml/gcut-assertions.xml:861(para) xml/cut-assertions.xml:487(para) #: xml/cut-assertions.xml:523(para) xml/cut-assertions.xml:565(para) #: xml/cut-assertions.xml:607(para) xml/cut-assertions.xml:649(para) #: xml/cut-assertions.xml:691(para) xml/cut-assertions.xml:733(para) #: xml/cut-assertions.xml:775(para) xml/cut-assertions.xml:817(para) #: xml/cut-assertions.xml:859(para) xml/cut-assertions.xml:901(para) #: xml/cut-assertions.xml:945(para) xml/cut-assertions.xml:981(para) #: xml/cut-assertions.xml:1023(para) xml/cut-assertions.xml:1065(para) #: xml/cut-assertions.xml:1107(para) xml/cut-assertions.xml:1149(para) #: xml/cut-assertions.xml:1191(para) xml/cut-assertions.xml:1233(para) #: xml/cut-assertions.xml:1275(para) xml/cut-assertions.xml:1317(para) #: xml/cut-assertions.xml:1359(para) xml/cut-assertions.xml:1403(para) #: xml/cut-assertions.xml:1485(para) xml/cut-assertions.xml:2137(para) #: xml/cut-assertions.xml:2174(para) xml/cppcut-assertions.xml:42(para) msgid "" "Passes if expected == actual." msgstr "" "expected == actualが成り立つと" "きパスします。" #: xml/gcut-assertions.xml:151(simpara) xml/gcut-assertions.xml:171(simpara) #: xml/gcut-assertions.xml:190(simpara) xml/gcut-assertions.xml:210(simpara) #: xml/gcut-assertions.xml:541(simpara) xml/gcut-assertions.xml:591(simpara) #: xml/gcut-assertions.xml:623(simpara) xml/gcut-assertions.xml:660(simpara) #: xml/gcut-assertions.xml:690(simpara) xml/gcut-assertions.xml:729(simpara) #: xml/gcut-assertions.xml:751(simpara) xml/gcut-assertions.xml:770(simpara) #: xml/gcut-assertions.xml:789(simpara) xml/gcut-assertions.xml:808(simpara) #: xml/gcut-assertions.xml:827(simpara) xml/gcut-assertions.xml:846(simpara) #: xml/gcut-assertions.xml:865(simpara) xml/cut-assertions.xml:1945(simpara) #: xml/cppcut-assertions.xml:54(simpara) msgid "an expected value." msgstr "期待値。" #: xml/gcut-assertions.xml:154(simpara) xml/gcut-assertions.xml:174(simpara) #: xml/gcut-assertions.xml:193(simpara) xml/gcut-assertions.xml:213(simpara) #: xml/gcut-assertions.xml:544(simpara) xml/gcut-assertions.xml:594(simpara) #: xml/gcut-assertions.xml:626(simpara) xml/gcut-assertions.xml:663(simpara) #: xml/gcut-assertions.xml:693(simpara) xml/gcut-assertions.xml:732(simpara) #: xml/gcut-assertions.xml:754(simpara) xml/gcut-assertions.xml:773(simpara) #: xml/gcut-assertions.xml:792(simpara) xml/gcut-assertions.xml:811(simpara) #: xml/gcut-assertions.xml:830(simpara) xml/gcut-assertions.xml:849(simpara) #: xml/gcut-assertions.xml:868(simpara) xml/cut-assertions.xml:1948(simpara) #: xml/cppcut-assertions.xml:57(simpara) msgid "an actual value." msgstr "実測値。" #: xml/gcut-assertions.xml:161(title) msgid "cut_assert_equal_g_type ()" msgstr "" #: xml/gcut-assertions.xml:163(programlisting) #, no-wrap msgid "" "void cut_assert_equal_g_type (GType expected,\n" " GType actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:166(para) msgid "" "cut_assert_equal_g_type has been deprecated since version " "1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_type() " "instead." msgstr "" "cut_assert_equal_g_typeはバージョン1.0.3から非推奨になりま" "した。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_type()を" "使ってください。" #: xml/gcut-assertions.xml:181(title) msgid "gcut_assert_equal_value ()" msgstr "" #: xml/gcut-assertions.xml:183(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_value (GValue *expected,\n" " GValue *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:200(title) msgid "cut_assert_equal_g_value ()" msgstr "" #: xml/gcut-assertions.xml:202(programlisting) #, no-wrap msgid "" "void cut_assert_equal_g_value (GValue *expected,\n" " GValue *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:205(para) msgid "" "cut_assert_equal_g_value has been deprecated since " "version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_value() instead." msgstr "" "cut_assert_equal_g_valueはバージョン1.0.3から非推奨になり" "ました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_value()を" "使ってください。" #: xml/gcut-assertions.xml:220(title) msgid "gcut_assert_equal_list ()" msgstr "" #: xml/gcut-assertions.xml:222(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list (GList *expected,\n" " GList *actual,\n" " GEqualFunc equal_function,\n" " GCutInspectFunction inspect_function,\n" " gpointer inspect_user_data,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:228(para) xml/gcut-assertions.xml:706(para) msgid "" "Passes if equal_function(expected, actual) == CUT_TRUE." msgstr "" "equal_function(expected, " "actual) == CUT_TRUEのときパスします。" #: xml/gcut-assertions.xml:232(simpara) msgid "an expected list." msgstr "期待するリスト。" #: xml/gcut-assertions.xml:235(simpara) msgid "an actual list." msgstr "実際のリスト。" #: xml/gcut-assertions.xml:237(term) xml/gcut-assertions.xml:387(term) #: xml/gcut-assertions.xml:461(term) xml/gcut-assertions.xml:734(term) #: xml/gcut-assertions-helper.xml:213(term) #: xml/gcut-assertions-helper.xml:376(term) #: xml/gcut-assertions-helper.xml:406(term) #: xml/gcut-assertions-helper.xml:600(term) msgid "equal_function :" msgstr "" #: xml/gcut-assertions.xml:238(simpara) msgid "" "a function that compares each elements of expected " "and actual list." msgstr "" "expectedリストとactualリストの" "各要素を比較する関数。" #: xml/gcut-assertions.xml:241(term) xml/gcut-assertions-helper.xml:216(term) msgid "inspect_function :" msgstr "" #: xml/gcut-assertions.xml:242(simpara) msgid "" "a function that inspected expected and " "actual list." msgstr "" "expectedリストとactualリスとの" "詳細を示す関数。" #: xml/gcut-assertions.xml:245(term) xml/gcut-assertions.xml:473(term) #: xml/gcut-assertions-helper.xml:219(term) #: xml/gcut-assertions-helper.xml:415(term) msgid "inspect_user_data :" msgstr "" #: xml/gcut-assertions.xml:246(simpara) xml/gcut-assertions.xml:474(simpara) msgid "a data to be passed to inspect_function." msgstr "inspect_functionに渡されるデータ。" #: xml/gcut-assertions.xml:253(title) msgid "gcut_assert_equal_list_int ()" msgstr "" #: xml/gcut-assertions.xml:255(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_int (GList *expected,\n" " GList *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:262(simpara) xml/gcut-assertions.xml:282(simpara) msgid "an expected list of integer." msgstr "期待する整数のリスト。" #: xml/gcut-assertions.xml:265(simpara) xml/gcut-assertions.xml:285(simpara) msgid "an actual list of integer." msgstr "実際の整数のリスト。" #: xml/gcut-assertions.xml:272(title) msgid "cut_assert_equal_g_list_int ()" msgstr "" #: xml/gcut-assertions.xml:274(programlisting) #, no-wrap msgid "" "void cut_assert_equal_g_list_int (GList *expected,\n" " GList *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:277(para) msgid "" "cut_assert_equal_g_list_int has been deprecated since " "version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_list_int()" " instead." msgstr "" "cut_assert_equal_g_string_list_intはバージョン1.0.3から非" "推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_list_int()" "を使ってください。" #: xml/gcut-assertions.xml:290(para) xml/gcut-assertions.xml:348(para) #: xml/cut-experimental.xml:62(para) xml/cut-experimental.xml:92(para) #: xml/cut-experimental.xml:122(para) xml/cut-experimental.xml:152(para) #: xml/cut-assertions.xml:1971(para) xml/cut-assertions.xml:2343(para) msgid "Since 0.8" msgstr "0.8から" #: xml/gcut-assertions.xml:292(title) msgid "gcut_assert_equal_list_uint ()" msgstr "" #: xml/gcut-assertions.xml:294(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_uint (GList *expected,\n" " GList *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:301(simpara) msgid "an expected list of unsigned integer." msgstr "期待する符号無し整数のリスト。" #: xml/gcut-assertions.xml:304(simpara) msgid "an actual list of unsigned integer." msgstr "実際の符号無し整数のリスト。" #: xml/gcut-assertions.xml:311(title) msgid "gcut_assert_equal_list_string ()" msgstr "" #: xml/gcut-assertions.xml:313(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_string (GList *expected,\n" " GList *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:320(simpara) xml/gcut-assertions.xml:340(simpara) msgid "an expected list of string." msgstr "期待する文字列のリスト。" #: xml/gcut-assertions.xml:323(simpara) xml/gcut-assertions.xml:343(simpara) msgid "an actual list of string." msgstr "実際の文字列のリスト。" #: xml/gcut-assertions.xml:330(title) msgid "cut_assert_equal_g_list_string ()" msgstr "" #: xml/gcut-assertions.xml:332(programlisting) #, no-wrap msgid "" "void cut_assert_equal_g_list_string (GList *expected,\n" " GList *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:335(para) msgid "" "cut_assert_equal_g_list_string has been deprecated since " "version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_list_string() instead." msgstr "" "cut_assert_equal_g_list_stringはバージョン1.0.3から非推奨" "になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_list_string()を使ってください。" #: xml/gcut-assertions.xml:350(title) msgid "gcut_assert_equal_list_object ()" msgstr "" #: xml/gcut-assertions.xml:352(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_object (GList *expected,\n" " GList *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:355(para) msgid "" "Passes if expected and actual " "has same GObject * in same order." msgstr "" "expectedactualが同じGObject *" "を同じ順番で持っているときパスします。" #: xml/gcut-assertions.xml:360(simpara) xml/gcut-assertions.xml:382(simpara) msgid "" "an expected list of GObject." msgstr "" "期待するGObjectのリスト。" #: xml/gcut-assertions.xml:363(simpara) xml/gcut-assertions.xml:385(simpara) msgid "" "an actual list of GObject." msgstr "実際のGObjectのリスト。" #: xml/gcut-assertions.xml:370(title) msgid "gcut_assert_equal_list_object_custom ()" msgstr "" #: xml/gcut-assertions.xml:372(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_object_custom\n" " (GList *expected,\n" " GList *actual,\n" " GEqualFunc equal_function,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:377(para) msgid "" "Passes if expected and actual " "has same GObject in same " "order. Each comparison of GObject uses equal_function." msgstr "" "expectedactualが等しいGObjectを同じ順序で持っているときパス" "します。それぞれのGObjectの比較" "にはequal_functionを使います。" #: xml/gcut-assertions.xml:388(simpara) msgid "" "a function that compares two GObject." msgstr "" "ふたつのGObjectを比較する関数。" #: xml/gcut-assertions.xml:395(title) msgid "gcut_assert_equal_list_enum ()" msgstr "" #: xml/gcut-assertions.xml:397(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_enum (GType type,\n" " GList *expected,\n" " GList *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:401(para) msgid "" "Passes if expected and actual " "has same enum values in same order." msgstr "" "expectedactualが同じ列挙値を" "同じ順序で持っているときパスします。" #: xml/gcut-assertions.xml:409(simpara) msgid "an expected list of enum value." msgstr "期待する列挙値のリスト。" #: xml/gcut-assertions.xml:412(simpara) msgid "an actual list of enum value." msgstr "実際の列挙値のリスト。" #: xml/gcut-assertions.xml:419(title) msgid "gcut_assert_equal_list_flags ()" msgstr "" #: xml/gcut-assertions.xml:421(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_flags (GType type,\n" " GList *expected,\n" " GList *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:425(para) msgid "" "Passes if expected and actual " "has same flags values in same order." msgstr "" "expectedactualが同じフラグ値" "を同じ順序で持っているときパスします。" #: xml/gcut-assertions.xml:433(simpara) msgid "an expected list of flags value." msgstr "期待するフラグ値のリスト。" #: xml/gcut-assertions.xml:436(simpara) msgid "an actual list of flags value." msgstr "実際のフラグ値のリスト。" #: xml/gcut-assertions.xml:443(title) msgid "gcut_assert_equal_hash_table ()" msgstr "" #: xml/gcut-assertions.xml:445(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_hash_table (GHashTable *expected,\n" " GHashTable *actual,\n" " GEqualFunc equal_function,\n" " GCutInspectFunction key_inspect_function,\n" " GCutInspectFunction value_inspect_function,\n" " gpointer inspect_user_data,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:456(simpara) xml/gcut-assertions.xml:491(simpara) msgid "" "an expected GHashTable of " "string." msgstr "" "期待する文字列のGHashTable。" #: xml/gcut-assertions.xml:459(simpara) xml/gcut-assertions.xml:494(simpara) msgid "" "an actual GHashTable of " "string." msgstr "" "実際の文字列のGHashTable。" #: xml/gcut-assertions.xml:462(simpara) msgid "" "a function that compares each values of expected and " "actual hash table." msgstr "" "expectedハッシュテーブルとactualハッシュテーブルのそれぞれの値を比較する関数。" #: xml/gcut-assertions.xml:465(term) xml/gcut-assertions-helper.xml:409(term) msgid "key_inspect_function :" msgstr "" #: xml/gcut-assertions.xml:466(simpara) msgid "" "a function that inspected a key of expected and " "actual hash table." msgstr "" "expectedハッシュテーブルとactualハッシュテーブルのそれぞれのキーの詳細を示す関数。" #: xml/gcut-assertions.xml:469(term) xml/gcut-assertions-helper.xml:412(term) msgid "value_inspect_function :" msgstr "" #: xml/gcut-assertions.xml:470(simpara) msgid "" "a function that inspected a value of expected and " "actual hash table." msgstr "" "expectedハッシュテーブルとactualハッシュテーブルのそれぞれの値の詳細を示す関数。" #: xml/gcut-assertions.xml:481(title) msgid "gcut_assert_equal_hash_table_string_string ()" msgstr "" #: xml/gcut-assertions.xml:483(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_hash_table_string_string\n" " (GHashTable *expected,\n" " GHashTable *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:501(title) msgid "gcut_assert_error ()" msgstr "" #: xml/gcut-assertions.xml:503(programlisting) #, no-wrap msgid "" "void gcut_assert_error (GError *error,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:505(para) xml/gcut-assertions.xml:521(para) msgid "" "Passes if error == NULL." msgstr "" "error == NULLのときパスします。" #: xml/gcut-assertions.xml:509(simpara) xml/gcut-assertions.xml:525(simpara) msgid "a target GError." msgstr "検証対象のGError。" #: xml/gcut-assertions.xml:516(title) msgid "cut_assert_g_error ()" msgstr "" #: xml/gcut-assertions.xml:518(programlisting) #, no-wrap msgid "" "void cut_assert_g_error (GError *error,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:520(para) msgid "" "cut_assert_g_error has been deprecated since version " "1.0.3 and should not be used in newly-written code. Use gcut_assert_error() instead." msgstr "" "cut_assert_g_errorはバージョン1.0.3から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにgcut_assert_error()を使ってくださ" "い。" #: xml/gcut-assertions.xml:530(para) xml/cut-assertions.xml:2110(para) #: xml/cut-assertions.xml:2130(para) xml/cut-assertions.xml:2149(para) msgid "Since 1.0" msgstr "1.0から" #: xml/gcut-assertions.xml:532(title) msgid "gcut_assert_equal_error ()" msgstr "" #: xml/gcut-assertions.xml:534(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_error (GError *expected,\n" " GError *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:551(title) msgid "gcut_assert_remove_path ()" msgstr "" #: xml/gcut-assertions.xml:553(programlisting) #, no-wrap msgid "" "void gcut_assert_remove_path (const gchar *path,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:555(para) xml/gcut-assertions.xml:571(para) msgid "" "Passes if cut_utils_build_path(path, ...) is removed " "successfully." msgstr "" "cut_utils_build_path(path, ...)の削除に成功するとパス" "します。" #: xml/gcut-assertions.xml:559(simpara) xml/gcut-assertions.xml:575(simpara) msgid "a first element of the path to the removed path." msgstr "削除するパスの最初の要素。" #: xml/gcut-assertions.xml:562(simpara) xml/gcut-assertions.xml:578(simpara) msgid "remaining elements in path. NULL terminated." msgstr "パスの残りの要素。NULL終端。" #: xml/gcut-assertions.xml:566(title) msgid "cut_assert_remove_path ()" msgstr "" #: xml/gcut-assertions.xml:568(programlisting) #, no-wrap msgid "" "void cut_assert_remove_path (const gchar *path,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:570(para) msgid "" "cut_assert_remove_path has been deprecated since version " "1.0.3 and should not be used in newly-written code. Use gcut_assert_remove_path() " "instead." msgstr "" "cut_assert_remove_pathはバージョン1.0.3から非推奨になりま" "した。新しく書くコードでは使わないでください。代わりにgcut_assert_remove_path()を" "使ってください。" #: xml/gcut-assertions.xml:580(para) xml/cut-test-utils.xml:305(para) #: xml/cut-test-utils.xml:329(para) xml/cut-test-utils.xml:375(para) #: xml/cut-test-utils.xml:419(para) xml/cut-assertions.xml:2017(para) #: xml/cut-assertions.xml:2062(para) xml/cut-assertions.xml:2169(para) #: xml/cut-assertions.xml:2258(para) msgid "Since 1.0.2" msgstr "1.0.2から" #: xml/gcut-assertions.xml:582(title) msgid "gcut_assert_equal_time_val ()" msgstr "" #: xml/gcut-assertions.xml:584(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_time_val (GTimeVal expected,\n" " GTimeVal actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:601(title) msgid "gcut_assert_equal_enum ()" msgstr "" #: xml/gcut-assertions.xml:603(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_enum (GType enum_type,\n" " gint expected,\n" " gint actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:612(programlisting) #, no-wrap msgid "" "\n" "gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE,\n" " GTK_DIR_LEFT, GTK_DIR_LEFT); -> Pass\n" "gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE,\n" " GTK_DIR_DOWN, GTK_DIR_LEFT); -> Fail\n" msgstr "" "\n" "gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE,\n" " GTK_DIR_LEFT, GTK_DIR_LEFT); -> パス\n" "gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE,\n" " GTK_DIR_DOWN, GTK_DIR_LEFT); -> 失敗\n" #: xml/gcut-assertions.xml:633(title) msgid "gcut_assert_equal_flags ()" msgstr "" #: xml/gcut-assertions.xml:635(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_flags (GType flags_type,\n" " guint expected,\n" " guint actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:644(programlisting) #, no-wrap msgid "" "\n" "gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS,\n" " GTK_DIALOG_DESTROY_MODAL |\n" " GTK_DIALOG_DESTROY_WITH_PARENT,\n" " GTK_DIALOG_DESTROY_MODAL |\n" " GTK_DIALOG_DESTROY_WITH_PARENT); -> Pass\n" "gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS,\n" " GTK_DIALOG_DESTROY_MODAL |\n" " GTK_DIALOG_DESTROY_WITH_PARENT,\n" " GTK_DIALOG_DESTROY_MODAL); -> Fail\n" msgstr "" "\n" "gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS,\n" " GTK_DIALOG_DESTROY_MODAL |\n" " GTK_DIALOG_DESTROY_WITH_PARENT,\n" " GTK_DIALOG_DESTROY_MODAL |\n" " GTK_DIALOG_DESTROY_WITH_PARENT); -> パス\n" "gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS,\n" " GTK_DIALOG_DESTROY_MODAL |\n" " GTK_DIALOG_DESTROY_WITH_PARENT,\n" " GTK_DIALOG_DESTROY_MODAL); -> 失敗\n" #: xml/gcut-assertions.xml:670(title) msgid "gcut_assert_equal_object ()" msgstr "" #: xml/gcut-assertions.xml:672(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_object (GObject *expected,\n" " GObject *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:675(para) msgid "" "Passes if expected == actual. " "See gcut_assert_equal_object_custom() when you " "need to customize equality check." msgstr "" "expected == actualのときパスし" "ます。等価条件を変更する必要がある場合はgcut_assert_equal_object_custom()" "見てください。" #: xml/gcut-assertions.xml:682(programlisting) #, no-wrap msgid "" "\n" "gcut_assert_equal_object(object, object); -> Pass\n" "gcut_assert_equal_object(object1, object2); -> Fail\n" "gcut_assert_equal_object(NULL, NULL); -> Pass\n" "gcut_assert_equal_object(object1, NULL); -> Fail\n" msgstr "" "\n" "gcut_assert_equal_object(object, object); -> パス\n" "gcut_assert_equal_object(object1, object2); -> 失敗\n" "gcut_assert_equal_object(NULL, NULL); -> パス\n" "gcut_assert_equal_object(object1, NULL); -> 失敗\n" #: xml/gcut-assertions.xml:700(title) msgid "gcut_assert_equal_object_custom ()" msgstr "" #: xml/gcut-assertions.xml:702(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_object_custom (GObject *expected,\n" " GObject *actual,\n" " GEqualFunc equal_function,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:711(programlisting) #, no-wrap msgid "" "\n" "static gboolean\n" "equal_name (gconstpointer data1, gconstpointer data2)\n" "{\n" " return g_str_equal(my_object_get_name(MY_OBJECT(data1)),\n" " my_object_get_name(MY_OBJECT(data2)));\n" "}\n" "\n" "gcut_assert_equal_object_custom(object, object, equal_name); -> Pass\n" "gcut_assert_equal_object_custom(same_name_object1,\n" " same_name_object2,\n" " equal_name); -> Pass\n" "gcut_assert_equal_object_custom(different_name_object1,\n" " different_name_object2,\n" " equal_name); -> Fail\n" msgstr "" "\n" "static gboolean\n" "equal_name (gconstpointer data1, gconstpointer data2)\n" "{\n" " return g_str_equal(my_object_get_name(MY_OBJECT(data1)),\n" " my_object_get_name(MY_OBJECT(data2)));\n" "}\n" "\n" "gcut_assert_equal_object_custom(object, object, equal_name); -> パス\n" "gcut_assert_equal_object_custom(same_name_object1,\n" " same_name_object2,\n" " equal_name); -> パス\n" "gcut_assert_equal_object_custom(different_name_object1,\n" " different_name_object2,\n" " equal_name); -> 失敗\n" #: xml/gcut-assertions.xml:735(simpara) msgid "a function that compare two objects." msgstr "ふたつのオブジェクトを比較する関数。" #: xml/gcut-assertions.xml:742(title) msgid "gcut_assert_equal_int64 ()" msgstr "" #: xml/gcut-assertions.xml:744(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_int64 (gint64 expected,\n" " gint64 actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:761(title) msgid "gcut_assert_not_equal_int64 ()" msgstr "" #: xml/gcut-assertions.xml:763(programlisting) #, no-wrap msgid "" "void gcut_assert_not_equal_int64 (gint64 expected,\n" " gint64 actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:766(para) xml/gcut-assertions.xml:804(para) #: xml/gcut-assertions.xml:842(para) xml/cut-assertions.xml:506(para) #: xml/cut-assertions.xml:544(para) xml/cut-assertions.xml:586(para) #: xml/cut-assertions.xml:628(para) xml/cut-assertions.xml:670(para) #: xml/cut-assertions.xml:712(para) xml/cut-assertions.xml:754(para) #: xml/cut-assertions.xml:796(para) xml/cut-assertions.xml:838(para) #: xml/cut-assertions.xml:880(para) xml/cut-assertions.xml:922(para) #: xml/cut-assertions.xml:964(para) xml/cut-assertions.xml:1002(para) #: xml/cut-assertions.xml:1044(para) xml/cut-assertions.xml:1086(para) #: xml/cut-assertions.xml:1128(para) xml/cut-assertions.xml:1170(para) #: xml/cut-assertions.xml:1212(para) xml/cut-assertions.xml:1254(para) #: xml/cut-assertions.xml:1296(para) xml/cut-assertions.xml:1338(para) #: xml/cut-assertions.xml:1380(para) xml/cut-assertions.xml:1422(para) #: xml/cut-assertions.xml:1509(para) msgid "" "Passes if expected != actual." msgstr "" "expected != actualが成り立つと" "きパスします。" #: xml/gcut-assertions.xml:778(para) xml/gcut-assertions.xml:816(para) #: xml/cut-test-utils.xml:288(para) xml/cut-helper.xml:577(para) #: xml/cut-assertions.xml:2206(para) xml/cut-assertions.xml:2223(para) msgid "Since 1.1.4" msgstr "1.1.4から" #: xml/gcut-assertions.xml:780(title) msgid "gcut_assert_equal_uint64 ()" msgstr "" #: xml/gcut-assertions.xml:782(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_uint64 (guint64 expected,\n" " guint64 actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:799(title) msgid "gcut_assert_not_equal_uint64 ()" msgstr "" #: xml/gcut-assertions.xml:801(programlisting) #, no-wrap msgid "" "void gcut_assert_not_equal_uint64 (guint64 expected,\n" " guint64 actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:818(title) msgid "gcut_assert_equal_pid ()" msgstr "" #: xml/gcut-assertions.xml:820(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_pid (GPid expected,\n" " GPid actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:837(title) msgid "gcut_assert_not_equal_pid ()" msgstr "" #: xml/gcut-assertions.xml:839(programlisting) #, no-wrap msgid "" "void gcut_assert_not_equal_pid (GPid expected,\n" " GPid actual,\n" " ...);" msgstr "" #: xml/gcut-assertions.xml:856(title) msgid "gcut_assert_equal_string ()" msgstr "" #: xml/gcut-assertions.xml:858(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_string (GString *expected,\n" " GString *actual,\n" " ...);" msgstr "" #: xml/gcut-assertions-helper.xml:7(refentrytitle) #: xml/gcut-assertions-helper.xml:14(refname) xml/api-index-full.xml:9(link) #: xml/api-index-full.xml:11(link) xml/api-index-full.xml:13(link) #: xml/api-index-full.xml:15(link) xml/api-index-full.xml:17(link) #: xml/api-index-full.xml:19(link) xml/api-index-full.xml:22(link) #: xml/api-index-full.xml:24(link) xml/api-index-full.xml:25(link) #: xml/api-index-full.xml:27(link) xml/api-index-full.xml:30(link) #: xml/api-index-full.xml:32(link) xml/api-index-full.xml:34(link) #: xml/api-index-full.xml:37(link) xml/api-index-full.xml:39(link) #: xml/api-index-full.xml:41(link) xml/api-index-full.xml:43(link) #: xml/api-index-full.xml:45(link) xml/api-index-full.xml:47(link) #: xml/api-index-full.xml:49(link) xml/api-index-full.xml:51(link) #: xml/api-index-full.xml:53(link) xml/api-index-full.xml:55(link) #: xml/api-index-full.xml:57(link) xml/api-index-full.xml:59(link) msgid "gcut-assertions-helper" msgstr "" #: xml/gcut-assertions-helper.xml:21(link) #: xml/gcut-assertions-helper.xml:152(primary) xml/api-index-full.xml:45(link) msgid "gcut_assert_equal_type_helper" msgstr "" #: xml/gcut-assertions-helper.xml:25(link) #: xml/gcut-assertions-helper.xml:174(primary) xml/api-index-full.xml:49(link) msgid "gcut_assert_equal_value_helper" msgstr "" #: xml/gcut-assertions-helper.xml:29(link) #: xml/gcut-assertions-helper.xml:196(primary) xml/api-index-full.xml:25(link) msgid "gcut_assert_equal_list_helper" msgstr "" #: xml/gcut-assertions-helper.xml:29(parameter) #: xml/gcut-assertions-helper.xml:37(parameter) #: xml/gcut-assertions-helper.xml:41(parameter) #: xml/gcut-assertions-helper.xml:46(parameter) #: xml/gcut-assertions-helper.xml:51(parameter) #: xml/gcut-assertions-helper.xml:57(parameter) #: xml/gcut-assertions-helper.xml:63(parameter) msgid "const *expected" msgstr "" #: xml/gcut-assertions-helper.xml:30(parameter) #: xml/gcut-assertions-helper.xml:38(parameter) #: xml/gcut-assertions-helper.xml:42(parameter) #: xml/gcut-assertions-helper.xml:47(parameter) #: xml/gcut-assertions-helper.xml:52(parameter) #: xml/gcut-assertions-helper.xml:58(parameter) #: xml/gcut-assertions-helper.xml:64(parameter) msgid "const *actual" msgstr "" #: xml/gcut-assertions-helper.xml:36(parameter) #: xml/gcut-assertions-helper.xml:76(parameter) #: xml/gcut-assertions-helper.xml:111(parameter) msgid "" "const " "*expression_equal_function" msgstr "" #: xml/gcut-assertions-helper.xml:37(link) #: xml/gcut-assertions-helper.xml:234(primary) xml/api-index-full.xml:27(link) msgid "gcut_assert_equal_list_int_helper" msgstr "" #: xml/gcut-assertions-helper.xml:41(link) #: xml/gcut-assertions-helper.xml:256(primary) xml/api-index-full.xml:34(link) msgid "gcut_assert_equal_list_uint_helper" msgstr "" #: xml/gcut-assertions-helper.xml:45(link) #: xml/gcut-assertions-helper.xml:278(primary) xml/api-index-full.xml:32(link) msgid "gcut_assert_equal_list_string_helper" msgstr "" #: xml/gcut-assertions-helper.xml:50(link) #: xml/gcut-assertions-helper.xml:301(primary) xml/api-index-full.xml:22(link) msgid "gcut_assert_equal_list_enum_helper" msgstr "" #: xml/gcut-assertions-helper.xml:53(parameter) #: xml/gcut-assertions-helper.xml:59(parameter) msgid "const *expression_type" msgstr "" #: xml/gcut-assertions-helper.xml:56(link) #: xml/gcut-assertions-helper.xml:331(primary) xml/api-index-full.xml:24(link) msgid "gcut_assert_equal_list_flags_helper" msgstr "" #: xml/gcut-assertions-helper.xml:62(link) #: xml/gcut-assertions-helper.xml:361(primary) xml/api-index-full.xml:30(link) msgid "gcut_assert_equal_list_object_helper" msgstr "" #: xml/gcut-assertions-helper.xml:68(link) #: xml/gcut-assertions-helper.xml:388(primary) xml/api-index-full.xml:15(link) msgid "gcut_assert_equal_hash_table_helper" msgstr "" #: xml/gcut-assertions-helper.xml:77(link) #: xml/gcut-assertions-helper.xml:430(primary) xml/api-index-full.xml:17(link) msgid "gcut_assert_equal_hash_table_string_string_helper" msgstr "" #: xml/gcut-assertions-helper.xml:82(link) #: xml/gcut-assertions-helper.xml:453(primary) xml/api-index-full.xml:51(link) msgid "gcut_assert_error_helper" msgstr "" #: xml/gcut-assertions-helper.xml:83(parameter) msgid "const *expression_error" msgstr "" #: xml/gcut-assertions-helper.xml:84(link) #: xml/gcut-assertions-helper.xml:467(primary) xml/api-index-full.xml:11(link) msgid "gcut_assert_equal_error_helper" msgstr "" #: xml/gcut-assertions-helper.xml:84(parameter) msgid "const *expected" msgstr "" #: xml/gcut-assertions-helper.xml:85(parameter) msgid "const *actual" msgstr "" #: xml/gcut-assertions-helper.xml:88(link) #: xml/gcut-assertions-helper.xml:489(primary) xml/api-index-full.xml:59(link) msgid "gcut_assert_remove_path_helper" msgstr "" #: xml/gcut-assertions-helper.xml:90(link) #: xml/gcut-assertions-helper.xml:503(primary) xml/api-index-full.xml:43(link) msgid "gcut_assert_equal_time_val_helper" msgstr "" #: xml/gcut-assertions-helper.xml:90(parameter) msgid " *expected" msgstr "" #: xml/gcut-assertions-helper.xml:91(parameter) msgid " *actual" msgstr "" #: xml/gcut-assertions-helper.xml:93(parameter) msgid "const *actual_expected" msgstr "" #: xml/gcut-assertions-helper.xml:94(link) #: xml/gcut-assertions-helper.xml:525(primary) xml/api-index-full.xml:9(link) msgid "gcut_assert_equal_enum_helper" msgstr "" #: xml/gcut-assertions-helper.xml:97(parameter) msgid "" "const *expression_enum_type" msgstr "" #: xml/gcut-assertions-helper.xml:100(link) #: xml/gcut-assertions-helper.xml:555(primary) xml/api-index-full.xml:13(link) msgid "gcut_assert_equal_flags_helper" msgstr "" #: xml/gcut-assertions-helper.xml:103(parameter) msgid "" "const *expression_flags_type" msgstr "" #: xml/gcut-assertions-helper.xml:106(link) #: xml/gcut-assertions-helper.xml:585(primary) xml/api-index-full.xml:37(link) msgid "gcut_assert_equal_object_helper" msgstr "" #: xml/gcut-assertions-helper.xml:112(link) #: xml/gcut-assertions-helper.xml:615(primary) xml/api-index-full.xml:19(link) msgid "gcut_assert_equal_int64_helper" msgstr "" #: xml/gcut-assertions-helper.xml:114(type) #: xml/gcut-assertions-helper.xml:115(type) #: xml/gcut-assertions-helper.xml:118(type) #: xml/gcut-assertions-helper.xml:119(type) #: xml/gcut-assertions-helper.xml:122(type) #: xml/gcut-assertions-helper.xml:123(type) #: xml/gcut-assertions-helper.xml:126(type) #: xml/gcut-assertions-helper.xml:127(type) #: xml/gcut-assertions-helper.xml:130(type) #: xml/gcut-assertions-helper.xml:131(type) #: xml/gcut-assertions-helper.xml:134(type) #: xml/gcut-assertions-helper.xml:135(type) xml/cutter.xml:35(type) #: xml/cutter.xml:37(type) xml/cutter.xml:40(type) #: xml/cut-test-utils.xml:24(returnvalue) xml/cut-test-utils.xml:24(type) #: xml/cut-test-utils.xml:25(returnvalue) xml/cut-test-utils.xml:25(type) #: xml/cut-test-utils.xml:26(returnvalue) xml/cut-test-utils.xml:26(type) #: xml/cut-test-utils.xml:30(returnvalue) xml/cut-test-utils.xml:30(type) #: xml/cut-test-utils.xml:32(returnvalue) xml/cut-test-utils.xml:32(type) #: xml/cut-test-utils.xml:33(returnvalue) xml/cut-test-utils.xml:33(type) #: xml/cut-test-utils.xml:34(type) xml/cut-test-utils.xml:35(returnvalue) #: xml/cut-test-utils.xml:35(type) xml/cut-test-utils.xml:36(type) #: xml/cut-test-utils.xml:37(type) xml/cut-test-utils.xml:41(returnvalue) #: xml/cut-test-utils.xml:41(type) xml/cut-test-utils.xml:42(type) #: xml/cut-test-utils.xml:44(returnvalue) xml/cut-test-utils.xml:44(type) #: xml/cut-test-utils.xml:46(returnvalue) xml/cut-test-utils.xml:46(type) #: xml/cut-test-utils.xml:48(returnvalue) xml/cut-test-utils.xml:48(type) #: xml/cut-test-utils.xml:50(returnvalue) xml/cut-test-utils.xml:51(type) #: xml/cut-test-utils.xml:53(type) xml/cut-test-utils.xml:55(returnvalue) #: xml/cut-test-utils.xml:55(type) xml/cut-test-utils.xml:57(returnvalue) #: xml/cut-test-utils.xml:57(type) xml/cut-test-utils.xml:58(type) #: xml/cut-multi-process.xml:24(type) #: xml/cut-multi-process.xml:30(returnvalue) #: xml/cut-multi-process.xml:32(type) #: xml/cut-multi-process.xml:33(returnvalue) #: xml/cut-multi-process.xml:37(type) #: xml/cut-multi-process.xml:44(returnvalue) #: xml/cut-multi-process.xml:46(type) #: xml/cut-multi-process.xml:47(returnvalue) #: xml/cut-multi-process.xml:51(type) #: xml/cut-multi-process.xml:52(returnvalue) #: xml/cut-multi-process.xml:56(type) #: xml/cut-multi-process.xml:57(returnvalue) #: xml/cut-multi-process.xml:61(type) xml/cut-helper.xml:23(type) #: xml/cut-helper.xml:25(type) xml/cut-helper.xml:26(type) #: xml/cut-helper.xml:28(type) xml/cut-helper.xml:33(returnvalue) #: xml/cut-helper.xml:33(type) xml/cut-helper.xml:34(type) #: xml/cut-helper.xml:35(type) xml/cut-helper.xml:38(returnvalue) #: xml/cut-helper.xml:38(type) xml/cut-helper.xml:39(type) #: xml/cut-helper.xml:40(type) xml/cut-helper.xml:47(returnvalue) #: xml/cut-helper.xml:48(returnvalue) xml/cut-assertions.xml:35(type) #: xml/cut-assertions.xml:191(type) xml/cut-assertions.xml:192(type) #: xml/cut-assertions.xml:194(type) xml/cut-assertions.xml:195(type) #: xml/cut-assertions.xml:197(type) xml/cut-assertions.xml:198(type) #: xml/cut-assertions.xml:200(type) xml/cut-assertions.xml:201(type) #: xml/cut-assertions.xml:203(type) xml/cut-assertions.xml:204(type) #: xml/cut-assertions.xml:207(type) xml/cut-assertions.xml:208(type) #: xml/cut-assertions.xml:221(type) xml/cut-assertions.xml:222(type) #: xml/cut-assertions.xml:225(type) xml/cut-assertions.xml:226(type) #: xml/cut-assertions.xml:253(type) xml/cut-assertions.xml:255(type) #: xml/cut-assertions.xml:257(type) xml/cut-assertions.xml:259(type) #: xml/cut-assertions.xml:261(type) xml/cut-assertions.xml:263(type) #: xml/cut-assertions.xml:264(type) xml/cut-assertions.xml:266(type) #: xml/cut-assertions.xml:267(type) xml/cut-assertions.xml:273(type) #: xml/cut-assertions.xml:285(type) xml/cut-assertions.xml:288(type) #: xml/cut-assertions.xml:290(type) xml/cut-assertions.xml:292(type) #: xml/cut-assertions.xml:294(type) xml/cut-assertions.xml:296(type) msgid "char" msgstr "" #: xml/gcut-assertions-helper.xml:114(parameter) #: xml/gcut-assertions-helper.xml:118(parameter) #: xml/gcut-assertions-helper.xml:122(parameter) #: xml/gcut-assertions-helper.xml:126(parameter) #: xml/gcut-assertions-helper.xml:130(parameter) #: xml/gcut-assertions-helper.xml:134(parameter) msgid "" "const *expression_expected" msgstr "" #: xml/gcut-assertions-helper.xml:115(parameter) #: xml/gcut-assertions-helper.xml:119(parameter) #: xml/gcut-assertions-helper.xml:123(parameter) #: xml/gcut-assertions-helper.xml:127(parameter) #: xml/gcut-assertions-helper.xml:131(parameter) #: xml/gcut-assertions-helper.xml:135(parameter) msgid "const *expression_actual" msgstr "" #: xml/gcut-assertions-helper.xml:116(link) #: xml/gcut-assertions-helper.xml:637(primary) xml/api-index-full.xml:53(link) msgid "gcut_assert_not_equal_int64_helper" msgstr "" #: xml/gcut-assertions-helper.xml:120(link) #: xml/gcut-assertions-helper.xml:659(primary) xml/api-index-full.xml:47(link) msgid "gcut_assert_equal_uint64_helper" msgstr "" #: xml/gcut-assertions-helper.xml:124(link) #: xml/gcut-assertions-helper.xml:681(primary) xml/api-index-full.xml:57(link) msgid "gcut_assert_not_equal_uint64_helper" msgstr "" #: xml/gcut-assertions-helper.xml:128(link) #: xml/gcut-assertions-helper.xml:703(primary) xml/api-index-full.xml:39(link) msgid "gcut_assert_equal_pid_helper" msgstr "" #: xml/gcut-assertions-helper.xml:132(link) #: xml/gcut-assertions-helper.xml:725(primary) xml/api-index-full.xml:55(link) msgid "gcut_assert_not_equal_pid_helper" msgstr "" #: xml/gcut-assertions-helper.xml:136(link) #: xml/gcut-assertions-helper.xml:747(primary) xml/api-index-full.xml:41(link) msgid "gcut_assert_equal_string_helper" msgstr "" #: xml/gcut-assertions-helper.xml:136(parameter) msgid "const *expected" msgstr "" #: xml/gcut-assertions-helper.xml:137(parameter) msgid "const *actual" msgstr "" #: xml/gcut-assertions-helper.xml:21(synopsis) #, no-wrap msgid "" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" msgstr "" #: xml/gcut-assertions-helper.xml:151(title) msgid "gcut_assert_equal_type_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:153(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_type_helper (GType expected,\n" " GType actual,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:173(title) msgid "gcut_assert_equal_value_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:175(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_value_helper (GValue *expected,\n" " GValue *actual,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:195(title) msgid "gcut_assert_equal_list_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:197(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_helper (const GList *expected,\n" " const GList *actual,\n" " GEqualFunc equal_function,\n" " GCutInspectFunction inspect_function,\n" " gpointer inspect_user_data,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual,\n" " const gchar *expression_equal_function);" msgstr "" #: xml/gcut-assertions-helper.xml:228(term) #: xml/gcut-assertions-helper.xml:424(term) #: xml/gcut-assertions-helper.xml:609(term) msgid "expression_equal_function :" msgstr "" #: xml/gcut-assertions-helper.xml:233(title) msgid "gcut_assert_equal_list_int_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:235(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_int_helper (const GList *expected,\n" " const GList *actual,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:255(title) msgid "gcut_assert_equal_list_uint_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:257(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_uint_helper (const GList *expected,\n" " const GList *actual,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:277(title) msgid "gcut_assert_equal_list_string_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:279(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_string_helper\n" " (const GList *expected,\n" " const GList *actual,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:300(title) msgid "gcut_assert_equal_list_enum_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:302(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_enum_helper (GType type,\n" " const GList *expected,\n" " const GList *actual,\n" " const gchar *expression_type,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:319(term) #: xml/gcut-assertions-helper.xml:349(term) msgid "expression_type :" msgstr "" #: xml/gcut-assertions-helper.xml:330(title) msgid "gcut_assert_equal_list_flags_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:332(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_flags_helper (GType type,\n" " const GList *expected,\n" " const GList *actual,\n" " const gchar *expression_type,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:360(title) msgid "gcut_assert_equal_list_object_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:362(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_list_object_helper\n" " (const GList *expected,\n" " const GList *actual,\n" " GEqualFunc equal_function,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:387(title) msgid "gcut_assert_equal_hash_table_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:389(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_hash_table_helper (GHashTable *expected,\n" " GHashTable *actual,\n" " GEqualFunc equal_function,\n" " GCutInspectFunction key_inspect_function,\n" " GCutInspectFunction value_inspect_function,\n" " gpointer inspect_user_data,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual,\n" " const gchar *expression_equal_function);" msgstr "" #: xml/gcut-assertions-helper.xml:429(title) msgid "gcut_assert_equal_hash_table_string_string_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:431(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_hash_table_string_string_helper\n" " (GHashTable *expected,\n" " GHashTable *actual,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:452(title) msgid "gcut_assert_error_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:454(programlisting) #, no-wrap msgid "" "void gcut_assert_error_helper (GError *error,\n" " const gchar *expression_error);" msgstr "" #: xml/gcut-assertions-helper.xml:461(term) msgid "expression_error :" msgstr "" #: xml/gcut-assertions-helper.xml:466(title) msgid "gcut_assert_equal_error_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:468(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_error_helper (const GError *expected,\n" " const GError *actual,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:488(title) msgid "gcut_assert_remove_path_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:490(programlisting) #, no-wrap msgid "" "void gcut_assert_remove_path_helper (const gchar *path,\n" " ...);" msgstr "" #: xml/gcut-assertions-helper.xml:502(title) msgid "gcut_assert_equal_time_val_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:504(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_time_val_helper (GTimeVal *expected,\n" " GTimeVal *actual,\n" " const gchar *expression_expected,\n" " const gchar *actual_expected);" msgstr "" #: xml/gcut-assertions-helper.xml:519(term) msgid "actual_expected :" msgstr "" #: xml/gcut-assertions-helper.xml:524(title) msgid "gcut_assert_equal_enum_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:526(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_enum_helper (GType enum_type,\n" " gint expected,\n" " gint actual,\n" " const gchar *expression_enum_type,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:543(term) msgid "expression_enum_type :" msgstr "" #: xml/gcut-assertions-helper.xml:554(title) msgid "gcut_assert_equal_flags_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:556(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_flags_helper (GType flags_type,\n" " gint expected,\n" " gint actual,\n" " const gchar *expression_flags_type,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:573(term) msgid "expression_flags_type :" msgstr "" #: xml/gcut-assertions-helper.xml:584(title) msgid "gcut_assert_equal_object_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:586(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_object_helper (GObject *expected,\n" " GObject *actual,\n" " GEqualFunc equal_function,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual,\n" " const gchar *expression_equal_function);" msgstr "" #: xml/gcut-assertions-helper.xml:614(title) msgid "gcut_assert_equal_int64_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:616(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_int64_helper (gint64 expected,\n" " gint64 actual,\n" " const char *expression_expected,\n" " const char *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:636(title) msgid "gcut_assert_not_equal_int64_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:638(programlisting) #, no-wrap msgid "" "void gcut_assert_not_equal_int64_helper (gint64 expected,\n" " gint64 actual,\n" " const char *expression_expected,\n" " const char *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:658(title) msgid "gcut_assert_equal_uint64_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:660(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_uint64_helper (guint64 expected,\n" " guint64 actual,\n" " const char *expression_expected,\n" " const char *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:680(title) msgid "gcut_assert_not_equal_uint64_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:682(programlisting) #, no-wrap msgid "" "void gcut_assert_not_equal_uint64_helper (guint64 expected,\n" " guint64 actual,\n" " const char *expression_expected,\n" " const char *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:702(title) msgid "gcut_assert_equal_pid_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:704(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_pid_helper (GPid expected,\n" " GPid actual,\n" " const char *expression_expected,\n" " const char *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:724(title) msgid "gcut_assert_not_equal_pid_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:726(programlisting) #, no-wrap msgid "" "void gcut_assert_not_equal_pid_helper (GPid expected,\n" " GPid actual,\n" " const char *expression_expected,\n" " const char *expression_actual);" msgstr "" #: xml/gcut-assertions-helper.xml:746(title) msgid "gcut_assert_equal_string_helper ()" msgstr "" #: xml/gcut-assertions-helper.xml:748(programlisting) #, no-wrap msgid "" "void gcut_assert_equal_string_helper (const GString *expected,\n" " const GString *actual,\n" " const gchar *expression_expected,\n" " const gchar *expression_actual);" msgstr "" #: xml/cutter.xml:7(refentrytitle) xml/cutter.xml:14(refname) #: xml/api-index-full.xml:81(link) xml/api-index-full.xml:82(link) #: xml/api-index-full.xml:216(link) xml/api-index-full.xml:222(link) #: xml/api-index-full.xml:233(link) xml/api-index-full.xml:235(link) #: xml/api-index-full.xml:245(link) xml/api-index-full.xml:247(link) #: xml/api-index-full.xml:248(link) xml/api-index-full.xml:251(link) #: xml/api-index-full.xml:252(link) xml/api-index-full.xml:253(link) #: xml/api-index-full.xml:254(link) xml/api-index-full.xml:306(link) #: xml/api-index-full.xml:536(link) xml/api-index-full.xml:592(link) #: xml/api-index-deprecated.xml:9(link) xml/api-index-deprecated.xml:22(link) #: xml/api-index-deprecated.xml:24(link) xml/api-index-deprecated.xml:25(link) #: xml/api-index-deprecated.xml:67(link) xml/api-index-deprecated.xml:71(link) #: xml/api-index-1.1.2.xml:7(link) xml/api-index-1.1.0.xml:48(link) #: xml/api-index-1.0.6.xml:14(link) xml/api-index-1.0.6.xml:19(link) #: xml/api-index-1.0.6.xml:20(link) xml/api-index-1.0.6.xml:21(link) #: xml/api-index-1.0.6.xml:22(link) xml/api-index-1.0.6.xml:23(link) #: xml/api-index-1.0.6.xml:25(link) xml/api-index-1.0.4.xml:13(link) #: xml/api-index-1.0.4.xml:14(link) xml/api-index-1.0.4.xml:15(link) #: xml/api-index-1.0.3.xml:16(link) msgid "Cutter" msgstr "" #: xml/cutter.xml:15(refpurpose) msgid "A Unit Testing Framework for C and C++." msgstr "C言語・C++言語用単体テストフレームワーク" #: xml/cutter.xml:21(link) xml/cutter.xml:152(primary) #: xml/api-index-full.xml:536(link) xml/api-index-deprecated.xml:67(link) msgid "setup" msgstr "" #: xml/cutter.xml:22(link) xml/cutter.xml:162(primary) #: xml/api-index-full.xml:245(link) xml/api-index-1.0.6.xml:19(link) msgid "cut_setup" msgstr "" #: xml/cutter.xml:23(link) xml/cutter.xml:171(primary) #: xml/api-index-full.xml:592(link) xml/api-index-deprecated.xml:71(link) msgid "teardown" msgstr "" #: xml/cutter.xml:24(link) xml/cutter.xml:182(primary) #: xml/api-index-full.xml:306(link) xml/api-index-1.0.6.xml:25(link) msgid "cut_teardown" msgstr "" #: xml/cutter.xml:25(link) xml/cutter.xml:192(primary) #: xml/api-index-full.xml:254(link) xml/api-index-1.0.6.xml:23(link) msgid "cut_startup" msgstr "" #: xml/cutter.xml:26(link) xml/cutter.xml:201(primary) #: xml/api-index-full.xml:253(link) xml/api-index-1.0.6.xml:22(link) msgid "cut_shutdown" msgstr "" #: xml/cutter.xml:27(link) xml/cutter.xml:210(primary) #: xml/api-index-full.xml:81(link) xml/api-index-1.0.3.xml:16(link) msgid "cut_add_data" msgstr "" #: xml/cutter.xml:29(link) xml/cutter.xml:296(primary) #: xml/api-index-full.xml:82(link) xml/api-index-deprecated.xml:9(link) msgid "cut_add_data_backward_compatibility" msgstr "" #: xml/cutter.xml:31(link) xml/cutter.xml:310(primary) #: xml/api-index-full.xml:247(link) xml/api-index-1.0.4.xml:14(link) msgid "cut_set_attributes" msgstr "" #: xml/cutter.xml:33(link) xml/cutter.xml:349(title) #: xml/cutter.xml:350(primary) xml/api-index-full.xml:222(link) #: xml/api-index-1.0.4.xml:13(link) msgid "cut_get_current_test_context" msgstr "" #: xml/cutter.xml:34(link) xml/cutter.xml:391(primary) #: xml/api-index-full.xml:248(link) xml/api-index-1.0.4.xml:15(link) msgid "cut_set_current_test_context" msgstr "" #: xml/cutter.xml:35(link) xml/cutter.xml:404(primary) #: xml/api-index-full.xml:251(link) xml/api-index-deprecated.xml:24(link) #: xml/api-index-1.0.6.xml:20(link) msgid "cut_set_message" msgstr "" #: xml/cutter.xml:35(parameter) xml/cutter.xml:37(parameter) #: xml/cutter.xml:40(parameter) xml/cut-test-utils.xml:30(parameter) #: xml/cut-assertions.xml:285(parameter) xml/cut-assertions.xml:288(parameter) #: xml/cut-assertions.xml:290(parameter) xml/cut-assertions.xml:292(parameter) #: xml/cut-assertions.xml:294(parameter) xml/cut-assertions.xml:296(parameter) msgid "const *format" msgstr "" #: xml/cutter.xml:37(link) xml/cutter.xml:420(primary) #: xml/api-index-full.xml:252(link) xml/api-index-deprecated.xml:25(link) #: xml/api-index-1.0.6.xml:21(link) msgid "cut_set_message_va_list" msgstr "" #: xml/cutter.xml:39(link) xml/cutter.xml:436(primary) #: xml/api-index-full.xml:233(link) xml/api-index-deprecated.xml:22(link) #: xml/api-index-1.0.6.xml:14(link) msgid "cut_keep_message" msgstr "" #: xml/cutter.xml:40(link) xml/cutter.xml:445(primary) #: xml/api-index-full.xml:235(link) xml/api-index-1.1.0.xml:48(link) msgid "cut_message" msgstr "" #: xml/cutter.xml:42(link) xml/cutter.xml:466(title) #: xml/cutter.xml:467(primary) xml/api-index-full.xml:216(link) #: xml/api-index-1.1.2.xml:7(link) msgid "CUT_EXPORT" msgstr "" #: xml/cutter.xml:21(synopsis) #, no-wrap msgid "" " ();\n" " ();\n" " ();\n" " ();\n" " ();\n" " ();\n" "#define (first_data_name,\n" " ...)\n" "#define (context,\n" " ...)\n" "#define (first_attribute_name,\n" " ...)\n" "#define \n" "#define (test_context)\n" " (,\n" " );\n" " (,\n" " );\n" " ();\n" " (,\n" " );\n" "#define \n" msgstr "" #: xml/cutter.xml:58(programlisting) #, no-wrap msgid "" "\n" "#include <cutter.h>\n" "#include \"my-stack.h\"\n" "\n" "void\n" "test_my_stack (void)\n" "{\n" " MyStack *stack = my_stack_new();\n" "\n" " cut_assert_not_null(stack);\n" " cut_assert(my_stack_is_empty(stack));\n" " cut_assert_equal_int(0, my_stack_get_size(stack));\n" "\n" " my_stack_push(stack, 10);\n" " cut_assert(!my_stack_is_empty(stack));\n" " cut_assert_equal_int(1, my_stack_get_size(stack));\n" "\n" " my_stack_push(stack, 20);\n" " cut_assert_equal_int(2, my_stack_get_size(stack));\n" "\n" " cut_assert_equal(20, my_stack_pop(stack));\n" " cut_assert(!my_stack_is_empty(stack));\n" " cut_assert_equal_int(1, my_stack_get_size(stack));\n" "\n" " cut_assert_equal(10, my_stack_pop(stack));\n" " cut_assert(my_stack_is_empty(stack));\n" " cut_assert_equal_int(0, my_stack_get_size(stack));\n" "}\n" msgstr "" #: xml/cutter.xml:52(para) msgid "" "Easy to use. Cutter doesn't introduce any magic macros like " "CUTTER_DEFINE_TEST_START and CUTTER_DEFINE_TEST_END into your test program. " "You can write your test program like normal program. You only use cut_assert_XXX() to " "check that your program works as you expect. " msgstr "" "簡単に使えます。Cutterではテストプログラム中にCUTTER_DEFINE_TEST_STARTや" "CUTTER_DEFINE_TEST_ENDなどといった不思議なマクロを使う必要がありません。通常" "のプログラムと同じようにテストプログラムを書くことができます。ただし、プログ" "ラムが期待した通り動作していることを検証するためにcut_assert_XXX()を使う必要があります。" "" #: xml/cutter.xml:92(programlisting) #, no-wrap msgid "" "\n" "...........................................................\n" "\n" "Finished in 0.213021 seconds\n" "\n" "59 test(s), 246 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 notification(s)\n" msgstr "" #: xml/cutter.xml:88(para) msgid "" "Simple but useful output. Cutter works quietly if tests are running without " "any problems by default. The following is an output of self test: " " Cutter just outputs \".\" for a passed test and a summary " "at the end. Cutter doesn't output each test name, how many assertions are " "used for a test and so because we don't need the information on success." msgstr "" "簡素ですが有用な情報を出力をします。Cutterはデフォルトではテストが問題なく動" "いているときは静かに動きます。以下は、Cutter自身のテストの出力です。" "Cutterはテストが1つパスしたことを示すためには「.」だけを出力" "し、最後にテスト結果の要約を出力します。Cutterは各テストの名前や何個検証した" "かなどの情報は表示しません。これは、テスト成功時にはこれらの情報は必要ないか" "らです。" #: xml/cutter.xml:105(programlisting) #, no-wrap msgid "" "\n" ".....................F.....................................\n" "\n" "1) Failure: test_error\n" "<\"Strange\" == cut_test_result_get_test_name(result)>\n" "expected: <Strange!!!>\n" " but was: <dummy-error-test>\n" "test/test-cut-assertions.c:240: cut_assert_test_result()\n" "\n" "Finished in 0.223657 seconds\n" "\n" "59 test(s), 242 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s)\n" msgstr "" #: xml/cutter.xml:120(programlisting) #, no-wrap msgid "" "\n" "cut_assert_equal_string(\"Strange!!!\", cut_test_result_get_test_name(result));\n" msgstr "" #: xml/cutter.xml:103(para) msgid "" "Cutter outputs many information on failure: The above " "result is happened because I add a strange expected staring in Cutter's self " "test: The strange assertion is written in the 240th line in " "test/test-cut-assertions.c and the line is in the cut_assert_test_result() function. " "The function is called in test_error test. We expected " "cut_test_result_get_test_name(result) should return \"Strange!!!\" but got " "\"dummy-error-name\". We can get the above information from Cutter output. " "This will help your debug." msgstr "" "Cutterは失敗時にはたくさんの情報を出力します。上記の結果は" "Cutterの自己テストにおかしな期待値を追加したために起きています。" "おかしな検証はtest/test-cut-assertions.cの240行目に書かれてい" "て、その行はcut_assert_test_result()関数内にあります。この" "関数はtest_errorテストから呼び出されています。cut_test_result_get_test_name" "(result)が\"Strange!!!\"を返すことを期待していますが、実際は\"dummy-error-" "name\"が返ってきています。このような情報を上記のCutterの出力から得ることがで" "きます。これはデバッグの手助けになるでしょう。" #: xml/cutter.xml:131(para) msgid "" "Cutter's output format is pragmatic. ' but was:' is indented and aligned " "with the above 'expected:'. This helps that you find difference between " "expected value and actual value by your eyes easily. The problem line is " "formated as 'FILENAME:LINE: FUNCTION' to integrate Emacs. In Emacs's " "compilation-mode, if the format is appeared in *compilation* buffer, we can " "jump to FILENAME at LINE with next-error command. (C-x `) This helps that " "you find the problem line rapidly." msgstr "" "Cutterの出力形式は実用的です。' but was:'はその上の'expected:'と並ぶようにイ" "ンデントされています。これは期待値と実測値をパッと見て簡単に比較できるように" "するためです。問題のあった行は「ファイル名:行: 関数」というように整形されてい" "ます。これはEmacsと連携するためです。Emacsのcompilation-modeではこの形式が" "*compilation*バッファに表れると、next-errorコマンド(C-x `)で「ファイル名」の" "「行」へジャンプすることができます。これは問題行を素早く見つける手助けをしま" "す。" #: xml/cutter.xml:141(para) msgid "Cutter supports not only easy test writing but also easy debugging." msgstr "" "Cutterは簡単にテストを書くことを支援するだけではなく、簡単にデバッグをできる" "ことも支援します。" #: xml/cutter.xml:48(para) msgid "" "Cutter is a Unit Testing Framework for C and C++ and has the following " "features: " msgstr "" "Cutterは以下のような特徴をもったC言語・C++言語用の単体テストフレームワークで" "す。" #: xml/cutter.xml:151(title) msgid "setup ()" msgstr "" #: xml/cutter.xml:153(programlisting) #, no-wrap msgid "void setup (void);" msgstr "" #: xml/cutter.xml:154(para) msgid "" "setup has been deprecated since version 1.0.7 and should " "not be used in newly-written code. Use cut_setup() instead." msgstr "" "setupはバージョン1.0.7から非推奨になりました。新しく書く" "コードでは使わないでください。代わりにcut_setup()を使ってください。" #: xml/cutter.xml:155(para) msgid "" "If you define setup() in " "your test program, cutter will call your setup() before each your test is run. If you " "define cut_setup(), " "setup() is ignored." msgstr "" "テストプログラム中でsetup()を定義していたら、cutterは各テストが実行される前に定義されたsetup()を呼びだします。cut_setup()が定義されていた" "場合は、setup()は無視され" "ます。" #: xml/cutter.xml:161(title) msgid "cut_setup ()" msgstr "" #: xml/cutter.xml:163(programlisting) #, no-wrap msgid "void cut_setup (void);" msgstr "" #: xml/cutter.xml:164(para) msgid "" "If you define cut_setup() in your test program, cutter will call your cut_setup() before each your test is run. " "cut_setup() has " "priority over setup()." msgstr "" "テストプログラム中でcut_setup()を定義していたら、cutterは各テストが実行される前に定義された" "cut_setup()を呼びだし" "ます。cut_setup()と" "setup()が定義されていた場" "合はcut_setup()だけが" "使われます。" #: xml/cutter.xml:170(title) msgid "teardown ()" msgstr "" #: xml/cutter.xml:172(programlisting) #, no-wrap msgid "void teardown (void);" msgstr "" #: xml/cutter.xml:173(para) msgid "" "teardown has been deprecated since version 1.0.7 and " "should not be used in newly-written code. Use cut_teardown() instead." msgstr "" "teardownはバージョン1.0.7から非推奨になりました。新しく書" "くコードでは使わないでください。代わりにcut_teardown()を使ってください。" #: xml/cutter.xml:174(para) msgid "" "If you define teardown() in your test program, cutter will call your teardown() after each your test is run even " "if a test is failed. If you define cut_teardown(), teardown() is ignored." msgstr "" "テストプログラム中でteardown()を定義していたら、cutterは各テストの後に、たとえテストが失敗" "していた時でも、teardown()を呼びだします。cut_teardown()" "が定義されていた場合は、teardown()は無視されます。" #: xml/cutter.xml:181(title) msgid "cut_teardown ()" msgstr "" #: xml/cutter.xml:183(programlisting) #, no-wrap msgid "void cut_teardown (void);" msgstr "" #: xml/cutter.xml:184(para) msgid "" "If you define cut_teardown() in your test program, cutter will call your cut_teardown() after each your " "test is run even if a test is failed. cut_teardown() has priority over teardown()." msgstr "" "テストプログラム中でcut_teardown()を定義していたら、cutterは各テストの後に、たとえテストが失敗" "していた時でも、cut_teardown()を呼びだします。cut_teardown()teardown()が定義されていた場合はcut_teardown()だけが使われます。" #: xml/cutter.xml:191(title) msgid "cut_startup ()" msgstr "" #: xml/cutter.xml:193(programlisting) #, no-wrap msgid "void cut_startup (void);" msgstr "" #: xml/cutter.xml:194(para) msgid "" "If you define cut_startup() in your test program, cutter will call your cut_startup() before each your " "test case is run. cut_startup() has priority over startup()." msgstr "" "テストプログラム中でcut_startup()を定義していたら、cutterは各テストケースが実行される前に定義" "されたcut_startup()" "を呼びだします。cut_startup()startup()が定義されていた場合はcut_startup()だけが使われます。" #: xml/cutter.xml:200(title) msgid "cut_shutdown ()" msgstr "" #: xml/cutter.xml:202(programlisting) #, no-wrap msgid "void cut_shutdown (void);" msgstr "" #: xml/cutter.xml:203(para) msgid "" "If you define shutdown() in your test program, cutter will call your shutdown() after each your test case is run. " "cut_shutdown() " "has priority over shutdown()." msgstr "" "テストプログラム中でshutdown()を定義していたら、cutterは各テストケースが実行された後に定義" "されたshutdown()を呼び" "だします。cut_shutdown()shutdown()が定義されていた場合はcut_shutdown()だけが使われます。" #: xml/cutter.xml:209(title) msgid "cut_add_data()" msgstr "" #: xml/cutter.xml:211(programlisting) #, no-wrap msgid "#define cut_add_data(first_data_name, ...)" msgstr "" #: xml/cutter.xml:212(para) msgid "Adds data to use data driven test." msgstr "データ駆動テストで使うデータを追加します。" #: xml/cutter.xml:217(programlisting) #, no-wrap msgid "" "\n" "#include <cutter.h>\n" "\n" "void data_translate (void);\n" "void test_translate (const void *data);\n" "\n" "static const char*\n" "translate (int input)\n" "{\n" " switch(input) {\n" " case 1:\n" " return \"first\";\n" " case 111:\n" " return \"a hundred eleven\";\n" " default:\n" " return \"unsupported\";\n" " }\n" "}\n" "\n" "typedef struct _TranslateTestData\n" "{\n" " char *translated;\n" " int input;\n" "} TranslateTestData;\n" "\n" "static TranslateTestData *\n" "translate_test_data_new (char *translated, int input)\n" "{\n" " TranslateTestData *data;\n" "\n" " data = malloc(sizeof(TranslateTestData));\n" " data->translated = strdup(translated);\n" " data->input = input;\n" "\n" " return data;\n" "}\n" "\n" "static void\n" "translate_test_data_free (TranslateTestData *data)\n" "{\n" " free(data->translated);\n" " free(data);\n" "}\n" "\n" "void\n" "data_translate(void)\n" "{\n" " cut_add_data(\"simple data\",\n" " translate_test_data_new(\"first\", 1),\n" " translate_test_data_free,\n" " \"complex data\",\n" " translate_test_data_new(\"a hundred eleven\", 111),\n" " translate_test_data_free,\n" " NULL);\n" "}\n" "\n" "void\n" "test_translate(const void *data)\n" "{\n" " const TranslateTestData *test_data = data;\n" "\n" " cut_assert_equal_string(test_data->translated,\n" " translate(test_data->input));\n" "}\n" msgstr "" #: xml/cutter.xml:283(term) msgid "first_data_name :" msgstr "" #: xml/cutter.xml:284(simpara) msgid "The first data name." msgstr "最初のデータ名。" #: xml/cutter.xml:287(simpara) msgid "" "The data and destroy function of the first data, followed optionally by more " "name/data/destroy_function(CutDestroyFunction) triples. The variable arguments " "should be terminated by NULL since 1.0.6." msgstr "" "最初のデータとデータ破棄関数。続けて任意の数の「名前・データ・データ破棄関数" "(CutDestroyFunction)」の三つ組を指定します。1.0.6から可変長の引数はNULL終端しなければいけなくなりました。" #: xml/cutter.xml:295(title) msgid "cut_add_data_backward_compatibility()" msgstr "" #: xml/cutter.xml:297(programlisting) #, no-wrap msgid "#define cut_add_data_backward_compatibility(context, ...)" msgstr "" #: xml/cutter.xml:298(para) msgid "" "cut_add_data_backward_compatibility is deprecated and " "should not be used in newly-written code." msgstr "" "cut_add_data_backward_compatibilityは非推奨です。新しい" "コードでは使わないでください。" #: xml/cutter.xml:309(title) msgid "cut_set_attributes()" msgstr "" #: xml/cutter.xml:311(programlisting) #, no-wrap msgid "#define cut_set_attributes(first_attribute_name, ...)" msgstr "" #: xml/cutter.xml:312(para) msgid "Sets attributes of the test." msgstr "テストの属性を設定します。" #: xml/cutter.xml:317(programlisting) #, no-wrap msgid "" "\n" "#include <cutter.h>\n" "\n" "void attributes_repeat (void);\n" "void test_repeat (void);\n" "\n" "void\n" "attributes_repeat(void)\n" "{\n" " cut_set_attributes(\"description\", \"a test for repeat function\",\n" " \"bug\", \"111\",\n" " \"priority\", \"high\",\n" " NULL);\n" "}\n" "\n" "void\n" "test_repeat(void)\n" "{\n" " cut_assert_equal_string_with_free(\"XXX\", repeat(\"X\", 3));\n" "}\n" msgstr "" #: xml/cutter.xml:339(term) msgid "first_attribute_name :" msgstr "" #: xml/cutter.xml:340(simpara) msgid "The first attribute name." msgstr "最初の属性名。" #: xml/cutter.xml:343(simpara) msgid "" "The value of the first attribute, followed optionally by more name/value " "pairs. NULL-terminate " "is required since 1.0.7." msgstr "" "最初の属性値です。その後に任意個数の名前と値のペアが続きます。1.0.7からNULL終端が必須になりました。" #: xml/cutter.xml:351(programlisting) #, no-wrap msgid "#define cut_get_current_test_context()" msgstr "" #: xml/cutter.xml:352(para) msgid "" "Returns the current test context. The current test context is a thread local " "object. It means that you don't need to care this if you don't create a new " "thread in your test. This is only needed to care if you create a new thread. " "You need to pass the current test context in your test thread to the current " "test context in a created thread." msgstr "" "現在のテストコンテキストを返します。「現在のテストコンテキスト」はスレッド" "ローカルなオブジェクトです。もしテストの中で新しいスレッドを作らない場合はテ" "ストコンテキストを気にする必要はありません。新しいスレッドを作る場合だけ必要" "になります。テストのスレッドが持っている「現在のテストコンテキスト」を新しく" "作ったスレッドに渡す必要がありません。" #: xml/cutter.xml:363(programlisting) #, no-wrap msgid "" "\n" "int\n" "your_thread_function(void *data)\n" "{\n" " CutTestContext *test_context = data;\n" " cut_set_current_test_context(test_context);\n" " ...\n" "}\n" "\n" "void\n" "run_your_thread(void)\n" "{\n" " int result;\n" " pthread_t your_thread;\n" "\n" " result = pthread_create(&your_thread, NULL,\n" " your_thread_function,\n" " cut_get_current_test_context());\n" " ...\n" "}\n" msgstr "" #: xml/cutter.xml:385(simpara) msgid "a CutTestContext." msgstr "" "CutTestContextオブジェク" "ト。" #: xml/cutter.xml:390(title) msgid "cut_set_current_test_context()" msgstr "" #: xml/cutter.xml:392(programlisting) #, no-wrap msgid "#define cut_set_current_test_context(test_context)" msgstr "" #: xml/cutter.xml:393(para) msgid "" "Set test_context as the current test context. See " "cut_get_current_test_context() for more " "details." msgstr "" "現在のテストコンテキストをtest_contextにします。詳細は" "cut_get_current_test_context()を見てください。" #: xml/cutter.xml:397(term) msgid "test_context :" msgstr "" #: xml/cutter.xml:398(simpara) msgid "" "the CutTestContext to " "be the current test context." msgstr "" "現在のテストコンテキストになるCutTestContext。" #: xml/cutter.xml:403(title) msgid "cut_set_message ()" msgstr "" #: xml/cutter.xml:405(programlisting) #, no-wrap msgid "" "void cut_set_message (const char *format,\n" " ...);" msgstr "" #: xml/cutter.xml:407(para) msgid "" "cut_set_message has been deprecated since version 1.1.0 " "and should not be used in newly-written code. Use cut_message() instead." msgstr "" "cut_set_messageはバージョン1.1.0から非推奨になりました。新" "しく書くコードでは使わないでください。代わりにcut_message()を使ってください。" #: xml/cutter.xml:408(para) xml/cutter.xml:424(para) msgid "Sets a message to be used by the next assertion." msgstr "次の検証で使われるメッセージです。" #: xml/cutter.xml:411(term) xml/cutter.xml:427(term) xml/cutter.xml:458(term) #: xml/cut-test-utils.xml:190(term) xml/cut-assertions.xml:2232(term) #: xml/cut-assertions.xml:2267(term) xml/cut-assertions.xml:2283(term) #: xml/cut-assertions.xml:2300(term) xml/cut-assertions.xml:2315(term) #: xml/cut-assertions.xml:2337(term) msgid "format :" msgstr "" #: xml/cutter.xml:412(simpara) xml/cutter.xml:428(simpara) #: xml/cutter.xml:459(simpara) xml/cut-test-utils.xml:191(simpara) #: xml/cut-assertions.xml:2233(simpara) xml/cut-assertions.xml:2268(simpara) #: xml/cut-assertions.xml:2284(simpara) xml/cut-assertions.xml:2301(simpara) #: xml/cut-assertions.xml:2316(simpara) xml/cut-assertions.xml:2338(simpara) msgid "" "the message format. See the printf() documentation." msgstr "" "整形文字列。printf()のド" "キュメントを見てください。" #: xml/cutter.xml:415(simpara) xml/cutter.xml:431(simpara) #: xml/cutter.xml:462(simpara) xml/cut-test-utils.xml:194(simpara) #: xml/cut-assertions.xml:2236(simpara) xml/cut-assertions.xml:2271(simpara) #: xml/cut-assertions.xml:2287(simpara) xml/cut-assertions.xml:2304(simpara) #: xml/cut-assertions.xml:2319(simpara) xml/cut-assertions.xml:2341(simpara) #: xml/cppcutter.xml:156(simpara) msgid "the parameters to insert into the format string." msgstr "整形文字列に挿入されるパラメータ。" #: xml/cutter.xml:419(title) msgid "cut_set_message_va_list ()" msgstr "" #: xml/cutter.xml:421(programlisting) #, no-wrap msgid "" "void cut_set_message_va_list (const char *format,\n" " va_list args);" msgstr "" #: xml/cutter.xml:423(para) msgid "" "cut_set_message_va_list has been deprecated since version " "1.1.0 and should not be used in newly-written code. Use cut_message() instead." msgstr "" "cut_set_message_va_listはバージョン1.1.0から非推奨になりま" "した。新しく書くコードでは使わないで下さい。代わりにcut_message()を使ってください。" #: xml/cutter.xml:435(title) msgid "cut_keep_message ()" msgstr "" #: xml/cutter.xml:437(programlisting) #, no-wrap msgid "void cut_keep_message (void);" msgstr "" #: xml/cutter.xml:438(para) msgid "" "cut_keep_message has been deprecated since version 1.1.0 " "and should not be used in newly-written code. Use cut_message() instead." msgstr "" "cut_keep_messageはバージョン1.1.0から非推奨になりました。" "新しく書くコードでは使わないでください。代わりにcut_message()を使ってください。" #: xml/cutter.xml:439(para) msgid "" "Keeps the current message set by cut_set_message() or cut_set_message_va_list() " "after the next assertion." msgstr "" "cut_set_message()またはcut_set_message_va_list()で設定した現在のメッ" "セージを次の検証の後でも維持します。" #: xml/cutter.xml:444(title) msgid "cut_message ()" msgstr "" #: xml/cutter.xml:446(programlisting) #, no-wrap msgid "" "void cut_message (const char *format,\n" " ...);" msgstr "" #: xml/cutter.xml:448(para) msgid "Specifies optional assertion message." msgstr "追加の検証メッセージを指定します。" #: xml/cutter.xml:453(programlisting) #, no-wrap msgid "" "\n" "cut_assert_equal_string(\"abc\", \"def\",\n" " cut_message(\"should fail!\"));\n" msgstr "" #: xml/cutter.xml:464(para) xml/cut-assertions.xml:539(para) #: xml/cut-assertions.xml:560(para) xml/cut-assertions.xml:581(para) #: xml/cut-assertions.xml:602(para) xml/cut-assertions.xml:623(para) #: xml/cut-assertions.xml:644(para) xml/cut-assertions.xml:665(para) #: xml/cut-assertions.xml:686(para) xml/cut-assertions.xml:707(para) #: xml/cut-assertions.xml:728(para) xml/cut-assertions.xml:749(para) #: xml/cut-assertions.xml:770(para) xml/cut-assertions.xml:791(para) #: xml/cut-assertions.xml:812(para) xml/cut-assertions.xml:833(para) #: xml/cut-assertions.xml:854(para) xml/cut-assertions.xml:875(para) #: xml/cut-assertions.xml:896(para) xml/cut-assertions.xml:917(para) #: xml/cut-assertions.xml:938(para) xml/cut-assertions.xml:997(para) #: xml/cut-assertions.xml:1018(para) xml/cut-assertions.xml:1039(para) #: xml/cut-assertions.xml:1060(para) xml/cut-assertions.xml:1081(para) #: xml/cut-assertions.xml:1102(para) xml/cut-assertions.xml:1123(para) #: xml/cut-assertions.xml:1144(para) xml/cut-assertions.xml:1165(para) #: xml/cut-assertions.xml:1186(para) xml/cut-assertions.xml:1207(para) #: xml/cut-assertions.xml:1228(para) xml/cut-assertions.xml:1249(para) #: xml/cut-assertions.xml:1270(para) xml/cut-assertions.xml:1291(para) #: xml/cut-assertions.xml:1312(para) xml/cut-assertions.xml:1333(para) #: xml/cut-assertions.xml:1354(para) xml/cut-assertions.xml:1375(para) #: xml/cut-assertions.xml:1396(para) xml/cppcutter.xml:160(para) msgid "Since 1.1.0" msgstr "1.1.0から" #: xml/cutter.xml:468(programlisting) #, no-wrap msgid "#define CUT_EXPORT" msgstr "" #: xml/cutter.xml:469(para) msgid "" "Marks a function as a exported function. This is needed for just Windows " "environment. If you want to run your tests on Windows, you need to use this. " "Otherwise, you don't need to use this." msgstr "" "公開関数であるというしるしをつけます。このしるしはWindows環境上でだけ必要で" "す。Windows上でもテストを実行したい場合はこのマクロを使う必要があります。そう" "でなければ使う必要はありません。" #: xml/cutter.xml:477(programlisting) #, no-wrap msgid "" "\n" "CUT_EXPORT void\n" "test_add (void)\n" "{\n" " ...\n" "}\n" msgstr "" #: xml/cutter.xml:484(para) msgid "Since 1.1.2" msgstr "1.1.2から" #: xml/cutter.xml:489(link) xml/cut-assertions.xml:7(refentrytitle) #: xml/cut-assertions.xml:14(refname) xml/api-index-full.xml:84(link) #: xml/api-index-full.xml:85(link) xml/api-index-full.xml:86(link) #: xml/api-index-full.xml:87(link) xml/api-index-full.xml:88(link) #: xml/api-index-full.xml:89(link) xml/api-index-full.xml:90(link) #: xml/api-index-full.xml:95(link) xml/api-index-full.xml:96(link) #: xml/api-index-full.xml:97(link) xml/api-index-full.xml:98(link) #: xml/api-index-full.xml:99(link) xml/api-index-full.xml:100(link) #: xml/api-index-full.xml:101(link) xml/api-index-full.xml:102(link) #: xml/api-index-full.xml:103(link) xml/api-index-full.xml:104(link) #: xml/api-index-full.xml:105(link) xml/api-index-full.xml:106(link) #: xml/api-index-full.xml:107(link) xml/api-index-full.xml:108(link) #: xml/api-index-full.xml:109(link) xml/api-index-full.xml:110(link) #: xml/api-index-full.xml:111(link) xml/api-index-full.xml:112(link) #: xml/api-index-full.xml:113(link) xml/api-index-full.xml:114(link) #: xml/api-index-full.xml:115(link) xml/api-index-full.xml:116(link) #: xml/api-index-full.xml:117(link) xml/api-index-full.xml:118(link) #: xml/api-index-full.xml:119(link) xml/api-index-full.xml:120(link) #: xml/api-index-full.xml:121(link) xml/api-index-full.xml:122(link) #: xml/api-index-full.xml:123(link) xml/api-index-full.xml:124(link) #: xml/api-index-full.xml:125(link) xml/api-index-full.xml:126(link) #: xml/api-index-full.xml:127(link) xml/api-index-full.xml:128(link) #: xml/api-index-full.xml:129(link) xml/api-index-full.xml:130(link) #: xml/api-index-full.xml:132(link) xml/api-index-full.xml:133(link) #: xml/api-index-full.xml:134(link) xml/api-index-full.xml:135(link) #: xml/api-index-full.xml:136(link) xml/api-index-full.xml:137(link) #: xml/api-index-full.xml:138(link) xml/api-index-full.xml:139(link) #: xml/api-index-full.xml:140(link) xml/api-index-full.xml:141(link) #: xml/api-index-full.xml:142(link) xml/api-index-full.xml:143(link) #: xml/api-index-full.xml:144(link) xml/api-index-full.xml:145(link) #: xml/api-index-full.xml:146(link) xml/api-index-full.xml:147(link) #: xml/api-index-full.xml:148(link) xml/api-index-full.xml:149(link) #: xml/api-index-full.xml:150(link) xml/api-index-full.xml:151(link) #: xml/api-index-full.xml:152(link) xml/api-index-full.xml:153(link) #: xml/api-index-full.xml:154(link) xml/api-index-full.xml:155(link) #: xml/api-index-full.xml:156(link) xml/api-index-full.xml:157(link) #: xml/api-index-full.xml:158(link) xml/api-index-full.xml:159(link) #: xml/api-index-full.xml:160(link) xml/api-index-full.xml:161(link) #: xml/api-index-full.xml:162(link) xml/api-index-full.xml:163(link) #: xml/api-index-full.xml:164(link) xml/api-index-full.xml:165(link) #: xml/api-index-full.xml:166(link) xml/api-index-full.xml:167(link) #: xml/api-index-full.xml:168(link) xml/api-index-full.xml:169(link) #: xml/api-index-full.xml:170(link) xml/api-index-full.xml:171(link) #: xml/api-index-full.xml:172(link) xml/api-index-full.xml:173(link) #: xml/api-index-full.xml:174(link) xml/api-index-full.xml:176(link) #: xml/api-index-full.xml:214(link) xml/api-index-full.xml:215(link) #: xml/api-index-full.xml:217(link) xml/api-index-full.xml:236(link) #: xml/api-index-full.xml:237(link) xml/api-index-full.xml:238(link) #: xml/api-index-full.xml:239(link) xml/api-index-full.xml:244(link) #: xml/api-index-deprecated.xml:15(link) xml/api-index-deprecated.xml:16(link) #: xml/api-index-deprecated.xml:18(link) xml/api-index-deprecated.xml:19(link) #: xml/api-index-deprecated.xml:23(link) xml/api-index-1.1.5.xml:10(link) #: xml/api-index-1.1.5.xml:11(link) xml/api-index-1.1.4.xml:11(link) #: xml/api-index-1.1.4.xml:12(link) xml/api-index-1.1.3.xml:7(link) #: xml/api-index-1.1.3.xml:8(link) xml/api-index-1.1.1.xml:7(link) #: xml/api-index-1.1.0.xml:8(link) xml/api-index-1.1.0.xml:9(link) #: xml/api-index-1.1.0.xml:10(link) xml/api-index-1.1.0.xml:11(link) #: xml/api-index-1.1.0.xml:12(link) xml/api-index-1.1.0.xml:13(link) #: xml/api-index-1.1.0.xml:14(link) xml/api-index-1.1.0.xml:15(link) #: xml/api-index-1.1.0.xml:16(link) xml/api-index-1.1.0.xml:17(link) #: xml/api-index-1.1.0.xml:18(link) xml/api-index-1.1.0.xml:19(link) #: xml/api-index-1.1.0.xml:20(link) xml/api-index-1.1.0.xml:21(link) #: xml/api-index-1.1.0.xml:22(link) xml/api-index-1.1.0.xml:23(link) #: xml/api-index-1.1.0.xml:24(link) xml/api-index-1.1.0.xml:25(link) #: xml/api-index-1.1.0.xml:26(link) xml/api-index-1.1.0.xml:27(link) #: xml/api-index-1.1.0.xml:28(link) xml/api-index-1.1.0.xml:29(link) #: xml/api-index-1.1.0.xml:30(link) xml/api-index-1.1.0.xml:31(link) #: xml/api-index-1.1.0.xml:32(link) xml/api-index-1.1.0.xml:33(link) #: xml/api-index-1.1.0.xml:34(link) xml/api-index-1.1.0.xml:35(link) #: xml/api-index-1.1.0.xml:36(link) xml/api-index-1.1.0.xml:37(link) #: xml/api-index-1.1.0.xml:38(link) xml/api-index-1.1.0.xml:39(link) #: xml/api-index-1.1.0.xml:40(link) xml/api-index-1.1.0.xml:41(link) #: xml/api-index-1.1.0.xml:42(link) xml/api-index-1.1.0.xml:43(link) #: xml/api-index-1.1.0.xml:44(link) xml/api-index-1.1.0.xml:45(link) #: xml/api-index-1.1.0.xml:46(link) xml/api-index-1.1.0.xml:47(link) #: xml/api-index-1.0.xml:7(link) xml/api-index-1.0.xml:9(link) #: xml/api-index-1.0.xml:10(link) xml/api-index-1.0.7.xml:11(link) #: xml/api-index-1.0.7.xml:12(link) xml/api-index-1.0.7.xml:13(link) #: xml/api-index-1.0.7.xml:14(link) xml/api-index-1.0.7.xml:15(link) #: xml/api-index-1.0.7.xml:16(link) xml/api-index-1.0.7.xml:17(link) #: xml/api-index-1.0.7.xml:18(link) xml/api-index-1.0.7.xml:19(link) #: xml/api-index-1.0.7.xml:20(link) xml/api-index-1.0.6.xml:13(link) #: xml/api-index-1.0.6.xml:18(link) xml/api-index-1.0.5.xml:20(link) #: xml/api-index-1.0.5.xml:21(link) xml/api-index-1.0.5.xml:22(link) #: xml/api-index-1.0.2.xml:7(link) xml/api-index-1.0.2.xml:8(link) #: xml/api-index-1.0.2.xml:9(link) xml/api-index-1.0.2.xml:12(link) #: xml/api-index-0.9.xml:7(link) xml/api-index-0.9.xml:8(link) #: xml/api-index-0.9.xml:9(link) xml/api-index-0.9.xml:10(link) #: xml/api-index-0.8.xml:9(link) xml/api-index-0.8.xml:13(link) #: xml/api-index-0.3.xml:7(link) xml/api-index-0.3.xml:8(link) msgid "Assertions" msgstr "検証" #: xml/cut-version.xml:7(refentrytitle) xml/cut-version.xml:14(refname) #: xml/api-index-full.xml:76(link) xml/api-index-full.xml:77(link) #: xml/api-index-full.xml:78(link) xml/api-index-full.xml:79(link) #: xml/api-index-full.xml:80(link) xml/api-index-1.0.7.xml:10(link) msgid "Version Information" msgstr "バージョン情報" #: xml/cut-version.xml:15(refpurpose) msgid "Variables and macros to check the Cutter version" msgstr "Cutterのバージョンをチェックするためのマクロ" #: xml/cut-version.xml:21(link) xml/cut-version.xml:43(title) #: xml/cut-version.xml:44(primary) xml/api-index-full.xml:77(link) msgid "CUTTER_VERSION_MAJOR" msgstr "" #: xml/cut-version.xml:22(link) xml/cut-version.xml:51(title) #: xml/cut-version.xml:52(primary) xml/api-index-full.xml:79(link) msgid "CUTTER_VERSION_MINOR" msgstr "" #: xml/cut-version.xml:23(link) xml/cut-version.xml:59(title) #: xml/cut-version.xml:60(primary) xml/api-index-full.xml:78(link) msgid "CUTTER_VERSION_MICRO" msgstr "" #: xml/cut-version.xml:24(link) xml/cut-version.xml:67(title) #: xml/cut-version.xml:68(primary) xml/api-index-full.xml:80(link) msgid "CUTTER_VERSION_STRING" msgstr "" #: xml/cut-version.xml:25(link) xml/cut-version.xml:77(primary) #: xml/api-index-full.xml:76(link) xml/api-index-1.0.7.xml:10(link) msgid "CUTTER_CHECK_VERSION" msgstr "" #: xml/cut-version.xml:21(synopsis) #, no-wrap msgid "" "#define \n" "#define \n" "#define \n" "#define \n" "#define (major,\n" " minor,\n" " micro)\n" msgstr "" #: xml/cut-version.xml:33(para) msgid "" "Cutter provides version information, primarily useful in configure checks " "for builds that have a configure script. Tests will not typically use the " "features described here." msgstr "" "Cutterはビルド時の設定で便利なようにバージョン情報を提供します。通常のテスト" "ではここで説明する機能は使わないでしょう。" #: xml/cut-version.xml:45(programlisting) #, no-wrap msgid "#define CUTTER_VERSION_MAJOR 1\n" msgstr "" #: xml/cut-version.xml:47(para) msgid "The major version number of the Cutter." msgstr "Cutterのメジャーバージョン。" #: xml/cut-version.xml:53(programlisting) #, no-wrap msgid "#define CUTTER_VERSION_MINOR 1\n" msgstr "" #: xml/cut-version.xml:55(para) msgid "The minor version number of the Cutter." msgstr "Cutterのマイナーバージョン。" #: xml/cut-version.xml:61(programlisting) #, no-wrap msgid "#define CUTTER_VERSION_MICRO 7\n" msgstr "" #: xml/cut-version.xml:63(para) msgid "The micro version number of the Cutter." msgstr "Cutterのマイクロバージョン。" #: xml/cut-version.xml:69(programlisting) #, no-wrap msgid "#define CUTTER_VERSION_STRING \"1.1.7\"\n" msgstr "" #: xml/cut-version.xml:71(para) msgid "" "The version number string of the Cutter with \"#{MAJOR}.#{MINOR}.#{MICRO}\" " "format." msgstr "" "\"#{メジャーバージョン}.#{マイナーバージョン}.#{マイクロバージョン}\"という書" "式のCutterのバージョン文字列。" #: xml/cut-version.xml:76(title) msgid "CUTTER_CHECK_VERSION()" msgstr "" #: xml/cut-version.xml:78(programlisting) #, no-wrap msgid "#define CUTTER_CHECK_VERSION(major, minor, micro)" msgstr "" #: xml/cut-version.xml:79(para) msgid "" "Checks the version of the Cutter. Returns true if the version of the Cutter " "header files is the same as or newer than the passed-in version." msgstr "" "Cutterのバージョンをチェックします。Cutterのヘッダファイルのバージョンと同じ" "かそれより新しいバージョンを渡すと真を返します。" #: xml/cut-version.xml:84(term) msgid "major :" msgstr "" #: xml/cut-version.xml:85(simpara) msgid "the major version number." msgstr "メジャーバージョン番号。" #: xml/cut-version.xml:87(term) msgid "minor :" msgstr "" #: xml/cut-version.xml:88(simpara) msgid "the minor version number." msgstr "マイナーバージョン番号。" #: xml/cut-version.xml:90(term) msgid "micro :" msgstr "" #: xml/cut-version.xml:91(simpara) msgid "the micro version number." msgstr "マイクロバージョン番号。" #: xml/cut-unified-differ.xml:7(refentrytitle) #: xml/cut-unified-differ.xml:14(refname) msgid "CutUnifiedDiffer" msgstr "" #: xml/cut-types.xml:7(refentrytitle) xml/cut-types.xml:14(refname) #: xml/api-index-full.xml:68(link) xml/api-index-full.xml:71(link) #: xml/api-index-full.xml:177(link) xml/api-index-full.xml:218(link) #: xml/api-index-full.xml:317(link) msgid "Types" msgstr "型" #: xml/cut-types.xml:15(refpurpose) msgid "Types that is used in test." msgstr "テストで使う型です。" #: xml/cut-types.xml:21(link) msgid "*CutDestroyFunction" msgstr "" #: xml/cut-types.xml:21(parameter) msgid " *data" msgstr "" #: xml/cut-types.xml:22(link) msgid "*CutCallbackFunction" msgstr "" #: xml/cut-types.xml:23(link) xml/cut-types.xml:58(title) #: xml/cut-types.xml:59(primary) xml/cut-multi-process.xml:25(returnvalue) #: xml/cut-multi-process.xml:27(returnvalue) #: xml/cut-multi-process.xml:28(returnvalue) #: xml/cut-multi-process.xml:29(returnvalue) #: xml/cut-multi-process.xml:38(returnvalue) #: xml/cut-multi-process.xml:40(type) #: xml/cut-multi-process.xml:64(returnvalue) #: xml/cut-multi-process.xml:65(returnvalue) #: xml/cut-multi-process.xml:67(type) #: xml/cut-multi-process.xml:71(returnvalue) #: xml/cut-multi-process.xml:73(returnvalue) #: xml/cut-helper.xml:39(returnvalue) xml/cut-helper.xml:41(returnvalue) #: xml/cut-assertions.xml:21(type) xml/cut-assertions.xml:23(type) #: xml/cut-assertions.xml:25(type) xml/cut-assertions.xml:27(type) #: xml/cut-assertions.xml:28(type) xml/cut-assertions.xml:30(type) #: xml/cut-assertions.xml:31(type) xml/api-index-full.xml:177(link) msgid "cut_boolean" msgstr "" #: xml/cut-types.xml:24(link) xml/cut-types.xml:67(title) #: xml/cut-types.xml:68(primary) xml/api-index-full.xml:317(link) msgid "CUT_TRUE" msgstr "" #: xml/cut-types.xml:25(link) xml/cut-types.xml:75(title) #: xml/cut-types.xml:76(primary) xml/api-index-full.xml:218(link) msgid "CUT_FALSE" msgstr "" #: xml/cut-types.xml:21(synopsis) #, no-wrap msgid "" " () ();\n" " () ();\n" "typedef ;\n" "#define \n" "#define \n" msgstr "" #: xml/cut-types.xml:31(para) msgid "There are some types to be used in test." msgstr "テストで使う型がいくつかあります。" #: xml/cut-types.xml:38(title) msgid "CutDestroyFunction ()" msgstr "" #: xml/cut-types.xml:40(programlisting) #, no-wrap msgid "void (*CutDestroyFunction) (void *data);" msgstr "" #: xml/cut-types.xml:41(para) msgid "" "Specifies the type of function which is called when a data element is " "destroyed. It is passed the pointer to the data element and should free any " "memory and resources allocated for it." msgstr "" "データが破棄されるときに呼ばれる関数の型です。データのポインタを受け取り、そ" "のデータ用に割り当てられたメモリとリソースを開放します。" #: xml/cut-types.xml:48(simpara) msgid "the data element to be destroyed." msgstr "破棄するデータ。" #: xml/cut-types.xml:52(title) msgid "CutCallbackFunction ()" msgstr "" #: xml/cut-types.xml:54(programlisting) #, no-wrap msgid "void (*CutCallbackFunction) (void);" msgstr "" #: xml/cut-types.xml:60(programlisting) #, no-wrap msgid "typedef int cut_boolean;\n" msgstr "" #: xml/cut-types.xml:62(para) msgid "" "A standard boolean type. Variables of this type should only contain the " "value CUT_TRUE or " "CUT_FALSE." msgstr "" "標準的な真偽値型。この型の値はCUT_TRUECUT_FALSEだけです。" #: xml/cut-types.xml:69(programlisting) #, no-wrap msgid "#define CUT_TRUE\n" msgstr "" #: xml/cut-types.xml:71(para) msgid "" "Defines the CUT_TRUE value for the cut_boolean type." msgstr "" "cut_boolean型のためにCUT_TRUEを定義します。" #: xml/cut-types.xml:77(programlisting) #, no-wrap msgid "#define CUT_FALSE\n" msgstr "" #: xml/cut-types.xml:79(para) msgid "" "Defines the CUT_FALSE value for the cut_boolean type." msgstr "" "cut_boolean型のためにCUT_FALSEを定義します。" #: xml/cut-test-utils.xml:7(refentrytitle) xml/cut-test-utils.xml:14(refname) #: xml/api-index-full.xml:178(link) xml/api-index-full.xml:179(link) #: xml/api-index-full.xml:180(link) xml/api-index-full.xml:181(link) #: xml/api-index-full.xml:223(link) xml/api-index-full.xml:224(link) #: xml/api-index-full.xml:234(link) xml/api-index-full.xml:243(link) #: xml/api-index-full.xml:250(link) xml/api-index-full.xml:292(link) #: xml/api-index-full.xml:293(link) xml/api-index-full.xml:294(link) #: xml/api-index-full.xml:295(link) xml/api-index-full.xml:296(link) #: xml/api-index-full.xml:297(link) xml/api-index-full.xml:300(link) #: xml/api-index-full.xml:301(link) xml/api-index-full.xml:302(link) #: xml/api-index-full.xml:303(link) xml/api-index-full.xml:304(link) #: xml/api-index-full.xml:305(link) xml/api-index-deprecated.xml:21(link) #: xml/api-index-1.1.6.xml:7(link) xml/api-index-1.1.6.xml:8(link) #: xml/api-index-1.1.5.xml:12(link) xml/api-index-1.1.4.xml:14(link) #: xml/api-index-1.1.3.xml:9(link) xml/api-index-1.1.1.xml:10(link) #: xml/api-index-1.0.7.xml:21(link) xml/api-index-1.0.6.xml:24(link) #: xml/api-index-1.0.5.xml:27(link) xml/api-index-1.0.5.xml:28(link) #: xml/api-index-1.0.5.xml:29(link) xml/api-index-1.0.5.xml:30(link) #: xml/api-index-1.0.5.xml:31(link) xml/api-index-1.0.2.xml:11(link) #: xml/api-index-1.0.2.xml:13(link) xml/api-index-1.0.2.xml:14(link) #: xml/api-index-1.0.2.xml:15(link) msgid "Test Utilities" msgstr "テストユーティリティ" #: xml/cut-test-utils.xml:15(refpurpose) msgid "Utilities to write tests more easily." msgstr "テストをもっと簡単に書くためのユーティリティ。" #: xml/cut-test-utils.xml:21(link) xml/cut-test-utils.xml:79(primary) #: xml/api-index-full.xml:292(link) xml/api-index-1.0.5.xml:27(link) msgid "cut_take" msgstr "" #: xml/cut-test-utils.xml:21(parameter) msgid " *object" msgstr "" #: xml/cut-test-utils.xml:23(link) xml/cut-test-utils.xml:98(primary) #: xml/api-index-full.xml:297(link) xml/api-index-1.0.5.xml:29(link) msgid "cut_take_memory" msgstr "" #: xml/cut-test-utils.xml:23(parameter) msgid " *memory" msgstr "" #: xml/cut-test-utils.xml:24(link) xml/cut-test-utils.xml:113(primary) #: xml/api-index-full.xml:303(link) msgid "cut_take_string" msgstr "" #: xml/cut-test-utils.xml:24(parameter) msgid " *string" msgstr "" #: xml/cut-test-utils.xml:25(link) xml/cut-test-utils.xml:127(primary) #: xml/api-index-full.xml:302(link) xml/api-index-1.0.5.xml:30(link) msgid "cut_take_strdup" msgstr "" #: xml/cut-test-utils.xml:25(parameter) xml/cut-test-utils.xml:26(parameter) #: xml/cut-test-utils.xml:41(parameter) xml/cut-assertions.xml:35(parameter) msgid "const *string" msgstr "" #: xml/cut-test-utils.xml:26(link) xml/cut-test-utils.xml:142(primary) #: xml/api-index-full.xml:305(link) xml/api-index-1.0.5.xml:31(link) msgid "cut_take_strndup" msgstr "" #: xml/cut-test-utils.xml:27(type) xml/cut-test-utils.xml:29(type) #: xml/cut-test-utils.xml:50(type) xml/cut-assertions.xml:171(type) #: xml/cut-assertions.xml:172(type) xml/cut-assertions.xml:174(type) #: xml/cut-assertions.xml:175(type) xml/cut-assertions.xml:205(type) #: xml/cut-assertions.xml:209(type) xml/cut-assertions.xml:212(type) #: xml/cut-assertions.xml:214(type) xml/cut-assertions.xml:217(type) #: xml/cut-assertions.xml:219(type) msgid "size_t" msgstr "" #: xml/cut-test-utils.xml:27(parameter) xml/cut-test-utils.xml:29(parameter) msgid " size" msgstr "" #: xml/cut-test-utils.xml:28(link) xml/cut-test-utils.xml:163(primary) #: xml/api-index-full.xml:296(link) xml/api-index-1.0.5.xml:28(link) msgid "cut_take_memdup" msgstr "" #: xml/cut-test-utils.xml:28(parameter) msgid "const *memory" msgstr "" #: xml/cut-test-utils.xml:30(link) xml/cut-test-utils.xml:183(primary) #: xml/api-index-full.xml:300(link) msgid "cut_take_printf" msgstr "" #: xml/cut-test-utils.xml:32(link) xml/cut-test-utils.xml:201(primary) #: xml/api-index-full.xml:304(link) msgid "cut_take_string_array" msgstr "" #: xml/cut-test-utils.xml:32(parameter) msgid " **strings" msgstr "" #: xml/cut-test-utils.xml:33(link) xml/cut-test-utils.xml:215(primary) #: xml/api-index-full.xml:294(link) msgid "cut_take_diff" msgstr "" #: xml/cut-test-utils.xml:33(parameter) xml/cut-helper.xml:34(parameter) msgid "const *from" msgstr "" #: xml/cut-test-utils.xml:34(parameter) xml/cut-helper.xml:35(parameter) msgid "const *to" msgstr "" #: xml/cut-test-utils.xml:35(link) xml/cut-test-utils.xml:232(primary) #: xml/api-index-full.xml:301(link) xml/api-index-1.0.6.xml:24(link) msgid "cut_take_replace" msgstr "" #: xml/cut-test-utils.xml:35(parameter) msgid "const *target" msgstr "" #: xml/cut-test-utils.xml:36(parameter) xml/cut-assertions.xml:263(parameter) #: xml/cut-assertions.xml:266(parameter) msgid "const *pattern" msgstr "" #: xml/cut-test-utils.xml:37(parameter) msgid "const *replacement" msgstr "" #: xml/cut-test-utils.xml:38(link) xml/cut-test-utils.xml:255(primary) #: xml/api-index-full.xml:293(link) xml/api-index-1.1.3.xml:9(link) msgid "cut_take_convert" msgstr "" #: xml/cut-test-utils.xml:41(link) xml/cut-test-utils.xml:276(primary) #: xml/api-index-full.xml:295(link) xml/api-index-1.1.4.xml:14(link) msgid "cut_take_inspect_string" msgstr "" #: xml/cut-test-utils.xml:42(link) xml/cut-test-utils.xml:291(primary) #: xml/api-index-full.xml:250(link) xml/api-index-1.0.2.xml:15(link) msgid "cut_set_fixture_data_dir" msgstr "" #: xml/cut-test-utils.xml:42(parameter) xml/cut-test-utils.xml:44(parameter) #: xml/cut-test-utils.xml:46(parameter) xml/cut-test-utils.xml:48(parameter) #: xml/cut-test-utils.xml:51(parameter) xml/cut-test-utils.xml:53(parameter) #: xml/cut-test-utils.xml:55(parameter) xml/cut-test-utils.xml:58(parameter) #: xml/cut-assertions.xml:253(parameter) xml/cut-assertions.xml:255(parameter) #: xml/cut-assertions.xml:257(parameter) xml/cut-assertions.xml:259(parameter) #: xml/cut-assertions.xml:261(parameter) msgid "const *path" msgstr "" #: xml/cut-test-utils.xml:44(link) xml/cut-test-utils.xml:308(primary) #: xml/api-index-full.xml:178(link) xml/api-index-deprecated.xml:21(link) #: xml/api-index-1.0.2.xml:11(link) msgid "cut_build_fixture_data_path" msgstr "" #: xml/cut-test-utils.xml:46(link) xml/cut-test-utils.xml:332(primary) #: xml/api-index-full.xml:179(link) xml/api-index-1.1.6.xml:7(link) msgid "cut_build_fixture_path" msgstr "" #: xml/cut-test-utils.xml:48(link) xml/cut-test-utils.xml:355(primary) #: xml/api-index-full.xml:224(link) xml/api-index-1.0.2.xml:13(link) msgid "cut_get_fixture_data_string" msgstr "" #: xml/cut-test-utils.xml:50(link) xml/cut-test-utils.xml:378(primary) #: xml/api-index-full.xml:223(link) xml/api-index-1.1.6.xml:8(link) msgid "cut_get_fixture_data" msgstr "" #: xml/cut-test-utils.xml:50(parameter) msgid " *size" msgstr "" #: xml/cut-test-utils.xml:53(link) xml/cut-test-utils.xml:405(primary) #: xml/api-index-full.xml:243(link) xml/api-index-1.0.2.xml:14(link) msgid "cut_remove_path" msgstr "" #: xml/cut-test-utils.xml:55(link) xml/cut-test-utils.xml:422(primary) #: xml/api-index-full.xml:180(link) xml/api-index-1.0.7.xml:21(link) msgid "cut_build_path" msgstr "" #: xml/cut-test-utils.xml:57(link) xml/cut-test-utils.xml:440(primary) #: xml/api-index-full.xml:181(link) xml/api-index-1.1.5.xml:12(link) msgid "cut_build_path_array" msgstr "" #: xml/cut-test-utils.xml:57(parameter) msgid "const **paths" msgstr "" #: xml/cut-test-utils.xml:58(link) xml/cut-test-utils.xml:454(primary) #: xml/api-index-full.xml:234(link) xml/api-index-1.1.1.xml:10(link) msgid "cut_make_directory" msgstr "" #: xml/cut-test-utils.xml:21(synopsis) #, no-wrap msgid "" " * (,\n" " );\n" "const * ();\n" "const * ();\n" "const * ();\n" "const * (,\n" " );\n" "const * (,\n" " );\n" "const * (,\n" " );\n" " ** ();\n" "const * (,\n" " );\n" "const * (,\n" " ,\n" " );\n" "#define (string,\n" " to_code_set,\n" " from_code_set)\n" "const * ();\n" " (,\n" " );\n" " * (,\n" " );\n" "const * (,\n" " );\n" "const * (,\n" " );\n" "const * (,\n" " ,\n" " );\n" " (,\n" " );\n" "const * (,\n" " );\n" "const * ();\n" " (,\n" " );\n" msgstr "" #: xml/cut-test-utils.xml:71(para) msgid "The utilities work without GLib support." msgstr "このユーティリティはGLibサポート無しでも使えます。" #: xml/cut-test-utils.xml:78(title) msgid "cut_take ()" msgstr "" #: xml/cut-test-utils.xml:80(programlisting) #, no-wrap msgid "" "void * cut_take (void *object,\n" " CutDestroyFunction destroy_function);" msgstr "" #: xml/cut-test-utils.xml:82(para) msgid "" "Passes ownership of object to Cutter and returns " "object itself. object is " "destroyed by destroy_func." msgstr "" "objectの所有権をCutterに渡し、object自身を返します。objectは" "destroy_funcを用いて破棄されます。" #: xml/cut-test-utils.xml:87(simpara) msgid "the object to be owned by Cutter." msgstr "Cutterが所有権をもつことになるオブジェクト。" #: xml/cut-test-utils.xml:90(simpara) msgid "the destroy function for the object." msgstr "オブジェクト用の破棄関数。" #: xml/cut-test-utils.xml:92(simpara) msgid "object owned by Cutter. Don't free it." msgstr "Cutterが所有するobject。解放しないで下さい。" #: xml/cut-test-utils.xml:97(title) msgid "cut_take_memory ()" msgstr "" #: xml/cut-test-utils.xml:99(programlisting) #, no-wrap msgid "const void * cut_take_memory (void *memory);" msgstr "" #: xml/cut-test-utils.xml:100(para) msgid "" "Passes ownership of memory to Cutter and returns " "memory itself. memory is " "destroyed by free()." msgstr "" "memoryの所有権をCutterに渡し、memory自身を返します。memoryfree()で破棄されます。" #: xml/cut-test-utils.xml:104(term) xml/cut-test-utils.xml:171(term) msgid "memory :" msgstr "" #: xml/cut-test-utils.xml:105(simpara) msgid "the memory to be owned by Cutter." msgstr "Cutterが所有権を持つことになるメモリ。" #: xml/cut-test-utils.xml:107(simpara) msgid "memory owned by Cutter. Don't free it." msgstr "Cutterが所有するmemory。解放しないで下さい。" #: xml/cut-test-utils.xml:112(title) msgid "cut_take_string ()" msgstr "" #: xml/cut-test-utils.xml:114(programlisting) #, no-wrap msgid "const char * cut_take_string (char *string);" msgstr "" #: xml/cut-test-utils.xml:120(simpara) msgid "the string to be owned by Cutter." msgstr "Cutterが所有権を持つことになる文字列。" #: xml/cut-test-utils.xml:122(simpara) msgid "string owned by Cutter. Don't free it." msgstr "Cutterが所有するstring。解放しないで下さい。" #: xml/cut-test-utils.xml:126(title) msgid "cut_take_strdup ()" msgstr "" #: xml/cut-test-utils.xml:128(programlisting) #, no-wrap msgid "const char * cut_take_strdup (const char *string);" msgstr "" #: xml/cut-test-utils.xml:129(para) msgid "" "Duplicates string, passes ownership of the duplicated " "string to Cutter and returns the duplicated string." msgstr "" "stringを複製し、その所有権をCutterに渡し、複製されたメ" "モリを返します。" #: xml/cut-test-utils.xml:134(simpara) xml/cut-test-utils.xml:152(simpara) msgid "the string to be duplicated." msgstr "複製される文字列。" #: xml/cut-test-utils.xml:136(simpara) xml/cut-test-utils.xml:157(simpara) msgid "a duplicated string owned by Cutter. Don't free it." msgstr "Cutterが所有する複製された文字列。解放しないで下さい。" #: xml/cut-test-utils.xml:141(title) msgid "cut_take_strndup ()" msgstr "" #: xml/cut-test-utils.xml:143(programlisting) #, no-wrap msgid "" "const char * cut_take_strndup (const char *string,\n" " size_t size);" msgstr "" #: xml/cut-test-utils.xml:145(para) msgid "" "Duplicates the first size bytes of string, passes ownership of the duplicated string to Cutter and returns " "the duplicated string. The duplicated string is always NULL-terminated." msgstr "" "stringの先頭sizeバイトを複製" "し、その所有権ををCutterに渡し、複製された文字列を返します。複製された文字列" "は常にNULL終端していま" "す。" #: xml/cut-test-utils.xml:155(simpara) xml/cut-test-utils.xml:175(simpara) msgid "the number of bytes to duplicate." msgstr "複製するバイト数。" #: xml/cut-test-utils.xml:162(title) msgid "cut_take_memdup ()" msgstr "cut_take_memdup ()" #: xml/cut-test-utils.xml:164(programlisting) #, no-wrap msgid "" "const void * cut_take_memdup (const void *memory,\n" " size_t size);" msgstr "" #: xml/cut-test-utils.xml:166(para) msgid "" "Duplicates size bytes of memory, passes ownership of the duplicated memory to Cutter and returns " "the duplicated memory." msgstr "" "memorysizeバイトを複製し、そ" "の所有権をCutterに渡し、複製されたメモリを返します。" #: xml/cut-test-utils.xml:172(simpara) msgid "the memory to be duplicated." msgstr "複製されるメモリ。" #: xml/cut-test-utils.xml:177(simpara) msgid "a duplicated memory owned by Cutter. Don't free it." msgstr "Cutterが所有する複製されたメモリ。解放しないで下さい。" #: xml/cut-test-utils.xml:182(title) msgid "cut_take_printf ()" msgstr "" #: xml/cut-test-utils.xml:184(programlisting) #, no-wrap msgid "" "const char * cut_take_printf (const char *format,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:186(para) msgid "" "Formats a string like printf() but the formatted string is owned by Cutter." msgstr "" "printf()のように文字列を" "整形しますが、整形された文字列はCutterが所有します。" #: xml/cut-test-utils.xml:196(simpara) msgid "a formatted string owned by Cutter. Don't free it." msgstr "Cutterが所有する整形された文字列。解放しないで下さい。" #: xml/cut-test-utils.xml:200(title) msgid "cut_take_string_array ()" msgstr "" #: xml/cut-test-utils.xml:202(programlisting) #, no-wrap msgid "char ** cut_take_string_array (char **strings);" msgstr "" #: xml/cut-test-utils.xml:203(para) msgid "" "Passes ownership of the array of strings to Cutter and returns " "strings itself." msgstr "" "配列の所有権をCutterに渡し、stringsそれ自身を返しま" "す。" #: xml/cut-test-utils.xml:208(simpara) msgid "the array of strings to be owned by Cutter." msgstr "Cutterが所有権を持つことになる文字列の配列。" #: xml/cut-test-utils.xml:210(simpara) msgid "strings owned by Cutter. Don't free it." msgstr "Cutterが所有するstrings。解放しないで下さい。" #: xml/cut-test-utils.xml:214(title) msgid "cut_take_diff ()" msgstr "" #: xml/cut-test-utils.xml:216(programlisting) #, no-wrap msgid "" "const char * cut_take_diff (const char *from,\n" " const char *to);" msgstr "" #: xml/cut-test-utils.xml:218(para) msgid "" "Computes diff between from and to that is owned by Cutter." msgstr "" "fromtoのdiffを計算します。" "diffの所有者はCutterです。" #: xml/cut-test-utils.xml:221(term) xml/cut-helper.xml:423(term) msgid "from :" msgstr "" #: xml/cut-test-utils.xml:222(simpara) xml/cut-helper.xml:424(simpara) msgid "the original string." msgstr "元の文字列。" #: xml/cut-test-utils.xml:224(term) xml/cut-helper.xml:426(term) msgid "to :" msgstr "" #: xml/cut-test-utils.xml:225(simpara) xml/cut-helper.xml:427(simpara) msgid "the modified string." msgstr "修正された文字列。" #: xml/cut-test-utils.xml:227(simpara) msgid "" "a diff between from and to " "owned by Cutter. Don't free it." msgstr "" "Cutterが所有するfromtoの" "diff。開放しないでください。" #: xml/cut-test-utils.xml:231(title) msgid "cut_take_replace ()" msgstr "" #: xml/cut-test-utils.xml:233(programlisting) #, no-wrap msgid "" "const char * cut_take_replace (const char *target,\n" " const char *pattern,\n" " const char *replacement);" msgstr "" #: xml/cut-test-utils.xml:236(para) msgid "" "Replaces all occurrences of the pattern with the " "replacement in the target " "string." msgstr "" "target文字列中で、patternにマッ" "チする部分をreplacementで置き換えます。" #: xml/cut-test-utils.xml:240(term) msgid "target :" msgstr "" #: xml/cut-test-utils.xml:241(simpara) msgid "the replace target string." msgstr "置換対象の文字列。" #: xml/cut-test-utils.xml:244(simpara) msgid "the regular expression pattern as string." msgstr "正規表現パターン。(文字列で指定)" #: xml/cut-test-utils.xml:246(term) msgid "replacement :" msgstr "" #: xml/cut-test-utils.xml:247(simpara) msgid "text to replace each match with" msgstr "マッチした部分を置き換える文字列。" #: xml/cut-test-utils.xml:249(simpara) msgid "a replaced string owned by Cutter. Don't free it." msgstr "Cutterが所有する複製された文字列。解放しないで下さい。" #: xml/cut-test-utils.xml:254(title) msgid "cut_take_convert()" msgstr "" #: xml/cut-test-utils.xml:256(programlisting) #, no-wrap msgid "#define cut_take_convert(string, to_code_set, from_code_set)" msgstr "" #: xml/cut-test-utils.xml:257(para) msgid "" "Converts string code set to to_code_set from from_code_set." msgstr "" "stringのコードセットをfrom_code_setからto_code_setへ変換します。" #: xml/cut-test-utils.xml:262(simpara) msgid "" "the convert target string. It should be NULL-terminated." msgstr "" "変換対象の文字列。NULL" "終端。" #: xml/cut-test-utils.xml:264(term) msgid "to_code_set :" msgstr "" #: xml/cut-test-utils.xml:265(simpara) msgid "the code set name which to convert string." msgstr "変換先のコードセット名。" #: xml/cut-test-utils.xml:267(term) msgid "from_code_set :" msgstr "" #: xml/cut-test-utils.xml:268(simpara) msgid "the code set name of string." msgstr "stringのコードセット名。" #: xml/cut-test-utils.xml:270(simpara) msgid "a converted string owned by Cutter. Don't free it." msgstr "Cutterが所有する変換された文字列。解放しないで下さい。" #: xml/cut-test-utils.xml:275(title) msgid "cut_take_inspect_string ()" msgstr "" #: xml/cut-test-utils.xml:277(programlisting) #, no-wrap msgid "const char * cut_take_inspect_string (const char *string);" msgstr "" #: xml/cut-test-utils.xml:278(para) msgid "Inspects string." msgstr "stringの詳細を返す。" #: xml/cut-test-utils.xml:282(simpara) msgid "" "the inspect target string. It should be NULL or NULL-terminated." msgstr "" "詳細な情報を取得したい文字列。NULLまたはNULL終端でなければいけません。" #: xml/cut-test-utils.xml:285(simpara) xml/cut-helper.xml:482(simpara) msgid "a inspected string owned by Cutter. Don't free it." msgstr "Cutterが所有する整形された文字列。解放しないで下さい。" #: xml/cut-test-utils.xml:290(title) msgid "cut_set_fixture_data_dir ()" msgstr "" #: xml/cut-test-utils.xml:292(programlisting) #, no-wrap msgid "" "void cut_set_fixture_data_dir (const char *path,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:294(para) msgid "" "Set fixture data directory that is used by cut_get_fixture_data_string() and " "so on." msgstr "" "cut_get_fixture_data_string()などで使われる" "フィクスチャデータのディレクトリを指定します。" #: xml/cut-test-utils.xml:299(simpara) msgid "a first element of the path to the fixture data directory." msgstr "フィクスチャデータディレクトリのパスの最初の要素。" #: xml/cut-test-utils.xml:302(simpara) xml/cut-test-utils.xml:322(simpara) #: xml/cut-test-utils.xml:368(simpara) xml/cut-test-utils.xml:416(simpara) msgid "" "remaining elements in path. NULL-terminate is required since 1.0.7." msgstr "" "パスの残りの要素。1.0.7からNULL終端が必須となりました。" #: xml/cut-test-utils.xml:307(title) msgid "cut_build_fixture_data_path ()" msgstr "" #: xml/cut-test-utils.xml:309(programlisting) #, no-wrap msgid "" "char * cut_build_fixture_data_path (const char *path,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:311(para) msgid "" "cut_build_fixture_data_path has been deprecated since " "version 1.1.6 and should not be used in newly-written code. Use cut_build_fixture_path() instead." msgstr "" "cut_build_fixture_data_pathはバージョン1.1.6からヒス衣装に" "なりました。新しく書くコードでは使わないでください。代わりにcut_build_fixture_path()を使ってください。" #: xml/cut-test-utils.xml:312(para) xml/cut-test-utils.xml:335(para) msgid "" "Builds a path to the fixture data. If path is " "relative path, the path is handled as a relative path from a directory that " "is specified by cut_set_fixture_data_dir() or the current " "directory." msgstr "" "フィクスチャデータへのパスを生成します。もし、pathが相" "対パスなら、パスはcut_set_fixture_data_dir()で指定したディレクト" "リか、現在のディレクトリからの相対パスとして処理されます。" #: xml/cut-test-utils.xml:325(simpara) msgid "a path to the fixture data. It should be freed when no longer needed." msgstr "" "フィクスチャデータのパス。返された文字列が必要なくなったときは開放してくださ" "い。" #: xml/cut-test-utils.xml:331(title) msgid "cut_build_fixture_path ()" msgstr "" #: xml/cut-test-utils.xml:333(programlisting) #, no-wrap msgid "" "const char * cut_build_fixture_path (const char *path,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:348(simpara) msgid "a path to the fixture data. It is owned by Cutter. Don't free it." msgstr "Cutterが所有するフィクスチャデータのパス。解放しないで下さい。" #: xml/cut-test-utils.xml:354(title) msgid "cut_get_fixture_data_string ()" msgstr "" #: xml/cut-test-utils.xml:356(programlisting) #, no-wrap msgid "" "const char * cut_get_fixture_data_string (const char *path,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:358(para) xml/cut-test-utils.xml:382(para) msgid "" "Reads the fixture data at \"path/...\" and returns it " "as a string that is owned by Cutter. The description of cut_build_fixture_path() " "shows how the fixture data path is determined." msgstr "" "\"path/...\"にあるフィクスチャデータを読み込み、文字列" "として返します。文字列はCutterが所持します。cut_build_fixture_data_path()" "の説明にはフィクスチャデータのパスがどのように決定されるかが書かれています。" #: xml/cut-test-utils.xml:371(simpara) xml/cut-test-utils.xml:398(simpara) msgid "a content of the fixture data as string owend by Cutter. Don't free it." msgstr "フィクスチャデータの内容。Cutterが所有しているので開放しないください。" #: xml/cut-test-utils.xml:377(title) msgid "cut_get_fixture_data ()" msgstr "" #: xml/cut-test-utils.xml:379(programlisting) #, no-wrap msgid "" "const char * cut_get_fixture_data (size_t *size,\n" " const char *path,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:389(simpara) msgid "" "return location for a size of the fixture data, or NULL." msgstr "" "フィクスチャデータのサイズを返すアドレスまたはNULL。" #: xml/cut-test-utils.xml:404(title) msgid "cut_remove_path ()" msgstr "" #: xml/cut-test-utils.xml:406(programlisting) #, no-wrap msgid "" "void cut_remove_path (const char *path,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:408(para) msgid "" "Removes path and it's children recursively. It " "doesn't report any errors." msgstr "" "pathと、その下にあるパスを再帰的に削除します。いかなる" "エラーも報告しません。" #: xml/cut-test-utils.xml:413(simpara) msgid "a first element of the path to be removed." msgstr "削除するパスの最初の要素。" #: xml/cut-test-utils.xml:421(title) msgid "cut_build_path ()" msgstr "" #: xml/cut-test-utils.xml:423(programlisting) #, no-wrap msgid "" "const char * cut_build_path (const char *path,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:425(para) msgid "" "Builds path from path and the following elements." msgstr "pathと続く要素を使ってパスを作ります。" #: xml/cut-test-utils.xml:429(simpara) msgid "a first element of the path." msgstr "パスの最初の要素。" #: xml/cut-test-utils.xml:432(simpara) xml/cut-test-utils.xml:465(simpara) #: xml/cut-assertions.xml:2167(simpara) msgid "" "remaining elements in path. NULL terminated." msgstr "" "パスの残りの要素。NULL" "終端。" #: xml/cut-test-utils.xml:434(simpara) xml/cut-test-utils.xml:448(simpara) msgid "built path owned by Cutter. Don't free it." msgstr "Cutterが所有する作成したパス。解放しないで下さい。" #: xml/cut-test-utils.xml:439(title) msgid "cut_build_path_array ()" msgstr "" #: xml/cut-test-utils.xml:441(programlisting) #, no-wrap msgid "const char * cut_build_path_array (const char **paths);" msgstr "" #: xml/cut-test-utils.xml:442(para) msgid "Builds path from paths." msgstr "pathsからパスを作ります。" #: xml/cut-test-utils.xml:445(term) msgid "paths :" msgstr "" #: xml/cut-test-utils.xml:446(simpara) msgid "" "NULL-terminated array " "of strings containing the path elements." msgstr "" "パスの要素を含んだNULL" "終端の文字列の配列。" #: xml/cut-test-utils.xml:453(title) msgid "cut_make_directory ()" msgstr "" #: xml/cut-test-utils.xml:455(programlisting) #, no-wrap msgid "" "void cut_make_directory (const char *path,\n" " ...);" msgstr "" #: xml/cut-test-utils.xml:457(para) msgid "" "Makes path and it's parents recursively. It doesn't " "report any errors." msgstr "" "pathと、その途中にあるパスを再帰的に作成します。いかな" "るエラーも報告しません。" #: xml/cut-test-utils.xml:462(simpara) msgid "a first element of the path to be made." msgstr "作成するパスの最初の要素。" #: xml/cut-string-diff-writer.xml:7(refentrytitle) #: xml/cut-string-diff-writer.xml:14(refname) #: xml/cut-string-diff-writer.xml:21(link) #: xml/cut-string-diff-writer.xml:36(title) #: xml/cut-string-diff-writer.xml:37(primary) xml/api-index-full.xml:72(link) #: xml/api-index-full.xml:73(link) xml/api-index-full.xml:255(link) #: xml/api-index-full.xml:256(link) msgid "CutStringDiffWriter" msgstr "" #: xml/cut-string-diff-writer.xml:22(link) #: xml/cut-string-diff-writer.xml:45(title) #: xml/cut-string-diff-writer.xml:46(primary) xml/api-index-full.xml:73(link) msgid "CutStringDiffWriterClass" msgstr "" #: xml/cut-string-diff-writer.xml:23(returnvalue) #: xml/cut-string-diff-writer.xml:24(type) #: xml/cut-diff-writer.xml:7(refentrytitle) #: xml/cut-diff-writer.xml:14(refname) #: xml/cut-console-diff-writer.xml:23(returnvalue) #: xml/cut-console-diff-writer.xml:25(type) #: xml/cut-console-diff-writer.xml:28(type) #: xml/cut-console-diff-writer.xml:30(type) #: xml/cut-console-diff-writer.xml:33(type) #: xml/cut-console-diff-writer.xml:35(type) #: xml/cut-console-diff-writer.xml:38(type) #: xml/cut-console-diff-writer.xml:40(type) #: xml/cut-console-diff-writer.xml:43(type) #: xml/cut-console-diff-writer.xml:45(type) #: xml/cut-console-diff-writer.xml:48(type) #: xml/cut-console-diff-writer.xml:50(type) #: xml/cut-console-diff-writer.xml:53(type) msgid "CutDiffWriter" msgstr "" #: xml/cut-string-diff-writer.xml:23(link) #: xml/cut-string-diff-writer.xml:55(primary) xml/api-index-full.xml:256(link) msgid "cut_string_diff_writer_new" msgstr "" #: xml/cut-string-diff-writer.xml:24(link) #: xml/cut-string-diff-writer.xml:64(primary) xml/api-index-full.xml:255(link) msgid "cut_string_diff_writer_get_result" msgstr "" #: xml/cut-string-diff-writer.xml:24(parameter) #: xml/cut-console-diff-writer.xml:25(parameter) #: xml/cut-console-diff-writer.xml:28(parameter) #: xml/cut-console-diff-writer.xml:30(parameter) #: xml/cut-console-diff-writer.xml:33(parameter) #: xml/cut-console-diff-writer.xml:35(parameter) #: xml/cut-console-diff-writer.xml:38(parameter) #: xml/cut-console-diff-writer.xml:40(parameter) #: xml/cut-console-diff-writer.xml:43(parameter) #: xml/cut-console-diff-writer.xml:45(parameter) #: xml/cut-console-diff-writer.xml:48(parameter) #: xml/cut-console-diff-writer.xml:50(parameter) #: xml/cut-console-diff-writer.xml:53(parameter) msgid " *writer" msgstr "" #: xml/cut-string-diff-writer.xml:21(synopsis) #, no-wrap msgid "" " ;\n" " ;\n" " * ();\n" "const * ();\n" msgstr "" #: xml/cut-string-diff-writer.xml:38(programlisting) #, no-wrap msgid "" "typedef struct {\n" " CutDiffWriter object;\n" "} CutStringDiffWriter;\n" msgstr "" #: xml/cut-string-diff-writer.xml:47(programlisting) #, no-wrap msgid "" "typedef struct {\n" " CutDiffWriterClass parent_class;\n" "} CutStringDiffWriterClass;\n" msgstr "" #: xml/cut-string-diff-writer.xml:54(title) msgid "cut_string_diff_writer_new ()" msgstr "" #: xml/cut-string-diff-writer.xml:56(programlisting) #, no-wrap msgid "CutDiffWriter * cut_string_diff_writer_new (void);" msgstr "" #: xml/cut-string-diff-writer.xml:63(title) msgid "cut_string_diff_writer_get_result ()" msgstr "" #: xml/cut-string-diff-writer.xml:65(programlisting) #, no-wrap msgid "const gchar * cut_string_diff_writer_get_result (CutDiffWriter *writer);" msgstr "" #: xml/cut-string-diff-writer.xml:68(term) #: xml/cut-console-diff-writer.xml:102(term) #: xml/cut-console-diff-writer.xml:116(term) #: xml/cut-console-diff-writer.xml:130(term) #: xml/cut-console-diff-writer.xml:144(term) #: xml/cut-console-diff-writer.xml:158(term) #: xml/cut-console-diff-writer.xml:172(term) #: xml/cut-console-diff-writer.xml:186(term) #: xml/cut-console-diff-writer.xml:200(term) #: xml/cut-console-diff-writer.xml:214(term) #: xml/cut-console-diff-writer.xml:228(term) #: xml/cut-console-diff-writer.xml:242(term) #: xml/cut-console-diff-writer.xml:256(term) msgid "writer :" msgstr "" #: xml/cut-readable-differ.xml:7(refentrytitle) #: xml/cut-readable-differ.xml:14(refname) msgid "CutReadableDiffer" msgstr "" #: xml/cut-multi-process.xml:7(refentrytitle) #: xml/cut-multi-process.xml:14(refname) xml/api-index-full.xml:74(link) #: xml/api-index-full.xml:75(link) xml/api-index-full.xml:257(link) #: xml/api-index-full.xml:258(link) xml/api-index-full.xml:259(link) #: xml/api-index-full.xml:260(link) xml/api-index-full.xml:261(link) #: xml/api-index-full.xml:262(link) xml/api-index-full.xml:263(link) #: xml/api-index-full.xml:264(link) xml/api-index-full.xml:265(link) #: xml/api-index-full.xml:266(link) xml/api-index-full.xml:267(link) #: xml/api-index-full.xml:268(link) xml/api-index-full.xml:269(link) #: xml/api-index-full.xml:270(link) xml/api-index-full.xml:271(link) #: xml/api-index-full.xml:272(link) xml/api-index-full.xml:273(link) #: xml/api-index-full.xml:274(link) xml/api-index-full.xml:275(link) #: xml/api-index-full.xml:276(link) xml/api-index-full.xml:277(link) #: xml/api-index-full.xml:278(link) xml/api-index-full.xml:279(link) #: xml/api-index-full.xml:280(link) xml/api-index-full.xml:281(link) #: xml/api-index-full.xml:282(link) xml/api-index-full.xml:283(link) #: xml/api-index-full.xml:284(link) xml/api-index-full.xml:285(link) #: xml/api-index-full.xml:286(link) xml/api-index-full.xml:298(link) #: xml/api-index-full.xml:299(link) xml/api-index-1.0.5.xml:25(link) #: xml/api-index-1.0.5.xml:26(link) xml/api-index-1.0.4.xml:11(link) #: xml/api-index-1.0.4.xml:12(link) xml/api-index-1.0.4.xml:16(link) #: xml/api-index-1.0.4.xml:17(link) xml/api-index-1.0.4.xml:18(link) #: xml/api-index-1.0.4.xml:19(link) xml/api-index-1.0.4.xml:20(link) #: xml/api-index-1.0.4.xml:21(link) xml/api-index-1.0.4.xml:22(link) #: xml/api-index-1.0.4.xml:23(link) xml/api-index-1.0.4.xml:24(link) #: xml/api-index-1.0.4.xml:25(link) xml/api-index-1.0.4.xml:26(link) #: xml/api-index-1.0.4.xml:27(link) xml/api-index-1.0.4.xml:28(link) #: xml/api-index-1.0.4.xml:29(link) xml/api-index-1.0.4.xml:30(link) #: xml/api-index-1.0.4.xml:31(link) xml/api-index-1.0.4.xml:32(link) #: xml/api-index-1.0.4.xml:33(link) xml/api-index-1.0.4.xml:34(link) #: xml/api-index-1.0.4.xml:35(link) xml/api-index-1.0.4.xml:36(link) #: xml/api-index-1.0.4.xml:37(link) xml/api-index-1.0.4.xml:38(link) #: xml/api-index-1.0.4.xml:39(link) xml/api-index-1.0.4.xml:40(link) #: xml/api-index-1.0.4.xml:41(link) xml/api-index-1.0.4.xml:42(link) #: xml/api-index-1.0.4.xml:43(link) xml/api-index-1.0.4.xml:44(link) #: xml/api-index-1.0.4.xml:45(link) msgid "Multi Process" msgstr "マルチプロセス" #: xml/cut-multi-process.xml:15(refpurpose) msgid "Utilities to run your tests on multi processes." msgstr "マルチプロセスでテストを走らせるためのユーティリティ。" #: xml/cut-multi-process.xml:22(link) #: xml/cut-multi-process.xml:24(returnvalue) #: xml/cut-multi-process.xml:25(type) xml/cut-multi-process.xml:26(type) #: xml/cut-multi-process.xml:27(type) xml/cut-multi-process.xml:28(type) #: xml/cut-multi-process.xml:29(type) xml/cut-multi-process.xml:30(type) #: xml/cut-multi-process.xml:31(type) xml/cut-multi-process.xml:34(type) #: xml/cut-multi-process.xml:36(type) xml/cut-multi-process.xml:38(type) #: xml/cut-multi-process.xml:39(type) xml/cut-multi-process.xml:41(type) #: xml/cut-multi-process.xml:42(type) xml/cut-multi-process.xml:44(type) #: xml/cut-multi-process.xml:45(type) xml/cut-multi-process.xml:48(type) #: xml/cut-multi-process.xml:50(type) xml/cut-multi-process.xml:53(type) #: xml/cut-multi-process.xml:55(type) xml/cut-multi-process.xml:58(type) #: xml/cut-multi-process.xml:60(type) xml/cut-multi-process.xml:62(type) #: xml/cut-multi-process.xml:63(type) xml/cut-multi-process.xml:64(type) #: xml/cut-multi-process.xml:65(type) xml/cut-multi-process.xml:66(type) #: xml/cut-multi-process.xml:70(type) xml/cut-multi-process.xml:98(title) #: xml/cut-multi-process.xml:99(primary) xml/api-index-full.xml:74(link) #: xml/api-index-1.0.4.xml:11(link) msgid "CutSubProcess" msgstr "" #: xml/cut-multi-process.xml:23(link) #: xml/cut-multi-process.xml:68(returnvalue) #: xml/cut-multi-process.xml:69(type) xml/cut-multi-process.xml:71(type) #: xml/cut-multi-process.xml:72(type) xml/cut-multi-process.xml:73(type) #: xml/cut-multi-process.xml:117(title) xml/cut-multi-process.xml:118(primary) #: xml/api-index-full.xml:75(link) xml/api-index-1.0.4.xml:12(link) msgid "CutSubProcessGroup" msgstr "" #: xml/cut-multi-process.xml:24(link) xml/cut-multi-process.xml:143(primary) #: xml/api-index-full.xml:298(link) xml/api-index-1.0.4.xml:44(link) msgid "cut_take_new_sub_process" msgstr "" #: xml/cut-multi-process.xml:24(parameter) #: xml/cut-multi-process.xml:32(parameter) msgid "const *test_directory" msgstr "" #: xml/cut-multi-process.xml:25(link) xml/cut-multi-process.xml:159(primary) #: xml/api-index-full.xml:275(link) xml/api-index-1.0.4.xml:33(link) msgid "cut_sub_process_run" msgstr "" #: xml/cut-multi-process.xml:25(parameter) #: xml/cut-multi-process.xml:26(parameter) #: xml/cut-multi-process.xml:27(parameter) #: xml/cut-multi-process.xml:28(parameter) #: xml/cut-multi-process.xml:29(parameter) #: xml/cut-multi-process.xml:30(parameter) #: xml/cut-multi-process.xml:31(parameter) #: xml/cut-multi-process.xml:34(parameter) #: xml/cut-multi-process.xml:36(parameter) #: xml/cut-multi-process.xml:38(parameter) #: xml/cut-multi-process.xml:39(parameter) #: xml/cut-multi-process.xml:41(parameter) #: xml/cut-multi-process.xml:42(parameter) #: xml/cut-multi-process.xml:44(parameter) #: xml/cut-multi-process.xml:45(parameter) #: xml/cut-multi-process.xml:48(parameter) #: xml/cut-multi-process.xml:50(parameter) #: xml/cut-multi-process.xml:53(parameter) #: xml/cut-multi-process.xml:55(parameter) #: xml/cut-multi-process.xml:58(parameter) #: xml/cut-multi-process.xml:60(parameter) #: xml/cut-multi-process.xml:62(parameter) #: xml/cut-multi-process.xml:63(parameter) #: xml/cut-multi-process.xml:64(parameter) #: xml/cut-multi-process.xml:65(parameter) #: xml/cut-multi-process.xml:66(parameter) #: xml/cut-multi-process.xml:70(parameter) msgid " *sub_process" msgstr "" #: xml/cut-multi-process.xml:26(link) xml/cut-multi-process.xml:174(primary) #: xml/api-index-full.xml:276(link) xml/api-index-1.0.4.xml:34(link) msgid "cut_sub_process_run_async" msgstr "" #: xml/cut-multi-process.xml:27(link) xml/cut-multi-process.xml:186(primary) #: xml/api-index-full.xml:286(link) xml/api-index-1.0.4.xml:43(link) msgid "cut_sub_process_wait" msgstr "" #: xml/cut-multi-process.xml:28(link) xml/cut-multi-process.xml:202(primary) #: xml/api-index-full.xml:274(link) xml/api-index-1.0.4.xml:32(link) msgid "cut_sub_process_is_success" msgstr "" #: xml/cut-multi-process.xml:29(link) xml/cut-multi-process.xml:218(primary) #: xml/api-index-full.xml:273(link) xml/api-index-1.0.4.xml:31(link) msgid "cut_sub_process_is_running" msgstr "" #: xml/cut-multi-process.xml:30(link) xml/cut-multi-process.xml:233(primary) #: xml/api-index-full.xml:266(link) xml/api-index-1.0.4.xml:24(link) msgid "cut_sub_process_get_test_directory" msgstr "" #: xml/cut-multi-process.xml:31(link) xml/cut-multi-process.xml:247(primary) #: xml/api-index-full.xml:285(link) xml/api-index-1.0.4.xml:42(link) msgid "cut_sub_process_set_test_directory" msgstr "" #: xml/cut-multi-process.xml:33(link) xml/cut-multi-process.xml:264(primary) #: xml/api-index-full.xml:263(link) xml/api-index-1.0.4.xml:21(link) msgid "cut_sub_process_get_source_directory" msgstr "" #: xml/cut-multi-process.xml:35(link) xml/cut-multi-process.xml:279(primary) #: xml/api-index-full.xml:282(link) xml/api-index-1.0.4.xml:39(link) msgid "cut_sub_process_set_source_directory" msgstr "" #: xml/cut-multi-process.xml:37(parameter) msgid "const *source_directory" msgstr "" #: xml/cut-multi-process.xml:38(link) xml/cut-multi-process.xml:297(primary) #: xml/api-index-full.xml:262(link) xml/api-index-1.0.4.xml:20(link) msgid "cut_sub_process_get_multi_thread" msgstr "" #: xml/cut-multi-process.xml:39(link) xml/cut-multi-process.xml:312(primary) #: xml/api-index-full.xml:281(link) xml/api-index-1.0.4.xml:38(link) msgid "cut_sub_process_set_multi_thread" msgstr "" #: xml/cut-multi-process.xml:40(parameter) msgid " multi_thread" msgstr "" #: xml/cut-multi-process.xml:41(returnvalue) #: xml/cut-multi-process.xml:43(type) xml/cut-assertions.xml:39(type) #: xml/cut-assertions.xml:40(type) xml/cut-assertions.xml:42(type) #: xml/cut-assertions.xml:43(type) xml/cut-assertions.xml:105(type) #: xml/cut-assertions.xml:106(type) xml/cut-assertions.xml:108(type) #: xml/cut-assertions.xml:109(type) msgid "int" msgstr "" #: xml/cut-multi-process.xml:41(link) xml/cut-multi-process.xml:328(primary) #: xml/api-index-full.xml:261(link) xml/api-index-1.0.5.xml:25(link) msgid "cut_sub_process_get_max_threads" msgstr "" #: xml/cut-multi-process.xml:42(link) xml/cut-multi-process.xml:344(primary) #: xml/api-index-full.xml:280(link) xml/api-index-1.0.5.xml:26(link) msgid "cut_sub_process_set_max_threads" msgstr "" #: xml/cut-multi-process.xml:43(parameter) msgid " max_threads" msgstr "" #: xml/cut-multi-process.xml:44(link) xml/cut-multi-process.xml:362(primary) #: xml/api-index-full.xml:259(link) xml/api-index-1.0.4.xml:18(link) msgid "cut_sub_process_get_exclude_files" msgstr "" #: xml/cut-multi-process.xml:45(link) xml/cut-multi-process.xml:377(primary) #: xml/api-index-full.xml:278(link) xml/api-index-1.0.4.xml:36(link) msgid "cut_sub_process_set_exclude_files" msgstr "" #: xml/cut-multi-process.xml:46(parameter) msgid "const **files" msgstr "" #: xml/cut-multi-process.xml:47(link) xml/cut-multi-process.xml:394(primary) #: xml/api-index-full.xml:258(link) xml/api-index-1.0.4.xml:17(link) msgid "cut_sub_process_get_exclude_directories" msgstr "" #: xml/cut-multi-process.xml:49(link) xml/cut-multi-process.xml:411(primary) #: xml/api-index-full.xml:277(link) xml/api-index-1.0.4.xml:35(link) msgid "cut_sub_process_set_exclude_directories" msgstr "" #: xml/cut-multi-process.xml:51(parameter) msgid "const **directories" msgstr "" #: xml/cut-multi-process.xml:52(link) xml/cut-multi-process.xml:430(primary) #: xml/api-index-full.xml:264(link) xml/api-index-1.0.4.xml:22(link) msgid "cut_sub_process_get_target_test_case_names" msgstr "" #: xml/cut-multi-process.xml:54(link) xml/cut-multi-process.xml:445(primary) #: xml/api-index-full.xml:283(link) xml/api-index-1.0.4.xml:40(link) msgid "cut_sub_process_set_target_test_case_names" msgstr "" #: xml/cut-multi-process.xml:56(parameter) #: xml/cut-multi-process.xml:61(parameter) msgid "const **names" msgstr "" #: xml/cut-multi-process.xml:57(link) xml/cut-multi-process.xml:462(primary) #: xml/api-index-full.xml:265(link) xml/api-index-1.0.4.xml:23(link) msgid "cut_sub_process_get_target_test_names" msgstr "" #: xml/cut-multi-process.xml:59(link) xml/cut-multi-process.xml:477(primary) #: xml/api-index-full.xml:284(link) xml/api-index-1.0.4.xml:41(link) msgid "cut_sub_process_set_target_test_names" msgstr "" #: xml/cut-multi-process.xml:62(returnvalue) #: xml/cut-multi-process.xml:63(returnvalue) xml/cut-helper.xml:41(type) #: xml/cut-helper.xml:42(type) xml/cut-helper.xml:43(type) #: xml/cut-assertions.xml:177(type) xml/cut-assertions.xml:178(type) #: xml/cut-assertions.xml:179(type) xml/cut-assertions.xml:181(type) #: xml/cut-assertions.xml:182(type) xml/cut-assertions.xml:183(type) msgid "double" msgstr "" #: xml/cut-multi-process.xml:62(link) xml/cut-multi-process.xml:494(primary) #: xml/api-index-full.xml:257(link) xml/api-index-1.0.4.xml:16(link) msgid "cut_sub_process_get_elapsed" msgstr "" #: xml/cut-multi-process.xml:63(link) xml/cut-multi-process.xml:508(primary) #: xml/api-index-full.xml:267(link) xml/api-index-1.0.4.xml:25(link) msgid "cut_sub_process_get_total_elapsed" msgstr "" #: xml/cut-multi-process.xml:64(link) xml/cut-multi-process.xml:522(primary) #: xml/api-index-full.xml:272(link) xml/api-index-1.0.4.xml:30(link) msgid "cut_sub_process_is_crashed" msgstr "" #: xml/cut-multi-process.xml:65(link) xml/cut-multi-process.xml:537(primary) #: xml/api-index-full.xml:260(link) xml/api-index-1.0.4.xml:19(link) msgid "cut_sub_process_get_fatal_failures" msgstr "" #: xml/cut-multi-process.xml:66(link) xml/cut-multi-process.xml:554(primary) #: xml/api-index-full.xml:279(link) xml/api-index-1.0.4.xml:37(link) msgid "cut_sub_process_set_fatal_failures" msgstr "" #: xml/cut-multi-process.xml:67(parameter) msgid " fatal_failures" msgstr "" #: xml/cut-multi-process.xml:68(link) xml/cut-multi-process.xml:575(primary) #: xml/api-index-full.xml:299(link) xml/api-index-1.0.4.xml:45(link) msgid "cut_take_new_sub_process_group" msgstr "" #: xml/cut-multi-process.xml:69(link) xml/cut-multi-process.xml:587(primary) #: xml/api-index-full.xml:268(link) xml/api-index-1.0.4.xml:26(link) msgid "cut_sub_process_group_add" msgstr "" #: xml/cut-multi-process.xml:69(parameter) #: xml/cut-multi-process.xml:71(parameter) #: xml/cut-multi-process.xml:72(parameter) #: xml/cut-multi-process.xml:73(parameter) msgid " *group" msgstr "" #: xml/cut-multi-process.xml:71(link) xml/cut-multi-process.xml:602(primary) #: xml/api-index-full.xml:269(link) xml/api-index-1.0.4.xml:27(link) msgid "cut_sub_process_group_run" msgstr "" #: xml/cut-multi-process.xml:72(link) xml/cut-multi-process.xml:618(primary) #: xml/api-index-full.xml:270(link) xml/api-index-1.0.4.xml:28(link) msgid "cut_sub_process_group_run_async" msgstr "" #: xml/cut-multi-process.xml:73(link) xml/cut-multi-process.xml:631(primary) #: xml/api-index-full.xml:271(link) xml/api-index-1.0.4.xml:29(link) msgid "cut_sub_process_group_wait" msgstr "" #: xml/cut-multi-process.xml:22(synopsis) #, no-wrap msgid "" " ;\n" " ;\n" " * ();\n" " ();\n" " ();\n" " ();\n" " ();\n" " ();\n" "const * ();\n" " (,\n" " );\n" "const * \n" " ();\n" " \n" " (,\n" " );\n" " ();\n" " (,\n" " );\n" " ();\n" " (,\n" " );\n" "const ** ();\n" " (,\n" " );\n" "const ** \n" " ();\n" " \n" " (,\n" " );\n" "const ** \n" " ();\n" " \n" " (,\n" " );\n" "const ** \n" " ();\n" " \n" " (,\n" " );\n" " ();\n" " ();\n" " ();\n" " ();\n" " (,\n" " );\n" " * ();\n" " (,\n" " );\n" " ();\n" " ();\n" " ();\n" msgstr "" #: xml/cut-multi-process.xml:79(para) msgid "" "If your test target supports multi-process and/or multi-thread, you need to " "test them. You can use CutSubProcess and CutSubProcessGroup to do it." msgstr "" "もしテスト対象のソフトウェアがマルチプロセスやマルチスレッドでの使用をサポー" "トしているなら、それらの機能をテストする必要があります。そのようなテストため" "に、CutSubProcessCutSubProcessGroupを使うこ" "とができます。" #: xml/cut-multi-process.xml:84(para) msgid "" "CutSubProcess runs your " "test on another process and forwards results of it to a test on your main " "process. You will get results of test on another process as results of test " "on your main process." msgstr "" "CutSubProcessはテストを別" "のプロセスで走らせ、その結果をメインプロセスに転送します。このため、別のプロ" "セス上でのテスト結果もメインプロセス上でのテスト結果と同じように見えます。" #: xml/cut-multi-process.xml:90(para) msgid "" "CutSubProcessGroup " "is a convenience object to run some CutSubProcess." msgstr "" "CutSubProcessGroupは" "いくつかのCutSubProcessを" "まとめて実行するための便利オブジェクトです。" #: xml/cut-multi-process.xml:100(programlisting) #, no-wrap msgid "typedef struct _CutSubProcess CutSubProcess;" msgstr "" #: xml/cut-multi-process.xml:101(para) msgid "" "An object to represent sub cutter process. It contains sub cutter process's " "parameters and results of sub cutter process." msgstr "" "サブcutterプロセスを表現するオブジェクトです。サブcutterプロセスのパラメタと" "テスト結果を持っています。" #: xml/cut-multi-process.xml:108(programlisting) #, no-wrap msgid "" "\n" "CutSubProcess *sub_process;\n" "\n" "sub_process = cut_take_new_sub_process(\"test-dir\");\n" "cut_sub_process_set_multi_thread(sub_process, TRUE);\n" "cut_assert_true(cut_sub_process_run(sub_process));\n" msgstr "" #: xml/cut-multi-process.xml:119(programlisting) #, no-wrap msgid "typedef struct _CutSubProcessGroup CutSubProcessGroup;" msgstr "" #: xml/cut-multi-process.xml:120(para) msgid "An object to run sub cutter processes. This is just for convenience." msgstr "" "サブcutterプロセスを実行するオブジェクトです。このオブジェクトは便利にテスト" "を書くために導入されています。" #: xml/cut-multi-process.xml:126(programlisting) #, no-wrap msgid "" "\n" "CutSubProcess *sub_process1, *sub_process2, *sub_process3;\n" "CutSubProcessGroup *group;\n" "\n" "sub_process1 = cut_take_new_sub_process(\"test-dir1\");\n" "sub_process2 = cut_take_new_sub_process(\"test-dir2\");\n" "sub_process3 = cut_take_new_sub_process(\"test-dir3\");\n" "\n" "group = cut_take_new_sub_process_group();\n" "cut_sub_process_group_add(group, sub_process1);\n" "cut_sub_process_group_add(group, sub_process2);\n" "cut_sub_process_group_add(group, sub_process3);\n" "cut_assert_true(cut_sub_process_group_run(group));\n" msgstr "" #: xml/cut-multi-process.xml:142(title) msgid "cut_take_new_sub_process ()" msgstr "" #: xml/cut-multi-process.xml:144(programlisting) #, no-wrap msgid "CutSubProcess * cut_take_new_sub_process (const char *test_directory);" msgstr "" #: xml/cut-multi-process.xml:145(para) msgid "" "Creates sub cutter process that runs tests under test_directory and returns it. A created sub process is owned by Cutter." msgstr "" "test_directory以下のテストを実行するサブcutterプロセス" "を作り、それを返します。返されたサブcutterプロセスの所有者はCutterです。" #: xml/cut-multi-process.xml:150(term) xml/cut-multi-process.xml:258(term) msgid "test_directory :" msgstr "" #: xml/cut-multi-process.xml:151(simpara) msgid "a directory includes sub process test." msgstr "サブcutterプロセスのテストがあるディレクトリ。" #: xml/cut-multi-process.xml:153(simpara) #: xml/cut-multi-process.xml:165(simpara) #: xml/cut-multi-process.xml:181(simpara) #: xml/cut-multi-process.xml:193(simpara) #: xml/cut-multi-process.xml:209(simpara) #: xml/cut-multi-process.xml:224(simpara) #: xml/cut-multi-process.xml:239(simpara) #: xml/cut-multi-process.xml:256(simpara) #: xml/cut-multi-process.xml:271(simpara) #: xml/cut-multi-process.xml:289(simpara) #: xml/cut-multi-process.xml:303(simpara) #: xml/cut-multi-process.xml:320(simpara) #: xml/cut-multi-process.xml:335(simpara) #: xml/cut-multi-process.xml:353(simpara) #: xml/cut-multi-process.xml:369(simpara) #: xml/cut-multi-process.xml:385(simpara) #: xml/cut-multi-process.xml:402(simpara) #: xml/cut-multi-process.xml:421(simpara) #: xml/cut-multi-process.xml:437(simpara) #: xml/cut-multi-process.xml:454(simpara) #: xml/cut-multi-process.xml:469(simpara) #: xml/cut-multi-process.xml:486(simpara) #: xml/cut-multi-process.xml:500(simpara) #: xml/cut-multi-process.xml:514(simpara) #: xml/cut-multi-process.xml:528(simpara) #: xml/cut-multi-process.xml:545(simpara) #: xml/cut-multi-process.xml:567(simpara) #: xml/cut-multi-process.xml:597(simpara) msgid "a CutSubProcess." msgstr "" "CutSubProcessオブジェク" "ト。" #: xml/cut-multi-process.xml:158(title) msgid "cut_sub_process_run ()" msgstr "" #: xml/cut-multi-process.xml:160(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_run (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:161(para) msgid "Runs sub cutter process." msgstr "サブcutterプロセスを実行します。" #: xml/cut-multi-process.xml:164(term) xml/cut-multi-process.xml:180(term) #: xml/cut-multi-process.xml:192(term) xml/cut-multi-process.xml:208(term) #: xml/cut-multi-process.xml:223(term) xml/cut-multi-process.xml:238(term) #: xml/cut-multi-process.xml:255(term) xml/cut-multi-process.xml:270(term) #: xml/cut-multi-process.xml:288(term) xml/cut-multi-process.xml:302(term) #: xml/cut-multi-process.xml:319(term) xml/cut-multi-process.xml:334(term) #: xml/cut-multi-process.xml:352(term) xml/cut-multi-process.xml:368(term) #: xml/cut-multi-process.xml:384(term) xml/cut-multi-process.xml:401(term) #: xml/cut-multi-process.xml:420(term) xml/cut-multi-process.xml:436(term) #: xml/cut-multi-process.xml:453(term) xml/cut-multi-process.xml:468(term) #: xml/cut-multi-process.xml:485(term) xml/cut-multi-process.xml:499(term) #: xml/cut-multi-process.xml:513(term) xml/cut-multi-process.xml:527(term) #: xml/cut-multi-process.xml:544(term) xml/cut-multi-process.xml:566(term) #: xml/cut-multi-process.xml:596(term) msgid "sub_process :" msgstr "" #: xml/cut-multi-process.xml:167(simpara) #: xml/cut-multi-process.xml:195(simpara) #: xml/cut-multi-process.xml:211(simpara) msgid "" "CUT_TRUE if " "sub_process is completed successfully, CUT_FALSE otherwise." msgstr "" "もし、sub_processが正常に終了した場合はCUT_TRUE、そうでない場合はCUT_FALSE。" #: xml/cut-multi-process.xml:173(title) msgid "cut_sub_process_run_async ()" msgstr "" #: xml/cut-multi-process.xml:175(programlisting) #, no-wrap msgid "void cut_sub_process_run_async (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:176(para) msgid "" "Runs sub cutter process asynchronously. The result of " "sub_process can be gotten by cut_sub_process_wait()." msgstr "" "非同期でサブcutterコマンドを実行します。sub_processの" "結果はcut_sub_process_wait()" "で取得できます。" #: xml/cut-multi-process.xml:185(title) msgid "cut_sub_process_wait ()" msgstr "" #: xml/cut-multi-process.xml:187(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_wait (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:188(para) msgid "" "Waits for sub cutter process that is ran asynchronously to complete and " "returns the result." msgstr "非同期で実行されたサブcutterプロセスの終了を待ち、結果を返します。" #: xml/cut-multi-process.xml:201(title) msgid "cut_sub_process_is_success ()" msgstr "" #: xml/cut-multi-process.xml:203(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_is_success (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:204(para) msgid "" "Returns whether sub_process is completed successfully " "or not." msgstr "sub_processが正常に終了したかどうかを返します。" #: xml/cut-multi-process.xml:217(title) msgid "cut_sub_process_is_running ()" msgstr "" #: xml/cut-multi-process.xml:219(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_is_running (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:220(para) msgid "Returns whether sub_process is running or not." msgstr "sub_processが実行中かどうかを返します。" #: xml/cut-multi-process.xml:226(simpara) msgid "" "CUT_TRUE if " "sub_process is running, CUT_FALSE otherwise." msgstr "" "sub_processが実行中の場合はCUT_TRUE、そうでない場合はCUT_FALSE。" #: xml/cut-multi-process.xml:232(title) msgid "cut_sub_process_get_test_directory ()" msgstr "" #: xml/cut-multi-process.xml:234(programlisting) #, no-wrap msgid "const char * cut_sub_process_get_test_directory (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:235(para) msgid "Returns a test directory that has tests to be ran." msgstr "実行対象のテストがあるディレクトリを返します。" #: xml/cut-multi-process.xml:241(simpara) #: xml/cut-multi-process.xml:259(simpara) msgid "a test directory." msgstr "テストディレクトリ" #: xml/cut-multi-process.xml:246(title) msgid "cut_sub_process_set_test_directory ()" msgstr "" #: xml/cut-multi-process.xml:248(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_test_directory (CutSubProcess *sub_process,\n" " const char *test_directory);" msgstr "" #: xml/cut-multi-process.xml:250(para) msgid "" "Sets test_directory as a test directory that has " "tests to be ran. This is same as TEST_DIRECTORY required command line " "argument." msgstr "" "実行対象のテストがあるディレクトリとしてtest_directory" "を指定します。これは必須のコマンドライン引数であるTEST_DIRECTORYと同じ意味を" "持ちます。" #: xml/cut-multi-process.xml:263(title) msgid "cut_sub_process_get_source_directory ()" msgstr "" #: xml/cut-multi-process.xml:265(programlisting) #, no-wrap msgid "" "const char * cut_sub_process_get_source_directory\n" " (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:267(para) msgid "Returns a source directory that has source files." msgstr "ソースファイルがあるディレクトリを返します。" #: xml/cut-multi-process.xml:273(simpara) #: xml/cut-multi-process.xml:292(simpara) msgid "a source directory." msgstr "ソースディレクトリ。" #: xml/cut-multi-process.xml:278(title) msgid "cut_sub_process_set_source_directory ()" msgstr "" #: xml/cut-multi-process.xml:280(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_source_directory\n" " (CutSubProcess *sub_process,\n" " const char *source_directory);" msgstr "" #: xml/cut-multi-process.xml:283(para) msgid "" "Sets source_directory as a source directory that has " "source files. This is same as --source-directory command line option." msgstr "" "ソースファイルがあるディレクトリとしてsource_directory" "を指定します。これは--source-directoryコマンドラインオプションと同じ意味を持" "ちます。" #: xml/cut-multi-process.xml:291(term) msgid "source_directory :" msgstr "" #: xml/cut-multi-process.xml:296(title) msgid "cut_sub_process_get_multi_thread ()" msgstr "" #: xml/cut-multi-process.xml:298(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_get_multi_thread (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:299(para) msgid "" "Returns whether sub_process is ran in multi-thread " "mode." msgstr "" "sub_processをマルチスレッドモードで実行するかどうかを" "返します。" #: xml/cut-multi-process.xml:305(simpara) msgid "" "CUT_TRUE if " "sub_process is ran in multi-thread mode, CUT_FALSE otherwise." msgstr "" "sub_processがマルチスレッドモードで実行されるなら" "CUT_TRUE、そうでな" "ければCUT_FALSE。" #: xml/cut-multi-process.xml:311(title) msgid "cut_sub_process_set_multi_thread ()" msgstr "" #: xml/cut-multi-process.xml:313(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_multi_thread (CutSubProcess *sub_process,\n" " cut_boolean multi_thread);" msgstr "" #: xml/cut-multi-process.xml:315(para) msgid "" "Sets whether sub_process is ran in multi-thread mode " "or not. This is same as --multi-thread command line option." msgstr "" "sub_processがマルチスレッドモードで実行されるかどうか" "を指定します。これは--multi-threadコマンドラインオプションと同じ意味を持ちま" "す。" #: xml/cut-multi-process.xml:322(term) msgid "multi_thread :" msgstr "" #: xml/cut-multi-process.xml:323(simpara) msgid "" "CUT_TRUE to be ran " "in multi-thread mode." msgstr "" "マルチスレッドモードで実行するならCUT_TRUE。" #: xml/cut-multi-process.xml:327(title) msgid "cut_sub_process_get_max_threads ()" msgstr "" #: xml/cut-multi-process.xml:329(programlisting) #, no-wrap msgid "int cut_sub_process_get_max_threads (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:330(para) msgid "" "Returns how many threads are used concurrently at a maximum in " "sub_process." msgstr "" "sub_process中で同時に動く最大スレッド数を返します。" #: xml/cut-multi-process.xml:337(simpara) msgid "" "max number of threads used concurrently at a maximum in " "sub_process." msgstr "sub_process中で同時に動く最大スレッド数。" #: xml/cut-multi-process.xml:343(title) msgid "cut_sub_process_set_max_threads ()" msgstr "" #: xml/cut-multi-process.xml:345(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_max_threads (CutSubProcess *sub_process,\n" " int max_threads);" msgstr "" #: xml/cut-multi-process.xml:347(para) msgid "" "Sets how many threads are used concurrently at a maximum in " "sub_process. -1 means no limit. This is same as --max-" "threads command line option." msgstr "" "sub_process中で同時に動く最大スレッド数を設定しま" "す。-1は制限がないことを意味します。これは--max-threadsコマンドラインオプショ" "ンと同じ意味を持ちます。" #: xml/cut-multi-process.xml:355(term) msgid "max_threads :" msgstr "" #: xml/cut-multi-process.xml:356(simpara) msgid "max number of threads used concurrently at a maximum." msgstr "同時に動く最大スレッド数。" #: xml/cut-multi-process.xml:361(title) msgid "cut_sub_process_get_exclude_files ()" msgstr "" #: xml/cut-multi-process.xml:363(programlisting) #, no-wrap msgid "const char ** cut_sub_process_get_exclude_files (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:364(para) msgid "Returns file names that are excluded from target test files." msgstr "テスト対象ファイルから除外されるファイル名を返します。" #: xml/cut-multi-process.xml:371(simpara) #: xml/cut-multi-process.xml:388(simpara) msgid "file names that are excluded from target test files." msgstr "テスト対象ファイルから除外されるファイル名。" #: xml/cut-multi-process.xml:376(title) msgid "cut_sub_process_set_exclude_files ()" msgstr "" #: xml/cut-multi-process.xml:378(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_exclude_files (CutSubProcess *sub_process,\n" " const char **files);" msgstr "" #: xml/cut-multi-process.xml:380(para) msgid "" "Sets file names that are excluded from target test files. This is same as --" "exclude-file command line option." msgstr "" "テスト対象から除外されるファイル名を指定します。これは--exclude-fileコマンド" "ラインオプションと同じ意味を持ちます。" #: xml/cut-multi-process.xml:387(term) msgid "files :" msgstr "" #: xml/cut-multi-process.xml:393(title) msgid "cut_sub_process_get_exclude_directories ()" msgstr "" #: xml/cut-multi-process.xml:395(programlisting) #, no-wrap msgid "" "const char ** cut_sub_process_get_exclude_directories\n" " (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:397(para) msgid "Returns directory names that are excluded from target test directories." msgstr "テスト対象ディレクトリから除外されるディレクトリ名を返します。" #: xml/cut-multi-process.xml:404(simpara) #: xml/cut-multi-process.xml:424(simpara) msgid "directory names that are excluded from target test directories." msgstr "テスト対象ディレクトリから除外されるディレクトリ名。" #: xml/cut-multi-process.xml:410(title) msgid "cut_sub_process_set_exclude_directories ()" msgstr "" #: xml/cut-multi-process.xml:412(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_exclude_directories\n" " (CutSubProcess *sub_process,\n" " const char **directories);" msgstr "" #: xml/cut-multi-process.xml:415(para) msgid "" "Sets directory names that are excluded from target test directories. This is " "same as --exclude-directory command line option." msgstr "" "テスト対象ディレクトリから除外されるディレクトリ名を指定します。これは--" "exclude-directoryコマンドラインオプションと同じ意味を持ちます。" #: xml/cut-multi-process.xml:423(term) msgid "directories :" msgstr "" #: xml/cut-multi-process.xml:429(title) msgid "cut_sub_process_get_target_test_case_names ()" msgstr "" #: xml/cut-multi-process.xml:431(programlisting) #, no-wrap msgid "" "const char ** cut_sub_process_get_target_test_case_names\n" " (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:433(para) msgid "Returns test case names that are ran." msgstr "実行されるテストケース名を返します。" #: xml/cut-multi-process.xml:439(simpara) #: xml/cut-multi-process.xml:457(simpara) msgid "test case names that are ran." msgstr "実行されるテストケース名。" #: xml/cut-multi-process.xml:444(title) msgid "cut_sub_process_set_target_test_case_names ()" msgstr "" #: xml/cut-multi-process.xml:446(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_target_test_case_names\n" " (CutSubProcess *sub_process,\n" " const char **names);" msgstr "" #: xml/cut-multi-process.xml:449(para) msgid "" "Sets test case names that are ran. This is same as --test-case command line " "option." msgstr "" "実行されるテストケース名を指定します。これは--test-caseコマンドラインオプショ" "ンと同じ意味を持ちます。" #: xml/cut-multi-process.xml:456(term) xml/cut-multi-process.xml:488(term) msgid "names :" msgstr "" #: xml/cut-multi-process.xml:461(title) msgid "cut_sub_process_get_target_test_names ()" msgstr "" #: xml/cut-multi-process.xml:463(programlisting) #, no-wrap msgid "" "const char ** cut_sub_process_get_target_test_names\n" " (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:465(para) msgid "Returns test names that are ran." msgstr "実行されるテスト名を返します。" #: xml/cut-multi-process.xml:471(simpara) #: xml/cut-multi-process.xml:489(simpara) msgid "test names that are ran." msgstr "実行されるテスト名。" #: xml/cut-multi-process.xml:476(title) msgid "cut_sub_process_set_target_test_names ()" msgstr "" #: xml/cut-multi-process.xml:478(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_target_test_names\n" " (CutSubProcess *sub_process,\n" " const char **names);" msgstr "" #: xml/cut-multi-process.xml:481(para) msgid "" "Sets test names that are ran. This is same as --test command line option." msgstr "" "実行されるテスト名を指定します。これは--testコマンドラインオプションと同じ意" "味を持ちます。" #: xml/cut-multi-process.xml:493(title) msgid "cut_sub_process_get_elapsed ()" msgstr "" #: xml/cut-multi-process.xml:495(programlisting) #, no-wrap msgid "double cut_sub_process_get_elapsed (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:496(para) msgid "Gets the time while sub_process was running." msgstr "sub_processを実行していた間の時間を取得します。" #: xml/cut-multi-process.xml:502(simpara) msgid "the time while sub_process was running." msgstr "sub_processを実行していた間の時間。" #: xml/cut-multi-process.xml:507(title) msgid "cut_sub_process_get_total_elapsed ()" msgstr "" #: xml/cut-multi-process.xml:509(programlisting) #, no-wrap msgid "double cut_sub_process_get_total_elapsed (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:510(para) msgid "Gets the sum of times that are used by each test." msgstr "各テストで使われた時間の合計を返します。" #: xml/cut-multi-process.xml:516(simpara) msgid "the sum of times that are used by each test." msgstr "各テストで使われた時間の合計。" #: xml/cut-multi-process.xml:521(title) msgid "cut_sub_process_is_crashed ()" msgstr "" #: xml/cut-multi-process.xml:523(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_is_crashed (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:524(para) msgid "Returns whether sub_process was crashed or not." msgstr "sub_processが異常終了したかどうかを返します。" #: xml/cut-multi-process.xml:530(simpara) msgid "" "CUT_TRUE if " "sub_process was crashed, CUT_FALSE otherwise." msgstr "" "sub_processが異常終了したときはCUT_TRUE、そうでない場合はCUT_FALSE。" #: xml/cut-multi-process.xml:536(title) msgid "cut_sub_process_get_fatal_failures ()" msgstr "" #: xml/cut-multi-process.xml:538(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_get_fatal_failures (CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:539(para) msgid "" "Returns whether sub_process is ran in fatal-failures " "mode. See cut_sub_process_set_fatal_failures() more " "details of fatal-failures mode." msgstr "" "sub_processが「失敗は致命的」モードで動くかどうかを返" "します。「失敗は致命的」モードの詳細はcut_sub_process_set_fatal_failures()を見てください。" #: xml/cut-multi-process.xml:547(simpara) msgid "" "CUT_TRUE if " "sub_process is ran in fatal-failures mode, CUT_FALSE otherwise." msgstr "" "sub_processが「失敗は致命的」モードで実行されるなら" "CUT_TRUE、そうでな" "ければCUT_FALSE。" #: xml/cut-multi-process.xml:553(title) msgid "cut_sub_process_set_fatal_failures ()" msgstr "" #: xml/cut-multi-process.xml:555(programlisting) #, no-wrap msgid "" "void cut_sub_process_set_fatal_failures (CutSubProcess *sub_process,\n" " cut_boolean fatal_failures);" msgstr "" #: xml/cut-multi-process.xml:557(para) msgid "" "Sets whether sub_process is ran in fatal-failures " "mode or not. In this mode, all failures are treated as fatal problems. It " "means that test is aborted on failure. On some environments, breakpoint is " "set." msgstr "" "sub_processが「失敗は致命的」モードで実行されるかどう" "かを設定します。このモードではすべての失敗は致命的な問題として扱われます。つ" "まり、失敗時にテストが異常終了します。いくつかの環境ではブレークポイントが設" "定されます。" #: xml/cut-multi-process.xml:563(para) msgid "This is same as --fatal-failures command line option." msgstr "--fatal-failuresコマンドラインオプションと同じ意味を持ちます。" #: xml/cut-multi-process.xml:569(term) msgid "fatal_failures :" msgstr "" #: xml/cut-multi-process.xml:570(simpara) msgid "" "CUT_TRUE to be ran " "in fatal-failures mode." msgstr "" "「失敗は致命的」モードで実行するならCUT_TRUE。" #: xml/cut-multi-process.xml:574(title) msgid "cut_take_new_sub_process_group ()" msgstr "" #: xml/cut-multi-process.xml:576(programlisting) #, no-wrap msgid "CutSubProcessGroup * cut_take_new_sub_process_group (void);" msgstr "" #: xml/cut-multi-process.xml:577(para) msgid "" "Creates a group of sub cutter process. A created group is owned by Cutter." msgstr "" "サブcuterプロセスのグループを作ります。作られたグループの所有者はCutterです。" #: xml/cut-multi-process.xml:581(simpara) #: xml/cut-multi-process.xml:594(simpara) #: xml/cut-multi-process.xml:609(simpara) #: xml/cut-multi-process.xml:626(simpara) #: xml/cut-multi-process.xml:638(simpara) msgid "" "a CutSubProcessGroup." msgstr "" "CutSubProcessGroupオ" "ブジェクト。" #: xml/cut-multi-process.xml:586(title) msgid "cut_sub_process_group_add ()" msgstr "" #: xml/cut-multi-process.xml:588(programlisting) #, no-wrap msgid "" "void cut_sub_process_group_add (CutSubProcessGroup *group,\n" " CutSubProcess *sub_process);" msgstr "" #: xml/cut-multi-process.xml:590(para) msgid "" "Adds sub_process to group." msgstr "" "sub_processgroupに追加しま" "す。" #: xml/cut-multi-process.xml:593(term) xml/cut-multi-process.xml:608(term) #: xml/cut-multi-process.xml:625(term) xml/cut-multi-process.xml:637(term) msgid "group :" msgstr "" #: xml/cut-multi-process.xml:601(title) msgid "cut_sub_process_group_run ()" msgstr "" #: xml/cut-multi-process.xml:603(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_group_run (CutSubProcessGroup *group);" msgstr "" #: xml/cut-multi-process.xml:604(para) msgid "" "Runs all sub cutter processes of group and returns " "the result of them." msgstr "" "group内のすべてのサブcutterプロセスを実行し、その結果" "を返します。" #: xml/cut-multi-process.xml:611(simpara) #: xml/cut-multi-process.xml:640(simpara) msgid "" "CUT_TRUE if all " "sub cutter processes of group are completed " "successfully, CUT_FALSE otherwise." msgstr "" "group内のすべてのサブcutterプロセスが正常終了したら" "CUT_TRUE、そうでな" "い場合はCUT_FALSE。" #: xml/cut-multi-process.xml:617(title) msgid "cut_sub_process_group_run_async ()" msgstr "" #: xml/cut-multi-process.xml:619(programlisting) #, no-wrap msgid "void cut_sub_process_group_run_async (CutSubProcessGroup *group);" msgstr "" #: xml/cut-multi-process.xml:620(para) msgid "" "Runs all sub cutter processes of group " "asynchronously. The result of them can be gotten by cut_sub_process_group_wait()." msgstr "" "group内のすべてのサブcutterプロセスを非同期で実行しま" "す。実行結果はcut_sub_process_group_wait()で取得できます。" #: xml/cut-multi-process.xml:630(title) msgid "cut_sub_process_group_wait ()" msgstr "" #: xml/cut-multi-process.xml:632(programlisting) #, no-wrap msgid "cut_boolean cut_sub_process_group_wait (CutSubProcessGroup *group);" msgstr "" #: xml/cut-multi-process.xml:633(para) msgid "" "Waits for all sub cutter processes of group that are " "ran asynchronously to complete and returns the result." msgstr "" "group内の非同期で実行されたすべてのサブcutterプロセス" "の終了を待ち、終了結果を返します。" #: xml/cut-helper.xml:7(refentrytitle) xml/cut-helper.xml:14(refname) #: xml/api-index-full.xml:83(link) xml/api-index-full.xml:211(link) #: xml/api-index-full.xml:212(link) xml/api-index-full.xml:213(link) #: xml/api-index-full.xml:225(link) xml/api-index-full.xml:226(link) #: xml/api-index-full.xml:231(link) xml/api-index-full.xml:232(link) #: xml/api-index-full.xml:240(link) xml/api-index-full.xml:241(link) #: xml/api-index-full.xml:242(link) xml/api-index-full.xml:246(link) #: xml/api-index-full.xml:249(link) xml/api-index-full.xml:312(link) #: xml/api-index-full.xml:313(link) xml/api-index-full.xml:314(link) #: xml/api-index-full.xml:315(link) xml/api-index-full.xml:316(link) #: xml/api-index-deprecated.xml:10(link) xml/api-index-deprecated.xml:26(link) #: xml/api-index-1.1.5.xml:13(link) xml/api-index-1.1.4.xml:13(link) #: xml/api-index-1.1.1.xml:8(link) xml/api-index-1.1.1.xml:9(link) #: xml/api-index-1.0.9.xml:11(link) xml/api-index-1.0.9.xml:12(link) #: xml/api-index-1.0.6.xml:15(link) xml/api-index-1.0.6.xml:16(link) #: xml/api-index-1.0.6.xml:17(link) xml/api-index-1.0.5.xml:23(link) #: xml/api-index-1.0.5.xml:24(link) xml/api-index-1.0.5.xml:32(link) #: xml/api-index-1.0.5.xml:33(link) xml/api-index-1.0.5.xml:34(link) #: xml/api-index-1.0.5.xml:35(link) xml/api-index-1.0.5.xml:36(link) #: xml/api-index-1.0.3.xml:17(link) msgid "Assertion writing helper" msgstr "検証作成の補助" #: xml/cut-helper.xml:15(refpurpose) msgid "Symbols in this section help you writing your own assertions." msgstr "このセクションにあるシンボルは独自検証を作成することを補助します。" #: xml/cut-helper.xml:22(link) xml/cut-helper.xml:131(primary) #: xml/api-index-full.xml:314(link) xml/api-index-1.0.5.xml:34(link) msgid "cut_test_pass" msgstr "" #: xml/cut-helper.xml:23(link) xml/cut-helper.xml:139(primary) #: xml/api-index-full.xml:312(link) xml/api-index-1.0.5.xml:32(link) msgid "cut_test_fail" msgstr "" #: xml/cut-helper.xml:23(parameter) xml/cut-helper.xml:25(parameter) msgid "const *system_message" msgstr "" #: xml/cut-helper.xml:25(link) xml/cut-helper.xml:158(primary) #: xml/api-index-full.xml:313(link) xml/api-index-deprecated.xml:26(link) #: xml/api-index-1.0.5.xml:33(link) msgid "cut_test_fail_va_list" msgstr "" #: xml/cut-helper.xml:26(parameter) msgid "" "const *user_message_format" msgstr "" #: xml/cut-helper.xml:27(link) xml/cut-helper.xml:192(title) #: xml/cut-helper.xml:193(primary) xml/api-index-full.xml:242(link) #: xml/api-index-1.0.6.xml:17(link) msgid "CUT_RELATIVE_PATH" msgstr "" #: xml/cut-helper.xml:28(link) xml/cut-helper.xml:254(primary) #: xml/api-index-full.xml:241(link) xml/api-index-1.0.6.xml:16(link) msgid "cut_push_backtrace" msgstr "" #: xml/cut-helper.xml:28(parameter) msgid "const *expression" msgstr "" #: xml/cut-helper.xml:29(link) xml/cut-helper.xml:270(primary) #: xml/api-index-full.xml:240(link) xml/api-index-1.0.6.xml:15(link) msgid "cut_pop_backtrace" msgstr "" #: xml/cut-helper.xml:30(link) xml/cut-helper.xml:281(primary) #: xml/api-index-full.xml:315(link) xml/api-index-1.0.5.xml:35(link) msgid "cut_trace" msgstr "" #: xml/cut-helper.xml:31(link) xml/cut-helper.xml:348(primary) #: xml/api-index-full.xml:316(link) xml/api-index-1.0.5.xml:36(link) msgid "cut_trace_with_info_expression" msgstr "" #: xml/cut-helper.xml:33(link) xml/cut-helper.xml:410(primary) #: xml/api-index-full.xml:83(link) xml/api-index-deprecated.xml:10(link) #: xml/api-index-1.0.3.xml:17(link) msgid "cut_append_diff" msgstr "" #: xml/cut-helper.xml:33(parameter) msgid "const *message" msgstr "" #: xml/cut-helper.xml:36(link) xml/cut-helper.xml:436(primary) #: xml/api-index-full.xml:249(link) xml/api-index-1.0.9.xml:12(link) msgid "cut_set_expected" msgstr "" #: xml/cut-helper.xml:37(link) xml/cut-helper.xml:455(primary) #: xml/api-index-full.xml:246(link) xml/api-index-1.0.9.xml:11(link) msgid "cut_set_actual" msgstr "" #: xml/cut-helper.xml:38(link) xml/cut-helper.xml:474(primary) #: xml/api-index-full.xml:232(link) msgid "cut_inspect_string_array" msgstr "" #: xml/cut-helper.xml:38(parameter) msgid "const **strings" msgstr "" #: xml/cut-helper.xml:39(link) xml/cut-helper.xml:487(primary) #: xml/api-index-full.xml:213(link) xml/api-index-1.0.5.xml:24(link) msgid "cut_equal_string" msgstr "" #: xml/cut-helper.xml:39(parameter) msgid "const *string1" msgstr "" #: xml/cut-helper.xml:40(parameter) msgid "const *string2" msgstr "" #: xml/cut-helper.xml:41(link) xml/cut-helper.xml:507(primary) #: xml/api-index-full.xml:211(link) xml/api-index-1.0.5.xml:23(link) msgid "cut_equal_double" msgstr "" #: xml/cut-helper.xml:41(parameter) msgid " double1" msgstr "" #: xml/cut-helper.xml:42(parameter) msgid " double2" msgstr "" #: xml/cut-helper.xml:43(parameter) xml/cut-assertions.xml:178(parameter) #: xml/cut-assertions.xml:182(parameter) msgid " error" msgstr "" #: xml/cut-helper.xml:44(link) xml/cut-helper.xml:530(primary) #: xml/api-index-full.xml:212(link) xml/api-index-1.1.1.xml:8(link) msgid "cut_equal_sockaddr" msgstr "" #: xml/cut-helper.xml:46(link) xml/cut-helper.xml:551(primary) #: xml/api-index-full.xml:231(link) xml/api-index-1.1.1.xml:9(link) msgid "cut_inspect_sockaddr" msgstr "" #: xml/cut-helper.xml:47(link) xml/cut-helper.xml:569(primary) #: xml/api-index-full.xml:226(link) xml/api-index-1.1.4.xml:13(link) msgid "cut_get_test_directory" msgstr "" #: xml/cut-helper.xml:48(link) xml/cut-helper.xml:580(primary) #: xml/api-index-full.xml:225(link) xml/api-index-1.1.5.xml:13(link) msgid "cut_get_source_directory" msgstr "" #: xml/cut-helper.xml:22(synopsis) #, no-wrap msgid "" " ();\n" " (,\n" " );\n" " (,\n" " );\n" "#define \n" " ();\n" " ();\n" "#define (expression)\n" "#define (expression,\n" " info_expression)\n" "const * (,\n" " ,\n" " );\n" "#define (expected)\n" "#define (actual)\n" "const * ();\n" " (,\n" " );\n" " (,\n" " ,\n" " );\n" "#define (address1,\n" " address2)\n" "#define (address)\n" "const * ();\n" "const * ();\n" msgstr "" #: xml/cut-helper.xml:54(para) msgid "" "You will need to write your own assertions for writing easy to read test. " "Symbols in this section help you writing your own assertions." msgstr "" "読みやすいテストを書くために独自の検証を作成する必要があるでしょう。このセク" "ションのシンボルは独自の検証作成を補助します。" #: xml/cut-helper.xml:59(para) msgid "e.g.:" msgstr "例:" #: xml/cut-helper.xml:64(programlisting) #, no-wrap msgid "" "\n" "#ifndef __MY_ASSERTIONS_H__\n" "#define __MY_ASSERTIONS_H__\n" "\n" "#include <cutter.h>\n" "\n" "#ifdef __cplusplus\n" "extern \"C\" {\n" "#endif\n" "\n" "#define my_assert_equal_int(expected, actual) \\\n" " cut_trace_with_info_expression( \\\n" " my_assert_equal_int_helper((expected), (actual), \\\n" " # expected, # actual), \\\n" " my_assert_equal_int(expected, actual, __VA_ARGS__))\n" "\n" "void my_assert_equal_int_help (long expected,\n" " long actual,\n" " const char *expression_expected,\n" " const char *expression_actual);\n" "\n" "#ifdef __cplusplus\n" "}\n" "#endif\n" "\n" "#endif\n" msgstr "" #: xml/cut-helper.xml:62(para) msgid "my-assertions.h: " msgstr "" #: xml/cut-helper.xml:94(programlisting) #, no-wrap msgid "" "\n" "#include \"my-assertions.h\"\n" "\n" "void\n" "my_assert_equal_int_helper (long expected,\n" " long actual,\n" " const char *expression_expected,\n" " const char *expression_actual)\n" "{\n" " if (expected == actual) {\n" " cut_test_pass();\n" " } else {\n" " cut_test_fail(cut_take_printf(\"<%s == %s>\\n\"\n" " \"expected: <%ld>\\n\"\n" " \" actual: <%ld>\",\n" " expression_expected,\n" " expression_actual,\n" " expected, actual));\n" " }\n" "}\n" msgstr "" #: xml/cut-helper.xml:92(para) msgid "my-assertions.c: " msgstr "" #: xml/cut-helper.xml:118(programlisting) #, no-wrap msgid "" "\n" "AM_CFLAGS = $(CUTTER_CFLAGS)\n" "LIBS = $(CUTTER_LIBS)\n" "noinst_LTLIBRARIES = libmy-assertions.la\n" "libmy_assertions_la_SOURCES = my-assertions.c my-assertions.h\n" "AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined\n" msgstr "" #: xml/cut-helper.xml:130(title) msgid "cut_test_pass ()" msgstr "" #: xml/cut-helper.xml:132(programlisting) #, no-wrap msgid "void cut_test_pass (void);" msgstr "" #: xml/cut-helper.xml:133(para) msgid "" "Call cut_test_pass() if an assertion is passed. cut_test_pass() counts up n-assertions." msgstr "" "検証をパスしたらcut_test_pass()を呼んでください。cut_test_pass()は検証数を増やします。" #: xml/cut-helper.xml:138(title) msgid "cut_test_fail ()" msgstr "" #: xml/cut-helper.xml:140(programlisting) #, no-wrap msgid "" "void cut_test_fail (const char *system_message,\n" " ...);" msgstr "" #: xml/cut-helper.xml:142(para) msgid "" "Call cut_test_fail() if an assertion is failed. cut_test_fail() counts up n-failures and " "terminate the current test." msgstr "" "検証が失敗したらcut_test_fail()を呼んでください。cut_test_fail()は失敗数を増やし、現在のテスト" "を中断します。" #: xml/cut-helper.xml:147(term) xml/cut-helper.xml:183(term) msgid "system_message :" msgstr "" #: xml/cut-helper.xml:148(simpara) xml/cut-helper.xml:184(simpara) msgid "a failure message from testing system." msgstr "テストフレームワーク指定の失敗メッセージ。" #: xml/cut-helper.xml:151(simpara) msgid "" "optional format string, followed by parameters to insert into the format " "string. (as with printf()) This is deprecated since 0.1.6. Use cut_set_message() instead." msgstr "" "省略可能な整形文字列。以降のパラメータが整形文字列に挿入されます。(printf()と同じ。)このパラメー" "タは0.1.6から非推奨となっています。代わりにcut_set_message()を使ってください。" #: xml/cut-helper.xml:157(title) msgid "cut_test_fail_va_list ()" msgstr "" #: xml/cut-helper.xml:159(programlisting) #, no-wrap msgid "" "void cut_test_fail_va_list (const char *system_message,\n" " const char *user_message_format);" msgstr "" #: xml/cut-helper.xml:161(para) msgid "" "cut_test_fail_va_list has been deprecated since version " "1.0.6 and should not be used in newly-written code. Use cut_test_fail() instead." msgstr "" "cut_test_fail_va_listはバージョン1.0.6から非推奨になりまし" "た。新しく書くコードでは使わないで下さい。代わりにcut_test_fail()を使ってください。" #: xml/cut-helper.xml:162(para) msgid "" "See cut_test_fail() for cut_test_fail_va_list()'s behavior. " "user_message_format is the prior variable of variable " "length arguments." msgstr "" "cut_test_fail_va_list()の動作についてはcut_test_fail()を見てください。" "user_message_formatは可変長引数の1つ前の引数です。" #: xml/cut-helper.xml:169(programlisting) #, no-wrap msgid "" "\n" "void\n" "my_assert(cut_boolean result,\n" " const gchar *user_message_format,\n" " ...)\n" "{\n" " if (result) {\n" " cut_test_pass();\n" " } else {\n" " cut_test_fail_va_list(\"Fail!\", user_message_format);\n" " }\n" "}\n" msgstr "" #: xml/cut-helper.xml:187(term) msgid "user_message_format :" msgstr "" #: xml/cut-helper.xml:188(simpara) msgid "a failure message from user." msgstr "ユーザ指定の失敗メッセージ。" #: xml/cut-helper.xml:194(programlisting) #, no-wrap msgid "# define CUT_RELATIVE_PATH NULL\n" msgstr "" #: xml/cut-helper.xml:196(para) msgid "" "Define this macro in a source code or build option (e.g. -DCUT_RELATIVE_PATH=" "\\\"\"sub/dir/\"\\\") if the source code is built as shared library and used " "it as helper library of your test. If this path isn't set, you can't get " "correct path from cut_trace() and cut_trace_with_info_expression()." msgstr "" "もし、テスト用の補助ライブラリを共有ライブラリとして使っている場合は、補助ラ" "イブラリのソースコード中またはビルドオプション(例: -DCUT_RELATIVE_PATH=\\" "\"\"sub/dir/\"\\\")でこのマクロを定義してください。もし、このパスが設定され" "ていない場合はcut_trace()cut_trace_with_info_expression()で正しいパスが" "得られません。" #: xml/cut-helper.xml:204(para) msgid "Here is an example structure for explain:" msgstr "説明用のディレクト構成例です。" #: xml/cut-helper.xml:208(programlisting) #, no-wrap msgid "" "\n" "--- core-lib/ --- XXX.c # Your core library\n" " | +- ...\n" " | +- YYY.c\n" " +- util-lib/ --- AAA.c # Your utility library\n" " | +- ...\n" " | +- BBB.c\n" " |\n" " +- test/ --- core/ --- test-XXX.c # Tests for your core library\n" " | +- ...\n" " | +- test-YYY.c\n" " +- util/ --- test-AAA.c # Tests for your utility library\n" " | +- ...\n" " | +- test-BBB.c\n" " +- lib/ --- my-assertions.c # Your library of tests.\n" " +- my-assertions.h # This library will be used\n" " | # as shared library of your\n" " | # tests (test/core/test-*.so\n" " | # and test/util/test-*.so)\n" " +- ...\n" "\n" " % cutter --source-directory=test test\n" msgstr "" "\n" "--- core-lib/ --- XXX.c # コアライブラリ\n" " | +- ...\n" " | +- YYY.c\n" " +- util-lib/ --- AAA.c # 便利ライブラリ\n" " | +- ...\n" " | +- BBB.c\n" " |\n" " +- test/ --- core/ --- test-XXX.c # コアライブラリのテスト\n" " | +- ...\n" " | +- test-YYY.c\n" " +- util/ --- test-AAA.c # 便利ライブラリのテスト\n" " | +- ...\n" " | +- test-BBB.c\n" " +- lib/ --- my-assertions.c # テスト用補助ライブラリ\n" " +- my-assertions.h # テスト中(\n" " | # test/core/test-*.soと\n" " | # test/util/test-*.soの中)\n" " | # で共有ライブラリとして使われる\n" " +- ...\n" "\n" " % cutter --source-directory=test test\n" #: xml/cut-helper.xml:232(para) msgid "" "In the above example structure, you need to define CUT_RELATIVE_PATH as \"lib\" " "in test/lib/my-assertions.c because my-assertions.c is in lib/ directory " "from source directory \"test\" specified by command line option --source-" "directory." msgstr "" "上記の構成例では、test/lib/my-assertions.cではCUT_RELATIVE_PATHを\"lib\"と定義しなけ" "ればいけません。これは、:source-directoryコマンドラインオプションで指定した" "\"test\"ソースディレクトリからみてlib/ディレクトリにmy-assertions.cがあるから" "です。" #: xml/cut-helper.xml:239(para) msgid "Here are example code and build option:" msgstr "コードとビルドオプションの例です。" #: xml/cut-helper.xml:243(programlisting) #, no-wrap msgid "" "\n" "test/lib/my-assertions.c:\n" " #define CUT_RELATIVE_PATH \"lib\"\n" " #include <cutter.h>\n" "\n" "build option:\n" " % gcc -DCUT_RELATIVE_PATH=\"\\\"lib\\\"\" ...\n" msgstr "" #: xml/cut-helper.xml:253(title) msgid "cut_push_backtrace ()" msgstr "cut_push_backtrace ()" #: xml/cut-helper.xml:255(programlisting) #, no-wrap msgid "void cut_push_backtrace (const char *expression);" msgstr "" #: xml/cut-helper.xml:256(para) msgid "" "Pushes expression and the current source place to the " "backtrace stack." msgstr "" "expressionと現在のソースの場所をバックトレーススタック" "にプッシュします。" #: xml/cut-helper.xml:260(para) xml/cut-helper.xml:275(para) msgid "" "Normally, you don't need to use it directory. cut_trace() is enough." msgstr "" "通常は直接使う必要はありません。cut_trace()で十分です。" #: xml/cut-helper.xml:264(term) xml/cut-helper.xml:342(term) #: xml/cut-helper.xml:401(term) xml/cut-assertions.xml:341(term) #: xml/cut-assertions.xml:356(term) xml/cut-assertions.xml:371(term) #: xml/cut-assertions.xml:444(term) xml/cut-assertions.xml:474(term) msgid "expression :" msgstr "" #: xml/cut-helper.xml:265(simpara) xml/cut-helper.xml:343(simpara) #: xml/cut-helper.xml:402(simpara) msgid "an expression to be traced." msgstr "呼び出されたことを記録される式。" #: xml/cut-helper.xml:269(title) msgid "cut_pop_backtrace ()" msgstr "" #: xml/cut-helper.xml:271(programlisting) #, no-wrap msgid "void cut_pop_backtrace (void);" msgstr "" #: xml/cut-helper.xml:272(para) msgid "Pops a backtrace from the backtrace stack." msgstr "バックトレーススタックからバックトレースをポップします。" #: xml/cut-helper.xml:280(title) msgid "cut_trace()" msgstr "" #: xml/cut-helper.xml:282(programlisting) #, no-wrap msgid "#define cut_trace(expression)" msgstr "" #: xml/cut-helper.xml:283(para) msgid "" "Mark the current file, line, function and expression " "and show it when assertion is failed in expression. " "Most of expression will be function call." msgstr "" "現在のファイル名、行番号、関数名、expressionを記憶し、" "expression内で検証が失敗した場合に表示します。" "expressionの多くは関数呼び出しになるでしょう。" #: xml/cut-helper.xml:288(para) msgid "" "Note that you can't get return value of expression." msgstr "" "expressionの戻り値を取得できないことに注意してくださ" "い。" #: xml/cut-helper.xml:291(para) msgid "" "Here is an example of cut_trace(). If cut_assert_not_null(object) is failed, you will get a " "backtrace that contains two line; cut_assert_not_null(object) and " "create_my_object(\"my-name\")." msgstr "" "cut_trace()は以下の通" "りです。もし、cut_assert_not_null(object)が失敗したら、バックトレースには2行" "含まれます。cut_assert_not_null(object)とcreate_my_object(\"my-name\")です。" #: xml/cut-helper.xml:299(programlisting) #, no-wrap msgid "" "\n" "static MyObject *object;\n" "\n" "static void\n" "create_my_object(const char *name)\n" "{\n" " object = my_object_new(name);\n" " cut_assert_not_null(object);\n" "}\n" "\n" "void\n" "test_my_object_name(void)\n" "{\n" " cut_trace(create_my_object(\"my-name\"));\n" " cut_assert_equal_string(\"my-name\",\n" " my_object_get_name(object));\n" "}\n" msgstr "" #: xml/cut-helper.xml:320(programlisting) #, no-wrap msgid "" "\n" "static MyObject *object;\n" "\n" "static void\n" "create_my_object_helper(const char *name)\n" "{\n" " object = my_object_new(name);\n" " cut_assert_not_null(object);\n" "}\n" "\n" "#define create_my_object(...) \\\n" " cut_trace(create_my_object_helper(__VA_ARGS__))\n" "\n" "void\n" "test_my_object_name(void)\n" "{\n" " create_my_object(\"my-name\");\n" " cut_assert_equal_string(\"my-name\",\n" " my_object_get_name(object));\n" "}\n" msgstr "" #: xml/cut-helper.xml:318(para) msgid "" "You will use cut_trace() with macro for test readability: " msgstr "" "テストを読みやすくするためにcut_trace()" "を使ったマクロを書くかもしれません: " #: xml/cut-helper.xml:347(title) msgid "cut_trace_with_info_expression()" msgstr "" #: xml/cut-helper.xml:349(programlisting) #, no-wrap msgid "#define cut_trace_with_info_expression(expression, info_expression)" msgstr "" #: xml/cut-helper.xml:350(para) msgid "" "It's difference between cut_trace() and cut_trace_with_info_expression() that traced " "expression is the same expression as expression or " "not. cut_trace_with_info_expression() is useful " "when you want to hide some information in expression " "for backtrace readability." msgstr "" "cut_trace()cut_trace_with_info_expression()の違いは記録さ" "れる式がexpressionと同じかどうかです。cut_trace_with_info_expression()" "はバックトレースの読みやすさのためにexpressionから情報を隠したいときに便利です。" #: xml/cut-helper.xml:364(para) msgid "cut_assert_not_null(object)" msgstr "" #: xml/cut-helper.xml:365(para) msgid "create_my_object(\"my-name\") not create_my_object_helper(\"my-name\")" msgstr "" "create_my_object_helper(\"my-name\")ではなくcreate_my_object(\"my-name\")" #: xml/cut-helper.xml:358(para) msgid "" "Here is an example of cut_trace_with_info_expression(). If " "cut_assert_not_null(object) is failed, you will get a backtrace that " "contains two line: If you use cut_trace() instead of cut_trace_with_info_expression(), you will get create_my_object_helper(\"my-name\"). You may " "be confused about 'Where is create_my_object_helper(\"my-name\") from? test_my_object_name() uses create_my_object(\"my-name\") but does not use " "create_my_object_helper(\"my-name\").'." msgstr "" "cut_trace_with_info_expression()の例です。" "cut_assert_not_null(object)が失敗すると以下の2行を含んだバックトレースが得ら" "れます:もし、cut_trace_with_info_expression()ではなくcut_trace()を使った場合は" "create_my_object_helper(\"my-name\")になります。もし、create_my_object_helper" "(\"my-name\")が得られたら以下のように混乱してしまうかもしれません。" "「create_my_object_helper(\"my-name\")はどこからきたんだ?test_my_object_name()は" "create_my_object(\"my-name\")は使っているけど、create_my_object_helper(\"my-" "name\")は使っていないぞ。」" #: xml/cut-helper.xml:377(programlisting) #, no-wrap msgid "" "\n" "static MyObject *object;\n" "\n" "static void\n" "create_my_object_helper(const char *name)\n" "{\n" " object = my_object_new(name);\n" " cut_assert_not_null(object);\n" "}\n" "\n" "#define create_my_object(...) \\\n" " cut_trace_with_info_expression( \\\n" " create_my_object_helper(__VA_ARGS__), \\\n" " create_my_object(__VA_ARGS__))\n" "\n" "void\n" "test_my_object_name(void)\n" "{\n" " create_my_object(\"my-name\");\n" " cut_assert_equal_string(\"my-name\",\n" " my_object_get_name(object));\n" "}\n" msgstr "" #: xml/cut-helper.xml:404(term) msgid "info_expression :" msgstr "" #: xml/cut-helper.xml:405(simpara) msgid "a traced expression." msgstr "呼び出されたと記録される式。" #: xml/cut-helper.xml:409(title) msgid "cut_append_diff ()" msgstr "" #: xml/cut-helper.xml:411(programlisting) #, no-wrap msgid "" "const char * cut_append_diff (const char *message,\n" " const char *from,\n" " const char *to);" msgstr "" #: xml/cut-helper.xml:414(para) msgid "" "cut_append_diff has been deprecated since version 1.0.9 " "and should not be used in newly-written code. Use cut_set_expected() and cut_set_actual() instead." msgstr "" "cut_append_diffはバージョン1.0.9から非推奨になりました。新" "しく書くコードでは使わないでください。代わりにcut_set_expected()cut_set_actual()を使ってくださ" "い。" #: xml/cut-helper.xml:416(para) msgid "" "Computes diff between from and to and append the diff to message. Returned " "string is owned by Cutter." msgstr "" "fromtoのdiffを計算し、その" "diffをmessageに追加します。戻り値の文字列の所有者は" "Cutterです。" #: xml/cut-helper.xml:421(simpara) msgid "the string to be appended diff." msgstr "diffが追加される文字列。" #: xml/cut-helper.xml:429(simpara) msgid "" "message with diff between from " "and to or same as message if " "the diff not interested. Don't free it." msgstr "" "fromto間のdiff付きの" "message。必要なさそうなdiffであれば" "messageと同じ。開放しないでください。" #: xml/cut-helper.xml:435(title) msgid "cut_set_expected()" msgstr "" #: xml/cut-helper.xml:437(programlisting) #, no-wrap msgid "#define cut_set_expected(expected)" msgstr "" #: xml/cut-helper.xml:438(para) msgid "Sets an inspected expected object to be used by the next assertion." msgstr "次の検証で使う詳細化した期待値オブジェクトを設定します。" #: xml/cut-helper.xml:442(para) xml/cut-helper.xml:461(para) msgid "" "If both of expected and actual object are set and diff of them is needed, " "the diff is generated automatically." msgstr "" "期待値オブジェクトと実際値オブジェクトの両方が設定され、それらのdiffが必要な" "場合は自動的にdiffを生成します。" #: xml/cut-helper.xml:446(para) msgid "" "See also cut_set_actual()." msgstr "" "cut_set_actual()" "も見てください。" #: xml/cut-helper.xml:450(simpara) msgid "the inspected expected object." msgstr "期待値オブジェクトの詳細。" #: xml/cut-helper.xml:454(title) msgid "cut_set_actual()" msgstr "" #: xml/cut-helper.xml:456(programlisting) #, no-wrap msgid "#define cut_set_actual(actual)" msgstr "" #: xml/cut-helper.xml:457(para) msgid "Sets an inspected actual object to be used by the next assertion." msgstr "次の検証で使う詳細化した実際値オブジェクトを設定します。" #: xml/cut-helper.xml:465(para) msgid "" "See also cut_set_expected()." msgstr "" "cut_set_expected()も見てください。" #: xml/cut-helper.xml:469(simpara) msgid "the inspected actual object." msgstr "実測値オブジェクトの詳細。" #: xml/cut-helper.xml:473(title) msgid "cut_inspect_string_array ()" msgstr "" #: xml/cut-helper.xml:475(programlisting) #, no-wrap msgid "const char * cut_inspect_string_array (const char **strings);" msgstr "" #: xml/cut-helper.xml:476(para) msgid "" "Formats strings as human readable string that is " "owned by Cutter." msgstr "" "stringsを人が読みやすい文字列に整形します。整形された" "文字列の所有者はCutterです。" #: xml/cut-helper.xml:480(simpara) msgid "the array of strings to be inspected." msgstr "整形される文字列の配列。" #: xml/cut-helper.xml:486(title) msgid "cut_equal_string ()" msgstr "" #: xml/cut-helper.xml:488(programlisting) #, no-wrap msgid "" "cut_boolean cut_equal_string (const char *string1,\n" " const char *string2);" msgstr "" #: xml/cut-helper.xml:490(para) msgid "" "Compare string1 to string2. " "string1 and/or string2 maybe " "NULL." msgstr "" "string1string2を比較します。" "string1あるいはstring2、または" "両方がNULLでもかまいま" "せん。" #: xml/cut-helper.xml:495(simpara) xml/cut-helper.xml:498(simpara) msgid "a string." msgstr "文字列。" #: xml/cut-helper.xml:500(simpara) msgid "" "CUT_TRUE if both " "string1 and string2 are NULL or have the same " "contents; CUT_FALSE otherwise." msgstr "" "string1string2が両方NULL、あるいは同じ内容の場合" "はCUT_TRUE、そうで" "ない場合はCUT_FALSE。" #: xml/cut-helper.xml:506(title) msgid "cut_equal_double ()" msgstr "" #: xml/cut-helper.xml:508(programlisting) #, no-wrap msgid "" "cut_boolean cut_equal_double (double double1,\n" " double double2,\n" " double error);" msgstr "" #: xml/cut-helper.xml:511(para) msgid "" "Compare double1 to double2 " "with error range." msgstr "" "double1double2を誤差範囲" "errorで比較します。" #: xml/cut-helper.xml:514(term) msgid "double1 :" msgstr "" #: xml/cut-helper.xml:515(simpara) xml/cut-helper.xml:518(simpara) msgid "a double value." msgstr "浮動小数点値。" #: xml/cut-helper.xml:517(term) msgid "double2 :" msgstr "" #: xml/cut-helper.xml:521(simpara) msgid "a double value that specifies error range." msgstr "誤差範囲を示す浮動小数点数。" #: xml/cut-helper.xml:523(simpara) msgid "" "CUT_TRUE if |" "double1 - double2| <= " "error; CUT_FALSE otherwise." msgstr "" "|double1 - double2| <= " "errorならCUT_TRUE、そうでなければCUT_FALSE。" #: xml/cut-helper.xml:529(title) msgid "cut_equal_sockaddr()" msgstr "" #: xml/cut-helper.xml:531(programlisting) #, no-wrap msgid "#define cut_equal_sockaddr(address1, address2)" msgstr "" #: xml/cut-helper.xml:532(para) msgid "" "Compare address1 to address2." msgstr "" "address1address2を比較しま" "す。" #: xml/cut-helper.xml:535(para) xml/cut-helper.xml:557(para) msgid "This function can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT." msgstr "この関数はCUT_DISABLE_SOCKET_SUPPORTを定義すると無効にできます。" #: xml/cut-helper.xml:538(term) msgid "address1 :" msgstr "" #: xml/cut-helper.xml:539(simpara) xml/cut-helper.xml:542(simpara) msgid "a socket address." msgstr "ソケットアドレス。" #: xml/cut-helper.xml:541(term) msgid "address2 :" msgstr "" #: xml/cut-helper.xml:544(simpara) msgid "" "CUT_TRUE if " "address1 == address2, CUT_FALSE otherwise." msgstr "" "sub_processが異常終了したときはCUT_TRUE、そうでない場合はCUT_FALSE。" #: xml/cut-helper.xml:550(title) msgid "cut_inspect_sockaddr()" msgstr "" #: xml/cut-helper.xml:552(programlisting) #, no-wrap msgid "#define cut_inspect_sockaddr(address)" msgstr "" #: xml/cut-helper.xml:553(para) msgid "" "Formats address as human readable string that is " "owned by Cutter." msgstr "" "addressを人が読みやすい文字列に整形します。整形された" "文字列の所有者はCutterです。" #: xml/cut-helper.xml:560(term) msgid "address :" msgstr "" #: xml/cut-helper.xml:561(simpara) msgid "the socket address to be inspected." msgstr "詳細化されるソケットアドレス。" #: xml/cut-helper.xml:563(simpara) msgid "a inspected socket address owned by Cutter. Don't free it." msgstr "Cutterが所有する整形されたソケットアドレス。解放しないで下さい。" #: xml/cut-helper.xml:568(title) msgid "cut_get_test_directory ()" msgstr "" #: xml/cut-helper.xml:570(programlisting) #, no-wrap msgid "const char * cut_get_test_directory (void);" msgstr "" #: xml/cut-helper.xml:571(para) msgid "Gets the test directory name which is specified by command line." msgstr "コマンドラインで指定されたテストディレクトリ名を返します。" #: xml/cut-helper.xml:574(simpara) xml/cut-helper.xml:585(simpara) msgid "a string owned by Cutter that must not be modified or freed." msgstr "Cutterが所有する文字列。解放しないで下さい。" #: xml/cut-helper.xml:579(title) msgid "cut_get_source_directory ()" msgstr "" #: xml/cut-helper.xml:581(programlisting) #, no-wrap msgid "const char * cut_get_source_directory (void);" msgstr "" #: xml/cut-helper.xml:582(para) msgid "Gets the source directory name which is specified by command line." msgstr "コマンドラインで指定されたソースディレクトリ名を返します。" #: xml/cut-features.xml:7(refentrytitle) xml/cut-features.xml:14(refname) #: xml/api-index-full.xml:287(link) xml/api-index-full.xml:288(link) #: xml/api-index-full.xml:289(link) xml/api-index-full.xml:290(link) #: xml/api-index-full.xml:291(link) msgid "Available features" msgstr "利用可能な機能一覧" #: xml/cut-features.xml:15(refpurpose) msgid "Available features in the installed Cutter." msgstr "インストールされているCutterで利用可能な機能一覧。" #: xml/cut-features.xml:21(link) xml/cut-features.xml:39(title) #: xml/cut-features.xml:40(primary) xml/api-index-full.xml:290(link) msgid "CUT_SUPPORT_GLIB" msgstr "" #: xml/cut-features.xml:22(link) xml/cut-features.xml:48(title) #: xml/cut-features.xml:49(primary) xml/api-index-full.xml:288(link) msgid "CUT_SUPPORT_GDK_PIXBUF" msgstr "" #: xml/cut-features.xml:23(link) xml/cut-features.xml:57(title) #: xml/cut-features.xml:58(primary) xml/api-index-full.xml:289(link) msgid "CUT_SUPPORT_GIO" msgstr "" #: xml/cut-features.xml:24(link) xml/cut-features.xml:65(title) #: xml/cut-features.xml:66(primary) xml/api-index-full.xml:291(link) msgid "CUT_SUPPORT_LIBSOUP" msgstr "" #: xml/cut-features.xml:25(link) xml/cut-features.xml:73(title) #: xml/cut-features.xml:74(primary) xml/api-index-full.xml:287(link) msgid "CUT_SUPPORT_C99_STDINT_TYPES" msgstr "" #: xml/cut-features.xml:21(synopsis) #, no-wrap msgid "" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" msgstr "" #: xml/cut-features.xml:31(para) msgid "" "There are some macros to check a feature is available in the installed " "Cutter." msgstr "" "インストールされているCutterで利用可能な機能かどうかを確認するマクロがありま" "す。" #: xml/cut-features.xml:41(programlisting) #, no-wrap msgid "#define CUT_SUPPORT_GLIB 1\n" msgstr "" #: xml/cut-features.xml:43(para) msgid "" "Shows GLib support is available. That is, we can use <gcutter.h>. It " "is always defined." msgstr "" "GLibサポートが利用可能であることを示します。つまり、<gcutter.h>を使える" "ということです。このマクロは常に定義されます。" #: xml/cut-features.xml:50(programlisting) #, no-wrap msgid "#define CUT_SUPPORT_GDK_PIXBUF 1\n" msgstr "" #: xml/cut-features.xml:52(para) msgid "" "Shows GdkPixbuf support is available. That is, we can use <gdkcutter-" "pixbuf.h>." msgstr "" "GdkPixbufサポートが利用可能であることを示します。つまり、<gdkcutter-" "pixbuf.h>を使えるということです。" #: xml/cut-features.xml:59(programlisting) #, no-wrap msgid "#define CUT_SUPPORT_GIO 1\n" msgstr "" #: xml/cut-features.xml:61(para) msgid "Shows GIO support is available." msgstr "" #: xml/cut-features.xml:67(programlisting) #, no-wrap msgid "#define CUT_SUPPORT_LIBSOUP 1\n" msgstr "" #: xml/cut-features.xml:69(para) msgid "Shows LibSoup support is available." msgstr "" #: xml/cut-features.xml:75(programlisting) #, no-wrap msgid "#define CUT_SUPPORT_C99_STDINT_TYPES 1\n" msgstr "" #: xml/cut-features.xml:77(para) msgid "" "Shows C99 stdint types support is available. That is, we can use assertions " "that use C99 stdint types. e.g. cut_assert_equal_int_least8()." msgstr "" "C99の整数型のサポートが利用可能であることを示します。つまり、C99の整数型を利" "用した検証を利用できるということです。例えば、cut_assert_equal_int_least8()" "がC99の整数型を利用した検証です。" #: xml/cut-experimental.xml:7(refentrytitle) #: xml/cut-experimental.xml:14(refname) xml/api-index-full.xml:219(link) #: xml/api-index-full.xml:220(link) xml/api-index-full.xml:221(link) #: xml/api-index-full.xml:318(link) xml/api-index-0.8.xml:10(link) #: xml/api-index-0.8.xml:11(link) xml/api-index-0.8.xml:12(link) #: xml/api-index-0.8.xml:14(link) msgid "Experimental" msgstr "実験" #: xml/cut-experimental.xml:15(refpurpose) msgid "Experimental API." msgstr "実験的なAPI" #: xml/cut-experimental.xml:21(link) xml/cut-experimental.xml:38(title) #: xml/cut-experimental.xml:39(primary) xml/api-index-full.xml:219(link) #: xml/api-index-0.8.xml:10(link) msgid "cut_fork" msgstr "" #: xml/cut-experimental.xml:22(link) xml/cut-experimental.xml:65(primary) #: xml/api-index-full.xml:318(link) xml/api-index-0.8.xml:14(link) msgid "cut_wait_process" msgstr "" #: xml/cut-experimental.xml:24(link) xml/cut-experimental.xml:95(primary) #: xml/api-index-full.xml:221(link) xml/api-index-0.8.xml:12(link) msgid "cut_fork_get_stdout_message" msgstr "" #: xml/cut-experimental.xml:25(link) xml/cut-experimental.xml:125(primary) #: xml/api-index-full.xml:220(link) xml/api-index-0.8.xml:11(link) msgid "cut_fork_get_stderr_message" msgstr "" #: xml/cut-experimental.xml:21(synopsis) #, no-wrap msgid "" "#define \n" "#define (pid,\n" " usec_timeout)\n" "#define (pid)\n" "#define (pid)\n" msgstr "" #: xml/cut-experimental.xml:31(para) msgid "This API may be changed in the future." msgstr "将来、このAPIは変更されるかもしれません。" #: xml/cut-experimental.xml:40(programlisting) #, no-wrap msgid "#define cut_fork()" msgstr "" #: xml/cut-experimental.xml:41(para) msgid "Makes child process." msgstr "子プロセスを生成します。" #: xml/cut-experimental.xml:46(programlisting) #, no-wrap msgid "" "\n" "int pid;\n" "pid = cut_fork();\n" "cut_assert_errno();\n" "\n" "if (pid == 0) {\n" " do_something_for_child_process();\n" " _exit(EXIT_SUCCESS);\n" "}\n" "\n" "do_something_for_parent_process();\n" msgstr "" #: xml/cut-experimental.xml:59(simpara) xml/cut-experimental.xml:117(simpara) #: xml/cut-experimental.xml:147(simpara) msgid "Process ID." msgstr "プロセスID。" #: xml/cut-experimental.xml:64(title) msgid "cut_wait_process()" msgstr "" #: xml/cut-experimental.xml:66(programlisting) #, no-wrap msgid "#define cut_wait_process(pid, usec_timeout)" msgstr "" #: xml/cut-experimental.xml:67(para) msgid "Waits a process specified by pid." msgstr "pidで指定されたプロセスの終了を待ちます。" #: xml/cut-experimental.xml:72(programlisting) #, no-wrap msgid "" "\n" "int pid;\n" "pid = cut_fork();\n" "cut_assert_errno();\n" "\n" "if (pid == 0) {\n" " do_something_for_child_process();\n" " _exit(EXIT_SUCCESS);\n" "}\n" "\n" "do_something_for_parent_process();\n" "cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));\n" msgstr "" #: xml/cut-experimental.xml:87(simpara) msgid "Process ID to wait." msgstr "終了を待つプロセスのID。" #: xml/cut-experimental.xml:89(term) msgid "usec_timeout :" msgstr "" #: xml/cut-experimental.xml:90(simpara) msgid "Timeout in usec." msgstr "タイムアウトする時間。100万分の1秒単位で指定。" #: xml/cut-experimental.xml:94(title) msgid "cut_fork_get_stdout_message()" msgstr "" #: xml/cut-experimental.xml:96(programlisting) #, no-wrap msgid "#define cut_fork_get_stdout_message(pid)" msgstr "" #: xml/cut-experimental.xml:97(para) xml/cut-experimental.xml:127(para) msgid "Reads a message from a process specified by pid." msgstr "" "pidで指定されたプロセスからメッセージを読みます。" #: xml/cut-experimental.xml:102(programlisting) #, no-wrap msgid "" "\n" "int pid;\n" "pid = cut_fork();\n" "cut_assert_errno();\n" "\n" "if (pid == 0) {\n" " g_print(\"I'm a child.\");\n" " _exit(EXIT_SUCCESS);\n" "}\n" "\n" "cut_assert_equal_string(\"I'm a child.\", cut_fork_get_stdout_message(pid));\n" "cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));\n" msgstr "" #: xml/cut-experimental.xml:119(simpara) msgid "" "a message read from stdout of a process specified by pid." msgstr "" "pidで指定されたプロセスの標準出力から読み込まれたメッ" "セージ。" #: xml/cut-experimental.xml:124(title) msgid "cut_fork_get_stderr_message()" msgstr "" #: xml/cut-experimental.xml:126(programlisting) #, no-wrap msgid "#define cut_fork_get_stderr_message(pid)" msgstr "" #: xml/cut-experimental.xml:132(programlisting) #, no-wrap msgid "" "\n" "int pid;\n" "pid = cut_fork();\n" "cut_assert_errno();\n" "\n" "if (pid == 0) {\n" " g_print(\"I'm a child.\");\n" " _exit(EXIT_SUCCESS);\n" "}\n" "\n" "cut_assert_equal_string(\"I'm a child.\", cut_fork_get_stderr_message(pid));\n" "cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));\n" msgstr "" #: xml/cut-experimental.xml:149(simpara) msgid "" "a message read from stderr of a process specified by pid." msgstr "" "pidで指定されたプロセスの標準エラー出力から読み込まれ" "たメッセージ。" #: xml/cut-differ.xml:7(refentrytitle) xml/cut-differ.xml:14(refname) msgid "CutDiffer" msgstr "" #: xml/cut-console.xml:7(refentrytitle) xml/cut-console.xml:14(refname) #: xml/api-index-full.xml:182(link) xml/api-index-full.xml:183(link) #: xml/api-index-full.xml:184(link) xml/api-index-full.xml:185(link) #: xml/api-index-full.xml:186(link) xml/api-index-full.xml:187(link) #: xml/api-index-full.xml:188(link) xml/api-index-full.xml:189(link) #: xml/api-index-full.xml:190(link) xml/api-index-full.xml:191(link) #: xml/api-index-full.xml:192(link) xml/api-index-full.xml:193(link) #: xml/api-index-full.xml:194(link) xml/api-index-full.xml:195(link) #: xml/api-index-full.xml:209(link) xml/api-index-full.xml:210(link) msgid "cut-console" msgstr "" #: xml/cut-console.xml:21(link) xml/cut-console.xml:51(title) #: xml/cut-console.xml:52(primary) xml/api-index-full.xml:191(link) msgid "CUT_CONSOLE_COLOR_RED" msgstr "" #: xml/cut-console.xml:22(link) xml/cut-console.xml:58(title) #: xml/cut-console.xml:59(primary) xml/api-index-full.xml:192(link) msgid "CUT_CONSOLE_COLOR_RED_BACK" msgstr "" #: xml/cut-console.xml:23(link) xml/cut-console.xml:65(title) #: xml/cut-console.xml:66(primary) xml/api-index-full.xml:187(link) msgid "CUT_CONSOLE_COLOR_GREEN" msgstr "" #: xml/cut-console.xml:24(link) xml/cut-console.xml:72(title) #: xml/cut-console.xml:73(primary) xml/api-index-full.xml:188(link) msgid "CUT_CONSOLE_COLOR_GREEN_BACK" msgstr "" #: xml/cut-console.xml:25(link) xml/cut-console.xml:79(title) #: xml/cut-console.xml:80(primary) xml/api-index-full.xml:195(link) msgid "CUT_CONSOLE_COLOR_YELLOW" msgstr "" #: xml/cut-console.xml:26(link) xml/cut-console.xml:86(title) #: xml/cut-console.xml:87(primary) xml/api-index-full.xml:183(link) msgid "CUT_CONSOLE_COLOR_BLUE" msgstr "" #: xml/cut-console.xml:27(link) xml/cut-console.xml:93(title) #: xml/cut-console.xml:94(primary) xml/api-index-full.xml:184(link) msgid "CUT_CONSOLE_COLOR_BLUE_BACK" msgstr "" #: xml/cut-console.xml:28(link) xml/cut-console.xml:100(title) #: xml/cut-console.xml:101(primary) xml/api-index-full.xml:189(link) msgid "CUT_CONSOLE_COLOR_MAGENTA" msgstr "" #: xml/cut-console.xml:29(link) xml/cut-console.xml:107(title) #: xml/cut-console.xml:108(primary) xml/api-index-full.xml:185(link) msgid "CUT_CONSOLE_COLOR_CYAN" msgstr "" #: xml/cut-console.xml:30(link) xml/cut-console.xml:114(title) #: xml/cut-console.xml:115(primary) xml/api-index-full.xml:186(link) msgid "CUT_CONSOLE_COLOR_CYAN_BACK" msgstr "" #: xml/cut-console.xml:31(link) xml/cut-console.xml:121(title) #: xml/cut-console.xml:122(primary) xml/api-index-full.xml:193(link) msgid "CUT_CONSOLE_COLOR_WHITE" msgstr "" #: xml/cut-console.xml:32(link) xml/cut-console.xml:128(title) #: xml/cut-console.xml:129(primary) xml/api-index-full.xml:194(link) msgid "CUT_CONSOLE_COLOR_WHITE_BACK" msgstr "" #: xml/cut-console.xml:33(link) xml/cut-console.xml:135(title) #: xml/cut-console.xml:136(primary) xml/api-index-full.xml:182(link) msgid "CUT_CONSOLE_COLOR_BLACK_BACK" msgstr "" #: xml/cut-console.xml:34(link) xml/cut-console.xml:142(title) #: xml/cut-console.xml:143(primary) xml/api-index-full.xml:190(link) msgid "CUT_CONSOLE_COLOR_NORMAL" msgstr "" #: xml/cut-console.xml:35(link) xml/cut-console.xml:150(primary) #: xml/api-index-full.xml:209(link) msgid "cut_console_guess_color_usability" msgstr "" #: xml/cut-console.xml:36(link) xml/cut-console.xml:159(primary) #: xml/api-index-full.xml:210(link) msgid "cut_console_parse_color_arg" msgstr "" #: xml/cut-console.xml:36(parameter) msgid "const *option_name" msgstr "" #: xml/cut-console.xml:38(parameter) msgid " *use_color" msgstr "" #: xml/cut-console.xml:21(synopsis) #, no-wrap msgid "" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" "#define \n" " ();\n" " (,\n" " ,\n" " ,\n" " );\n" msgstr "" #: xml/cut-console.xml:53(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_RED \"\\033[01;31m\"\n" msgstr "" #: xml/cut-console.xml:60(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_RED_BACK \"\\033[41m\"\n" msgstr "" #: xml/cut-console.xml:67(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_GREEN \"\\033[01;32m\"\n" msgstr "" #: xml/cut-console.xml:74(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_GREEN_BACK \"\\033[01;42m\"\n" msgstr "" #: xml/cut-console.xml:81(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_YELLOW \"\\033[01;33m\"\n" msgstr "" #: xml/cut-console.xml:88(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_BLUE \"\\033[01;34m\"\n" msgstr "" #: xml/cut-console.xml:95(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_BLUE_BACK \"\\033[01;44m\"\n" msgstr "" #: xml/cut-console.xml:102(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_MAGENTA \"\\033[01;35m\"\n" msgstr "" #: xml/cut-console.xml:109(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_CYAN \"\\033[01;36m\"\n" msgstr "" #: xml/cut-console.xml:116(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_CYAN_BACK \"\\033[01;46m\"\n" msgstr "" #: xml/cut-console.xml:123(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_WHITE \"\\033[01;37m\"\n" msgstr "" #: xml/cut-console.xml:130(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_WHITE_BACK \"\\033[01;47m\"\n" msgstr "" #: xml/cut-console.xml:137(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_BLACK_BACK \"\\033[01;40m\"\n" msgstr "" #: xml/cut-console.xml:144(programlisting) #, no-wrap msgid "#define CUT_CONSOLE_COLOR_NORMAL \"\\033[00m\"\n" msgstr "" #: xml/cut-console.xml:149(title) msgid "cut_console_guess_color_usability ()" msgstr "" #: xml/cut-console.xml:151(programlisting) #, no-wrap msgid "gboolean cut_console_guess_color_usability (void);" msgstr "" #: xml/cut-console.xml:158(title) msgid "cut_console_parse_color_arg ()" msgstr "" #: xml/cut-console.xml:160(programlisting) #, no-wrap msgid "" "gboolean cut_console_parse_color_arg (const gchar *option_name,\n" " const gchar *value,\n" " gboolean *use_color,\n" " GError **error);" msgstr "" #: xml/cut-console.xml:166(term) msgid "option_name :" msgstr "" #: xml/cut-console.xml:172(term) xml/cut-console-diff-writer.xml:88(term) msgid "use_color :" msgstr "" #: xml/cut-console-diff-writer.xml:7(refentrytitle) #: xml/cut-console-diff-writer.xml:14(refname) #: xml/cut-console-diff-writer.xml:21(link) #: xml/cut-console-diff-writer.xml:65(title) #: xml/cut-console-diff-writer.xml:66(primary) xml/api-index-full.xml:69(link) #: xml/api-index-full.xml:70(link) xml/api-index-full.xml:196(link) #: xml/api-index-full.xml:197(link) xml/api-index-full.xml:198(link) #: xml/api-index-full.xml:199(link) xml/api-index-full.xml:200(link) #: xml/api-index-full.xml:201(link) xml/api-index-full.xml:202(link) #: xml/api-index-full.xml:203(link) xml/api-index-full.xml:204(link) #: xml/api-index-full.xml:205(link) xml/api-index-full.xml:206(link) #: xml/api-index-full.xml:207(link) xml/api-index-full.xml:208(link) msgid "CutConsoleDiffWriter" msgstr "" #: xml/cut-console-diff-writer.xml:22(link) #: xml/cut-console-diff-writer.xml:74(title) #: xml/cut-console-diff-writer.xml:75(primary) xml/api-index-full.xml:70(link) msgid "CutConsoleDiffWriterClass" msgstr "" #: xml/cut-console-diff-writer.xml:23(link) #: xml/cut-console-diff-writer.xml:84(primary) #: xml/api-index-full.xml:202(link) msgid "cut_console_diff_writer_new" msgstr "" #: xml/cut-console-diff-writer.xml:23(parameter) msgid " use_color" msgstr "" #: xml/cut-console-diff-writer.xml:24(link) #: xml/cut-console-diff-writer.xml:96(primary) #: xml/api-index-full.xml:204(link) msgid "cut_console_diff_writer_set_deleted_mark_color" msgstr "" #: xml/cut-console-diff-writer.xml:26(parameter) #: xml/cut-console-diff-writer.xml:31(parameter) #: xml/cut-console-diff-writer.xml:36(parameter) #: xml/cut-console-diff-writer.xml:41(parameter) #: xml/cut-console-diff-writer.xml:46(parameter) #: xml/cut-console-diff-writer.xml:51(parameter) msgid "const *color" msgstr "" #: xml/cut-console-diff-writer.xml:27(link) #: xml/cut-console-diff-writer.xml:111(primary) #: xml/api-index-full.xml:197(link) msgid "cut_console_diff_writer_get_deleted_mark_color" msgstr "" #: xml/cut-console-diff-writer.xml:29(link) #: xml/cut-console-diff-writer.xml:124(primary) #: xml/api-index-full.xml:207(link) msgid "cut_console_diff_writer_set_inserted_mark_color" msgstr "" #: xml/cut-console-diff-writer.xml:32(link) #: xml/cut-console-diff-writer.xml:139(primary) #: xml/api-index-full.xml:200(link) msgid "cut_console_diff_writer_get_inserted_mark_color" msgstr "" #: xml/cut-console-diff-writer.xml:34(link) #: xml/cut-console-diff-writer.xml:152(primary) #: xml/api-index-full.xml:203(link) msgid "cut_console_diff_writer_set_deleted_line_color" msgstr "" #: xml/cut-console-diff-writer.xml:37(link) #: xml/cut-console-diff-writer.xml:167(primary) #: xml/api-index-full.xml:196(link) msgid "cut_console_diff_writer_get_deleted_line_color" msgstr "" #: xml/cut-console-diff-writer.xml:39(link) #: xml/cut-console-diff-writer.xml:180(primary) #: xml/api-index-full.xml:206(link) msgid "cut_console_diff_writer_set_inserted_line_color" msgstr "" #: xml/cut-console-diff-writer.xml:42(link) #: xml/cut-console-diff-writer.xml:195(primary) #: xml/api-index-full.xml:199(link) msgid "cut_console_diff_writer_get_inserted_line_color" msgstr "" #: xml/cut-console-diff-writer.xml:44(link) #: xml/cut-console-diff-writer.xml:208(primary) #: xml/api-index-full.xml:205(link) msgid "cut_console_diff_writer_set_deleted_segment_color" msgstr "" #: xml/cut-console-diff-writer.xml:47(link) #: xml/cut-console-diff-writer.xml:223(primary) #: xml/api-index-full.xml:198(link) msgid "cut_console_diff_writer_get_deleted_segment_color" msgstr "" #: xml/cut-console-diff-writer.xml:49(link) #: xml/cut-console-diff-writer.xml:236(primary) #: xml/api-index-full.xml:208(link) msgid "cut_console_diff_writer_set_inserted_segment_color" msgstr "" #: xml/cut-console-diff-writer.xml:52(link) #: xml/cut-console-diff-writer.xml:251(primary) #: xml/api-index-full.xml:201(link) msgid "cut_console_diff_writer_get_inserted_segment_color" msgstr "" #: xml/cut-console-diff-writer.xml:21(synopsis) #, no-wrap msgid "" " ;\n" " ;\n" " * ();\n" " \n" " (,\n" " );\n" "const * \n" " ();\n" " \n" " (,\n" " );\n" "const * \n" " ();\n" " \n" " (,\n" " );\n" "const * \n" " ();\n" " \n" " (,\n" " );\n" "const * \n" " ();\n" " \n" " (,\n" " );\n" "const * \n" " ();\n" " \n" " (,\n" " );\n" "const * \n" " ();\n" msgstr "" #: xml/cut-console-diff-writer.xml:67(programlisting) #, no-wrap msgid "" "typedef struct {\n" " CutDiffWriter object;\n" "} CutConsoleDiffWriter;\n" msgstr "" #: xml/cut-console-diff-writer.xml:76(programlisting) #, no-wrap msgid "" "typedef struct {\n" " CutDiffWriterClass parent_class;\n" "} CutConsoleDiffWriterClass;\n" msgstr "" #: xml/cut-console-diff-writer.xml:83(title) msgid "cut_console_diff_writer_new ()" msgstr "" #: xml/cut-console-diff-writer.xml:85(programlisting) #, no-wrap msgid "CutDiffWriter * cut_console_diff_writer_new (gboolean use_color);" msgstr "" #: xml/cut-console-diff-writer.xml:95(title) msgid "cut_console_diff_writer_set_deleted_mark_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:97(programlisting) #, no-wrap msgid "" "void cut_console_diff_writer_set_deleted_mark_color\n" " (CutDiffWriter *writer,\n" " const gchar *color);" msgstr "" #: xml/cut-console-diff-writer.xml:105(term) #: xml/cut-console-diff-writer.xml:133(term) #: xml/cut-console-diff-writer.xml:161(term) #: xml/cut-console-diff-writer.xml:189(term) #: xml/cut-console-diff-writer.xml:217(term) #: xml/cut-console-diff-writer.xml:245(term) msgid "color :" msgstr "" #: xml/cut-console-diff-writer.xml:110(title) msgid "cut_console_diff_writer_get_deleted_mark_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:112(programlisting) #, no-wrap msgid "" "const gchar * cut_console_diff_writer_get_deleted_mark_color\n" " (CutDiffWriter *writer);" msgstr "" #: xml/cut-console-diff-writer.xml:123(title) msgid "cut_console_diff_writer_set_inserted_mark_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:125(programlisting) #, no-wrap msgid "" "void cut_console_diff_writer_set_inserted_mark_color\n" " (CutDiffWriter *writer,\n" " const gchar *color);" msgstr "" #: xml/cut-console-diff-writer.xml:138(title) msgid "cut_console_diff_writer_get_inserted_mark_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:140(programlisting) #, no-wrap msgid "" "const gchar * cut_console_diff_writer_get_inserted_mark_color\n" " (CutDiffWriter *writer);" msgstr "" #: xml/cut-console-diff-writer.xml:151(title) msgid "cut_console_diff_writer_set_deleted_line_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:153(programlisting) #, no-wrap msgid "" "void cut_console_diff_writer_set_deleted_line_color\n" " (CutDiffWriter *writer,\n" " const gchar *color);" msgstr "" #: xml/cut-console-diff-writer.xml:166(title) msgid "cut_console_diff_writer_get_deleted_line_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:168(programlisting) #, no-wrap msgid "" "const gchar * cut_console_diff_writer_get_deleted_line_color\n" " (CutDiffWriter *writer);" msgstr "" #: xml/cut-console-diff-writer.xml:179(title) msgid "cut_console_diff_writer_set_inserted_line_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:181(programlisting) #, no-wrap msgid "" "void cut_console_diff_writer_set_inserted_line_color\n" " (CutDiffWriter *writer,\n" " const gchar *color);" msgstr "" #: xml/cut-console-diff-writer.xml:194(title) msgid "cut_console_diff_writer_get_inserted_line_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:196(programlisting) #, no-wrap msgid "" "const gchar * cut_console_diff_writer_get_inserted_line_color\n" " (CutDiffWriter *writer);" msgstr "" #: xml/cut-console-diff-writer.xml:207(title) msgid "cut_console_diff_writer_set_deleted_segment_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:209(programlisting) #, no-wrap msgid "" "void cut_console_diff_writer_set_deleted_segment_color\n" " (CutDiffWriter *writer,\n" " const gchar *color);" msgstr "" #: xml/cut-console-diff-writer.xml:222(title) msgid "cut_console_diff_writer_get_deleted_segment_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:224(programlisting) #, no-wrap msgid "" "const gchar * cut_console_diff_writer_get_deleted_segment_color\n" " (CutDiffWriter *writer);" msgstr "" #: xml/cut-console-diff-writer.xml:235(title) msgid "cut_console_diff_writer_set_inserted_segment_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:237(programlisting) #, no-wrap msgid "" "void cut_console_diff_writer_set_inserted_segment_color\n" " (CutDiffWriter *writer,\n" " const gchar *color);" msgstr "" #: xml/cut-console-diff-writer.xml:250(title) msgid "cut_console_diff_writer_get_inserted_segment_color ()" msgstr "" #: xml/cut-console-diff-writer.xml:252(programlisting) #, no-wrap msgid "" "const gchar * cut_console_diff_writer_get_inserted_segment_color\n" " (CutDiffWriter *writer);" msgstr "" #: xml/cut-config.xml:7(refentrytitle) xml/cut-config.xml:14(refname) #: xml/api-index-full.xml:227(link) xml/api-index-full.xml:228(link) #: xml/api-index-full.xml:229(link) xml/api-index-full.xml:230(link) msgid "cut-config" msgstr "" #: xml/cut-config.xml:21(link) xml/cut-config.xml:36(title) #: xml/cut-config.xml:37(primary) xml/api-index-full.xml:228(link) msgid "CUT_HAVE_STDINT_H" msgstr "" #: xml/cut-config.xml:22(link) xml/cut-config.xml:43(title) #: xml/cut-config.xml:44(primary) xml/api-index-full.xml:227(link) msgid "CUT_HAVE_INTTYPES_H" msgstr "" #: xml/cut-config.xml:23(link) xml/cut-config.xml:50(title) #: xml/cut-config.xml:51(primary) xml/api-index-full.xml:229(link) msgid "CUT_HAVE_SYS_SOCKET_H" msgstr "" #: xml/cut-config.xml:24(link) xml/cut-config.xml:57(title) #: xml/cut-config.xml:58(primary) xml/api-index-full.xml:230(link) msgid "CUT_HAVE_SYS_UN_H" msgstr "" #: xml/cut-config.xml:21(synopsis) #, no-wrap msgid "" "#define \n" "#define \n" "#define \n" "#define \n" msgstr "" #: xml/cut-config.xml:38(programlisting) #, no-wrap msgid "#define CUT_HAVE_STDINT_H 1\n" msgstr "" #: xml/cut-config.xml:45(programlisting) #, no-wrap msgid "#define CUT_HAVE_INTTYPES_H 1\n" msgstr "" #: xml/cut-config.xml:52(programlisting) #, no-wrap msgid "#define CUT_HAVE_SYS_SOCKET_H 1\n" msgstr "" #: xml/cut-config.xml:59(programlisting) #, no-wrap msgid "#define CUT_HAVE_SYS_UN_H 1\n" msgstr "" #: xml/cut-colorize-differ.xml:7(refentrytitle) #: xml/cut-colorize-differ.xml:14(refname) msgid "CutColorizeDiffer" msgstr "" #: xml/cut-assertions.xml:15(refpurpose) msgid "Checks that your program works as you expect." msgstr "あなたのプログラムが期待通りに動作しているかを検証します。" #: xml/cut-assertions.xml:21(link) xml/cut-assertions.xml:320(primary) #: xml/api-index-full.xml:84(link) msgid "cut_assert" msgstr "" #: xml/cut-assertions.xml:21(parameter) xml/cut-assertions.xml:23(parameter) #: xml/cut-assertions.xml:25(parameter) msgid " expression" msgstr "" #: xml/cut-assertions.xml:23(link) xml/cut-assertions.xml:350(primary) #: xml/api-index-full.xml:176(link) xml/api-index-0.9.xml:10(link) msgid "cut_assert_true" msgstr "" #: xml/cut-assertions.xml:25(link) xml/cut-assertions.xml:365(primary) #: xml/api-index-full.xml:129(link) xml/api-index-0.9.xml:8(link) msgid "cut_assert_false" msgstr "" #: xml/cut-assertions.xml:27(link) xml/cut-assertions.xml:380(primary) #: xml/api-index-full.xml:86(link) xml/api-index-1.0.7.xml:11(link) msgid "cut_assert_equal_boolean" msgstr "" #: xml/cut-assertions.xml:27(parameter) xml/cut-assertions.xml:30(parameter) msgid " expected" msgstr "" #: xml/cut-assertions.xml:28(parameter) xml/cut-assertions.xml:31(parameter) msgid " actual" msgstr "" #: xml/cut-assertions.xml:30(link) xml/cut-assertions.xml:409(primary) #: xml/api-index-full.xml:134(link) xml/api-index-1.0.7.xml:13(link) msgid "cut_assert_not_equal_boolean" msgstr "" #: xml/cut-assertions.xml:33(link) xml/cut-assertions.xml:438(primary) #: xml/api-index-full.xml:166(link) msgid "cut_assert_null" msgstr "" #: xml/cut-assertions.xml:33(parameter) xml/cut-assertions.xml:37(parameter) msgid "const *expression" msgstr "" #: xml/cut-assertions.xml:35(link) xml/cut-assertions.xml:453(primary) #: xml/api-index-full.xml:167(link) xml/api-index-0.3.xml:8(link) msgid "cut_assert_null_string" msgstr "" #: xml/cut-assertions.xml:37(link) xml/cut-assertions.xml:468(primary) #: xml/api-index-full.xml:165(link) msgid "cut_assert_not_null" msgstr "" #: xml/cut-assertions.xml:39(link) xml/cut-assertions.xml:483(primary) #: xml/api-index-full.xml:95(link) msgid "cut_assert_equal_int" msgstr "" #: xml/cut-assertions.xml:39(parameter) xml/cut-assertions.xml:42(parameter) msgid " expected" msgstr "" #: xml/cut-assertions.xml:40(parameter) xml/cut-assertions.xml:43(parameter) msgid " actual" msgstr "" #: xml/cut-assertions.xml:42(link) xml/cut-assertions.xml:502(primary) #: xml/api-index-full.xml:138(link) xml/api-index-1.0.7.xml:15(link) msgid "cut_assert_not_equal_int" msgstr "" #: xml/cut-assertions.xml:45(link) xml/cut-assertions.xml:521(primary) #: xml/api-index-full.xml:105(link) xml/api-index-1.1.0.xml:17(link) msgid "cut_assert_equal_int_least8" msgstr "" #: xml/cut-assertions.xml:48(link) xml/cut-assertions.xml:542(primary) #: xml/api-index-full.xml:148(link) xml/api-index-1.1.0.xml:37(link) msgid "cut_assert_not_equal_int_least8" msgstr "" #: xml/cut-assertions.xml:51(link) xml/cut-assertions.xml:563(primary) #: xml/api-index-full.xml:102(link) xml/api-index-1.1.0.xml:14(link) msgid "cut_assert_equal_int_least16" msgstr "" #: xml/cut-assertions.xml:54(link) xml/cut-assertions.xml:584(primary) #: xml/api-index-full.xml:145(link) xml/api-index-1.1.0.xml:34(link) msgid "cut_assert_not_equal_int_least16" msgstr "" #: xml/cut-assertions.xml:57(link) xml/cut-assertions.xml:605(primary) #: xml/api-index-full.xml:103(link) xml/api-index-1.1.0.xml:15(link) msgid "cut_assert_equal_int_least32" msgstr "" #: xml/cut-assertions.xml:60(link) xml/cut-assertions.xml:626(primary) #: xml/api-index-full.xml:146(link) xml/api-index-1.1.0.xml:35(link) msgid "cut_assert_not_equal_int_least32" msgstr "" #: xml/cut-assertions.xml:63(link) xml/cut-assertions.xml:647(primary) #: xml/api-index-full.xml:104(link) xml/api-index-1.1.0.xml:16(link) msgid "cut_assert_equal_int_least64" msgstr "" #: xml/cut-assertions.xml:66(link) xml/cut-assertions.xml:668(primary) #: xml/api-index-full.xml:147(link) xml/api-index-1.1.0.xml:36(link) msgid "cut_assert_not_equal_int_least64" msgstr "" #: xml/cut-assertions.xml:69(link) xml/cut-assertions.xml:689(primary) #: xml/api-index-full.xml:101(link) xml/api-index-1.1.0.xml:13(link) msgid "cut_assert_equal_int_fast8" msgstr "" #: xml/cut-assertions.xml:72(link) xml/cut-assertions.xml:710(primary) #: xml/api-index-full.xml:144(link) xml/api-index-1.1.0.xml:33(link) msgid "cut_assert_not_equal_int_fast8" msgstr "" #: xml/cut-assertions.xml:75(link) xml/cut-assertions.xml:731(primary) #: xml/api-index-full.xml:98(link) xml/api-index-1.1.0.xml:10(link) msgid "cut_assert_equal_int_fast16" msgstr "" #: xml/cut-assertions.xml:78(link) xml/cut-assertions.xml:752(primary) #: xml/api-index-full.xml:141(link) xml/api-index-1.1.0.xml:30(link) msgid "cut_assert_not_equal_int_fast16" msgstr "" #: xml/cut-assertions.xml:81(link) xml/cut-assertions.xml:773(primary) #: xml/api-index-full.xml:99(link) xml/api-index-1.1.0.xml:11(link) msgid "cut_assert_equal_int_fast32" msgstr "" #: xml/cut-assertions.xml:84(link) xml/cut-assertions.xml:794(primary) #: xml/api-index-full.xml:142(link) xml/api-index-1.1.0.xml:31(link) msgid "cut_assert_not_equal_int_fast32" msgstr "" #: xml/cut-assertions.xml:87(link) xml/cut-assertions.xml:815(primary) #: xml/api-index-full.xml:100(link) xml/api-index-1.1.0.xml:12(link) msgid "cut_assert_equal_int_fast64" msgstr "" #: xml/cut-assertions.xml:90(link) xml/cut-assertions.xml:836(primary) #: xml/api-index-full.xml:143(link) xml/api-index-1.1.0.xml:32(link) msgid "cut_assert_not_equal_int_fast64" msgstr "" #: xml/cut-assertions.xml:93(link) xml/cut-assertions.xml:857(primary) #: xml/api-index-full.xml:97(link) xml/api-index-1.1.0.xml:9(link) msgid "cut_assert_equal_intptr" msgstr "" #: xml/cut-assertions.xml:96(link) xml/cut-assertions.xml:878(primary) #: xml/api-index-full.xml:140(link) xml/api-index-1.1.0.xml:29(link) msgid "cut_assert_not_equal_intptr" msgstr "" #: xml/cut-assertions.xml:99(link) xml/cut-assertions.xml:899(primary) #: xml/api-index-full.xml:96(link) xml/api-index-1.1.0.xml:8(link) msgid "cut_assert_equal_intmax" msgstr "" #: xml/cut-assertions.xml:102(link) xml/cut-assertions.xml:920(primary) #: xml/api-index-full.xml:139(link) xml/api-index-1.1.0.xml:28(link) msgid "cut_assert_not_equal_intmax" msgstr "" #: xml/cut-assertions.xml:105(link) xml/cut-assertions.xml:941(primary) #: xml/api-index-full.xml:116(link) msgid "cut_assert_equal_uint" msgstr "" #: xml/cut-assertions.xml:105(parameter) xml/cut-assertions.xml:108(parameter) msgid "unsigned expected" msgstr "" #: xml/cut-assertions.xml:106(parameter) xml/cut-assertions.xml:109(parameter) msgid "unsigned actual" msgstr "" #: xml/cut-assertions.xml:108(link) xml/cut-assertions.xml:960(primary) #: xml/api-index-full.xml:153(link) xml/api-index-1.0.7.xml:20(link) msgid "cut_assert_not_equal_uint" msgstr "" #: xml/cut-assertions.xml:111(link) xml/cut-assertions.xml:979(primary) #: xml/api-index-full.xml:126(link) xml/api-index-1.1.0.xml:27(link) msgid "cut_assert_equal_uint_least8" msgstr "" #: xml/cut-assertions.xml:114(link) xml/cut-assertions.xml:1000(primary) #: xml/api-index-full.xml:163(link) xml/api-index-1.1.0.xml:47(link) msgid "cut_assert_not_equal_uint_least8" msgstr "" #: xml/cut-assertions.xml:117(link) xml/cut-assertions.xml:1021(primary) #: xml/api-index-full.xml:123(link) xml/api-index-1.1.0.xml:24(link) msgid "cut_assert_equal_uint_least16" msgstr "" #: xml/cut-assertions.xml:120(link) xml/cut-assertions.xml:1042(primary) #: xml/api-index-full.xml:160(link) xml/api-index-1.1.0.xml:44(link) msgid "cut_assert_not_equal_uint_least16" msgstr "" #: xml/cut-assertions.xml:123(link) xml/cut-assertions.xml:1063(primary) #: xml/api-index-full.xml:124(link) xml/api-index-1.1.0.xml:25(link) msgid "cut_assert_equal_uint_least32" msgstr "" #: xml/cut-assertions.xml:126(link) xml/cut-assertions.xml:1084(primary) #: xml/api-index-full.xml:161(link) xml/api-index-1.1.0.xml:45(link) msgid "cut_assert_not_equal_uint_least32" msgstr "" #: xml/cut-assertions.xml:129(link) xml/cut-assertions.xml:1105(primary) #: xml/api-index-full.xml:125(link) xml/api-index-1.1.0.xml:26(link) msgid "cut_assert_equal_uint_least64" msgstr "" #: xml/cut-assertions.xml:132(link) xml/cut-assertions.xml:1126(primary) #: xml/api-index-full.xml:162(link) xml/api-index-1.1.0.xml:46(link) msgid "cut_assert_not_equal_uint_least64" msgstr "" #: xml/cut-assertions.xml:135(link) xml/cut-assertions.xml:1147(primary) #: xml/api-index-full.xml:122(link) xml/api-index-1.1.0.xml:23(link) msgid "cut_assert_equal_uint_fast8" msgstr "" #: xml/cut-assertions.xml:138(link) xml/cut-assertions.xml:1168(primary) #: xml/api-index-full.xml:159(link) xml/api-index-1.1.0.xml:43(link) msgid "cut_assert_not_equal_uint_fast8" msgstr "" #: xml/cut-assertions.xml:141(link) xml/cut-assertions.xml:1189(primary) #: xml/api-index-full.xml:119(link) xml/api-index-1.1.0.xml:20(link) msgid "cut_assert_equal_uint_fast16" msgstr "" #: xml/cut-assertions.xml:144(link) xml/cut-assertions.xml:1210(primary) #: xml/api-index-full.xml:156(link) xml/api-index-1.1.0.xml:40(link) msgid "cut_assert_not_equal_uint_fast16" msgstr "" #: xml/cut-assertions.xml:147(link) xml/cut-assertions.xml:1231(primary) #: xml/api-index-full.xml:120(link) xml/api-index-1.1.0.xml:21(link) msgid "cut_assert_equal_uint_fast32" msgstr "" #: xml/cut-assertions.xml:150(link) xml/cut-assertions.xml:1252(primary) #: xml/api-index-full.xml:157(link) xml/api-index-1.1.0.xml:41(link) msgid "cut_assert_not_equal_uint_fast32" msgstr "" #: xml/cut-assertions.xml:153(link) xml/cut-assertions.xml:1273(primary) #: xml/api-index-full.xml:121(link) xml/api-index-1.1.0.xml:22(link) msgid "cut_assert_equal_uint_fast64" msgstr "" #: xml/cut-assertions.xml:156(link) xml/cut-assertions.xml:1294(primary) #: xml/api-index-full.xml:158(link) xml/api-index-1.1.0.xml:42(link) msgid "cut_assert_not_equal_uint_fast64" msgstr "" #: xml/cut-assertions.xml:159(link) xml/cut-assertions.xml:1315(primary) #: xml/api-index-full.xml:118(link) xml/api-index-1.1.0.xml:19(link) msgid "cut_assert_equal_uintptr" msgstr "" #: xml/cut-assertions.xml:162(link) xml/cut-assertions.xml:1336(primary) #: xml/api-index-full.xml:155(link) xml/api-index-1.1.0.xml:39(link) msgid "cut_assert_not_equal_uintptr" msgstr "" #: xml/cut-assertions.xml:165(link) xml/cut-assertions.xml:1357(primary) #: xml/api-index-full.xml:117(link) xml/api-index-1.1.0.xml:18(link) msgid "cut_assert_equal_uintmax" msgstr "" #: xml/cut-assertions.xml:168(link) xml/cut-assertions.xml:1378(primary) #: xml/api-index-full.xml:154(link) xml/api-index-1.1.0.xml:38(link) msgid "cut_assert_not_equal_uintmax" msgstr "" #: xml/cut-assertions.xml:171(link) xml/cut-assertions.xml:1399(primary) #: xml/api-index-full.xml:108(link) xml/api-index-1.0.6.xml:13(link) msgid "cut_assert_equal_size" msgstr "" #: xml/cut-assertions.xml:171(parameter) xml/cut-assertions.xml:174(parameter) msgid " expected" msgstr "" #: xml/cut-assertions.xml:172(parameter) xml/cut-assertions.xml:175(parameter) msgid " actual" msgstr "" #: xml/cut-assertions.xml:174(link) xml/cut-assertions.xml:1418(primary) #: xml/api-index-full.xml:150(link) xml/api-index-1.0.7.xml:17(link) msgid "cut_assert_not_equal_size" msgstr "" #: xml/cut-assertions.xml:177(link) xml/cut-assertions.xml:1437(primary) #: xml/api-index-full.xml:88(link) msgid "cut_assert_equal_double" msgstr "" #: xml/cut-assertions.xml:177(parameter) xml/cut-assertions.xml:181(parameter) msgid " expected" msgstr "" #: xml/cut-assertions.xml:179(parameter) xml/cut-assertions.xml:183(parameter) msgid " actual" msgstr "" #: xml/cut-assertions.xml:181(link) xml/cut-assertions.xml:1460(primary) #: xml/api-index-full.xml:136(link) xml/api-index-1.0.7.xml:14(link) msgid "cut_assert_not_equal_double" msgstr "" #: xml/cut-assertions.xml:185(link) xml/cut-assertions.xml:1483(primary) #: xml/api-index-full.xml:87(link) xml/api-index-1.1.3.xml:7(link) msgid "cut_assert_equal_char" msgstr "" #: xml/cut-assertions.xml:188(link) xml/cut-assertions.xml:1507(primary) #: xml/api-index-full.xml:135(link) xml/api-index-1.1.3.xml:8(link) msgid "cut_assert_not_equal_char" msgstr "" #: xml/cut-assertions.xml:191(link) xml/cut-assertions.xml:1531(primary) #: xml/api-index-full.xml:110(link) msgid "cut_assert_equal_string" msgstr "" #: xml/cut-assertions.xml:191(parameter) xml/cut-assertions.xml:194(parameter) #: xml/cut-assertions.xml:197(parameter) xml/cut-assertions.xml:200(parameter) #: xml/cut-assertions.xml:203(parameter) xml/cut-assertions.xml:207(parameter) #: xml/cut-assertions.xml:273(parameter) msgid "const *expected" msgstr "" #: xml/cut-assertions.xml:192(parameter) xml/cut-assertions.xml:195(parameter) #: xml/cut-assertions.xml:198(parameter) xml/cut-assertions.xml:201(parameter) #: xml/cut-assertions.xml:204(parameter) xml/cut-assertions.xml:208(parameter) #: xml/cut-assertions.xml:264(parameter) xml/cut-assertions.xml:267(parameter) msgid "const *actual" msgstr "" #: xml/cut-assertions.xml:194(link) xml/cut-assertions.xml:1561(primary) #: xml/api-index-full.xml:151(link) xml/api-index-1.0.7.xml:18(link) msgid "cut_assert_not_equal_string" msgstr "" #: xml/cut-assertions.xml:197(link) xml/cut-assertions.xml:1591(primary) #: xml/api-index-full.xml:114(link) xml/api-index-0.3.xml:7(link) msgid "cut_assert_equal_string_with_free" msgstr "" #: xml/cut-assertions.xml:200(link) xml/cut-assertions.xml:1614(primary) #: xml/api-index-full.xml:113(link) xml/api-index-deprecated.xml:15(link) msgid "cut_assert_equal_string_or_null" msgstr "" #: xml/cut-assertions.xml:203(link) xml/cut-assertions.xml:1632(primary) #: xml/api-index-full.xml:115(link) xml/api-index-1.0.7.xml:12(link) msgid "cut_assert_equal_substring" msgstr "" #: xml/cut-assertions.xml:205(parameter) xml/cut-assertions.xml:209(parameter) msgid " length" msgstr "" #: xml/cut-assertions.xml:207(link) xml/cut-assertions.xml:1668(primary) #: xml/api-index-full.xml:152(link) xml/api-index-1.0.7.xml:19(link) msgid "cut_assert_not_equal_substring" msgstr "" #: xml/cut-assertions.xml:211(link) xml/cut-assertions.xml:1703(primary) #: xml/api-index-full.xml:106(link) msgid "cut_assert_equal_memory" msgstr "" #: xml/cut-assertions.xml:211(parameter) xml/cut-assertions.xml:216(parameter) #: xml/cut-assertions.xml:269(parameter) msgid "const *expected" msgstr "" #: xml/cut-assertions.xml:212(parameter) xml/cut-assertions.xml:217(parameter) msgid " expected_size" msgstr "" #: xml/cut-assertions.xml:213(parameter) xml/cut-assertions.xml:218(parameter) #: xml/cut-assertions.xml:270(parameter) msgid "const *actual" msgstr "" #: xml/cut-assertions.xml:214(parameter) xml/cut-assertions.xml:219(parameter) msgid " actual_size" msgstr "" #: xml/cut-assertions.xml:216(link) xml/cut-assertions.xml:1731(primary) #: xml/api-index-full.xml:149(link) xml/api-index-1.0.7.xml:16(link) msgid "cut_assert_not_equal_memory" msgstr "" #: xml/cut-assertions.xml:221(link) xml/cut-assertions.xml:1759(primary) #: xml/api-index-full.xml:111(link) msgid "cut_assert_equal_string_array" msgstr "" #: xml/cut-assertions.xml:221(parameter) xml/cut-assertions.xml:225(parameter) msgid " **expected" msgstr "" #: xml/cut-assertions.xml:222(parameter) xml/cut-assertions.xml:226(parameter) msgid " **actual" msgstr "" #: xml/cut-assertions.xml:224(link) xml/cut-assertions.xml:1779(primary) #: xml/api-index-full.xml:112(link) xml/api-index-0.9.xml:7(link) msgid "cut_assert_equal_string_array_with_free" msgstr "" #: xml/cut-assertions.xml:228(link) xml/cut-assertions.xml:1800(primary) #: xml/api-index-full.xml:168(link) msgid "cut_assert_operator" msgstr "" #: xml/cut-assertions.xml:232(link) xml/cut-assertions.xml:1826(primary) #: xml/api-index-full.xml:170(link) msgid "cut_assert_operator_int" msgstr "" #: xml/cut-assertions.xml:236(link) xml/cut-assertions.xml:1852(primary) #: xml/api-index-full.xml:172(link) xml/api-index-1.0.5.xml:22(link) msgid "cut_assert_operator_uint" msgstr "" #: xml/cut-assertions.xml:240(link) xml/cut-assertions.xml:1878(primary) #: xml/api-index-full.xml:171(link) xml/api-index-1.0.5.xml:21(link) msgid "cut_assert_operator_size" msgstr "" #: xml/cut-assertions.xml:244(link) xml/cut-assertions.xml:1904(primary) #: xml/api-index-full.xml:169(link) xml/api-index-1.0.5.xml:20(link) msgid "cut_assert_operator_double" msgstr "" #: xml/cut-assertions.xml:248(link) xml/cut-assertions.xml:1930(primary) #: xml/api-index-full.xml:85(link) msgid "cut_assert_equal" msgstr "" #: xml/cut-assertions.xml:252(link) xml/cut-assertions.xml:1956(primary) #: xml/api-index-full.xml:127(link) xml/api-index-0.8.xml:9(link) msgid "cut_assert_errno" msgstr "" #: xml/cut-assertions.xml:253(link) xml/cut-assertions.xml:1974(primary) #: xml/api-index-full.xml:130(link) xml/api-index-deprecated.xml:16(link) #: xml/api-index-0.9.xml:9(link) msgid "cut_assert_file_exist" msgstr "" #: xml/cut-assertions.xml:255(link) xml/cut-assertions.xml:1997(primary) #: xml/api-index-full.xml:173(link) xml/api-index-deprecated.xml:18(link) #: xml/api-index-1.0.2.xml:8(link) msgid "cut_assert_path_exist" msgstr "" #: xml/cut-assertions.xml:257(link) xml/cut-assertions.xml:2020(primary) #: xml/api-index-full.xml:128(link) xml/api-index-1.1.5.xml:10(link) msgid "cut_assert_exist_path" msgstr "" #: xml/cut-assertions.xml:259(link) xml/cut-assertions.xml:2042(primary) #: xml/api-index-full.xml:174(link) xml/api-index-deprecated.xml:19(link) #: xml/api-index-1.0.2.xml:9(link) msgid "cut_assert_path_not_exist" msgstr "" #: xml/cut-assertions.xml:261(link) xml/cut-assertions.xml:2065(primary) #: xml/api-index-full.xml:164(link) xml/api-index-1.1.5.xml:11(link) msgid "cut_assert_not_exist_path" msgstr "" #: xml/cut-assertions.xml:263(link) xml/cut-assertions.xml:2087(primary) #: xml/api-index-full.xml:132(link) xml/api-index-1.0.xml:9(link) msgid "cut_assert_match" msgstr "" #: xml/cut-assertions.xml:266(link) xml/cut-assertions.xml:2113(primary) #: xml/api-index-full.xml:133(link) xml/api-index-1.0.xml:10(link) msgid "cut_assert_match_with_free" msgstr "" #: xml/cut-assertions.xml:269(link) xml/cut-assertions.xml:2133(primary) #: xml/api-index-full.xml:107(link) xml/api-index-1.0.xml:7(link) msgid "cut_assert_equal_pointer" msgstr "" #: xml/cut-assertions.xml:272(link) xml/cut-assertions.xml:2152(primary) #: xml/api-index-full.xml:90(link) xml/api-index-1.0.2.xml:7(link) msgid "cut_assert_equal_fixture_data_string" msgstr "" #: xml/cut-assertions.xml:274(parameter) msgid "const *path" msgstr "" #: xml/cut-assertions.xml:276(link) xml/cut-assertions.xml:2172(primary) #: xml/api-index-full.xml:109(link) xml/api-index-1.1.1.xml:7(link) msgid "cut_assert_equal_sockaddr" msgstr "" #: xml/cut-assertions.xml:279(link) xml/cut-assertions.xml:2192(primary) #: xml/api-index-full.xml:89(link) xml/api-index-1.1.4.xml:11(link) msgid "cut_assert_equal_file_raw" msgstr "" #: xml/cut-assertions.xml:282(link) xml/cut-assertions.xml:2209(primary) #: xml/api-index-full.xml:137(link) xml/api-index-1.1.4.xml:12(link) msgid "cut_assert_not_equal_file_raw" msgstr "" #: xml/cut-assertions.xml:285(link) xml/cut-assertions.xml:2226(primary) #: xml/api-index-full.xml:214(link) msgid "cut_error" msgstr "" #: xml/cut-assertions.xml:287(link) xml/cut-assertions.xml:2241(primary) #: xml/api-index-full.xml:215(link) xml/api-index-1.0.2.xml:12(link) msgid "cut_error_errno" msgstr "" #: xml/cut-assertions.xml:288(link) xml/cut-assertions.xml:2261(primary) #: xml/api-index-full.xml:217(link) msgid "cut_fail" msgstr "" #: xml/cut-assertions.xml:290(link) xml/cut-assertions.xml:2276(primary) #: xml/api-index-full.xml:238(link) msgid "cut_pend" msgstr "" #: xml/cut-assertions.xml:292(link) xml/cut-assertions.xml:2292(primary) #: xml/api-index-full.xml:239(link) xml/api-index-deprecated.xml:23(link) msgid "cut_pending" msgstr "" #: xml/cut-assertions.xml:294(link) xml/cut-assertions.xml:2309(primary) #: xml/api-index-full.xml:236(link) msgid "cut_notify" msgstr "" #: xml/cut-assertions.xml:296(link) xml/cut-assertions.xml:2324(primary) #: xml/api-index-full.xml:237(link) xml/api-index-0.8.xml:13(link) msgid "cut_omit" msgstr "" #: xml/cut-assertions.xml:298(link) xml/cut-assertions.xml:2346(primary) #: xml/api-index-full.xml:244(link) xml/api-index-1.0.6.xml:18(link) msgid "cut_return" msgstr "" #: xml/cut-assertions.xml:21(synopsis) #, no-wrap msgid "" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " ,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " );\n" "#define (lhs,\n" " operator,\n" " rhs,\n" " ...)\n" "#define (lhs,\n" " operator,\n" " rhs,\n" " ...)\n" "#define (lhs,\n" " operator,\n" " rhs,\n" " ...)\n" "#define (lhs,\n" " operator,\n" " rhs,\n" " ...)\n" "#define (lhs,\n" " operator,\n" " rhs,\n" " ...)\n" "#define (function,\n" " expected,\n" " actual,\n" " ...)\n" " ();\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " (,\n" " ,\n" " );\n" " \n" " (,\n" " ,\n" " );\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" "#define (expected,\n" " actual,\n" " ...)\n" " (,\n" " );\n" " ();\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " (,\n" " );\n" " ();\n" msgstr "" #: xml/cut-assertions.xml:304(para) msgid "" "To check that your program works as you expect, you use cut_assert_XXX() where you want to " "check expected value is got." msgstr "" "あなたのプログラムが期待通りに動作しているかを検証するために、期待した値が得" "られていることを検証したい箇所でcut_assert_XXX()を使います。" #: xml/cut-assertions.xml:311(programlisting) #, no-wrap msgid "" "\n" "cut_assert_equal_int(3, 1 + 2);\n" msgstr "" #: xml/cut-assertions.xml:319(title) msgid "cut_assert ()" msgstr "" #: xml/cut-assertions.xml:321(programlisting) #, no-wrap msgid "" "void cut_assert (cut_boolean expression,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:323(para) msgid "" "Passes if expression is not 0 or NULL." msgstr "" "expressionが0でもNULLでもないとパスします。" #: xml/cut-assertions.xml:328(programlisting) #, no-wrap msgid "" "\n" "char *string;\n" "string = malloc(16);\n" "cut_assert(string);\n" msgstr "" #: xml/cut-assertions.xml:335(programlisting) #, no-wrap msgid "" "\n" "MyObject *object;\n" "object = my_object_new();\n" "cut_assert(object, cut_message(\"my_object_new() should not be failed\"));\n" msgstr "" #: xml/cut-assertions.xml:342(simpara) xml/cut-assertions.xml:357(simpara) #: xml/cut-assertions.xml:372(simpara) xml/cut-assertions.xml:445(simpara) #: xml/cut-assertions.xml:475(simpara) msgid "the expression to be checked." msgstr "チェックする式。" #: xml/cut-assertions.xml:349(title) msgid "cut_assert_true ()" msgstr "" #: xml/cut-assertions.xml:351(programlisting) #, no-wrap msgid "" "void cut_assert_true (cut_boolean expression,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:353(para) msgid "" "Passes if expression is CUT_TRUE value (not 0 or NULL)." msgstr "" "expressionCUT_TRUEのとき(0でもNULLでもないとき)パスします。" #: xml/cut-assertions.xml:362(para) xml/cut-assertions.xml:377(para) #: xml/cut-assertions.xml:1797(para) xml/cut-assertions.xml:1994(para) msgid "Since 0.9" msgstr "0.9から" #: xml/cut-assertions.xml:364(title) msgid "cut_assert_false ()" msgstr "" #: xml/cut-assertions.xml:366(programlisting) #, no-wrap msgid "" "void cut_assert_false (cut_boolean expression,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:368(para) msgid "" "Passes if expression is 0 or NULL." msgstr "" "expressionが0またはNULLのときパスします。" #: xml/cut-assertions.xml:379(title) msgid "cut_assert_equal_boolean ()" msgstr "" #: xml/cut-assertions.xml:381(programlisting) #, no-wrap msgid "" "void cut_assert_equal_boolean (cut_boolean expected,\n" " cut_boolean actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:384(para) msgid "" "Passes if both of expected and actual are CUT_TRUE value or both of expected and " "actual are CUT_FALSE value." msgstr "" "expectedactualが両方とも" "CUT_TRUEの値か、両" "方ともCUT_FALSEの" "値のときパスします。" #: xml/cut-assertions.xml:391(programlisting) #, no-wrap msgid "" "\n" "cut_assert_equal_boolean(CUT_TRUE, CUT_TRUE); -> Pass\n" "cut_assert_equal_boolean(CUT_FALSE, CUT_FALSE); -> Pass\n" "cut_assert_equal_boolean(CUT_TRUE, CUT_FALSE); -> Fail\n" msgstr "" "\n" "cut_assert_equal_boolean(CUT_TRUE, CUT_TRUE); -> パス\n" "cut_assert_equal_boolean(CUT_FALSE, CUT_FALSE); -> パス\n" "cut_assert_equal_boolean(CUT_TRUE, CUT_FALSE); -> 失敗\n" #: xml/cut-assertions.xml:398(simpara) xml/cut-assertions.xml:427(simpara) msgid "the expected boolean." msgstr "期待する真偽値。" #: xml/cut-assertions.xml:401(simpara) xml/cut-assertions.xml:430(simpara) msgid "the actual boolean." msgstr "実際の真偽値。" #: xml/cut-assertions.xml:408(title) msgid "cut_assert_not_equal_boolean ()" msgstr "" #: xml/cut-assertions.xml:410(programlisting) #, no-wrap msgid "" "void cut_assert_not_equal_boolean (cut_boolean expected,\n" " cut_boolean actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:413(para) msgid "" "Passes if expected is CUT_TRUE value but actual is CUT_FALSE value or expected is CUT_FALSE value but actual is CUT_TRUE value." msgstr "" "expectedCUT_TRUEの値だがactualは" "CUT_FALSEの値のと" "き、または、expectedCUT_FALSEの値だがactualは" "CUT_TRUEの値のとき" "にパスします。" #: xml/cut-assertions.xml:420(programlisting) #, no-wrap msgid "" "\n" "cut_assert_not_equal_boolean(CUT_TRUE, CUT_TRUE); -> Fail\n" "cut_assert_not_equal_boolean(CUT_FALSE, CUT_FALSE); -> Fail\n" "cut_assert_not_equal_boolean(CUT_TRUE, CUT_FALSE); -> Pass\n" msgstr "" "\n" "cut_assert_not_equal_boolean(CUT_TRUE, CUT_TRUE); -> 失敗\n" "cut_assert_not_equal_boolean(CUT_FALSE, CUT_FALSE); -> 失敗\n" "cut_assert_not_equal_boolean(CUT_TRUE, CUT_FALSE); -> パス\n" #: xml/cut-assertions.xml:437(title) msgid "cut_assert_null ()" msgstr "" #: xml/cut-assertions.xml:439(programlisting) #, no-wrap msgid "" "void cut_assert_null (const void *expression,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:441(para) msgid "" "Passes if expression is NULL." msgstr "" "expressionNULLのときパスします。" #: xml/cut-assertions.xml:452(title) msgid "cut_assert_null_string ()" msgstr "" #: xml/cut-assertions.xml:454(programlisting) #, no-wrap msgid "" "void cut_assert_null_string (const char *string,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:456(para) msgid "" "Passes if string is NULL." msgstr "" "stringNULLのときパスします。" #: xml/cut-assertions.xml:460(simpara) msgid "the string to be checked." msgstr "チェックする文字列。" #: xml/cut-assertions.xml:465(para) xml/cut-assertions.xml:1611(para) msgid "Since 0.3" msgstr "0.3から" #: xml/cut-assertions.xml:467(title) msgid "cut_assert_not_null ()" msgstr "" #: xml/cut-assertions.xml:469(programlisting) #, no-wrap msgid "" "void cut_assert_not_null (const void *expression,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:471(para) msgid "" "Passes if expression is not NULL." msgstr "" "expressionNULL以外のときパスします。" #: xml/cut-assertions.xml:482(title) msgid "cut_assert_equal_int ()" msgstr "" #: xml/cut-assertions.xml:484(programlisting) #, no-wrap msgid "" "void cut_assert_equal_int (int expected,\n" " int actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:491(simpara) xml/cut-assertions.xml:510(simpara) #: xml/cut-assertions.xml:531(simpara) xml/cut-assertions.xml:552(simpara) #: xml/cut-assertions.xml:573(simpara) xml/cut-assertions.xml:594(simpara) #: xml/cut-assertions.xml:615(simpara) xml/cut-assertions.xml:636(simpara) #: xml/cut-assertions.xml:657(simpara) xml/cut-assertions.xml:678(simpara) #: xml/cut-assertions.xml:699(simpara) xml/cut-assertions.xml:720(simpara) #: xml/cut-assertions.xml:741(simpara) xml/cut-assertions.xml:762(simpara) #: xml/cut-assertions.xml:783(simpara) xml/cut-assertions.xml:804(simpara) #: xml/cut-assertions.xml:825(simpara) xml/cut-assertions.xml:846(simpara) #: xml/cut-assertions.xml:867(simpara) xml/cut-assertions.xml:888(simpara) #: xml/cut-assertions.xml:909(simpara) xml/cut-assertions.xml:930(simpara) msgid "an expected integer value." msgstr "期待する整数の値。" #: xml/cut-assertions.xml:494(simpara) xml/cut-assertions.xml:513(simpara) #: xml/cut-assertions.xml:534(simpara) xml/cut-assertions.xml:555(simpara) #: xml/cut-assertions.xml:576(simpara) xml/cut-assertions.xml:597(simpara) #: xml/cut-assertions.xml:618(simpara) xml/cut-assertions.xml:639(simpara) #: xml/cut-assertions.xml:660(simpara) xml/cut-assertions.xml:681(simpara) #: xml/cut-assertions.xml:702(simpara) xml/cut-assertions.xml:723(simpara) #: xml/cut-assertions.xml:744(simpara) xml/cut-assertions.xml:765(simpara) #: xml/cut-assertions.xml:786(simpara) xml/cut-assertions.xml:807(simpara) #: xml/cut-assertions.xml:828(simpara) xml/cut-assertions.xml:849(simpara) #: xml/cut-assertions.xml:870(simpara) xml/cut-assertions.xml:891(simpara) #: xml/cut-assertions.xml:912(simpara) xml/cut-assertions.xml:933(simpara) msgid "an actual integer value." msgstr "実際の整数の値。" #: xml/cut-assertions.xml:501(title) msgid "cut_assert_not_equal_int ()" msgstr "" #: xml/cut-assertions.xml:503(programlisting) #, no-wrap msgid "" "void cut_assert_not_equal_int (int expected,\n" " int actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:520(title) msgid "cut_assert_equal_int_least8()" msgstr "" #: xml/cut-assertions.xml:522(programlisting) #, no-wrap msgid "#define cut_assert_equal_int_least8(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:526(para) xml/cut-assertions.xml:547(para) #: xml/cut-assertions.xml:568(para) xml/cut-assertions.xml:589(para) #: xml/cut-assertions.xml:610(para) xml/cut-assertions.xml:631(para) #: xml/cut-assertions.xml:652(para) xml/cut-assertions.xml:673(para) #: xml/cut-assertions.xml:694(para) xml/cut-assertions.xml:715(para) #: xml/cut-assertions.xml:736(para) xml/cut-assertions.xml:757(para) #: xml/cut-assertions.xml:778(para) xml/cut-assertions.xml:799(para) #: xml/cut-assertions.xml:820(para) xml/cut-assertions.xml:841(para) #: xml/cut-assertions.xml:862(para) xml/cut-assertions.xml:883(para) #: xml/cut-assertions.xml:904(para) xml/cut-assertions.xml:925(para) #: xml/cut-assertions.xml:984(para) xml/cut-assertions.xml:1005(para) #: xml/cut-assertions.xml:1026(para) xml/cut-assertions.xml:1047(para) #: xml/cut-assertions.xml:1068(para) xml/cut-assertions.xml:1089(para) #: xml/cut-assertions.xml:1110(para) xml/cut-assertions.xml:1131(para) #: xml/cut-assertions.xml:1152(para) xml/cut-assertions.xml:1173(para) #: xml/cut-assertions.xml:1194(para) xml/cut-assertions.xml:1215(para) #: xml/cut-assertions.xml:1236(para) xml/cut-assertions.xml:1257(para) #: xml/cut-assertions.xml:1278(para) xml/cut-assertions.xml:1299(para) #: xml/cut-assertions.xml:1320(para) xml/cut-assertions.xml:1341(para) #: xml/cut-assertions.xml:1362(para) xml/cut-assertions.xml:1383(para) msgid "" "This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined." msgstr "" "この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。" #: xml/cut-assertions.xml:541(title) msgid "cut_assert_not_equal_int_least8()" msgstr "" #: xml/cut-assertions.xml:543(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_int_least8(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:562(title) msgid "cut_assert_equal_int_least16()" msgstr "" #: xml/cut-assertions.xml:564(programlisting) #, no-wrap msgid "#define cut_assert_equal_int_least16(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:583(title) msgid "cut_assert_not_equal_int_least16()" msgstr "" #: xml/cut-assertions.xml:585(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_int_least16(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:604(title) msgid "cut_assert_equal_int_least32()" msgstr "" #: xml/cut-assertions.xml:606(programlisting) #, no-wrap msgid "#define cut_assert_equal_int_least32(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:625(title) msgid "cut_assert_not_equal_int_least32()" msgstr "" #: xml/cut-assertions.xml:627(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_int_least32(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:646(title) msgid "cut_assert_equal_int_least64()" msgstr "" #: xml/cut-assertions.xml:648(programlisting) #, no-wrap msgid "#define cut_assert_equal_int_least64(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:667(title) msgid "cut_assert_not_equal_int_least64()" msgstr "" #: xml/cut-assertions.xml:669(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_int_least64(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:688(title) msgid "cut_assert_equal_int_fast8()" msgstr "" #: xml/cut-assertions.xml:690(programlisting) #, no-wrap msgid "#define cut_assert_equal_int_fast8(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:709(title) msgid "cut_assert_not_equal_int_fast8()" msgstr "" #: xml/cut-assertions.xml:711(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_int_fast8(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:730(title) msgid "cut_assert_equal_int_fast16()" msgstr "" #: xml/cut-assertions.xml:732(programlisting) #, no-wrap msgid "#define cut_assert_equal_int_fast16(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:751(title) msgid "cut_assert_not_equal_int_fast16()" msgstr "" #: xml/cut-assertions.xml:753(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_int_fast16(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:772(title) msgid "cut_assert_equal_int_fast32()" msgstr "" #: xml/cut-assertions.xml:774(programlisting) #, no-wrap msgid "#define cut_assert_equal_int_fast32(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:793(title) msgid "cut_assert_not_equal_int_fast32()" msgstr "" #: xml/cut-assertions.xml:795(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_int_fast32(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:814(title) msgid "cut_assert_equal_int_fast64()" msgstr "" #: xml/cut-assertions.xml:816(programlisting) #, no-wrap msgid "#define cut_assert_equal_int_fast64(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:835(title) msgid "cut_assert_not_equal_int_fast64()" msgstr "" #: xml/cut-assertions.xml:837(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_int_fast64(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:856(title) msgid "cut_assert_equal_intptr()" msgstr "" #: xml/cut-assertions.xml:858(programlisting) #, no-wrap msgid "#define cut_assert_equal_intptr(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:877(title) msgid "cut_assert_not_equal_intptr()" msgstr "" #: xml/cut-assertions.xml:879(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_intptr(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:898(title) msgid "cut_assert_equal_intmax()" msgstr "" #: xml/cut-assertions.xml:900(programlisting) #, no-wrap msgid "#define cut_assert_equal_intmax(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:919(title) msgid "cut_assert_not_equal_intmax()" msgstr "" #: xml/cut-assertions.xml:921(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_intmax(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:940(title) msgid "cut_assert_equal_uint ()" msgstr "" #: xml/cut-assertions.xml:942(programlisting) #, no-wrap msgid "" "void cut_assert_equal_uint (unsigned int expected,\n" " unsigned int actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:949(simpara) xml/cut-assertions.xml:968(simpara) #: xml/cut-assertions.xml:989(simpara) xml/cut-assertions.xml:1010(simpara) #: xml/cut-assertions.xml:1031(simpara) xml/cut-assertions.xml:1052(simpara) #: xml/cut-assertions.xml:1073(simpara) xml/cut-assertions.xml:1094(simpara) #: xml/cut-assertions.xml:1115(simpara) xml/cut-assertions.xml:1136(simpara) #: xml/cut-assertions.xml:1157(simpara) xml/cut-assertions.xml:1178(simpara) #: xml/cut-assertions.xml:1199(simpara) xml/cut-assertions.xml:1220(simpara) #: xml/cut-assertions.xml:1241(simpara) xml/cut-assertions.xml:1262(simpara) #: xml/cut-assertions.xml:1283(simpara) xml/cut-assertions.xml:1304(simpara) #: xml/cut-assertions.xml:1325(simpara) xml/cut-assertions.xml:1346(simpara) #: xml/cut-assertions.xml:1367(simpara) xml/cut-assertions.xml:1388(simpara) msgid "an expected unsigned integer value." msgstr "期待する符号無し整数の値。" #: xml/cut-assertions.xml:952(simpara) xml/cut-assertions.xml:971(simpara) #: xml/cut-assertions.xml:992(simpara) xml/cut-assertions.xml:1013(simpara) #: xml/cut-assertions.xml:1034(simpara) xml/cut-assertions.xml:1055(simpara) #: xml/cut-assertions.xml:1076(simpara) xml/cut-assertions.xml:1097(simpara) #: xml/cut-assertions.xml:1118(simpara) xml/cut-assertions.xml:1139(simpara) #: xml/cut-assertions.xml:1160(simpara) xml/cut-assertions.xml:1181(simpara) #: xml/cut-assertions.xml:1202(simpara) xml/cut-assertions.xml:1223(simpara) #: xml/cut-assertions.xml:1244(simpara) xml/cut-assertions.xml:1265(simpara) #: xml/cut-assertions.xml:1286(simpara) xml/cut-assertions.xml:1307(simpara) #: xml/cut-assertions.xml:1328(simpara) xml/cut-assertions.xml:1349(simpara) #: xml/cut-assertions.xml:1370(simpara) xml/cut-assertions.xml:1391(simpara) msgid "an actual unsigned integer value." msgstr "実際の符号無し符号整数の値。" #: xml/cut-assertions.xml:959(title) msgid "cut_assert_not_equal_uint ()" msgstr "" #: xml/cut-assertions.xml:961(programlisting) #, no-wrap msgid "" "void cut_assert_not_equal_uint (unsigned int expected,\n" " unsigned int actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:978(title) msgid "cut_assert_equal_uint_least8()" msgstr "" #: xml/cut-assertions.xml:980(programlisting) #, no-wrap msgid "#define cut_assert_equal_uint_least8(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:999(title) msgid "cut_assert_not_equal_uint_least8()" msgstr "" #: xml/cut-assertions.xml:1001(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uint_least8(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1020(title) msgid "cut_assert_equal_uint_least16()" msgstr "" #: xml/cut-assertions.xml:1022(programlisting) #, no-wrap msgid "#define cut_assert_equal_uint_least16(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1041(title) msgid "cut_assert_not_equal_uint_least16()" msgstr "" #: xml/cut-assertions.xml:1043(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uint_least16(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1062(title) msgid "cut_assert_equal_uint_least32()" msgstr "" #: xml/cut-assertions.xml:1064(programlisting) #, no-wrap msgid "#define cut_assert_equal_uint_least32(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1083(title) msgid "cut_assert_not_equal_uint_least32()" msgstr "" #: xml/cut-assertions.xml:1085(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uint_least32(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1104(title) msgid "cut_assert_equal_uint_least64()" msgstr "" #: xml/cut-assertions.xml:1106(programlisting) #, no-wrap msgid "#define cut_assert_equal_uint_least64(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1125(title) msgid "cut_assert_not_equal_uint_least64()" msgstr "" #: xml/cut-assertions.xml:1127(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uint_least64(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1146(title) msgid "cut_assert_equal_uint_fast8()" msgstr "" #: xml/cut-assertions.xml:1148(programlisting) #, no-wrap msgid "#define cut_assert_equal_uint_fast8(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1167(title) msgid "cut_assert_not_equal_uint_fast8()" msgstr "" #: xml/cut-assertions.xml:1169(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uint_fast8(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1188(title) msgid "cut_assert_equal_uint_fast16()" msgstr "" #: xml/cut-assertions.xml:1190(programlisting) #, no-wrap msgid "#define cut_assert_equal_uint_fast16(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1209(title) msgid "cut_assert_not_equal_uint_fast16()" msgstr "" #: xml/cut-assertions.xml:1211(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uint_fast16(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1230(title) msgid "cut_assert_equal_uint_fast32()" msgstr "" #: xml/cut-assertions.xml:1232(programlisting) #, no-wrap msgid "#define cut_assert_equal_uint_fast32(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1251(title) msgid "cut_assert_not_equal_uint_fast32()" msgstr "" #: xml/cut-assertions.xml:1253(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uint_fast32(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1272(title) msgid "cut_assert_equal_uint_fast64()" msgstr "" #: xml/cut-assertions.xml:1274(programlisting) #, no-wrap msgid "#define cut_assert_equal_uint_fast64(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1293(title) msgid "cut_assert_not_equal_uint_fast64()" msgstr "" #: xml/cut-assertions.xml:1295(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uint_fast64(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1314(title) msgid "cut_assert_equal_uintptr()" msgstr "" #: xml/cut-assertions.xml:1316(programlisting) #, no-wrap msgid "#define cut_assert_equal_uintptr(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1335(title) msgid "cut_assert_not_equal_uintptr()" msgstr "" #: xml/cut-assertions.xml:1337(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uintptr(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1356(title) msgid "cut_assert_equal_uintmax()" msgstr "" #: xml/cut-assertions.xml:1358(programlisting) #, no-wrap msgid "#define cut_assert_equal_uintmax(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1377(title) msgid "cut_assert_not_equal_uintmax()" msgstr "" #: xml/cut-assertions.xml:1379(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_uintmax(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1398(title) msgid "cut_assert_equal_size ()" msgstr "" #: xml/cut-assertions.xml:1400(programlisting) #, no-wrap msgid "" "void cut_assert_equal_size (size_t expected,\n" " size_t actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1407(simpara) xml/cut-assertions.xml:1426(simpara) msgid "an expected size_t value." msgstr "期待するsize_tの値。" #: xml/cut-assertions.xml:1410(simpara) xml/cut-assertions.xml:1429(simpara) msgid "an actual size_t value." msgstr "実際のsize_tの値。" #: xml/cut-assertions.xml:1417(title) msgid "cut_assert_not_equal_size ()" msgstr "" #: xml/cut-assertions.xml:1419(programlisting) #, no-wrap msgid "" "void cut_assert_not_equal_size (size_t expected,\n" " size_t actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1436(title) msgid "cut_assert_equal_double ()" msgstr "" #: xml/cut-assertions.xml:1438(programlisting) #, no-wrap msgid "" "void cut_assert_equal_double (double expected,\n" " double error,\n" " double actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1442(para) msgid "" "Passes if (expected - error) " "<= actual <= (expected + " "error)." msgstr "" "(expected - error) <= " "actual <= (expected + " "error)が成り立つときパスします。" #: xml/cut-assertions.xml:1446(simpara) xml/cut-assertions.xml:1469(simpara) msgid "an expected float value." msgstr "期待する浮動小数点数。" #: xml/cut-assertions.xml:1449(simpara) xml/cut-assertions.xml:1472(simpara) msgid "a float value that specifies error range." msgstr "誤差範囲を示す浮動小数点数。" #: xml/cut-assertions.xml:1452(simpara) xml/cut-assertions.xml:1475(simpara) msgid "an actual float value." msgstr "実際の浮動小数点数。" #: xml/cut-assertions.xml:1459(title) msgid "cut_assert_not_equal_double ()" msgstr "" #: xml/cut-assertions.xml:1461(programlisting) #, no-wrap msgid "" "void cut_assert_not_equal_double (double expected,\n" " double error,\n" " double actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1465(para) msgid "" "Passes if actual < (expected - error) && (expected + error) < actual." msgstr "" "actual < (expected - " "error) && (expected + " "error) < actualが成り立つと" "きパスします。" #: xml/cut-assertions.xml:1482(title) msgid "cut_assert_equal_char()" msgstr "" #: xml/cut-assertions.xml:1484(programlisting) #, no-wrap msgid "#define cut_assert_equal_char(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1490(programlisting) #, no-wrap msgid "" "\n" "cut_assert_equal_char('a', 'a'); -> Pass\n" "cut_assert_equal_char('a', 'b'); -> Fail\n" msgstr "" "\n" "cut_assert_equal_char('a', 'a'); -> パス\n" "cut_assert_equal_char('a', 'b'); -> 失敗\n" #: xml/cut-assertions.xml:1496(simpara) xml/cut-assertions.xml:1520(simpara) msgid "an expected char value." msgstr "期待する文字。" #: xml/cut-assertions.xml:1499(simpara) xml/cut-assertions.xml:1523(simpara) msgid "an actual char value." msgstr "実際の文字。" #: xml/cut-assertions.xml:1506(title) msgid "cut_assert_not_equal_char()" msgstr "" #: xml/cut-assertions.xml:1508(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_char(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1514(programlisting) #, no-wrap msgid "" "\n" "cut_assert_not_equal_char('a', 'b'); -> Pass\n" "cut_assert_not_equal_char('a', 'a'); -> Fail\n" msgstr "" "\n" "cut_assert_not_equal_char('a', 'b'); -> パス\n" "cut_assert_not_equal_char('a', 'a'); -> 失敗\n" #: xml/cut-assertions.xml:1530(title) msgid "cut_assert_equal_string ()" msgstr "" #: xml/cut-assertions.xml:1532(programlisting) #, no-wrap msgid "" "void cut_assert_equal_string (const char *expected,\n" " const char *actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1535(para) xml/cut-assertions.xml:1595(para) msgid "" "Passes if both expected and actual are NULL or " "strcmp(expected, actual) == 0." msgstr "" "expectedactualがどちらとも" "NULL、あるいはstrcmp" "(expected, actual) == 0が成り立" "つときにパスします。" #: xml/cut-assertions.xml:1541(programlisting) #, no-wrap msgid "" "\n" "cut_assert_equal_string(\"abc\", \"abc\"); -> Pass\n" "cut_assert_equal_string(NULL, NULL); -> Pass\n" "cut_assert_equal_string(\"abc\", \"ABC\"); -> Fail\n" "cut_assert_equal_string(\"abc\", NULL); -> Fail\n" "cut_assert_equal_string(NULL, \"abc\"); -> Fail\n" msgstr "" "\n" "cut_assert_equal_string(\"abc\", \"abc\"); -> パス\n" "cut_assert_equal_string(NULL, NULL); -> パス\n" "cut_assert_equal_string(\"abc\", \"ABC\"); -> 失敗\n" "cut_assert_equal_string(\"abc\", NULL); -> 失敗\n" "cut_assert_equal_string(NULL, \"abc\"); -> 失敗\n" #: xml/cut-assertions.xml:1550(simpara) xml/cut-assertions.xml:1580(simpara) #: xml/cut-assertions.xml:1603(simpara) xml/cut-assertions.xml:1621(simpara) #: xml/cut-assertions.xml:1654(simpara) xml/cut-assertions.xml:1689(simpara) msgid "an expected string value." msgstr "期待する文字列。" #: xml/cut-assertions.xml:1553(simpara) xml/cut-assertions.xml:1583(simpara) #: xml/cut-assertions.xml:1624(simpara) xml/cut-assertions.xml:1657(simpara) #: xml/cut-assertions.xml:1692(simpara) msgid "an actual string value." msgstr "実際の文字列の値。" #: xml/cut-assertions.xml:1560(title) msgid "cut_assert_not_equal_string ()" msgstr "" #: xml/cut-assertions.xml:1562(programlisting) #, no-wrap msgid "" "void cut_assert_not_equal_string (const char *expected,\n" " const char *actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1565(para) msgid "" "Passes if one of expected and actual is NULL or " "strcmp(expected, actual) != 0." msgstr "" "expectedactualのどちらかが" "NULLのとき、または、" "strcmp(expected, actual) != 0の" "ときパスします。" #: xml/cut-assertions.xml:1571(programlisting) #, no-wrap msgid "" "\n" "cut_assert_not_equal_string(\"abc\", NULL); -> Pass\n" "cut_assert_not_equal_string(NULL, \"abc\"); -> Pass\n" "cut_assert_not_equal_string(\"abc\", \"ABC\"); -> Pass\n" "cut_assert_not_equal_string(\"abc\", \"abc\"); -> Fail\n" "cut_assert_not_equal_string(NULL, NULL); -> Fail\n" msgstr "" "\n" "cut_assert_not_equal_string(\"abc\", NULL); -> パス\n" "cut_assert_not_equal_string(NULL, \"abc\"); -> パス\n" "cut_assert_not_equal_string(\"abc\", \"ABC\"); -> パス\n" "cut_assert_not_equal_string(\"abc\", \"abc\"); -> 失敗\n" "cut_assert_not_equal_string(NULL, NULL); -> 失敗\n" #: xml/cut-assertions.xml:1590(title) msgid "cut_assert_equal_string_with_free ()" msgstr "" #: xml/cut-assertions.xml:1592(programlisting) #, no-wrap msgid "" "void cut_assert_equal_string_with_free (const char *expected,\n" " const char *actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1599(para) msgid "" "See also cut_assert_equal_string() for examples." msgstr "" "使用例はcut_assert_equal_string()を見てください。" #: xml/cut-assertions.xml:1606(simpara) msgid "an actual string value that is freed." msgstr "実際の文字列の値。(チェック後に開放される)" #: xml/cut-assertions.xml:1613(title) msgid "cut_assert_equal_string_or_null ()" msgstr "" #: xml/cut-assertions.xml:1615(programlisting) #, no-wrap msgid "" "void cut_assert_equal_string_or_null (const char *expected,\n" " const char *actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1618(para) msgid "" "cut_assert_equal_string_or_null has been deprecated since " "version 0.3 and should not be used in newly-written code. Use cut_assert_equal_string() instead." msgstr "" "cut_assert_equal_string_or_nullはバージョン0.3から非推奨に" "なりました。新しく書くコードでは使わないでください。代わりにcut_assert_equal_string()を使ってください。" #: xml/cut-assertions.xml:1631(title) msgid "cut_assert_equal_substring ()" msgstr "" #: xml/cut-assertions.xml:1633(programlisting) #, no-wrap msgid "" "void cut_assert_equal_substring (const char *expected,\n" " const char *actual,\n" " size_t length,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1637(para) msgid "" "Passes if (1) both expected and actual are NULL " "and length == 1 or (2) strncmp(expected, actual, length) == " "0." msgstr "" "(1)expectedactualが両方とも" "NULLで" "length == 1が成り立つとき、または、(2) strncmp" "(expected, actual, " "length) == 0が成り立つときパスします。" #: xml/cut-assertions.xml:1644(programlisting) #, no-wrap msgid "" "\n" "cut_assert_equal_substring(\"abcdef\", \"abcDEF\", 3); -> Pass\n" "cut_assert_equal_substring(NULL, NULL, 0); -> Pass\n" "cut_assert_equal_substring(NULL, NULL, 3); -> Fail\n" "cut_assert_equal_substring(\"abc\", \"ABC\", 3); -> Fail\n" "cut_assert_equal_substring(\"abc\", NULL, 3); -> Fail\n" "cut_assert_equal_substring(NULL, \"abc\", 3); -> Fail\n" msgstr "" "\n" "cut_assert_equal_substring(\"abcdef\", \"abcDEF\", 3); -> パス\n" "cut_assert_equal_substring(NULL, NULL, 0); -> パス\n" "cut_assert_equal_substring(NULL, NULL, 3); -> 失敗\n" "cut_assert_equal_substring(\"abc\", \"ABC\", 3); -> 失敗\n" "cut_assert_equal_substring(\"abc\", NULL, 3); -> 失敗\n" "cut_assert_equal_substring(NULL, \"abc\", 3); -> 失敗\n" #: xml/cut-assertions.xml:1659(term) xml/cut-assertions.xml:1694(term) msgid "length :" msgstr "" #: xml/cut-assertions.xml:1660(simpara) xml/cut-assertions.xml:1695(simpara) msgid "compared string length." msgstr "" #: xml/cut-assertions.xml:1667(title) msgid "cut_assert_not_equal_substring ()" msgstr "" #: xml/cut-assertions.xml:1669(programlisting) #, no-wrap msgid "" "void cut_assert_not_equal_substring (const char *expected,\n" " const char *actual,\n" " size_t length,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1673(para) msgid "" "Passes if (1) one of expected and actual is NULL or " "(2) strncmp(expected, actual, " "length) != 0." msgstr "" "(1) expectedactualのどちらか" "がNULL、または、(2) " "strncmp(expected, actual, " "length) != 0が成り立つときパスします。" #: xml/cut-assertions.xml:1679(programlisting) #, no-wrap msgid "" "\n" "cut_assert_not_equal_substring(\"abc\", \"ABC\", 3); -> Pass\n" "cut_assert_not_equal_substring(\"abc\", NULL, 3); -> Pass\n" "cut_assert_not_equal_substring(NULL, \"abc\", 3); -> Pass\n" "cut_assert_not_equal_substring(\"abcdef\", \"abcDEF\", 3); -> Fail\n" "cut_assert_not_equal_substring(NULL, NULL, 0); -> Fail\n" "cut_assert_not_equal_substring(NULL, NULL, 3); -> Fail\n" msgstr "" "\n" "cut_assert_not_equal_substring(\"abc\", \"ABC\", 3); -> パス\n" "cut_assert_not_equal_substring(\"abc\", NULL, 3); -> パス\n" "cut_assert_not_equal_substring(NULL, \"abc\", 3); -> パス\n" "cut_assert_not_equal_substring(\"abcdef\", \"abcDEF\", 3); -> 失敗\n" "cut_assert_not_equal_substring(NULL, NULL, 0); -> 失敗\n" "cut_assert_not_equal_substring(NULL, NULL, 3); -> 失敗\n" #: xml/cut-assertions.xml:1702(title) msgid "cut_assert_equal_memory ()" msgstr "" #: xml/cut-assertions.xml:1704(programlisting) #, no-wrap msgid "" "void cut_assert_equal_memory (const void *expected,\n" " size_t expected_size,\n" " const void *actual,\n" " size_t actual_size,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1709(para) msgid "" "Passes if expected_size == actual_size and memcmp(expected, actual, expected_size) == 0." msgstr "" "expected_size == actual_sizeが" "成り立ち、かつ、memcmp(expected, actual, expected_size) == 0が成り立つときにパスし" "ます。" #: xml/cut-assertions.xml:1714(simpara) xml/cut-assertions.xml:1742(simpara) msgid "an expected data." msgstr "期待するデータ。" #: xml/cut-assertions.xml:1716(term) xml/cut-assertions.xml:1744(term) msgid "expected_size :" msgstr "" #: xml/cut-assertions.xml:1717(simpara) xml/cut-assertions.xml:1745(simpara) msgid "a size of expected." msgstr "expectedのサイズ。" #: xml/cut-assertions.xml:1720(simpara) xml/cut-assertions.xml:1748(simpara) msgid "an actual data." msgstr "実際のデータ。" #: xml/cut-assertions.xml:1722(term) xml/cut-assertions.xml:1750(term) msgid "actual_size :" msgstr "" #: xml/cut-assertions.xml:1723(simpara) xml/cut-assertions.xml:1751(simpara) msgid "a size of actual." msgstr "actualのサイズ。" #: xml/cut-assertions.xml:1730(title) msgid "cut_assert_not_equal_memory ()" msgstr "" #: xml/cut-assertions.xml:1732(programlisting) #, no-wrap msgid "" "void cut_assert_not_equal_memory (const void *expected,\n" " size_t expected_size,\n" " const void *actual,\n" " size_t actual_size,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1737(para) msgid "" "Passes if expected_size != actual_size or memcmp(expected, actual, expected_size) != 0." msgstr "" "expected_size != actual_sizeま" "たはmemcmp(expected, actual, " "expected_size) != 0が成り立つときパスします。" #: xml/cut-assertions.xml:1758(title) msgid "cut_assert_equal_string_array ()" msgstr "" #: xml/cut-assertions.xml:1760(programlisting) #, no-wrap msgid "" "void cut_assert_equal_string_array (char **expected,\n" " char **actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1763(para) xml/cut-assertions.xml:1784(para) msgid "" "Passes if both expected and actual are not NULL and have same content (strcmp() == 0) strings." msgstr "" "expectedactualがどちらとも" "NULLではなく、どちらも" "同じ内容の文字列(strcmp() == 0)を持つときにパスします。" #: xml/cut-assertions.xml:1768(simpara) xml/cut-assertions.xml:1789(simpara) msgid "" "an expected NULL-" "terminated array of strings." msgstr "" "期待する文字列の配列。配列はNULL終端。" #: xml/cut-assertions.xml:1771(simpara) msgid "" "an actual NULL-" "terminated array of strings." msgstr "" "実際の文字列の配列。配列はNULL終端。" #: xml/cut-assertions.xml:1778(title) msgid "cut_assert_equal_string_array_with_free ()" msgstr "" #: xml/cut-assertions.xml:1780(programlisting) #, no-wrap msgid "" "void cut_assert_equal_string_array_with_free\n" " (char **expected,\n" " char **actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1792(simpara) msgid "" "an actual NULL-" "terminated array of strings that are freed." msgstr "" "実際の文字列の配列。配列はNULL終端。(チェック後に開放される)" #: xml/cut-assertions.xml:1799(title) msgid "cut_assert_operator()" msgstr "" #: xml/cut-assertions.xml:1801(programlisting) #, no-wrap msgid "#define cut_assert_operator(lhs, operator, rhs, ...)" msgstr "" #: xml/cut-assertions.xml:1802(para) xml/cut-assertions.xml:1828(para) #: xml/cut-assertions.xml:1854(para) xml/cut-assertions.xml:1880(para) #: xml/cut-assertions.xml:1906(para) msgid "" "Passes if (lhs operator " "rhs) is TRUE." msgstr "" "(lhs operator rhs)が真のときにパスします。" #: xml/cut-assertions.xml:1807(programlisting) #, no-wrap msgid "" "\n" "cut_assert_operator(1, <, 2) -> (1 < 2);\n" msgstr "" #: xml/cut-assertions.xml:1811(term) xml/cut-assertions.xml:1837(term) #: xml/cut-assertions.xml:1863(term) xml/cut-assertions.xml:1889(term) #: xml/cut-assertions.xml:1915(term) msgid "lhs :" msgstr "" #: xml/cut-assertions.xml:1812(simpara) msgid "a left hand side value." msgstr "左辺値。" #: xml/cut-assertions.xml:1814(term) xml/cut-assertions.xml:1840(term) #: xml/cut-assertions.xml:1866(term) xml/cut-assertions.xml:1892(term) #: xml/cut-assertions.xml:1918(term) msgid "operator :" msgstr "" #: xml/cut-assertions.xml:1815(simpara) xml/cut-assertions.xml:1841(simpara) #: xml/cut-assertions.xml:1867(simpara) xml/cut-assertions.xml:1893(simpara) #: xml/cut-assertions.xml:1919(simpara) msgid "a binary operator." msgstr "二項演算子。" #: xml/cut-assertions.xml:1817(term) xml/cut-assertions.xml:1843(term) #: xml/cut-assertions.xml:1869(term) xml/cut-assertions.xml:1895(term) #: xml/cut-assertions.xml:1921(term) msgid "rhs :" msgstr "" #: xml/cut-assertions.xml:1818(simpara) msgid "a right hand side value." msgstr "右辺値。" #: xml/cut-assertions.xml:1825(title) msgid "cut_assert_operator_int()" msgstr "" #: xml/cut-assertions.xml:1827(programlisting) #, no-wrap msgid "#define cut_assert_operator_int(lhs, operator, rhs, ...)" msgstr "" #: xml/cut-assertions.xml:1833(programlisting) #, no-wrap msgid "" "\n" "cut_assert_operator_int(1, <, 2) -> (1 < 2);\n" msgstr "" #: xml/cut-assertions.xml:1838(simpara) msgid "a left hand side integer value." msgstr "左辺の整数の値。" #: xml/cut-assertions.xml:1844(simpara) msgid "a right hand side integer value." msgstr "右辺の整数の値。" #: xml/cut-assertions.xml:1851(title) msgid "cut_assert_operator_uint()" msgstr "" #: xml/cut-assertions.xml:1853(programlisting) #, no-wrap msgid "#define cut_assert_operator_uint(lhs, operator, rhs, ...)" msgstr "" #: xml/cut-assertions.xml:1859(programlisting) #, no-wrap msgid "" "\n" "cut_assert_operator_uint(1, <, 2) -> (1 < 2);\n" msgstr "" #: xml/cut-assertions.xml:1864(simpara) msgid "a left hand side unsigned integer value." msgstr "左辺の符号無し整数の値。" #: xml/cut-assertions.xml:1870(simpara) msgid "a right hand side unsigned integer value." msgstr "右辺の符号無し整数の値。" #: xml/cut-assertions.xml:1877(title) msgid "cut_assert_operator_size()" msgstr "" #: xml/cut-assertions.xml:1879(programlisting) #, no-wrap msgid "#define cut_assert_operator_size(lhs, operator, rhs, ...)" msgstr "" #: xml/cut-assertions.xml:1885(programlisting) #, no-wrap msgid "" "\n" "cut_assert_operator_size(1, <, 2) -> (1 < 2);\n" msgstr "" #: xml/cut-assertions.xml:1890(simpara) msgid "a left hand side size_t value." msgstr "左辺のsize_tの値。" #: xml/cut-assertions.xml:1896(simpara) msgid "a right hand side size_t value." msgstr "右辺のsize_tの値。" #: xml/cut-assertions.xml:1903(title) msgid "cut_assert_operator_double()" msgstr "" #: xml/cut-assertions.xml:1905(programlisting) #, no-wrap msgid "#define cut_assert_operator_double(lhs, operator, rhs, ...)" msgstr "" #: xml/cut-assertions.xml:1911(programlisting) #, no-wrap msgid "" "\n" "cut_assert_operator_double(1.1, <, 2.2) -> (1.1 < 2.2);\n" msgstr "" #: xml/cut-assertions.xml:1916(simpara) msgid "a left hand side double value." msgstr "左辺の浮動小数点値。" #: xml/cut-assertions.xml:1922(simpara) msgid "a right hand side double value." msgstr "右辺の浮動小数点値。" #: xml/cut-assertions.xml:1929(title) msgid "cut_assert_equal()" msgstr "" #: xml/cut-assertions.xml:1931(programlisting) #, no-wrap msgid "#define cut_assert_equal(function, expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:1932(para) msgid "" "Passes if function(expected, " "actual) returns CUT_TRUE." msgstr "" "function(expected, " "actual)がCUT_TRUEを返すときパスします。" #: xml/cut-assertions.xml:1937(programlisting) #, no-wrap msgid "" "\n" "cut_assert_equal(!strcmp, \"abc\", \"abc\"); -> Pass\n" msgstr "" "\n" "cut_assert_equal(!strcmp, \"abc\", \"abc\"); -> パス\n" #: xml/cut-assertions.xml:1942(simpara) msgid "" "a function that compares actual with " "expected." msgstr "" "actualexpectedを比較する関" "数。" #: xml/cut-assertions.xml:1955(title) msgid "cut_assert_errno ()" msgstr "" #: xml/cut-assertions.xml:1957(programlisting) #, no-wrap msgid "void cut_assert_errno (...);" msgstr "" #: xml/cut-assertions.xml:1958(para) msgid "Passes if errno is 0." msgstr "errnoが0だとパスします。" #: xml/cut-assertions.xml:1963(programlisting) #, no-wrap msgid "" "\n" "count = write(stdout, buffer, strlen(buffer));\n" "cut_assert_errno(\"Failed to write\"); -> Pass when count != -1\n" msgstr "" "\n" "count = write(stdout, buffer, strlen(buffer));\n" "cut_assert_errno(\"Failed to write\"); -> count != -1のときパス\n" #: xml/cut-assertions.xml:1973(title) msgid "cut_assert_file_exist ()" msgstr "" #: xml/cut-assertions.xml:1975(programlisting) #, no-wrap msgid "" "void cut_assert_file_exist (const char *path,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:1977(para) msgid "" "cut_assert_file_exist has been deprecated since version " "1.0.2 and should not be used in newly-written code. Use cut_assert_path_exist() " "instead." msgstr "" "cut_assert_file_existはバージョン1.0.2から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにcut_assert_path_exist()を使っ" "てください。" #: xml/cut-assertions.xml:1978(para) xml/cut-assertions.xml:2001(para) #: xml/cut-assertions.xml:2023(para) msgid "" "Passes if path exists. It may or may not be a regular " "file." msgstr "" "pathが存在するときにパスします。普通のファイルかもしれ" "ませんし、そうでないかもしれません。(例えばシンボリックリンクやディレクトリ" "など)" #: xml/cut-assertions.xml:1983(programlisting) #, no-wrap msgid "" "\n" "cut_assert_file_exist(\"/tmp\"); -> Pass on many environment\n" "cut_assert_file_exist(\"/non-existent\"); -> Fail\n" msgstr "" "\n" "cut_assert_file_exist(\"/tmp\"); -> 多くの環境ではパス\n" "cut_assert_file_exist(\"/non-existent\"); -> 失敗\n" #: xml/cut-assertions.xml:1989(simpara) xml/cut-assertions.xml:2012(simpara) #: xml/cut-assertions.xml:2034(simpara) xml/cut-assertions.xml:2057(simpara) #: xml/cut-assertions.xml:2079(simpara) msgid "the path to test." msgstr "テストするパス。" #: xml/cut-assertions.xml:1996(title) msgid "cut_assert_path_exist ()" msgstr "" #: xml/cut-assertions.xml:1998(programlisting) #, no-wrap msgid "" "void cut_assert_path_exist (const char *path,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2000(para) msgid "" "cut_assert_path_exist has been deprecated since version " "1.1.5 and should not be used in newly-written code. Use cut_assert_exist_path() " "instead." msgstr "" "cut_assert_path_existはバージョン1.1.5から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにcut_assert_exist_path()を使っ" "てください。" #: xml/cut-assertions.xml:2006(programlisting) #, no-wrap msgid "" "\n" "cut_assert_path_exist(\"/tmp\"); -> Pass on many environment\n" "cut_assert_path_exist(\"/non-existent\"); -> Fail\n" msgstr "" "\n" "cut_assert_path_exist(\"/tmp\"); -> 多くの環境ではパス\n" "cut_assert_path_exist(\"/non-existent\"); -> 失敗\n" #: xml/cut-assertions.xml:2019(title) msgid "cut_assert_exist_path ()" msgstr "" #: xml/cut-assertions.xml:2021(programlisting) #, no-wrap msgid "" "void cut_assert_exist_path (const char *path,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2028(programlisting) #, no-wrap msgid "" "\n" "cut_assert_exist_path(\"/tmp\"); -> Pass on many environment\n" "cut_assert_exist_path(\"/non-existent\"); -> Fail\n" msgstr "" "\n" "cut_assert_exist_path(\"/tmp\"); -> 多くの環境ではパス\n" "cut_assert_exist_path(\"/non-existent\"); -> 失敗\n" #: xml/cut-assertions.xml:2041(title) msgid "cut_assert_path_not_exist ()" msgstr "" #: xml/cut-assertions.xml:2043(programlisting) #, no-wrap msgid "" "void cut_assert_path_not_exist (const char *path,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2045(para) msgid "" "cut_assert_path_not_exist has been deprecated since " "version 1.1.5 and should not be used in newly-written code. Use cut_assert_not_exist_path() instead." msgstr "" "cut_assert_path_not_existはバージョン1.1.5から非推奨になり" "ました。新しく書くコードでは使わないでください。代わりにcut_assert_not_exist_path()を使ってください。" #: xml/cut-assertions.xml:2046(para) xml/cut-assertions.xml:2068(para) msgid "Passes if path doesn't exist." msgstr "pathが存在しないとパスします。" #: xml/cut-assertions.xml:2051(programlisting) #, no-wrap msgid "" "\n" "cut_assert_path_not_exist(\"/non-existent\"); -> Pass on many environment\n" "cut_assert_path_not_exist(\"/tmp\"); -> Fail\n" msgstr "" "\n" "cut_assert_path_not_exist(\"/non-existent\"); -> 多くの環境ではパス\n" "cut_assert_path_not_exist(\"/tmp\"); -> 失敗\n" #: xml/cut-assertions.xml:2064(title) msgid "cut_assert_not_exist_path ()" msgstr "" #: xml/cut-assertions.xml:2066(programlisting) #, no-wrap msgid "" "void cut_assert_not_exist_path (const char *path,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2073(programlisting) #, no-wrap msgid "" "\n" "cut_assert_not_exist_path(\"/non-existent\"); -> Pass on many environment\n" "cut_assert_not_exist_path(\"/tmp\"); -> Fail\n" msgstr "" "\n" "cut_assert_not_exist_path(\"/non-existent\"); -> 多くの環境ではパス\n" "cut_assert_not_exist_path(\"/tmp\"); -> 失敗\n" #: xml/cut-assertions.xml:2086(title) msgid "cut_assert_match ()" msgstr "" #: xml/cut-assertions.xml:2088(programlisting) #, no-wrap msgid "" "void cut_assert_match (const char *pattern,\n" " const char *actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2091(para) msgid "" "Passes if pattern matches string." msgstr "" "patternstringにマッチしたとき" "パスします。" #: xml/cut-assertions.xml:2096(programlisting) #, no-wrap msgid "" "\n" "cut_assert_match(\"^abc\", \"abc\"); -> Pass\n" "cut_assert_match(\"^abc\", \" abc\"); -> Fail\n" msgstr "" "\n" "cut_assert_match(\"^abc\", \"abc\"); -> パス\n" "cut_assert_match(\"^abc\", \" abc\"); -> 失敗\n" #: xml/cut-assertions.xml:2105(simpara) msgid "the string to be matched." msgstr "マッチされる文字列。" #: xml/cut-assertions.xml:2112(title) msgid "cut_assert_match_with_free ()" msgstr "cut_assert_match_with_free ()" #: xml/cut-assertions.xml:2114(programlisting) #, no-wrap msgid "" "void cut_assert_match_with_free (const char *pattern,\n" " const char *actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2117(para) msgid "" "Passes if pattern matches string. See cut_assert_match" "() for detail." msgstr "" "patternstringにマッチしたとき" "パスします。詳細はcut_assert_match()を見てください。" #: xml/cut-assertions.xml:2122(simpara) msgid "the regular expression as string." msgstr "正規表現。(文字列で指定)" #: xml/cut-assertions.xml:2125(simpara) msgid "the string to be matched that is freed." msgstr "マッチされる文字列。(チェック後に開放される)" #: xml/cut-assertions.xml:2132(title) msgid "cut_assert_equal_pointer ()" msgstr "" #: xml/cut-assertions.xml:2134(programlisting) #, no-wrap msgid "" "void cut_assert_equal_pointer (const void *expected,\n" " const void *actual,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2141(simpara) msgid "an expected pointer." msgstr "期待するポインタ。" #: xml/cut-assertions.xml:2144(simpara) msgid "an actual pointer." msgstr "実際のポインタ。" #: xml/cut-assertions.xml:2151(title) msgid "cut_assert_equal_fixture_data_string ()" msgstr "" #: xml/cut-assertions.xml:2153(programlisting) #, no-wrap msgid "" "void cut_assert_equal_fixture_data_string\n" " (const char *expected,\n" " const void *path,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2157(para) msgid "" "Passes if expected == cut_get_fixture_data_string" "(path, ...)." msgstr "" "expected == cut_get_fixture_data_string" "(path, ...)が成り立つときパスします。" #: xml/cut-assertions.xml:2161(simpara) msgid "an expected string." msgstr "期待する文字列。" #: xml/cut-assertions.xml:2171(title) msgid "cut_assert_equal_sockaddr()" msgstr "" #: xml/cut-assertions.xml:2173(programlisting) #, no-wrap msgid "#define cut_assert_equal_sockaddr(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:2177(para) msgid "This assertion can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT." msgstr "この検証はCUT_DISABLE_SOCKET_SUPPORTを定義すると無効にできます。" #: xml/cut-assertions.xml:2181(simpara) msgid "an expected socket address." msgstr "期待するソケットアドレス。" #: xml/cut-assertions.xml:2184(simpara) msgid "an actual socket address." msgstr "実際のソケットアドレス。" #: xml/cut-assertions.xml:2191(title) msgid "cut_assert_equal_file_raw()" msgstr "" #: xml/cut-assertions.xml:2193(programlisting) #, no-wrap msgid "#define cut_assert_equal_file_raw(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:2194(para) msgid "" "Passes if the content of expected == the content of " "actual." msgstr "" "expectedの内容とactual内容が等" "しいときパスします。" #: xml/cut-assertions.xml:2208(title) msgid "cut_assert_not_equal_file_raw()" msgstr "" #: xml/cut-assertions.xml:2210(programlisting) #, no-wrap msgid "#define cut_assert_not_equal_file_raw(expected, actual, ...)" msgstr "" #: xml/cut-assertions.xml:2211(para) msgid "" "Passes if the content of expected != the content of " "actual." msgstr "" "expectedの内容とactual内容が異" "なるときパスします。" #: xml/cut-assertions.xml:2225(title) msgid "cut_error ()" msgstr "" #: xml/cut-assertions.xml:2227(programlisting) #, no-wrap msgid "" "void cut_error (const char *format,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2229(para) msgid "Raises an error with message." msgstr "メッセージ付きでエラーを発生させます。" #: xml/cut-assertions.xml:2240(title) msgid "cut_error_errno ()" msgstr "" #: xml/cut-assertions.xml:2242(programlisting) #, no-wrap msgid "void cut_error_errno (...);" msgstr "" #: xml/cut-assertions.xml:2245(programlisting) #, no-wrap msgid "" "\n" "void\n" "setup (void)\n" "{\n" " mkdir(\"tmp\", 0700);\n" " cut_error_errno(\"Failed to make tmp directory\");\n" " -> Error when tmp directory isn't made successfully.\n" "}\n" msgstr "" #: xml/cut-assertions.xml:2260(title) msgid "cut_fail ()" msgstr "" #: xml/cut-assertions.xml:2262(programlisting) #, no-wrap msgid "" "void cut_fail (const char *format,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2264(para) msgid "Raises a failure with message." msgstr "メッセージ付きでテストを失敗させます。" #: xml/cut-assertions.xml:2275(title) msgid "cut_pend ()" msgstr "" #: xml/cut-assertions.xml:2277(programlisting) #, no-wrap msgid "" "void cut_pend (const char *format,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2279(para) xml/cut-assertions.xml:2296(para) msgid "Marks the test is pending with message. The test is stopped." msgstr "" "メッセージ付きでこのテストが未解決であると印を付けます。テストはここで中断し" "ます。" #: xml/cut-assertions.xml:2291(title) msgid "cut_pending ()" msgstr "" #: xml/cut-assertions.xml:2293(programlisting) #, no-wrap msgid "" "void cut_pending (const char *format,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2295(para) msgid "" "cut_pending has been deprecated since version 0.4 and " "should not be used in newly-written code. Use cut_pend() instead." msgstr "" "cut_pendingはバージョン0.4から非推奨になりました。新しく書" "くコードでは使わないでください。代わりにcut_pend()を使ってください。" #: xml/cut-assertions.xml:2308(title) msgid "cut_notify ()" msgstr "" #: xml/cut-assertions.xml:2310(programlisting) #, no-wrap msgid "" "void cut_notify (const char *format,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2312(para) msgid "Leaves a notification message. The test is continued." msgstr "通知用のメッセージを残します。テストは続行します。" #: xml/cut-assertions.xml:2323(title) msgid "cut_omit ()" msgstr "" #: xml/cut-assertions.xml:2325(programlisting) #, no-wrap msgid "" "void cut_omit (const char *format,\n" " ...);" msgstr "" #: xml/cut-assertions.xml:2327(para) msgid "Omit the test." msgstr "このテストを省略します。" #: xml/cut-assertions.xml:2332(programlisting) #, no-wrap msgid "" "\n" "if (version < 2.0)\n" " cut_omit(\"Require >= 2.0\");\n" msgstr "" #: xml/cut-assertions.xml:2345(title) msgid "cut_return ()" msgstr "" #: xml/cut-assertions.xml:2347(programlisting) #, no-wrap msgid "void cut_return (void);" msgstr "" #: xml/cut-assertions.xml:2348(para) msgid "Finish the test." msgstr "このテストを終了します。" #: xml/cut-assertions.xml:2353(programlisting) #, no-wrap msgid "" "\n" "static void\n" "sub_xxx (void)\n" "{\n" " some_assertions();\n" " if (no_need_more_test)\n" " cut_return();\n" " some_assertions();\n" "}\n" "\n" "void\n" "test_xxx (void)\n" "{\n" " some_assertions();\n" " cut_trace(sub_xxx());\n" " some_assertions();\n" "}\n" msgstr "" #: xml/cppcutter.xml:7(refentrytitle) xml/cppcutter.xml:14(refname) #: xml/api-index-full.xml:62(link) xml/api-index-full.xml:64(link) #: xml/api-index-full.xml:66(link) xml/api-index-full.xml:67(link) #: xml/api-index-deprecated.xml:7(link) xml/api-index-deprecated.xml:8(link) #: xml/api-index-1.1.0.xml:7(link) xml/api-index-1.0.9.xml:7(link) #: xml/api-index-1.0.9.xml:9(link) xml/api-index-1.0.9.xml:10(link) msgid "CppCutter" msgstr "" #: xml/cppcutter.xml:15(refpurpose) msgid "Cutter with C++ support." msgstr "C++サポート付きのCutter。" #: xml/cppcutter.xml:21(link) xml/cppcutter.xml:99(title) #: xml/cppcutter.xml:100(primary) xml/api-index-full.xml:62(link) #: xml/api-index-1.0.9.xml:7(link) msgid "CPPCUTTER_ENABLED" msgstr "" #: xml/cppcutter.xml:22(link) xml/cppcutter.xml:107(title) #: xml/cppcutter.xml:108(primary) xml/api-index-full.xml:64(link) #: xml/api-index-deprecated.xml:7(link) xml/api-index-1.0.9.xml:9(link) msgid "CPPCUT_BEGIN_TEST_DECLS" msgstr "" #: xml/cppcutter.xml:23(link) xml/cppcutter.xml:129(title) #: xml/cppcutter.xml:130(primary) xml/api-index-full.xml:66(link) #: xml/api-index-deprecated.xml:8(link) xml/api-index-1.0.9.xml:10(link) msgid "CPPCUT_END_TEST_DECLS" msgstr "" #: xml/cppcutter.xml:24(link) xml/cppcutter.xml:139(primary) #: xml/api-index-full.xml:67(link) xml/api-index-1.1.0.xml:7(link) msgid "cppcut_message" msgstr "" #: xml/cppcutter.xml:21(synopsis) #, no-wrap msgid "" "#define \n" "#define \n" "#define \n" "#define (...)\n" msgstr "" #: xml/cppcutter.xml:30(para) msgid "" "CppCutter provides C++ friendly interface of Cutter. If you want to write " "tests with C++, it's good idea that you consider CppCutter to be used too." msgstr "" "CppCutterはC++で便利な機能をCutterに追加します。C++でテストを書きたい場合は" "CppCutterの使用を検討してください。" #: xml/cppcutter.xml:35(para) msgid "" "It's easy to use CppCutter. You just include <cppcutter.h> instead of " "<cutter.h> and use cppcutter.pc instead of cutter.pc:" msgstr "" "CppCutterを使うことは簡単です。<cutter.h>の代わりに<cppcutter.h>" "をinlcudeして、cutter.pcの代わりにcppcutter.pcを使うだけです。" #: xml/cppcutter.xml:42(programlisting) #, no-wrap msgid "" "\n" "-#include <cutter.h>\n" "+#include <cppcutter.h>\n" msgstr "" #: xml/cppcutter.xml:40(para) msgid "test-xxx.cpp: " msgstr "" #: xml/cppcutter.xml:49(programlisting) #, no-wrap msgid "" "\n" "-AC_CHECK_CUTTER\n" "+AC_CHECK_CPPCUTTER\n" msgstr "" #: xml/cppcutter.xml:56(programlisting) #, no-wrap msgid "" "\n" "-XXX_CFLAGS = $(CUTTER_CFLAGS)\n" "-XXX_LIBS = $(CUTTER_LIBS)\n" "+XXX_CFLAGS = $(CPPCUTTER_CFLAGS)\n" "+XXX_LIBS = $(CPPCUTTER_LIBS)\n" msgstr "" #: xml/cppcutter.xml:63(para) msgid "" "Test functions are defined in namespace. Naming convention is the same as " "Cutter. i.e.: 'test_...' function is test function, 'setup' or 'cut_setup' " "is setup function and 'teardown' or 'cut_teardown' is teardown function." msgstr "" "テスト関数はnamespaceの中に定義します。名前付け規則はCutterと同じです。つま" "り、'test_...'関数はテスト関数、'setup'または'cut_setup'は初期化関" "数、'teardown'または'cut_teardown'は後始末関数になります。" #: xml/cppcutter.xml:72(programlisting) #, no-wrap msgid "" "\n" "#include <cppcutter.h>\n" "\n" "namespace calc\n" "{\n" " void\n" " test_add (void)\n" " {\n" " cppcut_assert_equal(3, calc.add(1, 2));\n" " }\n" "\n" " void\n" " test_sub (void)\n" " {\n" " cppcut_assert_equal(5, calc.sub(9, 4));\n" " }\n" "}\n" msgstr "" #: xml/cppcutter.xml:70(para) msgid "test-calc.cpp: " msgstr "" #: xml/cppcutter.xml:91(para) msgid "" "You just define a function for adding a new test. You don't need to use " "magical macros." msgstr "" "新しいテストを追加するときはいつも通り関数を定義するだけです。よくわからない" "マクロを使う必要はありません。" #: xml/cppcutter.xml:101(programlisting) #, no-wrap msgid "#define CPPCUTTER_ENABLED 1\n" msgstr "" #: xml/cppcutter.xml:103(para) msgid "Defined when CppCutter is enabled." msgstr "CppCutterが有効なとき定義されます。" #: xml/cppcutter.xml:109(programlisting) #, no-wrap msgid "#define CPPCUT_BEGIN_TEST_DECLS extern \"C\" {\n" msgstr "" #: xml/cppcutter.xml:111(para) msgid "" "CPPCUT_BEGIN_TEST_DECLS has been deprecated since version " "1.1.0 and should not be used in newly-written code. Use namespace instead." msgstr "" "CPPCUT_BEGIN_TEST_DECLSはバージョン1.1.0から非推奨になりま" "した。新しく書くコードでは使わないでください。代わりにnamespaceを使ってくださ" "い。" #: xml/cppcutter.xml:112(para) msgid "" "Use CPPCUT_BEGIN_TEST_DECLS and CPPCUT_END_TEST_DECLS pair for prototype declarations for test functions:" msgstr "" "テスト関数のプロトタイプ宣言はCPPCUT_BEGIN_TEST_DECLSCPPCUT_END_TEST_DECLSで囲みま" "す:" #: xml/cppcutter.xml:117(programlisting) #, no-wrap msgid "" "\n" "CPPCUT_BEGIN_TEST_DECLS\n" "void test_add ();\n" "void test_remove ();\n" "CPPCUT_END_TEST_DECLS\n" msgstr "" #: xml/cppcutter.xml:124(para) msgid "" "Those macros just surround prototype declarations for test functions with " "'extern \"C\" {...}'." msgstr "" "このマクロは単にテスト関数のプロトタイプ宣言を'extern \"C\" {...}'で囲むだけ" "です。" #: xml/cppcutter.xml:131(programlisting) #, no-wrap msgid "#define CPPCUT_END_TEST_DECLS }\n" msgstr "" #: xml/cppcutter.xml:133(para) msgid "" "CPPCUT_END_TEST_DECLS has been deprecated since version " "1.1.0 and should not be used in newly-written code. Use namespace instead." msgstr "" "CPPCUT_END_TEST_DECLSはバージョン1.1.0から非推奨になりまし" "た。新しく書くコードでは使わないでください。代わりにnamespaceを使ってくださ" "い。" #: xml/cppcutter.xml:134(para) msgid "" "See CPPCUT_BEGIN_TEST_DECLS." msgstr "" "CPPCUT_BEGIN_TEST_DECLSを見て下さい。" #: xml/cppcutter.xml:138(title) msgid "cppcut_message()" msgstr "" #: xml/cppcutter.xml:140(programlisting) #, no-wrap msgid "#define cppcut_message(...)" msgstr "" #: xml/cppcutter.xml:141(para) msgid "" "Specifies optional assertion message with C++ friendly API. The optional " "message can be specified with printf() style API or \"<<\" stream style API." msgstr "" "C++らしいAPIで検証の省略可能なメッセージを指定します。メッセージはprintf()と同じAPIか\"<<" "\"を使ったストリームと同じAPIを使って指定します。" #: xml/cppcutter.xml:148(programlisting) #, no-wrap msgid "" "\n" "cppcut_assert_equal(\"abc\", \"def\",\n" " cppcut_message(\"should fail!\"));\n" "cppcut_assert_equal(\"abc\", \"def\",\n" " cppcut_message() << \"should fail!\");\n" msgstr "" #: xml/cppcutter.xml:166(link) xml/cppcut-assertions.xml:7(refentrytitle) #: xml/cppcut-assertions.xml:14(refname) xml/api-index-full.xml:63(link) #: xml/api-index-1.0.9.xml:8(link) msgid "Assertions with C++ support" msgstr "C++サポート付きの検証" #: xml/cppcut-macros.xml:7(refentrytitle) xml/cppcut-macros.xml:14(refname) #: xml/api-index-full.xml:65(link) msgid "cppcut-macros" msgstr "" #: xml/cppcut-macros.xml:21(link) xml/cppcut-macros.xml:33(title) #: xml/cppcut-macros.xml:34(primary) xml/api-index-full.xml:65(link) msgid "CPPCUT_DECL" msgstr "" #: xml/cppcut-macros.xml:35(programlisting) #, no-wrap msgid "#define CPPCUT_DECL" msgstr "" #: xml/cppcut-assertions.xml:15(refpurpose) msgid "Checks that your program works as you expect with C++ support." msgstr "" "C++サポート付きであなたのプログラムが期待通りに動作しているかを検証します。" #: xml/cppcut-assertions.xml:22(link) xml/cppcut-assertions.xml:36(primary) #: xml/api-index-full.xml:63(link) xml/api-index-1.0.9.xml:8(link) msgid "cppcut_assert_equal" msgstr "" #: xml/cppcut-assertions.xml:22(synopsis) #, no-wrap msgid "" "#define (expected,\n" " actual,\n" " ...)\n" msgstr "" #: xml/cppcut-assertions.xml:35(title) msgid "cppcut_assert_equal()" msgstr "" #: xml/cppcut-assertions.xml:37(programlisting) #, no-wrap msgid "#define cppcut_assert_equal(expected, actual, ...)" msgstr "" #: xml/cppcut-assertions.xml:38(para) msgid "" "This assertion is a generic method based on template. You can pass any " "object's reference as expected and actual." msgstr "" "この検証はテンプレートを利用しています。任意のオブジェクトのリファレンスを" "expectedactualに渡せます。" #: xml/cppcut-assertions.xml:47(programlisting) #, no-wrap msgid "" "\n" "cppcut_assert_equal(3, 1 + 2);\n" "cppcut_assert_equal(3, 1 + 2, cppcut_message(\"easy expression\"));\n" "cppcut_assert_equal(3, 1 + 2, cppcut_message() << \"easy expression\"));\n" msgstr "" #: xml/cppcut-assertions.xml:60(simpara) msgid "" "an optional message. Use cppcut_message() for this." msgstr "" "追加メッセージ(省略可能)。詳細はcppcut_message()を見てください。" #: xml/api-index-full.xml:6(title) xml/api-index-1.1.5.xml:6(title) #: xml/api-index-1.1.4.xml:6(title) xml/api-index-1.0.7.xml:6(title) #: xml/api-index-1.0.6.xml:6(title) xml/api-index-1.0.5.xml:6(title) #: xml/api-index-1.0.4.xml:6(title) xml/api-index-1.0.3.xml:6(title) msgid "A" msgstr "" #: xml/api-index-full.xml:7(primaryie) xml/api-index-full.xml:8(primaryie) #: xml/api-index-full.xml:9(primaryie) xml/api-index-full.xml:10(primaryie) #: xml/api-index-full.xml:11(primaryie) xml/api-index-full.xml:12(primaryie) #: xml/api-index-full.xml:13(primaryie) xml/api-index-full.xml:14(primaryie) #: xml/api-index-full.xml:15(primaryie) xml/api-index-full.xml:16(primaryie) #: xml/api-index-full.xml:17(primaryie) xml/api-index-full.xml:18(primaryie) #: xml/api-index-full.xml:19(primaryie) xml/api-index-full.xml:20(primaryie) #: xml/api-index-full.xml:21(primaryie) xml/api-index-full.xml:22(primaryie) #: xml/api-index-full.xml:23(primaryie) xml/api-index-full.xml:24(primaryie) #: xml/api-index-full.xml:25(primaryie) xml/api-index-full.xml:26(primaryie) #: xml/api-index-full.xml:27(primaryie) xml/api-index-full.xml:28(primaryie) #: xml/api-index-full.xml:29(primaryie) xml/api-index-full.xml:30(primaryie) #: xml/api-index-full.xml:31(primaryie) xml/api-index-full.xml:32(primaryie) #: xml/api-index-full.xml:33(primaryie) xml/api-index-full.xml:34(primaryie) #: xml/api-index-full.xml:35(primaryie) xml/api-index-full.xml:36(primaryie) #: xml/api-index-full.xml:37(primaryie) xml/api-index-full.xml:38(primaryie) #: xml/api-index-full.xml:39(primaryie) xml/api-index-full.xml:40(primaryie) #: xml/api-index-full.xml:41(primaryie) xml/api-index-full.xml:42(primaryie) #: xml/api-index-full.xml:43(primaryie) xml/api-index-full.xml:44(primaryie) #: xml/api-index-full.xml:45(primaryie) xml/api-index-full.xml:46(primaryie) #: xml/api-index-full.xml:47(primaryie) xml/api-index-full.xml:48(primaryie) #: xml/api-index-full.xml:49(primaryie) xml/api-index-full.xml:50(primaryie) #: xml/api-index-full.xml:51(primaryie) xml/api-index-full.xml:52(primaryie) #: xml/api-index-full.xml:53(primaryie) xml/api-index-full.xml:54(primaryie) #: xml/api-index-full.xml:55(primaryie) xml/api-index-full.xml:56(primaryie) #: xml/api-index-full.xml:57(primaryie) xml/api-index-full.xml:58(primaryie) #: xml/api-index-full.xml:59(primaryie) xml/api-index-full.xml:83(primaryie) #: xml/api-index-full.xml:84(primaryie) xml/api-index-full.xml:86(primaryie) #: xml/api-index-full.xml:88(primaryie) xml/api-index-full.xml:90(primaryie) #: xml/api-index-full.xml:91(primaryie) xml/api-index-full.xml:92(primaryie) #: xml/api-index-full.xml:93(primaryie) xml/api-index-full.xml:94(primaryie) #: xml/api-index-full.xml:95(primaryie) xml/api-index-full.xml:106(primaryie) #: xml/api-index-full.xml:107(primaryie) xml/api-index-full.xml:108(primaryie) #: xml/api-index-full.xml:110(primaryie) xml/api-index-full.xml:111(primaryie) #: xml/api-index-full.xml:112(primaryie) xml/api-index-full.xml:113(primaryie) #: xml/api-index-full.xml:114(primaryie) xml/api-index-full.xml:115(primaryie) #: xml/api-index-full.xml:116(primaryie) xml/api-index-full.xml:127(primaryie) #: xml/api-index-full.xml:128(primaryie) xml/api-index-full.xml:129(primaryie) #: xml/api-index-full.xml:130(primaryie) xml/api-index-full.xml:131(primaryie) #: xml/api-index-full.xml:132(primaryie) xml/api-index-full.xml:133(primaryie) #: xml/api-index-full.xml:134(primaryie) xml/api-index-full.xml:136(primaryie) #: xml/api-index-full.xml:138(primaryie) xml/api-index-full.xml:149(primaryie) #: xml/api-index-full.xml:150(primaryie) xml/api-index-full.xml:151(primaryie) #: xml/api-index-full.xml:152(primaryie) xml/api-index-full.xml:153(primaryie) #: xml/api-index-full.xml:164(primaryie) xml/api-index-full.xml:165(primaryie) #: xml/api-index-full.xml:166(primaryie) xml/api-index-full.xml:167(primaryie) #: xml/api-index-full.xml:173(primaryie) xml/api-index-full.xml:174(primaryie) #: xml/api-index-full.xml:175(primaryie) xml/api-index-full.xml:176(primaryie) #: xml/api-index-full.xml:178(primaryie) xml/api-index-full.xml:179(primaryie) #: xml/api-index-full.xml:180(primaryie) xml/api-index-full.xml:181(primaryie) #: xml/api-index-full.xml:196(primaryie) xml/api-index-full.xml:197(primaryie) #: xml/api-index-full.xml:198(primaryie) xml/api-index-full.xml:199(primaryie) #: xml/api-index-full.xml:200(primaryie) xml/api-index-full.xml:201(primaryie) #: xml/api-index-full.xml:202(primaryie) xml/api-index-full.xml:203(primaryie) #: xml/api-index-full.xml:204(primaryie) xml/api-index-full.xml:205(primaryie) #: xml/api-index-full.xml:206(primaryie) xml/api-index-full.xml:207(primaryie) #: xml/api-index-full.xml:208(primaryie) xml/api-index-full.xml:209(primaryie) #: xml/api-index-full.xml:210(primaryie) xml/api-index-full.xml:211(primaryie) #: xml/api-index-full.xml:213(primaryie) xml/api-index-full.xml:214(primaryie) #: xml/api-index-full.xml:215(primaryie) xml/api-index-full.xml:217(primaryie) #: xml/api-index-full.xml:223(primaryie) xml/api-index-full.xml:224(primaryie) #: xml/api-index-full.xml:225(primaryie) xml/api-index-full.xml:226(primaryie) #: xml/api-index-full.xml:232(primaryie) xml/api-index-full.xml:233(primaryie) #: xml/api-index-full.xml:234(primaryie) xml/api-index-full.xml:235(primaryie) #: xml/api-index-full.xml:236(primaryie) xml/api-index-full.xml:237(primaryie) #: xml/api-index-full.xml:238(primaryie) xml/api-index-full.xml:239(primaryie) #: xml/api-index-full.xml:240(primaryie) xml/api-index-full.xml:241(primaryie) #: xml/api-index-full.xml:243(primaryie) xml/api-index-full.xml:244(primaryie) #: xml/api-index-full.xml:245(primaryie) xml/api-index-full.xml:250(primaryie) #: xml/api-index-full.xml:251(primaryie) xml/api-index-full.xml:252(primaryie) #: xml/api-index-full.xml:253(primaryie) xml/api-index-full.xml:254(primaryie) #: xml/api-index-full.xml:255(primaryie) xml/api-index-full.xml:256(primaryie) #: xml/api-index-full.xml:257(primaryie) xml/api-index-full.xml:258(primaryie) #: xml/api-index-full.xml:259(primaryie) xml/api-index-full.xml:260(primaryie) #: xml/api-index-full.xml:261(primaryie) xml/api-index-full.xml:262(primaryie) #: xml/api-index-full.xml:263(primaryie) xml/api-index-full.xml:264(primaryie) #: xml/api-index-full.xml:265(primaryie) xml/api-index-full.xml:266(primaryie) #: xml/api-index-full.xml:267(primaryie) xml/api-index-full.xml:268(primaryie) #: xml/api-index-full.xml:269(primaryie) xml/api-index-full.xml:270(primaryie) #: xml/api-index-full.xml:271(primaryie) xml/api-index-full.xml:272(primaryie) #: xml/api-index-full.xml:273(primaryie) xml/api-index-full.xml:274(primaryie) #: xml/api-index-full.xml:275(primaryie) xml/api-index-full.xml:276(primaryie) #: xml/api-index-full.xml:277(primaryie) xml/api-index-full.xml:278(primaryie) #: xml/api-index-full.xml:279(primaryie) xml/api-index-full.xml:280(primaryie) #: xml/api-index-full.xml:281(primaryie) xml/api-index-full.xml:282(primaryie) #: xml/api-index-full.xml:283(primaryie) xml/api-index-full.xml:284(primaryie) #: xml/api-index-full.xml:285(primaryie) xml/api-index-full.xml:286(primaryie) #: xml/api-index-full.xml:292(primaryie) xml/api-index-full.xml:294(primaryie) #: xml/api-index-full.xml:295(primaryie) xml/api-index-full.xml:296(primaryie) #: xml/api-index-full.xml:297(primaryie) xml/api-index-full.xml:298(primaryie) #: xml/api-index-full.xml:299(primaryie) xml/api-index-full.xml:300(primaryie) #: xml/api-index-full.xml:301(primaryie) xml/api-index-full.xml:302(primaryie) #: xml/api-index-full.xml:303(primaryie) xml/api-index-full.xml:304(primaryie) #: xml/api-index-full.xml:305(primaryie) xml/api-index-full.xml:306(primaryie) #: xml/api-index-full.xml:307(primaryie) xml/api-index-full.xml:308(primaryie) #: xml/api-index-full.xml:309(primaryie) xml/api-index-full.xml:310(primaryie) #: xml/api-index-full.xml:311(primaryie) xml/api-index-full.xml:312(primaryie) #: xml/api-index-full.xml:313(primaryie) xml/api-index-full.xml:314(primaryie) #: xml/api-index-full.xml:322(primaryie) xml/api-index-full.xml:323(primaryie) #: xml/api-index-full.xml:324(primaryie) xml/api-index-full.xml:326(primaryie) #: xml/api-index-full.xml:328(primaryie) xml/api-index-full.xml:329(primaryie) #: xml/api-index-full.xml:330(primaryie) xml/api-index-full.xml:331(primaryie) #: xml/api-index-full.xml:332(primaryie) xml/api-index-full.xml:333(primaryie) #: xml/api-index-full.xml:335(primaryie) xml/api-index-full.xml:336(primaryie) #: xml/api-index-full.xml:338(primaryie) xml/api-index-full.xml:339(primaryie) #: xml/api-index-full.xml:340(primaryie) xml/api-index-full.xml:342(primaryie) #: xml/api-index-full.xml:343(primaryie) xml/api-index-full.xml:344(primaryie) #: xml/api-index-full.xml:345(primaryie) xml/api-index-full.xml:346(primaryie) #: xml/api-index-full.xml:347(primaryie) xml/api-index-full.xml:349(primaryie) #: xml/api-index-full.xml:350(primaryie) xml/api-index-full.xml:351(primaryie) #: xml/api-index-full.xml:362(primaryie) xml/api-index-full.xml:364(primaryie) #: xml/api-index-full.xml:365(primaryie) xml/api-index-full.xml:366(primaryie) #: xml/api-index-full.xml:367(primaryie) xml/api-index-full.xml:368(primaryie) #: xml/api-index-full.xml:369(primaryie) xml/api-index-full.xml:370(primaryie) #: xml/api-index-full.xml:371(primaryie) xml/api-index-full.xml:372(primaryie) #: xml/api-index-full.xml:373(primaryie) xml/api-index-full.xml:374(primaryie) #: xml/api-index-full.xml:375(primaryie) xml/api-index-full.xml:376(primaryie) #: xml/api-index-full.xml:377(primaryie) xml/api-index-full.xml:378(primaryie) #: xml/api-index-full.xml:379(primaryie) xml/api-index-full.xml:380(primaryie) #: xml/api-index-full.xml:381(primaryie) xml/api-index-full.xml:382(primaryie) #: xml/api-index-full.xml:383(primaryie) xml/api-index-full.xml:386(primaryie) #: xml/api-index-full.xml:387(primaryie) xml/api-index-full.xml:388(primaryie) #: xml/api-index-full.xml:389(primaryie) xml/api-index-full.xml:390(primaryie) #: xml/api-index-full.xml:391(primaryie) xml/api-index-full.xml:394(primaryie) #: xml/api-index-full.xml:395(primaryie) xml/api-index-full.xml:396(primaryie) #: xml/api-index-full.xml:397(primaryie) xml/api-index-full.xml:399(primaryie) #: xml/api-index-full.xml:400(primaryie) xml/api-index-full.xml:401(primaryie) #: xml/api-index-full.xml:402(primaryie) xml/api-index-full.xml:403(primaryie) #: xml/api-index-full.xml:404(primaryie) xml/api-index-full.xml:405(primaryie) #: xml/api-index-full.xml:406(primaryie) xml/api-index-full.xml:409(primaryie) #: xml/api-index-full.xml:410(primaryie) xml/api-index-full.xml:411(primaryie) #: xml/api-index-full.xml:415(primaryie) xml/api-index-full.xml:416(primaryie) #: xml/api-index-full.xml:417(primaryie) xml/api-index-full.xml:418(primaryie) #: xml/api-index-full.xml:419(primaryie) xml/api-index-full.xml:420(primaryie) #: xml/api-index-full.xml:421(primaryie) xml/api-index-full.xml:424(primaryie) #: xml/api-index-full.xml:427(primaryie) xml/api-index-full.xml:428(primaryie) #: xml/api-index-full.xml:429(primaryie) xml/api-index-full.xml:430(primaryie) #: xml/api-index-full.xml:431(primaryie) xml/api-index-full.xml:432(primaryie) #: xml/api-index-full.xml:433(primaryie) xml/api-index-full.xml:434(primaryie) #: xml/api-index-full.xml:437(primaryie) xml/api-index-full.xml:439(primaryie) #: xml/api-index-full.xml:440(primaryie) xml/api-index-full.xml:441(primaryie) #: xml/api-index-full.xml:442(primaryie) xml/api-index-full.xml:443(primaryie) #: xml/api-index-full.xml:444(primaryie) xml/api-index-full.xml:445(primaryie) #: xml/api-index-full.xml:446(primaryie) xml/api-index-full.xml:447(primaryie) #: xml/api-index-full.xml:448(primaryie) xml/api-index-full.xml:449(primaryie) #: xml/api-index-full.xml:450(primaryie) xml/api-index-full.xml:451(primaryie) #: xml/api-index-full.xml:452(primaryie) xml/api-index-full.xml:453(primaryie) #: xml/api-index-full.xml:456(primaryie) xml/api-index-full.xml:457(primaryie) #: xml/api-index-full.xml:461(primaryie) xml/api-index-full.xml:462(primaryie) #: xml/api-index-full.xml:463(primaryie) xml/api-index-full.xml:464(primaryie) #: xml/api-index-full.xml:466(primaryie) xml/api-index-full.xml:467(primaryie) #: xml/api-index-full.xml:468(primaryie) xml/api-index-full.xml:469(primaryie) #: xml/api-index-full.xml:470(primaryie) xml/api-index-full.xml:471(primaryie) #: xml/api-index-full.xml:472(primaryie) xml/api-index-full.xml:475(primaryie) #: xml/api-index-full.xml:476(primaryie) xml/api-index-full.xml:477(primaryie) #: xml/api-index-full.xml:480(primaryie) xml/api-index-full.xml:482(primaryie) #: xml/api-index-full.xml:483(primaryie) xml/api-index-full.xml:486(primaryie) #: xml/api-index-full.xml:489(primaryie) xml/api-index-full.xml:490(primaryie) #: xml/api-index-full.xml:491(primaryie) xml/api-index-full.xml:503(primaryie) #: xml/api-index-full.xml:504(primaryie) xml/api-index-full.xml:505(primaryie) #: xml/api-index-full.xml:506(primaryie) xml/api-index-full.xml:507(primaryie) #: xml/api-index-full.xml:508(primaryie) xml/api-index-full.xml:509(primaryie) #: xml/api-index-full.xml:510(primaryie) xml/api-index-full.xml:511(primaryie) #: xml/api-index-full.xml:512(primaryie) xml/api-index-full.xml:513(primaryie) #: xml/api-index-full.xml:514(primaryie) xml/api-index-full.xml:515(primaryie) #: xml/api-index-full.xml:516(primaryie) xml/api-index-full.xml:517(primaryie) #: xml/api-index-full.xml:518(primaryie) xml/api-index-full.xml:519(primaryie) #: xml/api-index-full.xml:520(primaryie) xml/api-index-full.xml:521(primaryie) #: xml/api-index-full.xml:522(primaryie) xml/api-index-full.xml:523(primaryie) #: xml/api-index-full.xml:524(primaryie) xml/api-index-full.xml:525(primaryie) #: xml/api-index-full.xml:526(primaryie) xml/api-index-full.xml:527(primaryie) #: xml/api-index-full.xml:528(primaryie) xml/api-index-full.xml:529(primaryie) #: xml/api-index-full.xml:530(primaryie) xml/api-index-full.xml:533(primaryie) #: xml/api-index-full.xml:536(primaryie) xml/api-index-full.xml:537(primaryie) #: xml/api-index-full.xml:542(primaryie) xml/api-index-full.xml:543(primaryie) #: xml/api-index-full.xml:544(primaryie) xml/api-index-full.xml:545(primaryie) #: xml/api-index-full.xml:546(primaryie) xml/api-index-full.xml:547(primaryie) #: xml/api-index-full.xml:548(primaryie) xml/api-index-full.xml:549(primaryie) #: xml/api-index-full.xml:550(primaryie) xml/api-index-full.xml:551(primaryie) #: xml/api-index-full.xml:552(primaryie) xml/api-index-full.xml:553(primaryie) #: xml/api-index-full.xml:554(primaryie) xml/api-index-full.xml:555(primaryie) #: xml/api-index-full.xml:556(primaryie) xml/api-index-full.xml:557(primaryie) #: xml/api-index-full.xml:558(primaryie) xml/api-index-full.xml:559(primaryie) #: xml/api-index-full.xml:560(primaryie) xml/api-index-full.xml:561(primaryie) #: xml/api-index-full.xml:562(primaryie) xml/api-index-full.xml:563(primaryie) #: xml/api-index-full.xml:564(primaryie) xml/api-index-full.xml:565(primaryie) #: xml/api-index-full.xml:566(primaryie) xml/api-index-full.xml:567(primaryie) #: xml/api-index-full.xml:568(primaryie) xml/api-index-full.xml:569(primaryie) #: xml/api-index-full.xml:570(primaryie) xml/api-index-full.xml:571(primaryie) #: xml/api-index-full.xml:572(primaryie) xml/api-index-full.xml:573(primaryie) #: xml/api-index-full.xml:574(primaryie) xml/api-index-full.xml:575(primaryie) #: xml/api-index-full.xml:576(primaryie) xml/api-index-full.xml:579(primaryie) #: xml/api-index-full.xml:580(primaryie) xml/api-index-full.xml:581(primaryie) #: xml/api-index-full.xml:582(primaryie) xml/api-index-full.xml:583(primaryie) #: xml/api-index-full.xml:585(primaryie) xml/api-index-full.xml:586(primaryie) #: xml/api-index-full.xml:588(primaryie) xml/api-index-full.xml:589(primaryie) #: xml/api-index-full.xml:590(primaryie) xml/api-index-full.xml:591(primaryie) #: xml/api-index-full.xml:592(primaryie) xml/api-index-full.xml:598(primaryie) #: xml/api-index-full.xml:599(primaryie) xml/api-index-full.xml:602(primaryie) #: xml/api-index-full.xml:603(primaryie) xml/api-index-full.xml:604(primaryie) #: xml/api-index-full.xml:605(primaryie) #: xml/api-index-deprecated.xml:10(primaryie) #: xml/api-index-deprecated.xml:11(primaryie) #: xml/api-index-deprecated.xml:12(primaryie) #: xml/api-index-deprecated.xml:13(primaryie) #: xml/api-index-deprecated.xml:14(primaryie) #: xml/api-index-deprecated.xml:15(primaryie) #: xml/api-index-deprecated.xml:16(primaryie) #: xml/api-index-deprecated.xml:17(primaryie) #: xml/api-index-deprecated.xml:18(primaryie) #: xml/api-index-deprecated.xml:19(primaryie) #: xml/api-index-deprecated.xml:20(primaryie) #: xml/api-index-deprecated.xml:21(primaryie) #: xml/api-index-deprecated.xml:22(primaryie) #: xml/api-index-deprecated.xml:23(primaryie) #: xml/api-index-deprecated.xml:24(primaryie) #: xml/api-index-deprecated.xml:25(primaryie) #: xml/api-index-deprecated.xml:26(primaryie) #: xml/api-index-deprecated.xml:32(primaryie) #: xml/api-index-deprecated.xml:34(primaryie) #: xml/api-index-deprecated.xml:35(primaryie) #: xml/api-index-deprecated.xml:36(primaryie) #: xml/api-index-deprecated.xml:37(primaryie) #: xml/api-index-deprecated.xml:38(primaryie) #: xml/api-index-deprecated.xml:39(primaryie) #: xml/api-index-deprecated.xml:40(primaryie) #: xml/api-index-deprecated.xml:41(primaryie) #: xml/api-index-deprecated.xml:42(primaryie) #: xml/api-index-deprecated.xml:43(primaryie) #: xml/api-index-deprecated.xml:44(primaryie) #: xml/api-index-deprecated.xml:45(primaryie) #: xml/api-index-deprecated.xml:46(primaryie) #: xml/api-index-deprecated.xml:47(primaryie) #: xml/api-index-deprecated.xml:48(primaryie) #: xml/api-index-deprecated.xml:49(primaryie) #: xml/api-index-deprecated.xml:50(primaryie) #: xml/api-index-deprecated.xml:51(primaryie) #: xml/api-index-deprecated.xml:52(primaryie) #: xml/api-index-deprecated.xml:53(primaryie) #: xml/api-index-deprecated.xml:67(primaryie) #: xml/api-index-deprecated.xml:71(primaryie) #: xml/api-index-1.1.6.xml:7(primaryie) xml/api-index-1.1.6.xml:8(primaryie) #: xml/api-index-1.1.6.xml:11(primaryie) xml/api-index-1.1.6.xml:12(primaryie) #: xml/api-index-1.1.6.xml:13(primaryie) xml/api-index-1.1.6.xml:14(primaryie) #: xml/api-index-1.1.6.xml:15(primaryie) xml/api-index-1.1.6.xml:16(primaryie) #: xml/api-index-1.1.6.xml:17(primaryie) xml/api-index-1.1.6.xml:18(primaryie) #: xml/api-index-1.1.6.xml:19(primaryie) xml/api-index-1.1.6.xml:20(primaryie) #: xml/api-index-1.1.6.xml:21(primaryie) xml/api-index-1.1.6.xml:24(primaryie) #: xml/api-index-1.1.6.xml:25(primaryie) xml/api-index-1.1.6.xml:28(primaryie) #: xml/api-index-1.1.6.xml:29(primaryie) xml/api-index-1.1.6.xml:32(primaryie) #: xml/api-index-1.1.6.xml:33(primaryie) xml/api-index-1.1.5.xml:7(primaryie) #: xml/api-index-1.1.5.xml:10(primaryie) xml/api-index-1.1.5.xml:11(primaryie) #: xml/api-index-1.1.5.xml:12(primaryie) xml/api-index-1.1.5.xml:13(primaryie) #: xml/api-index-1.1.5.xml:16(primaryie) xml/api-index-1.1.5.xml:19(primaryie) #: xml/api-index-1.1.5.xml:20(primaryie) xml/api-index-1.1.5.xml:28(primaryie) #: xml/api-index-1.1.5.xml:29(primaryie) xml/api-index-1.1.5.xml:30(primaryie) #: xml/api-index-1.1.5.xml:31(primaryie) xml/api-index-1.1.5.xml:32(primaryie) #: xml/api-index-1.1.5.xml:33(primaryie) xml/api-index-1.1.5.xml:34(primaryie) #: xml/api-index-1.1.5.xml:35(primaryie) xml/api-index-1.1.5.xml:36(primaryie) #: xml/api-index-1.1.5.xml:37(primaryie) xml/api-index-1.1.5.xml:38(primaryie) #: xml/api-index-1.1.5.xml:39(primaryie) xml/api-index-1.1.5.xml:40(primaryie) #: xml/api-index-1.1.5.xml:41(primaryie) xml/api-index-1.1.5.xml:42(primaryie) #: xml/api-index-1.1.5.xml:43(primaryie) xml/api-index-1.1.5.xml:44(primaryie) #: xml/api-index-1.1.5.xml:45(primaryie) xml/api-index-1.1.5.xml:46(primaryie) #: xml/api-index-1.1.5.xml:47(primaryie) xml/api-index-1.1.5.xml:48(primaryie) #: xml/api-index-1.1.5.xml:49(primaryie) xml/api-index-1.1.5.xml:50(primaryie) #: xml/api-index-1.1.5.xml:51(primaryie) xml/api-index-1.1.5.xml:52(primaryie) #: xml/api-index-1.1.5.xml:55(primaryie) xml/api-index-1.1.5.xml:56(primaryie) #: xml/api-index-1.1.5.xml:59(primaryie) xml/api-index-1.1.5.xml:60(primaryie) #: xml/api-index-1.1.4.xml:7(primaryie) xml/api-index-1.1.4.xml:8(primaryie) #: xml/api-index-1.1.4.xml:13(primaryie) xml/api-index-1.1.4.xml:14(primaryie) #: xml/api-index-1.1.3.xml:20(primaryie) xml/api-index-1.1.3.xml:21(primaryie) #: xml/api-index-1.1.3.xml:22(primaryie) xml/api-index-1.1.3.xml:23(primaryie) #: xml/api-index-1.1.3.xml:24(primaryie) xml/api-index-1.1.3.xml:25(primaryie) #: xml/api-index-1.1.1.xml:10(primaryie) xml/api-index-1.1.1.xml:16(primaryie) #: xml/api-index-1.1.1.xml:17(primaryie) xml/api-index-1.1.0.xml:48(primaryie) #: xml/api-index-1.0.xml:7(primaryie) xml/api-index-1.0.xml:8(primaryie) #: xml/api-index-1.0.xml:9(primaryie) xml/api-index-1.0.xml:10(primaryie) #: xml/api-index-1.0.9.xml:15(primaryie) xml/api-index-1.0.8.xml:7(primaryie) #: xml/api-index-1.0.8.xml:11(primaryie) xml/api-index-1.0.8.xml:12(primaryie) #: xml/api-index-1.0.8.xml:13(primaryie) xml/api-index-1.0.8.xml:14(primaryie) #: xml/api-index-1.0.8.xml:15(primaryie) xml/api-index-1.0.8.xml:16(primaryie) #: xml/api-index-1.0.8.xml:17(primaryie) xml/api-index-1.0.8.xml:18(primaryie) #: xml/api-index-1.0.8.xml:19(primaryie) xml/api-index-1.0.8.xml:20(primaryie) #: xml/api-index-1.0.8.xml:21(primaryie) xml/api-index-1.0.8.xml:22(primaryie) #: xml/api-index-1.0.8.xml:23(primaryie) xml/api-index-1.0.8.xml:24(primaryie) #: xml/api-index-1.0.8.xml:25(primaryie) xml/api-index-1.0.7.xml:7(primaryie) #: xml/api-index-1.0.7.xml:11(primaryie) xml/api-index-1.0.7.xml:12(primaryie) #: xml/api-index-1.0.7.xml:13(primaryie) xml/api-index-1.0.7.xml:14(primaryie) #: xml/api-index-1.0.7.xml:15(primaryie) xml/api-index-1.0.7.xml:16(primaryie) #: xml/api-index-1.0.7.xml:17(primaryie) xml/api-index-1.0.7.xml:18(primaryie) #: xml/api-index-1.0.7.xml:19(primaryie) xml/api-index-1.0.7.xml:20(primaryie) #: xml/api-index-1.0.7.xml:21(primaryie) xml/api-index-1.0.7.xml:24(primaryie) #: xml/api-index-1.0.6.xml:7(primaryie) xml/api-index-1.0.6.xml:8(primaryie) #: xml/api-index-1.0.6.xml:9(primaryie) xml/api-index-1.0.6.xml:10(primaryie) #: xml/api-index-1.0.6.xml:13(primaryie) xml/api-index-1.0.6.xml:14(primaryie) #: xml/api-index-1.0.6.xml:15(primaryie) xml/api-index-1.0.6.xml:16(primaryie) #: xml/api-index-1.0.6.xml:18(primaryie) xml/api-index-1.0.6.xml:19(primaryie) #: xml/api-index-1.0.6.xml:20(primaryie) xml/api-index-1.0.6.xml:21(primaryie) #: xml/api-index-1.0.6.xml:22(primaryie) xml/api-index-1.0.6.xml:23(primaryie) #: xml/api-index-1.0.6.xml:24(primaryie) xml/api-index-1.0.6.xml:25(primaryie) #: xml/api-index-1.0.6.xml:28(primaryie) xml/api-index-1.0.6.xml:29(primaryie) #: xml/api-index-1.0.6.xml:30(primaryie) xml/api-index-1.0.6.xml:31(primaryie) #: xml/api-index-1.0.6.xml:32(primaryie) xml/api-index-1.0.6.xml:33(primaryie) #: xml/api-index-1.0.6.xml:34(primaryie) xml/api-index-1.0.6.xml:42(primaryie) #: xml/api-index-1.0.6.xml:43(primaryie) xml/api-index-1.0.6.xml:44(primaryie) #: xml/api-index-1.0.6.xml:45(primaryie) xml/api-index-1.0.6.xml:46(primaryie) #: xml/api-index-1.0.6.xml:47(primaryie) xml/api-index-1.0.6.xml:48(primaryie) #: xml/api-index-1.0.6.xml:49(primaryie) xml/api-index-1.0.6.xml:50(primaryie) #: xml/api-index-1.0.6.xml:51(primaryie) xml/api-index-1.0.6.xml:52(primaryie) #: xml/api-index-1.0.6.xml:53(primaryie) xml/api-index-1.0.6.xml:54(primaryie) #: xml/api-index-1.0.6.xml:55(primaryie) xml/api-index-1.0.6.xml:56(primaryie) #: xml/api-index-1.0.6.xml:57(primaryie) xml/api-index-1.0.6.xml:58(primaryie) #: xml/api-index-1.0.6.xml:59(primaryie) xml/api-index-1.0.6.xml:60(primaryie) #: xml/api-index-1.0.6.xml:61(primaryie) xml/api-index-1.0.6.xml:64(primaryie) #: xml/api-index-1.0.6.xml:67(primaryie) xml/api-index-1.0.6.xml:68(primaryie) #: xml/api-index-1.0.6.xml:75(primaryie) xml/api-index-1.0.6.xml:76(primaryie) #: xml/api-index-1.0.6.xml:77(primaryie) xml/api-index-1.0.6.xml:78(primaryie) #: xml/api-index-1.0.6.xml:79(primaryie) xml/api-index-1.0.6.xml:80(primaryie) #: xml/api-index-1.0.6.xml:81(primaryie) xml/api-index-1.0.6.xml:82(primaryie) #: xml/api-index-1.0.6.xml:85(primaryie) xml/api-index-1.0.6.xml:86(primaryie) #: xml/api-index-1.0.6.xml:87(primaryie) xml/api-index-1.0.6.xml:88(primaryie) #: xml/api-index-1.0.6.xml:89(primaryie) xml/api-index-1.0.6.xml:90(primaryie) #: xml/api-index-1.0.6.xml:91(primaryie) xml/api-index-1.0.6.xml:92(primaryie) #: xml/api-index-1.0.6.xml:93(primaryie) xml/api-index-1.0.6.xml:94(primaryie) #: xml/api-index-1.0.6.xml:97(primaryie) xml/api-index-1.0.5.xml:7(primaryie) #: xml/api-index-1.0.5.xml:8(primaryie) xml/api-index-1.0.5.xml:9(primaryie) #: xml/api-index-1.0.5.xml:10(primaryie) xml/api-index-1.0.5.xml:11(primaryie) #: xml/api-index-1.0.5.xml:12(primaryie) xml/api-index-1.0.5.xml:13(primaryie) #: xml/api-index-1.0.5.xml:14(primaryie) xml/api-index-1.0.5.xml:15(primaryie) #: xml/api-index-1.0.5.xml:16(primaryie) xml/api-index-1.0.5.xml:17(primaryie) #: xml/api-index-1.0.5.xml:23(primaryie) xml/api-index-1.0.5.xml:24(primaryie) #: xml/api-index-1.0.5.xml:25(primaryie) xml/api-index-1.0.5.xml:26(primaryie) #: xml/api-index-1.0.5.xml:27(primaryie) xml/api-index-1.0.5.xml:28(primaryie) #: xml/api-index-1.0.5.xml:29(primaryie) xml/api-index-1.0.5.xml:30(primaryie) #: xml/api-index-1.0.5.xml:31(primaryie) xml/api-index-1.0.5.xml:32(primaryie) #: xml/api-index-1.0.5.xml:33(primaryie) xml/api-index-1.0.5.xml:34(primaryie) #: xml/api-index-1.0.5.xml:39(primaryie) xml/api-index-1.0.5.xml:40(primaryie) #: xml/api-index-1.0.5.xml:41(primaryie) xml/api-index-1.0.5.xml:44(primaryie) #: xml/api-index-1.0.5.xml:47(primaryie) xml/api-index-1.0.5.xml:50(primaryie) #: xml/api-index-1.0.5.xml:51(primaryie) xml/api-index-1.0.5.xml:52(primaryie) #: xml/api-index-1.0.5.xml:53(primaryie) xml/api-index-1.0.5.xml:54(primaryie) #: xml/api-index-1.0.5.xml:58(primaryie) xml/api-index-1.0.5.xml:60(primaryie) #: xml/api-index-1.0.5.xml:70(primaryie) xml/api-index-1.0.5.xml:71(primaryie) #: xml/api-index-1.0.5.xml:72(primaryie) xml/api-index-1.0.5.xml:75(primaryie) #: xml/api-index-1.0.5.xml:76(primaryie) xml/api-index-1.0.5.xml:79(primaryie) #: xml/api-index-1.0.5.xml:80(primaryie) xml/api-index-1.0.4.xml:7(primaryie) #: xml/api-index-1.0.4.xml:8(primaryie) xml/api-index-1.0.4.xml:16(primaryie) #: xml/api-index-1.0.4.xml:17(primaryie) xml/api-index-1.0.4.xml:18(primaryie) #: xml/api-index-1.0.4.xml:19(primaryie) xml/api-index-1.0.4.xml:20(primaryie) #: xml/api-index-1.0.4.xml:21(primaryie) xml/api-index-1.0.4.xml:22(primaryie) #: xml/api-index-1.0.4.xml:23(primaryie) xml/api-index-1.0.4.xml:24(primaryie) #: xml/api-index-1.0.4.xml:25(primaryie) xml/api-index-1.0.4.xml:26(primaryie) #: xml/api-index-1.0.4.xml:27(primaryie) xml/api-index-1.0.4.xml:28(primaryie) #: xml/api-index-1.0.4.xml:29(primaryie) xml/api-index-1.0.4.xml:30(primaryie) #: xml/api-index-1.0.4.xml:31(primaryie) xml/api-index-1.0.4.xml:32(primaryie) #: xml/api-index-1.0.4.xml:33(primaryie) xml/api-index-1.0.4.xml:34(primaryie) #: xml/api-index-1.0.4.xml:35(primaryie) xml/api-index-1.0.4.xml:36(primaryie) #: xml/api-index-1.0.4.xml:37(primaryie) xml/api-index-1.0.4.xml:38(primaryie) #: xml/api-index-1.0.4.xml:39(primaryie) xml/api-index-1.0.4.xml:40(primaryie) #: xml/api-index-1.0.4.xml:41(primaryie) xml/api-index-1.0.4.xml:42(primaryie) #: xml/api-index-1.0.4.xml:43(primaryie) xml/api-index-1.0.4.xml:44(primaryie) #: xml/api-index-1.0.4.xml:45(primaryie) xml/api-index-1.0.4.xml:48(primaryie) #: xml/api-index-1.0.4.xml:51(primaryie) xml/api-index-1.0.3.xml:7(primaryie) #: xml/api-index-1.0.3.xml:8(primaryie) xml/api-index-1.0.3.xml:9(primaryie) #: xml/api-index-1.0.3.xml:10(primaryie) xml/api-index-1.0.3.xml:11(primaryie) #: xml/api-index-1.0.3.xml:12(primaryie) xml/api-index-1.0.3.xml:13(primaryie) #: xml/api-index-1.0.3.xml:17(primaryie) xml/api-index-1.0.3.xml:20(primaryie) #: xml/api-index-1.0.3.xml:21(primaryie) xml/api-index-1.0.3.xml:24(primaryie) #: xml/api-index-1.0.3.xml:25(primaryie) xml/api-index-1.0.3.xml:26(primaryie) #: xml/api-index-1.0.2.xml:7(primaryie) xml/api-index-1.0.2.xml:8(primaryie) #: xml/api-index-1.0.2.xml:9(primaryie) xml/api-index-1.0.2.xml:10(primaryie) #: xml/api-index-1.0.2.xml:11(primaryie) xml/api-index-1.0.2.xml:12(primaryie) #: xml/api-index-1.0.2.xml:13(primaryie) xml/api-index-1.0.2.xml:14(primaryie) #: xml/api-index-1.0.2.xml:15(primaryie) xml/api-index-0.9.xml:7(primaryie) #: xml/api-index-0.9.xml:8(primaryie) xml/api-index-0.9.xml:9(primaryie) #: xml/api-index-0.9.xml:10(primaryie) xml/api-index-0.8.xml:7(primaryie) #: xml/api-index-0.8.xml:8(primaryie) xml/api-index-0.8.xml:9(primaryie) #: xml/api-index-0.8.xml:13(primaryie) xml/api-index-0.3.xml:7(primaryie) #: xml/api-index-0.3.xml:8(primaryie) msgid ", function in " msgstr "" #: xml/api-index-full.xml:61(title) xml/api-index-deprecated.xml:6(title) #: xml/api-index-1.1.6.xml:6(title) xml/api-index-1.1.5.xml:9(title) #: xml/api-index-1.1.4.xml:10(title) xml/api-index-1.1.3.xml:6(title) #: xml/api-index-1.1.2.xml:6(title) xml/api-index-1.1.1.xml:6(title) #: xml/api-index-1.1.0.xml:6(title) xml/api-index-1.0.xml:6(title) #: xml/api-index-1.0.9.xml:6(title) xml/api-index-1.0.7.xml:9(title) #: xml/api-index-1.0.6.xml:12(title) xml/api-index-1.0.5.xml:19(title) #: xml/api-index-1.0.4.xml:10(title) xml/api-index-1.0.3.xml:15(title) #: xml/api-index-1.0.2.xml:6(title) xml/api-index-0.9.xml:6(title) #: xml/api-index-0.8.xml:6(title) xml/api-index-0.3.xml:6(title) msgid "C" msgstr "" #: xml/api-index-full.xml:62(primaryie) xml/api-index-full.xml:63(primaryie) #: xml/api-index-full.xml:64(primaryie) xml/api-index-full.xml:65(primaryie) #: xml/api-index-full.xml:66(primaryie) xml/api-index-full.xml:67(primaryie) #: xml/api-index-full.xml:76(primaryie) xml/api-index-full.xml:77(primaryie) #: xml/api-index-full.xml:78(primaryie) xml/api-index-full.xml:79(primaryie) #: xml/api-index-full.xml:80(primaryie) xml/api-index-full.xml:81(primaryie) #: xml/api-index-full.xml:82(primaryie) xml/api-index-full.xml:85(primaryie) #: xml/api-index-full.xml:87(primaryie) xml/api-index-full.xml:89(primaryie) #: xml/api-index-full.xml:96(primaryie) xml/api-index-full.xml:97(primaryie) #: xml/api-index-full.xml:98(primaryie) xml/api-index-full.xml:99(primaryie) #: xml/api-index-full.xml:100(primaryie) xml/api-index-full.xml:101(primaryie) #: xml/api-index-full.xml:102(primaryie) xml/api-index-full.xml:103(primaryie) #: xml/api-index-full.xml:104(primaryie) xml/api-index-full.xml:105(primaryie) #: xml/api-index-full.xml:109(primaryie) xml/api-index-full.xml:117(primaryie) #: xml/api-index-full.xml:118(primaryie) xml/api-index-full.xml:119(primaryie) #: xml/api-index-full.xml:120(primaryie) xml/api-index-full.xml:121(primaryie) #: xml/api-index-full.xml:122(primaryie) xml/api-index-full.xml:123(primaryie) #: xml/api-index-full.xml:124(primaryie) xml/api-index-full.xml:125(primaryie) #: xml/api-index-full.xml:126(primaryie) xml/api-index-full.xml:135(primaryie) #: xml/api-index-full.xml:137(primaryie) xml/api-index-full.xml:139(primaryie) #: xml/api-index-full.xml:140(primaryie) xml/api-index-full.xml:141(primaryie) #: xml/api-index-full.xml:142(primaryie) xml/api-index-full.xml:143(primaryie) #: xml/api-index-full.xml:144(primaryie) xml/api-index-full.xml:145(primaryie) #: xml/api-index-full.xml:146(primaryie) xml/api-index-full.xml:147(primaryie) #: xml/api-index-full.xml:148(primaryie) xml/api-index-full.xml:154(primaryie) #: xml/api-index-full.xml:155(primaryie) xml/api-index-full.xml:156(primaryie) #: xml/api-index-full.xml:157(primaryie) xml/api-index-full.xml:158(primaryie) #: xml/api-index-full.xml:159(primaryie) xml/api-index-full.xml:160(primaryie) #: xml/api-index-full.xml:161(primaryie) xml/api-index-full.xml:162(primaryie) #: xml/api-index-full.xml:163(primaryie) xml/api-index-full.xml:168(primaryie) #: xml/api-index-full.xml:169(primaryie) xml/api-index-full.xml:170(primaryie) #: xml/api-index-full.xml:171(primaryie) xml/api-index-full.xml:172(primaryie) #: xml/api-index-full.xml:182(primaryie) xml/api-index-full.xml:183(primaryie) #: xml/api-index-full.xml:184(primaryie) xml/api-index-full.xml:185(primaryie) #: xml/api-index-full.xml:186(primaryie) xml/api-index-full.xml:187(primaryie) #: xml/api-index-full.xml:188(primaryie) xml/api-index-full.xml:189(primaryie) #: xml/api-index-full.xml:190(primaryie) xml/api-index-full.xml:191(primaryie) #: xml/api-index-full.xml:192(primaryie) xml/api-index-full.xml:193(primaryie) #: xml/api-index-full.xml:194(primaryie) xml/api-index-full.xml:195(primaryie) #: xml/api-index-full.xml:212(primaryie) xml/api-index-full.xml:216(primaryie) #: xml/api-index-full.xml:218(primaryie) xml/api-index-full.xml:219(primaryie) #: xml/api-index-full.xml:220(primaryie) xml/api-index-full.xml:221(primaryie) #: xml/api-index-full.xml:222(primaryie) xml/api-index-full.xml:227(primaryie) #: xml/api-index-full.xml:228(primaryie) xml/api-index-full.xml:229(primaryie) #: xml/api-index-full.xml:230(primaryie) xml/api-index-full.xml:231(primaryie) #: xml/api-index-full.xml:242(primaryie) xml/api-index-full.xml:246(primaryie) #: xml/api-index-full.xml:247(primaryie) xml/api-index-full.xml:248(primaryie) #: xml/api-index-full.xml:249(primaryie) xml/api-index-full.xml:287(primaryie) #: xml/api-index-full.xml:288(primaryie) xml/api-index-full.xml:289(primaryie) #: xml/api-index-full.xml:290(primaryie) xml/api-index-full.xml:291(primaryie) #: xml/api-index-full.xml:293(primaryie) xml/api-index-full.xml:315(primaryie) #: xml/api-index-full.xml:316(primaryie) xml/api-index-full.xml:317(primaryie) #: xml/api-index-full.xml:318(primaryie) xml/api-index-full.xml:321(primaryie) #: xml/api-index-full.xml:325(primaryie) xml/api-index-full.xml:327(primaryie) #: xml/api-index-full.xml:334(primaryie) xml/api-index-full.xml:337(primaryie) #: xml/api-index-full.xml:341(primaryie) xml/api-index-full.xml:348(primaryie) #: xml/api-index-full.xml:363(primaryie) xml/api-index-full.xml:385(primaryie) #: xml/api-index-full.xml:398(primaryie) xml/api-index-full.xml:414(primaryie) #: xml/api-index-full.xml:460(primaryie) xml/api-index-full.xml:465(primaryie) #: xml/api-index-full.xml:473(primaryie) xml/api-index-full.xml:474(primaryie) #: xml/api-index-full.xml:478(primaryie) xml/api-index-full.xml:479(primaryie) #: xml/api-index-full.xml:481(primaryie) xml/api-index-full.xml:484(primaryie) #: xml/api-index-full.xml:485(primaryie) xml/api-index-full.xml:502(primaryie) #: xml/api-index-full.xml:541(primaryie) xml/api-index-full.xml:584(primaryie) #: xml/api-index-full.xml:587(primaryie) xml/api-index-full.xml:593(primaryie) #: xml/api-index-full.xml:594(primaryie) xml/api-index-full.xml:595(primaryie) #: xml/api-index-deprecated.xml:7(primaryie) #: xml/api-index-deprecated.xml:8(primaryie) #: xml/api-index-deprecated.xml:9(primaryie) #: xml/api-index-deprecated.xml:33(primaryie) #: xml/api-index-deprecated.xml:56(primaryie) #: xml/api-index-deprecated.xml:57(primaryie) #: xml/api-index-deprecated.xml:58(primaryie) #: xml/api-index-deprecated.xml:59(primaryie) #: xml/api-index-deprecated.xml:60(primaryie) #: xml/api-index-deprecated.xml:61(primaryie) #: xml/api-index-deprecated.xml:62(primaryie) #: xml/api-index-deprecated.xml:63(primaryie) #: xml/api-index-deprecated.xml:64(primaryie) #: xml/api-index-deprecated.xml:70(primaryie) #: xml/api-index-1.1.4.xml:11(primaryie) xml/api-index-1.1.4.xml:12(primaryie) #: xml/api-index-1.1.3.xml:7(primaryie) xml/api-index-1.1.3.xml:8(primaryie) #: xml/api-index-1.1.3.xml:9(primaryie) xml/api-index-1.1.3.xml:12(primaryie) #: xml/api-index-1.1.3.xml:13(primaryie) xml/api-index-1.1.3.xml:14(primaryie) #: xml/api-index-1.1.3.xml:15(primaryie) xml/api-index-1.1.3.xml:16(primaryie) #: xml/api-index-1.1.3.xml:17(primaryie) xml/api-index-1.1.3.xml:28(primaryie) #: xml/api-index-1.1.2.xml:7(primaryie) xml/api-index-1.1.1.xml:7(primaryie) #: xml/api-index-1.1.1.xml:8(primaryie) xml/api-index-1.1.1.xml:9(primaryie) #: xml/api-index-1.1.1.xml:13(primaryie) xml/api-index-1.1.1.xml:20(primaryie) #: xml/api-index-1.1.0.xml:7(primaryie) xml/api-index-1.1.0.xml:8(primaryie) #: xml/api-index-1.1.0.xml:9(primaryie) xml/api-index-1.1.0.xml:10(primaryie) #: xml/api-index-1.1.0.xml:11(primaryie) xml/api-index-1.1.0.xml:12(primaryie) #: xml/api-index-1.1.0.xml:13(primaryie) xml/api-index-1.1.0.xml:14(primaryie) #: xml/api-index-1.1.0.xml:15(primaryie) xml/api-index-1.1.0.xml:16(primaryie) #: xml/api-index-1.1.0.xml:17(primaryie) xml/api-index-1.1.0.xml:18(primaryie) #: xml/api-index-1.1.0.xml:19(primaryie) xml/api-index-1.1.0.xml:20(primaryie) #: xml/api-index-1.1.0.xml:21(primaryie) xml/api-index-1.1.0.xml:22(primaryie) #: xml/api-index-1.1.0.xml:23(primaryie) xml/api-index-1.1.0.xml:24(primaryie) #: xml/api-index-1.1.0.xml:25(primaryie) xml/api-index-1.1.0.xml:26(primaryie) #: xml/api-index-1.1.0.xml:27(primaryie) xml/api-index-1.1.0.xml:28(primaryie) #: xml/api-index-1.1.0.xml:29(primaryie) xml/api-index-1.1.0.xml:30(primaryie) #: xml/api-index-1.1.0.xml:31(primaryie) xml/api-index-1.1.0.xml:32(primaryie) #: xml/api-index-1.1.0.xml:33(primaryie) xml/api-index-1.1.0.xml:34(primaryie) #: xml/api-index-1.1.0.xml:35(primaryie) xml/api-index-1.1.0.xml:36(primaryie) #: xml/api-index-1.1.0.xml:37(primaryie) xml/api-index-1.1.0.xml:38(primaryie) #: xml/api-index-1.1.0.xml:39(primaryie) xml/api-index-1.1.0.xml:40(primaryie) #: xml/api-index-1.1.0.xml:41(primaryie) xml/api-index-1.1.0.xml:42(primaryie) #: xml/api-index-1.1.0.xml:43(primaryie) xml/api-index-1.1.0.xml:44(primaryie) #: xml/api-index-1.1.0.xml:45(primaryie) xml/api-index-1.1.0.xml:46(primaryie) #: xml/api-index-1.1.0.xml:47(primaryie) xml/api-index-1.0.9.xml:7(primaryie) #: xml/api-index-1.0.9.xml:8(primaryie) xml/api-index-1.0.9.xml:9(primaryie) #: xml/api-index-1.0.9.xml:10(primaryie) xml/api-index-1.0.9.xml:11(primaryie) #: xml/api-index-1.0.9.xml:12(primaryie) xml/api-index-1.0.8.xml:10(primaryie) #: xml/api-index-1.0.7.xml:10(primaryie) xml/api-index-1.0.7.xml:27(primaryie) #: xml/api-index-1.0.6.xml:17(primaryie) xml/api-index-1.0.6.xml:63(primaryie) #: xml/api-index-1.0.6.xml:71(primaryie) xml/api-index-1.0.6.xml:98(primaryie) #: xml/api-index-1.0.5.xml:20(primaryie) xml/api-index-1.0.5.xml:21(primaryie) #: xml/api-index-1.0.5.xml:22(primaryie) xml/api-index-1.0.5.xml:35(primaryie) #: xml/api-index-1.0.5.xml:36(primaryie) xml/api-index-1.0.5.xml:57(primaryie) #: xml/api-index-1.0.5.xml:59(primaryie) xml/api-index-1.0.5.xml:61(primaryie) #: xml/api-index-1.0.5.xml:62(primaryie) xml/api-index-1.0.5.xml:63(primaryie) #: xml/api-index-1.0.5.xml:64(primaryie) xml/api-index-1.0.5.xml:65(primaryie) #: xml/api-index-1.0.5.xml:66(primaryie) xml/api-index-1.0.5.xml:67(primaryie) #: xml/api-index-1.0.4.xml:13(primaryie) xml/api-index-1.0.4.xml:14(primaryie) #: xml/api-index-1.0.4.xml:15(primaryie) xml/api-index-1.0.3.xml:16(primaryie) #: xml/api-index-0.8.xml:10(primaryie) xml/api-index-0.8.xml:11(primaryie) #: xml/api-index-0.8.xml:12(primaryie) xml/api-index-0.8.xml:14(primaryie) msgid ", macro in " msgstr "" #: xml/api-index-full.xml:68(primaryie) xml/api-index-full.xml:71(primaryie) #: xml/api-index-full.xml:438(primaryie) xml/api-index-1.0.6.xml:74(primaryie) msgid ", user_function in " msgstr "" #: xml/api-index-full.xml:69(primaryie) xml/api-index-full.xml:70(primaryie) #: xml/api-index-full.xml:72(primaryie) xml/api-index-full.xml:73(primaryie) #: xml/api-index-full.xml:74(primaryie) xml/api-index-full.xml:75(primaryie) #: xml/api-index-full.xml:354(primaryie) xml/api-index-full.xml:360(primaryie) #: xml/api-index-full.xml:392(primaryie) xml/api-index-full.xml:393(primaryie) #: xml/api-index-full.xml:422(primaryie) xml/api-index-full.xml:423(primaryie) #: xml/api-index-full.xml:494(primaryie) xml/api-index-full.xml:500(primaryie) #: xml/api-index-full.xml:538(primaryie) xml/api-index-full.xml:540(primaryie) #: xml/api-index-deprecated.xml:29(primaryie) #: xml/api-index-deprecated.xml:30(primaryie) #: xml/api-index-1.0.4.xml:11(primaryie) xml/api-index-1.0.4.xml:12(primaryie) msgid ", struct in " msgstr "" #: xml/api-index-full.xml:177(primaryie) msgid ", typedef in " msgstr "" #: xml/api-index-full.xml:320(title) xml/api-index-1.1.5.xml:15(title) #: xml/api-index-1.1.3.xml:11(title) xml/api-index-1.1.1.xml:12(title) #: xml/api-index-1.0.7.xml:23(title) xml/api-index-1.0.6.xml:27(title) msgid "D" msgstr "" #: xml/api-index-full.xml:353(title) xml/api-index-deprecated.xml:28(title) #: xml/api-index-1.1.6.xml:10(title) xml/api-index-1.0.6.xml:36(title) #: xml/api-index-1.0.5.xml:38(title) msgid "E" msgstr "" #: xml/api-index-full.xml:355(primaryie) xml/api-index-full.xml:356(primaryie) #: xml/api-index-full.xml:357(primaryie) xml/api-index-full.xml:358(primaryie) #: xml/api-index-full.xml:495(primaryie) xml/api-index-full.xml:496(primaryie) #: xml/api-index-full.xml:497(primaryie) xml/api-index-full.xml:498(primaryie) #: xml/api-index-1.1.5.xml:23(primaryie) xml/api-index-1.1.5.xml:24(primaryie) #: xml/api-index-1.1.5.xml:25(primaryie) xml/api-index-1.1.5.xml:26(primaryie) #: xml/api-index-1.0.6.xml:37(primaryie) xml/api-index-1.0.6.xml:38(primaryie) #: xml/api-index-1.0.6.xml:39(primaryie) xml/api-index-1.0.6.xml:40(primaryie) msgid ", object signal in " msgstr "" #: xml/api-index-full.xml:359(primaryie) xml/api-index-full.xml:499(primaryie) #: xml/api-index-full.xml:539(primaryie) msgid ", object property in " msgstr "" #: xml/api-index-full.xml:361(primaryie) xml/api-index-full.xml:384(primaryie) #: xml/api-index-full.xml:501(primaryie) #: xml/api-index-deprecated.xml:31(primaryie) #: xml/api-index-1.1.5.xml:27(primaryie) xml/api-index-1.0.6.xml:41(primaryie) #: xml/api-index-1.0.6.xml:62(primaryie) msgid ", enum in " msgstr "" #: xml/api-index-full.xml:408(title) xml/api-index-1.0.6.xml:66(title) #: xml/api-index-1.0.5.xml:43(title) msgid "F" msgstr "" #: xml/api-index-full.xml:413(title) xml/api-index-1.1.6.xml:23(title) #: xml/api-index-1.0.6.xml:70(title) xml/api-index-1.0.5.xml:46(title) msgid "G" msgstr "" #: xml/api-index-full.xml:426(title) xml/api-index-1.0.9.xml:14(title) #: xml/api-index-1.0.8.xml:6(title) xml/api-index-1.0.5.xml:49(title) #: xml/api-index-1.0.4.xml:47(title) msgid "H" msgstr "" #: xml/api-index-full.xml:436(title) xml/api-index-1.1.3.xml:19(title) #: xml/api-index-1.0.6.xml:73(title) msgid "I" msgstr "" #: xml/api-index-full.xml:455(title) msgid "K" msgstr "" #: xml/api-index-full.xml:459(title) xml/api-index-deprecated.xml:55(title) #: xml/api-index-1.1.5.xml:18(title) xml/api-index-1.1.1.xml:15(title) #: xml/api-index-1.0.6.xml:84(title) xml/api-index-1.0.5.xml:56(title) #: xml/api-index-1.0.3.xml:19(title) msgid "L" msgstr "" #: xml/api-index-full.xml:488(title) xml/api-index-1.0.5.xml:69(title) msgid "O" msgstr "" #: xml/api-index-full.xml:493(title) xml/api-index-1.1.6.xml:27(title) #: xml/api-index-1.1.5.xml:22(title) msgid "P" msgstr "" #: xml/api-index-full.xml:532(title) msgid "Q" msgstr "" #: xml/api-index-full.xml:535(title) xml/api-index-deprecated.xml:66(title) #: xml/api-index-1.1.5.xml:54(title) xml/api-index-1.0.8.xml:9(title) msgid "S" msgstr "" #: xml/api-index-full.xml:578(title) xml/api-index-deprecated.xml:69(title) #: xml/api-index-1.1.6.xml:31(title) xml/api-index-1.1.5.xml:58(title) #: xml/api-index-1.1.3.xml:27(title) xml/api-index-1.1.1.xml:19(title) #: xml/api-index-1.0.7.xml:26(title) xml/api-index-1.0.6.xml:96(title) #: xml/api-index-1.0.5.xml:74(title) xml/api-index-1.0.4.xml:50(title) #: xml/api-index-1.0.3.xml:23(title) msgid "T" msgstr "" #: xml/api-index-full.xml:597(title) msgid "U" msgstr "" #: xml/api-index-full.xml:601(title) xml/api-index-1.0.5.xml:78(title) msgid "V" msgstr "" #: cutter-docs.sgml:7(title) msgid "Cutter Reference Manual" msgstr "Cutterリファレンスマニュアル" #: cutter-docs.sgml:8(releaseinfo) msgid "for Cutter &version;" msgstr "Cutter &version;用" #: cutter-docs.sgml:12(title) msgid "Introduction" msgstr "はじめに" #: cutter-docs.sgml:14(title) msgid "Overview of Cutter" msgstr "Cutterの概要" #: cutter-docs.sgml:21(title) msgid "Install Cutter to your platform" msgstr "プラットフォーム毎のCutterのインストール方法" #: cutter-docs.sgml:33(title) msgid "Getting start" msgstr "はじめよう" #: cutter-docs.sgml:39(title) msgid "Reference" msgstr "リファレンス" #: cutter-docs.sgml:41(title) msgid "Command" msgstr "コマンド" #: cutter-docs.sgml:46(title) msgid "Writing test" msgstr "テスト作成" #: cutter-docs.sgml:76(title) msgid "Writing assertion" msgstr "検証作成" #: cutter-docs.sgml:119(title) msgid "Index of all symbols" msgstr "すべてのシンボル一覧" #: cutter-docs.sgml:122(title) msgid "Index of deprecated symbols" msgstr "非推奨のシンボル一覧" #: cutter-docs.sgml:125(title) msgid "Index of new symbols in 1.1.7" msgstr "1.1.7での新しいシンボル一覧" #: cutter-docs.sgml:128(title) msgid "Index of new symbols in 1.1.6" msgstr "1.1.6での新しいシンボル一覧" #: cutter-docs.sgml:131(title) msgid "Index of new symbols in 1.1.5" msgstr "1.1.5での新しいシンボル一覧" #: cutter-docs.sgml:134(title) msgid "Index of new symbols in 1.1.4" msgstr "1.1.4での新しいシンボル一覧" #: cutter-docs.sgml:137(title) msgid "Index of new symbols in 1.1.3" msgstr "1.1.3での新しいシンボル一覧" #: cutter-docs.sgml:140(title) msgid "Index of new symbols in 1.1.2" msgstr "1.1.2での新しいシンボル一覧" #: cutter-docs.sgml:143(title) msgid "Index of new symbols in 1.1.1" msgstr "1.1.1での新しいシンボル一覧" #: cutter-docs.sgml:146(title) msgid "Index of new symbols in 1.1.0" msgstr "1.1.0での新しいシンボル一覧" #: cutter-docs.sgml:149(title) msgid "Index of new symbols in 1.0.9" msgstr "1.0.9での新しいシンボル一覧" #: cutter-docs.sgml:152(title) msgid "Index of new symbols in 1.0.8" msgstr "1.0.8での新しいシンボル一覧" #: cutter-docs.sgml:155(title) msgid "Index of new symbols in 1.0.7" msgstr "1.0.7での新しいシンボル一覧" #: cutter-docs.sgml:158(title) msgid "Index of new symbols in 1.0.6" msgstr "1.0.6での新しいシンボル一覧" #: cutter-docs.sgml:161(title) msgid "Index of new symbols in 1.0.5" msgstr "1.0.5での新しいシンボル一覧" #: cutter-docs.sgml:164(title) msgid "Index of new symbols in 1.0.4" msgstr "1.0.4での新しいシンボル一覧" #: cutter-docs.sgml:167(title) msgid "Index of new symbols in 1.0.3" msgstr "1.0.3での新しいシンボル一覧" #: cutter-docs.sgml:170(title) msgid "Index of new symbols in 1.0.2" msgstr "1.0.2での新しいシンボル一覧" #: cutter-docs.sgml:173(title) msgid "Index of new symbols in 1.0.1" msgstr "1.0.1での新しいシンボル一覧" #: cutter-docs.sgml:176(title) msgid "Index of new symbols in 1.0" msgstr "1.0での新しいシンボル一覧" #: cutter-docs.sgml:179(title) msgid "Index of new symbols in 0.9" msgstr "0.9での新しいシンボル一覧" #: cutter-docs.sgml:182(title) msgid "Index of new symbols in 0.8" msgstr "0.8での新しいシンボル一覧" #: cutter-docs.sgml:185(title) msgid "Index of new symbols in 0.7" msgstr "0.7での新しいシンボル一覧" #: cutter-docs.sgml:188(title) msgid "Index of new symbols in 0.6" msgstr "0.6での新しいシンボル一覧" #: cutter-docs.sgml:191(title) msgid "Index of new symbols in 0.5" msgstr "0.5での新しいシンボル一覧" #: cutter-docs.sgml:194(title) msgid "Index of new symbols in 0.4" msgstr "0.4での新しいシンボル一覧" #: cutter-docs.sgml:197(title) msgid "Index of new symbols in 0.3" msgstr "0.3での新しいシンボル一覧" #. Put one translator per line, in the form of NAME , YEAR1, YEAR2 #: cutter-docs.sgml:0(None) msgid "translator-credits" msgstr "" cutter-testing-framework-1.1.7/doc/reference/html-build.stamp0000644000175000017500000000000011525703040022447 0ustar koukoucutter-testing-framework-1.1.7/doc/reference/install-to-solaris.xml.ja0000644000175000017500000000635011525655563024251 0ustar koukou Solarisへインストール Cutterライブラリ Solarisへインストール SolarisへのCutterのインストール方法 はじめに SolraisへのCutterのインストール方法を説明します。 GLibのインストール Cutterを動かすためにはGLib 2.16以降が必要です。Solaris 10にはGLib 2.16以降のパッケージがないため、自分でビルド・インストールしなければいけません。 GLibをビルドするためにはGNU gettext、GNU libiconvが必要です。これらのソフトウェアは Sunfreeware のパッケージを利用してインストールすることができます。 例えば、GNU gettextは以下のようにインストールできます。 % mkdir -p ~/packages % cd ~/packages % wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/gettext-0.17-sol10-sparc-local.gz % gzip -d gettext-0.17-sol10-sparc-local.gz % pkgadd -d ./gettext-0.17-sol10-sparc-local 同様にGNU libiconvもインストールしてください。 また、Cutterを用いた開発では、GNUビルドツールが必要になるので、GNU Autoconf、GNU Automake、GNU Libtoolもインストールしておいてください。必須ではありませんが、国際化されたソフトウェアを開発する場合はintltoolもあるとよいでしょう。 パッケージをインストールしたらGLibをビルドすることができます。以下のようにしてビルド・インストールできます。GNU make を使うことに注意してください。 % mkdir -p ~/src % cd ~/src % wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz % tar xvzf glib-2.22.4.tar.gz % cd glib-2.22.4 % ./configure --with-libiconv=gnu % gmake % sudo gmake install Cutterのインストール CutterはGNUビルドツールを利用しているので、他のフリーソフトウェアと同じように以下のようにインストールできます。GNU makeを使うことに注意してください。 % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % gmake % gmake install 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/version.xml0000644000175000017500000000000611525654651021572 0ustar koukou1.1.7 cutter-testing-framework-1.1.7/doc/reference/install-to-freebsd.xml0000644000175000017500000000322011525655563023607 0ustar koukou Install to FreeBSD CUTTER Library Install to FreeBSD How to install Cutter to FreeBSD Introduction This document explains how to install Cutter to FreeBSD. Install Cutter can be installed either using packages or ports. As usual you shall not mix them so depending on the way you maintain third party packages, install the package: % sudo /usr/sbin/pkg_add -r cutter or compile and install the port: % (cd /usr/ports/devel/cutter && sudo make install) See also: about packages and ports: Installing Applications: Packages and Ports about the port: FreshPorts -- devel/cutter The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/readme.xml0000644000175000017500000003374511525655563021365 0ustar koukou README CUTTER Library README An introduction of Cutter, a Unit Testing Framework for C and C++ Name Cutter Author Program Kouhei Sutou <kou@clear-code.com> Hiroyuki Ikezoe <ikezoe@clear-code.com> Yuto Hayamizu <y.hayamizu@gmail.com> Kinotan Icons Mayu & Co. License Source: LGPLv3 or later. (detail: license/lgpl-3.txt ) Document and kinotan icons: Triple license: LGPL, GFDL and/or CC. LGPL: v3 or later. (detail: license/lgpl-3.txt ) GFDL: v1.3 or later. (detail: license/gfdl-1.3.txt ) CC: BY-SA Exceptions: glib-compatible/glibintl.h, glib-compatible/gregex.*, glib-compatible/gscripttable.h, glib-compatible/gsequence.*, glib-compatible/gstring.*, glib-compatible/gunicode.h, glib-compatible/guniprop.c: LGPL v2.0 or later. (detail: glib-compatible/COPYING ) glib-compatible/pcre/: PCRE LICENSE. (detail: glib-compatible/pcre/COPYING ) html/blog.*, html/download.*, html/heading-mark.* html/install.*, html/readme.*, html/reference.*, html/tango-logo.png, html/tutorial.*, html/mini-*.svg: Public domain. They are deliverables by Tango Desktop Project . (Some of them are modified.) html/ja.png, html/us.png, html/famfamfam-logo.png: Public domain. They are distributed by famfamfam.com . What's this? Cutter is a xUnit family Unit Testing Framework for C and C++. This is a list of features of Cutter: easy to write tests. outputs result with useful format for debugging. tests are built as shared libraries. See FEATURES for more details. Dependency libraries GLib >= 2.16 Get tar.gz: % wget http://downloads.sourceforge.net/cutter/cutter-1.1.0.tar.gz Subversion: % svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter Install See Install . Usage % cutter [OPTION ...] TEST_DIRECTORY TEST_DIRECTORY should have test_*.so. test_*.so are searched recursively. See cutter for more details. How to test Executing flow of test is the following. Write a test. Compile it and build test_*.so. Execute cutter. It loads test_*.so and runs them. See a tutorial and sample/stack/. Test result Here is an example test result: ..........F................................................. 1) Failure: test_test_case_count <1 == cut_test_case_get_n_tests(test_object, NULL)> expected: <1> but was: <0> test/test-cut-test-case.c:143: test_test_case_count() Finished in 0.020857 seconds 60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) Progress A part that contains "." and "F" of the test result shows test progress: ..........F................................................. Each "." and "F" shows a test case (test function). "." shows a test case that is succeeded and "F" shows a test case that is failed. There are "E", "P" and "N". They shows error, pending and notification respectively. Here is a summary of test case marks: . A succeeded test F A failed test E A test that had an error P A test that is marked as pending N A test that had an notification The above marks are showed after each test is finished. We can confirm the test progress from the output in testing. Summary of test result Cutter outputs a summary of test result after all tests are finished. The first of a summary is a list of a detail of test result of non-succeeded test. In the example, cutter outputs a detail of test result because there is a failure. 1) Failure: test_test_case_count <1 == cut_test_case_get_n_tests(test_object, NULL)> expected: <1> but was: <0> test/test-cut-test-case.c:143: test_test_case_count() In the example, test_test_case_count test case is failed. We expected that cut_test_case_get_n_tests(test_object, NULL) is 1 but was 0. The failed assertion is in test_test_case_count() function in test/test-cut-test-case.c at 143th line. Elapsed time for testing is showed after a list of a detail of test result: Finished in 0.020857 seconds The last line is an summary of test result: 60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) Here are the means of each output: n test(s) n test case(s) (test function(s)) are run. n assertion(s) n assertion(s) are passed. n failure(s) n assertion(s) are failed. n error(s) n error(s) are occurred (cut_error() is used n times) n pending(s) n test case(s) are pending (cut_pending() is used n times) n notification(s) n notification(s) are occurred (cut_notification() is used n times) In the example, 60 test cases are run, 253 assertions are passed and an assertion is failed. There are no error, pending, notification. XML report Cutter reports test result as XML format if --xml-report option is specified. A reported XML has the following structure: <report> <result> <test-case> <name>TEST CASE NAME</name> <description>DESCRIPTION OF TEST CASE (if exists)</description> </test-case> <test> <name>TEST NAME</name> <description>DESCRIPTION OF TEST CASE (if exists)</description> <option><!-- ATTRIBUTE INFORMATION (if exists) --> <name>ATTRIBUTE NAME (e.g.: bug)</name> <value>ATTRIBUTE VALUE (e.g.: 1234)</value> </option> <option> ... </option> </test> <status>TEST RESULT ([success|failure|error|pending|notification])</status> <detail>DETAIL OF TEST RESULT (if exists)</detail> <backtrace><!-- BACKTRACE (if exists) --> <entry> <file>FILE NAME</file> <line>LINE</line> <info>ADDITIONAL INFORMATION</info> </entry> <entry> ... </entry> </backtrace> <elapsed>ELAPSED TIME (e.g.: 0.000010)</elapsed> </result> <result> ... </result> ... </report> Test coverage You can see the code coverage with Cutter if your system have LTP tools . To see the coverage, add the followling line in your configure.ac and type "make coverage". AC_CHECK_COVERAGE References Assertions See cutter/cut-assertions.h . Attributes You can add attributes to your test to get more useful information on failure. For example, you can add Bug ID like the following void attributes_invalid_input(void); void test_invalid_input(void); void attributes_invalid_input (void) { cut_set_attributes("bug", "123"); } void test_invalid_input (void) { cut_assert_equal("OK", get_input()); } In the above example, test_invalid_input test has an attribute that the test is for Bug #123. You need to define a function whose name is "attributes_#{TEST_NAME - 'test_' PREFIX}" to add attributes to a test. In the above example, attributes set function, "attributes_invalid_input", is defined to set "bug" attribute to "test_invalid_input" test. Template The following is a template of test. #include <cutter.h> #include "HEADER_FILE_OF_YOUR_PROGRAM" void test_condition(void); void test_strstr(void); static int condition = 0; void cut_setup (void) { condition = 1; } void cut_teardown (void) { condition = 0; } void test_condition(void) { cut_set_message("The condition value should be set to 1 in cut_setup()"); cut_assert_equal_int(1, condition); ... } void test_strstr(void) { cut_assert_equal_string("sub-string", strstr("string sub-string", "sub")); ... } Thanks Kazumasa Matsunaga: reported a build bug. Daijiro MORI: reported bugs. UNNO Hideyuki: reported a document bug. assisted Solaris install document. gunyara-kun: suggested API design. Yamakawa Hiroshi: reported works on Cygwin. Yoshinori K. Okuji: reported locale related bugs. suggested a new feature. Zed Shaw: reported bugs. Romuald Conty: reported a document bug. Romain Tartière: reported bugs. suggested improvements. Ilya Barygin: reported bugs in test. Hiroaki Nakamura: reported a bug on CentOS. cutter-testing-framework-1.1.7/doc/reference/tutorial.xml0000644000175000017500000016134411525655563021770 0ustar koukou Tutorial CUTTER Library Tutorial How to use Cutter Introduction We write a program (library) that implements a stack in C. We write a program with writing tests. To write tests, we use Cutter that is a unit testing framework for C. We use GNU build system (GNU Autoconf/GNU Automake/GNU Libtool) for build system. GNU build system lessens disparities on build environment. For this reason, we can build our program and tests on several environment easily. It's better that a program works on several environment without many costs. If tests of the program works on the environment too, we can verify the program works well on the environment easily. It's important that both a program and tests are works well on several environment easily. Cutter requires only GLib. GLib is a very portable library that works on not only UNIX-like system but also Windows and Mac OS X. Cutter provides many useful test support features with portability due to GLib. Cutter is a testing framework and respects to xUnit style. We will learn how to use Cutter with writing a stack implementation. We assume that Cutter is already installed into your system. There are source codes of this program in sample/stack/. Directory hierarchy First, we need to setup a directory for our stack program. We use 'stack' as the directory name. % mkdir -p /tmp/stack % cd /tmp/stack Next, we make some directories: config/ that is for build auxiliary files, src/ that is for our source files and test/ that is for tests. [stack]% mkdir config src test After the above, we get the following directory hierarchy: stack/ -+- config/ for build auxiliary files | +- src/ for source files | +- test/ for tests Use GNU build system In GNU build system start-up, some commands are ran and they generates some files automatically. They usually are run from an authgen.sh shell script. We follow the convention. autogen.sh: #!/bin/sh run() { $@ if test $? -ne 0; then echo "Failed $@" exit 1 fi } run aclocal ${ACLOCAL_ARGS} run libtoolize --copy --force run autoheader run automake --add-missing --foreign --copy run autoconf Don't forget to make the autogen.sh executable. [stack]% chmod +x autogen.sh run() is a convenience function to confirm a result of ran command. The following list shows what is done by them: aclocal: collects macros that is used by Automake into aclocal.m4. libtoolize: prepares files that is needed by libtool. autoheader: generates config.h.in that is used by configure script. automake: generates Makefile.in that is used by configure script. autoconf: generates configure scripts. If we installed Cutter into different prefix with aclocal's install prefix, you need to set ACLOCAL_ARGS environment variable. The environment variable is referred from autogen.sh. If we installed Cutter with $HOME/local prefix, here is an example command to set the environment variable: [stack]% export ACLOCAL_ARGS="-I $HOME/local/share/aclocal" The following is a result of autogen.sh at this point: [stack]% ./autogen.sh aclocal: `configure.ac' or `configure.in' is required Failed aclocal We need to prepare configure.ac that is for Autoconf. configure.ac The following is a minimum configure.ac for our autogen.sh. configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL AC_CONFIG_FILES([Makefile]) AC_OUTPUT The following is a result of autogen after preparing configure.ac. [stack]% ./autogen.sh Putting files in AC_CONFIG_AUX_DIR, `config'. configure.ac:7: installing `config/install-sh' configure.ac:7: installing `config/missing' automake: no `Makefile.am' found for any configure output Failed automake --add-missing --foreign --copy We need to prepare Makefile.am for Automake. Makefile.am An empty Makefile.am is enough if the Makefile.am is just only for autogen.sh. [stack]% touch Makefile.am [stack]% ./autogen.sh Putting files in AC_CONFIG_AUX_DIR, `config'. A configure script can be generated. We can do 'configure; make; make install' like many popular softwares at this point: [stack]% ./configure ... [stack]% make [stack]% make install But for now, nothing is to happen because we doesn't have any items that are needed to build or install. First test writing We can write a test because we got a minimal build environment. First, we test that a newly created statck should be empty. The following code representes this test in C: void test_new_stack (void) { Stack *stack; stack = stack_new(); if (stack_is_empty(stack)) PASS; else FAIL; } We change this test code to be able to run as a test code for Cutter. Write a test program A test program is put into test/. In this tutorial, we make a test program as test/test-stack.c. First, we need to include cutter.h to use Cutter. test/test-stack.c: #include <cutter.h> And we need to include stack.h that declares API for test target stack implementation. (stack.h will be made later.) test/test-stack.c: #include <stack.h> Next, we write a test with the stack API: test/test-stack.c: void test_new_stack (void); void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); } cut_assert() is a macro that fails if the first argument is 0, passes otherwise. Writing tests with Cutter means that writing a program that verifies a target program works as we expected at the specific situation. The following test code is a whole test code to test "a newly created stack should be empty". test/test-stack.c: #include <cutter.h> #include <stack.h> void test_new_stack (void); void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); } Build a test Each test programs for Cutter are shared libraries. To build the above test program as shared library, we change Makefile.am. Build configuration in test/ Makefile.am is empty for now. First, put the following configuration to use ACLOCAL_ARGS environment variable for autogen.sh with aclocal invoked via make: Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS Next, to build test/test-stack.c in test/ directory, we need to specify that there is test/ directory as sub directory in Makefile.am. Makefile.am: ... SUBDIRS = test make will detect Makefile.am is changed and update Makefile and so on automatically after we change Makefile.am and run make. [stack]% make cd . && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign Makefile cd . && /bin/sh ./config.status Makefile config.status: creating Makefile Making all in test config.status: creating Makefile Making all in test make[1]: Entering directory `/tmp/stack/test' make[1]: *** No rule to make target `all'. Stop. make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 We find that make go down to test/ to build. But make is failed in test/ because test/Makefile doesn't exist. To build in test/, we will make test/Makefile.am and indicate configure.ac to generate test/Makefile. An empty test/Makefile.am is OK for just protecting make failure in test/. [stack]% touch test/Makefile.am Next, we indicate configure.ac to generate test/Makefile. Now, make will be done successfully. configure.ac: ... AC_CONFIG_FILES([Makefile test/Makefile]) ... If we run make again, make re-runs configure and test/Makefile is generated. Now make doesn't fail in test/. [stack]% make ... config.status: creating test/Makefile config.status: creating src/config.h config.status: src/config.h is unchanged config.status: executing depfiles commands Making all in test make[1]: Entering directory `/tmp/stack/test' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/tmp/stack/test' make[1]: Entering directory `/tmp/stack' make[1]: Nothing to be done for `all-am'. make[1]: Leaving directory `/tmp/stack' Build test/test_stack.so We will edit test/Makefile.am to build test/test-stack.c as a shared library. A shared library for test should be named as "test_" prefix. (It's OK if "lib" is prepended to "test_" prefix.) We use "noinst_" because a test program isn't needed to be installed. test/Makefile.am: noinst_LTLIBRARIES = test_stack.la Shared libraries for test are loaded dynamically by cutter that is a command included in Cutter to run test. Shared libraries that are loaded dynamically should be builded libtool with -module option. -rpath option is also required by -module option. Because of them LDFLAGS becomes the following. The reason why -avoid-version is specified is that shared libraries for test aren't needed to have version number. -no-undefined option tells libtool that it reports a error when there is any undefined symbol. On some environments, shared library isn't generated without -no-undefined option. (e.g. a case that generating DLL on Windows.) test/Makefile.am: ... LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined To build test/test_stack.la, test/test-stack.c is used. (test_stack.so is generated into test/.libs/.) We need to specify this. test/Makefile.am: ... test_stack_la_SOURCES = test-stack.c Now, we can build test/test_stack.la. [stack]% make ... cd .. && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign test/Makefile test/Makefile.am: required file `config/depcomp' not found test/Makefile.am: `automake --add-missing' can install `depcomp' make[1]: *** [Makefile.in] Error 1 make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 To generate config/depcomp, we need to run automake with --add-missing option. To do this, we can use autogen.sh. Don't forget to re-run configure. [stack]% ./autogen.sh [stack]% ./configure Now, we can build test/test_stack.la with make. [stack]% make ... test-stack.c:1:20: error: cutter.h: No such file or directory test-stack.c:2:19: error: stack.h: No such file or directory test-stack.c: In function 'test_new_stack': test-stack.c:9: error: 'Stack' undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: 'stack' undeclared (first use in this function) make[1]: *** [test-stack.lo] Error 1 make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 But there are the above errors because we don't setup to use Cutter yet. And we can't include stack.h because we don't have a stack implementation yet. Use Cutter We will support cutter.h including. Cutter provides a macro file for aclocal. Because of this, we can use Cutter with GNU build system. First, we add a code to detect Cutter into configure.ac. configure.ac: ... AC_CHECK_CUTTER AC_CONFIG_FILES([Makefile test/Makefile]) ... We use detected Cutter information in test/Makefile.am: test/Makefile.am: ... INCLUDES = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) ... The followings are the current whole configure.ac, Makefile.am and test/Makefile.am: configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL AC_CHECK_CUTTER AC_CONFIG_FILES([Makefile test/Makefile]) AC_OUTPUT Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = test test/Makefile.am: noinst_LTLIBRARIES = test_stack.la INCLUDES = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c AC_CHECK_CUTTER macro uses pkg-config which is a popular package information management tool. If we installed Cutter with different prefix of pkg-config, we need to set PKG_CONFIG_PATH environment variable. The environment variable is referred by pkg-config to find .pc file. If we installed Cutter with $HOME/local prefix, here is an example command to set the environment variable: [stack]% export PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig We run make again and make runs configure automatically and builds with Cutter configuration after the above changes. [stack]% make ... test-stack.c:2:19: error: stack.h: No such file or directory test-stack.c: In function 'test_new_stack': test-stack.c:9: error: 'Stack' undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: 'stack' undeclared (first use in this function) make[1]: *** [test-stack.lo] Error 1 make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 An error that reports "cutter.h can't be included" is gone away. Make stack API We will fix an error that stack.h can't be included. We put stack.h into src/stack.h because we make a stack implementation in src/. [stack]% touch src/stack.h To include stack.h from test program, we configure include path: test/Makefile.am: ... INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src ... We will find that an error that stack.h can't be included is gone away if we run make again. [stack]% make ... test-stack.c: In function 'test_new_stack': test-stack.c:9: error: 'Stack' undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: 'stack' undeclared (first use in this function) make[1]: *** [test-stack.lo] Error 1 make[1]: Leaving directory `/tmp/stack/test' make: *** [all-recursive] Error 1 There is only an error that Stack type isn't declared. Declare Stack type To build our test program, we declare Stack type in src/stack.h. src/stack.h: #ifndef __STACK_H__ #define __STACK_H__ typedef struct _Stack Stack; #endif We get a warning because stack_new() isn't declared but we can build a shared library. [stack]% make ... test-stack.c: In function 'test_new_stack': test-stack.c:10: warning: assignment makes pointer from integer without a cast ... [stack]% file test/.libs/test_stack.so test/.libs/test_stack.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped NOTE: We can't generate a shared library (DLL) on Cygwin when we have unresolved symbols. We can go to the next step on Cygwin without caring the command result. Declare stack_new()/stack_is_empty() To suppress a warning, we declare stack_new() and stack_is_empty(). src/stack.h: ... Stack *stack_new (void); int stack_is_empty (Stack *stack); ... We can confirm that make don't report any warnings now. [stack]% make Run test Now, we can run a test because we got a shared library. [stack]% cutter test/ cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new Loading our test is failed due to undefined stack_new() but we can confirm that our test is loaded. NOTE: We get a "0 tests are ran and no failure" result report on Cygwin because we can't generate a DLL on Cygwin when we have unresolved symbols. We will implement stack and resolve all symbols. We can generate a DLL and run test after implementing stack. We can go to the next step on Cygwin without caring the command result. Automate running test GNU build system use 'make check' to run test. We follow the convention in our stack implementation. First, we make a script test/run-test.sh that runs our test. A path of cutter command is passed from environment variable CUTTER. test/run-test.sh: #!/bin/sh export BASE_DIR="`dirname $0`" $CUTTER -s $BASE_DIR "$@" $BASE_DIR Don't forget to make the test/run-test.sh executable. [stack]% chmod +x test/run-test.sh We need to specify that we use test/run-test.sh as a test runner script to test/Makefile.am. test/Makefile.am: TESTS = run-test.sh TESTS_ENVIRONMENT = CUTTER="$(CUTTER)" ... We pass a path of cutter command via environment variable CUTTER in TESTS_ENVIRONMENT. A path of cutter command is detected by AC_CHECK_CUTTER in configure.ac. We can confirm that 'make -s check' runs our test. -s option is for silence mode. A test result can be confirmed more easier. [stack]% make -s check Making check in test cutter: symbol lookup error: ./.libs/test_stack.so: undefined symbol: stack_new FAIL: run-test.sh ================================ 1 of 1 tests failed Please report to you@example.com ================================ ... NOTE: As mentioned the above, we doesn't get an error on Cygwin because we can't generate a DLL for now. We doesn't need to care it. We can go to the next. Make test/run-test.sh workable alone In 'make -s check', there are outputs that isn't test result like build logs. They hid test result that is interested by us. So we want test/run-test.sh to work without invoking from 'make -s check'. test/run-test.sh needs to detect a path of cutter command automatically if environment variable CUTTER isn't set. And test/run-test.sh needs to run make to rebuild necessary files if test/run-test.sh isn't invoked from 'make check'. test/run-test.sh: #!/bin/sh export BASE_DIR="`dirname $0`" top_dir="$BASE_DIR/.." if test -z "$NO_MAKE"; then make -C $top_dir > /dev/null || exit 1 fi if test -z "$CUTTER"; then CUTTER="`make -s -C $BASE_DIR echo-cutter`" fi $CUTTER -s $BASE_DIR "$@" $BASE_DIR To support the test/run-test.sh, test/Makefile.am has some works. test/Makefile.am: ... TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" ... echo-cutter: @echo $(CUTTER) The following is the whole of test/Makefile.am. test/Makefile.am: TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) We can confirm that test/run-test.sh runs test even if it's not invoked from 'make -s check'. [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new NOTE: We doesn't get the error on Cygwin. We will use test/run-test.sh instead of 'make -s check' from now. Test result that is what we are interested in will not be hid because test/run-test.sh just outputs build errors and/or warnings and test result. We spent some times to build testing environment before we implement stack. It reduces costs to run test. If costs to run test isn't low, we will not run test gradually. It may cause quality loss. Building testing environment at first delays start time of implementing a main program. But we need to keep quality of a main program by running test until a main program is developed and maintained. We will be able to collect costs that is spent for building testing environment. It's important that building testing environment at first to be developing a high-quality program comfortably. Implement stack We will start implementing stack because we built testing environment. A straightforward stack_new() implementation We will define stack_new() and resolve run-time error. We implement stack in src/stack.c. It's a straightforward stack_new() implementation: src/stack.c: #include <stdlib.h> #include "stack.h" Stack * stack_new (void) { return NULL; } Build src/libstack.la We will build src/stack.c with make. src/ should be included into build targets like test/. Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = src test configure.ac: ... AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) ... The above configurations are for what we want to do. [stack]% test/run-test.sh configure.ac:19: required file `src/Makefile.in' not found make: *** [Makefile.in] Error 1 To resolve the above error, we need to make src/Makefile.am. [stack]% touch src/Makefile.am [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new NOTE: We doesn't get the error on Cygwin. make doesn't report error but we still have an error that stack_new() is undefined. Because we don't build src/stack.c and test program also doesn't link libstack.so yet. The following configurations in src/Makefile.am are for build libstack.so from src/stack.c. src/Makefile.am: lib_LTLIBRARIES = libstack.la LDFLAGS = -no-undefined libstack_la_SOURCES = stack.c make will generate libstack.so. [stack]% make ... make[1]: Entering directory `/tmp/stack/src' Makefile:275: .deps/stack.Plo: No such file or directory make[1]: *** No rule to make target `.deps/stack.Plo'. Stop. ... To resolve the above error, we need to re-run configure. [stack]% ./configure make will generate src/.libs/libstack.so.0.0.0 now. [stack]% make [stack]% file src/.libs/libstack.so.0.0.0 src/.libs/libstack.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped NOTE: We will generate src/.libs/cyglibstack.dll on Cygwin. Link src/libstack.la libstack.so is generated but it's not linked into test program. So there is still run-time error. [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new NOTE: We doesn't get the error on Cygwin. To link libstack.so, we will change test/Makefile.am like the following. test/Makefile.am: ... LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la ... We need to add src/.libs/ to PATH environment variable before run cutter to find DLL generated under src/.libs/ on Cygwin: test/run-test.sh: ... case `uname` in CYGWIN*) PATH="$top_dir/src/.libs:$PATH" ;; Darwin) DYLD_LIBRARY_PATH="$top_dir/src/.libs:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH ;; *BSD) LD_LIBRARY_PATH="$top_dir/src.libs:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH ;; *) : ;; esac $CUTTER -s $BASE_DIR "$@" $BASE_DIR We need to run 'make clean' to re-link our test program. [stack]% make clean [stack]% make [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_is_empty An error message is changed to stack_is_empty() isn't found from stack_new() isn't found. We can confirm that libstack.so is linked correctly by this change. NOTE: We doesn't get the error on Cygwin. Implement stack_is_empty() We test a result of stack_is_empty() in our test program: test/test-stack.c: ... cut_assert(stack_is_empty(stack)); ... That means that stack_is_empty() should return true. So stack_is_empty() implementation in src/stack.c should return true. src/stack.c: ... #define TRUE 1 #define FALSE 0 ... int stack_is_empty (Stack *stack) { return TRUE; } The following is the whole of src/stack.c. src/stack.c: #include <stdlib.h> #include "stack.h" #define TRUE 1 #define FALSE 0 Stack * stack_new (void) { return NULL; } int stack_is_empty (Stack *stack) { return TRUE; } Our test should pass because the stack_is_empty() implementation always returns true. [stack]% test/run-test.sh . Finished in 0.000028 seconds 1 test(s), 1 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed Great! This is the first success!!! Displayed a "." means that a test is passed. The current number of tests is just one. So one "." means all tests are passed. The above result may be displayed in green. This means that we may go to the next step because our all tests are passed. We confirmed that test is worked. We will complete stack implementation with writing tests. Implement push We will implement push. We only accept integer for values in stack in this implementation. Test for push A stack should have 1 item and not be empty after we push a value. The following is a test for this. test/test-stack.c: ... void test_push (void); ... void test_push (void) { Stack *stack; stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } We will get an error that says stack_get_size() isn't undefined if we run test. [stack]% test/run-test.sh cutter: symbol lookup error: ./test/.libs/test_stack.so: undefined symbol: stack_get_size We will implement push to pass this test. NOTE: We doesn't get the error on Cygwin. Implement cut_stack_push() We will implement stack_get_size() and stack_push() to be able to run test even if tests aren't passed. First, we add declarations to src/stack.h. src/stack.h: ... int stack_get_size (Stack *stack); void stack_push (Stack *stack, int value); ... And we add definitions to src/stack.c. src/stack.c: ... int stack_get_size (Stack *stack) { return 0; } void stack_push (Stack *stack, int value) { } The reason why stack_get_size() returns 0 is the first stack_get_size() call is expected to return 0 like the following. test/test-stack.c: ... stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); ... We run test because push is implemented. [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:23: test_push() Finished in 0.000113 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed "F" means that a test is Failed. The result may be showed in red. It indicates that it's dangerous to go to next stage because all of the current tests aren't passed. In other words, we should improve push implementation to pass the current tests before we implement pop. The message form cutter command shows that the test is failed because return value of stack_get_size(stack) is 0 not 1 in test_push() function at the 23th line in test/test-stack.c. The target line is the following. test/test-stack.c:23: cut_assert_equal_int(1, stack_get_size(stack)); It's failed because our stack_get_size() implementation always return 0. We should increment an internal counter after stack_push() is called. Free memory stack_new() always returns NULL for now. Stack needs to allocate memory to have an internal counter. Stack should free memory that is unused if stack allocate memory. For example, test_new_stack() should do like the following. void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); stack_free(stack); } But stack_free() will never be called if cut_assert() where it's the above of the stack_free() fails. Because cut_assert() returns the test function immediately if the expression (stack_is_empty(stack)) is false. (It will not cause big harm because most test programs are short-lived.) Cutter supports registering functions that are surely called before/after test. They are cut_setup() and cut_teardown(). They are called even if test is failed. We can use them for freeing memory allocated in test surely. To freeing allocated memory for test_new_stack() surely, we can use cut_setup() and cut_teardown() like the following. test/test-stack.c: ... static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } ... We can also modify test_push() to freeing allocated memory in tests by using static stack variable instead of local stack variable. test/test-stack.c: ... void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } ... Here is whole of the test/test-stack.c that uses cut_setup()/cut_teardown(). test/test-stack.c: #include <cutter.h> #include <stack.h> void test_new_stack (void); void test_push (void); static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } We can confirm that a result of test isn't changed after this change. [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:35: test_push() Finished in 0.000084 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed Implement stack_new() and stack_free() We will implement stack_new() that allocate memory and stack_free() that free allocated memory. First, we will declares stack_free() in src/stack.h. src/stack.h: ... void stack_free (Stack *stack); ... Next, we will define Stack type in src/stack.c. Stack type has a field that hold stack size. src/stack.c: ... struct _Stack { int size; }; ... stack_new() allocates memory for Stack and stack_free() frees memory allocated by stack_new(). src/stack.c: ... Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; return stack; } void stack_free (Stack *stack) { free(stack); } ... We can confirm that test works same as before the changes. [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:35: test_push() Finished in 0.000113 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed Really implement stack_push() We will really implement stack_push() and stack_get_size() to pass our tests because a stack can have a stack size. src/stack.c: ... int stack_get_size (Stack *stack) { return stack->size; } void stack_push (Stack *stack, int value) { stack->size++; } Stack increments it's size each push and returns the size. A test for stack_get_size() that is failed until now will be passed. [stack]% test/run-test.sh .F 1) Failure: test_push expected: <!stack_is_empty(stack)> is not FALSE/NULL test/test-stack.c:36: test_push() Finished in 0.000113 seconds 2 test(s), 3 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed The test for stack_get_size() is passed as our expectation but there is still a failure. It's a test for stack_is_empty() in test/test-stack.c at the 36th line. test/test-stack.c:36: cut_assert(!stack_is_empty(stack)); A stack should not be empty after push. Really implement stack_is_empty() A stack should be empty only when a stack size is 0. So stack_is_empty() is changed to the following. src/stack.c: ... int stack_is_empty (Stack *stack) { return stack->size == 0; } ... We can run test again and confirm that all of tests are passed. % test/run-test.sh .. Finished in 0.000036 seconds 2 test(s), 4 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed A test for push is passed and the rest of tests are kept to pass. A result message is back to green because all of tests are passed. We can feel safe to go to the next stage; We will implement pop. Implement pop We will implement pop that retrieve a value that is inserted by push. Test for pop Pop returns a value that is inserted by the last push. Pop reduces stack size and finally a stack is empty. The following test represents expected push/pop behavior. test/test-stack.c: ... void test_pop (void); ... void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } We can run test. [stack]% test/run-test.sh ..cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_pop There is an error that reports stack_pop() isn't defined. We can confirm that existed two tests are passed because there are two "." before the error message. NOTE: We doesn't get the error on Cygwin. Implement stack_pop() First, we declare stack_pop() in src/stack.h. src/stack.h: ... int stack_pop (Stack *stack); ... Next, we define stack_pop() in src/stack.c. src/stack.c: ... int stack_pop (Stack *stack) { return 30; } stack_pop() always returns 30 because the first stack_pop() call is required to return 30: test/test-stack.c:50: cut_assert_equal_int(30, stack_pop(stack)); We can confirm that test can be run and a test for pop doesn't report any error. [stack]% test/run-test.sh ..F 1) Failure: test_pop <2 == stack_get_size(stack)> expected: <2> but was: <3> test/test-stack.c:51: test_pop() Finished in 0.000307 seconds 3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 66.6667% passed A test for pop is run but failed because the current stack_pop() implementation doesn't change stack size. The failure is occurred in test/test-stack.c at the 50th line and the reason is stack_get_size() in the target line returns 3 not expected 2. test/test-stack.c:51: cut_assert_equal_int(2, stack_get_size(stack)); Allocate memory for data We can confirm that the test can be run. We will implement stack_pop() to pass the test. A stack needs to save pushed data to retrieve by pop. A stack needs to have a new field to hold pushed data and stack_push()/stack_pop() allocates/frees memory for pushed data dynamically. First, we will add a new field in Stack. stack_new() initializes the field and stack_free() frees the field. src/stack.c: ... struct _Stack { int size; int *data; }; Stack * stack_new (void) { ... stack->data = NULL; ... } void stack_free (Stack *stack) { free(stack->data); free(stack); } ... At this point, we don't change any process that effects external program. So we can confirm that the test should be failed the same as before. [stack]% test/run-test.sh ..F 1) Failure: test_pop <2 == stack_get_size(stack)> expected: <2> but was: <3> test/test-stack.c:51: test_pop() Finished in 0.000097 seconds 3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 66.6667% passed Really implement stack_pop() We added a new field to hold pushed data. stack_push()/stack_pop() can allocate needed memory to the field and save data. src/stack.c: ... void stack_push (Stack *stack, int value) { int *new_data; stack->size++; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (!new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return; } stack->data = new_data; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; int *new_data; stack->size--; value = stack->data[stack->size]; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return value; } stack->data = new_data; return value; } We can confirm that the test for pop is passed. [stack]% test/run-test.sh ... Finished in 0.000076 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed Eliminate duplications stack_push() and stack_pop() implementations has duplications that are dynamic memory allocation process and error handling process when memory allocation is failed. It's generally not good that duplications exist because they may increase maintenance cost and so on. In this section, we will eliminate duplications without changing existing semantics. We can confirm that existing semantics aren't changed by running our tests. Eliminate a duplication in memory allocation process First, we will eliminate a duplication in memory allocation process like the following: src/stack.c: new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); We will extract the above part as stack_realloc(). src/stack.c: ... static int * stack_realloc (Stack *stack) { return realloc(stack->data, sizeof(*stack->data) * stack->size); } void stack_push (Stack *stack, int value) { ... new_data = stack_realloc(stack); ... } int stack_pop (Stack *stack) { ... new_data = stack_realloc(stack); ... } We can confirm that existing semantics aren't changed by running tests. [stack]% test/run-test.sh ... Finished in 0.000078 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed We can go to the next because the result is green. Eliminate a duplication in error handling process Next, we will eliminate a duplication in error handling process for memory allocation failure. The current implementation is the following: src/stack.c: ... void stack_push (Stack *stack, int value) { ... new_data = stack_realloc(stack); if (!new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return; } ... } int stack_pop (Stack *stack) { ... new_data = stack_realloc(stack); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return value; } ... } We will move the above error handling process to stack_realloc() and stack_realloc() returns whether memory allocation is succeeded or failed instead of allocated memory. src/stack.c: ... static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } We should confirm that the changes doesn't change existing semantics. [stack]% test/run-test.sh ... Finished in 0.000076 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed w We confirmed that we can improve our program by eliminating duplications in our program without changing existing semantics. Conclusion This documentation shows how to setup a build environment system with GNU build system, write tests with Cutter and improve a program that has tests by using a small stack implementation. Merit GNU build system provides us portability. Cutter provides us a method to write tests easily. Existing testing frameworks for C require to use macros to define a test or to register tests explicitly. We need to write many other things except writing tests. Cutter resolves this problem. Cutter doesn't require to use original macros to define a test. We can write a test as just a normal function. We can also write no test registration code. We only used cut_assert() and cut_assert_equal_int() but Cutter provides many assertions to verify actual value is expected value like cut_assert_equal_string(). We will be able to write tests simply by them because we doesn't need to write our assertions for primitive types. Cutter doesn't show needless information in test result message but show useful information as much as possible. It supports that we can find useful information easily and fix problems easily and rapidly. Cutter also tries to show backtraces on segmentation fault that is often caused for a program written by C for providing many information to fix problems. It's very helpful for maintenance that improving internal structure of a program without changing existing semantics. We can easily confirm that existing semantics isn't changed with automated tests. Automated tests also helps us when a new feature is developed. We can confirm that existing semantics isn't broken by codes for a new feature. Automated tests are useful for maintenance, developing new features and keeping high-quality. Stack test The following tests are the final version. test/test-stack.c #include <cutter.h> #include <stack.h> void test_new_stack (void); void test_push (void); void test_pop (void); static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } Stack implementation The following codes are the final version. This stack implementation has some issues that error notification, performance tunings and so on because it's straightforward. But the implementation has basic features that is shown by test. src/stack.c: #include <stdlib.h> #include "stack.h" #define TRUE 1 #define FALSE 0 struct _Stack { int size; int *data; }; Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; stack->data = NULL; return stack; } void stack_free (Stack *stack) { free(stack->data); free(stack); } int stack_is_empty (Stack *stack) { return stack->size == 0; } int stack_get_size (Stack *stack) { return stack->size; } static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } Support no Cutter installed environment In this tutorial, test/test-stack.c build is failed on no Cutter installed environment. That is make fails. If you are a developer, you must run test. So this behavior is reasonable. But it's better that this stack library can be built without Cutter for users that just want to use this stack implementation as a library. They will use a released library that is tested by developers. The following is a way to support no Cutter installed environment. First, we change AC_CHECK_CUTTER call in configure.ac to work autogen.sh (to be exact, aclocal) without cutter.m4. (If autogen.sh is ran only by developers, this change isn't needed. In the case, aclocal fails because AC_CHECK_CUTTER isn't defined.) configure.ac: ... m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) ... We use ac_cv_use_cutter as a variable name because AC_CHECK_CUTTER uses the same variable name. The variable becomes "no" if configure can't detect Cutter. On no cutter.m4 environment (no Cutter environment when autogen.sh is ran), we always can't detect Cutter. Next, we define a condition that can be used in Makefile.am after AC_CHECK_CUTTER. The condition shows whether we detect Cutter or not. configure.ac: ... m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) ... Last, we build test/test-stack.c and run test/run-test.sh only if WITH_CUTTER is true: test/Makefile.am: if WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif ... The followings are the whole of configure.ac and test/Makefile.am: configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE]) AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) AC_OUTPUT test/Makefile.am: if WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif INCLUDES = -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la AM_CFLAGS = $(CUTTER_CFLAGS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) See also xUnit: It's a library that supports a test style that uses assertXXX for verifying an actual value is an expected value. It also called testing framework. Cutter is one of xUnit testing framework. xUnit is implemented in many language: SUnit (Smalltalk) JUnit (Java) Test::Unit (Ruby) PyUnit (Pytnon) ... Extreme Programming (XP): It's a programming methodology to develop high-quality software. It's heavy on testing. cutter-testing-framework-1.1.7/doc/reference/cutter-sections.txt0000644000175000017500000004305011525654721023263 0ustar koukou
cut-console-diff-writer CutConsoleDiffWriter CutConsoleDiffWriter CutConsoleDiffWriterClass cut_console_diff_writer_new cut_console_diff_writer_set_deleted_mark_color cut_console_diff_writer_get_deleted_mark_color cut_console_diff_writer_set_inserted_mark_color cut_console_diff_writer_get_inserted_mark_color cut_console_diff_writer_set_deleted_line_color cut_console_diff_writer_get_deleted_line_color cut_console_diff_writer_set_inserted_line_color cut_console_diff_writer_get_inserted_line_color cut_console_diff_writer_set_deleted_segment_color cut_console_diff_writer_get_deleted_segment_color cut_console_diff_writer_set_inserted_segment_color cut_console_diff_writer_get_inserted_segment_color CUT_CONSOLE_DIFF_WRITER CUT_IS_CONSOLE_DIFF_WRITER CUT_TYPE_CONSOLE_DIFF_WRITER cut_console_diff_writer_get_type CUT_CONSOLE_DIFF_WRITER_CLASS CUT_IS_CONSOLE_DIFF_WRITER_CLASS CUT_CONSOLE_DIFF_WRITER_GET_CLASS
cut-string-diff-writer CutStringDiffWriter CutStringDiffWriter CutStringDiffWriterClass cut_string_diff_writer_new cut_string_diff_writer_get_result CUT_STRING_DIFF_WRITER CUT_IS_STRING_DIFF_WRITER CUT_TYPE_STRING_DIFF_WRITER cut_string_diff_writer_get_type CUT_STRING_DIFF_WRITER_CLASS CUT_IS_STRING_DIFF_WRITER_CLASS CUT_STRING_DIFF_WRITER_GET_CLASS
gcut-event-loop GCutEventLoop GCUT_EVENT_LOOP_ERROR GCutEventLoop GCutEventLoopClass gcut_event_loop_error_quark gcut_event_loop_run gcut_event_loop_iterate gcut_event_loop_quit gcut_event_loop_watch_io gcut_event_loop_watch_child gcut_event_loop_watch_child_full gcut_event_loop_add_timeout gcut_event_loop_add_timeout_full gcut_event_loop_add_idle gcut_event_loop_add_idle_full gcut_event_loop_remove GCUT_EVENT_LOOP GCUT_IS_EVENT_LOOP GCUT_TYPE_EVENT_LOOP gcut_event_loop_get_type GCUT_EVENT_LOOP_CLASS GCUT_IS_EVENT_LOOP_CLASS GCUT_EVENT_LOOP_GET_CLASS
gcut-egg GCutEgg GCUT_EGG_ERROR GCutEgg GCutEggClass GCutEggError gcut_egg_error_quark gcut_egg_new gcut_egg_new_va_list gcut_egg_new_argv gcut_egg_new_strings gcut_egg_new_array gcut_egg_set_flags gcut_egg_get_flags gcut_egg_set_env gcut_egg_get_env gcut_egg_hatch gcut_egg_close gcut_egg_write gcut_egg_get_pid gcut_egg_wait gcut_egg_kill gcut_egg_get_input gcut_egg_get_output gcut_egg_get_error gcut_egg_get_forced_termination_wait_time gcut_egg_set_forced_termination_wait_time GCUT_EGG GCUT_IS_EGG GCUT_TYPE_EGG gcut_egg_get_type GCUT_EGG_CLASS GCUT_IS_EGG_CLASS GCUT_EGG_GET_CLASS
gcut-process GCutProcess GCUT_PROCESS_ERROR GCutProcess GCutProcessClass GCutProcessError gcut_process_error_quark gcut_process_new gcut_process_new_command_line gcut_process_new_va_list gcut_process_new_argv gcut_process_new_strings gcut_process_new_array gcut_process_set_flags gcut_process_get_flags gcut_process_set_env gcut_process_get_env gcut_process_run gcut_process_get_pid gcut_process_wait gcut_process_kill gcut_process_write gcut_process_flush gcut_process_get_output_string gcut_process_get_error_string gcut_process_get_input_channel gcut_process_get_output_channel gcut_process_get_error_channel gcut_process_get_output_stream gcut_process_get_error_stream gcut_process_get_forced_termination_wait_time gcut_process_set_forced_termination_wait_time gcut_process_get_event_loop gcut_process_set_event_loop GCUT_PROCESS GCUT_IS_PROCESS GCUT_TYPE_PROCESS gcut_process_get_type GCUT_PROCESS_CLASS GCUT_IS_PROCESS_CLASS GCUT_PROCESS_GET_CLASS
gcut-glib-event-loop GCutGLibEventLoop GCutGLibEventLoop GCutGLibEventLoopClass gcut_glib_event_loop_new GCUT_GLIB_EVENT_LOOP GCUT_IS_GLIB_EVENT_LOOP GCUT_TYPE_GLIB_EVENT_LOOP gcut_glib_event_loop_get_type GCUT_GLIB_EVENT_LOOP_CLASS GCUT_IS_GLIB_EVENT_LOOP_CLASS GCUT_GLIB_EVENT_LOOP_GET_CLASS
soupcut-client SoupCutClient SoupCutClient SoupCutClientClass soupcut_client_new soupcut_client_set_base soupcut_client_send_message soupcut_client_get soupcut_client_get_n_messages soupcut_client_get_latest_message soupcut_client_get_async_context SOUPCUT_CLIENT SOUPCUT_IS_CLIENT SOUPCUT_TYPE_CLIENT soupcut_client_get_type SOUPCUT_CLIENT_CLASS SOUPCUT_IS_CLIENT_CLASS SOUPCUT_CLIENT_GET_CLASS
cut-types CutDestroyFunction CutCallbackFunction cut_boolean CUT_TRUE CUT_FALSE
cut-features CUT_SUPPORT_GLIB CUT_SUPPORT_GDK_PIXBUF CUT_SUPPORT_GIO CUT_SUPPORT_LIBSOUP CUT_SUPPORT_C99_STDINT_TYPES
cut-console CUT_CONSOLE_COLOR_RED CUT_CONSOLE_COLOR_RED_BACK CUT_CONSOLE_COLOR_GREEN CUT_CONSOLE_COLOR_GREEN_BACK CUT_CONSOLE_COLOR_YELLOW CUT_CONSOLE_COLOR_BLUE CUT_CONSOLE_COLOR_BLUE_BACK CUT_CONSOLE_COLOR_MAGENTA CUT_CONSOLE_COLOR_CYAN CUT_CONSOLE_COLOR_CYAN_BACK CUT_CONSOLE_COLOR_WHITE CUT_CONSOLE_COLOR_WHITE_BACK CUT_CONSOLE_COLOR_BLACK_BACK CUT_CONSOLE_COLOR_NORMAL cut_console_guess_color_usability cut_console_parse_color_arg
cut-assertions cut_assert cut_assert_true cut_assert_false cut_assert_equal_boolean cut_assert_not_equal_boolean cut_assert_null cut_assert_null_string cut_assert_not_null cut_assert_equal_int cut_assert_not_equal_int cut_assert_equal_int_least8 cut_assert_not_equal_int_least8 cut_assert_equal_int_least16 cut_assert_not_equal_int_least16 cut_assert_equal_int_least32 cut_assert_not_equal_int_least32 cut_assert_equal_int_least64 cut_assert_not_equal_int_least64 cut_assert_equal_int_fast8 cut_assert_not_equal_int_fast8 cut_assert_equal_int_fast16 cut_assert_not_equal_int_fast16 cut_assert_equal_int_fast32 cut_assert_not_equal_int_fast32 cut_assert_equal_int_fast64 cut_assert_not_equal_int_fast64 cut_assert_equal_intptr cut_assert_not_equal_intptr cut_assert_equal_intmax cut_assert_not_equal_intmax cut_assert_equal_uint cut_assert_not_equal_uint cut_assert_equal_uint_least8 cut_assert_not_equal_uint_least8 cut_assert_equal_uint_least16 cut_assert_not_equal_uint_least16 cut_assert_equal_uint_least32 cut_assert_not_equal_uint_least32 cut_assert_equal_uint_least64 cut_assert_not_equal_uint_least64 cut_assert_equal_uint_fast8 cut_assert_not_equal_uint_fast8 cut_assert_equal_uint_fast16 cut_assert_not_equal_uint_fast16 cut_assert_equal_uint_fast32 cut_assert_not_equal_uint_fast32 cut_assert_equal_uint_fast64 cut_assert_not_equal_uint_fast64 cut_assert_equal_uintptr cut_assert_not_equal_uintptr cut_assert_equal_uintmax cut_assert_not_equal_uintmax cut_assert_equal_size cut_assert_not_equal_size cut_assert_equal_double cut_assert_not_equal_double cut_assert_equal_char cut_assert_not_equal_char cut_assert_equal_string cut_assert_not_equal_string cut_assert_equal_string_with_free cut_assert_equal_string_or_null cut_assert_equal_substring cut_assert_not_equal_substring cut_assert_equal_memory cut_assert_not_equal_memory cut_assert_equal_string_array cut_assert_equal_string_array_with_free cut_assert_operator cut_assert_operator_int cut_assert_operator_uint cut_assert_operator_size cut_assert_operator_double cut_assert_equal cut_assert_errno cut_assert_file_exist cut_assert_path_exist cut_assert_exist_path cut_assert_path_not_exist cut_assert_not_exist_path cut_assert_match cut_assert_match_with_free cut_assert_equal_pointer cut_assert_equal_fixture_data_string cut_assert_equal_sockaddr cut_assert_equal_file_raw cut_assert_not_equal_file_raw cut_error cut_error_errno cut_fail cut_pend cut_pending cut_notify cut_omit cut_return
cut-test-utils cut_take cut_take_memory cut_take_string cut_take_strdup cut_take_strndup cut_take_memdup cut_take_printf cut_take_string_array cut_take_diff cut_take_replace cut_take_convert cut_take_inspect_string cut_set_fixture_data_dir cut_build_fixture_data_path cut_build_fixture_path cut_get_fixture_data_string cut_get_fixture_data cut_remove_path cut_build_path cut_build_path_array cut_make_directory
cut-multi-process CutSubProcess CutSubProcessGroup cut_take_new_sub_process cut_sub_process_run cut_sub_process_run_async cut_sub_process_wait cut_sub_process_is_success cut_sub_process_is_running cut_sub_process_get_test_directory cut_sub_process_set_test_directory cut_sub_process_get_source_directory cut_sub_process_set_source_directory cut_sub_process_get_multi_thread cut_sub_process_set_multi_thread cut_sub_process_get_max_threads cut_sub_process_set_max_threads cut_sub_process_get_exclude_files cut_sub_process_set_exclude_files cut_sub_process_get_exclude_directories cut_sub_process_set_exclude_directories cut_sub_process_get_target_test_case_names cut_sub_process_set_target_test_case_names cut_sub_process_get_target_test_names cut_sub_process_set_target_test_names cut_sub_process_get_elapsed cut_sub_process_get_total_elapsed cut_sub_process_is_crashed cut_sub_process_get_fatal_failures cut_sub_process_set_fatal_failures cut_take_new_sub_process_group cut_sub_process_group_add cut_sub_process_group_run cut_sub_process_group_run_async cut_sub_process_group_wait
cut-version CUTTER_VERSION_MAJOR CUTTER_VERSION_MINOR CUTTER_VERSION_MICRO CUTTER_VERSION_STRING CUTTER_CHECK_VERSION
cut-config CUT_HAVE_STDINT_H CUT_HAVE_INTTYPES_H CUT_HAVE_SYS_SOCKET_H CUT_HAVE_SYS_UN_H
cut-experimental cut_fork cut_wait_process cut_fork_get_stdout_message cut_fork_get_stderr_message
cut-helper cut_test_pass cut_test_fail cut_test_fail_va_list CUT_RELATIVE_PATH cut_push_backtrace cut_pop_backtrace cut_trace cut_trace_with_info_expression cut_append_diff cut_set_expected cut_set_actual cut_inspect_string_array cut_equal_string cut_equal_double cut_equal_sockaddr cut_inspect_sockaddr cut_get_test_directory cut_get_source_directory
cutter setup cut_setup teardown cut_teardown cut_startup cut_shutdown cut_add_data cut_add_data_backward_compatibility cut_set_attributes cut_get_current_test_context cut_set_current_test_context cut_set_message cut_set_message_va_list cut_keep_message cut_message CUT_EXPORT
gcut-types GCutInspectFunction GCUT_TYPE_ERROR GCUT_TYPE_SIZE gcut_error_get_type gcut_size_get_type
gcut-io gcut_io_inspect_condition
gcut-list gcut_list_equal gcut_list_inspect gcut_list_equal_int gcut_list_inspect_int gcut_list_equal_uint gcut_list_inspect_uint gcut_list_equal_string gcut_list_inspect_string gcut_list_inspect_object gcut_list_inspect_enum gcut_list_inspect_flags gcut_list_int_equal gcut_list_int_inspect gcut_list_uint_equal gcut_list_uint_inspect gcut_list_string_equal gcut_list_string_inspect gcut_list_object_inspect gcut_list_enum_inspect gcut_list_flags_inspect
gcut-key-file gcut_key_file_get_enum gcut_key_file_get_flags
gcut-enum GCUT_ENUM_ERROR gcut_enum_error_quark GCutEnumError gcut_enum_inspect gcut_enum_parse gcut_flags_inspect gcut_flags_parse gcut_flags_get_all
gcut-string-io-channel gcut_string_io_channel_new gcut_string_io_channel_get_string gcut_string_io_channel_clear gcut_string_io_channel_get_buffer_limit gcut_string_io_channel_set_buffer_limit gcut_string_io_channel_get_limit gcut_string_io_channel_set_limit gcut_string_io_channel_get_read_fail gcut_string_io_channel_set_read_fail gcut_string_io_channel_get_pipe_mode gcut_string_io_channel_set_pipe_mode gcut_string_io_channel_get_main_context gcut_string_io_channel_set_main_context
gcut-main gcut_init gcut_value_equal_init gcut_quit gcut_value_equal_quit
gcut-data-helper gcut_data_get_char_helper gcut_data_get_string_helper gcut_data_get_int_helper gcut_data_get_uint_helper gcut_data_get_int64_helper gcut_data_get_uint64_helper gcut_data_get_size_helper gcut_data_get_type_helper gcut_data_get_flags_helper gcut_data_get_enum_helper gcut_data_get_pointer_helper gcut_data_get_boxed_helper gcut_data_get_object_helper gcut_data_get_boolean_helper gcut_data_get_double_helper
gcut-inspect gcut_inspect_direct gcut_inspect_int gcut_inspect_uint gcut_inspect_int64 gcut_inspect_uint64 gcut_inspect_size gcut_inspect_char gcut_inspect_string gcut_inspect_type gcut_inspect_flags gcut_inspect_enum gcut_inspect_pointer gcut_inspect_boolean gcut_inspect_double
gcut-error gcut_error_equal gcut_error_inspect
gcut-value-equal gcut_value_equal gcut_value_register_equal_func
gcut-public cut_test_context_take_g_object cut_test_context_take_g_error cut_test_context_take_g_list cut_test_context_take_g_hash_table cut_test_context_take_g_string gcut_utils_get_fixture_data gcut_utils_get_fixture_data_va_list
gcut-hash-table gcut_hash_table_equal gcut_hash_table_inspect gcut_hash_table_inspect_sorted gcut_hash_table_string_equal gcut_hash_table_string_string_inspect gcut_hash_table_string_string_copy
gcutter GCUTTER_ENABLED
gcut-test-utils gcut_take_object gcut_take_error gcut_take_list gcut_take_hash_table gcut_take_string gcut_take_new_string gcut_list_new gcut_list_int_new gcut_list_uint_new gcut_list_string_new gcut_list_string_new_array gcut_take_new_list_int gcut_take_new_list_uint gcut_take_new_list_string gcut_take_new_list_string_backward_compatibility gcut_take_new_list_string_array gcut_take_new_list_object gcut_list_string_free gcut_list_object_free gcut_hash_table_string_string_new gcut_hash_table_string_string_new_va_list gcut_take_new_hash_table_string_string gcut_get_fixture_data
gcut-data gcut_add_datum gcut_data_has_field gcut_data_get_char gcut_data_get_string gcut_data_get_int gcut_data_get_uint gcut_data_get_int64 gcut_data_get_uint64 gcut_data_get_size gcut_data_get_type gcut_data_get_flags gcut_data_get_enum gcut_data_get_pointer gcut_data_get_boxed gcut_data_get_object gcut_data_get_boolean gcut_data_get_double
gcut-assertions gcut_assert_equal_type cut_assert_equal_g_type gcut_assert_equal_value cut_assert_equal_g_value gcut_assert_equal_list gcut_assert_equal_list_int cut_assert_equal_g_list_int gcut_assert_equal_list_uint gcut_assert_equal_list_string cut_assert_equal_g_list_string gcut_assert_equal_list_object gcut_assert_equal_list_object_custom gcut_assert_equal_list_enum gcut_assert_equal_list_flags gcut_assert_equal_hash_table gcut_assert_equal_hash_table_string_string gcut_assert_error cut_assert_g_error gcut_assert_equal_error gcut_assert_remove_path cut_assert_remove_path gcut_assert_equal_time_val gcut_assert_equal_enum gcut_assert_equal_flags gcut_assert_equal_object gcut_assert_equal_object_custom gcut_assert_equal_int64 gcut_assert_not_equal_int64 gcut_assert_equal_uint64 gcut_assert_not_equal_uint64 gcut_assert_equal_pid gcut_assert_not_equal_pid gcut_assert_equal_string
gcut-assertions-helper gcut_assert_equal_type_helper gcut_assert_equal_value_helper gcut_assert_equal_list_helper gcut_assert_equal_list_int_helper gcut_assert_equal_list_uint_helper gcut_assert_equal_list_string_helper gcut_assert_equal_list_enum_helper gcut_assert_equal_list_flags_helper gcut_assert_equal_list_object_helper gcut_assert_equal_hash_table_helper gcut_assert_equal_hash_table_string_string_helper gcut_assert_error_helper gcut_assert_equal_error_helper gcut_assert_remove_path_helper gcut_assert_equal_time_val_helper gcut_assert_equal_enum_helper gcut_assert_equal_flags_helper gcut_assert_equal_object_helper gcut_assert_equal_int64_helper gcut_assert_not_equal_int64_helper gcut_assert_equal_uint64_helper gcut_assert_not_equal_uint64_helper gcut_assert_equal_pid_helper gcut_assert_not_equal_pid_helper gcut_assert_equal_string_helper
gcut-string gcut_string_equal gcut_string_inspect
gcut-object gcut_object_equal gcut_object_inspect gcut_object_inspect_custom
cppcut-assertions cppcut_assert_equal
cppcut-macros CPPCUT_DECL
cppcutter CPPCUTTER_ENABLED CPPCUT_BEGIN_TEST_DECLS CPPCUT_END_TEST_DECLS cppcut_message
gdkcut-pixbuf-assertions-helper gdkcut_pixbuf_assert_equal_helper
gdkcutter-pixbuf GDKCUTTER_PIXBUF_ENABLED
gdkcut-pixbuf gdkcut_pixbuf_equal_property gdkcut_pixbuf_equal_content gdkcut_pixbuf_diff gdkcut_pixbuf_save_diff
gdkcut-pixbuf-assertions gdkcut_pixbuf_assert_equal
soupcut-assertions soupcut_message_assert_equal_content_type soupcut_client_assert_equal_content_type soupcut_client_assert_response soupcut_client_assert_equal_body soupcut_client_assert_match_body
soupcut-server soupcut_server_take soupcut_server_take_new soupcut_server_build_uri
soupcutter SOUPCUTTER_ENABLED
soupcut-assertions-helper soupcut_message_assert_equal_content_type_helper soupcut_client_assert_equal_content_type_helper soupcut_client_assert_response_helper soupcut_client_assert_equal_body_helper soupcut_client_assert_match_body_helper
cutter-testing-framework-1.1.7/doc/reference/nested-circle.png0000644000175000017500000000414111205747025022607 0ustar koukouPNG  IHDRddpTsRGBbKGD pHYs  tIME  E\tEXtCommentCreated with GIMPWIDATx{LSW }TByhiFXIy5 d&j_{h2eh( \$\`"RZTK>pHuޖ9OwL{-`1Gӱ`a Jf 6<&[qy\{83}l +p8&$<. }.qx2iaSI!g +-y#reg@n}"}j=uWn1~CaaVfvEoeC<|֫Ai엿Nh M<yzSXK^@ŀ l63,hUA8-&3zXbpCH?W`3C pN{G1XU GnFcCVH϶KUp8b`씔xe]:PzG-D d (-Sq7F$#E=fP2Rj w}•ME;fS揽@wD,>* wH"Tq* d#f#Yn_zGCIhN!QG;Fm4e ]e@a$/#{~xn 0 v8zGS$(#! Bσ 'zG볣0hX=zG) o$wD.MB E}d#8/0h'nDP]dgQm*Hzdgo GrF@:t |3@]s`Jg Ɣ"Ev!=u H0RZ_F`$nOm@/22B-e-Ŕ"cZd"PGj78rZ:Q)phE%ғzE:ç_}&g⇦8(s8|H%X;F$Ӡ_g{kGϒ2zXj'\t WHG*IZ}_m{6 I7q6լW-OE5Np#ޓeS=9;-3Mhˉj`ηXޙ*V0v*ʊ 5=dM˔KܼꜾ\gcS-s~SY&e4 &$s8j*˥ Ȯ +}[.w8a]JcV:\S%D2H88n*RO'gD%g[{=ѳ!iFI a@&/c k_,8 ^eɭ_N`뻱b*@0, @0, @>ήZIENDB`cutter-testing-framework-1.1.7/doc/reference/main.sgml0000644000175000017500000001626511525654007021204 0ustar koukou ]> Cutter Reference Manual for Cutter &version; Introduction Overview of Cutter Install Cutter to your platform Getting start Reference Command Writing test Writing assertion Index of all symbols Index of deprecated symbols Index of new symbols in 1.1.7 Index of new symbols in 1.1.6 Index of new symbols in 1.1.5 Index of new symbols in 1.1.4 Index of new symbols in 1.1.3 Index of new symbols in 1.1.2 Index of new symbols in 1.1.1 Index of new symbols in 1.1.0 Index of new symbols in 1.0.9 Index of new symbols in 1.0.8 Index of new symbols in 1.0.7 Index of new symbols in 1.0.6 Index of new symbols in 1.0.5 Index of new symbols in 1.0.4 Index of new symbols in 1.0.3 Index of new symbols in 1.0.2 Index of new symbols in 1.0.1 Index of new symbols in 1.0 Index of new symbols in 0.9 Index of new symbols in 0.8 Index of new symbols in 0.7 Index of new symbols in 0.6 Index of new symbols in 0.5 Index of new symbols in 0.4 Index of new symbols in 0.3 cutter-testing-framework-1.1.7/doc/reference/install-to-centos.xml.ja0000644000175000017500000000274011525655563024067 0ustar koukou CentOSへインストール Cutterライブラリ CentOSへインストール CentOSへのCutterのインストール方法 はじめに CentOSへのCutterのインストール方法を説明します。 インストール CutterのYumリポジトリが提供されているので、yumでインストールできます。 まず、Yumリポジトリを登録します。 % sudo rpm -Uvh http://cutter.sourceforge.net/centos/cutter-repository-1.0.0-1.noarch.rpm Yumリポジトリを登録したらyumでインストールできます。 % sudo yum install -y cutter 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/install-to-ubuntu.xml.ja0000644000175000017500000000510711525655562024115 0ustar koukou Ubuntuへインストール Cutterライブラリ Ubuntuへインストール UbuntuへのCutterのインストール方法 はじめに UbuntuへのCutterのインストール方法を説明します。 インストール CutterのDebianパッケージが提供されているので、aptitudeでインストールできます。 現在は、Ubuntu Lucid Lynx/Maverick Meerkat i386/amd64用のパッケージのみ提供しています。他のバージョンが必要な場合は メーリングリスト でリクエストしてください。 Lucidの場合は以下のapt lineを書いた/etc/apt/sources.list.d/cutter.listを作成してください。 /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/ubuntu/ lucid main deb-src http://cutter.sourceforge.net/ubuntu/ lucid main Maverickの場合は以下のapt lineを書いた/etc/apt/sources.list.d/cutter.listを作成してください。 /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/ubuntu/ maverick main deb-src http://cutter.sourceforge.net/ubuntu/ maverick main パッケージはkou@cozmixng.org/kou@clear-code.comの鍵でサインしています。信用する場合は鍵を登録します。 % gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31 % gpg --export 1C837F31 | sudo apt-key add - 鍵を登録したらaptitudeでインストールできます。 % sudo aptitude update % sudo aptitude -V -D install cutter-testing-framework 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/install-to-mac-os-x.xml.ja0000644000175000017500000000323511525655563024220 0ustar koukou Mac OS Xへインストール Cutterライブラリ Mac OS Xへインストール Mac OS XへのCutterのインストール方法 はじめに Mac OS XへのCutterのインストール方法を説明します。 インストール CutterのMacPortsが提供されているので、portでインストールできます。 まず、Cutter用のMacPortsを取得します。 % cd ~ % svn co https://cutter.svn.sourceforge.net/svnroot/cutter/macports/ cutter-macports 次に、取得したディレクトリを登録します。 % echo file://$HOME/cutter-macports | sudo sh -c "cat >> /opt/local/etc/macports/sources.conf" portでインストールします。 % sudo port install cutter 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/install-to-cygwin.xml0000644000175000017500000000406111525655563023501 0ustar koukou Install to Cygwin CUTTER Library Install to Cygwin How to install Cutter to Cygwin Introduction This document explains how to install Cutter to Cygwin. We can install Cutter to Cygwin 1.7 (should be confirmed: but we need to apply a patch to GLib). Install Cygwin First, we download Cygwin 1.7 installer: <URL:http://cygwin.com/setup.exe> Next, we install the following packages with the downloaded installer: gcc4 gdb libglib2.0-devel gettext-devel intltool libiconv libtool make pkg-config wget We enter into Cygwin. We run Cygwin. Install Cutter We install Cutter. % cd % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % make % make install The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/cutter-docs.sgml0000644000175000017500000001626511525652100022504 0ustar koukou ]> Cutter Reference Manual for Cutter &version; Introduction Overview of Cutter Install Cutter to your platform Getting start Reference Command Writing test Writing assertion Index of all symbols Index of deprecated symbols Index of new symbols in 1.1.7 Index of new symbols in 1.1.6 Index of new symbols in 1.1.5 Index of new symbols in 1.1.4 Index of new symbols in 1.1.3 Index of new symbols in 1.1.2 Index of new symbols in 1.1.1 Index of new symbols in 1.1.0 Index of new symbols in 1.0.9 Index of new symbols in 1.0.8 Index of new symbols in 1.0.7 Index of new symbols in 1.0.6 Index of new symbols in 1.0.5 Index of new symbols in 1.0.4 Index of new symbols in 1.0.3 Index of new symbols in 1.0.2 Index of new symbols in 1.0.1 Index of new symbols in 1.0 Index of new symbols in 0.9 Index of new symbols in 0.8 Index of new symbols in 0.7 Index of new symbols in 0.6 Index of new symbols in 0.5 Index of new symbols in 0.4 Index of new symbols in 0.3 cutter-testing-framework-1.1.7/doc/reference/install-to-debian.xml.ja0000644000175000017500000000514711525702723024011 0ustar koukou Debian GNU/Linuxへインストール Cutterライブラリ Debian GNU/Linuxへインストール Debian GNU/LinuxへのCutterのインストール方法 はじめに Debian GNU/LinuxへのCutterのインストール方法を説明します。 インストール CutterのDebianパッケージが提供されているので、aptitudeでインストールできます。 現在は、Debian GNU/Linux squeeze/sid i386/amd64用のパッケージを提供しています。他のバージョンが必要な場合は メーリングリスト でリクエストしてください。 squeezeの場合は以下のapt lineを書いた/etc/apt/sources.list.d/cutter.listを作成してください。 /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/debian/ squeeze main deb-src http://cutter.sourceforge.net/debian/ squeeze main sidの場合は以下のapt lineを書いた/etc/apt/sources.list.d/cutter.listを作成してください。 /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/debian/ unstable main deb-src http://cutter.sourceforge.net/debian/ unstable main パッケージはkou@cozmixng.org/kou@clear-code.comの鍵でサインしています。信用する場合は鍵を登録します。 % gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31 % gpg --export 1C837F31 | sudo apt-key add - 鍵を登録したらaptitudeでインストールできます。 % sudo aptitude update % sudo aptitude -V -D install cutter-testing-framework 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/install-to-debian.xml0000644000175000017500000000440711525702723023416 0ustar koukou Install to Debian GNU/Linux CUTTER Library Install to Debian GNU/Linux How to install Cutter to Debian GNU/Linux Introduction This document explains how to install Cutter to Debian GNU/Linux. Install We can use aptitude because Cutter provides Debian packages. There are packages for Debian GNU/Linux squeeze/sid i386/amd64. If you need a package for another environment, you can request on mailing list . Here are apt lines for for squeeze. We put them into /etc/apt/sources.list.d/cutter.list. /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/debian/ squeeze main deb-src http://cutter.sourceforge.net/debian/ squeeze main Here are apt lines for for sid. We put them into /etc/apt/sources.list.d/cutter.list. /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/debian/ unstable main deb-src http://cutter.sourceforge.net/debian/ unstable main Cutter packages are signed by key of kou@cozmixng.org/kou@clear-code.com. If we trust the key, we can register the key: % gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31 % gpg --export 1C837F31 | sudo apt-key add - If we register the key, we can install Cutter by aptitude: % sudo aptitude update % sudo aptitude -V -D install cutter-testing-framework The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/install-to-others.xml.ja0000644000175000017500000000564011525655563024102 0ustar koukou その他のプラットフォームへインストール Cutterライブラリ その他のプラットフォームへインストール その他のプラットフォームへのCutterのインストール方法 はじめに Debian GNU/Linux 、 Ubuntu Linux 、 FreeBSD 、 Solaris 、 Cygwin 以外のプラットフォームへのインストール方法です。 GLibのインストール Cutterを動かすためにはGLib 2.16以降が必要です。もし、システムで提供されているGLibが古い場合(例えばCentOS)は別途GLibをインストールし、それを利用することができます。 ~/local/以下にGLibをインストールするとします。 % mkdir -p ~/src % cd ~/src % wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz % tar xvfz glib-2.22.4.tar.gz % cd glib-2.22.4 % ./configure --prefix=$HOME/local % make % make install Cutterのインストール CutterはGNUビルドツールを利用しているので、他のフリーソフトウェアと同じように以下でインストールできます。 % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % make % sudo make install もし、~/local/以下にGLibをインストールした場合は以下のようになります。この例ではCutterも~/local/以下にインストールしています。 % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig LD_LIBRARY_PATH=$HOME/local/lib --prefix=$HOME/local % make % make install 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/ja/0000755000175000017500000000000011525707421017753 5ustar koukoucutter-testing-framework-1.1.7/doc/reference/ja/html/0000755000175000017500000000000011525707421020717 5ustar koukoucutter-testing-framework-1.1.7/doc/reference/ja/html/writing-assertion.html0000644000175000017500000001041411525703037025274 0ustar koukou 検証作成

検証作成

検証作成の補助 — このセクションにあるシンボルは独自検証を作成することを補助します。
GEnumとGFlags用の検証ユーティリティGEnumまたはGFlagsに関する検証をもっと簡単に書くためのユーティリティ。
GError用の検証ユーティリティGErrorに関する検証をもっと簡単に書くためのユーティリティ。
GHashTable用の検証ユーティリティGHashTableに関する検証をもっと簡単に書くためのユーティリティ。
GList用の検証ユーティリティGListに関する検証をもっと簡単に書くためのユーティリティ。
GObject用の検証ユーティリティGObjectに関する検証をもっと簡単に書くためのユーティリティ。
GValue用の検証ユーティリティGValueに関する検証をもっと簡単に書くためのユーティリティ。
オブジェクト調査関数 — デバッグ用にオブジェクトの詳細を示す関数です。
GString用の検証ユーティリティGStringに関する検証をもっと簡単に書くためのユーティリティ。
cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.6.xml0000644000175000017500000004226711525702760023773 0ustar koukou ]> A gcut_add_datum, function in 便利なテストデータ用API gcut_assert_equal_hash_table, function in GLibサポート付きの検証 gcut_assert_equal_list, function in GLibサポート付きの検証 gcut_assert_equal_pid, function in GLibサポート付きの検証 C cut_assert_equal_size, function in 検証 cut_keep_message, function in Cutter cut_pop_backtrace, function in 検証作成の補助 cut_push_backtrace, function in 検証作成の補助 CUT_RELATIVE_PATH, macro in 検証作成の補助 cut_return, function in 検証 cut_setup, function in Cutter cut_set_message, function in Cutter cut_set_message_va_list, function in Cutter cut_shutdown, function in Cutter cut_startup, function in Cutter cut_take_replace, function in テストユーティリティ cut_teardown, function in Cutter D gcut_data_get_enum, function in 便利なテストデータ用API gcut_data_get_flags, function in 便利なテストデータ用API gcut_data_get_int, function in 便利なテストデータ用API gcut_data_get_pointer, function in 便利なテストデータ用API gcut_data_get_string, function in 便利なテストデータ用API gcut_data_get_type, function in 便利なテストデータ用API gcut_data_get_uint, function in 便利なテストデータ用API E GCutEgg::error, object signal in GCutEgg GCutEgg::error-received, object signal in GCutEgg GCutEgg::output-received, object signal in GCutEgg GCutEgg::reaped, object signal in GCutEgg GCutEggError, enum in GCutEgg gcut_egg_close, function in GCutEgg gcut_egg_get_env, function in GCutEgg gcut_egg_get_error, function in GCutEgg gcut_egg_get_flags, function in GCutEgg gcut_egg_get_forced_termination_wait_time, function in GCutEgg gcut_egg_get_input, function in GCutEgg gcut_egg_get_output, function in GCutEgg gcut_egg_get_pid, function in GCutEgg gcut_egg_hatch, function in GCutEgg gcut_egg_kill, function in GCutEgg gcut_egg_new, function in GCutEgg gcut_egg_new_argv, function in GCutEgg gcut_egg_new_array, function in GCutEgg gcut_egg_new_strings, function in GCutEgg gcut_egg_new_va_list, function in GCutEgg gcut_egg_set_env, function in GCutEgg gcut_egg_set_flags, function in GCutEgg gcut_egg_set_forced_termination_wait_time, function in GCutEgg gcut_egg_wait, function in GCutEgg gcut_egg_write, function in GCutEgg GCutEnumError, enum in GEnumとGFlags用の検証ユーティリティ GCUT_ENUM_ERROR, macro in GEnumとGFlags用の検証ユーティリティ gcut_enum_parse, function in GEnumとGFlags用の検証ユーティリティ F gcut_flags_get_all, function in GEnumとGFlags用の検証ユーティリティ gcut_flags_parse, function in GEnumとGFlags用の検証ユーティリティ G GDKCUTTER_PIXBUF_ENABLED, macro in GdkCutter Pixbuf I GCutInspectFunction, user_function in GLibサポート用の型 gcut_inspect_direct, function in オブジェクト調査関数 gcut_inspect_enum, function in オブジェクト調査関数 gcut_inspect_flags, function in オブジェクト調査関数 gcut_inspect_int, function in オブジェクト調査関数 gcut_inspect_pointer, function in オブジェクト調査関数 gcut_inspect_string, function in オブジェクト調査関数 gcut_inspect_type, function in オブジェクト調査関数 gcut_inspect_uint, function in オブジェクト調査関数 L gcut_list_equal_int, function in GList用の検証ユーティリティ gcut_list_equal_string, function in GList用の検証ユーティリティ gcut_list_equal_uint, function in GList用の検証ユーティリティ gcut_list_inspect_enum, function in GList用の検証ユーティリティ gcut_list_inspect_flags, function in GList用の検証ユーティリティ gcut_list_inspect_int, function in GList用の検証ユーティリティ gcut_list_inspect_object, function in GList用の検証ユーティリティ gcut_list_inspect_string, function in GList用の検証ユーティリティ gcut_list_inspect_uint, function in GList用の検証ユーティリティ gcut_list_string_new_array, function in GLibサポート付きテストユーティリティ T gcut_take_new_list_string_array, function in GLibサポート付きテストユーティリティ GCUTTER_ENABLED, macro in GCutter cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-diff-writer.xml0000644000175000017500000000163711525702771024466 0ustar koukou ]> CutDiffWriter 3 Cutterライブラリ CutDiffWriter 概要 説明 詳細 cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-test-utils.xml0000644000175000017500000010662211525702773024363 0ustar koukou ]> テストユーティリティ 3 Cutterライブラリ テストユーティリティ テストをもっと簡単に書くためのユーティリティ。 概要 void * cut_take (void *object, CutDestroyFunction destroy_function); const void * cut_take_memory (void *memory); const char * cut_take_string (char *string); const char * cut_take_strdup (const char *string); const char * cut_take_strndup (const char *string, size_t size); const void * cut_take_memdup (const void *memory, size_t size); const char * cut_take_printf (const char *format, ...); char ** cut_take_string_array (char **strings); const char * cut_take_diff (const char *from, const char *to); const char * cut_take_replace (const char *target, const char *pattern, const char *replacement); #define cut_take_convert (string, to_code_set, from_code_set) const char * cut_take_inspect_string (const char *string); void cut_set_fixture_data_dir (const char *path, ...); char * cut_build_fixture_data_path (const char *path, ...); const char * cut_build_fixture_path (const char *path, ...); const char * cut_get_fixture_data_string (const char *path, ...); const char * cut_get_fixture_data (size_t *size, const char *path, ...); void cut_remove_path (const char *path, ...); const char * cut_build_path (const char *path, ...); const char * cut_build_path_array (const char **paths); void cut_make_directory (const char *path, ...); 説明 テストを書くためには、テスト環境を前処理・後処理するコードや、検証する結果を準備するコードなどたくさんのコードを書く必要があります。Cutterはもっと簡単にテストを書くためにユーティリティを提供します。 このユーティリティはGLibサポート無しでも使えます。 詳細 cut_take () cut_take void * cut_take (void *object, CutDestroyFunction destroy_function); objectの所有権をCutterに渡し、object自身を返します。objectdestroy_funcを用いて破棄されます。 object : Cutterが所有権をもつことになるオブジェクト。 destroy_function : オブジェクト用の破棄関数。 戻り値 :Cutterが所有するobject。解放しないで下さい。 1.0.5から cut_take_memory () cut_take_memory const void * cut_take_memory (void *memory); memoryの所有権をCutterに渡し、memory自身を返します。memoryfree()で破棄されます。 memory : Cutterが所有権を持つことになるメモリ。 戻り値 :Cutterが所有するmemory。解放しないで下さい。 1.0.5から cut_take_string () cut_take_string const char * cut_take_string (char *string); stringの所有権をCutterに渡し、stringそれ自身を返します。 string : Cutterが所有権を持つことになる文字列。 戻り値 :Cutterが所有するstring。解放しないで下さい。 cut_take_strdup () cut_take_strdup const char * cut_take_strdup (const char *string); stringを複製し、その所有権をCutterに渡し、複製されたメモリを返します。 string : 複製される文字列。 戻り値 :Cutterが所有する複製された文字列。解放しないで下さい。 1.0.5から cut_take_strndup () cut_take_strndup const char * cut_take_strndup (const char *string, size_t size); stringの先頭sizeバイトを複製し、その所有権ををCutterに渡し、複製された文字列を返します。複製された文字列は常にNULL終端しています。 string : 複製される文字列。 size : 複製するバイト数。 戻り値 :Cutterが所有する複製された文字列。解放しないで下さい。 1.0.5から cut_take_memdup () cut_take_memdup const void * cut_take_memdup (const void *memory, size_t size); memorysizeバイトを複製し、その所有権をCutterに渡し、複製されたメモリを返します。 memory : 複製されるメモリ。 size : 複製するバイト数。 戻り値 :Cutterが所有する複製されたメモリ。解放しないで下さい。 1.0.5から cut_take_printf () cut_take_printf const char * cut_take_printf (const char *format, ...); printf()のように文字列を整形しますが、整形された文字列はCutterが所有します。 format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 戻り値 :Cutterが所有する整形された文字列。解放しないで下さい。 cut_take_string_array () cut_take_string_array char ** cut_take_string_array (char **strings); 配列の所有権をCutterに渡し、stringsそれ自身を返します。 strings : Cutterが所有権を持つことになる文字列の配列。 戻り値 :Cutterが所有するstrings。解放しないで下さい。 cut_take_diff () cut_take_diff const char * cut_take_diff (const char *from, const char *to); fromtoのdiffを計算します。diffの所有者はCutterです。 from : 元の文字列。 to : 修正された文字列。 戻り値 :Cutterが所有するfromtoのdiff。開放しないでください。 cut_take_replace () cut_take_replace const char * cut_take_replace (const char *target, const char *pattern, const char *replacement); target文字列中で、patternにマッチする部分をreplacementで置き換えます。 target : 置換対象の文字列。 pattern : 正規表現パターン。(文字列で指定) replacement : マッチした部分を置き換える文字列。 戻り値 :Cutterが所有する複製された文字列。解放しないで下さい。 1.0.6から cut_take_convert() cut_take_convert #define cut_take_convert(string, to_code_set, from_code_set) stringのコードセットをfrom_code_setからto_code_setへ変換します。 string : 変換対象の文字列。NULL終端。 to_code_set : 変換先のコードセット名。 from_code_set : stringのコードセット名。 戻り値 :Cutterが所有する変換された文字列。解放しないで下さい。 1.1.3から cut_take_inspect_string () cut_take_inspect_string const char * cut_take_inspect_string (const char *string); stringの詳細を返す。 string : 詳細な情報を取得したい文字列。NULLまたはNULL終端でなければいけません。 戻り値 :Cutterが所有する整形された文字列。解放しないで下さい。 1.1.4から cut_set_fixture_data_dir () cut_set_fixture_data_dir void cut_set_fixture_data_dir (const char *path, ...); cut_get_fixture_data_string()などで使われるフィクスチャデータのディレクトリを指定します。 path : フィクスチャデータディレクトリのパスの最初の要素。 ... : パスの残りの要素。1.0.7からNULL終端が必須となりました。 1.0.2から cut_build_fixture_data_path () cut_build_fixture_data_pathcut_build_fixture_data_path char * cut_build_fixture_data_path (const char *path, ...); cut_build_fixture_data_pathはバージョン1.1.6からヒス衣装になりました。新しく書くコードでは使わないでください。代わりにcut_build_fixture_path()を使ってください。 フィクスチャデータへのパスを生成します。もし、pathが相対パスなら、パスはcut_set_fixture_data_dir()で指定したディレクトリか、現在のディレクトリからの相対パスとして処理されます。 path : フィクスチャデータのパスの最初の要素。 ... : パスの残りの要素。1.0.7からNULL終端が必須となりました。 戻り値 :フィクスチャデータのパス。返された文字列が必要なくなったときは開放してください。 1.0.2から cut_build_fixture_path () cut_build_fixture_path const char * cut_build_fixture_path (const char *path, ...); フィクスチャデータへのパスを生成します。もし、pathが相対パスなら、パスはcut_set_fixture_data_dir()で指定したディレクトリか、現在のディレクトリからの相対パスとして処理されます。 path : フィクスチャデータのパスの最初の要素。 ... : パスの残りの要素。NULL終端が必須です。 戻り値 :Cutterが所有するフィクスチャデータのパス。解放しないで下さい。 1.1.6から cut_get_fixture_data_string () cut_get_fixture_data_string const char * cut_get_fixture_data_string (const char *path, ...); "path/..."にあるフィクスチャデータを読み込み、文字列として返します。文字列はCutterが所持します。cut_build_fixture_data_path()の説明にはフィクスチャデータのパスがどのように決定されるかが書かれています。 path : フィクスチャデータのパスの最初の要素。 ... : パスの残りの要素。1.0.7からNULL終端が必須となりました。 戻り値 :フィクスチャデータの内容。Cutterが所有しているので開放しないください。 1.0.2から cut_get_fixture_data () cut_get_fixture_data const char * cut_get_fixture_data (size_t *size, const char *path, ...); "path/..."にあるフィクスチャデータを読み込み、文字列として返します。文字列はCutterが所持します。cut_build_fixture_data_path()の説明にはフィクスチャデータのパスがどのように決定されるかが書かれています。 size : フィクスチャデータのサイズを返すアドレスまたはNULL path : フィクスチャデータのパスの最初の要素。 ... : パスの残りの要素。NULL終端が必須です。 戻り値 :フィクスチャデータの内容。Cutterが所有しているので開放しないください。 1.1.6から cut_remove_path () cut_remove_path void cut_remove_path (const char *path, ...); pathと、その下にあるパスを再帰的に削除します。いかなるエラーも報告しません。 path : 削除するパスの最初の要素。 ... : パスの残りの要素。1.0.7からNULL終端が必須となりました。 1.0.2から cut_build_path () cut_build_path const char * cut_build_path (const char *path, ...); pathと続く要素を使ってパスを作ります。 path : パスの最初の要素。 ... : パスの残りの要素。NULL終端。 戻り値 :Cutterが所有する作成したパス。解放しないで下さい。 1.0.7から cut_build_path_array () cut_build_path_array const char * cut_build_path_array (const char **paths); pathsからパスを作ります。 paths : パスの要素を含んだNULL終端の文字列の配列。 戻り値 :Cutterが所有する作成したパス。解放しないで下さい。 1.1.5から cut_make_directory () cut_make_directory void cut_make_directory (const char *path, ...); pathと、その途中にあるパスを再帰的に作成します。いかなるエラーも報告しません。 path : 作成するパスの最初の要素。 ... : パスの残りの要素。NULL終端。 1.1.1から cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-freebsd.html0000644000175000017500000000712511525703037025307 0ustar koukou FreeBSDへインストール

FreeBSDへインストール

FreeBSDへインストール — FreeBSDへのCutterのインストール方法

はじめに

FreeBSDへのCutterのインストール方法を説明します。

インストール

Cutterはportsに収録されているので、portupgradeでインストールできます。

パッケージでインストールする場合は以下のようにします。

% sudo /usr/sbin/pkg_add -r cutter

portsでインストールする場合は以下のようにします。

% (cd /usr/ports/devel/cutter && sudo make install)

参考:

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/right.png0000644000175000017500000000073011525703037022541 0ustar koukouPNG  IHDRw=bKGD pHYs  ~tIME2 I%=eIDATx!o@.'**M0$$?1~vIeEuLl&4䝠Bݛ|>$ݶoc ]> gdkcut-pixbuf-assertions-helper 3 Cutterライブラリ gdkcut-pixbuf-assertions-helper 概要 void gdkcut_pixbuf_assert_equal_helper (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_threshold); 説明 詳細 gdkcut_pixbuf_assert_equal_helper () gdkcut_pixbuf_assert_equal_helper void gdkcut_pixbuf_assert_equal_helper (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_threshold); expected : actual : threshold : expression_expected : expression_actual : expression_threshold : cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-centos.html0000644000175000017500000000611411525703037025165 0ustar koukou CentOSへインストール

CentOSへインストール

CentOSへインストール — CentOSへのCutterのインストール方法

はじめに

CentOSへのCutterのインストール方法を説明します。

インストール

CutterのYumリポジトリが提供されているので、yumでインストールできます。

まず、Yumリポジトリを登録します。

% sudo rpm -Uvh http://cutter.sourceforge.net/centos/cutter-repository-1.0.0-1.noarch.rpm

Yumリポジトリを登録したらyumでインストールできます。

% sudo yum install -y cutter

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-key-file.xml0000644000175000017500000001371711525703002024106 0ustar koukou ]> gcut-key-file 3 Cutterライブラリ gcut-key-file 概要 gint gcut_key_file_get_enum (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType enum_type, GError **error); guint gcut_key_file_get_flags (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType flags_type, GError **error); 説明 詳細 gcut_key_file_get_enum () gcut_key_file_get_enum gint gcut_key_file_get_enum (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType enum_type, GError **error); key_file : group_name : key : enum_type : error : 戻り値 : gcut_key_file_get_flags () gcut_key_file_get_flags guint gcut_key_file_get_flags (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType flags_type, GError **error); key_file : group_name : key : flags_type : error : 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-helper.xml0000644000175000017500000010173711525702772023526 0ustar koukou ]> 検証作成の補助 3 Cutterライブラリ 検証作成の補助 このセクションにあるシンボルは独自検証を作成することを補助します。 概要 void cut_test_pass (void); void cut_test_fail (const char *system_message, ...); void cut_test_fail_va_list (const char *system_message, const char *user_message_format); #define CUT_RELATIVE_PATH void cut_push_backtrace (const char *expression); void cut_pop_backtrace (void); #define cut_trace (expression) #define cut_trace_with_info_expression (expression, info_expression) const char * cut_append_diff (const char *message, const char *from, const char *to); #define cut_set_expected (expected) #define cut_set_actual (actual) const char * cut_inspect_string_array (const char **strings); cut_boolean cut_equal_string (const char *string1, const char *string2); cut_boolean cut_equal_double (double double1, double double2, double error); #define cut_equal_sockaddr (address1, address2) #define cut_inspect_sockaddr (address) const char * cut_get_test_directory (void); const char * cut_get_source_directory (void); 説明 読みやすいテストを書くために独自の検証を作成する必要があるでしょう。このセクションのシンボルは独自の検証作成を補助します。 例: my-assertions.h: #ifndef __MY_ASSERTIONS_H__ #define __MY_ASSERTIONS_H__ #include <cutter.h> #ifdef __cplusplus extern "C" { #endif #define my_assert_equal_int(expected, actual) \ cut_trace_with_info_expression( \ my_assert_equal_int_helper((expected), (actual), \ # expected, # actual), \ my_assert_equal_int(expected, actual, __VA_ARGS__)) void my_assert_equal_int_help (long expected, long actual, const char *expression_expected, const char *expression_actual); #ifdef __cplusplus } #endif #endif my-assertions.c: #include "my-assertions.h" void my_assert_equal_int_helper (long expected, long actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("<%s == %s>\n" "expected: <%ld>\n" " actual: <%ld>", expression_expected, expression_actual, expected, actual)); } } Makefile.am: AM_CFLAGS = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) noinst_LTLIBRARIES = libmy-assertions.la libmy_assertions_la_SOURCES = my-assertions.c my-assertions.h AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined 詳細 cut_test_pass () cut_test_pass void cut_test_pass (void); 検証をパスしたらcut_test_pass()を呼んでください。cut_test_pass()は検証数を増やします。1.0.5から cut_test_fail () cut_test_fail void cut_test_fail (const char *system_message, ...); 検証が失敗したらcut_test_fail()を呼んでください。cut_test_fail()は失敗数を増やし、現在のテストを中断します。 system_message : テストフレームワーク指定の失敗メッセージ。 ... : 省略可能な整形文字列。以降のパラメータが整形文字列に挿入されます。(printf()と同じ。)このパラメータは0.1.6から非推奨となっています。代わりにcut_set_message()を使ってください。 1.0.5から cut_test_fail_va_list () cut_test_fail_va_listcut_test_fail_va_list void cut_test_fail_va_list (const char *system_message, const char *user_message_format); cut_test_fail_va_listはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないで下さい。代わりにcut_test_fail()を使ってください。 cut_test_fail_va_list()の動作についてはcut_test_fail()を見てください。user_message_formatは可変長引数の1つ前の引数です。 例: void my_assert(cut_boolean result, const gchar *user_message_format, ...) { if (result) { cut_test_pass(); } else { cut_test_fail_va_list("Fail!", user_message_format); } } system_message : テストフレームワーク指定の失敗メッセージ。 user_message_format : ユーザ指定の失敗メッセージ。 1.0.5から CUT_RELATIVE_PATH CUT_RELATIVE_PATH # define CUT_RELATIVE_PATH NULL もし、テスト用の補助ライブラリを共有ライブラリとして使っている場合は、補助ライブラリのソースコード中またはビルドオプション(例: -DCUT_RELATIVE_PATH=\""sub/dir/"\")でこのマクロを定義してください。もし、このパスが設定されていない場合はcut_trace()cut_trace_with_info_expression()で正しいパスが得られません。 説明用のディレクト構成例です。 --- core-lib/ --- XXX.c # コアライブラリ | +- ... | +- YYY.c +- util-lib/ --- AAA.c # 便利ライブラリ | +- ... | +- BBB.c | +- test/ --- core/ --- test-XXX.c # コアライブラリのテスト | +- ... | +- test-YYY.c +- util/ --- test-AAA.c # 便利ライブラリのテスト | +- ... | +- test-BBB.c +- lib/ --- my-assertions.c # テスト用補助ライブラリ +- my-assertions.h # テスト中( | # test/core/test-*.soと | # test/util/test-*.soの中) | # で共有ライブラリとして使われる +- ... % cutter --source-directory=test test 上記の構成例では、test/lib/my-assertions.cではCUT_RELATIVE_PATHを"lib"と定義しなければいけません。これは、:source-directoryコマンドラインオプションで指定した"test"ソースディレクトリからみてlib/ディレクトリにmy-assertions.cがあるからです。 コードとビルドオプションの例です。 test/lib/my-assertions.c: #define CUT_RELATIVE_PATH "lib" #include <cutter.h> build option: % gcc -DCUT_RELATIVE_PATH="\"lib\"" ... 1.0.6から cut_push_backtrace () cut_push_backtrace void cut_push_backtrace (const char *expression); expressionと現在のソースの場所をバックトレーススタックにプッシュします。 通常は直接使う必要はありません。cut_trace()で十分です。 expression : 呼び出されたことを記録される式。 1.0.6から cut_pop_backtrace () cut_pop_backtrace void cut_pop_backtrace (void); バックトレーススタックからバックトレースをポップします。 通常は直接使う必要はありません。cut_trace()で十分です。1.0.6から cut_trace() cut_trace #define cut_trace(expression) 現在のファイル名、行番号、関数名、expressionを記憶し、expression内で検証が失敗した場合に表示します。expressionの多くは関数呼び出しになるでしょう。 expressionの戻り値を取得できないことに注意してください。 cut_trace()は以下の通りです。もし、cut_assert_not_null(object)が失敗したら、バックトレースには2行含まれます。cut_assert_not_null(object)とcreate_my_object("my-name")です。 例: static MyObject *object; static void create_my_object(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } void test_my_object_name(void) { cut_trace(create_my_object("my-name")); cut_assert_equal_string("my-name", my_object_get_name(object)); } テストを読みやすくするためにcut_trace()を使ったマクロを書くかもしれません: static MyObject *object; static void create_my_object_helper(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } #define create_my_object(...) \ cut_trace(create_my_object_helper(__VA_ARGS__)) void test_my_object_name(void) { create_my_object("my-name"); cut_assert_equal_string("my-name", my_object_get_name(object)); } expression : 呼び出されたことを記録される式。 1.0.5から cut_trace_with_info_expression() cut_trace_with_info_expression #define cut_trace_with_info_expression(expression, info_expression) cut_trace()cut_trace_with_info_expression()の違いは記録される式がexpressionと同じかどうかです。cut_trace_with_info_expression()はバックトレースの読みやすさのためにexpressionから情報を隠したいときに便利です。 cut_trace_with_info_expression()の例です。cut_assert_not_null(object)が失敗すると以下の2行を含んだバックトレースが得られます: cut_assert_not_null(object) create_my_object_helper("my-name")ではなくcreate_my_object("my-name") もし、cut_trace_with_info_expression()ではなくcut_trace()を使った場合はcreate_my_object_helper("my-name")になります。もし、create_my_object_helper("my-name")が得られたら以下のように混乱してしまうかもしれません。「create_my_object_helper("my-name")はどこからきたんだ?test_my_object_name()はcreate_my_object("my-name")は使っているけど、create_my_object_helper("my-name")は使っていないぞ。」 例: static MyObject *object; static void create_my_object_helper(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } #define create_my_object(...) \ cut_trace_with_info_expression( \ create_my_object_helper(__VA_ARGS__), \ create_my_object(__VA_ARGS__)) void test_my_object_name(void) { create_my_object("my-name"); cut_assert_equal_string("my-name", my_object_get_name(object)); } expression : 呼び出されたことを記録される式。 info_expression : 呼び出されたと記録される式。 1.0.5から cut_append_diff () cut_append_diffcut_append_diff const char * cut_append_diff (const char *message, const char *from, const char *to); cut_append_diffはバージョン1.0.9から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_set_expected()cut_set_actual()を使ってください。 fromtoのdiffを計算し、そのdiffをmessageに追加します。戻り値の文字列の所有者はCutterです。 message : diffが追加される文字列。 from : 元の文字列。 to : 修正された文字列。 戻り値 :fromto間のdiff付きのmessage。必要なさそうなdiffであればmessageと同じ。開放しないでください。 1.0.3から cut_set_expected() cut_set_expected #define cut_set_expected(expected) 次の検証で使う詳細化した期待値オブジェクトを設定します。 期待値オブジェクトと実際値オブジェクトの両方が設定され、それらのdiffが必要な場合は自動的にdiffを生成します。 cut_set_actual()も見てください。 expected : 期待値オブジェクトの詳細。 1.0.9から cut_set_actual() cut_set_actual #define cut_set_actual(actual) 次の検証で使う詳細化した実際値オブジェクトを設定します。 期待値オブジェクトと実際値オブジェクトの両方が設定され、それらのdiffが必要な場合は自動的にdiffを生成します。 cut_set_expected()も見てください。 actual : 実測値オブジェクトの詳細。 1.0.9から cut_inspect_string_array () cut_inspect_string_array const char * cut_inspect_string_array (const char **strings); stringsを人が読みやすい文字列に整形します。整形された文字列の所有者はCutterです。 strings : 整形される文字列の配列。 戻り値 :Cutterが所有する整形された文字列。解放しないで下さい。 cut_equal_string () cut_equal_string cut_boolean cut_equal_string (const char *string1, const char *string2); string1string2を比較します。string1あるいはstring2、または両方がNULLでもかまいません。 string1 : 文字列。 string2 : 文字列。 戻り値 :string1string2が両方NULL、あるいは同じ内容の場合はCUT_TRUE、そうでない場合はCUT_FALSE 1.0.5から cut_equal_double () cut_equal_double cut_boolean cut_equal_double (double double1, double double2, double error); double1double2を誤差範囲errorで比較します。 double1 : 浮動小数点値。 double2 : 浮動小数点値。 error : 誤差範囲を示す浮動小数点数。 戻り値 :|double1 - double2| <= errorならCUT_TRUE、そうでなければCUT_FALSE 1.0.5から cut_equal_sockaddr() cut_equal_sockaddr #define cut_equal_sockaddr(address1, address2) address1address2を比較します。 この関数はCUT_DISABLE_SOCKET_SUPPORTを定義すると無効にできます。 address1 : ソケットアドレス。 address2 : ソケットアドレス。 戻り値 :sub_processが異常終了したときはCUT_TRUE、そうでない場合はCUT_FALSE 1.1.1から cut_inspect_sockaddr() cut_inspect_sockaddr #define cut_inspect_sockaddr(address) addressを人が読みやすい文字列に整形します。整形された文字列の所有者はCutterです。 この関数はCUT_DISABLE_SOCKET_SUPPORTを定義すると無効にできます。 address : 詳細化されるソケットアドレス。 戻り値 :Cutterが所有する整形されたソケットアドレス。解放しないで下さい。 1.1.1から cut_get_test_directory () cut_get_test_directory const char * cut_get_test_directory (void); コマンドラインで指定されたテストディレクトリ名を返します。 戻り値 :Cutterが所有する文字列。解放しないで下さい。 1.1.4から cut_get_source_directory () cut_get_source_directory const char * cut_get_source_directory (void); コマンドラインで指定されたソースディレクトリ名を返します。 戻り値 :Cutterが所有する文字列。解放しないで下さい。 1.1.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-data.xml0000644000175000017500000010455411525702777023334 0ustar koukou ]> 便利なテストデータ用API 3 Cutterライブラリ 便利なテストデータ用API 構造体定義なしでテストデータを作成するためのAPI。 概要 void gcut_add_datum (const gchar *name, const gchar *first_field_name, ...); gboolean gcut_data_has_field (gconstpointer data, const gchar *field_name); #define gcut_data_get_char (data, field_name) const gchar * gcut_data_get_string (gconstpointer data, const gchar *field_name); gint gcut_data_get_int (gconstpointer data, const gchar *field_name); guint gcut_data_get_uint (gconstpointer data, const gchar *field_name); #define gcut_data_get_int64 (data, field_name) #define gcut_data_get_uint64 (data, field_name) #define gcut_data_get_size (data, field_name) GType gcut_data_get_type (gconstpointer data, const gchar *field_name); guint gcut_data_get_flags (gconstpointer data, const gchar *field_name); gint gcut_data_get_enum (gconstpointer data, const gchar *field_name); gconstpointer gcut_data_get_pointer (gconstpointer data, const gchar *field_name); gconstpointer gcut_data_get_boxed (gconstpointer data, const gchar *field_name); #define gcut_data_get_object (data, field_name) #define gcut_data_get_boolean (data, field_name) #define gcut_data_get_double (data, field_name) 説明 cut_add_data()で複雑なテストデータを使用したい場合はテストデータ用にデータ型を定義する必要があります。しかし、それは少し面倒です。gcut_add_datum()はデータ型を定義せずに複雑なテストデータを使用するためのAPIを提供します。このAPIは複雑なデータを扱うためにGTypeを使います。 詳細 gcut_add_datum () gcut_add_datum void gcut_add_datum (const gchar *name, const gchar *first_field_name, ...); データ駆動テスト用のデータを追加します。複雑なテストデータのために新しく構造体を定義する必要がないため、cut_add_data()よりも便利です。 例: #include <gcutter.h> void data_translate (void); void test_translate (gconstpointer data); static const gchar* translate (gint input) { switch(input) { case 1: return "first"; case 111: return "a hundred eleven"; default: return "unsupported"; } } void data_translate(void) { gcut_add_datum("simple data", "translated", G_TYPE_STRING, "first", "input", G_TYPE_INT, 1, NULL); gcut_add_datum("complex data", "translated", G_TYPE_STRING, "a hundred eleven", "input", G_TYPE_INT, 111, NULL); } void test_translate(gconstpointer data) { cut_assert_equal_string(gcut_data_get_string(data, "translated"), gcut_data_get_int(data, "input")); } 利用可能な型とその時の値は以下の通りです。 G_TYPE_CHAR gcharの値。 例: gcut_add_datum("data name", "field-name", G_TYPE_CHAR, 'X', NULL); G_TYPE_STRING const gchar *value 例: gcut_add_datum("data name", "field-name", G_TYPE_STRING, "string value", NULL); G_TYPE_INT gintの値。 例: gcut_add_datum("data name", "field-name", G_TYPE_INT, 100, NULL); G_TYPE_UINT guintの値。 例: gcut_add_datum("data name", "field-name", G_TYPE_UINT, 100, NULL); G_TYPE_INT64 gint64の値。 例: gcut_add_datum("data name", "field-name", G_TYPE_INT64, G_GINT64_CONSTANT(100), NULL); G_TYPE_UINT64 guint64の値。 例: gcut_add_datum("data name", "field-name", G_TYPE_UINT64, G_GUINT64_CONSTANT(100), NULL); G_TYPE_GTYPE GTypeの値。 例: gcut_add_datum("data name", "field-name", G_TYPE_GTYPE, G_TYPE_OBJECT, NULL); GFlagsの型 その型の値。 例: gcut_add_datum("data name", "field-name", GTK_TYPE_WIDGET_FLAGS, GTK_TOPLEVEL | GTK_MAPPED, NULL); GEnumの型 その型の値。 例: gcut_add_datum("data name", "field-name", GTK_TYPE_WRAP_MODE, GTK_WRAP_NONE, NULL); G_TYPE_POINTER gconstpointer value, GDestroyNotify notify valueが破棄されるときにnotifyが呼ばれます。 例: gcut_add_datum("data name", "field-name", G_TYPE_POINTER, my_structure_new(...), my_structure_free, NULL); 注意: 値の所有者はCutterになります。解放しないで下さい。 GBoxedの型 その型の値。 例: gcut_add_datum("data name", "field-name", G_TYPE_HASH_TABLE, gcut_hash_table_string_string_new("name1", "value1", "name2", "value2", NULL), NULL); 注意: 値の所有者はCutterになります。解放しないで下さい。 G_TYPE_BOOLEAN gbooleanの値。 例: gcut_add_datum("data name", "field-name", G_TYPE_BOOLEAN, TRUE, NULL); G_TYPE_DOUBLE gdoubleの値。 例: gcut_add_datum("data name", "field-name", G_TYPE_DOUBLE, 2.9, NULL); name : データの名前。 first_field_name : 最初のフィールド名。 ... : 最初のフィールドの型と値。その後に、フィールドの名前と型と値の3つを任意の数だけ指定します。最後の引数はNULLにしてください。詳細は関数の説明文のところにあります。 1.0.6から gcut_data_has_field () gcut_data_has_field gboolean gcut_data_has_field (gconstpointer data, const gchar *field_name); data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :datafield_nameフィールドがあればTRUE、そうでなければFALSE 1.1.5から gcut_data_get_char() gcut_data_get_char #define gcut_data_get_char(data, field_name) field_nameフィールドの値を文字として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.1.3から gcut_data_get_string () gcut_data_get_string const gchar * gcut_data_get_string (gconstpointer data, const gchar *field_name); field_nameフィールドの値を文字列として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.0.6から gcut_data_get_int () gcut_data_get_int gint gcut_data_get_int (gconstpointer data, const gchar *field_name); field_nameフィールドの値を整数として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.0.6から gcut_data_get_uint () gcut_data_get_uint guint gcut_data_get_uint (gconstpointer data, const gchar *field_name); field_nameの値を符号なし整数として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.0.6から gcut_data_get_int64() gcut_data_get_int64 #define gcut_data_get_int64(data, field_name) field_nameフィールドの値を64bit整数として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.1.3から gcut_data_get_uint64() gcut_data_get_uint64 #define gcut_data_get_uint64(data, field_name) field_nameの値を64bit符号なし整数として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.1.3から gcut_data_get_size() gcut_data_get_size #define gcut_data_get_size(data, field_name) field_nameフィールドの値をsize_tとして取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.1.3から gcut_data_get_type () gcut_data_get_type GType gcut_data_get_type (gconstpointer data, const gchar *field_name); field_nameフィールドの値をGTypeとして取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.0.6から gcut_data_get_flags () gcut_data_get_flags guint gcut_data_get_flags (gconstpointer data, const gchar *field_name); field_nameの値をGFlags型の符号なし整数として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.0.6から gcut_data_get_enum () gcut_data_get_enum gint gcut_data_get_enum (gconstpointer data, const gchar *field_name); field_nameフィールドの値をGEnum型の整数として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.0.6から gcut_data_get_pointer () gcut_data_get_pointer gconstpointer gcut_data_get_pointer (gconstpointer data, const gchar *field_name); field_nameの値をポインタとして取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.0.6から gcut_data_get_boxed () gcut_data_get_boxed gconstpointer gcut_data_get_boxed (gconstpointer data, const gchar *field_name); field_nameフィールドの値をGBoxed型の値として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.0.7から gcut_data_get_object() gcut_data_get_object #define gcut_data_get_object(data, field_name) field_nameフィールドの値をGObjectとして取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.1.1から gcut_data_get_boolean() gcut_data_get_boolean #define gcut_data_get_boolean(data, field_name) field_nameの値を真偽値として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.1.3から gcut_data_get_double() gcut_data_get_double #define gcut_data_get_double(data, field_name) field_nameの値を倍精度浮動小数点数として取得します。 data : gcut_add_datum()で追加したデータ。 field_name : フィールド名。 戻り値 :field_nameに対応するフィールドの値。 1.1.3から cutter-testing-framework-1.1.7/doc/reference/ja/html/diff-dark-and-nested-circle.png0000644000175000017500000001254311525703037026537 0ustar koukouPNG  IHDRg3sBIT|dIDATxkLWo?4`c܆  !~I$Mb[)niv7#3&SX&U,$e;q0`C& pMtWSU%DZqG=ݺu2RX5p;)hY @/Y@ `fY@ `޿>5UGmv{ma+8aeY6'(+2)d8dgY_H&13X|0}x?mb2Q &Z6.ZvAd o$zpߙb4)M'>Q?v/ADm2_38_Ok0&Dunm]z oWj%@<:ܫ+hAMT5>_%thA;kF.Ïw h4Q,o?P7rs(qb.|9J)&MЎ桒֕' ǧ+'{ٳC&wAMMgopJ$ѣMA-M{*+qMЛGU &Xrx[SuyiUf`i@Hj,|쉮j=zEQ 6 yg` &X[=u,Ju̇B&"!fyocO|ꏌ*Jp{웋Oa&f9ߍ@mn2h"(:K_^ڙ) ДCvr&ʡY^;w(OXpx{N&ʢYzV?C_Ey[<ުv(lU/(hnV;@4Jk",C%m v&iDY~z!,#·uH@&_I kv|-TM$gw5CSjMRH2KF[J֭61AQBIfʶS-v:Wc$c&ˣ&;XR]NLt@{#FΓ_ϤRzw:X0j",RejGNDukm``5>}Dr45p9̰p\΃C+"hT1{'C4DŊ6pypJtp-pMDUy&ǽKlLgf̢&^G;.m\Eè(FM_A/ },\NVVv2xA}bd:k&/G-E{ބ!Z3cۚቋxjmI~,}BQn=C (0j",Q)ઝ"7}m|nFfoڈFJ%l׊mXW䕯ϡhX6am^H`D2iM_hwC&̲LG|Õ @Ȇ+}g:8cÅXۢX3[XB{r4xLਔ@ZÅ~WK].oS+S*J!LbxfI<\7더wB7RDҊS^fU㓧ISCVV]r5dՁ^w4/Mw4Ư&7.t&4#%4T}g:5#625#po4Y%44fIWX:OY1J{]cDADV]3r 5Q;Q&zz}SJ HFl<>{E 4( VO>3ÕϩBI5mN=跃+y_:uy QZٷai^;wRtGЛGU)$h"(f?Ud7lk?ǟn4.MےIĊAfdly,hO/6  G ʼpkރkR&ʡ҈O~I7YpkfO~ڹ4QE,Ǟ說8nE 08Q@YZtyiQ'kFƶMBRfIcGE.h"ҚYcU-_}gD|E!h""=KC;J?˺ ǧ+'Saf4 jjB,i~zסu|\(Q3rȯr%RMnC b4oQ?v/AH W&kfG_c &Dh,iZ6.l BHFXw44Tٞ ,vgԖeehڜħ㐝eyg|!f+̸bQ79񏴾@d 3) F@, 0 @, 0 @kSf DcXBd5{Z"J={(㰐fY@ `fY@ x_snb)NX,yI9;ad%-kl1qf7))BOYy.e$?Oqܬ&K<Vo R֪Zˢ+IJL7[L d1!B!T5׼cJ$щ䠯H,],*wf04mfhڍrTE諾c?0x0Yh73Yt]a/bbZlBl31fʾj?a>+LX-M[qVSInwgns f]t9}\&Ӎ\wQxoOy"QjfpF:VP^M\#NQ橼X14u2|{Uo^cдQn%tخzwo$̒ \mp< o6iOoBo ɸpaus]Φ+[/z)Iۅ']&#z A GSLdBoB4`2|{cvD\n'.,dcōy͍hW ^Ǚy&vkjb0.tinBNROwmY FP&`1S(6e ;lgyh`.|&S{+IX-&& "s:rkf1#_tUfҒ04mRP`ˢ}j ̢sT;r8RV,ˤF񲔵J Bw܃3&R*Ѐcue)M鄇¾v9Ęc2RDE7arsmdDzlbK1KEj4߳(y<6{Q$Wahv$X`lgx[MZ9Xc5ݳ܊ݨFAx*&D'm;7 I=^=˭Hel[qǘ)W+Q뵭3%x]%M@ Jr/RWN {jUGIUǀt?peG|S=Kac][apίǙ~3B9?I fh*6_XZh,:0ۡ6,YZrROwM)JP["{"QR"fBBC=lgZ;.oJr)|tZ(r?nsduaiUz;3e_`{pT 0 3N2EB%q3B9XԱ弅``YN!GU *Eg+Yw,Y5:J/r', N⁥4yY, %/i1g'bM-&l6f2 lRVKRInZ8n:.YI,䚻U‰&@, 0 @, 0 @, S*&lPyEIENDB`cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.1.0.xml0000644000175000017500000002313311525702761023756 0ustar koukou ]> C cppcut_message, macro in CppCutter cut_assert_equal_intmax, macro in 検証 cut_assert_equal_intptr, macro in 検証 cut_assert_equal_int_fast16, macro in 検証 cut_assert_equal_int_fast32, macro in 検証 cut_assert_equal_int_fast64, macro in 検証 cut_assert_equal_int_fast8, macro in 検証 cut_assert_equal_int_least16, macro in 検証 cut_assert_equal_int_least32, macro in 検証 cut_assert_equal_int_least64, macro in 検証 cut_assert_equal_int_least8, macro in 検証 cut_assert_equal_uintmax, macro in 検証 cut_assert_equal_uintptr, macro in 検証 cut_assert_equal_uint_fast16, macro in 検証 cut_assert_equal_uint_fast32, macro in 検証 cut_assert_equal_uint_fast64, macro in 検証 cut_assert_equal_uint_fast8, macro in 検証 cut_assert_equal_uint_least16, macro in 検証 cut_assert_equal_uint_least32, macro in 検証 cut_assert_equal_uint_least64, macro in 検証 cut_assert_equal_uint_least8, macro in 検証 cut_assert_not_equal_intmax, macro in 検証 cut_assert_not_equal_intptr, macro in 検証 cut_assert_not_equal_int_fast16, macro in 検証 cut_assert_not_equal_int_fast32, macro in 検証 cut_assert_not_equal_int_fast64, macro in 検証 cut_assert_not_equal_int_fast8, macro in 検証 cut_assert_not_equal_int_least16, macro in 検証 cut_assert_not_equal_int_least32, macro in 検証 cut_assert_not_equal_int_least64, macro in 検証 cut_assert_not_equal_int_least8, macro in 検証 cut_assert_not_equal_uintmax, macro in 検証 cut_assert_not_equal_uintptr, macro in 検証 cut_assert_not_equal_uint_fast16, macro in 検証 cut_assert_not_equal_uint_fast32, macro in 検証 cut_assert_not_equal_uint_fast64, macro in 検証 cut_assert_not_equal_uint_fast8, macro in 検証 cut_assert_not_equal_uint_least16, macro in 検証 cut_assert_not_equal_uint_least32, macro in 検証 cut_assert_not_equal_uint_least64, macro in 検証 cut_assert_not_equal_uint_least8, macro in 検証 cut_message, function in Cutter cutter-testing-framework-1.1.7/doc/reference/ja/html/writing-test.html0000644000175000017500000001602611525703037024251 0ustar koukou テスト作成

テスト作成

Cutter — C言語・C++言語用単体テストフレームワーク
バージョン情報 — Cutterのバージョンをチェックするためのマクロ
利用可能な機能一覧 — インストールされているCutterで利用可能な機能一覧。
検証 — あなたのプログラムが期待通りに動作しているかを検証します。
テストユーティリティ — テストをもっと簡単に書くためのユーティリティ。
— テストで使う型です。
マルチプロセス — マルチプロセスでテストを走らせるためのユーティリティ。
GCutter — GLibサポート付きのCutter。
GLibサポート付きの検証 — GLibサポート付きであなたのプログラムが期待通りに動作しているかを検証します。
GLibサポート付きテストユーティリティ — テストをもっと簡単に書くためのGLibサポート付きユーティリティ。
GLibサポート用の型 — GLibサポート付きテストで使う型です。
便利なテストデータ用API — 構造体定義なしでテストデータを作成するためのAPI。
外部コマンド — 外部コマンドを使うための便利API
外部コマンド(非推奨) — 外部コマンドを使うための便利API(非推奨)
抽象化されたイベントループ — GCutterで使うイベントループをカスタマイズするための抽象化されたイベントループAPI。
GLib用イベントループ — GLibのGMainContextとGMainLoop用のイベントループAPI。
CppCutter — C++サポート付きのCutter。
C++サポート付きの検証 — C++サポート付きであなたのプログラムが期待通りに動作しているかを検証します。
GdkCutter Pixbuf — gdk-pixbufサポート付きのCutter。
gdk-pixbufサポート付きの検証 — gdk-pixbufサポート付きであなたのプログラムが期待通りに動作しているかを検証します。
SoupCutter — libsoupを用いたHTTPサポート付きのCutter。
HTTPクライアント・サーバ用の検証 — libsoupを使ってあなたのHTTPクライアント・サーバが期待通りに動作しているかを検証します。
便利なHTTPクライアントAPI — HTTPクライアントとして動作するためのAPI。
便利なHTTPサーバーAPI — HTTPサーバーとして動作するためのAPI。
実験 — 実験的なAPI
cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.2.xml0000644000175000017500000000450611525702757023767 0ustar koukou ]> C cut_assert_equal_fixture_data_string, function in 検証 cut_assert_path_exist, function in 検証 cut_assert_path_not_exist, function in 検証 cut_assert_remove_path, function in GLibサポート付きの検証 cut_build_fixture_data_path, function in テストユーティリティ cut_error_errno, function in 検証 cut_get_fixture_data_string, function in テストユーティリティ cut_remove_path, function in テストユーティリティ cut_set_fixture_data_dir, function in テストユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/GCutEgg.html0000644000175000017500000021252711525703037023102 0ustar koukou 外部コマンド(非推奨)

外部コマンド(非推奨)

外部コマンド(非推奨) — 外部コマンドを使うための便利API(非推奨)

概要

#define             GCUT_EGG_ERROR
                    GCutEgg;
                    GCutEggClass;
enum                GCutEggError;
GQuark              gcut_egg_error_quark                (void);
GCutEgg *           gcut_egg_new                        (const gchar *command,
                                                         ...);
GCutEgg *           gcut_egg_new_va_list                (const gchar *command,
                                                         va_list args);
GCutEgg *           gcut_egg_new_argv                   (gint argc,
                                                         gchar **argv);
GCutEgg *           gcut_egg_new_strings                (const gchar **command);
GCutEgg *           gcut_egg_new_array                  (GArray *command);
void                gcut_egg_set_flags                  (GCutEgg *egg,
                                                         GSpawnFlags flags);
GSpawnFlags         gcut_egg_get_flags                  (GCutEgg *egg);
void                gcut_egg_set_env                    (GCutEgg *egg,
                                                         const gchar *name,
                                                         ...);
gchar **            gcut_egg_get_env                    (GCutEgg *egg);
gboolean            gcut_egg_hatch                      (GCutEgg *egg,
                                                         GError **error);
void                gcut_egg_close                      (GCutEgg *egg);
gboolean            gcut_egg_write                      (GCutEgg *egg,
                                                         const gchar *chunk,
                                                         gsize size,
                                                         GError **error);
GPid                gcut_egg_get_pid                    (GCutEgg *egg);
gint                gcut_egg_wait                       (GCutEgg *egg,
                                                         guint timeout,
                                                         GError **error);
void                gcut_egg_kill                       (GCutEgg *egg,
                                                         gint signal_number);
GIOChannel *        gcut_egg_get_input                  (GCutEgg *egg);
GIOChannel *        gcut_egg_get_output                 (GCutEgg *egg);
GIOChannel *        gcut_egg_get_error                  (GCutEgg *egg);
guint               gcut_egg_get_forced_termination_wait_time
                                                        (GCutEgg *egg);
void                gcut_egg_set_forced_termination_wait_time
                                                        (GCutEgg *egg,
                                                         guint timeout);

オブジェクト階層

  GObject
   +----GCutEgg

プロパティ

  "command"                  gpointer              : Read / Write

シグナル

  "error"                                          : Run Last
  "error-received"                                 : Run Last
  "output-received"                                : Run Last
  "reaped"                                         : Run Last

説明

GCutEggは外部コマンドの実行・通信・終了をカプセル化します。GCutEggはエラーをGErrorとして報告します。エラーはgcut_assert_error()を使うことにより簡単に検証できます。

外部コマンドはgcut_egg_new()gcut_egg_new_strings()などのようなコンストラクタで指定します。この時点では外部コマンドは実行されません。gcut_egg_hatch()で指定された外部コマンドが実行されます。

外部コマンドの標準出力・エラー出力は"output-received"シグナル・"error-received"シグナル、あるいは、gcut_egg_get_output()gcut_egg_get_error()が返すGIOChannelで取得できます。gcut_egg_write()は外部コマンドの標準入力にデータを書き込みます。

外部コマンドの終了を待つためにはgcut_egg_wait()を使うことができます。無限待ちを避けるために、タイムアウトを指定することができます。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
static GString *output_string;
static GCutEgg *egg;

void
cut_setup (void)
{
    output_string = g_string_new(NULL);
    egg = NULL;
}

void
cut_teardown (void)
{
    if (output_string)
        g_string_free(output_string, TRUE);
    if (egg)
        g_object_unref(egg);
}

static void
cb_output_received (GCutEgg *egg, const gchar *chunk, gsize size,
                    gpointer user_data)
{
    g_string_append_len(output_string, chunk, size);
}

void
test_echo (void)
{
    GError *error = NULL;

    egg = gcut_egg_new("echo", "XXX", NULL);
    g_signal_connect(egg, "receive-output",
                     G_CALLBACK(cb_output_received), NULL);

    gcut_egg_hatch(egg, &error);
    gcut_assert_error(error);

    gcut_egg_wait(egg, 1000, &error);
    gcut_assert_error(error);
    cut_assert_equal_string("XXX\n", output_string->str);
}

詳細

GCUT_EGG_ERROR

#define GCUT_EGG_ERROR           (gcut_egg_error_quark())

Warning

GCUT_EGG_ERRORは非推奨です。新しいコードでは使わないでください。


GCutEgg

typedef struct _GCutEgg GCutEgg;

Warning

GCutEggは非推奨です。新しいコードでは使わないでください。


GCutEggClass

typedef struct {
    GObjectClass parent_class;

    void (*output_received) (GCutEgg     *egg,
                             const gchar *chunk,
                             gsize        size);
    void (*error_received)  (GCutEgg     *egg,
                             const gchar *chunk,
                             gsize        size);
    void (*reaped)          (GCutEgg     *egg,
                             gint         status);
    void (*error)           (GCutEgg     *egg,
                             GError      *error);
} GCutEggClass;

Warning

GCutEggClassは非推奨です。新しいコードでは使わないでください。


enum GCutEggError

typedef enum
{
    GCUT_EGG_ERROR_COMMAND_LINE,
    GCUT_EGG_ERROR_IO_ERROR,
    GCUT_EGG_ERROR_ALREADY_RUNNING,
    GCUT_EGG_ERROR_NOT_RUNNING,
    GCUT_EGG_ERROR_INVALID_OBJECT,
    GCUT_EGG_ERROR_TIMEOUT
} GCutEggError;

Warning

GCutEggErrorはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにGCutProcessErrorを使ってください。

GCutEgg関連の操作で返されるエラーコード。

GCUT_EGG_ERROR_COMMAND_LINE

コマンドライン関連のエラー。

GCUT_EGG_ERROR_IO_ERROR

入出力エラー。

GCUT_EGG_ERROR_ALREADY_RUNNING

外部コマンドはすでに実行されています。

GCUT_EGG_ERROR_NOT_RUNNING

外部こもアンドが実行されていません。

GCUT_EGG_ERROR_INVALID_OBJECT

不正なGCutEggオブジェクトが渡されました。

GCUT_EGG_ERROR_TIMEOUT

タイムアウト。

1.0.6から


gcut_egg_error_quark ()

GQuark              gcut_egg_error_quark                (void);

Warning

gcut_egg_error_quarkは非推奨です。新しいコードでは使わないでください。

戻り値 :


gcut_egg_new ()

GCutEgg *           gcut_egg_new                        (const gchar *command,
                                                         ...);

Warning

gcut_egg_newはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_new()を使ってください。

commandを実行する新しいGCutEggオブジェクトを生成します。

command :

実行する外部コマンド名。

... :

commandの引数

戻り値 :

新しいGCutEgg

1.0.6から


gcut_egg_new_va_list ()

GCutEgg *           gcut_egg_new_va_list                (const gchar *command,
                                                         va_list args);

Warning

gcut_egg_new_va_listはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないで下さい。代わりにgcut_process_new_va_list()を使ってください。

commandを実行する新しいGCutEggオブジェクトを生成します。

command :

実行する外部コマンド名。

args :

commandの引数

戻り値 :

新しいGCutEgg

1.0.6から


gcut_egg_new_argv ()

GCutEgg *           gcut_egg_new_argv                   (gint argc,
                                                         gchar **argv);

Warning

gcut_egg_new_argvはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_egg_new_argv()を使ってください。

commandを実行する新しいGCutEggオブジェクトを生成します。

argc :

argvの要素数

argv :

実行する外部コマンド名とコマンド引数。

戻り値 :

新しいGCutEgg

1.0.6から


gcut_egg_new_strings ()

GCutEgg *           gcut_egg_new_strings                (const gchar **command);

Warning

gcut_egg_new_stringsはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_new_strings()を使ってください。

commandを実行する新しいGCutEggオブジェクトを生成します。

command :

実行する外部コマンド名とコマンド引数。NULL終端。

戻り値 :

新しいGCutEgg

1.0.6から


gcut_egg_new_array ()

GCutEgg *           gcut_egg_new_array                  (GArray *command);

Warning

gcut_egg_new_arrayはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_egg_new_array()を使ってください。

commandを実行する新しいGCutEggオブジェクトを生成します。

command :

実行する外部コマンド名とコマンド引数。GArrayは0終端にして下さい。

戻り値 :

新しいGCutEgg

1.0.6から


gcut_egg_set_flags ()

void                gcut_egg_set_flags                  (GCutEgg *egg,
                                                         GSpawnFlags flags);

Warning

gcut_egg_set_flagsはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_set_flags()を使ってください。

外部コマンドを実行するときのflagsを設定します。

egg :

GCutEgg

flags :

g_spawn_async_with_pipes()に渡すフラグ。

1.0.6から


gcut_egg_get_flags ()

GSpawnFlags         gcut_egg_get_flags                  (GCutEgg *egg);

Warning

gcut_egg_get_flagsはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_flags()を使ってください。

外部コマンドを実行する時のflagsを取得します。

egg :

GCutEgg

戻り値 :

外部コマンドを実行するときのフラグ。

1.0.6から


gcut_egg_set_env ()

void                gcut_egg_set_env                    (GCutEgg *egg,
                                                         const gchar *name,
                                                         ...);

Warning

gcut_egg_set_envはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_set_env()を使ってください。

外部コマンドの環境変数を設定します。

egg :

GCutEgg

name :

最初の環境変数名。

... :

nameに対応する値。その後に、名前と値のペアを任意の数だけ指定します。最後の引数はNULLにしてください。

1.0.6から


gcut_egg_get_env ()

gchar **            gcut_egg_get_env                    (GCutEgg *egg);

Warning

gcut_egg_get_envはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_env()を使ってください。

外部コマンドの環境変数を取得します。

egg :

GCutEgg

戻り値 :

新しく割り当てられたNULL終端の環境変数のリスト("名前1=値1", "名前2=値2", ..., NULL)を返します。必要がなくなったらg_strfreev()で開放してください。

1.0.6から


gcut_egg_hatch ()

gboolean            gcut_egg_hatch                      (GCutEgg *egg,
                                                         GError **error);

Warning

gcut_egg_hatchはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_run()を使ってください。

新しい外部プロセスを実行します。

egg :

GCutEgg

error :

エラーを返すアドレスまたはNULL

戻り値 :

成功したときはTRUE、そうでない場合はFALSE

1.0.6から


gcut_egg_close ()

void                gcut_egg_close                      (GCutEgg *egg);

Warning

gcut_egg_closeはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにGCutProcessを使ってください。

実行した外部コマンドのリソースを回収します。破棄されるときに暗黙的に回収されます。

egg :

GCutEgg

1.0.6から


gcut_egg_write ()

gboolean            gcut_egg_write                      (GCutEgg *egg,
                                                         const gchar *chunk,
                                                         gsize size,
                                                         GError **error);

Warning

gcut_egg_writeはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_write()を使ってください。

外部プロセスの標準入力にchunkを書き込みます。

egg :

GCutEgg

chunk :

書き込むデータ

size :

chunkのサイズ

error :

エラーを返すアドレスまたはNULL

戻り値 :

成功したときはTRUE、そうでない場合はFALSE

1.0.6から


gcut_egg_get_pid ()

GPid                gcut_egg_get_pid                    (GCutEgg *egg);

Warning

gcut_egg_get_pidはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_pid()を使ってください。

実行している外部プロセスのプロセスIDを取得します。外部コマンドが実行されていない場合は0が返ります。

egg :

GCutEgg

戻り値 :

実行中の外部コマンドのプロセスID。実行していない場合は0。

1.0.6から


gcut_egg_wait ()

gint                gcut_egg_wait                       (GCutEgg *egg,
                                                         guint timeout,
                                                         GError **error);

Warning

gcut_egg_waitはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_wait()を使ってください。

実行中の外部プロセスが終了することをtimeoutミリ秒待ちます。外部コマンドがtimeoutミリ秒以内に終了しなかった場合は、GCUT_EGG_ERROR_TIMEOUTエラーが設定され、-1が返ります。外部プロセスが実行されていない場合は、GCUT_EGG_ERROR_NOT_RUNNINGエラーが設定され、-1が返ります。

egg :

GCutEgg

timeout :

タイムアウト時間(ミリ秒)

error :

エラーを返すアドレスまたはNULL

戻り値 :

外部プロセスが終了した場合は終了ステータス。そうでない場合は-1。

1.0.6から


gcut_egg_kill ()

void                gcut_egg_kill                       (GCutEgg *egg,
                                                         gint signal_number);

Warning

gcut_egg_killはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないで下さい。代わりにgcut_process_kill()を使ってください。

外部プロセスにsignal_numberシグナルを送ります。

egg :

GCutEgg

signal_number :

外部プロセスに送るシグナル番号。

1.0.6から


gcut_egg_get_input ()

GIOChannel *        gcut_egg_get_input                  (GCutEgg *egg);

Warning

gcut_egg_get_inputはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_input_channel()を使ってください。

外部プロセスの標準入力と結びついたGIOChannelを取得します。

egg :

GCutEgg

戻り値 :

外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL

1.0.6から


gcut_egg_get_output ()

GIOChannel *        gcut_egg_get_output                 (GCutEgg *egg);

Warning

gcut_egg_get_outputはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_output_channel()を使ってください。

外部プロセスの標準出力と結びついたGIOChannelを取得します。

egg :

GCutEgg

戻り値 :

外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL

1.0.6から


gcut_egg_get_error ()

GIOChannel *        gcut_egg_get_error                  (GCutEgg *egg);

Warning

gcut_egg_get_errorはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_egg_get_error()を使ってください。

外部プロセスのエラー出力に結びついたGIOChannelを返します。

egg :

GCutEgg

戻り値 :

外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL

1.0.6から


gcut_egg_get_forced_termination_wait_time ()

guint               gcut_egg_get_forced_termination_wait_time
                                                        (GCutEgg *egg);

Warning

gcut_egg_get_forced_termination_wait_timeはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_forced_termination_wait_time()を使ってください。

オブジェクトが破棄されるときに行われる外部コマンド強制終了後に待つ時間(ミリ秒)を取得します。

egg :

GCutEgg

戻り値 :

破棄時の強制終了待ちの時間。

1.0.6から


gcut_egg_set_forced_termination_wait_time ()

void                gcut_egg_set_forced_termination_wait_time
                                                        (GCutEgg *egg,
                                                         guint timeout);

Warning

gcut_egg_set_forced_termination_wait_timeはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_egg_set_forced_termination_wait_time()を使ってください。

オブジェクトが破棄されるときに行われる外部コマンド強制終了時に待つ時間(ミリ秒)を設定します。timeoutが0なら外部コマンドの終了を待ちません。デフォルト値は10です。

egg :

GCutEgg

timeout :

タイムアウト時間(ミリ秒)

1.0.6から

プロパティ詳細

"command"プロパティ

  "command"                  gpointer              : Read / Write

実行する外部コマンド。

シグナル詳細

"error"シグナル

void                user_function                      (GCutEgg *egg,
                                                        gpointer error,
                                                        gpointer user_data)      : Run Last

外部プロセス関連のエラーが発生した毎に発行されます。(例: 入出力エラー)

egg :

シグナルを受け取るオブジェクト。

error :

外部プロセスのエラー。(GError

user_data :

シグナルハンドラが接続された時にユーザが指定したデータ。

1.0.6から


"error-received"シグナル

void                user_function                      (GCutEgg *egg,
                                                        gchar   *chunk,
                                                        guint64  size,
                                                        gpointer user_data)      : Run Last

外部プロセスが標準エラー出力に出力したデータが読み込まれる毎に発行されます。

外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。

egg :

シグナルを受け取るオブジェクト。

chunk :

外部プロセスの標準エラー出力から読み込んだデータ。

size :

chunkのサイズ。(gsize

user_data :

シグナルハンドラが接続された時にユーザが指定したデータ。

1.0.6から


"output-received"シグナル

void                user_function                      (GCutEgg *egg,
                                                        gchar   *chunk,
                                                        guint64  size,
                                                        gpointer user_data)      : Run Last

外部プロセスが標準出力に出力したデータが読み込まれる毎に発行されます。

外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。

egg :

シグナルを受け取るオブジェクト。

chunk :

外部プロセスの標準出力から読み込んだデータ。

size :

chunkのサイズ。(gsize

user_data :

シグナルハンドラが接続された時にユーザが指定したデータ。

1.0.6から


"reaped"シグナル

void                user_function                      (GCutEgg *egg,
                                                        gint     status,
                                                        gpointer user_data)      : Run Last

外部プロセスが終了した時に発行されます。

外部コマンドが終了したこと検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。

egg :

シグナルを受け取るオブジェクト。

status :

外部プロセスの終了ステータス。

user_data :

シグナルハンドラが接続された時にユーザが指定したデータ。

1.0.6から

cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-9.html0000644000175000017500000000541011525703037023354 0ustar koukou 1.0.9での新しいシンボル一覧

1.0.9での新しいシンボル一覧

C

CPPCUTTER_ENABLED, CPPCUTTER_ENABLED
cppcut_assert_equal, cppcut_assert_equal()
CPPCUT_BEGIN_TEST_DECLS, CPPCUT_BEGIN_TEST_DECLS
CPPCUT_END_TEST_DECLS, CPPCUT_END_TEST_DECLS
cut_set_actual, cut_set_actual()
cut_set_expected, cut_set_expected()

G

gcut_hash_table_inspect_sorted, gcut_hash_table_inspect_sorted ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/soupcut-server.xml0000644000175000017500000001420211525703010024434 0ustar koukou ]> 便利なHTTPサーバーAPI 3 Cutterライブラリ 便利なHTTPサーバーAPI HTTPサーバーとして動作するためのAPI。 概要 SoupServer * soupcut_server_take (SoupServer *server); SoupServer * soupcut_server_take_new (GMainContext *context); const gchar * soupcut_server_build_uri (SoupServer *server, const gchar *path); 説明 SoupServerの便利なラッパー。 詳細 soupcut_server_take () soupcut_server_take SoupServer * soupcut_server_take (SoupServer *server); サーバーは tear down 時に自動的にシャットダウンされ、g_object_unref()により解放されます。 server : SoupServerオブジェクト。 戻り値 :serverはCutterが所有権を持つので、g_object_unref()を呼ばないでください。 1.0.8から soupcut_server_take_new () soupcut_server_take_new SoupServer * soupcut_server_take_new (GMainContext *context); コンテキストがcontextであるSoupServerオブジェクトを生成して返します。サーバーはtear down 時に自動的にシャットダウンされ、 context : サーバーのGMainContextコンテキスト。 戻り値 :新たにSoupServerオブジェクトを生成します。作成されたサーバーはCutterが所有権を持つので、g_object_unref()を呼ばないでください。 1.0.8から soupcut_server_build_uri () soupcut_server_build_uri const gchar * soupcut_server_build_uri (SoupServer *server, const gchar *path); @server のベースURIにパスとして @path を組み合わせたURIの文字列を作成します。 server : SoupServerオブジェクト。 path : パス。 戻り値 :Cutterが所有するURI文字列。解放しないで下さい。 1.0.8から 参考 HTTPクライアント・サーバ用の検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-readable-differ.xml0000644000175000017500000000166111525702773025237 0ustar koukou ]> CutReadableDiffer 3 Cutterライブラリ CutReadableDiffer 概要 説明 詳細 cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.4.xml0000644000175000017500000002414611525702760023765 0ustar koukou ]> A gcut_assert_equal_hash_table_string_string, function in GLibサポート付きの検証 gcut_assert_equal_time_val, function in GLibサポート付きの検証 C CutSubProcess, struct in マルチプロセス CutSubProcessGroup, struct in マルチプロセス cut_get_current_test_context, macro in Cutter cut_set_attributes, macro in Cutter cut_set_current_test_context, macro in Cutter cut_sub_process_get_elapsed, function in マルチプロセス cut_sub_process_get_exclude_directories, function in マルチプロセス cut_sub_process_get_exclude_files, function in マルチプロセス cut_sub_process_get_fatal_failures, function in マルチプロセス cut_sub_process_get_multi_thread, function in マルチプロセス cut_sub_process_get_source_directory, function in マルチプロセス cut_sub_process_get_target_test_case_names, function in マルチプロセス cut_sub_process_get_target_test_names, function in マルチプロセス cut_sub_process_get_test_directory, function in マルチプロセス cut_sub_process_get_total_elapsed, function in マルチプロセス cut_sub_process_group_add, function in マルチプロセス cut_sub_process_group_run, function in マルチプロセス cut_sub_process_group_run_async, function in マルチプロセス cut_sub_process_group_wait, function in マルチプロセス cut_sub_process_is_crashed, function in マルチプロセス cut_sub_process_is_running, function in マルチプロセス cut_sub_process_is_success, function in マルチプロセス cut_sub_process_run, function in マルチプロセス cut_sub_process_run_async, function in マルチプロセス cut_sub_process_set_exclude_directories, function in マルチプロセス cut_sub_process_set_exclude_files, function in マルチプロセス cut_sub_process_set_fatal_failures, function in マルチプロセス cut_sub_process_set_multi_thread, function in マルチプロセス cut_sub_process_set_source_directory, function in マルチプロセス cut_sub_process_set_target_test_case_names, function in マルチプロセス cut_sub_process_set_target_test_names, function in マルチプロセス cut_sub_process_set_test_directory, function in マルチプロセス cut_sub_process_wait, function in マルチプロセス cut_take_new_sub_process, function in マルチプロセス cut_take_new_sub_process_group, function in マルチプロセス H gcut_hash_table_string_string_new, function in GLibサポート付きテストユーティリティ T gcut_take_hash_table, function in GLibサポート付きテストユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/up.png0000644000175000017500000000062611525703037022054 0ustar koukouPNG  IHDRw=bKGD pHYs  ~tIME2.E#IDATx=J@Fo] !+2[Z<@/9|t$D9nnBjBRIsI:H8UPN1fcsN95M㧖ɵ 束1~pEe$I 7nrDf!;`'ykI䲤sI_]y^^I>O>?YBIENDB`cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Types-for-GLib-support.html0000644000175000017500000001665111525703037027336 0ustar koukou GLibサポート用の型

GLibサポート用の型

GLibサポート用の型 — GLibサポート付きテストで使う型です。

概要

void                (*GCutInspectFunction)              (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
#define             GCUT_TYPE_ERROR
#define             GCUT_TYPE_SIZE
GType               gcut_error_get_type                 (void);
GType               gcut_size_get_type                  (void);

説明

GLibサポート付きテストで使う型がいくつかあります。

詳細

GCutInspectFunction ()

void                (*GCutInspectFunction)              (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

data要素の詳細を示すときに呼ばれる関数の型です。データ要素のポインタを渡されるので、dataの詳細をstringに追加してください。

string :

詳細情報を保存するGString

data :

詳細化されるデータ。

user_data :

関数に渡すユーザ用データ。

1.0.6から


GCUT_TYPE_ERROR

#define GCUT_TYPE_ERROR (gcut_error_get_type())

GErrorへの参照を保持するGBoxed型のGType

1.0.7から


GCUT_TYPE_SIZE

#define GCUT_TYPE_SIZE (gcut_size_get_type())

gsizeのためのGType

1.1.3から


gcut_error_get_type ()

GType               gcut_error_get_type                 (void);

戻り値 :


gcut_size_get_type ()

GType               gcut_size_get_type                  (void);

戻り値 :

cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-deprecated.xml0000644000175000017500000003101311525702764025420 0ustar koukou ]> C CPPCUT_BEGIN_TEST_DECLS, macro in CppCutter CPPCUT_END_TEST_DECLS, macro in CppCutter cut_add_data_backward_compatibility, macro in Cutter cut_append_diff, function in 検証作成の補助 cut_assert_equal_g_list_int, function in GLibサポート付きの検証 cut_assert_equal_g_list_string, function in GLibサポート付きの検証 cut_assert_equal_g_type, function in GLibサポート付きの検証 cut_assert_equal_g_value, function in GLibサポート付きの検証 cut_assert_equal_string_or_null, function in 検証 cut_assert_file_exist, function in 検証 cut_assert_g_error, function in GLibサポート付きの検証 cut_assert_path_exist, function in 検証 cut_assert_path_not_exist, function in 検証 cut_assert_remove_path, function in GLibサポート付きの検証 cut_build_fixture_data_path, function in テストユーティリティ cut_keep_message, function in Cutter cut_pending, function in 検証 cut_set_message, function in Cutter cut_set_message_va_list, function in Cutter cut_test_fail_va_list, function in 検証作成の補助 E GCutEgg, struct in GCutEgg GCutEggClass, struct in GCutEgg GCutEggError, enum in GCutEgg gcut_egg_close, function in GCutEgg GCUT_EGG_ERROR, macro in GCutEgg gcut_egg_error_quark, function in GCutEgg gcut_egg_get_env, function in GCutEgg gcut_egg_get_error, function in GCutEgg gcut_egg_get_flags, function in GCutEgg gcut_egg_get_forced_termination_wait_time, function in GCutEgg gcut_egg_get_input, function in GCutEgg gcut_egg_get_output, function in GCutEgg gcut_egg_get_pid, function in GCutEgg gcut_egg_hatch, function in GCutEgg gcut_egg_kill, function in GCutEgg gcut_egg_new, function in GCutEgg gcut_egg_new_argv, function in GCutEgg gcut_egg_new_array, function in GCutEgg gcut_egg_new_strings, function in GCutEgg gcut_egg_new_va_list, function in GCutEgg gcut_egg_set_env, function in GCutEgg gcut_egg_set_flags, function in GCutEgg gcut_egg_set_forced_termination_wait_time, function in GCutEgg gcut_egg_wait, function in GCutEgg gcut_egg_write, function in GCutEgg L gcut_list_enum_inspect, macro in GList用の検証ユーティリティ gcut_list_flags_inspect, macro in GList用の検証ユーティリティ gcut_list_int_equal, macro in GList用の検証ユーティリティ gcut_list_int_inspect, macro in GList用の検証ユーティリティ gcut_list_object_inspect, macro in GList用の検証ユーティリティ gcut_list_string_equal, macro in GList用の検証ユーティリティ gcut_list_string_inspect, macro in GList用の検証ユーティリティ gcut_list_uint_equal, macro in GList用の検証ユーティリティ gcut_list_uint_inspect, macro in GList用の検証ユーティリティ S setup, function in Cutter T gcut_take_new_list_string_backward_compatibility, macro in GLibサポート付きテストユーティリティ teardown, function in Cutter cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-3.html0000644000175000017500000000752611525703037023360 0ustar koukou 1.0.3での新しいシンボル一覧

1.0.3での新しいシンボル一覧

C

cut_add_data, cut_add_data()
cut_append_diff, cut_append_diff ()

G

gcut_assert_equal_list_int, gcut_assert_equal_list_int ()
gcut_assert_equal_list_string, gcut_assert_equal_list_string ()
gcut_assert_equal_list_uint, gcut_assert_equal_list_uint ()
gcut_assert_equal_type, gcut_assert_equal_type ()
gcut_assert_equal_value, gcut_assert_equal_value ()
gcut_assert_error, gcut_assert_error ()
gcut_assert_remove_path, gcut_assert_remove_path ()
gcut_list_string_free, gcut_list_string_free ()
gcut_list_string_new, gcut_list_string_new ()
gcut_take_error, gcut_take_error ()
gcut_take_list, gcut_take_list ()
gcut_take_object, gcut_take_object ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-experimental.xml0000644000175000017500000001323511525702771024736 0ustar koukou ]> 実験 3 Cutterライブラリ 実験 実験的なAPI 概要 #define cut_fork #define cut_wait_process (pid, usec_timeout) #define cut_fork_get_stdout_message (pid) #define cut_fork_get_stderr_message (pid) 説明 将来、このAPIは変更されるかもしれません。 詳細 cut_fork cut_fork #define cut_fork() 子プロセスを生成します。 例: int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { do_something_for_child_process(); _exit(EXIT_SUCCESS); } do_something_for_parent_process(); 戻り値 :プロセスID。 0.8から cut_wait_process() cut_wait_process #define cut_wait_process(pid, usec_timeout) pidで指定されたプロセスの終了を待ちます。 例: int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { do_something_for_child_process(); _exit(EXIT_SUCCESS); } do_something_for_parent_process(); cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); pid : 終了を待つプロセスのID。 usec_timeout : タイムアウトする時間。100万分の1秒単位で指定。 0.8から cut_fork_get_stdout_message() cut_fork_get_stdout_message #define cut_fork_get_stdout_message(pid) pidで指定されたプロセスからメッセージを読みます。 例: int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { g_print("I'm a child."); _exit(EXIT_SUCCESS); } cut_assert_equal_string("I'm a child.", cut_fork_get_stdout_message(pid)); cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); pid : プロセスID。 戻り値 :pidで指定されたプロセスの標準出力から読み込まれたメッセージ。 0.8から cut_fork_get_stderr_message() cut_fork_get_stderr_message #define cut_fork_get_stderr_message(pid) pidで指定されたプロセスからメッセージを読みます。 例: int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { g_print("I'm a child."); _exit(EXIT_SUCCESS); } cut_assert_equal_string("I'm a child.", cut_fork_get_stderr_message(pid)); cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); pid : プロセスID。 戻り値 :pidで指定されたプロセスの標準エラー出力から読み込まれたメッセージ。 0.8から cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-8.html0000644000175000017500000001106211525703037023353 0ustar koukou 1.0.8での新しいシンボル一覧

1.0.8での新しいシンボル一覧

G

gcut_hash_table_string_string_copy, gcut_hash_table_string_string_copy ()

S

SOUPCUTTER_ENABLED, SOUPCUTTER_ENABLED
soupcut_client_assert_equal_body, soupcut_client_assert_equal_body ()
soupcut_client_assert_equal_content_type, soupcut_client_assert_equal_content_type ()
soupcut_client_assert_match_body, soupcut_client_assert_match_body ()
soupcut_client_assert_response, soupcut_client_assert_response ()
soupcut_client_get, soupcut_client_get ()
soupcut_client_get_async_context, soupcut_client_get_async_context ()
soupcut_client_get_latest_message, soupcut_client_get_latest_message ()
soupcut_client_get_n_messages, soupcut_client_get_n_messages ()
soupcut_client_new, soupcut_client_new ()
soupcut_client_send_message, soupcut_client_send_message ()
soupcut_client_set_base, soupcut_client_set_base ()
soupcut_message_assert_equal_content_type, soupcut_message_assert_equal_content_type ()
soupcut_server_build_uri, soupcut_server_build_uri ()
soupcut_server_take, soupcut_server_take ()
soupcut_server_take_new, soupcut_server_take_new ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-solaris.html0000644000175000017500000001162011525703037025344 0ustar koukou Solarisへインストール

Solarisへインストール

Solarisへインストール — SolarisへのCutterのインストール方法

はじめに

SolraisへのCutterのインストール方法を説明します。

GLibのインストール

Cutterを動かすためにはGLib 2.16以降が必要です。Solaris 10にはGLib 2.16以降のパッケージがないため、自分でビルド・インストールしなければいけません。

GLibをビルドするためにはGNU gettext、GNU libiconvが必要です。これらのソフトウェアは Sunfreeware のパッケージを利用してインストールすることができます。

例えば、GNU gettextは以下のようにインストールできます。

% mkdir -p ~/packages
% cd ~/packages
% wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/gettext-0.17-sol10-sparc-local.gz
% gzip -d gettext-0.17-sol10-sparc-local.gz
% pkgadd -d ./gettext-0.17-sol10-sparc-local

同様にGNU libiconvもインストールしてください。

また、Cutterを用いた開発では、GNUビルドツールが必要になるので、GNU Autoconf、GNU Automake、GNU Libtoolもインストールしておいてください。必須ではありませんが、国際化されたソフトウェアを開発する場合はintltoolもあるとよいでしょう。

パッケージをインストールしたらGLibをビルドすることができます。以下のようにしてビルド・インストールできます。GNU make を使うことに注意してください。

% mkdir -p ~/src
% cd ~/src
% wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz
% tar xvzf glib-2.22.4.tar.gz
% cd glib-2.22.4
% ./configure --with-libiconv=gnu
% gmake
% sudo gmake install

Cutterのインストール

CutterはGNUビルドツールを利用しているので、他のフリーソフトウェアと同じように以下のようにインストールできます。GNU makeを使うことに注意してください。

% mkdir -p ~/src
% cd ~/src
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz
% tar xvzf cutter-1.1.7.tar.gz
% cd cutter-1.1.7
% ./configure
% gmake
% gmake install

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Types.html0000644000175000017500000001323411525703037024217 0ustar koukou

型 — テストで使う型です。

概要

void                (*CutDestroyFunction)               (void *data);
void                (*CutCallbackFunction)              (void);
typedef             cut_boolean;
#define             CUT_TRUE
#define             CUT_FALSE

説明

テストで使う型がいくつかあります。

詳細

CutDestroyFunction ()

void                (*CutDestroyFunction)               (void *data);

データが破棄されるときに呼ばれる関数の型です。データのポインタを受け取り、そのデータ用に割り当てられたメモリとリソースを開放します。

data :

破棄するデータ。

CutCallbackFunction ()

void                (*CutCallbackFunction)              (void);


cut_boolean

typedef int cut_boolean;

標準的な真偽値型。この型の値はCUT_TRUECUT_FALSEだけです。


CUT_TRUE

#define CUT_TRUE

cut_boolean型のためにCUT_TRUEを定義します。


CUT_FALSE

#define CUT_FALSE

cut_boolean型のためにCUT_FALSEを定義します。

cutter-testing-framework-1.1.7/doc/reference/ja/html/index-0-8.html0000644000175000017500000000544211525703037023222 0ustar koukou 0.8での新しいシンボル一覧

0.8での新しいシンボル一覧

C

cut_assert_equal_g_list_int, cut_assert_equal_g_list_int ()
cut_assert_equal_g_list_string, cut_assert_equal_g_list_string ()
cut_assert_errno, cut_assert_errno ()
cut_fork, cut_fork
cut_fork_get_stderr_message, cut_fork_get_stderr_message()
cut_fork_get_stdout_message, cut_fork_get_stdout_message()
cut_omit, cut_omit ()
cut_wait_process, cut_wait_process()
cutter-testing-framework-1.1.7/doc/reference/ja/html/GCutEventLoop.html0000644000175000017500000011120411525703037024301 0ustar koukou 抽象化されたイベントループ

抽象化されたイベントループ

抽象化されたイベントループ — GCutterで使うイベントループをカスタマイズするための抽象化されたイベントループAPI。

概要

#define             GCUT_EVENT_LOOP_ERROR
                    GCutEventLoop;
                    GCutEventLoopClass;
GQuark              gcut_event_loop_error_quark         (void);
void                gcut_event_loop_run                 (GCutEventLoop *loop);
gboolean            gcut_event_loop_iterate             (GCutEventLoop *loop,
                                                         gboolean may_block);
void                gcut_event_loop_quit                (GCutEventLoop *loop);
guint               gcut_event_loop_watch_io            (GCutEventLoop *loop,
                                                         GIOChannel *channel,
                                                         GIOCondition condition,
                                                         GIOFunc function,
                                                         gpointer data);
guint               gcut_event_loop_watch_child         (GCutEventLoop *loop,
                                                         GPid pid,
                                                         GChildWatchFunc function,
                                                         gpointer data);
guint               gcut_event_loop_watch_child_full    (GCutEventLoop *loop,
                                                         gint priority,
                                                         GPid pid,
                                                         GChildWatchFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);
guint               gcut_event_loop_add_timeout         (GCutEventLoop *loop,
                                                         gdouble interval_in_seconds,
                                                         GSourceFunc function,
                                                         gpointer data);
guint               gcut_event_loop_add_timeout_full    (GCutEventLoop *loop,
                                                         gint priority,
                                                         gdouble interval_in_seconds,
                                                         GSourceFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);
guint               gcut_event_loop_add_idle            (GCutEventLoop *loop,
                                                         GSourceFunc function,
                                                         gpointer data);
guint               gcut_event_loop_add_idle_full       (GCutEventLoop *loop,
                                                         gint priority,
                                                         GSourceFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);
gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                         guint tag);

オブジェクト階層

  GObject
   +----GCutEventLoop

説明

GCutEventLoopはイベントループをカプセル化します。イベントループはGCutProcessで使われています。GCutProcessはデフォルトではGLibのデフォルトGMainContextを使います。

ふつうはカスタムGCutEventLoopは必要ありません。必要になるのは特別な場合だけです。例えば、イベントループのバックエンドにGLibのGMainLoopではなく、libevのイベントループに使っている場合です。

GCutterはGLibのGMainContextとGMainLoop用のGCutEventLoopであるGCutGLibEventLoopを提供します。

詳細

GCUT_EVENT_LOOP_ERROR

#define GCUT_EVENT_LOOP_ERROR           (gcut_event_loop_error_quark())


GCutEventLoop

typedef struct _GCutEventLoop GCutEventLoop;


GCutEventLoopClass

typedef struct {
    GObjectClass parent_class;

    void     (*run)              (GCutEventLoop   *loop);
    gboolean (*iterate)          (GCutEventLoop   *loop,
                                  gboolean         may_block);
    void     (*quit)             (GCutEventLoop   *loop);

    guint    (*watch_io)         (GCutEventLoop   *loop,
                                  GIOChannel      *channel,
                                  GIOCondition     condition,
                                  GIOFunc          function,
                                  gpointer         data);
    guint    (*watch_child_full) (GCutEventLoop   *loop,
                                  gint             priority,
                                  GPid             pid,
                                  GChildWatchFunc  function,
                                  gpointer         data,
                                  GDestroyNotify   notify);
    guint    (*add_timeout_full) (GCutEventLoop   *loop,
                                  gint             priority,
                                  gdouble          interval_in_seconds,
                                  GSourceFunc      function,
                                  gpointer         data,
                                  GDestroyNotify   notify);
    guint    (*add_idle_full)    (GCutEventLoop   *loop,
                                  gint             priority,
                                  GSourceFunc      function,
                                  gpointer         data,
                                  GDestroyNotify   notify);
    gboolean (*remove)           (GCutEventLoop   *loop,
                                  guint            tag);
} GCutEventLoopClass;


gcut_event_loop_error_quark ()

GQuark              gcut_event_loop_error_quark         (void);

戻り値 :


gcut_event_loop_run ()

void                gcut_event_loop_run                 (GCutEventLoop *loop);

gcut_event_loop_quit()が呼ばれるまでイベントループを回します。

loop :

GCutEventLoop

1.1.6から


gcut_event_loop_iterate ()

gboolean            gcut_event_loop_iterate             (GCutEventLoop *loop,
                                                         gboolean may_block);

イベントループを1回だけ回します。もし、イベントがなくmay_blockTRUEなら、イベントがくるまで待ちつづけます。may_blockFALSEなら、イベントがくるのを待ちません。

loop :

GCutEventLoop

may_block :

呼び出しがブロックするかどうか。

戻り値 :

イベントを処理したらTRUE

1.1.6から


gcut_event_loop_quit ()

void                gcut_event_loop_quit                (GCutEventLoop *loop);

実行中のloopを止めます。

loop :

GCutEventLoop

1.1.6から


gcut_event_loop_watch_io ()

guint               gcut_event_loop_watch_io            (GCutEventLoop *loop,
                                                         GIOChannel *channel,
                                                         GIOCondition condition,
                                                         GIOFunc function,
                                                         gpointer data);

channelをデフォルトの優先度でloopに追加します。channelconditionイベントが発生したらfunctionが呼ばれます。

loop :

GCutEventLoop

channel :

GIOChannel

condition :

監視する状態。

function :

呼び出される関数

data :

functionに渡されるデータ

戻り値 :

イベントID。

1.1.6から


gcut_event_loop_watch_child ()

guint               gcut_event_loop_watch_child         (GCutEventLoop *loop,
                                                         GPid pid,
                                                         GChildWatchFunc function,
                                                         gpointer data);

pidの子プロセスが終了した時に呼ばれるfunctionをデフォルトの優先度でloopに追加します。

loop :

GCutEventLoop

pid :

監視するプロセスのID

function :

呼び出される関数

data :

functionに渡されるデータ

戻り値 :

イベントID。

1.1.6から


gcut_event_loop_watch_child_full ()

guint               gcut_event_loop_watch_child_full    (GCutEventLoop *loop,
                                                         gint priority,
                                                         GPid pid,
                                                         GChildWatchFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);

pidの子プロセスが終了した時に呼ばれるfunctionをデフォルトの優先度でloopに追加します。

loop :

GCutEventLoop

priority :

このイベントの優先度。

pid :

監視するプロセスのID

function :

呼び出される関数

data :

functionに渡されるデータ

notify :

このイベントが削除された時に呼ばれる関数またはNULL

戻り値 :

イベントID。

1.1.6から


gcut_event_loop_add_timeout ()

guint               gcut_event_loop_add_timeout         (GCutEventLoop *loop,
                                                         gdouble interval_in_seconds,
                                                         GSourceFunc function,
                                                         gpointer data);

一定間隔で呼び出されるfunctionをデフォルト優先度で追加します。

loop :

GCutEventLoop

interval_in_seconds :

functionを呼び出す感覚。単位は秒。

function :

呼び出される関数

data :

functionに渡されるデータ

戻り値 :

イベントID。

1.1.6から


gcut_event_loop_add_timeout_full ()

guint               gcut_event_loop_add_timeout_full    (GCutEventLoop *loop,
                                                         gint priority,
                                                         gdouble interval_in_seconds,
                                                         GSourceFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);

定期的に呼び出される関数を優先度priorityで追加します。

loop :

GCutEventLoop

priority :

このイベントの優先度。

interval_in_seconds :

functionを呼び出す感覚。単位は秒。

function :

呼び出される関数

data :

functionに渡されるデータ

notify :

このイベントが削除された時に呼ばれる関数またはNULL

戻り値 :

イベントID。

1.1.6から


gcut_event_loop_add_idle ()

guint               gcut_event_loop_add_idle            (GCutEventLoop *loop,
                                                         GSourceFunc function,
                                                         gpointer data);

デフォルト優先度より高い優先度がない場合に呼び出される関数functionを追加します。

loop :

GCutEventLoop

function :

呼び出される関数

data :

functionに渡されるデータ

戻り値 :

イベントID。

1.1.6から


gcut_event_loop_add_idle_full ()

guint               gcut_event_loop_add_idle_full       (GCutEventLoop *loop,
                                                         gint priority,
                                                         GSourceFunc function,
                                                         gpointer data,
                                                         GDestroyNotify notify);

優先度priorityより高い優先度のイベントがない場合に呼び出される関数functionを追加します。

loop :

GCutEventLoop

priority :

このイベントの優先度。

function :

呼び出される関数

data :

functionに渡されるデータ

notify :

このイベントが削除された時に呼ばれる関数またはNULL

戻り値 :

イベントID。

1.1.6から


gcut_event_loop_remove ()

gboolean            gcut_event_loop_remove              (GCutEventLoop *loop,
                                                         guint tag);

IDがtagのイベントを削除します。

loop :

GCutEventLoop

tag :

削除するソースのID。

戻り値 :

ソースが見つかって削除されたらTRUE

1.1.6から

cutter-testing-framework-1.1.7/doc/reference/ja/html/soupcut-assertions.xml0000644000175000017500000002633311525703007025336 0ustar koukou ]> HTTPクライアント・サーバ用の検証 3 Cutterライブラリ HTTPクライアント・サーバ用の検証 libsoupを使ってあなたのHTTPクライアント・サーバが期待通りに動作しているかを検証します。 概要 void soupcut_message_assert_equal_content_type (const gchar *expected, SoupMessage *message, ...); void soupcut_client_assert_equal_content_type (const gchar *expected, SoupCutClient *client, ...); void soupcut_client_assert_response (SoupCutClient *client, ...); void soupcut_client_assert_equal_body (const gchar *expected, SoupCutClient *client, ...); void soupcut_client_assert_match_body (const gchar *pattern, SoupCutClient *client, ...); 説明 詳細 soupcut_message_assert_equal_content_type () soupcut_message_assert_equal_content_type void soupcut_message_assert_equal_content_type (const gchar *expected, SoupMessage *message, ...); expected == message->response_headers->content_typeが成り立つときパスします。 expected : 期待するContent-Type。 message : SoupMessageオブジェクト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.8から soupcut_client_assert_equal_content_type () soupcut_client_assert_equal_content_type void soupcut_client_assert_equal_content_type (const gchar *expected, SoupCutClient *client, ...); expectedclientの最後のメッセージのContent-Typeと等しいとパスします。 expected : 期待するContent-Type。 client : SoupCutClientオブジェクト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.8から soupcut_client_assert_response () soupcut_client_assert_response void soupcut_client_assert_response (SoupCutClient *client, ...); clientのステータスコードが2XXならパスします。 client : SoupCutClientオブジェクト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.8から soupcut_client_assert_equal_body () soupcut_client_assert_equal_body void soupcut_client_assert_equal_body (const gchar *expected, SoupCutClient *client, ...); expected == message->response_body->dataが成り立つときパスします。 expected : 期待するレスポンスの本体。 client : SoupCutClientオブジェクト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.8から soupcut_client_assert_match_body () soupcut_client_assert_match_body void soupcut_client_assert_match_body (const gchar *pattern, SoupCutClient *client, ...); patternclientの最後のメッセージのレスポンスの本体にマッチしたときにパスします。 pattern : 正規表現。 client : SoupCutClientオブジェクト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.8から cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-io.xml0000644000175000017500000000355111525703002023003 0ustar koukou ]> gcut-io 3 Cutterライブラリ gcut-io 概要 gchar * gcut_io_inspect_condition (GIOCondition condition); 説明 詳細 gcut_io_inspect_condition () gcut_io_inspect_condition gchar * gcut_io_inspect_condition (GIOCondition condition); condition : 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/html/index-0-4.html0000644000175000017500000000325411525703037023215 0ustar koukou 0.4での新しいシンボル一覧

0.4での新しいシンボル一覧

cutter-testing-framework-1.1.7/doc/reference/ja/html/soupcutter.xml0000644000175000017500000000506211525703010023647 0ustar koukou ]> SoupCutter 3 Cutterライブラリ SoupCutter libsoupを用いたHTTPサポート付きのCutter。 概要 #define SOUPCUTTER_ENABLED 説明 SoupCutterはlibsoupを用いたHTTP関連のたくさんの便利な機能をCutterに追加します。より簡単にHTTPのテストを書きたい場合はSoupCutterの使用を検討してください。 SoupCutterを使うことは簡単です。<cutter.h>または<gcutter.h>の代わりに<soupcutter.h>をincludeし、cutter.pcまたはgcutter.pcの代わりにsoupcutter.pcを使うだけです。 test-xxx.c: -#include <cutter.h> +#include <soupcutter.h> configure.ac: -AC_CHECK_CUTTER +AC_CHECK_SOUPCUTTER Makefile.am: -XXX_CFLAGS = $(CUTTER_CFLAGS) -XXX_LIBS = $(CUTTER_LIBS) +XXX_CFLAGS = $(SOUPCUTTER_CFLAGS) +XXX_LIBS = $(SOUPCUTTER_LIBS) 詳細 SOUPCUTTER_ENABLED SOUPCUTTER_ENABLED #define SOUPCUTTER_ENABLED 1 SoupCutterが有効なとき定義されます。1.0.8から 参考 libsoupを使ったHTTPクライアント・サーバ用の検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-Utilities-for-GList.html0000644000175000017500000012306011525703037030636 0ustar koukou GList用の検証ユーティリティ

GList用の検証ユーティリティ

GList用の検証ユーティリティ — GListに関する検証をもっと簡単に書くためのユーティリティ。

概要

gboolean            gcut_list_equal                     (const GList *list1,
                                                         const GList *list2,
                                                         GEqualFunc equal_func);
gchar *             gcut_list_inspect                   (const GList *list,
                                                         GCutInspectFunction inspect_func,
                                                         gpointer user_data);
gboolean            gcut_list_equal_int                 (const GList *list1,
                                                         const GList *list2);
gchar *             gcut_list_inspect_int               (const GList *list);
gboolean            gcut_list_equal_uint                (const GList *list1,
                                                         const GList *list2);
gchar *             gcut_list_inspect_uint              (const GList *list);
gboolean            gcut_list_equal_string              (const GList *list1,
                                                         const GList *list2);
gchar *             gcut_list_inspect_string            (const GList *list);
gchar *             gcut_list_inspect_object            (const GList *list);
gchar *             gcut_list_inspect_enum              (GType type,
                                                         const GList *list);
gchar *             gcut_list_inspect_flags             (GType type,
                                                         const GList *list);
#define             gcut_list_int_equal                 (list1,
                                                         list2)
#define             gcut_list_int_inspect               (list)
#define             gcut_list_uint_equal                (list1,
                                                         list2)
#define             gcut_list_uint_inspect              (list)
#define             gcut_list_string_equal              (list1,
                                                         list2)
#define             gcut_list_string_inspect            (list)
#define             gcut_list_object_inspect            (list)
#define             gcut_list_enum_inspect              (list,
                                                         type)
#define             gcut_list_flags_inspect             (list,
                                                         type)

説明

検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。

このユーティリティはGListに関する検証の作成を補助します。

詳細

gcut_list_equal ()

gboolean            gcut_list_equal                     (const GList *list1,
                                                         const GList *list2,
                                                         GEqualFunc equal_func);

ふたつのGListlist1list2を比較します。equal_funclist1list2の対応する値それぞれに対して呼ばれます。

例:

1
TODO

list1 :

比較するGList

list2 :

比較するGList

equal_func :

ふたつの値を比較する関数。

戻り値 :

list1list2のすべての対応する値がequal_funcでTRUEの場合はTRUE、そうでない場合はFALSE。

1.0.5から


gcut_list_inspect ()

gchar *             gcut_list_inspect                   (const GList *list,
                                                         GCutInspectFunction inspect_func,
                                                         gpointer user_data);

listの詳細を返します。listのそれぞれの値はinspect_funcで詳細化されます。返された文字列が必要なくなったときは開放してください。

例:

1
TODO

list :

詳細を示すGList

inspect_func :

各値の詳細を示す関数。

user_data :

関数に渡すユーザ用データ。

戻り値 :

listの詳細を示した文字列。

1.0.5から


gcut_list_equal_int ()

gboolean            gcut_list_equal_int                 (const GList *list1,
                                                         const GList *list2);

ふたつのGListlist1list2を比較します。list1list2gintGListでなければいけません。

list1 :

比較するgintGList

list2 :

比較するgintGList

戻り値 :

list1list2の対応するすべての値が同じ場合はTRUE、そうでない場合はFALSE。

1.0.6から


gcut_list_inspect_int ()

gchar *             gcut_list_inspect_int               (const GList *list);

listの詳細を返します。listgintGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示すgintGList

戻り値 :

listの詳細を示した文字列。

1.0.6から


gcut_list_equal_uint ()

gboolean            gcut_list_equal_uint                (const GList *list1,
                                                         const GList *list2);

ふたつのGListlist1list2を比較します。list1list2guintGListでなければいけません。

list1 :

比較するguintGList

list2 :

比較するguintGList

戻り値 :

list1list2のすべての対応する符号なし整数値が同じ値の場合はTRUE、そうでない場合はFALSE。

1.0.6から


gcut_list_inspect_uint ()

gchar *             gcut_list_inspect_uint              (const GList *list);

listの詳細を返します。listguintGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示すguintGListです。

戻り値 :

listの詳細を示した文字列。

1.0.6から


gcut_list_equal_string ()

gboolean            gcut_list_equal_string              (const GList *list1,
                                                         const GList *list2);

ふたつのGListlist1list2を比較します。list1list2は文字列のGListでなければいけません。

list1 :

比較する文字列のGList

list2 :

比較する文字列のGList

戻り値 :

list1list2のすべての対応する文字列が同じ内容の文字列の場合はTRUE、そうでない場合はFALSE。

1.0.6から


gcut_list_inspect_string ()

gchar *             gcut_list_inspect_string            (const GList *list);

listの詳細を返します。listは文字列のGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示す文字列のGList

戻り値 :

listの詳細を示した文字列。

1.0.6から


gcut_list_inspect_object ()

gchar *             gcut_list_inspect_object            (const GList *list);

listの詳細を返します。listGObjectGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示すGObjectGList

戻り値 :

listの詳細を示した文字列。

1.0.6から


gcut_list_inspect_enum ()

gchar *             gcut_list_inspect_enum              (GType type,
                                                         const GList *list);

listの詳細を返します。listGEnumの列挙値のGListでなければいけません。返された文字列が必要なくなったときは開放してください。

type :

GEnumの型。

list :

詳細を示す列挙値のGList

戻り値 :

listの詳細を示した文字列。

1.0.6から


gcut_list_inspect_flags ()

gchar *             gcut_list_inspect_flags             (GType type,
                                                         const GList *list);

listの詳細を返します。listGFlagsのフラグ値のGListでなければいけません。返された文字列が必要なくなったときは開放してください。

type :

GFlagsの型。

list :

詳細を示すフラグ値のGList

戻り値 :

listの詳細を示した文字列。

1.0.6から


gcut_list_int_equal()

#define             gcut_list_int_equal(list1, list2)

Warning

gcut_list_int_equalはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_equal_int()を使って下さい。

ふたつのGListlist1list2を比較します。list1list2gintGListでなければいけません。

list1 :

比較するgintGList

list2 :

比較するgintGList

戻り値 :

list1list2の対応するすべての値が同じ場合はTRUE、そうでない場合はFALSE。

1.0.5から


gcut_list_int_inspect()

#define             gcut_list_int_inspect(list)

Warning

gcut_list_int_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_int()を使ってください。

listの詳細を返します。listgintGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示すgintGList

戻り値 :

listの詳細を示した文字列。

1.0.5から


gcut_list_uint_equal()

#define             gcut_list_uint_equal(list1, list2)

Warning

gcut_list_uint_equalはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_equal_uint()を使ってください。

ふたつのGListlist1list2を比較します。list1list2guintGListでなければいけません。

list1 :

比較するguintGList

list2 :

比較するguintGList

戻り値 :

list1list2のすべての対応する符号なし整数値が同じ値の場合はTRUE、そうでない場合はFALSE。

1.0.5から


gcut_list_uint_inspect()

#define             gcut_list_uint_inspect(list)

Warning

gcut_list_uint_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_uint()を使ってください。

listの詳細を返します。listguintGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示すguintGListです。

戻り値 :

listの詳細を示した文字列。

1.0.5から


gcut_list_string_equal()

#define             gcut_list_string_equal(list1, list2)

Warning

gcut_list_string_equalはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_equal_string()を使ってください。

ふたつのGListlist1list2を比較します。list1list2は文字列のGListでなければいけません。

list1 :

比較する文字列のGList

list2 :

比較する文字列のGList

戻り値 :

list1list2のすべての対応する文字列が同じ内容の文字列の場合はTRUE、そうでない場合はFALSE。

1.0.5から


gcut_list_string_inspect()

#define             gcut_list_string_inspect(list)

Warning

gcut_list_string_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_string()を使ってください。

listの詳細を返します。listは文字列のGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示す文字列のGList

戻り値 :

listの詳細を示した文字列。

1.0.5から


gcut_list_object_inspect()

#define             gcut_list_object_inspect(list)

Warning

gcut_list_object_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_object()を使ってください。

listの詳細を返します。listGObjectGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示すGObjectGList

戻り値 :

listの詳細を示した文字列。

1.0.5から


gcut_list_enum_inspect()

#define             gcut_list_enum_inspect(list, type)

Warning

gcut_list_enum_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_enum()を使ってください。

listの詳細を返します。listGEnumの列挙値のGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示す列挙値のGList

type :

GEnumの型。

戻り値 :

listの詳細を示した文字列。

1.0.5から


gcut_list_flags_inspect()

#define             gcut_list_flags_inspect(list, type)

Warning

gcut_list_flags_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_flags()を使ってください。

listの詳細を返します。listGFlagsのフラグ値のGListでなければいけません。返された文字列が必要なくなったときは開放してください。

list :

詳細を示すフラグ値のGList

type :

GFlagsの型。

戻り値 :

listの詳細を示した文字列。

1.0.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cppcutter.xml0000644000175000017500000001530511525702766023465 0ustar koukou ]> CppCutter 3 Cutterライブラリ CppCutter C++サポート付きのCutter。 概要 #define CPPCUTTER_ENABLED #define CPPCUT_BEGIN_TEST_DECLS #define CPPCUT_END_TEST_DECLS #define cppcut_message (...) 説明 CppCutterはC++で便利な機能をCutterに追加します。C++でテストを書きたい場合はCppCutterの使用を検討してください。 CppCutterを使うことは簡単です。<cutter.h>の代わりに<cppcutter.h>をinlcudeして、cutter.pcの代わりにcppcutter.pcを使うだけです。 test-xxx.cpp: -#include <cutter.h> +#include <cppcutter.h> configure.ac: -AC_CHECK_CUTTER +AC_CHECK_CPPCUTTER Makefile.am: -XXX_CFLAGS = $(CUTTER_CFLAGS) -XXX_LIBS = $(CUTTER_LIBS) +XXX_CFLAGS = $(CPPCUTTER_CFLAGS) +XXX_LIBS = $(CPPCUTTER_LIBS) テスト関数はnamespaceの中に定義します。名前付け規則はCutterと同じです。つまり、'test_...'関数はテスト関数、'setup'または'cut_setup'は初期化関数、'teardown'または'cut_teardown'は後始末関数になります。 test-calc.cpp: #include <cppcutter.h> namespace calc { void test_add (void) { cppcut_assert_equal(3, calc.add(1, 2)); } void test_sub (void) { cppcut_assert_equal(5, calc.sub(9, 4)); } } 新しいテストを追加するときはいつも通り関数を定義するだけです。よくわからないマクロを使う必要はありません。 詳細 CPPCUTTER_ENABLED CPPCUTTER_ENABLED #define CPPCUTTER_ENABLED 1 CppCutterが有効なとき定義されます。1.0.9から CPPCUT_BEGIN_TEST_DECLS CPPCUT_BEGIN_TEST_DECLSCPPCUT_BEGIN_TEST_DECLS #define CPPCUT_BEGIN_TEST_DECLS extern "C" { CPPCUT_BEGIN_TEST_DECLSはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。 テスト関数のプロトタイプ宣言はCPPCUT_BEGIN_TEST_DECLSCPPCUT_END_TEST_DECLSで囲みます: CPPCUT_BEGIN_TEST_DECLS void test_add (); void test_remove (); CPPCUT_END_TEST_DECLS このマクロは単にテスト関数のプロトタイプ宣言を'extern "C" {...}'で囲むだけです。1.0.9から CPPCUT_END_TEST_DECLS CPPCUT_END_TEST_DECLSCPPCUT_END_TEST_DECLS #define CPPCUT_END_TEST_DECLS } CPPCUT_END_TEST_DECLSはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。 CPPCUT_BEGIN_TEST_DECLSを見て下さい。1.0.9から cppcut_message() cppcut_message #define cppcut_message(...) C++らしいAPIで検証の省略可能なメッセージを指定します。メッセージはprintf()と同じAPIか"<<"を使ったストリームと同じAPIを使って指定します。 例: cppcut_assert_equal("abc", "def", cppcut_message("should fail!")); cppcut_assert_equal("abc", "def", cppcut_message() << "should fail!"); ... : 整形文字列に挿入されるパラメータ。 戻り値 : 1.1.0から 参考 C++サポート付きの検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/index-0-3.html0000644000175000017500000000352411525703037023214 0ustar koukou 0.3での新しいシンボル一覧

0.3での新しいシンボル一覧

C

cut_assert_equal_string_with_free, cut_assert_equal_string_with_free ()
cut_assert_null_string, cut_assert_null_string ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-4.html0000644000175000017500000002013311525703037023346 0ustar koukou 1.0.4での新しいシンボル一覧

1.0.4での新しいシンボル一覧

C

CutSubProcess, CutSubProcess
CutSubProcessGroup, CutSubProcessGroup
cut_get_current_test_context, cut_get_current_test_context
cut_set_attributes, cut_set_attributes()
cut_set_current_test_context, cut_set_current_test_context()
cut_sub_process_get_elapsed, cut_sub_process_get_elapsed ()
cut_sub_process_get_exclude_directories, cut_sub_process_get_exclude_directories ()
cut_sub_process_get_exclude_files, cut_sub_process_get_exclude_files ()
cut_sub_process_get_fatal_failures, cut_sub_process_get_fatal_failures ()
cut_sub_process_get_multi_thread, cut_sub_process_get_multi_thread ()
cut_sub_process_get_source_directory, cut_sub_process_get_source_directory ()
cut_sub_process_get_target_test_case_names, cut_sub_process_get_target_test_case_names ()
cut_sub_process_get_target_test_names, cut_sub_process_get_target_test_names ()
cut_sub_process_get_test_directory, cut_sub_process_get_test_directory ()
cut_sub_process_get_total_elapsed, cut_sub_process_get_total_elapsed ()
cut_sub_process_group_add, cut_sub_process_group_add ()
cut_sub_process_group_run, cut_sub_process_group_run ()
cut_sub_process_group_run_async, cut_sub_process_group_run_async ()
cut_sub_process_group_wait, cut_sub_process_group_wait ()
cut_sub_process_is_crashed, cut_sub_process_is_crashed ()
cut_sub_process_is_running, cut_sub_process_is_running ()
cut_sub_process_is_success, cut_sub_process_is_success ()
cut_sub_process_run, cut_sub_process_run ()
cut_sub_process_run_async, cut_sub_process_run_async ()
cut_sub_process_set_exclude_directories, cut_sub_process_set_exclude_directories ()
cut_sub_process_set_exclude_files, cut_sub_process_set_exclude_files ()
cut_sub_process_set_fatal_failures, cut_sub_process_set_fatal_failures ()
cut_sub_process_set_multi_thread, cut_sub_process_set_multi_thread ()
cut_sub_process_set_source_directory, cut_sub_process_set_source_directory ()
cut_sub_process_set_target_test_case_names, cut_sub_process_set_target_test_case_names ()
cut_sub_process_set_target_test_names, cut_sub_process_set_target_test_names ()
cut_sub_process_set_test_directory, cut_sub_process_set_test_directory ()
cut_sub_process_wait, cut_sub_process_wait ()
cut_take_new_sub_process, cut_take_new_sub_process ()
cut_take_new_sub_process_group, cut_take_new_sub_process_group ()

G

gcut_assert_equal_hash_table_string_string, gcut_assert_equal_hash_table_string_string ()
gcut_assert_equal_time_val, gcut_assert_equal_time_val ()
gcut_hash_table_string_string_new, gcut_hash_table_string_string_new ()
gcut_take_hash_table, gcut_take_hash_table ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-cygwin.html0000644000175000017500000001000311525703037025162 0ustar koukou Cygwinへインストール

Cygwinへインストール

Cygwinへインストール — CygwinへのCutterのインストール方法

はじめに

CygwinへのCutterのインストール方法を説明します。

Cygwin 1.7を対象とします。

Cygwinのインストール

まず、Cygwin 1.7のインストーラをダウンロードします。

<URL:http://cygwin.com/setup.exe>

次に、インストーラを使って以下のパッケージをインストールします。

  • gcc4

  • gdb

  • libglib2.0-devel

  • gettext-devel

  • intltool

  • libiconv

  • libtool

  • make

  • pkg-config

  • wget

ここからはCygwinの中で行います。Cygwinを起動してください。

Cutterのインストール

これで下準備は整ったのでCutterをインストールします。

% cd
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz
% tar xvzf cutter-1.1.7.tar.gz
% cd cutter-1.1.7
% ./configure
% make
% make install

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-features.xml0000644000175000017500000000722311525702771024057 0ustar koukou ]> 利用可能な機能一覧 3 Cutterライブラリ 利用可能な機能一覧 インストールされているCutterで利用可能な機能一覧。 概要 #define CUT_SUPPORT_GLIB #define CUT_SUPPORT_GDK_PIXBUF #define CUT_SUPPORT_GIO #define CUT_SUPPORT_LIBSOUP #define CUT_SUPPORT_C99_STDINT_TYPES 説明 インストールされているCutterで利用可能な機能かどうかを確認するマクロがあります。 詳細 CUT_SUPPORT_GLIB CUT_SUPPORT_GLIB #define CUT_SUPPORT_GLIB 1 GLibサポートが利用可能であることを示します。つまり、<gcutter.h>を使えるということです。このマクロは常に定義されます。 CUT_SUPPORT_GDK_PIXBUF CUT_SUPPORT_GDK_PIXBUF #define CUT_SUPPORT_GDK_PIXBUF 1 GdkPixbufサポートが利用可能であることを示します。つまり、<gdkcutter-pixbuf.h>を使えるということです。 CUT_SUPPORT_GIO CUT_SUPPORT_GIO #define CUT_SUPPORT_GIO 1 Shows GIO support is available. CUT_SUPPORT_LIBSOUP CUT_SUPPORT_LIBSOUP #define CUT_SUPPORT_LIBSOUP 1 Shows LibSoup support is available. CUT_SUPPORT_C99_STDINT_TYPES CUT_SUPPORT_C99_STDINT_TYPES #define CUT_SUPPORT_C99_STDINT_TYPES 1 C99の整数型のサポートが利用可能であることを示します。つまり、C99の整数型を利用した検証を利用できるということです。例えば、cut_assert_equal_int_least8()がC99の整数型を利用した検証です。 cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.3.xml0000644000175000017500000000753511525702757023775 0ustar koukou ]> A gcut_assert_equal_list_int, function in GLibサポート付きの検証 gcut_assert_equal_list_string, function in GLibサポート付きの検証 gcut_assert_equal_list_uint, function in GLibサポート付きの検証 gcut_assert_equal_type, function in GLibサポート付きの検証 gcut_assert_equal_value, function in GLibサポート付きの検証 gcut_assert_error, function in GLibサポート付きの検証 gcut_assert_remove_path, function in GLibサポート付きの検証 C cut_add_data, macro in Cutter cut_append_diff, function in 検証作成の補助 L gcut_list_string_free, function in GLibサポート付きテストユーティリティ gcut_list_string_new, function in GLibサポート付きテストユーティリティ T gcut_take_error, function in GLibサポート付きテストユーティリティ gcut_take_list, function in GLibサポート付きテストユーティリティ gcut_take_object, function in GLibサポート付きテストユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-inspect.xml0000644000175000017500000007440111525703002024043 0ustar koukou ]> オブジェクト調査関数 3 Cutterライブラリ オブジェクト調査関数 デバッグ用にオブジェクトの詳細を示す関数です。 概要 void gcut_inspect_direct (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_int (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_uint (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_int64 (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_uint64 (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_size (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_char (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_string (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_type (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_flags (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_enum (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_pointer (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_boolean (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_double (GString *string, gconstpointer data, gpointer user_data); 説明 デバッグするために、テスト結果ではオブジェクトの詳細を示す必要があります。このセクションの関数はオブジェクトの詳細を示す場合に役立ちます。 詳細 gcut_inspect_direct () gcut_inspect_direct void gcut_inspect_direct (GString *string, gconstpointer data, gpointer user_data); 符号なし整数としてdataの詳細を示します。 例: gcut_inspect_direct(string, GUINT_TO_POINTER(100), NULL) -> "100" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.0.6から gcut_inspect_int () gcut_inspect_int void gcut_inspect_int (GString *string, gconstpointer data, gpointer user_data); 整数としてdataの詳細を示します。 例: gint int_value = 100; gcut_inspect_int(string, &int_value, NULL) -> "100" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.0.6から gcut_inspect_uint () gcut_inspect_uint void gcut_inspect_uint (GString *string, gconstpointer data, gpointer user_data); 符号なし整数としてdataの詳細を示します。 例: guint uint_value = 100; gcut_inspect_uint(string, &uint_value, NULL) -> "100" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.0.6から gcut_inspect_int64 () gcut_inspect_int64 void gcut_inspect_int64 (GString *string, gconstpointer data, gpointer user_data); 64bit整数としてdataの詳細を示します。 例: gint64 int64_value = 100; gcut_inspect_int64(string, &int64_value, NULL) -> "100" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.1.3から gcut_inspect_uint64 () gcut_inspect_uint64 void gcut_inspect_uint64 (GString *string, gconstpointer data, gpointer user_data); 64bit符号なし整数としてdataの詳細を示します。 例: guint64 uint64_value = 100; gcut_inspect_uint64(string, &uint64_value, NULL) -> "100" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.1.3から gcut_inspect_size () gcut_inspect_size void gcut_inspect_size (GString *string, gconstpointer data, gpointer user_data); 符号なし整数としてdataの詳細を示します。 例: gsize size_value = 100; gcut_inspect_size(string, &size_value, NULL) -> "100" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.1.3から gcut_inspect_char () gcut_inspect_char void gcut_inspect_char (GString *string, gconstpointer data, gpointer user_data); 文字としてdataの詳細を示します。 例: gcut_inspect_char(string, 'C', NULL) -> "'C'" gcut_inspect_char(string, '\0', NULL) -> "'\0'" gcut_inspect_char(string, '\n', NULL) -> "'\n'" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.1.3から gcut_inspect_string () gcut_inspect_string void gcut_inspect_string (GString *string, gconstpointer data, gpointer user_data); 文字列としてdataの詳細を示します。NULLでも構いません。 例: gcut_inspect_string(string, "string", NULL) -> "\"string\"" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.0.6から gcut_inspect_type () gcut_inspect_type void gcut_inspect_type (GString *string, gconstpointer data, gpointer user_data); GTypeとしてdataの詳細を示します。 例: gcut_inspect_type(string, GTK_TYPE_WINDOW, NULL) -> "<GtkWindow>" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.0.6から gcut_inspect_flags () gcut_inspect_flags void gcut_inspect_flags (GString *string, gconstpointer data, gpointer user_data); GFlagsの型の値としてdataの詳細を示します。 例: GType flags_type; GtkWidgetFlags flags; flags_type = GTK_TYPE_WIDGET_FLAGS; flags = GTK_TOPLEVEL | GTK_VISIBLE; gcut_inspect_flags(string, &flags, &flags_type); -> #<GtkWidgetFlags: toplevel|visible (GTK_TOPLEVEL:0x10)|(GTK_VISIBLE:0x100)> string : 出力の文字列。 data : 関心のある対象。 user_data : GFlagsの型のポインタ。 1.0.6から gcut_inspect_enum () gcut_inspect_enum void gcut_inspect_enum (GString *string, gconstpointer data, gpointer user_data); GEnumの型の値としてdataの詳細を示します。 例: GType enum_type; GtkWidgetHelpType value; enum_type = GTK_TYPE_WIDGET_HELP_TYPE; value = GTK_WIDGET_HELP_TOOLTIP; gcut_inspect_enum(string, &value, &enum_type); -> #<GtkWidgetHelpType: tooltip(GTK_WIDGET_HELP_TOOLTIP:0)> string : 出力の文字列。 data : 関心のある対象。 user_data : GEnumの型のポインタ。 1.0.6から gcut_inspect_pointer () gcut_inspect_pointer void gcut_inspect_pointer (GString *string, gconstpointer data, gpointer user_data); ポインタとしてdataの詳細を示します。 例: memory = malloc(1); gcut_inspect_pointer(string, memory, NULL) -> "#<0xXXXXXXX>" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.0.6から gcut_inspect_boolean () gcut_inspect_boolean void gcut_inspect_boolean (GString *string, gconstpointer data, gpointer user_data); 真偽値としてdataの詳細を示します。 例: gboolean boolean_value; boolean_value = TRUE; gcut_inspect_boolean(string, &boolean_value, NULL) -> "TRUE" boolean_value = FALSE; gcut_inspect_boolean(string, &boolean_value, NULL) -> "FALSE" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.1.3から gcut_inspect_double () gcut_inspect_double void gcut_inspect_double (GString *string, gconstpointer data, gpointer user_data); 倍精度浮動小数点数としてdataの詳細を示します。 例: gdouble double_value = 2.9; gcut_inspect_double(string, &double_value, NULL) -> "2.9" string : 出力の文字列。 data : 関心のある対象。 user_data : ユーザが渡したデータ。(無視されます) 1.1.3から cutter-testing-framework-1.1.7/doc/reference/ja/html/install.html0000644000175000017500000000716711525703037023265 0ustar koukou プラットフォーム毎のCutterのインストール方法

プラットフォーム毎のCutterのインストール方法

Debian GNU/Linuxへインストール — Debian GNU/LinuxへのCutterのインストール方法
Ubuntuへインストール — UbuntuへのCutterのインストール方法
Fedoraへインストール — FedoraへのCutterのインストール方法
CentOSへインストール — CentOSへのCutterのインストール方法
FreeBSDへインストール — FreeBSDへのCutterのインストール方法
Solarisへインストール — SolarisへのCutterのインストール方法
Mac OS Xへインストール — Mac OS XへのCutterのインストール方法
Cygwinへインストール — CygwinへのCutterのインストール方法
その他のプラットフォームへインストール — その他のプラットフォームへのCutterのインストール方法
cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Test-Utilities-with-GLib-support.html0000644000175000017500000013306511525703040031300 0ustar koukou GLibサポート付きテストユーティリティ

GLibサポート付きテストユーティリティ

GLibサポート付きテストユーティリティ — テストをもっと簡単に書くためのGLibサポート付きユーティリティ。

概要

GObject *           gcut_take_object                    (GObject *object);
GError *            gcut_take_error                     (GError *error);
const GList *       gcut_take_list                      (const GList *list,
                                                         CutDestroyFunction destroy_function);
GHashTable *        gcut_take_hash_table                (GHashTable *hash_table);
GString *           gcut_take_string                    (GString *string);
GString *           gcut_take_new_string                (const gchar *string);
GList *             gcut_list_new                       (const gpointer element,
                                                         ...);
GList *             gcut_list_int_new                   (guint n,
                                                         gint value,
                                                         ...);
GList *             gcut_list_uint_new                  (guint n,
                                                         guint value,
                                                         ...);
GList *             gcut_list_string_new                (const gchar *value,
                                                         ...);
GList *             gcut_list_string_new_array          (const gchar **strings);
const GList *       gcut_take_new_list_int              (guint n,
                                                         gint value,
                                                         ...);
const GList *       gcut_take_new_list_uint             (guint n,
                                                         guint value,
                                                         ...);
const GList *       gcut_take_new_list_string           (const gchar *value,
                                                         ...);
#define             gcut_take_new_list_string_backward_compatibility(value,
                                                         ...)
const GList *       gcut_take_new_list_string_array     (const gchar **strings);
#define             gcut_take_new_list_object           (object,
                                                         ...)
void                gcut_list_string_free               (GList *list);
void                gcut_list_object_free               (GList *list);
GHashTable *        gcut_hash_table_string_string_new   (const gchar *key,
                                                         ...);
GHashTable *        gcut_hash_table_string_string_new_va_list
                                                        (const gchar *key,
                                                         va_list args);
GHashTable *        gcut_take_new_hash_table_string_string
                                                        (const gchar *key,
                                                         ...);
GString *           gcut_get_fixture_data               (const gchar *path,
                                                         ...);

説明

テストを書くためには、テスト環境を前処理・後処理するコードや、検証する結果を準備するコードなどたくさんのコードを書く必要があります。Cutterはもっと簡単にテストを書くためにユーティリティを提供します。

このユーティリティはGLibと一緒に使います。

詳細

gcut_take_object ()

GObject *           gcut_take_object                    (GObject *object);

objectの所有権をCutterに渡し、objectを返します。

object :

Cutterに所有権を渡すGObject

戻り値 :

Cutterが所有権をもつobjectg_object_unref()しないでください。

1.0.3から


gcut_take_error ()

GError *            gcut_take_error                     (GError *error);

Cutterにerrorの所有権を渡し、errorそれ自身を返します。

error :

Cutterに所有権を渡すGError

戻り値 :

Cutterが所有権をもつGErrorg_error_free()しないでください。

1.0.3から


gcut_take_list ()

const GList *       gcut_take_list                      (const GList *list,
                                                         CutDestroyFunction destroy_function);

listの所有権をCutterに渡し、listそれ自身を返します。

list :

Cutterに所有権を渡すGList

destroy_function :

listの各要素を破棄する関数、またはNULL

戻り値 :

Cutterが所有権を持つGListg_list_free()しないでください。

1.0.3から


gcut_take_hash_table ()

GHashTable *        gcut_take_hash_table                (GHashTable *hash_table);

hash_tableの所有権をCutterに渡し、hash_tableそれ自身を返します。

hash_table :

Cutterに所有権を渡すGHashTable

戻り値 :

Cutterが所有権をもつGHashTableg_hash_table_unref()しないでください。

1.0.4から


gcut_take_string ()

GString *           gcut_take_string                    (GString *string);

stringの所有権をCutterに渡し、stringそれ自身を返します。

string :

Cutterに所有権を渡すGString

戻り値 :

Cutterが所有権を持つGStringg_string_free()しないでください。

1.1.6から


gcut_take_new_string ()

GString *           gcut_take_new_string                (const gchar *string);

渡された文字列からGStringを作成します。

string :

文字列。NULLも可。

戻り値 :

Cutterが所有権を持つGStringg_string_free()しないでください。

1.1.6から


gcut_list_new ()

GList *             gcut_list_new                       (const gpointer element,
                                                         ...);

渡された要素を含むリストを作ります。

例:

1
2
3
4
5
GCutEgg *echo_egg, *cat_egg;

echo_egg = gcut_egg_new("echo", "Hello", NULL);
cat_egg = gcut_egg_new("cat", "/etc/hosts", NULL);
egg_list = gcut_list_new(echo_egg, cat_egg, NULL);

element :

最初のgpointer

... :

パスの残りの要素。NULL終端。

戻り値 :

新しく割り当てられたGList。渡された要素を持ちます。

1.1.1から


gcut_list_int_new ()

GList *             gcut_list_int_new                   (guint n,
                                                         gint value,
                                                         ...);

渡された整数からリストを作ります。

例:

1
gcut_list_int_new(3, -10, 1, 29); -> (-10, 1, 29)

n :

整数の数。

value :

最初の整数値。

... :

リストの残りの整数値。

戻り値 :

渡された整数を含むGListg_list_free()で開放すること。

1.1.5から


gcut_list_uint_new ()

GList *             gcut_list_uint_new                  (guint n,
                                                         guint value,
                                                         ...);

渡された符号無し整数からリストを作ります。

例:

1
gcut_list_uint_new(3, 0, 1, 2); -> (0, 1, 2)

n :

符号無し符号整数の数。

value :

最初の符号無し符号整数値。

... :

リストの残りの符号無し符号整数値。

戻り値 :

渡された符号無し整数を含むGListg_list_free()で開放すること。

1.1.5から


gcut_list_string_new ()

GList *             gcut_list_string_new                (const gchar *value,
                                                         ...);

渡された文字列からリストを作ります。

value :

最初の文字列。

... :

リストの残りの文字列。NULL終端。

戻り値 :

渡された文字列を含むGListgcut_list_string_free()で開放すること。

1.0.3から


gcut_list_string_new_array ()

GList *             gcut_list_string_new_array          (const gchar **strings);

渡された文字列配列からリストを作ります。

strings :

文字列の配列。NULL終端。

戻り値 :

渡された文字列配列と同じ内容のGListgcut_list_string_free()で開放すること。

1.0.6から


gcut_take_new_list_int ()

const GList *       gcut_take_new_list_int              (guint n,
                                                         gint value,
                                                         ...);

渡された整数からリストを作ります。作られたリストはCutterが所有権を持ちます。

例:

1
gcut_take_new_list_int(3, -10, 1, 29); -> (-10, 1, 29)

n :

整数の数。

value :

最初の整数値。

... :

リストの残りの文字列。

戻り値 :

渡された整数と同じ内容のGList。Cutterが所有権を持ちます。

1.1.5から


gcut_take_new_list_uint ()

const GList *       gcut_take_new_list_uint             (guint n,
                                                         guint value,
                                                         ...);

渡された符号無し整数からリストを作ります。作られたリストはCutterが所有権を持ちます。

例:

1
gcut_take_new_list_uint(3, 0, 1, 2); -> (0, 1, 2)

n :

符号無し符号整数の数。

value :

最初の符号無し符号整数値。

... :

リストの残りの文字列。

戻り値 :

渡された符号無し整数と同じ内容のGList。Cutterが所有権を持ちます。

1.1.5から


gcut_take_new_list_string ()

const GList *       gcut_take_new_list_string           (const gchar *value,
                                                         ...);

渡された文字列からリストを作ります。作られたリストはCutterが所有権を持ちます。

value :

最初の文字列。

... :

リストの残りの文字列。NULL終端。

戻り値 :

渡された文字列と同じ内容のGList。Cutterが所有権を持ちます。

1.0.5から


gcut_take_new_list_string_backward_compatibility()

#define             gcut_take_new_list_string_backward_compatibility(value, ...)

Warning

gcut_take_new_list_string_backward_compatibilityは非推奨です。新しいコードでは使わないでください。

value :

... :


gcut_take_new_list_string_array ()

const GList *       gcut_take_new_list_string_array     (const gchar **strings);

渡された文字列の配列からリストを作ります。Cutterが所有権を持ちます。

strings :

文字列の配列。NULL終端。

戻り値 :

渡された文字列の配列と同じ内容のGList。Cutterが所有。

1.0.6から


gcut_take_new_list_object()

#define             gcut_take_new_list_object(object, ...)

渡されたオブジェクトからリストを作ります。作られたリストはCutterが所有権を持ちます。

object :

最初のGObject

... :

リストの残りのオブジェクト。NULL終端。

戻り値 :

新しく割り当てられたGList。リストには渡されたオブジェクトが含まれます。Cutterが所有権を持ちます。

1.1.1から


gcut_list_string_free ()

void                gcut_list_string_free               (GList *list);

listlist内にある文字列を開放します。

list :

開放する文字列のリスト。

1.0.3から


gcut_list_object_free ()

void                gcut_list_object_free               (GList *list);

listと中のオブジェクトを破棄します。listNULLが含まれていても大丈夫です。

list :

リファレンスを減らしたいGObjectを含んだリスト。

1.1.1から


gcut_hash_table_string_string_new ()

GHashTable *        gcut_hash_table_string_string_new   (const gchar *key,
                                                         ...);

引数で指定されたキーと値のペアから、文字列のキーと値を持つハッシュテーブルを作成します。

key :

最初のキー文字列。

... :

残りの引数のNULL終端のリスト。まず、最初のキーの文字列値を指定します。続いて、任意の数だけキー・値のペアを指定します。最後にNULLを指定しなければいけません。

戻り値 :

渡されたキー・値を持つGHashTableg_hash_table_unref()で開放してください。

1.0.4から


gcut_hash_table_string_string_new_va_list ()

GHashTable *        gcut_hash_table_string_string_new_va_list
                                                        (const gchar *key,
                                                         va_list args);

引数で指定されたキーと値のペアから、文字列のキーと値を持つハッシュテーブルを作成します。

key :

最初のキー文字列。

args :

残りの引数のNULL終端のリスト。まず、最初のキーの文字列値を指定します。続いて、任意の数だけキー・値のペアを指定します。最後にNULLを指定しなければいけません。

戻り値 :

渡されたキー・値を持つGHashTableg_hash_table_unref()で開放してください。

1.0.5から


gcut_take_new_hash_table_string_string ()

GHashTable *        gcut_take_new_hash_table_string_string
                                                        (const gchar *key,
                                                         ...);

渡されたキー・値のペアから文字列のキー・値を持つハッシュテーブルを作成します。作成されたハッシュテーブルはCutterが所有権を持つので、g_hash_table_unref()を呼ばないでください。

key :

最初のキー文字列。

... :

残りの引数のNULL終端のリスト。まず、最初のキーの文字列値を指定します。続いて、任意の数だけキー・値のペアを指定します。最後にNULLを指定しなければいけません。

戻り値 :

渡されたキー・値を持つGHashTable

1.0.5から


gcut_get_fixture_data ()

GString *           gcut_get_fixture_data               (const gchar *path,
                                                         ...);

path/..."にあるフィクスチャデータを読み込み、GStringとして返します。GStringはCutterが所持します。cut_build_fixture_data_path()の説明にはフィクスチャデータのパスがどのように決定されるかが書かれています。

path :

フィクスチャデータのパスの最初の要素。

... :

パスの残りの要素。NULL終端が必須です。

戻り値 :

フィクスチャデータの内容が入ったGString。GStringはCutterが所持します。開放しないでください。

1.1.6から

cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.xml0000644000175000017500000000217411525702761023621 0ustar koukou ]> C cut_assert_equal_pointer, function in 検証 cut_assert_g_error, function in GLibサポート付きの検証 cut_assert_match, function in 検証 cut_assert_match_with_free, function in 検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.1.4.xml0000644000175000017500000000336711525702763023773 0ustar koukou ]> A gcut_assert_not_equal_int64, function in GLibサポート付きの検証 gcut_assert_not_equal_uint64, function in GLibサポート付きの検証 C cut_assert_equal_file_raw, macro in 検証 cut_assert_not_equal_file_raw, macro in 検証 cut_get_test_directory, function in 検証作成の補助 cut_take_inspect_string, function in テストユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/readme.html0000644000175000017500000004565511525703040023052 0ustar koukou はじめに

はじめに

はじめに — C言語・C++言語用単体テストフレームワークCutterの概要

名前

Cutter

作者

プログラム

  • Kouhei Sutou <kou@clear-code.com>

  • Hiroyuki Ikezoe <ikezoe@clear-code.com>

  • Yuto Hayamizu <y.hayamizu@gmail.com>


きのたんアイコン

  • Mayu & Co.

ライセンス

  • ソースコード: LGPLバージョン3またはそれ以降のバージョン(詳細: license/lgpl-3.txt )です。

  • ドキュメントときのたんアイコン: LGPLとGFDLとクリエイティブ・コモンズ・ライセンスのトリプルライセンス。

  • 例外:

    • glib-compatible/glibintl.h, glib-compatible/gregex.*, glib-compatible/gscripttable.h, glib-compatible/gsequence.*, glib-compatible/gstring.*, glib-compatible/gunicode.h, glib-compatible/guniprop.c: LGPLバージョン2.0またはそれ以降のバージョン(詳細: glib-compatible/COPYING

    • glib-compatible/pcre/: PCREライセンス(詳細: glib-compatible/pcre/COPYING

    • html/blog.*, html/download.*, html/heading-mark.* html/install.*, html/readme.*, html/reference.*, html/tango-logo.png, html/tutorial.*, html/mini-*.svg:パブリックドメイン。 Tango Desktop Project の成果物を利用しています。(一部改変しているものもある)

    • html/ja.png, html/us.png, html/famfamfam-logo.png:パブリックドメイン。 famfamfam.com が配布している国旗です。

Cutter?

CutterはC言語・C++言語のためのxUnit系の単体テストフレームワークです。

Cutterの特徴は以下の通りです。

  • テストが簡単に書ける

  • 出力結果がデバッグに使いやすい

  • テストを共有ライブラリとしてビルドする

詳細は 特徴 を見てください。

依存ライブラリ

  • GLib >= 2.16

入手方法

tar.gz:

% wget http://downloads.sourceforge.net/cutter/cutter-1.1.0.tar.gz

Subversion:

% svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter

インストール

インストール を見てください。

使い方

% cutter [オプション ...] テストディレクトリ

テストディレクトリにはtest_*.soがあるディレクトリを指定します。cutterはテストディレクトリ以下にあるtest_*.soを再帰的に検索します。

詳細は cutter を見てください。

テストの仕方

テストの実行は以下のような流れになります.

  1. テストを作成する

  2. コンパイルし、test_*.soを作成する

  3. cutterを起動し、test_*.soを読み込ませ、テストをする

詳しくは チュートリアル とsample/stack/を参考にしてください。

テスト結果

テスト結果は例えば以下のようになります。

..........F.................................................

1) Failure: test_test_case_count
<1 == cut_test_case_get_n_tests(test_object, NULL)>
expected: <1>
 but was: <0>
test/test-cut-test-case.c:143: test_test_case_count()

Finished in 0.020857 seconds

60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s)

進行状況

一番上にある「.」と「F」の部分がテストの進行状況を示しています。

..........F.................................................

各「.」、「F」が1つのテストケース(テスト関数)を表しています。「.」が成功したテストケース、「F」が失敗したテストケースを表しています。他にも「E」、「P」、「N」があり、それぞれエラー、保留、通知を表しています。まとめると以下のようになります。

.

成功したテスト

F

表明が失敗したテスト

E

異常終了したテスト

P

保留マークがついているテスト

N

通知が行われたテスト

上記のテストを表す印はテストが実行される毎に出力されます。テスト実行中は、この出力で実行状況を確認できます。


テスト結果のまとめ

テストが終了すると、テスト結果のまとめを出力します。まとめは、まず、成功しなかったテストの詳細をそれぞれ表示します。例では1つ失敗があったのでそれを表示しています。

1) Failure: test_test_case_count
<1 == cut_test_case_get_n_tests(test_object, NULL)>
expected: <1>
 but was: <0>
test/test-cut-test-case.c:143: test_test_case_count()

この例ではtest_test_case_countテストケースが失敗し、cut_test_case_get_n_tests(test_object, NULL)が1になって欲しかったのに実際は0になっていることを表しています。また、この失敗した表明はtest/test-cut-test-case.cの143行目、test_test_case_count()関数内で起こったことがわかります。

テスト結果の詳細一覧の後はテストにかかった時間が表示されます。

Finished in 0.020857 seconds

最後にテスト結果の要約が表示されます。

60 test(s), 253 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s)

それぞれは以下のような意味です。

n test(s)

n個のテストケース(テスト関数)を実行した

n assertion(s)

n個の表明にパスした

n failure(s)

n個の表明に失敗した

n error(s)

n個の異常事態が発生した(cut_error()を使用した)

n pending(s)

n個のテストケースを保留にした(cut_pending()を使用した)

n notification(s)

n個の通知が発生した(cut_notification()を使用した)

この例では60個のテストケースを実行し、253個の表明にパスし、1個の表明に失敗したということになります。異常事態や保留にしたテストケースなどはありませんでした。


XML出力

--xml-reportオプションを指定することでテスト結果をXML形式で出力することができます。出力されるXMLは以下のような構造になっています。

<report>
  <result>
    <test-case>
      <name>テストケース名</name>
      <description>テストケースの説明(もしあれば)</description>
    </test-case>
    <test>
      <name>テスト名</name>
      <description>テストの説明(もしあれば)</description>
      <option><!-- 属性情報(もしあれば) -->
        <name>属性名(例: bug)</name>
        <value>属性値(例: 1234)</value>
      </option>
      <option>
        ...
      </option>
    </test>
    <status>テスト結果([success|failure|error|pending|notification])</status>
    <detail>テスト結果の詳細(もしあれば)</detail>
    <backtrace><!-- バックトレース(もしあれば) -->
      <entry>
        <file>ファイル名</file>
        <line>行</line>
        <info>付加情報</info>
      </entry>
      <entry>
        ...
      </entry>
    </backtrace>
    <elapsed>実行時間(例: 0.000010)</elapsed>
  </result>
  <result>
    ...
  </result>
  ...
</report>

テストカバレッジ

システムに LTP tools がインストールされている場合は、Cutterを使ったテストを用いてコードカバレッジを出力することができます。カバレッジを出力するにはconfigure.acに以下を追加して、"make coverage"を実行してください。

AC_CHECK_COVERAGE

リファレンス

表明

cutter/cut-assertions.h を見てください。


属性

テストに属性を加えて、テスト失敗時により有益な情報を利用することができます。例えば、以下のようにテストにBug IDの情報を付加することができます。

void attributes_invalid_input(void);
void test_invalid_input(void);

void
attributes_invalid_input (void)
{
    cut_set_attributes("bug", "123");
}

void
test_invalid_input (void)
{
    cut_assert_equal("OK", get_input());
}

この例では、test_invalid_inputテストがBug #123のテストであるという情報を付加しています。

属性は"「attributes_「テスト名からtest_を除いたもの」"という名前の関数を定義し、その関数の中でcut_set_attributes()を使って設定できます。上記の例では「test_invalid_input」テストに「123」という値の「bug」属性を追加するために「attributes_invalid_input」という関数を定義し、その中でcut_set_attributes("bug", "123")を呼び、属性を設定しています。


雛型

テストの雛型は以下のようになります.

#include <cutter.h>

#include "自分のプログラムのヘッダファイル"

void test_condition(void);
void test_strstr(void);

static int condition = 0;

void
cut_setup (void)
{
    /* 初期化用コード */
    condition = 1;
}

void
cut_teardown (void)
{
    /* 後片付け用コード */
    condition = 0;
}

void
test_condition(void)
{
    cut_set_message("conditionの値はcut_setup()で1に設定されているはず");
    cut_assert_equal_int(1, condition);
  ...
}

void
test_strstr(void)
{
    cut_assert_equal_string("sub-string",
                            strstr("string sub-string", "sub"));
    ...
}

感謝

  • Kazumasa Matsunagaさん: ビルドの不具合を報告してくれました。

  • Daijiro MORIさん: 不具合を報告してくれました。

  • 海野さん:

    • チュートリアルの不具合に気づかせてくれました。

    • Solaris用インストールドキュメントの作成を手伝ってくれました。

  • グニャラくん: APIについてアドバイスしてくれました。

  • 山川さん: Cygwinでの動作を教えてくれました。

  • 奥地さん:

    • Localeまわりの不具合を報告してくれました。

    • 新機能を提案してくれました。

  • Zed Shawさん: 不具合を報告してくれました。

  • Romuald Contyさん: ドキュメントの不具合を報告してくれました。

  • Romain Tartièreさん:

    • 不具合を報告してくれました。

    • 改良方法を提案してくれました。

  • Ilya Baryginさん:

    • テストの不具合を報告してくれました。

  • 中村弘輝さん

    • CentOSでの不具合を報告してくれました。

cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-console.xml0000644000175000017500000002303711525702771023704 0ustar koukou ]> cut-console 3 Cutterライブラリ cut-console 概要 #define CUT_CONSOLE_COLOR_RED #define CUT_CONSOLE_COLOR_RED_BACK #define CUT_CONSOLE_COLOR_GREEN #define CUT_CONSOLE_COLOR_GREEN_BACK #define CUT_CONSOLE_COLOR_YELLOW #define CUT_CONSOLE_COLOR_BLUE #define CUT_CONSOLE_COLOR_BLUE_BACK #define CUT_CONSOLE_COLOR_MAGENTA #define CUT_CONSOLE_COLOR_CYAN #define CUT_CONSOLE_COLOR_CYAN_BACK #define CUT_CONSOLE_COLOR_WHITE #define CUT_CONSOLE_COLOR_WHITE_BACK #define CUT_CONSOLE_COLOR_BLACK_BACK #define CUT_CONSOLE_COLOR_NORMAL gboolean cut_console_guess_color_usability (void); gboolean cut_console_parse_color_arg (const gchar *option_name, const gchar *value, gboolean *use_color, GError **error); 説明 詳細 CUT_CONSOLE_COLOR_RED CUT_CONSOLE_COLOR_RED #define CUT_CONSOLE_COLOR_RED "\033[01;31m" CUT_CONSOLE_COLOR_RED_BACK CUT_CONSOLE_COLOR_RED_BACK #define CUT_CONSOLE_COLOR_RED_BACK "\033[41m" CUT_CONSOLE_COLOR_GREEN CUT_CONSOLE_COLOR_GREEN #define CUT_CONSOLE_COLOR_GREEN "\033[01;32m" CUT_CONSOLE_COLOR_GREEN_BACK CUT_CONSOLE_COLOR_GREEN_BACK #define CUT_CONSOLE_COLOR_GREEN_BACK "\033[01;42m" CUT_CONSOLE_COLOR_YELLOW CUT_CONSOLE_COLOR_YELLOW #define CUT_CONSOLE_COLOR_YELLOW "\033[01;33m" CUT_CONSOLE_COLOR_BLUE CUT_CONSOLE_COLOR_BLUE #define CUT_CONSOLE_COLOR_BLUE "\033[01;34m" CUT_CONSOLE_COLOR_BLUE_BACK CUT_CONSOLE_COLOR_BLUE_BACK #define CUT_CONSOLE_COLOR_BLUE_BACK "\033[01;44m" CUT_CONSOLE_COLOR_MAGENTA CUT_CONSOLE_COLOR_MAGENTA #define CUT_CONSOLE_COLOR_MAGENTA "\033[01;35m" CUT_CONSOLE_COLOR_CYAN CUT_CONSOLE_COLOR_CYAN #define CUT_CONSOLE_COLOR_CYAN "\033[01;36m" CUT_CONSOLE_COLOR_CYAN_BACK CUT_CONSOLE_COLOR_CYAN_BACK #define CUT_CONSOLE_COLOR_CYAN_BACK "\033[01;46m" CUT_CONSOLE_COLOR_WHITE CUT_CONSOLE_COLOR_WHITE #define CUT_CONSOLE_COLOR_WHITE "\033[01;37m" CUT_CONSOLE_COLOR_WHITE_BACK CUT_CONSOLE_COLOR_WHITE_BACK #define CUT_CONSOLE_COLOR_WHITE_BACK "\033[01;47m" CUT_CONSOLE_COLOR_BLACK_BACK CUT_CONSOLE_COLOR_BLACK_BACK #define CUT_CONSOLE_COLOR_BLACK_BACK "\033[01;40m" CUT_CONSOLE_COLOR_NORMAL CUT_CONSOLE_COLOR_NORMAL #define CUT_CONSOLE_COLOR_NORMAL "\033[00m" cut_console_guess_color_usability () cut_console_guess_color_usability gboolean cut_console_guess_color_usability (void); 戻り値 : cut_console_parse_color_arg () cut_console_parse_color_arg gboolean cut_console_parse_color_arg (const gchar *option_name, const gchar *value, gboolean *use_color, GError **error); option_name : value : use_color : error : 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-string.xml0000644000175000017500000001115411525703005023703 0ustar koukou ]> GString用の検証ユーティリティ 3 Cutterライブラリ GString用の検証ユーティリティ GStringに関する検証をもっと簡単に書くためのユーティリティ。 概要 gboolean gcut_string_equal (const GString *string1, const GString *string2); gchar * gcut_string_inspect (const GString *string); 説明 検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。 このユーティリティはGStringに関する検証の作成を補助します。 詳細 gcut_string_equal () gcut_string_equal gboolean gcut_string_equal (const GString *string1, const GString *string2); ふたつのGStringstring1string2を比較します。 string1 : 比較するGString string2 : 比較するGString 戻り値 :string1string2が同じ内容ならTRUE、そうでなればFALSE 1.1.5から gcut_string_inspect () gcut_string_inspect gchar * gcut_string_inspect (const GString *string); stringの詳細を返します。返された文字列が必要なくなったときは開放してください。 string : GStringの値。 戻り値 :stringの詳細を示した文字列。 1.1.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-assertions.xml0000644000175000017500000022243611525702776024614 0ustar koukou ]> GLibサポート付きの検証 3 Cutterライブラリ GLibサポート付きの検証 GLibサポート付きであなたのプログラムが期待通りに動作しているかを検証します。 概要 void gcut_assert_equal_type (GType expected, GType actual, ...); void cut_assert_equal_g_type (GType expected, GType actual, ...); void gcut_assert_equal_value (GValue *expected, GValue *actual, ...); void cut_assert_equal_g_value (GValue *expected, GValue *actual, ...); void gcut_assert_equal_list (GList *expected, GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, ...); void gcut_assert_equal_list_int (GList *expected, GList *actual, ...); void cut_assert_equal_g_list_int (GList *expected, GList *actual, ...); void gcut_assert_equal_list_uint (GList *expected, GList *actual, ...); void gcut_assert_equal_list_string (GList *expected, GList *actual, ...); void cut_assert_equal_g_list_string (GList *expected, GList *actual, ...); void gcut_assert_equal_list_object (GList *expected, GList *actual, ...); void gcut_assert_equal_list_object_custom (GList *expected, GList *actual, GEqualFunc equal_function, ...); void gcut_assert_equal_list_enum (GType type, GList *expected, GList *actual, ...); void gcut_assert_equal_list_flags (GType type, GList *expected, GList *actual, ...); void gcut_assert_equal_hash_table (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, ...); void gcut_assert_equal_hash_table_string_string (GHashTable *expected, GHashTable *actual, ...); void gcut_assert_error (GError *error, ...); void cut_assert_g_error (GError *error, ...); void gcut_assert_equal_error (GError *expected, GError *actual, ...); void gcut_assert_remove_path (const gchar *path, ...); void cut_assert_remove_path (const gchar *path, ...); void gcut_assert_equal_time_val (GTimeVal expected, GTimeVal actual, ...); void gcut_assert_equal_enum (GType enum_type, gint expected, gint actual, ...); void gcut_assert_equal_flags (GType flags_type, guint expected, guint actual, ...); void gcut_assert_equal_object (GObject *expected, GObject *actual, ...); void gcut_assert_equal_object_custom (GObject *expected, GObject *actual, GEqualFunc equal_function, ...); void gcut_assert_equal_int64 (gint64 expected, gint64 actual, ...); void gcut_assert_not_equal_int64 (gint64 expected, gint64 actual, ...); void gcut_assert_equal_uint64 (guint64 expected, guint64 actual, ...); void gcut_assert_not_equal_uint64 (guint64 expected, guint64 actual, ...); void gcut_assert_equal_pid (GPid expected, GPid actual, ...); void gcut_assert_not_equal_pid (GPid expected, GPid actual, ...); void gcut_assert_equal_string (GString *expected, GString *actual, ...); 説明 詳細 gcut_assert_equal_type () gcut_assert_equal_type void gcut_assert_equal_type (GType expected, GType actual, ...); expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.3から cut_assert_equal_g_type () cut_assert_equal_g_type void cut_assert_equal_g_type (GType expected, GType actual, ...); cut_assert_equal_g_typeはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_type()を使ってください。 expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 gcut_assert_equal_value () gcut_assert_equal_value void gcut_assert_equal_value (GValue *expected, GValue *actual, ...); expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.3から cut_assert_equal_g_value () cut_assert_equal_g_value void cut_assert_equal_g_value (GValue *expected, GValue *actual, ...); cut_assert_equal_g_valueはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_value()を使ってください。 expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 gcut_assert_equal_list () gcut_assert_equal_list void gcut_assert_equal_list (GList *expected, GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, ...); equal_function(expected, actual) == CUT_TRUEのときパスします。 expected : 期待するリスト。 actual : 実際のリスト。 equal_function : expectedリストとactualリストの各要素を比較する関数。 inspect_function : expectedリストとactualリスとの詳細を示す関数。 inspect_user_data : inspect_functionに渡されるデータ。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.6から gcut_assert_equal_list_int () gcut_assert_equal_list_int void gcut_assert_equal_list_int (GList *expected, GList *actual, ...); expected == actualが成り立つときパスします。 expected : 期待する整数のリスト。 actual : 実際の整数のリスト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.3から cut_assert_equal_g_list_int () cut_assert_equal_g_list_intcut_assert_equal_g_list_int void cut_assert_equal_g_list_int (GList *expected, GList *actual, ...); cut_assert_equal_g_string_list_intはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_list_int()を使ってください。 expected == actualが成り立つときパスします。 expected : 期待する整数のリスト。 actual : 実際の整数のリスト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.8から gcut_assert_equal_list_uint () gcut_assert_equal_list_uint void gcut_assert_equal_list_uint (GList *expected, GList *actual, ...); expected == actualが成り立つときパスします。 expected : 期待する符号無し整数のリスト。 actual : 実際の符号無し整数のリスト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.3から gcut_assert_equal_list_string () gcut_assert_equal_list_string void gcut_assert_equal_list_string (GList *expected, GList *actual, ...); expected == actualが成り立つときパスします。 expected : 期待する文字列のリスト。 actual : 実際の文字列のリスト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.3から cut_assert_equal_g_list_string () cut_assert_equal_g_list_stringcut_assert_equal_g_list_string void cut_assert_equal_g_list_string (GList *expected, GList *actual, ...); cut_assert_equal_g_list_stringはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_list_string()を使ってください。 expected == actualが成り立つときパスします。 expected : 期待する文字列のリスト。 actual : 実際の文字列のリスト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.8から gcut_assert_equal_list_object () gcut_assert_equal_list_object void gcut_assert_equal_list_object (GList *expected, GList *actual, ...); expectedactualが同じGObject *を同じ順番で持っているときパスします。 expected : 期待するGObjectのリスト。 actual : 実際のGObjectのリスト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_equal_list_object_custom () gcut_assert_equal_list_object_custom void gcut_assert_equal_list_object_custom (GList *expected, GList *actual, GEqualFunc equal_function, ...); expectedactualが等しいGObjectを同じ順序で持っているときパスします。それぞれのGObjectの比較にはequal_functionを使います。 expected : 期待するGObjectのリスト。 actual : 実際のGObjectのリスト。 equal_function : ふたつのGObjectを比較する関数。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_equal_list_enum () gcut_assert_equal_list_enum void gcut_assert_equal_list_enum (GType type, GList *expected, GList *actual, ...); expectedactualが同じ列挙値を同じ順序で持っているときパスします。 type : GEnumの型。 expected : 期待する列挙値のリスト。 actual : 実際の列挙値のリスト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_equal_list_flags () gcut_assert_equal_list_flags void gcut_assert_equal_list_flags (GType type, GList *expected, GList *actual, ...); expectedactualが同じフラグ値を同じ順序で持っているときパスします。 type : GFlagsの型。 expected : 期待するフラグ値のリスト。 actual : 実際のフラグ値のリスト。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_equal_hash_table () gcut_assert_equal_hash_table void gcut_assert_equal_hash_table (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, ...); expected == actualが成り立つときパスします。 expected : 期待する文字列のGHashTable actual : 実際の文字列のGHashTable equal_function : expectedハッシュテーブルとactualハッシュテーブルのそれぞれの値を比較する関数。 key_inspect_function : expectedハッシュテーブルとactualハッシュテーブルのそれぞれのキーの詳細を示す関数。 value_inspect_function : expectedハッシュテーブルとactualハッシュテーブルのそれぞれの値の詳細を示す関数。 inspect_user_data : inspect_functionに渡されるデータ。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.6から gcut_assert_equal_hash_table_string_string () gcut_assert_equal_hash_table_string_string void gcut_assert_equal_hash_table_string_string (GHashTable *expected, GHashTable *actual, ...); expected == actualが成り立つときパスします。 expected : 期待する文字列のGHashTable actual : 実際の文字列のGHashTable ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.4から gcut_assert_error () gcut_assert_error void gcut_assert_error (GError *error, ...); error == NULLのときパスします。 error : 検証対象のGError ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.3から cut_assert_g_error () cut_assert_g_errorcut_assert_g_error void cut_assert_g_error (GError *error, ...); cut_assert_g_errorはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_error()を使ってください。 error == NULLのときパスします。 error : 検証対象のGError ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0から gcut_assert_equal_error () gcut_assert_equal_error void gcut_assert_equal_error (GError *expected, GError *actual, ...); expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_remove_path () gcut_assert_remove_path void gcut_assert_remove_path (const gchar *path, ...); cut_utils_build_path(path, ...)の削除に成功するとパスします。 path : 削除するパスの最初の要素。 ... : パスの残りの要素。NULL終端。 1.0.3から cut_assert_remove_path () cut_assert_remove_pathcut_assert_remove_path void cut_assert_remove_path (const gchar *path, ...); cut_assert_remove_pathはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_remove_path()を使ってください。 cut_utils_build_path(path, ...)の削除に成功するとパスします。 path : 削除するパスの最初の要素。 ... : パスの残りの要素。NULL終端。 1.0.2から gcut_assert_equal_time_val () gcut_assert_equal_time_val void gcut_assert_equal_time_val (GTimeVal expected, GTimeVal actual, ...); expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.4から gcut_assert_equal_enum () gcut_assert_equal_enum void gcut_assert_equal_enum (GType enum_type, gint expected, gint actual, ...); expected == actualが成り立つときパスします。 例: gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE, GTK_DIR_LEFT, GTK_DIR_LEFT); -> パス gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE, GTK_DIR_DOWN, GTK_DIR_LEFT); -> 失敗 enum_type : GEnumの型。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_equal_flags () gcut_assert_equal_flags void gcut_assert_equal_flags (GType flags_type, guint expected, guint actual, ...); expected == actualが成り立つときパスします。 例: gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS, GTK_DIALOG_DESTROY_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_DIALOG_DESTROY_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT); -> パス gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS, GTK_DIALOG_DESTROY_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_DIALOG_DESTROY_MODAL); -> 失敗 flags_type : GFlagsの型。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_equal_object () gcut_assert_equal_object void gcut_assert_equal_object (GObject *expected, GObject *actual, ...); expected == actualのときパスします。等価条件を変更する必要がある場合はgcut_assert_equal_object_custom()見てください。 例: gcut_assert_equal_object(object, object); -> パス gcut_assert_equal_object(object1, object2); -> 失敗 gcut_assert_equal_object(NULL, NULL); -> パス gcut_assert_equal_object(object1, NULL); -> 失敗 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_equal_object_custom () gcut_assert_equal_object_custom void gcut_assert_equal_object_custom (GObject *expected, GObject *actual, GEqualFunc equal_function, ...); equal_function(expected, actual) == CUT_TRUEのときパスします。 例: static gboolean equal_name (gconstpointer data1, gconstpointer data2) { return g_str_equal(my_object_get_name(MY_OBJECT(data1)), my_object_get_name(MY_OBJECT(data2))); } gcut_assert_equal_object_custom(object, object, equal_name); -> パス gcut_assert_equal_object_custom(same_name_object1, same_name_object2, equal_name); -> パス gcut_assert_equal_object_custom(different_name_object1, different_name_object2, equal_name); -> 失敗 expected : 期待値。 actual : 実測値。 equal_function : ふたつのオブジェクトを比較する関数。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_equal_int64 () gcut_assert_equal_int64 void gcut_assert_equal_int64 (gint64 expected, gint64 actual, ...); expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_not_equal_int64 () gcut_assert_not_equal_int64 void gcut_assert_not_equal_int64 (gint64 expected, gint64 actual, ...); expected != actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.4から gcut_assert_equal_uint64 () gcut_assert_equal_uint64 void gcut_assert_equal_uint64 (guint64 expected, guint64 actual, ...); expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から gcut_assert_not_equal_uint64 () gcut_assert_not_equal_uint64 void gcut_assert_not_equal_uint64 (guint64 expected, guint64 actual, ...); expected != actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.4から gcut_assert_equal_pid () gcut_assert_equal_pid void gcut_assert_equal_pid (GPid expected, GPid actual, ...); expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.6から gcut_assert_not_equal_pid () gcut_assert_not_equal_pid void gcut_assert_not_equal_pid (GPid expected, GPid actual, ...); expected != actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から gcut_assert_equal_string () gcut_assert_equal_string void gcut_assert_equal_string (GString *expected, GString *actual, ...); expected == actualが成り立つときパスします。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/command.html0000644000175000017500000000400611525703040023214 0ustar koukou コマンド

コマンド

cutter — C言語・C++言語用のxUnit系テスティングフレームワーク
cut-diff — 色付きで2つのファイルの違いを表示
cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-1.html0000644000175000017500000000327211525703040023342 0ustar koukou 1.0.1での新しいシンボル一覧

1.0.1での新しいシンボル一覧

cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-0.3.xml0000644000175000017500000000132611525702757023626 0ustar koukou ]> C cut_assert_equal_string_with_free, function in 検証 cut_assert_null_string, function in 検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-1-0.html0000644000175000017500000002015411525703040023340 0ustar koukou 1.1.0での新しいシンボル一覧

1.1.0での新しいシンボル一覧

C

cppcut_message, cppcut_message()
cut_assert_equal_intmax, cut_assert_equal_intmax()
cut_assert_equal_intptr, cut_assert_equal_intptr()
cut_assert_equal_int_fast16, cut_assert_equal_int_fast16()
cut_assert_equal_int_fast32, cut_assert_equal_int_fast32()
cut_assert_equal_int_fast64, cut_assert_equal_int_fast64()
cut_assert_equal_int_fast8, cut_assert_equal_int_fast8()
cut_assert_equal_int_least16, cut_assert_equal_int_least16()
cut_assert_equal_int_least32, cut_assert_equal_int_least32()
cut_assert_equal_int_least64, cut_assert_equal_int_least64()
cut_assert_equal_int_least8, cut_assert_equal_int_least8()
cut_assert_equal_uintmax, cut_assert_equal_uintmax()
cut_assert_equal_uintptr, cut_assert_equal_uintptr()
cut_assert_equal_uint_fast16, cut_assert_equal_uint_fast16()
cut_assert_equal_uint_fast32, cut_assert_equal_uint_fast32()
cut_assert_equal_uint_fast64, cut_assert_equal_uint_fast64()
cut_assert_equal_uint_fast8, cut_assert_equal_uint_fast8()
cut_assert_equal_uint_least16, cut_assert_equal_uint_least16()
cut_assert_equal_uint_least32, cut_assert_equal_uint_least32()
cut_assert_equal_uint_least64, cut_assert_equal_uint_least64()
cut_assert_equal_uint_least8, cut_assert_equal_uint_least8()
cut_assert_not_equal_intmax, cut_assert_not_equal_intmax()
cut_assert_not_equal_intptr, cut_assert_not_equal_intptr()
cut_assert_not_equal_int_fast16, cut_assert_not_equal_int_fast16()
cut_assert_not_equal_int_fast32, cut_assert_not_equal_int_fast32()
cut_assert_not_equal_int_fast64, cut_assert_not_equal_int_fast64()
cut_assert_not_equal_int_fast8, cut_assert_not_equal_int_fast8()
cut_assert_not_equal_int_least16, cut_assert_not_equal_int_least16()
cut_assert_not_equal_int_least32, cut_assert_not_equal_int_least32()
cut_assert_not_equal_int_least64, cut_assert_not_equal_int_least64()
cut_assert_not_equal_int_least8, cut_assert_not_equal_int_least8()
cut_assert_not_equal_uintmax, cut_assert_not_equal_uintmax()
cut_assert_not_equal_uintptr, cut_assert_not_equal_uintptr()
cut_assert_not_equal_uint_fast16, cut_assert_not_equal_uint_fast16()
cut_assert_not_equal_uint_fast32, cut_assert_not_equal_uint_fast32()
cut_assert_not_equal_uint_fast64, cut_assert_not_equal_uint_fast64()
cut_assert_not_equal_uint_fast8, cut_assert_not_equal_uint_fast8()
cut_assert_not_equal_uint_least16, cut_assert_not_equal_uint_least16()
cut_assert_not_equal_uint_least32, cut_assert_not_equal_uint_least32()
cut_assert_not_equal_uint_least64, cut_assert_not_equal_uint_least64()
cut_assert_not_equal_uint_least8, cut_assert_not_equal_uint_least8()
cut_message, cut_message ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-assertions-helper.xml0000644000175000017500000017254311525702775026073 0ustar koukou ]> gcut-assertions-helper 3 Cutterライブラリ gcut-assertions-helper 概要 void gcut_assert_equal_type_helper (GType expected, GType actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_value_helper (GValue *expected, GValue *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_list_int_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_uint_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_string_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_enum_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_flags_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_object_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_hash_table_helper (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_hash_table_string_string_helper (GHashTable *expected, GHashTable *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_error_helper (GError *error, const gchar *expression_error); void gcut_assert_equal_error_helper (const GError *expected, const GError *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_remove_path_helper (const gchar *path, ...); void gcut_assert_equal_time_val_helper (GTimeVal *expected, GTimeVal *actual, const gchar *expression_expected, const gchar *actual_expected); void gcut_assert_equal_enum_helper (GType enum_type, gint expected, gint actual, const gchar *expression_enum_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_flags_helper (GType flags_type, gint expected, gint actual, const gchar *expression_flags_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_object_helper (GObject *expected, GObject *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_string_helper (const GString *expected, const GString *actual, const gchar *expression_expected, const gchar *expression_actual); 説明 詳細 gcut_assert_equal_type_helper () gcut_assert_equal_type_helper void gcut_assert_equal_type_helper (GType expected, GType actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_value_helper () gcut_assert_equal_value_helper void gcut_assert_equal_value_helper (GValue *expected, GValue *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_list_helper () gcut_assert_equal_list_helper void gcut_assert_equal_list_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); expected : actual : equal_function : inspect_function : inspect_user_data : expression_expected : expression_actual : expression_equal_function : gcut_assert_equal_list_int_helper () gcut_assert_equal_list_int_helper void gcut_assert_equal_list_int_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_list_uint_helper () gcut_assert_equal_list_uint_helper void gcut_assert_equal_list_uint_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_list_string_helper () gcut_assert_equal_list_string_helper void gcut_assert_equal_list_string_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_list_enum_helper () gcut_assert_equal_list_enum_helper void gcut_assert_equal_list_enum_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); type : expected : actual : expression_type : expression_expected : expression_actual : gcut_assert_equal_list_flags_helper () gcut_assert_equal_list_flags_helper void gcut_assert_equal_list_flags_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); type : expected : actual : expression_type : expression_expected : expression_actual : gcut_assert_equal_list_object_helper () gcut_assert_equal_list_object_helper void gcut_assert_equal_list_object_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual); expected : actual : equal_function : expression_expected : expression_actual : gcut_assert_equal_hash_table_helper () gcut_assert_equal_hash_table_helper void gcut_assert_equal_hash_table_helper (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); expected : actual : equal_function : key_inspect_function : value_inspect_function : inspect_user_data : expression_expected : expression_actual : expression_equal_function : gcut_assert_equal_hash_table_string_string_helper () gcut_assert_equal_hash_table_string_string_helper void gcut_assert_equal_hash_table_string_string_helper (GHashTable *expected, GHashTable *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_error_helper () gcut_assert_error_helper void gcut_assert_error_helper (GError *error, const gchar *expression_error); error : expression_error : gcut_assert_equal_error_helper () gcut_assert_equal_error_helper void gcut_assert_equal_error_helper (const GError *expected, const GError *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_remove_path_helper () gcut_assert_remove_path_helper void gcut_assert_remove_path_helper (const gchar *path, ...); path : ... : gcut_assert_equal_time_val_helper () gcut_assert_equal_time_val_helper void gcut_assert_equal_time_val_helper (GTimeVal *expected, GTimeVal *actual, const gchar *expression_expected, const gchar *actual_expected); expected : actual : expression_expected : actual_expected : gcut_assert_equal_enum_helper () gcut_assert_equal_enum_helper void gcut_assert_equal_enum_helper (GType enum_type, gint expected, gint actual, const gchar *expression_enum_type, const gchar *expression_expected, const gchar *expression_actual); enum_type : expected : actual : expression_enum_type : expression_expected : expression_actual : gcut_assert_equal_flags_helper () gcut_assert_equal_flags_helper void gcut_assert_equal_flags_helper (GType flags_type, gint expected, gint actual, const gchar *expression_flags_type, const gchar *expression_expected, const gchar *expression_actual); flags_type : expected : actual : expression_flags_type : expression_expected : expression_actual : gcut_assert_equal_object_helper () gcut_assert_equal_object_helper void gcut_assert_equal_object_helper (GObject *expected, GObject *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); expected : actual : equal_function : expression_expected : expression_actual : expression_equal_function : gcut_assert_equal_int64_helper () gcut_assert_equal_int64_helper void gcut_assert_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_not_equal_int64_helper () gcut_assert_not_equal_int64_helper void gcut_assert_not_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_uint64_helper () gcut_assert_equal_uint64_helper void gcut_assert_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_not_equal_uint64_helper () gcut_assert_not_equal_uint64_helper void gcut_assert_not_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_pid_helper () gcut_assert_equal_pid_helper void gcut_assert_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_not_equal_pid_helper () gcut_assert_not_equal_pid_helper void gcut_assert_not_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_string_helper () gcut_assert_equal_string_helper void gcut_assert_equal_string_helper (const GString *expected, const GString *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : cutter-testing-framework-1.1.7/doc/reference/ja/html/colorized-diff.png0000644000175000017500000022116011525703037024326 0ustar koukouPNG  IHDRS\/VsRGBbKGD pHYs  :ݙtIME % `tEXtCommentCreated with GIMPW IDATxy|E;>Ip+7(+޺纻*벺^s*뵺"׊ w2=ݿ?&$@|>T=z[cƲb V^͔)S?gD"H$=wk9}fߗ.[es/C&H$D"LI$D")ŔȴISHR!'謦.MWˉO9{w[jYO@1}##%ߑߡOC!KwA0$Ca挩p PPN=!D׻&P~dgLZN⊓In8TJI$ZK˭&|LG x~x+S\0]kor%Jn*hY76Vv| hAI8;n7OEs?hx9J_[yP{>}:[&\I)eM!/6=}ƲhC;j~|'}RzA=ń/`c*g{}[#ǐyR?mxCA:*СyʸۣW2>Ă|OR.9v]/|#HՏ>FPzq*)SN!eZvu. c mVoW ;яbXrd*jf SjQ'rހML_nÜR[.0s9Cjw\)D-RWfv5:>6ݣ~Xmޣ,,ƠX^9ۢh4 fSl02%s)EaT<-e;.2؉g06-b~v'}EC#w(VXeJ^!iPOv颸ۣ)!L,xss!GKހ6_;R,:=a]~.ht7+ r ?xDl.{8^=IgߡqX VPfLFaJ[QrL$QeRcƞGC۹0frJ }Qv@3ܶ: [+d%GۯLRgmhI? gTNMȨ19/(]QP:a6*)9a\S&K0lUϾѩ,䵵' J|6(zq +( ד>"},\c=57 [_IY'ɧb|)~9sV9H.Ƒ J}#B7%ˎn/P%^~ɧ9z߆ULr8%JB&f{}ap|M<Ŭi_-~ b{RzPa|%`ԅE$HKT %_#,ߴz]0 `k6I`uLm̨l7N5%`@%4 ,{Z_{ܭeAA#r=#966i9XL4,Q-bd݅G1,oϣi!ץ۟y$ƛvH  UZp/ާCYV(nGVi.Cifgv> W]>D17w{J2Sm^(*)qkHMU"{Z vxr|5ފ:N#!upb 5䰴~X2uv4"\5QtśЪ * 4'p5 7 ,̿"vLW܍㘋Z`bJ^IQm Ϻد|Ԝdћ?!+_3}@v=!l#e| JUG0ׯ=9%?q2>rPhr40C׫ no}9!Q, &>Ō^YT&L'5^0l3j"x8axeg ̩ uM3|l`daoAXǀy9L` xt KRaM 1R3xjR3*}}P['k@̆XOHh:eqA<`Gǟ| se oo*Ȯ[b KPuCe:?Û5 'CN:SI4t ~[7ljW0Dw;Z.z-ZU%A@ PYI]i,oˑs;w{T25 /f%ݔ4/[ߦa"~6&_۩:c<( caTn)TI Cæ s1j1˨d)39=u$MĪCobycq3X&jj\qS N9{ NȃPB{%OK 91Tl | O';+݋(]uvOJ25ęް1=Mh= c@u}/$'q5mI)S#pvsNscGnJ֬[ڃv,`|o~{+S0bК=K?0EhTT 4A Sq.U ((.T?Nٷ> 5&݇>o'}l6*50TMā: 1:s66x:Q h>/;x`tT0=T>Ekh4oko|! nBMp$׆iX(0YAHq7zr(|.fΉbnHQT$6UM4b E  t I$*BW82Ȇۜ?%V1m|`G$e(dUCc)Qʶ0~ 'ƶc9Ar8khvUŪ_D9i9Vs" ->xdMXP49ӱ~1_7Zlk Dp:[/^jaj5PPm2^}Xڌ$g,h#)IAnS!:]/{6zgX##H$BrbmLLWpׄQD+ZVq)fCݘEˡmC5Dc랒LZ5r8!l-Bg %@\$NjSM^n Jt?7i#P|AO!>жQ%%%blI$*% 6 gŊŒ!>=dq5t5ttB8H9'WzI8rz>GBFZsGMr/V9#ў|bYT?f,9_ś~NαsRN솪=~HfA%K@}=d~D:͟Ppf _mF3OvM[g Cb*x}Sk'l<1/-->dLN晕?3##]ױEuqYg^i'u]۟o7!lX"|œ:⸍!nL"؅}7r8U<sb?d _1f҉ۻ/V kyW-:f Ms[101:&˷`VLuJ> J2y/o |sxia _rF]96fj0D".(Hˇe1Nu2iyG:7<+)t/{TrAv͋( boB^G$X .g/6ud-^Ԇ ݬQ0l6s.ujRYOcJ-0[Q);Tvv;N;`Opu7 Wmp7,81̹^V+gWHZtVDn"IbHe\ ::%lY4XOs:wۍ;%ŭ{qq1cnjeŊ^)Sܸb3N=K$+pEDgǔ7ZM))(BWW{TT܀+)$-hc (fA-+d%VY~#xLi`cR55Eл0:Iv`]OV'ga|)u,mƞ\vr6o}rθC赚3h}rm(ȘoGQw{j?tC_GVcH"c-b))!NF K( 6' > Y2ƜLzAhZO9IL~1p')UD$"+H$D")D"H$LI$D"4LD"'N&nHu=/ =KId2-)KYQu~LMP6%:9Bs囚Cqp*~֮]GsN6k"߾,=?5!Yy XUԘޣH"(&v ڃc5CQٿ<±6VY?%32BoL&'i=`ilJcɺI=㗔=4y wwC ?hx9J_[2ʘf6ִx(yAYwމcPE4W>1q\;mМL 8\=.!('61w^#?63u&O6J`K&~/߫v^il1Gr>3WA$Y&MDZV~ omD]ǭɒH߸^ШOE!?X6铱$x,m_.~ 'eQKӇ&&ϞEoT*С $ϛиWu?ed?.QgtKG_$z&qTv/mBG[Fx˯9=usS[̄ku|XrYX(RJUa=+!xJD5WQ4>ES|#T.C=[TY'o#uXG|:3(w?_8KmMægÒ5#{ӇwrdS]AK n?=ȶ*Hx ɒ}"NKdՏv; zs{o!vb Ro _r݉x_xm 傋Hs!)Ǣb+u~^xCe55"H}h3t>j]]#УZq8M(nG-b y˞Nj!/L~=2GxGLB| '@ۃM("FA6E?8*B@PC7 x-vѨ>7a2(Bt#q>Z׋‘'bv>B_&|np$Mr>Xڡ4nLH%sN=%=S.A1^•.ڏ]{ +=FYH>+[~ռLz4l5lo214{CkD\>0RLs&1ܱ@ulY)+7 "jv#nۋ,ⷛjS-I\vj>fI[Bɢ3wwbN-7r 12 &,zu%GθS_Ae3'O✽k)2ePNf[g;d.~Ͻ+jQ͉^^W"F)w ߓˆjXGC~ FIJpJ^[ۮ, A57rH^S!z})p+'_O8/S1ΞnF`qmw`ol}Jb9ޠ1 ud۬F˯#0@۰I磤AIlWvOٽqTJzNy窤$aKF }1l"׌ʍ}UiėO1>p}:#Ρ`Ϋn yXFZV" aBWA0eC#>v nwG{\0Mg`Gc^ԨsסMO~ʂkObٳn?< =Mg(t˟|zӋѴ?TaF:WT8Ͽ^U|}w6Ij0ɩ CM  VWzbFO-8_;ܾYdZl*\8rC{mBh:~ӆ~hOH6|;چLQxj(^]>PS9Z[ѷU; l/'$rNłX *?skq!CvɫϽ˧Vv T<}PV{TZv=Y@΍Ѩs/\Yq@_:C7Æ7kNJth*6r|5ފ:N#!u%?q2>r6xcuae]~)SS¤hOz&'`XCc5L+FZJ" XYA;~3ZL1]q7c."k*J~.mNՑtoӧe6AیʇIA B!e=SHч_ d~Ԁ#KC%¿/An p:5~8 O_"+ģȣʸI )&٘-cȘG{%Ծ`h? Jl>3'sʑgt1FWUMaQXz '8붱'  ^'8)hBR E{(}$gHZVqܿ0(JĽPYEΫ@(18qTٚ^ Y/tdHp6'ݽ7Vky&Or N@K'ӱ3kT9lmO:{F^T!$d$X5$ge~뤋џ1c>g^q$XHuJ57̞;_pmB[Nٳ/-d~ٷ߃=A⯎Cy; iq^v+Ѫ6a@-$k0U/9ݕL"[3i?( BQ _ rwi\^Vj-9#) mxj*hlk6=uo@1Yp(՜uLJKw#o<)ImO|.p66$DB:;-* ŊahE& cDnWX`Qq\zNZTʷ6j."eixy倬v7!lX"|œˀXm*#Ѣ!1 ʖV3yhWzs-H#C[&xS[:֛iiǟnn`n5mdFv0cX1ç J8rz>GBC|5*Y 5ttB8H9'W{d J5 ^(zk D:Л2~$>JɗeƛF@ m^A_I/O2-{ڹ o5K+kF#!&8o䡛fpbuqWRT'{GBM:g:w)O rT-I:(/_;84_5/,cΗ9<|tOdHN:?ƙ;Hmv/4_5XZ‚yR٠ve-ٷކY4ſA uu;'뎢fn{'X~79N3 Sn&&(]ipk=9_dkqVQksҏ!)(ty`|_ťF A RQz_(&Ҝ.A+f̓1 ˖dKgbzO' ݣ!RGhfN릨|*6hl%=ތΧ*J;F7J uԾSyyv| *q> ڑ{ɍXCx)OL8(/lxxLI ptʢ&Uu=ZT!Ы"!SRFC-ZMCteSZ2@Ft~_^JV #UQ)Fq)LYԲ/N֮_3[tR.{YIRBˌ U5t+xz%7zJ=/  A)Iϙ9d+y ڎʤ}(].\~yOlٴ*nl ?G|BUO՚,;B@-eߌEJz6_iUeM(lWD~W/y( 21Ͻ=ƤO vlOظݺ+l)UD6>vp4D"ij5?)4D""M H$D")D"H$LI$D"dJ"H$ga=>QU(6  KeD"H$ݕú25UU8F2{[2D"H$a5B k+H$D"3SD"H$యLe"lL o6 W&H$D")Ai[aPln,+H$D">L"H$;"LI$D"dJ"H$D&SD"H$=zfv 2D"H$\H$D"ɔD"H$L$D"Hd2%H$D")D"H$L$D"Hd2%H$D")D"H$LI$D"Hd2%H$D")D"H$LI$D"dJ"H$D&SD"H$LI$D"dJ"H$D&SD"H$2H$D"dJ"H$D&SD"H$2H$D"ɔD"H$D&SD"H$2H$D"}㞩yD"Hd2 Fsd5l8'et}f34#&Qje*XXf0tAר0\ytVs\6u4-d;]0rx#9 Deqv;ѡb#ekD"6MWOHo8a*Ljopd  ]Y cjv| nfעS]AK nld[aᵄ#eA6'Kb;-U?Rہ0:)[K$I{wϋ3[ng/gvu >4`ps0M"]g =&EnfN%kx.=svw %o*u'%$Se.YmU sQ.]p9ۤr yv I<*03T ~SMN2/h0P5q4w $* SUF7ӃܢhMmgՃEFjIS5 &NEOf;;1|ʖkv3 iɰAyE%^]ɧ`6́ؽ5<_0۲xdn7<'s{]Z9쓘: L| zXu?y]K7,?w*B+:O_F՜cWM7S~Z.0Xn?&O%h=ۓaʩ#H9+On/\Y=[…̌!iWK}uP&H$GuggcKB.2yb9M+ Z_0{@գs[0H@(#!!#w  C IEZ p?`Bd@MCO1qoXycq!DCרsסME`ĩړX2<.%0o@/|y}F06?E㩹X~hε7'i3Tjg~YdqcQʔbH6z?e˟A\ abԠܚSM Dn.#l'%ݏ5ʒEKbVszN:Z•'ڳ5ӹ_/a7$g2ڠA|Ҡ NlD:Bp2ߗ>Rh]l3Oo^^  ܠi* odjе3N`m,mКKH`1Wm`mgC"h3'ݽ7VkyfJt: N@K', Ehz+['{m֧ W;Ґ]6ڦ%!c$굼/kytX:KVou0S=,Y]]Y'|ԞKd]*hc8{+H$L5qxV:[5q"P1ܔG 5'WZ̪`F Xk,NIm1U+FU1t=˲70I9ۼZӾ=0YToDDV#9k.?J~kTSf$K i|/ T7_ c wr>t6]v4=FLD՞ϥaox p. r- xeB%Hz>qgtͪJb9\~eC7BQZ 8ܬҢxCЈ`zӟg5G x ;$0H;׵ZKoHoJa١OM%mmf8umBI1&PuvZ=zL4@5'rf)V C0B/:5` cDW+&`ZǥEU| qi8ʡ29H> gw62gR';(D"W:v?`?Hy/:&b9}\j6ssTB5Mb fz !Xn1エt YhRl.{'f0$W`FޟJi'V`^{|/uLuyssW B ?ZͰOU%,w! kWM+=j^(0Xr,* /Ws>5l͢, L^+ށH=^w5{p[uj.l8$+msرj)TN0Pǵonk/o[ gF2͝_S\HY˪p^'Lv :zSǭ#p8H$o.K[MŌ3+VzjLs.3~Μ5g.׵GK8:A c F}Fal natX9HPTX90vy8xf#&ml0mJ+zapYl'J89{LLBe S1[I7xQQ}@AT:X}|F f%":!!%HW)H$ݗwk9K2.[es/ge-Ƶ1Y7 8^gŲ"]VFEm۳m}i:\~P\K?ǃh}uuSN=࣬!9;"oŻkхNQs{8^4Q$[\n$-n͹K jk^S&'۹myuӡ'S"H~ɔ烻j5?)4D"x#4D"H$2H$D"'Sf[E1;9nu'9$D"~Fs'`wO%ENrJI$D3O$Acu)^O!OZ(2{j1HXJ Ψ69f&N۟lՔ4-)\~J_TH?/Lړ32wȑ(H$x5`ʌ3,g~؟LwC7w[u'9\3sǃ/3ӽ,(?lYNc9>y qѯ*娔H$Im reYNGUOìo1Oh>dfKnxC$d/6s:vq㋹5똬<}P,Z-ol2ZړX2<.%0o@緡f%ӿW閨b%liѽ>Xɒ]NLy5{N%GD"HzmeJ1'0!_’]})<0dNb_[˩[?ol?;. cwFBHky{[ P_P=a \=xi Np6O_~)&b% T =1}* ϲo y9v=rg5jN[ꌧr&n|S6sf s %H$(.)n3vXVXի2eJ̍\.Ə9s:-hbRzON˳U-IHC 4Rm=e[}VwL9-]<d?;6{?3;#F!`*bP=Q.VMaS8q\v!h<є%ew{1I#g6,J͚3̳}~Nc{|'JaE~[nIс}y+ yB!\1q30eX}h HUa؈>d vW<;B_X!xЪJT;E#-ps AG!v,w}Ƴ_ Bt+S/ۏV1yҏٝC@ ytt/jEh89{J%wyXmSƽ/7f7FG %.%.>.L{ ^L{'4]؝({VQ4OHܺl  0)~Cg ~7h YVӔŪ)1Wiss(-f* JBTIP7=*v{k?)-TceϪ;CwK)1$B*(6 xn,gudVF317z&Yyzv~^#DtTkLwm0phwF\sLW2BH0TA7O>~ZcZ;7vz]fWZYn?Z0twTy dT RO_Y{Bl߱ }<~fq`P &;o bJQYE@HWz s wU dv%9 Ynj ӄS5ֵaC S_!H!h|޲qpQE#Ru-NhIë]sd1\pI' rG;{z;sitוK$NYȭ# y(C%?d7\hvǃ{א_g"TəitV+&:A1_]7 #kLJZH ߶b<\YfB,+yO)SA?B,ϫ38I ^t4udߦ,L7ǫ"k.DB*JޡjyyyןkײqFFU8p 'O*PdU&˙惻RCHI]yTy&&ƣoW ]̭ +"STx` xC ~Z9¬Vq$9B!Xt0s&Yqx/Nm)kʸ2V,Xł>4[ ӆw$۪0lD}sxo kLKҖ^@LoѵΈEի7u=ڀHQ8iü[]՞}wE:U% k2Vf#kST*WbiX@QdU MoE_C瞠A<c33@fB_bepO.s_^ĹKXi+z^6k۔qKͯ =$48J\ (-q(qQ Z =H#65i֨ʋ]؝({VQ4OHܺl .0L^\i(<"+ V$ , VT?GL `A!B{E@%B£jʞx奔[ BwZLrLvI$ }Leڔ,!JroaAlv'+TpEKgUk"C:*p tEaH8Wo\cӈQ4L cߓt $[7gxa;"!hԥ=KMA9f]a[?*\yψO}ɤ7OHYXlpJ 0P}@2 FW~iJTh2U(QdԢBQPnA&S !x~e>F^nBsUIM;ocÃV6(-g ]nWTd?H{KDŽ1G&^ ($eaʎQT|ᔎIbj?P:0q2Bf2vL3i.6vxjwx 1d/BlAw;U2bYy*:U!0JLEa1tŭZ帀RaRf^CǃAAal[[V~nkU׾m2{BN)o.һQhyM tJ_gyfO2ksie xq .q|w x-dq7r^FInAO_s2GeZrfݳ슉F_Wp !A |eRfU^BXF ]L~0\b0HFf f=z(SQZi41tW-Ym1C}VȚ;)!ʼnCy>߯?k׮eƍ5ޙ1p@N|MN'PuE$115{G}L|WPӬsyN+^_) %&jE&UHJLL428Ť4)9 ~0B!~)^ 6oⲱU{}媕L2yL!p=rW3>}Mv p}ca5OVis?74B yбB!SB!L !BH0%B!B!`J!B)!B B!$B!L !BH0%B!B!SB!L !B B!$B!`J!B)!B!B!SB!L !BH0%B!$B!`J!Lťv󒫽ԝ\M7[1lN]&B Һ0eHR xߟz0̆CB!Dc4\}5O`׬vNiB!?`sx,^tr̛ / o 7E$%u1)ޟ{]*dM]wG7e !a5i>/_u&]=vpyEtTّ-<d$Z %.<zi!ueɥB!h J^w<ɳ= q9twctp?7GVח0N]vB!^Ħ8.wz`3dO !|eA UUEz_!LEH6$1d/BB!Dk!kK_C~ի`PUw^$+*̻w27O O4g+W !Be3zUV ߪ.aAmYHrF';Z!?` r~B!τ}I!B)!BSg{zY22BYB!`J!h|FL$s6zʷ약 B "RcȜ"uÖAqϾoSij_:%]--?=;eT!"ɢ~wo{ {WPv9i-b뗧-Gu=%_ͽɈB!D&ڲxyWo`1ML1/B!`*<8TB "Sc 4 2eL?(2jזǬONnYv~js>Zk\Rfn-A?V˹|:٭;)'WqP1 ULcv8)B!)igŝ0+:ŷnAҲ2%21Ǥ^ ŋ2݁<= `X*"3 =IY1[FI]/]YAI-E!#Ҍ#zTt8bGMAQʴr#}GЬ*X؁5VKPrp80UMm5&E'jvB!B4`*wE^{\63{9{5 vfTTk2Fj']'KΚՁscR[V 'Is?!B)5}mxv&1j4&(kVK, vf}E+\_GiiQ\wc['ڳlbXֆZ**eQd!FM2ĵ޾% X,P ~o.һQhyM t<&ݵcX214k=2mن\;#t\xN|&ɻofQal %~?7Rn]Ĥe$'wx/E!>z]W]m^|Oԍ0yauuk/#fIq$5 +N_PPcHފdU?Ө71qd$pq2PBL*q¦kbAkx?Dmw2 gPFB!R B!$B!8%~7PZ4>6^B!#+SB!L !BM{Oш7sF՝ZOB!TDj s_$]`2H67hw\/iW?5-6|̮ǟhE?OQ*>ʿ!SFB!4Y.b^`ooa *.'Elrׇ 磴97dЛ3oGJo+?0\:uK!B8Menz b& ,X޳#rK+ 0`:暋_2-9k !B4`ʿ!UE:$'<{>iH0Y\-Ig{o$B!D3 7 2z`l_޿|(e0 !&{mB*2*BѼ;ay3WhW +[M&B!y0GF+Di=t/`2*BѼeE tjQk_^mP&B&>6d vIٝy^tLٶ9K3Ct#38 xw:>w< l^K~쀰qC=]ƊXp؇5%Liml {P۷ZgN}F`Oޟzfsn_ۆSٟ5OHYO;gg'_\hsx,>5m0xrnKkᄫgr̛ZjUuT,0gēԕƴpi 0v2^Շ~^QVyê-S'jD0W-ُ-L`G<1m̹ bcs{οhu}ԷRmZ&=xu@u?`+_ '>#ͱZ! . k8}hX]ߩ\9dL#ą߀E@ј|*&C]1s䇦`⏸';ѣɳjop۸<ecM%. IDAT>^b(gT/65iֈLZ3K^-Flé-еMFHg^'//c%,Ak!,|ՙ,w%,mL~mm/|zQ%׳Ggّ-<d$^~&Կ績vcʘI;  qeII-k?I`i]^[|1fy̪xQx^҇|[;/geFu}շRmZQ,ڍYmKcR?{&f/bg'KcGu9V{§LXĜxz>Wfe|cC b;YY.tqW)KW3Ptor0<+w|@lbzڔ,!Jlɴ܆Sџt1 _?#W[Ej-IdhDR h,yzg{Vե(d/E[@^ضGgmmTO#P'^h,ߘC{7F|c~Ti';vki|u7ЊXv~o=<ägٌYu/)g[ N^]Ï96j׀Zx>M_:H) 8m,^X~i9v24g4-VA־Mj:sCRL`bIQjf|73u tfNx]a;^mSm^kMk W^m}N2V(@)(RƆYu əcmQn/;ftGgSHc4pjNp8;TFYvǬgh_Ŧآu}L3L1dBײVKYαp"p}]9q}GajϕM~kiqToُ8mmE`W4,U]ճuh]\9nRZ# pΕM5=&"5.z=8UA&sKp2 '\?ipmWT;4C6^;Sj7\Dx (&+F̳eQSzqNEј8>rp/ҸmFǗnEO%mcQLvM=®DG:X_!/91&95nWה+̇f2ctn ˭ ]t$6<1a,s8|*t(b-Y]u~zYXgyfO2ks)A_,`"`R΋ 'ӾDjCSg$՟u^vo.һQhyM t6ǃ{א_g"TAf;k ưdb,i2{r:FInAO_s2GDz\{LN¼{'{JnQ3M{og0rTrfݳYyklKGL>+L#-KP ?m)t̪~g_CAyMp_q]؍1/zWsQL5 DGG: ׆hX8sk+~֡73[eΚg}_S~D3cy5+//vZ6nȨQ=8p 'O~*>DMQ;.2dUӤ֘bNOgfxf-?%-/'%(uz6Է}5 Mџj7۞8.8>75]n;8|en|5$V;-xnJ|FD4log}8zʵ!5ԚWLL1<[\1A/c_q}؍u|9G]\}N fSmh9M]H}s ڑՙϝOp(8oϕp}诣K+}Aуn;M b$PTŽ]N<:{9 c`J!~\GG B!L !BH0%~y1LO=#HmAՖ 3\i;5m7 ,xϐьH !N?#Ţ6##2|,ߘC;qMvkA뢨Vf_0cNGK2|hy**-}-ޭq/er\o:tSv|^9 !$VfyndG.X.=bZRvg4rmcҭ+VM:6۽?ẂܾfKad[CϠxm|wp՗9w![̿brzc/֘<3-nLoѵ'xO;gg'_\(@r̛:+*Yygx_ /@}H-n}T{=R }!ے<5W e\ w+bP;`qp%'!nkOk@x6cOYۋ}h^tSBW{hV/?}ݽkMS4|~>P~W]BtF]z)݋vro~#tyG"O{)OyiJ~93la[C3R*MMk=}y.a%Jn y eP }vcVO枉KoX rTj,P^3=_[s v<9eeZrm2}~)w5[-x3YJY'fFOA}#Xl)':+}H,`*Z:[48Aָi]R/KWcP\Lx|A;|cow|cF~TbS"ֵ;n-&1w{R 4ZF x8TT^T£K6n/_XW}fp'{q8KYh+-wL2 o~ǾR_U<,17z&Yyz3~*ԧ L3bҶ;u4פ{i \9&xY6ʧ=זZSdf,^o. SfM&UAҥ15; l 4jFR>3nU<4(V/RvEr?;lp}Q^TSeZB6<Ϊʙ녞PA7݊j4tJ =m?7(LE`.%.5/b߯sM3n|&|ކ{N|R=6 Z٠Zk{\63{9{5 v΍۟ԧL=#Bs3_}GTeE3͒ jMVpG&6+ bO:nj7 {B/T2ت<0Naqq@B֚tgЩ wqIim- V4,ѯL:\y} gca_2F3k ưdb,i2{reں?cͣX6x>YK5YqRĤeXjU'>9C5?/͚{@ܾqڞ֡73[eN=%P^yyyןkײqFFU8p 'O|CZ9"pij!#Ɇ̍Y1q$j:ϻ5U8=<[\1A/cXսz kv)9%j"gDUp}VSۛBzѼ5y=!e~tY3Z#ϒ𕹩xԀNiܔkZ8x.ׯoBrrK1#i6;iq|>㔵=ew^?cO !W<Ȧ͛le^_j%ӦLkv^uO3 g^ez]nvqŅ'⾈n@Mw*->V%2>}ug>%} y38ͦwxf~H'H}VZ׼妶вzů>IoII Ppk^g>w>á\J| A7yŁf_ϦpCxs(*wE(ٌ%CwS =xԷo1B *>zC>nB $B!`J!B)!B B!$B!L !BH0%B!B!SB!B)!B B!$B!`J!B)!B!B!SB!L !BH0%B!$B!`J!B)!B ^zxxt;B!`*=xX<>c] }syrDfijo XxƢqYU4>Xeqfe(By`(inVeLݗKnuM{siĥv<"eİ;i0WtSZ\6B ނWUsXk(4X}uך} ˠM0S$5 Mqi]NpuIn=ٿJfp!- !/ J{Yw ﶓ8/" |:]A^܇mA㸏ix0؀4؁ UQ} J>o̡ٝCOkYOO`׬vNia9 !$jlGOўj)W){KT(`Bi0;dhtP'Ӭ|=+ h6Np.SgnEp@{U%: U'45t +Շ~U5[ ӆw$۪0lD}sxo ]M`~sx,>k F"xrØU ie,/`3PVw≫Vǜ7P]ϘBDN|* hUKMj_o:+}ےP ZgO++V ׃:g-ޗc+byFJe6tMV]'//c%,A'}T}۞"Q^J8o12y eS }vcVO枉KoX ۏ/_u&]=vpV0*d xk_%y/IM#Z}ֶ4K=\n}a%ے;茈ۅH !D >aT8C+>bBS7Ic\MVk fkj`i_8HR*6Lfheh晘Mن**]0I $49v~^#0`97搯lv'7zojlb:y`ҕTu]M)V0 t5NbS"ֵG5κ-&1w{R ǜ I4pFpq}7Ϧ/$=_ʷp{a%17z&Yyz}ji|c_P~dK4 /qf{~ Nx{mivg=|".8FnZ_Pcxߊ+kknW4LvTD 0k5-f9 p?4SŊ&[/[kٚ5&E'U1 vc/+/?ߍ4<͚L[uչ]{סN2V(@)( ʓi{޷yu.  (ZUjk *rzg<o~婴ہfmvg}|SY=gfL˞qq@I,P2f奓]3PʉK{:T^ujU"h4z?A7O>~Zcz\f=K\j3_|_lRM?6Vk@EUcafo#gF7Ў\d}`f_ v)δn++ bO:,KU=[N 4MJk{< Wl;jJ/I(W]K3S4k2t b6zӢP IDAT>Z݂n{}yJ'ⒶxNȈj#9g Gꗑibt gc0~B4)klKGL>5u{ y1XhXW6+%:jMBB߯Zl6̨)PIT,l6tM^1zEaJDu&]UCVsL<^yrfݳY{"Gxxr-<$&.#)= Ͻ3kFL˜x?J4ǟ-g)/+bC̟} A6sWk&4X],9؟wbcXܒ(-=(ku]8 vk2IVRUwdvoXɭFpjn8)>\߃r?WKc\Z%vRBn~ #m'Q};W;//vZ6nٻ*ߙےH7HY,(+ kY{AWX\"A4"EE@Czm3 $!=@~G3y3 :ˣO>;w⽉q<48xFiFc4P(u| M#Q`(l h4j8 zN0NA wGlAADie۴wb*ܟ$A̽(ßq|^xD\WiDd`,?mbBm].r d*ER9(EN-u.pQ޻W]v6=[&`N_MT?˅(=ܜʜCN!%St4K\Hdcj6!yP:iu݂tV֟";Uzpl'UϝQzg~IYzκLoΑ{xdyfCUikiMɩ^0LTB L.,Q,7B!SB!`qpF̤̄B3,yY]W҈䟆)NuG#52pBH0UCpgȯv[64?ȕz5{?T[t?7u`y&jȩma̚:cx@>iuo+4:PL+[ypDr|zLmS˿Ų5|>sUy.w n ၻ nݘ[i_6'0BS#,I.y |_ӓU(ۋ,r<`lɨS*2!]pem} 4ԟiLiS|'@!n c@kn<>mk39fdۓ2<1e<5˛ݠ LE3!_ŗ]==`ηǧeOFiܷXUez78"yx"w斯nEsN>>7z؞o|Uܣɸ+0N~bņD[/ꅹ՚W[u]+fMN埬6l]zj?L/6fE-@)!lhÛ]V1x.m/nӿamfVNϤEX3z# >!#mr^pmܜs5+ 0r4b+h}d#-Wa o ]êe{<|B :apɿ?37ּuJ$_qTPxkiOH:˫EVBgp&+yQ}9{~S)8#]#{٤D-\̪O$DաJ|ktÛY襸k/.^4\`Dm꿊颁dy!1-y榱=ߥF}ľaR06cɍ0eWtKKrN=Y= si&\A;4}e]ߺW@[8/ԴDIM{ڣtqV/eY6a\tMW%G ȯAz[C<]e5h{3'/&%L5Is[Em WW>͸<Â\Q9Ԥm%l?%;]7$372;#LYL}m nDR-¬mCXlpԘ΢utmWG?~rҩ;V}q$/is-v}E t"#BhAߣ=yx腅l/Сw޺1/%S{I>:~SzQ@y= 2aL Gnx0PkP}Q]J˪>:GҶi vmC|H.Lu"5qPpN&A)ĤlLNO7["?ۍtH !D%M*uvOJJ=Ybk׮eСx^^}ر'HGHCn "t$ß ҏWF8]X&[ $/maMrG2 nod!='Xy>msİJq//Lw?H`[QG?!{ʓ߰Q#G, 'TytAlxΊ_f!&ډEz8x omW \B!Tq0e=[3fsΞ*eWu<omWBQ@@!B)!B B!$B!J=pf39}9@ySO>/]UaN`Gx*\L܉ :/0:4Zaw_*\!StΨ6쵧6];m&ؚjihB :!=OhS{$D >Q| +k~\~dJ#t'@V?I]WAְ43$C?kOLFP [} .iVx(p`RBHw GCʇ_Mv^B#lN 38xՏ;k;D,{񘕨v$)rhT&O[nɕ#Y!ğ# kǓWuM۷3e6 ,^{^7𚴽h[}:xƒ3/do@\w@;5td2f%{#0 q6ACz1:/wTv}.lEkԭv؄Qݡ5cƄO;"WZO&@Y/1;~ 16p QYk4B C 􁭝NeBd<#{wQPtz Y@Wm؛鄵MRUŔw:V=xOߛo,޿KB!Έ{O]ׯ18|h \}9Ia -Nь3=V'c;{I`{D;^ְmt5[:}E~r 𚐛S@ZNF۴:bq9,"Ucdާ,YM0qhoR~Zg%j W\_#rVIyHE2'$}C=ǁI~ kI2~O5ѼZYu O÷JUaB׬hAZFGl4NX m ci/ކitMhBHb\>7/_?|?/7YYcGѬwjms|R%;gڝ fڝ,ra12׳`wGxeuv|y?1j>FMwkŽ:RˇO!c-}^M JL[``Wo<5B֯h>RqÏEGkAM^T+(Fl4IǒPm=y=˞}do:Q4rOx]^m-s@ef7`R)o\iXlͫ\)Kgp*; ]N1T7b}w KxJ4~LP󤟂TyAנѰ@/ᩁ*Kf4BFjp3D#[~` ` wau[var6k4}FP~YaTi6aP𙏔3S%ӘH#d< ay%ا/4/r4 !cSW˜g-ۘ=vK(Ol,bZljk86S8FqJ >wpSS|$|u%?ϗ0go zNR=eQ.QNmɂ/ٰY gBױ* v #Lbd,:_< {O X9Y U3IZTͥ`AyAu7؄˔Y!ęQgyȶ7cDL}'B#kųU4۹ߘ95VA岶#b5YL}m nDccsZhzQсާ3!-͂E¯d Ǹ߆OW=\vT'}U , 4muBzְ9crUk9[$?#p`z.EhӠ@ !{Oy3jR%0aS~Ҳk(s\f^^A.5ܦS(JP3+Y7$jwLb嗕298ыX!ը܊Y3KGS[B!DRG@WCR|2TK; dI-AB N]S*J!.E B!B!SB!Lơ|`n[,y?4l,YB5USK:MdڜӲ6];m&44а41nGJX,h\(3en9]ãZ/-lu4YhE_N2J(-HfMWB Ny#^e)ؚIff]-S vyܰ5\`^ӎw![ީ %Џ08{)AS nRRUP95-V.4(4M#h 4c]Y5EVNR%謰zFy8;\ ĖaV @*^w&Yu+]4VUiDc/L>W|8kѾۉflT4ҔnɎ*PjeaX`y S+_Uu/6Uh:3Ƚ ){sMcEǎ, 0cm(Ufam5%Ei c|YAu4&Yh@>6DU] Hy]cMJ)VǔJf#y=.GB3x=c_"Xg118>˨\,GޚϤױ+OZN^rs H) 00OѥemG5CZJ;0O'YfatO= ZXL 8 Gj¼͢PJMϛ Rb)^Jv_| (91up9BgEGnaDD :>o|濶^ cZ>d`|?6|U#|DK1Eo[mѕWlv4nd>&mvլC2MA&`}wCmQ^r`* |t(H7N>-< Eۛ4&ZurɨU^m)Yy*~.ar =G+W50WO|I-GaQ%B+ʿPB!36YGB(!g ]@!B)!B B!$B!`J!BH0%B!B!SB!L !B B!$B!`J!B)!B B!SB!L !BH0%B!B!`J!B)!B B!$B!L !B3 .(5-8_NGG{25'B 3~@xiQG4Gfak0O!t֧x 0ʝ٪{B!S\c[cuيһhևF%$z ú2<)Yw厂iԭv؄…Bqjm>#מâ/xx\U8~#q-b )*2 M¢71/ާB!NGSW; 펑,^Y]JLBfydڝvtd ֦To^}8x;dRB!8ꬿ&8Navىٱ2RB!8)OGhpqp*/B +?u'! {iA\ITLm&-BSκ<xrug5:R,_ _5 Ke6M8 J!~Za˜<.0y^ǬJ"b/1Kh!B)O B! d%!B B! uaWH !g)B!`J!̨|ֻ+M/߼Fp⵫ iOҰ/v4~gsf])x*Au2:; vnǔeAYgm,Hf?ԍk_!S!`=g" R1 <;l]`ބuZ6+REzxW|B.۹{ 35H{8mV@cqٲlV5 [$m";0Pdcxȁ[thMhHlxC:ŔZeo *!Bi)QYgi2c":f!igoS7?LzAv!r){ KL~KRʆj[b_~aüR4I r(wgeY% cT_αI)|T.wy#4@Xl!Յq6KB!ȁ{{! E(ʺtn ;GHky3AV>`GtA d6&C) B05a-i` ÂI(kgfAQ?Y6;#ʉ$㙵qww{pS`Wr/kIkB!wSPy^Xm8Bvh;AYx \܄ Fة{cxv|&۬F.r7lMiCv ygid|0({Z ϩ4]Ӥavdg,Q^>gȗ+Bق_aHjӢ96T3FNn c<4}I0xi6tǾM+[ypDS|pƷL KY\v}3x[;g=o?Er}Y/jћE t6=?<+ }AwگVoH$[vѯ&V!S.mJ1 ڞZy3jFalO`ǿĔ|/ov22l:|E#4T%?N=舕Ws5 vXش6FlZlaMx@)Ȥ當M TXsfEaћT>JH9dzF:HK-hFa=Us,ORбC,jB?{0x$Te:F"Iw,p^yxm,Vܯ̒V$BH0U,f9$רRl.x4MPi(H!`n%1-0ތ^?SLiEB!ğX7Dǧ'r]g\i;obâ҂B?:ҜqjFlN+d74+fmh8ROAɮ{g,noۙs:b;>b kqMy;'gvyx]!`fCs_2)G };؝Yz֫/vH_~F`,"lby^iB!S@oc"jʮbBK!BH0%BqFmkp<ύ\*h[Wƞ3潲v]3q>A_G~K9 dެƐ0kOjkZnSyn"t䯲<<DImuSp=PV H߳'h^}?2 ;y;n痟Wky@Yy#潲v]S&Wꉋ4nyBQ"ל/N܆8Ơ!=dɗ; kǓWuM۷3e6ᱝe Դt *yL^۰tdٹwjcɬeJ` j̫s{3<"L^2+'SOKoaZy8Ypj˳*Yey0],VRU$z}}\c[cuي҇Fevw_И<7s |UVTΈf}xitGKӨYyX7Zށ7-.杂[rLn=&}nſc:t0s>O*|U7ogy۬笚cʥ vgϤWzU]Fm^Y[][lμCq_LϏ/WZ.g,<^}پ*Kxƒ3/dWUy֦W\A_qf_q[cתjuxU0L?i9xM) -¢,v_e}+?'O~^,5׾%:,.9%O]Ffy<|&}n(.-#/ՀѶ*w2 i/Snnyi.~QeDyƵjL͎e;mY*,*/gg,d_ؘ:bq9,"UK"h=#Zr;KYM ^۸Gt(U3/u3GZm(_dɶ T^iq~Dt< KKw~\}r*svO~dgT4q6Z%INwюW5rʳmZ4"uk~A'Aeo ^L|~lu7 D-{rka+Ԁ(GH5y)}=k]s ry8(^Xy8<ߣ-K4<~_;-Y**r2}Qy&펑,^Y]RzN|S1w6nG' ҼWΊ^U:M_!G3)l2Yv'?Ȣ)՚wm"U}8x;dd-]5Ӽf^ԝG2/%'~ʬ69%8\ @lZƪh&(Ep 4 ylA >+~`T^Y6_s%XpWܵm(B jzLZUJl؂11EQ_3t{)Tӻv,pNSXCUH5y`uNGyVʬ_>&t,v M׊~).NtChE䛁{RڞtUYfUmEd{ʟu\[Wɯil?Wf}:gt[~6qU㯲v]['ڴ%b'(G,^cdTV>w[i>W[jWQyֶWw|^ /דWct]E0.|)yrId8rM玕U k !8liqvZ C!6k.eyVVf.yb9pYѨ4BR4<֧;of)j욅FluiteNMUn5=}Q@Q\8u -;T+'T.ʜT!G_/?u'! {i ̻x^e ='KΑ^n6QY:Oڦ.ghF嘖0yA4| ;vELy]~.u>͋5Bni IDATrUzp@F+faTvUծ+jU9(݆֍˚BʆZڪA_.kK΃ծڜ *C ւe{,4>kUZ>i? eL43k3oMØ<y5#<Đ+G2%KGm gVM= a^X\rPNA5!'E&M^˅"U.˳*s8<=3*QTPA@@² g'tw݅}>wj}ߪzcLqKF'&jN z+8a'3D{cū;>d] =FpULZٸ$ӧ3Wtn65BQQcFaΜ9̟?'쪪*Ǝɓ.]ee:Tv-f{'5TEIymw.ې{"Ν P-;s2UGkCkDL֐grwm۞ݵ.)x>+@vv:*F O >7iHs\=F[1h|@q#6ztRm?δ7qߗ%ζH=[k|i]O?q]jC[DpMgYuEy.9iTWv9v%ޓ b=1<>1 `(҇U:W=uӍ,XOlY39swϞ)cڔ7n!benY!Xԯjʊڐl#6<w[^51J}Dc~mԳ5HK{-ش]dT:s[zA ϮwDZKS?äI]V},F |r?My/)'3{"c楋}I.\~r6ZdhXtV#mp/H9, ?` `㪟vv׆xuOeBK啊nhP!$dԁy)A_ 5[31ϼͻ *MUgm zPߖ"AAqAAęڍS&Df Δ tLo.\t<==۲{&-{(WzQLϣgi:7jO&ޓC͈]靛7s q9~LF%h\]hBMTfM=>`L6Х2 !i}Pyi~nSZPl$ ˃-wf2!FPOJ=٣ e` ~b,'57>3sz7\})ٓ=P%+3tͤ[mU,nSn0DC)i Y Ggtl*aGsx]߲nX Jat[vW)h𛐿U;UKfPG浗?ZE[~ŒOq~x Y;z6~Y5m>{ }K[ԙJS [tt" w4_&X]@пUkەIa.y QR^LO_Z.{EYshOzH哆Qfxi7஋qH(`+%;/_i'ڍ˫/>S`/q ,C-v 0crz ߓ>Y5YۢuQ).*P7r?ro;%c޿a^c7rU_M̛pCo0'rdfȬYv؎y<:j}3pNk^b9v`}yMg/mg6[=hgW3z~YO:3ezs9(7>uy}YFOtv0ݢxw3VG [*l))q1VZvxҾ 6Yt)7M_c)a#q:F⏹͒f!z;Doëٟvg/ gLI[ǕKDYG@NuJ7;;hzrxa.e;y} ٲxEwhNe 2偷fp/qCs=ЕwmO[a|EWwe"P&SL5N?<=H*T?):ȥHfxrye<010HWz'_Mgb%Yb3̵},F)N.rPCNߔ&E n^* q'[#p8МYJzu7Xi;i0A.dr5c7\t]yD>㳟w^y72#2ӡwJWfNރkk__|+Q)Ah)}jD#Ѱǡ8Z^\jrᔣ/XʟLӶPm1A{|?\ۇiEr z KĒg<֍n[o3߻k]눡FIBJpw#Y_Q[r9sSYVǥeFe8q^]׵GgZ, |F2 eGЭyb /iمpw >+#toSL> O7=f>xu*Z۷G=aoqOvњMSF Zh #3++>r{MWۋ "2)T!U0r9J2|]ҕtCazrdHFrplKɴ=Yj+d˱0<sb]V/YNlPCpue`ͷqo5?:NM]Ƿ8l A]~us/{|p;\C(\ BR2{q\j7*CqY0'.?C[0zҞ׃8ri_{iezcA)\vms(yw_n+O`eѧ0.}܉sSFwܿ-n s*d3`!6js6Z3S(.ϫdPQ de7Gpb3S!π̪y3[cqB\r ŷJ]3syYIڲX9(cf̔t //L7bNE,ߟ%#ۧ5c(9ta^4rݪsoMu_Iݹי]\gϮ q݁\iiHA8's1&/-HZA:[wL܇ϿAFӽgwFinՃ2dϞ?|'˛o"euɥ{jC&0#zG7h=FpULZOZ UAO.**b1̙33~ bر<d%A4놫A҇u񤦒()ecn4eXtRSy"6ĺ7=Ty3Me;Ҳsmo|Xr OL)dz|T܄Kf-McZKZay|b>38zLVOWρ{|g[,_7>WY(Y?0osm7eVTlM_Â]0_sMef+Ƒᫀ -{#NYN?t-73"篛H ~j^yӝC Ϗ~٢=(e~Gd|d o~gM9]'ɒ^}(҇UYdyYhfrYgjg^vAT Lz}RWy8m6 ҭIMB,R#L7JQO. %K6HScdi_hzHʉlc=xRꔳ)$K Bk:SbɷRmplEe!50yl`6(~ۢW5nִvزijVhzHC_&AhmE팚g] Α#AAęAAgJAA)AAqAAqAAęAAgJAA)AAA)AAqAAęAAgJAA)AAA)AAqAAęAAgJAAgJAA)AAqAAę-1\s(nW!b6=S-˖Ӳe#WXt. #؃g>Zڬ `␭4U0@zi7\Ɗ˷Ǩq{xw]_' դdn}+møᄽfQe=<+nܴHSm".=KQHݖG_]wgYe_mVZgݭkb's8?WEfQA#S9r$Z`&S [m|G o?nzc *k{H.8D^v=_[m>=[]aI5p㥇kosm/L8W:jW_xڃ'0.Bݰ%, 4H Ԭ|ȺPִd=B]ߔkӋ9n-ŷfq65B*`sXg_^M▙m$`f?KYFVAqӄpTjal%ͲL es3/lWnvџ_+hyYik೫Q6^ENuJx: fzrxa2qrn{}1ZQ,g1#y#\ e\=b}<ǍOlr^_V q8& FaEI&g R, ׾I ]{`;?.5+b~Iɘ.jA9n>`>`NjOӷjCw7p)]_1{ڻvJOaε}*t2}wg14h4S y^xm&W#'-v'۾2p]´Z-o-kN牿̽p;%q Jrk(Ln>;OwEܴxDm 3x~׫kU~'2Q7g2YQWGl" #o![W(!BeE %5l߆XYm|Sn{ݹw`;Gְd˴R,8ǵ3]03TSfRA62q=+u ղi[5 ŭ-<dg%dN(_.ozwUJ2ӲSK?UbLYưiYFl[+ؼy#~^pm_lvZQFSkO͟yr]/SL96.KE!nc_0߰2@qI _rͿ?WcLx6a)@[~׮f;E W2crfۆX~f>O^KNԄ3rW(i*D K2\5"Sgh;skne֓Y( G9Nu~)އTt }z*|e|GnϔyU+(o eRhҫ,'n /;2oMA暑9 N:_y Х1>jRQ?`A]r IDATu!l]n2 #̽-%-KfYcҒm,z;/=|%! О,?dzdlpG!KrV]hMם|HAk˹;bWvl؅Sauf5_Y#9{ 8}fRlwS`2 B{LS!π̪y3[o܉sSFwi+NUdwfރ/A5ka<~o)2{68u w^| oNXdKڻ k0q9~"2nT0h ǸezҺR9SN 4fZ<6>G^<7IA{os͢J`9n:4=r.}(~D(M$cyx|zLJt J8hCɻe/64_n+O`eѧ0a=*V lW\f]9Gtg&c?<;? RLJ֮䒗77;n#g&,**T`+**b1̙33~ bرM }*S7ȂE xϜ5s:N|m|ڵ))mk_o|/ %IJdmp;.%]y'цh*crC//{)$K v]l!,cA '  3%  Δ  8S  L  L  3%  Δ  8S  8S  L  3%  Δ  8S  8S  L  3%  Δ   Δ  8S  L  3%  3 &<x襢2ϴуS z%M50yKY&Cڱp0Xl[VAɃ-aRPcye?:agLS&{z٫鯹6?4y_t#yy(.4-,L43:`о;; :jAi0Pk f<1^/G`9lsB=ILk*q)՚mSu4<Բ8AJTCo(vδRb/+ehe9Z߸RTNOQS]l&5"G-JXUð52S6/:._&@aP whe=N)4SfRdhL fNvyv8)ZđKXTC } |;Ĥ`+7+qq)EO CUc2{ OkbZiZc3-/OnA7`n$-M Bg #ySuVheEȱNt2[#Ư[ȝtQL뒀\œvק]b%kWk6w2tLzDʜ!ќQd8lu 6%B\l28b0!$B;+ p)(FkД7}A4N@{ݵ 7AǍ-'!n![q oVa8"hk $;RA(Kz՘nޏi_,o,-]+#ܱ 7"XPQ{*ExUhehLБ^q$t'C<5Iܛ%3Ě;f)x4Eq (T$c PPZ\ʴrG>7\MHkrU2ckCZP+Ϋ'^YP|T2K<2Ք9N֬ך iAV|T}auȬ7]jCxNFiP 6 *]Ŗ#_A͵dtl.v4 ePtM` 6Y:Yyx o-RMZUKVda18ۄfi}Fabp2RxUC"6̳++gʃAM0 ǭĂcM? z|p{dwC+<^D3KgLEemfֲO2( 6x4U)TP(BPny 8qy5p^GOmOϼ^S'M"'$ ^/4 n5m4yn<Rz,7G+f{=n$2I"6QQsmhUǷd_rDs&-nXv z9R5bttR&qXGCsl0遣c2vqRnWktS4Gԟ"Fh(zFɳFsffK2sRfe,imY6\@L%VZ,Y'޾RF'qԑniwYhu](;' tp^"6ё#hqg%#yJQ!m\Xںǭf c01k^Kqeaȕ' 3VxQ!o5-i;<}R6Qae$+j},EsqdRс*_Kyڻ BuC{yT>m>,,KD 1ﱎAKtϡ9 eOϮ>ZXE+BOz/Y[2.:fg˩n:ZDېl]ڢ fNo9%&;S n 'p#Y)ﮫ]p-`x*_U3p&]6?f-yDEq -+C>dՋn{ϛ-m(&PώL%6F,=zM^dN=1<>w߮œiR5N_Op"L )bR..4oK2kF@:lS'gX? }/+KLe&\xTdd|uwa{d89c62؃i|Ӆ3ɮP3P'f9hrb65IZk| 58k mCui6|y,eBUe0N;и30f&˂Jy8~ZUvʽ%k,#6|ov(-jMyٍƭ r ShAyk?[ǔ{lumOO734( 8kX A IDATŘ&~X #mYO3W+{N*_DR뾌q=Tഄ5J =j+Ye(aay@;}0]>7}JQÁL{w'@⏙mޅVcdK NAMzQnxP I<39wLTTT.Zތ}H=zڤK2 lzq#qAj}|6^o<8%ly@AT,g[)' Floh ͥ`(6$}WC{/C3BIҝI'gkƑ9 xAږ Ggx Gu7~N5_Dc{D(Y'w`5̎tĘ50H 17UQ+|x||kY+pGҲڽ7YތpT`"{2 qB0WS KMٽ=i9x: 8Ձ]KgM 8HZOɊyImu%+OBtrR`)# X2b_b\%8> ȑ6R@[w%YquH KJ~wvmXD`kk %Tu9)CU05j4>G=-Au۔^z4v]?}˒hs1"`ovOɻ}jX`'!FFsXhU#;w|w)3B=Vnd.uf)$Y͎?+FD2| O`R6BhNX^@`*2, =O%ڝhʹ^d@O&khFFʩ9jǍ#K&k{xtO%.|E}7:vK3(Z:v!{6F(p$Yѡ:x鶙钽y#&ڧϢnR.7g,Vʑ>OT!hsP H!\zDD|pfRGqunG{#>HvD1@L5*i9'~JHTPDObte\!t56^wFr.š8{XS׮NX3;O Ew;w%2;j@8ǀQ婉@D` bU- g3>WVW1aɒEƎ`Ɯ|3 J@,ı."kFHڦ˭#P6J_B9)sr&ۑtd! f] W,Vd7cW7V;|ֹgc`8A 2Ju7xN޾&g/S: ><-k"Q鶙x~2:48شcCaĆ^k<2a^ɸY?ɥRuÁ}|^ bANԟU=4"#nDN2ܓg!ne$6]5'q(~wăFޮ/V?&$"ЀaLKى}@nMs V;)>k2 Ўz7AG!ѱ4">hhq1şz🬿tL&g:hAAspX, 8A돞|g,zoD#$H!/d 3:QvJTH6f60Kd>kPU/]FblݗԚdmL&]ӭXTT@iiA l*8!g,%K۱@- `;ހ"9[}Tn/kB}84w9 svScf <_w>c Y-?9]0 -WY> N}RD>n,% *R_ A,*QMVF&?"KH(g"ҕ3L4Q6Kx L@ ʸcgiv^z*= Qb&'U{T,AsSv| r b_s&kL_m&3D?}*ݏz&hlo׳ 7;NKŇ[N,GL&vωHDue|]Um.$8mu"5z9Bqc3;yU/]s#gKhֱ5'];7P,>_H?;5̧!Wj񋔟QƧ ;i"y[Ʈ#"eDm"ƪgv`5o-gƛ#}ouS+`[?<~ZD^A&Is2dn1Z _e tCC74*-1ȮetnA:c ϐihȦ:eƔ5Wg{ 1'Lxi c{ L_r&! 61Jf dIFHśͽi.];dN .}00dewӛ2zӇM7ɗƗƎSMc^â7qG&,K8\MGe.`B4mBT}@6dCҬ.{p'c#QzT~²Tֱ}9P446 ̜1e˖rJN;4fΘho"50yda8|*ߙ˳ZF Ӌ f4!;ڱ{ԢM@ 7ͥcYyh tbǾ-5Fal+N/FalkM. 4ю=Y-@X]YOt902oi9ȟsXJvNb⺼ac8iߊ?cnLhyg7!o*W}HcB#7I|䡼]tۭYs>gߗ.z09S#L81*StG.^.P-0m*y)}Q(`7J:(v0evwBqXct:.fH; 8teQA߅5yM>z9GO)C) B5R05S$'QJP( ֬[P( Bn05y^rBP(<sZW|t&k%[HqSCjtժU.f4loiه!J>D7-gCe͚jBP 9}<~Itmy0کR&}+AS`};6]Y%M:! S)0F6Z~6)8Jn\#Ň4}ΰTz,X5E@F4M]g (\^7h|t1ePrdL壵,~ׁgr`j{9»YA{l#a!ylsɢP(Fg6!Iw&OA '{8„_9_;K@~bdj }>?r0t8Tz.y>ϑ㡷К7|ak1>pxyӁ!:0ȾCAɽ?ġ ZzQ1x ;sU8Gg {`/Audιҝi\g!{}2B-d;@;F"mjIL9 gܗU P({]~кglj /`G2:=C@u莦\vG)*ɜ\hSH`j6{6r#Ěҏ-۳vpo)"ocԂ ۛ~¸_wzw z؈v\%1@ 1w'GGLl){ljcXJP(a5+$;OYYp zBZoF,gޗ,'r(E 2UmOϥpٳ",F:Dwt| dR)B5[;ֳ]c_!ህ#*jҪ;T(ayLSq-x խϚ  9qCw.C)AƂ>x#.7KkB߹gQ>z `m~߮+K߂Aޕ?$vӗt=i󷍢'sj8NL-m(`>gݼHOuhNKȨAB;R]_>h\v ysf1K"#Z(b3?P`2pC^yesO "Gm4ĕyhE /ȣO!YUK5 ꏆ#\31XȞ F1~sd_qy'3S ;P r1 ުVYLf^+殷jYxb%ȉ&9 "XBP, p1 XH)-CӠΛ/iQvZ^߅V6YňHҶ3:Nڄ/|hxEch g|HW_Q8g ۏކeK4V[+6` l-~pRq1.c/d4~ޑ]]>&ܴΚUn(Jz3Ј- -LEUC': ͝mvTOK$boSȫhe=k YWIaQ!i** 춗 pgTQ~Du*B!ƫص ~ͯFHE]f>wX\1w kF[,˘;ez{l[* E/չ>U^Ĩ"1$l;H=Sn^ߵ;-҃\Bӫ J/=;ZϮ>~d? K}j Cz"SX+]~%a?+]iygj-8,;%^$frOI(KbTL$sηd &e[!׈UQ[ B9gëgqŷzWVw'_T<I'l";]xAOiF/)۷L0[6m5줧a'O: ӿk?e[FsȪrJuq/ 1Wr0m =* E^ bA9vc ri`8ԀpߗM[Nn"r KYT 46;+]ЫdI_Ž`Ɯ)%0Ypei%c u _."kFk0=S Zkzg?ԁ`C!\`FA"2wʬ c"p9u Oc\Ъh_Ԋ^q%cnzE6B&do Bw# o%=C"`''|mݛFЌ(^B* E9ԃla>{p-3҃6lm` t{%EZ6X @h%|w~cLœ.P,%ۛ Q}MHKvG"ӑEΠDV^qγbn>1w zY:kDCB Ȯ"sr}?Hӭ7Qs ޺؈>O=i9)nON9WƌVzq=2; /8Qb^@St?S|w#⭤fƹMCh:Q* Ed^u1BBO.XӬGp\݁dA:bw{1S}B"%K۱@-ėGz;Z_vk{Śn3]NBœ [-q7X,vCvY #qygQyzn Cҽohp$Գ`G"J}_uH_bMzjQc HDvGv]^MMKh%^ٌ:Q{XdY:/~ɘOX+Op @fL)/gi[Σ(D˿= 0UA4pTi^ٲ_q0Zmf!6`Lr!*sn._/R~Fޒr?;5̧r&1=M´Nڿ"e?ök !)|9=G',V7uEc3/0Ex]kL9Qcqe9S}Oj2dn1Z _eO(ZF8ƿ ljz3 6440sL-[ʕ+={6C:y@ /<`A W?iliBJ>0$eV1wG܌V͝pUo<棇=d BqFcxY,؉M~?cnLhyg7C#7 bA_+d]ooF$MvA.gߗ.LmH|koZy;ԷLZt ir*vְjc3+' غByNB؇HpW<ĩ-b=? if=-PXv,ۃN"2I,92;o_IDAT4OcгNX eVW×/ v nI+W2uC}z+OP(--C¡te9t;NJPSgVW( BH'V+ B8k'nUYz>eWBP(`jͺ5* BP(S_}OP( BTYAP( b9c2BP( Ez膎!P\TP( B,` ygp`LbUVR( BKEt`8 ĤK~4cfm/=aU( B?..'. ˅))IENDB`cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-multi-process.xml0000644000175000017500000015163211525702772025054 0ustar koukou ]> マルチプロセス 3 Cutterライブラリ マルチプロセス マルチプロセスでテストを走らせるためのユーティリティ。 概要 CutSubProcess; CutSubProcessGroup; CutSubProcess * cut_take_new_sub_process (const char *test_directory); cut_boolean cut_sub_process_run (CutSubProcess *sub_process); void cut_sub_process_run_async (CutSubProcess *sub_process); cut_boolean cut_sub_process_wait (CutSubProcess *sub_process); cut_boolean cut_sub_process_is_success (CutSubProcess *sub_process); cut_boolean cut_sub_process_is_running (CutSubProcess *sub_process); const char * cut_sub_process_get_test_directory (CutSubProcess *sub_process); void cut_sub_process_set_test_directory (CutSubProcess *sub_process, const char *test_directory); const char * cut_sub_process_get_source_directory (CutSubProcess *sub_process); void cut_sub_process_set_source_directory (CutSubProcess *sub_process, const char *source_directory); cut_boolean cut_sub_process_get_multi_thread (CutSubProcess *sub_process); void cut_sub_process_set_multi_thread (CutSubProcess *sub_process, cut_boolean multi_thread); int cut_sub_process_get_max_threads (CutSubProcess *sub_process); void cut_sub_process_set_max_threads (CutSubProcess *sub_process, int max_threads); const char ** cut_sub_process_get_exclude_files (CutSubProcess *sub_process); void cut_sub_process_set_exclude_files (CutSubProcess *sub_process, const char **files); const char ** cut_sub_process_get_exclude_directories (CutSubProcess *sub_process); void cut_sub_process_set_exclude_directories (CutSubProcess *sub_process, const char **directories); const char ** cut_sub_process_get_target_test_case_names (CutSubProcess *sub_process); void cut_sub_process_set_target_test_case_names (CutSubProcess *sub_process, const char **names); const char ** cut_sub_process_get_target_test_names (CutSubProcess *sub_process); void cut_sub_process_set_target_test_names (CutSubProcess *sub_process, const char **names); double cut_sub_process_get_elapsed (CutSubProcess *sub_process); double cut_sub_process_get_total_elapsed (CutSubProcess *sub_process); cut_boolean cut_sub_process_is_crashed (CutSubProcess *sub_process); cut_boolean cut_sub_process_get_fatal_failures (CutSubProcess *sub_process); void cut_sub_process_set_fatal_failures (CutSubProcess *sub_process, cut_boolean fatal_failures); CutSubProcessGroup * cut_take_new_sub_process_group (void); void cut_sub_process_group_add (CutSubProcessGroup *group, CutSubProcess *sub_process); cut_boolean cut_sub_process_group_run (CutSubProcessGroup *group); void cut_sub_process_group_run_async (CutSubProcessGroup *group); cut_boolean cut_sub_process_group_wait (CutSubProcessGroup *group); 説明 もしテスト対象のソフトウェアがマルチプロセスやマルチスレッドでの使用をサポートしているなら、それらの機能をテストする必要があります。そのようなテストために、CutSubProcessCutSubProcessGroupを使うことができます。 CutSubProcessはテストを別のプロセスで走らせ、その結果をメインプロセスに転送します。このため、別のプロセス上でのテスト結果もメインプロセス上でのテスト結果と同じように見えます。 CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。 詳細 CutSubProcess CutSubProcess typedef struct _CutSubProcess CutSubProcess; サブcutterプロセスを表現するオブジェクトです。サブcutterプロセスのパラメタとテスト結果を持っています。 例: CutSubProcess *sub_process; sub_process = cut_take_new_sub_process("test-dir"); cut_sub_process_set_multi_thread(sub_process, TRUE); cut_assert_true(cut_sub_process_run(sub_process)); 1.0.4から CutSubProcessGroup CutSubProcessGroup typedef struct _CutSubProcessGroup CutSubProcessGroup; サブcutterプロセスを実行するオブジェクトです。このオブジェクトは便利にテストを書くために導入されています。 例: CutSubProcess *sub_process1, *sub_process2, *sub_process3; CutSubProcessGroup *group; sub_process1 = cut_take_new_sub_process("test-dir1"); sub_process2 = cut_take_new_sub_process("test-dir2"); sub_process3 = cut_take_new_sub_process("test-dir3"); group = cut_take_new_sub_process_group(); cut_sub_process_group_add(group, sub_process1); cut_sub_process_group_add(group, sub_process2); cut_sub_process_group_add(group, sub_process3); cut_assert_true(cut_sub_process_group_run(group)); 1.0.4から cut_take_new_sub_process () cut_take_new_sub_process CutSubProcess * cut_take_new_sub_process (const char *test_directory); test_directory以下のテストを実行するサブcutterプロセスを作り、それを返します。返されたサブcutterプロセスの所有者はCutterです。 test_directory : サブcutterプロセスのテストがあるディレクトリ。 戻り値 :CutSubProcessオブジェクト。 1.0.4から cut_sub_process_run () cut_sub_process_run cut_boolean cut_sub_process_run (CutSubProcess *sub_process); サブcutterプロセスを実行します。 sub_process : CutSubProcessオブジェクト。 戻り値 :もし、sub_processが正常に終了した場合はCUT_TRUE、そうでない場合はCUT_FALSE 1.0.4から cut_sub_process_run_async () cut_sub_process_run_async void cut_sub_process_run_async (CutSubProcess *sub_process); 非同期でサブcutterコマンドを実行します。sub_processの結果はcut_sub_process_wait()で取得できます。 sub_process : CutSubProcessオブジェクト。 1.0.4から cut_sub_process_wait () cut_sub_process_wait cut_boolean cut_sub_process_wait (CutSubProcess *sub_process); 非同期で実行されたサブcutterプロセスの終了を待ち、結果を返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :もし、sub_processが正常に終了した場合はCUT_TRUE、そうでない場合はCUT_FALSE 1.0.4から cut_sub_process_is_success () cut_sub_process_is_success cut_boolean cut_sub_process_is_success (CutSubProcess *sub_process); sub_processが正常に終了したかどうかを返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :もし、sub_processが正常に終了した場合はCUT_TRUE、そうでない場合はCUT_FALSE 1.0.4から cut_sub_process_is_running () cut_sub_process_is_running cut_boolean cut_sub_process_is_running (CutSubProcess *sub_process); sub_processが実行中かどうかを返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :sub_processが実行中の場合はCUT_TRUE、そうでない場合はCUT_FALSE 1.0.4から cut_sub_process_get_test_directory () cut_sub_process_get_test_directory const char * cut_sub_process_get_test_directory (CutSubProcess *sub_process); 実行対象のテストがあるディレクトリを返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :テストディレクトリ 1.0.4から cut_sub_process_set_test_directory () cut_sub_process_set_test_directory void cut_sub_process_set_test_directory (CutSubProcess *sub_process, const char *test_directory); 実行対象のテストがあるディレクトリとしてtest_directoryを指定します。これは必須のコマンドライン引数であるTEST_DIRECTORYと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 test_directory : テストディレクトリ 1.0.4から cut_sub_process_get_source_directory () cut_sub_process_get_source_directory const char * cut_sub_process_get_source_directory (CutSubProcess *sub_process); ソースファイルがあるディレクトリを返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :ソースディレクトリ。 1.0.4から cut_sub_process_set_source_directory () cut_sub_process_set_source_directory void cut_sub_process_set_source_directory (CutSubProcess *sub_process, const char *source_directory); ソースファイルがあるディレクトリとしてsource_directoryを指定します。これは--source-directoryコマンドラインオプションと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 source_directory : ソースディレクトリ。 1.0.4から cut_sub_process_get_multi_thread () cut_sub_process_get_multi_thread cut_boolean cut_sub_process_get_multi_thread (CutSubProcess *sub_process); sub_processをマルチスレッドモードで実行するかどうかを返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :sub_processがマルチスレッドモードで実行されるならCUT_TRUE、そうでなければCUT_FALSE 1.0.4から cut_sub_process_set_multi_thread () cut_sub_process_set_multi_thread void cut_sub_process_set_multi_thread (CutSubProcess *sub_process, cut_boolean multi_thread); sub_processがマルチスレッドモードで実行されるかどうかを指定します。これは--multi-threadコマンドラインオプションと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 multi_thread : マルチスレッドモードで実行するならCUT_TRUE 1.0.4から cut_sub_process_get_max_threads () cut_sub_process_get_max_threads int cut_sub_process_get_max_threads (CutSubProcess *sub_process); sub_process中で同時に動く最大スレッド数を返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :sub_process中で同時に動く最大スレッド数。 1.0.5から cut_sub_process_set_max_threads () cut_sub_process_set_max_threads void cut_sub_process_set_max_threads (CutSubProcess *sub_process, int max_threads); sub_process中で同時に動く最大スレッド数を設定します。-1は制限がないことを意味します。これは--max-threadsコマンドラインオプションと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 max_threads : 同時に動く最大スレッド数。 1.0.5から cut_sub_process_get_exclude_files () cut_sub_process_get_exclude_files const char ** cut_sub_process_get_exclude_files (CutSubProcess *sub_process); テスト対象ファイルから除外されるファイル名を返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :テスト対象ファイルから除外されるファイル名。 1.0.4から cut_sub_process_set_exclude_files () cut_sub_process_set_exclude_files void cut_sub_process_set_exclude_files (CutSubProcess *sub_process, const char **files); テスト対象から除外されるファイル名を指定します。これは--exclude-fileコマンドラインオプションと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 files : テスト対象ファイルから除外されるファイル名。 1.0.4から cut_sub_process_get_exclude_directories () cut_sub_process_get_exclude_directories const char ** cut_sub_process_get_exclude_directories (CutSubProcess *sub_process); テスト対象ディレクトリから除外されるディレクトリ名を返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :テスト対象ディレクトリから除外されるディレクトリ名。 1.0.4から cut_sub_process_set_exclude_directories () cut_sub_process_set_exclude_directories void cut_sub_process_set_exclude_directories (CutSubProcess *sub_process, const char **directories); テスト対象ディレクトリから除外されるディレクトリ名を指定します。これは--exclude-directoryコマンドラインオプションと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 directories : テスト対象ディレクトリから除外されるディレクトリ名。 1.0.4から cut_sub_process_get_target_test_case_names () cut_sub_process_get_target_test_case_names const char ** cut_sub_process_get_target_test_case_names (CutSubProcess *sub_process); 実行されるテストケース名を返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :実行されるテストケース名。 1.0.4から cut_sub_process_set_target_test_case_names () cut_sub_process_set_target_test_case_names void cut_sub_process_set_target_test_case_names (CutSubProcess *sub_process, const char **names); 実行されるテストケース名を指定します。これは--test-caseコマンドラインオプションと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 names : 実行されるテストケース名。 1.0.4から cut_sub_process_get_target_test_names () cut_sub_process_get_target_test_names const char ** cut_sub_process_get_target_test_names (CutSubProcess *sub_process); 実行されるテスト名を返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :実行されるテスト名。 1.0.4から cut_sub_process_set_target_test_names () cut_sub_process_set_target_test_names void cut_sub_process_set_target_test_names (CutSubProcess *sub_process, const char **names); 実行されるテスト名を指定します。これは--testコマンドラインオプションと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 names : 実行されるテスト名。 1.0.4から cut_sub_process_get_elapsed () cut_sub_process_get_elapsed double cut_sub_process_get_elapsed (CutSubProcess *sub_process); sub_processを実行していた間の時間を取得します。 sub_process : CutSubProcessオブジェクト。 戻り値 :sub_processを実行していた間の時間。 1.0.4から cut_sub_process_get_total_elapsed () cut_sub_process_get_total_elapsed double cut_sub_process_get_total_elapsed (CutSubProcess *sub_process); 各テストで使われた時間の合計を返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :各テストで使われた時間の合計。 1.0.4から cut_sub_process_is_crashed () cut_sub_process_is_crashed cut_boolean cut_sub_process_is_crashed (CutSubProcess *sub_process); sub_processが異常終了したかどうかを返します。 sub_process : CutSubProcessオブジェクト。 戻り値 :sub_processが異常終了したときはCUT_TRUE、そうでない場合はCUT_FALSE 1.0.4から cut_sub_process_get_fatal_failures () cut_sub_process_get_fatal_failures cut_boolean cut_sub_process_get_fatal_failures (CutSubProcess *sub_process); sub_processが「失敗は致命的」モードで動くかどうかを返します。「失敗は致命的」モードの詳細はcut_sub_process_set_fatal_failures()を見てください。 sub_process : CutSubProcessオブジェクト。 戻り値 :sub_processが「失敗は致命的」モードで実行されるならCUT_TRUE、そうでなければCUT_FALSE 1.0.4から cut_sub_process_set_fatal_failures () cut_sub_process_set_fatal_failures void cut_sub_process_set_fatal_failures (CutSubProcess *sub_process, cut_boolean fatal_failures); sub_processが「失敗は致命的」モードで実行されるかどうかを設定します。このモードではすべての失敗は致命的な問題として扱われます。つまり、失敗時にテストが異常終了します。いくつかの環境ではブレークポイントが設定されます。 --fatal-failuresコマンドラインオプションと同じ意味を持ちます。 sub_process : CutSubProcessオブジェクト。 fatal_failures : 「失敗は致命的」モードで実行するならCUT_TRUE 1.0.4から cut_take_new_sub_process_group () cut_take_new_sub_process_group CutSubProcessGroup * cut_take_new_sub_process_group (void); サブcuterプロセスのグループを作ります。作られたグループの所有者はCutterです。 戻り値 :CutSubProcessGroupオブジェクト。 1.0.4から cut_sub_process_group_add () cut_sub_process_group_add void cut_sub_process_group_add (CutSubProcessGroup *group, CutSubProcess *sub_process); sub_processgroupに追加します。 group : CutSubProcessGroupオブジェクト。 sub_process : CutSubProcessオブジェクト。 1.0.4から cut_sub_process_group_run () cut_sub_process_group_run cut_boolean cut_sub_process_group_run (CutSubProcessGroup *group); group内のすべてのサブcutterプロセスを実行し、その結果を返します。 group : CutSubProcessGroupオブジェクト。 戻り値 :group内のすべてのサブcutterプロセスが正常終了したらCUT_TRUE、そうでない場合はCUT_FALSE 1.0.4から cut_sub_process_group_run_async () cut_sub_process_group_run_async void cut_sub_process_group_run_async (CutSubProcessGroup *group); group内のすべてのサブcutterプロセスを非同期で実行します。実行結果はcut_sub_process_group_wait()で取得できます。 group : CutSubProcessGroupオブジェクト。 1.0.4から cut_sub_process_group_wait () cut_sub_process_group_wait cut_boolean cut_sub_process_group_wait (CutSubProcessGroup *group); group内の非同期で実行されたすべてのサブcutterプロセスの終了を待ち、終了結果を返します。 group : CutSubProcessGroupオブジェクト。 戻り値 :group内のすべてのサブcutterプロセスが正常終了したらCUT_TRUE、そうでない場合はCUT_FALSE 1.0.4から cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-1-5.html0000644000175000017500000001716211525703040023352 0ustar koukou 1.1.5での新しいシンボル一覧

1.1.5での新しいシンボル一覧

C

cut_assert_exist_path, cut_assert_exist_path ()
cut_assert_not_exist_path, cut_assert_not_exist_path ()
cut_build_path_array, cut_build_path_array ()
cut_get_source_directory, cut_get_source_directory ()

G

GCutProcess::error, "error"シグナル
GCutProcess::error-received, "error-received"シグナル
GCutProcess::output-received, "output-received"シグナル
GCutProcess::reaped, "reaped"シグナル
GCutProcessError, enum GCutProcessError
gcut_assert_equal_string, gcut_assert_equal_string ()
gcut_data_has_field, gcut_data_has_field ()
gcut_list_int_new, gcut_list_int_new ()
gcut_list_uint_new, gcut_list_uint_new ()
gcut_process_flush, gcut_process_flush ()
gcut_process_get_env, gcut_process_get_env ()
gcut_process_get_error_channel, gcut_process_get_error_channel ()
gcut_process_get_error_stream, gcut_process_get_error_stream ()
gcut_process_get_error_string, gcut_process_get_error_string ()
gcut_process_get_flags, gcut_process_get_flags ()
gcut_process_get_forced_termination_wait_time, gcut_process_get_forced_termination_wait_time ()
gcut_process_get_input_channel, gcut_process_get_input_channel ()
gcut_process_get_output_channel, gcut_process_get_output_channel ()
gcut_process_get_output_stream, gcut_process_get_output_stream ()
gcut_process_get_output_string, gcut_process_get_output_string ()
gcut_process_get_pid, gcut_process_get_pid ()
gcut_process_kill, gcut_process_kill ()
gcut_process_new, gcut_process_new ()
gcut_process_new_argv, gcut_process_new_argv ()
gcut_process_new_array, gcut_process_new_array ()
gcut_process_new_command_line, gcut_process_new_command_line ()
gcut_process_new_strings, gcut_process_new_strings ()
gcut_process_new_va_list, gcut_process_new_va_list ()
gcut_process_run, gcut_process_run ()
gcut_process_set_env, gcut_process_set_env ()
gcut_process_set_flags, gcut_process_set_flags ()
gcut_process_set_forced_termination_wait_time, gcut_process_set_forced_termination_wait_time ()
gcut_process_wait, gcut_process_wait ()
gcut_process_write, gcut_process_write ()
gcut_string_equal, gcut_string_equal ()
gcut_string_inspect, gcut_string_inspect ()
gcut_take_new_list_int, gcut_take_new_list_int ()
gcut_take_new_list_uint, gcut_take_new_list_uint ()
././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootcutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-Utilities-for-GEnum-and-GFlags.htmlcutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-Utilities-for-GEnum-and-GFlags0000644000175000017500000004037111525703040031562 0ustar koukou GEnumとGFlags用の検証ユーティリティ

GEnumとGFlags用の検証ユーティリティ

GEnumとGFlags用の検証ユーティリティ — GEnumまたはGFlagsに関する検証をもっと簡単に書くためのユーティリティ。

概要

#define             GCUT_ENUM_ERROR
GQuark              gcut_enum_error_quark               (void);
enum                GCutEnumError;
gchar *             gcut_enum_inspect                   (GType enum_type,
                                                         gint enum_value);
gint                gcut_enum_parse                     (GType enum_type,
                                                         const gchar *enum_value,
                                                         GError **error);
gchar *             gcut_flags_inspect                  (GType flags_type,
                                                         guint flags_value);
guint               gcut_flags_parse                    (GType flags_type,
                                                         const gchar *flags_value,
                                                         GError **error);
guint               gcut_flags_get_all                  (GType flags_type,
                                                         GError **error);

説明

検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。

このユーティリティはGEnumまたはGFlagsに関する検証の作成を補助します。

詳細

GCUT_ENUM_ERROR

#define GCUT_ENUM_ERROR (gcut_enum_error_quark())

列挙型関連操作用のエラードメインです。このドメインのエラーはGCutEnumError列挙型のどれかです。

1.0.6から


gcut_enum_error_quark ()

GQuark              gcut_enum_error_quark               (void);

戻り値 :


enum GCutEnumError

typedef enum
{
    GCUT_ENUM_ERROR_INVALID_TYPE,
    GCUT_ENUM_ERROR_INVALID_VALUE
} GCutEnumError;

列挙型関連操作で返されるエラーコード。

GCUT_ENUM_ERROR_INVALID_TYPE

不正な型。

GCUT_ENUM_ERROR_INVALID_VALUE

不正な値。

1.0.6から


gcut_enum_inspect ()

gchar *             gcut_enum_inspect                   (GType enum_type,
                                                         gint enum_value);

enum_typeの値enum_valueの詳細を返します。返された文字列が必要なくなったときは開放してください。

enum_type :

GEnumの型。

enum_value :

詳細を示すGEnumの値。

戻り値 :

enum_valueの詳細を示した文字列。

1.0.5から


gcut_enum_parse ()

gint                gcut_enum_parse                     (GType enum_type,
                                                         const gchar *enum_value,
                                                         GError **error);

enum_valueをパースし、enum_type型の列挙値を返します。enum_valueは列挙名またはニックネームでなければいけません。enum_valueがマッチしない場合はerrorGCutEnumErrorエラーが設定されます。

enum_type :

GEnumの型。

enum_value :

パースされる文字列。

error :

エラーを返すアドレスまたはNULL

戻り値 :

enum_valueに対応するenum_typeの値。

1.0.6から


gcut_flags_inspect ()

gchar *             gcut_flags_inspect                  (GType flags_type,
                                                         guint flags_value);

flags_typeの値flags_valueの詳細を返します。返された文字列が必要なくなったときは開放してください。

flags_type :

GFlagsの型。

flags_value :

詳細を示すGFlagsの値。

戻り値 :

flags_valueの詳細を示した文字列。

1.0.5から


gcut_flags_parse ()

guint               gcut_flags_parse                    (GType flags_type,
                                                         const gchar *flags_value,
                                                         GError **error);

flags_valueをパースし、flags_type型のフラグ値を返します。flags_valueは"ニックネームまたは名前1|ニックネームまたは名前2|...|ニックネームまたは名前N"という書式でなければいけません。flags_valueが未知のフラグを含んでいる場合は、errorGCutEnumErrorエラーが設定されます。

flags_type :

GFlagsの型。

flags_value :

パースされる文字列。

error :

エラーを返すアドレスまたはNULL

戻り値 :

flags_valueに対応するflags_typeの値。

1.0.6から


gcut_flags_get_all ()

guint               gcut_flags_get_all                  (GType flags_type,
                                                         GError **error);

すべてのフラグ値が有効なフラグ値を返します。

flags_type :

GFlagsの型。

error :

エラーを返すアドレスまたはNULL

戻り値 :

すべてのフラグ値が有効なフラグ値。

1.0.6から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-config.xml0000644000175000017500000000444011525702770023503 0ustar koukou ]> cut-config 3 Cutterライブラリ cut-config 概要 #define CUT_HAVE_STDINT_H #define CUT_HAVE_INTTYPES_H #define CUT_HAVE_SYS_SOCKET_H #define CUT_HAVE_SYS_UN_H 説明 詳細 CUT_HAVE_STDINT_H CUT_HAVE_STDINT_H #define CUT_HAVE_STDINT_H 1 CUT_HAVE_INTTYPES_H CUT_HAVE_INTTYPES_H #define CUT_HAVE_INTTYPES_H 1 CUT_HAVE_SYS_SOCKET_H CUT_HAVE_SYS_SOCKET_H #define CUT_HAVE_SYS_SOCKET_H 1 CUT_HAVE_SYS_UN_H CUT_HAVE_SYS_UN_H #define CUT_HAVE_SYS_UN_H 1 cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-full.xml0000644000175000017500000041175311525702765024300 0ustar koukou ]> A gcut_add_datum, function in 便利なテストデータ用API gcut_assert_equal_enum, function in GLibサポート付きの検証 gcut_assert_equal_enum_helper, function in gcut-assertions-helper gcut_assert_equal_error, function in GLibサポート付きの検証 gcut_assert_equal_error_helper, function in gcut-assertions-helper gcut_assert_equal_flags, function in GLibサポート付きの検証 gcut_assert_equal_flags_helper, function in gcut-assertions-helper gcut_assert_equal_hash_table, function in GLibサポート付きの検証 gcut_assert_equal_hash_table_helper, function in gcut-assertions-helper gcut_assert_equal_hash_table_string_string, function in GLibサポート付きの検証 gcut_assert_equal_hash_table_string_string_helper, function in gcut-assertions-helper gcut_assert_equal_int64, function in GLibサポート付きの検証 gcut_assert_equal_int64_helper, function in gcut-assertions-helper gcut_assert_equal_list, function in GLibサポート付きの検証 gcut_assert_equal_list_enum, function in GLibサポート付きの検証 gcut_assert_equal_list_enum_helper, function in gcut-assertions-helper gcut_assert_equal_list_flags, function in GLibサポート付きの検証 gcut_assert_equal_list_flags_helper, function in gcut-assertions-helper gcut_assert_equal_list_helper, function in gcut-assertions-helper gcut_assert_equal_list_int, function in GLibサポート付きの検証 gcut_assert_equal_list_int_helper, function in gcut-assertions-helper gcut_assert_equal_list_object, function in GLibサポート付きの検証 gcut_assert_equal_list_object_custom, function in GLibサポート付きの検証 gcut_assert_equal_list_object_helper, function in gcut-assertions-helper gcut_assert_equal_list_string, function in GLibサポート付きの検証 gcut_assert_equal_list_string_helper, function in gcut-assertions-helper gcut_assert_equal_list_uint, function in GLibサポート付きの検証 gcut_assert_equal_list_uint_helper, function in gcut-assertions-helper gcut_assert_equal_object, function in GLibサポート付きの検証 gcut_assert_equal_object_custom, function in GLibサポート付きの検証 gcut_assert_equal_object_helper, function in gcut-assertions-helper gcut_assert_equal_pid, function in GLibサポート付きの検証 gcut_assert_equal_pid_helper, function in gcut-assertions-helper gcut_assert_equal_string, function in GLibサポート付きの検証 gcut_assert_equal_string_helper, function in gcut-assertions-helper gcut_assert_equal_time_val, function in GLibサポート付きの検証 gcut_assert_equal_time_val_helper, function in gcut-assertions-helper gcut_assert_equal_type, function in GLibサポート付きの検証 gcut_assert_equal_type_helper, function in gcut-assertions-helper gcut_assert_equal_uint64, function in GLibサポート付きの検証 gcut_assert_equal_uint64_helper, function in gcut-assertions-helper gcut_assert_equal_value, function in GLibサポート付きの検証 gcut_assert_equal_value_helper, function in gcut-assertions-helper gcut_assert_error, function in GLibサポート付きの検証 gcut_assert_error_helper, function in gcut-assertions-helper gcut_assert_not_equal_int64, function in GLibサポート付きの検証 gcut_assert_not_equal_int64_helper, function in gcut-assertions-helper gcut_assert_not_equal_pid, function in GLibサポート付きの検証 gcut_assert_not_equal_pid_helper, function in gcut-assertions-helper gcut_assert_not_equal_uint64, function in GLibサポート付きの検証 gcut_assert_not_equal_uint64_helper, function in gcut-assertions-helper gcut_assert_remove_path, function in GLibサポート付きの検証 gcut_assert_remove_path_helper, function in gcut-assertions-helper C CPPCUTTER_ENABLED, macro in CppCutter cppcut_assert_equal, macro in C++サポート付きの検証 CPPCUT_BEGIN_TEST_DECLS, macro in CppCutter CPPCUT_DECL, macro in cppcut-macros CPPCUT_END_TEST_DECLS, macro in CppCutter cppcut_message, macro in CppCutter CutCallbackFunction, user_function in CutConsoleDiffWriter, struct in CutConsoleDiffWriter CutConsoleDiffWriterClass, struct in CutConsoleDiffWriter CutDestroyFunction, user_function in CutStringDiffWriter, struct in CutStringDiffWriter CutStringDiffWriterClass, struct in CutStringDiffWriter CutSubProcess, struct in マルチプロセス CutSubProcessGroup, struct in マルチプロセス CUTTER_CHECK_VERSION, macro in バージョン情報 CUTTER_VERSION_MAJOR, macro in バージョン情報 CUTTER_VERSION_MICRO, macro in バージョン情報 CUTTER_VERSION_MINOR, macro in バージョン情報 CUTTER_VERSION_STRING, macro in バージョン情報 cut_add_data, macro in Cutter cut_add_data_backward_compatibility, macro in Cutter cut_append_diff, function in 検証作成の補助 cut_assert, function in 検証 cut_assert_equal, macro in 検証 cut_assert_equal_boolean, function in 検証 cut_assert_equal_char, macro in 検証 cut_assert_equal_double, function in 検証 cut_assert_equal_file_raw, macro in 検証 cut_assert_equal_fixture_data_string, function in 検証 cut_assert_equal_g_list_int, function in GLibサポート付きの検証 cut_assert_equal_g_list_string, function in GLibサポート付きの検証 cut_assert_equal_g_type, function in GLibサポート付きの検証 cut_assert_equal_g_value, function in GLibサポート付きの検証 cut_assert_equal_int, function in 検証 cut_assert_equal_intmax, macro in 検証 cut_assert_equal_intptr, macro in 検証 cut_assert_equal_int_fast16, macro in 検証 cut_assert_equal_int_fast32, macro in 検証 cut_assert_equal_int_fast64, macro in 検証 cut_assert_equal_int_fast8, macro in 検証 cut_assert_equal_int_least16, macro in 検証 cut_assert_equal_int_least32, macro in 検証 cut_assert_equal_int_least64, macro in 検証 cut_assert_equal_int_least8, macro in 検証 cut_assert_equal_memory, function in 検証 cut_assert_equal_pointer, function in 検証 cut_assert_equal_size, function in 検証 cut_assert_equal_sockaddr, macro in 検証 cut_assert_equal_string, function in 検証 cut_assert_equal_string_array, function in 検証 cut_assert_equal_string_array_with_free, function in 検証 cut_assert_equal_string_or_null, function in 検証 cut_assert_equal_string_with_free, function in 検証 cut_assert_equal_substring, function in 検証 cut_assert_equal_uint, function in 検証 cut_assert_equal_uintmax, macro in 検証 cut_assert_equal_uintptr, macro in 検証 cut_assert_equal_uint_fast16, macro in 検証 cut_assert_equal_uint_fast32, macro in 検証 cut_assert_equal_uint_fast64, macro in 検証 cut_assert_equal_uint_fast8, macro in 検証 cut_assert_equal_uint_least16, macro in 検証 cut_assert_equal_uint_least32, macro in 検証 cut_assert_equal_uint_least64, macro in 検証 cut_assert_equal_uint_least8, macro in 検証 cut_assert_errno, function in 検証 cut_assert_exist_path, function in 検証 cut_assert_false, function in 検証 cut_assert_file_exist, function in 検証 cut_assert_g_error, function in GLibサポート付きの検証 cut_assert_match, function in 検証 cut_assert_match_with_free, function in 検証 cut_assert_not_equal_boolean, function in 検証 cut_assert_not_equal_char, macro in 検証 cut_assert_not_equal_double, function in 検証 cut_assert_not_equal_file_raw, macro in 検証 cut_assert_not_equal_int, function in 検証 cut_assert_not_equal_intmax, macro in 検証 cut_assert_not_equal_intptr, macro in 検証 cut_assert_not_equal_int_fast16, macro in 検証 cut_assert_not_equal_int_fast32, macro in 検証 cut_assert_not_equal_int_fast64, macro in 検証 cut_assert_not_equal_int_fast8, macro in 検証 cut_assert_not_equal_int_least16, macro in 検証 cut_assert_not_equal_int_least32, macro in 検証 cut_assert_not_equal_int_least64, macro in 検証 cut_assert_not_equal_int_least8, macro in 検証 cut_assert_not_equal_memory, function in 検証 cut_assert_not_equal_size, function in 検証 cut_assert_not_equal_string, function in 検証 cut_assert_not_equal_substring, function in 検証 cut_assert_not_equal_uint, function in 検証 cut_assert_not_equal_uintmax, macro in 検証 cut_assert_not_equal_uintptr, macro in 検証 cut_assert_not_equal_uint_fast16, macro in 検証 cut_assert_not_equal_uint_fast32, macro in 検証 cut_assert_not_equal_uint_fast64, macro in 検証 cut_assert_not_equal_uint_fast8, macro in 検証 cut_assert_not_equal_uint_least16, macro in 検証 cut_assert_not_equal_uint_least32, macro in 検証 cut_assert_not_equal_uint_least64, macro in 検証 cut_assert_not_equal_uint_least8, macro in 検証 cut_assert_not_exist_path, function in 検証 cut_assert_not_null, function in 検証 cut_assert_null, function in 検証 cut_assert_null_string, function in 検証 cut_assert_operator, macro in 検証 cut_assert_operator_double, macro in 検証 cut_assert_operator_int, macro in 検証 cut_assert_operator_size, macro in 検証 cut_assert_operator_uint, macro in 検証 cut_assert_path_exist, function in 検証 cut_assert_path_not_exist, function in 検証 cut_assert_remove_path, function in GLibサポート付きの検証 cut_assert_true, function in 検証 cut_boolean, typedef in cut_build_fixture_data_path, function in テストユーティリティ cut_build_fixture_path, function in テストユーティリティ cut_build_path, function in テストユーティリティ cut_build_path_array, function in テストユーティリティ CUT_CONSOLE_COLOR_BLACK_BACK, macro in cut-console CUT_CONSOLE_COLOR_BLUE, macro in cut-console CUT_CONSOLE_COLOR_BLUE_BACK, macro in cut-console CUT_CONSOLE_COLOR_CYAN, macro in cut-console CUT_CONSOLE_COLOR_CYAN_BACK, macro in cut-console CUT_CONSOLE_COLOR_GREEN, macro in cut-console CUT_CONSOLE_COLOR_GREEN_BACK, macro in cut-console CUT_CONSOLE_COLOR_MAGENTA, macro in cut-console CUT_CONSOLE_COLOR_NORMAL, macro in cut-console CUT_CONSOLE_COLOR_RED, macro in cut-console CUT_CONSOLE_COLOR_RED_BACK, macro in cut-console CUT_CONSOLE_COLOR_WHITE, macro in cut-console CUT_CONSOLE_COLOR_WHITE_BACK, macro in cut-console CUT_CONSOLE_COLOR_YELLOW, macro in cut-console cut_console_diff_writer_get_deleted_line_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_deleted_mark_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_deleted_segment_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_inserted_line_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_inserted_mark_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_inserted_segment_color, function in CutConsoleDiffWriter cut_console_diff_writer_new, function in CutConsoleDiffWriter cut_console_diff_writer_set_deleted_line_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_deleted_mark_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_deleted_segment_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_inserted_line_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_inserted_mark_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_inserted_segment_color, function in CutConsoleDiffWriter cut_console_guess_color_usability, function in cut-console cut_console_parse_color_arg, function in cut-console cut_equal_double, function in 検証作成の補助 cut_equal_sockaddr, macro in 検証作成の補助 cut_equal_string, function in 検証作成の補助 cut_error, function in 検証 cut_error_errno, function in 検証 CUT_EXPORT, macro in Cutter cut_fail, function in 検証 CUT_FALSE, macro in cut_fork, macro in 実験 cut_fork_get_stderr_message, macro in 実験 cut_fork_get_stdout_message, macro in 実験 cut_get_current_test_context, macro in Cutter cut_get_fixture_data, function in テストユーティリティ cut_get_fixture_data_string, function in テストユーティリティ cut_get_source_directory, function in 検証作成の補助 cut_get_test_directory, function in 検証作成の補助 CUT_HAVE_INTTYPES_H, macro in cut-config CUT_HAVE_STDINT_H, macro in cut-config CUT_HAVE_SYS_SOCKET_H, macro in cut-config CUT_HAVE_SYS_UN_H, macro in cut-config cut_inspect_sockaddr, macro in 検証作成の補助 cut_inspect_string_array, function in 検証作成の補助 cut_keep_message, function in Cutter cut_make_directory, function in テストユーティリティ cut_message, function in Cutter cut_notify, function in 検証 cut_omit, function in 検証 cut_pend, function in 検証 cut_pending, function in 検証 cut_pop_backtrace, function in 検証作成の補助 cut_push_backtrace, function in 検証作成の補助 CUT_RELATIVE_PATH, macro in 検証作成の補助 cut_remove_path, function in テストユーティリティ cut_return, function in 検証 cut_setup, function in Cutter cut_set_actual, macro in 検証作成の補助 cut_set_attributes, macro in Cutter cut_set_current_test_context, macro in Cutter cut_set_expected, macro in 検証作成の補助 cut_set_fixture_data_dir, function in テストユーティリティ cut_set_message, function in Cutter cut_set_message_va_list, function in Cutter cut_shutdown, function in Cutter cut_startup, function in Cutter cut_string_diff_writer_get_result, function in CutStringDiffWriter cut_string_diff_writer_new, function in CutStringDiffWriter cut_sub_process_get_elapsed, function in マルチプロセス cut_sub_process_get_exclude_directories, function in マルチプロセス cut_sub_process_get_exclude_files, function in マルチプロセス cut_sub_process_get_fatal_failures, function in マルチプロセス cut_sub_process_get_max_threads, function in マルチプロセス cut_sub_process_get_multi_thread, function in マルチプロセス cut_sub_process_get_source_directory, function in マルチプロセス cut_sub_process_get_target_test_case_names, function in マルチプロセス cut_sub_process_get_target_test_names, function in マルチプロセス cut_sub_process_get_test_directory, function in マルチプロセス cut_sub_process_get_total_elapsed, function in マルチプロセス cut_sub_process_group_add, function in マルチプロセス cut_sub_process_group_run, function in マルチプロセス cut_sub_process_group_run_async, function in マルチプロセス cut_sub_process_group_wait, function in マルチプロセス cut_sub_process_is_crashed, function in マルチプロセス cut_sub_process_is_running, function in マルチプロセス cut_sub_process_is_success, function in マルチプロセス cut_sub_process_run, function in マルチプロセス cut_sub_process_run_async, function in マルチプロセス cut_sub_process_set_exclude_directories, function in マルチプロセス cut_sub_process_set_exclude_files, function in マルチプロセス cut_sub_process_set_fatal_failures, function in マルチプロセス cut_sub_process_set_max_threads, function in マルチプロセス cut_sub_process_set_multi_thread, function in マルチプロセス cut_sub_process_set_source_directory, function in マルチプロセス cut_sub_process_set_target_test_case_names, function in マルチプロセス cut_sub_process_set_target_test_names, function in マルチプロセス cut_sub_process_set_test_directory, function in マルチプロセス cut_sub_process_wait, function in マルチプロセス CUT_SUPPORT_C99_STDINT_TYPES, macro in 利用可能な機能一覧 CUT_SUPPORT_GDK_PIXBUF, macro in 利用可能な機能一覧 CUT_SUPPORT_GIO, macro in 利用可能な機能一覧 CUT_SUPPORT_GLIB, macro in 利用可能な機能一覧 CUT_SUPPORT_LIBSOUP, macro in 利用可能な機能一覧 cut_take, function in テストユーティリティ cut_take_convert, macro in テストユーティリティ cut_take_diff, function in テストユーティリティ cut_take_inspect_string, function in テストユーティリティ cut_take_memdup, function in テストユーティリティ cut_take_memory, function in テストユーティリティ cut_take_new_sub_process, function in マルチプロセス cut_take_new_sub_process_group, function in マルチプロセス cut_take_printf, function in テストユーティリティ cut_take_replace, function in テストユーティリティ cut_take_strdup, function in テストユーティリティ cut_take_string, function in テストユーティリティ cut_take_string_array, function in テストユーティリティ cut_take_strndup, function in テストユーティリティ cut_teardown, function in Cutter cut_test_context_take_g_error, function in gcut-public cut_test_context_take_g_hash_table, function in gcut-public cut_test_context_take_g_list, function in gcut-public cut_test_context_take_g_object, function in gcut-public cut_test_context_take_g_string, function in gcut-public cut_test_fail, function in 検証作成の補助 cut_test_fail_va_list, function in 検証作成の補助 cut_test_pass, function in 検証作成の補助 cut_trace, macro in 検証作成の補助 cut_trace_with_info_expression, macro in 検証作成の補助 CUT_TRUE, macro in cut_wait_process, macro in 実験 D gcut_data_get_boolean, macro in 便利なテストデータ用API gcut_data_get_boolean_helper, function in gcut-data-helper gcut_data_get_boxed, function in 便利なテストデータ用API gcut_data_get_boxed_helper, function in gcut-data-helper gcut_data_get_char, macro in 便利なテストデータ用API gcut_data_get_char_helper, function in gcut-data-helper gcut_data_get_double, macro in 便利なテストデータ用API gcut_data_get_double_helper, function in gcut-data-helper gcut_data_get_enum, function in 便利なテストデータ用API gcut_data_get_enum_helper, function in gcut-data-helper gcut_data_get_flags, function in 便利なテストデータ用API gcut_data_get_flags_helper, function in gcut-data-helper gcut_data_get_int, function in 便利なテストデータ用API gcut_data_get_int64, macro in 便利なテストデータ用API gcut_data_get_int64_helper, function in gcut-data-helper gcut_data_get_int_helper, function in gcut-data-helper gcut_data_get_object, macro in 便利なテストデータ用API gcut_data_get_object_helper, function in gcut-data-helper gcut_data_get_pointer, function in 便利なテストデータ用API gcut_data_get_pointer_helper, function in gcut-data-helper gcut_data_get_size, macro in 便利なテストデータ用API gcut_data_get_size_helper, function in gcut-data-helper gcut_data_get_string, function in 便利なテストデータ用API gcut_data_get_string_helper, function in gcut-data-helper gcut_data_get_type, function in 便利なテストデータ用API gcut_data_get_type_helper, function in gcut-data-helper gcut_data_get_uint, function in 便利なテストデータ用API gcut_data_get_uint64, macro in 便利なテストデータ用API gcut_data_get_uint64_helper, function in gcut-data-helper gcut_data_get_uint_helper, function in gcut-data-helper gcut_data_has_field, function in 便利なテストデータ用API E GCutEgg, struct in GCutEgg GCutEgg::error, object signal in GCutEgg GCutEgg::error-received, object signal in GCutEgg GCutEgg::output-received, object signal in GCutEgg GCutEgg::reaped, object signal in GCutEgg GCutEgg:command, object property in GCutEgg GCutEggClass, struct in GCutEgg GCutEggError, enum in GCutEgg gcut_egg_close, function in GCutEgg GCUT_EGG_ERROR, macro in GCutEgg gcut_egg_error_quark, function in GCutEgg gcut_egg_get_env, function in GCutEgg gcut_egg_get_error, function in GCutEgg gcut_egg_get_flags, function in GCutEgg gcut_egg_get_forced_termination_wait_time, function in GCutEgg gcut_egg_get_input, function in GCutEgg gcut_egg_get_output, function in GCutEgg gcut_egg_get_pid, function in GCutEgg gcut_egg_hatch, function in GCutEgg gcut_egg_kill, function in GCutEgg gcut_egg_new, function in GCutEgg gcut_egg_new_argv, function in GCutEgg gcut_egg_new_array, function in GCutEgg gcut_egg_new_strings, function in GCutEgg gcut_egg_new_va_list, function in GCutEgg gcut_egg_set_env, function in GCutEgg gcut_egg_set_flags, function in GCutEgg gcut_egg_set_forced_termination_wait_time, function in GCutEgg gcut_egg_wait, function in GCutEgg gcut_egg_write, function in GCutEgg GCutEnumError, enum in GEnumとGFlags用の検証ユーティリティ GCUT_ENUM_ERROR, macro in GEnumとGFlags用の検証ユーティリティ gcut_enum_error_quark, function in GEnumとGFlags用の検証ユーティリティ gcut_enum_inspect, function in GEnumとGFlags用の検証ユーティリティ gcut_enum_parse, function in GEnumとGFlags用の検証ユーティリティ gcut_error_equal, function in GError用の検証ユーティリティ gcut_error_get_type, function in GLibサポート用の型 gcut_error_inspect, function in GError用の検証ユーティリティ GCutEventLoop, struct in GCutEventLoop GCutEventLoopClass, struct in GCutEventLoop gcut_event_loop_add_idle, function in GCutEventLoop gcut_event_loop_add_idle_full, function in GCutEventLoop gcut_event_loop_add_timeout, function in GCutEventLoop gcut_event_loop_add_timeout_full, function in GCutEventLoop GCUT_EVENT_LOOP_ERROR, macro in GCutEventLoop gcut_event_loop_error_quark, function in GCutEventLoop gcut_event_loop_iterate, function in GCutEventLoop gcut_event_loop_quit, function in GCutEventLoop gcut_event_loop_remove, function in GCutEventLoop gcut_event_loop_run, function in GCutEventLoop gcut_event_loop_watch_child, function in GCutEventLoop gcut_event_loop_watch_child_full, function in GCutEventLoop gcut_event_loop_watch_io, function in GCutEventLoop F gcut_flags_get_all, function in GEnumとGFlags用の検証ユーティリティ gcut_flags_inspect, function in GEnumとGFlags用の検証ユーティリティ gcut_flags_parse, function in GEnumとGFlags用の検証ユーティリティ G GDKCUTTER_PIXBUF_ENABLED, macro in GdkCutter Pixbuf gdkcut_pixbuf_assert_equal, function in gdk-pixbufサポート付きの検証 gdkcut_pixbuf_assert_equal_helper, function in gdkcut-pixbuf-assertions-helper gdkcut_pixbuf_diff, function in gdkcut-pixbuf gdkcut_pixbuf_equal_content, function in gdkcut-pixbuf gdkcut_pixbuf_equal_property, function in gdkcut-pixbuf gdkcut_pixbuf_save_diff, function in gdkcut-pixbuf gcut_get_fixture_data, function in GLibサポート付きテストユーティリティ GCutGLibEventLoop, struct in GCutGLibEventLoop GCutGLibEventLoopClass, struct in GCutGLibEventLoop gcut_glib_event_loop_new, function in GCutGLibEventLoop H gcut_hash_table_equal, function in GHashTable用の検証ユーティリティ gcut_hash_table_inspect, function in GHashTable用の検証ユーティリティ gcut_hash_table_inspect_sorted, function in GHashTable用の検証ユーティリティ gcut_hash_table_string_equal, function in GHashTable用の検証ユーティリティ gcut_hash_table_string_string_copy, function in GHashTable用の検証ユーティリティ gcut_hash_table_string_string_inspect, function in GHashTable用の検証ユーティリティ gcut_hash_table_string_string_new, function in GLibサポート付きテストユーティリティ gcut_hash_table_string_string_new_va_list, function in GLibサポート付きテストユーティリティ I gcut_init, function in gcut-main GCutInspectFunction, user_function in GLibサポート用の型 gcut_inspect_boolean, function in オブジェクト調査関数 gcut_inspect_char, function in オブジェクト調査関数 gcut_inspect_direct, function in オブジェクト調査関数 gcut_inspect_double, function in オブジェクト調査関数 gcut_inspect_enum, function in オブジェクト調査関数 gcut_inspect_flags, function in オブジェクト調査関数 gcut_inspect_int, function in オブジェクト調査関数 gcut_inspect_int64, function in オブジェクト調査関数 gcut_inspect_pointer, function in オブジェクト調査関数 gcut_inspect_size, function in オブジェクト調査関数 gcut_inspect_string, function in オブジェクト調査関数 gcut_inspect_type, function in オブジェクト調査関数 gcut_inspect_uint, function in オブジェクト調査関数 gcut_inspect_uint64, function in オブジェクト調査関数 gcut_io_inspect_condition, function in gcut-io K gcut_key_file_get_enum, function in gcut-key-file gcut_key_file_get_flags, function in gcut-key-file L gcut_list_enum_inspect, macro in GList用の検証ユーティリティ gcut_list_equal, function in GList用の検証ユーティリティ gcut_list_equal_int, function in GList用の検証ユーティリティ gcut_list_equal_string, function in GList用の検証ユーティリティ gcut_list_equal_uint, function in GList用の検証ユーティリティ gcut_list_flags_inspect, macro in GList用の検証ユーティリティ gcut_list_inspect, function in GList用の検証ユーティリティ gcut_list_inspect_enum, function in GList用の検証ユーティリティ gcut_list_inspect_flags, function in GList用の検証ユーティリティ gcut_list_inspect_int, function in GList用の検証ユーティリティ gcut_list_inspect_object, function in GList用の検証ユーティリティ gcut_list_inspect_string, function in GList用の検証ユーティリティ gcut_list_inspect_uint, function in GList用の検証ユーティリティ gcut_list_int_equal, macro in GList用の検証ユーティリティ gcut_list_int_inspect, macro in GList用の検証ユーティリティ gcut_list_int_new, function in GLibサポート付きテストユーティリティ gcut_list_new, function in GLibサポート付きテストユーティリティ gcut_list_object_free, function in GLibサポート付きテストユーティリティ gcut_list_object_inspect, macro in GList用の検証ユーティリティ gcut_list_string_equal, macro in GList用の検証ユーティリティ gcut_list_string_free, function in GLibサポート付きテストユーティリティ gcut_list_string_inspect, macro in GList用の検証ユーティリティ gcut_list_string_new, function in GLibサポート付きテストユーティリティ gcut_list_string_new_array, function in GLibサポート付きテストユーティリティ gcut_list_uint_equal, macro in GList用の検証ユーティリティ gcut_list_uint_inspect, macro in GList用の検証ユーティリティ gcut_list_uint_new, function in GLibサポート付きテストユーティリティ O gcut_object_equal, function in GObject用の検証ユーティリティ gcut_object_inspect, function in GObject用の検証ユーティリティ gcut_object_inspect_custom, function in GObject用の検証ユーティリティ P GCutProcess, struct in GCutProcess GCutProcess::error, object signal in GCutProcess GCutProcess::error-received, object signal in GCutProcess GCutProcess::output-received, object signal in GCutProcess GCutProcess::reaped, object signal in GCutProcess GCutProcess:command, object property in GCutProcess GCutProcessClass, struct in GCutProcess GCutProcessError, enum in GCutProcess GCUT_PROCESS_ERROR, macro in GCutProcess gcut_process_error_quark, function in GCutProcess gcut_process_flush, function in GCutProcess gcut_process_get_env, function in GCutProcess gcut_process_get_error_channel, function in GCutProcess gcut_process_get_error_stream, function in GCutProcess gcut_process_get_error_string, function in GCutProcess gcut_process_get_event_loop, function in GCutProcess gcut_process_get_flags, function in GCutProcess gcut_process_get_forced_termination_wait_time, function in GCutProcess gcut_process_get_input_channel, function in GCutProcess gcut_process_get_output_channel, function in GCutProcess gcut_process_get_output_stream, function in GCutProcess gcut_process_get_output_string, function in GCutProcess gcut_process_get_pid, function in GCutProcess gcut_process_kill, function in GCutProcess gcut_process_new, function in GCutProcess gcut_process_new_argv, function in GCutProcess gcut_process_new_array, function in GCutProcess gcut_process_new_command_line, function in GCutProcess gcut_process_new_strings, function in GCutProcess gcut_process_new_va_list, function in GCutProcess gcut_process_run, function in GCutProcess gcut_process_set_env, function in GCutProcess gcut_process_set_event_loop, function in GCutProcess gcut_process_set_flags, function in GCutProcess gcut_process_set_forced_termination_wait_time, function in GCutProcess gcut_process_wait, function in GCutProcess gcut_process_write, function in GCutProcess Q gcut_quit, function in gcut-main S setup, function in Cutter gcut_size_get_type, function in GLibサポート用の型 SoupCutClient, struct in SoupCutClient SoupCutClient:async, object property in SoupCutClient SoupCutClientClass, struct in SoupCutClient SOUPCUTTER_ENABLED, macro in SoupCutter soupcut_client_assert_equal_body, function in HTTPクライアント・サーバ用の検証 soupcut_client_assert_equal_body_helper, function in soupcut-assertions-helper soupcut_client_assert_equal_content_type, function in HTTPクライアント・サーバ用の検証 soupcut_client_assert_equal_content_type_helper, function in soupcut-assertions-helper soupcut_client_assert_match_body, function in HTTPクライアント・サーバ用の検証 soupcut_client_assert_match_body_helper, function in soupcut-assertions-helper soupcut_client_assert_response, function in HTTPクライアント・サーバ用の検証 soupcut_client_assert_response_helper, function in soupcut-assertions-helper soupcut_client_get, function in SoupCutClient soupcut_client_get_async_context, function in SoupCutClient soupcut_client_get_latest_message, function in SoupCutClient soupcut_client_get_n_messages, function in SoupCutClient soupcut_client_new, function in SoupCutClient soupcut_client_send_message, function in SoupCutClient soupcut_client_set_base, function in SoupCutClient soupcut_message_assert_equal_content_type, function in HTTPクライアント・サーバ用の検証 soupcut_message_assert_equal_content_type_helper, function in soupcut-assertions-helper soupcut_server_build_uri, function in 便利なHTTPサーバーAPI soupcut_server_take, function in 便利なHTTPサーバーAPI soupcut_server_take_new, function in 便利なHTTPサーバーAPI gcut_string_equal, function in GString用の検証ユーティリティ gcut_string_inspect, function in GString用の検証ユーティリティ gcut_string_io_channel_clear, function in gcut-string-io-channel gcut_string_io_channel_get_buffer_limit, function in gcut-string-io-channel gcut_string_io_channel_get_limit, function in gcut-string-io-channel gcut_string_io_channel_get_main_context, function in gcut-string-io-channel gcut_string_io_channel_get_pipe_mode, function in gcut-string-io-channel gcut_string_io_channel_get_read_fail, function in gcut-string-io-channel gcut_string_io_channel_get_string, function in gcut-string-io-channel gcut_string_io_channel_new, function in gcut-string-io-channel gcut_string_io_channel_set_buffer_limit, function in gcut-string-io-channel gcut_string_io_channel_set_limit, function in gcut-string-io-channel gcut_string_io_channel_set_main_context, function in gcut-string-io-channel gcut_string_io_channel_set_pipe_mode, function in gcut-string-io-channel gcut_string_io_channel_set_read_fail, function in gcut-string-io-channel T gcut_take_error, function in GLibサポート付きテストユーティリティ gcut_take_hash_table, function in GLibサポート付きテストユーティリティ gcut_take_list, function in GLibサポート付きテストユーティリティ gcut_take_new_hash_table_string_string, function in GLibサポート付きテストユーティリティ gcut_take_new_list_int, function in GLibサポート付きテストユーティリティ gcut_take_new_list_object, macro in GLibサポート付きテストユーティリティ gcut_take_new_list_string, function in GLibサポート付きテストユーティリティ gcut_take_new_list_string_array, function in GLibサポート付きテストユーティリティ gcut_take_new_list_string_backward_compatibility, macro in GLibサポート付きテストユーティリティ gcut_take_new_list_uint, function in GLibサポート付きテストユーティリティ gcut_take_new_string, function in GLibサポート付きテストユーティリティ gcut_take_object, function in GLibサポート付きテストユーティリティ gcut_take_string, function in GLibサポート付きテストユーティリティ teardown, function in Cutter GCUTTER_ENABLED, macro in GCutter GCUT_TYPE_ERROR, macro in GLibサポート用の型 GCUT_TYPE_SIZE, macro in GLibサポート用の型 U gcut_utils_get_fixture_data, function in gcut-public gcut_utils_get_fixture_data_va_list, function in gcut-public V gcut_value_equal, function in GValue用の検証ユーティリティ gcut_value_equal_init, function in gcut-main gcut_value_equal_quit, function in gcut-main gcut_value_register_equal_func, function in GValue用の検証ユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-Utilities-for-GError.html0000644000175000017500000001445411525703040031014 0ustar koukou GError用の検証ユーティリティ

GError用の検証ユーティリティ

GError用の検証ユーティリティ — GErrorに関する検証をもっと簡単に書くためのユーティリティ。

概要

gboolean            gcut_error_equal                    (const GError *error1,
                                                         const GError *error2);
gchar *             gcut_error_inspect                  (const GError *error);

説明

検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。

このユーティリティはGErrorに関する検証の作成を補助します。

詳細

gcut_error_equal ()

gboolean            gcut_error_equal                    (const GError *error1,
                                                         const GError *error2);

ふたつのGErrorerror1error2を比較します。

error1 :

比較するGErrorの値。

error2 :

比較するGErrorの値。

戻り値 :

error1error2が同じドメイン、コード、メッセージならTRUE、そうでなればFALSE

1.0.5から


gcut_error_inspect ()

gchar *             gcut_error_inspect                  (const GError *error);

errorの詳細を返します。返された文字列が必要なくなったときは開放してください。

error :

GErrorの値。

戻り値 :

errorの詳細を示した文字列。

1.0.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-debian.html0000644000175000017500000001033711525703040025110 0ustar koukou Debian GNU/Linuxへインストール

Debian GNU/Linuxへインストール

Debian GNU/Linuxへインストール — Debian GNU/LinuxへのCutterのインストール方法

はじめに

Debian GNU/LinuxへのCutterのインストール方法を説明します。

インストール

CutterのDebianパッケージが提供されているので、aptitudeでインストールできます。

現在は、Debian GNU/Linux squeeze/sid i386/amd64用のパッケージを提供しています。他のバージョンが必要な場合は メーリングリスト でリクエストしてください。

squeezeの場合は以下のapt lineを書いた/etc/apt/sources.list.d/cutter.listを作成してください。

/etc/apt/sources.list.d/cutter.list:

deb http://cutter.sourceforge.net/debian/ squeeze main
deb-src http://cutter.sourceforge.net/debian/ squeeze main

sidの場合は以下のapt lineを書いた/etc/apt/sources.list.d/cutter.listを作成してください。

/etc/apt/sources.list.d/cutter.list:

deb http://cutter.sourceforge.net/debian/ unstable main
deb-src http://cutter.sourceforge.net/debian/ unstable main

パッケージはkou@cozmixng.org/kou@clear-code.comの鍵でサインしています。信用する場合は鍵を登録します。

% gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31
% gpg --export 1C837F31 | sudo apt-key add -

鍵を登録したらaptitudeでインストールできます。

% sudo aptitude update
% sudo aptitude -V -D install cutter-testing-framework

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/index-deprecated.html0000644000175000017500000002244111525703040025006 0ustar koukou 非推奨のシンボル一覧

非推奨のシンボル一覧

C

CPPCUT_BEGIN_TEST_DECLS, CPPCUT_BEGIN_TEST_DECLS
CPPCUT_END_TEST_DECLS, CPPCUT_END_TEST_DECLS
cut_add_data_backward_compatibility, cut_add_data_backward_compatibility()
cut_append_diff, cut_append_diff ()
cut_assert_equal_g_list_int, cut_assert_equal_g_list_int ()
cut_assert_equal_g_list_string, cut_assert_equal_g_list_string ()
cut_assert_equal_g_type, cut_assert_equal_g_type ()
cut_assert_equal_g_value, cut_assert_equal_g_value ()
cut_assert_equal_string_or_null, cut_assert_equal_string_or_null ()
cut_assert_file_exist, cut_assert_file_exist ()
cut_assert_g_error, cut_assert_g_error ()
cut_assert_path_exist, cut_assert_path_exist ()
cut_assert_path_not_exist, cut_assert_path_not_exist ()
cut_assert_remove_path, cut_assert_remove_path ()
cut_build_fixture_data_path, cut_build_fixture_data_path ()
cut_keep_message, cut_keep_message ()
cut_pending, cut_pending ()
cut_set_message, cut_set_message ()
cut_set_message_va_list, cut_set_message_va_list ()
cut_test_fail_va_list, cut_test_fail_va_list ()

G

GCutEgg, GCutEgg
GCutEggClass, GCutEggClass
GCutEggError, enum GCutEggError
gcut_egg_close, gcut_egg_close ()
GCUT_EGG_ERROR, GCUT_EGG_ERROR
gcut_egg_error_quark, gcut_egg_error_quark ()
gcut_egg_get_env, gcut_egg_get_env ()
gcut_egg_get_error, gcut_egg_get_error ()
gcut_egg_get_flags, gcut_egg_get_flags ()
gcut_egg_get_forced_termination_wait_time, gcut_egg_get_forced_termination_wait_time ()
gcut_egg_get_input, gcut_egg_get_input ()
gcut_egg_get_output, gcut_egg_get_output ()
gcut_egg_get_pid, gcut_egg_get_pid ()
gcut_egg_hatch, gcut_egg_hatch ()
gcut_egg_kill, gcut_egg_kill ()
gcut_egg_new, gcut_egg_new ()
gcut_egg_new_argv, gcut_egg_new_argv ()
gcut_egg_new_array, gcut_egg_new_array ()
gcut_egg_new_strings, gcut_egg_new_strings ()
gcut_egg_new_va_list, gcut_egg_new_va_list ()
gcut_egg_set_env, gcut_egg_set_env ()
gcut_egg_set_flags, gcut_egg_set_flags ()
gcut_egg_set_forced_termination_wait_time, gcut_egg_set_forced_termination_wait_time ()
gcut_egg_wait, gcut_egg_wait ()
gcut_egg_write, gcut_egg_write ()
gcut_list_enum_inspect, gcut_list_enum_inspect()
gcut_list_flags_inspect, gcut_list_flags_inspect()
gcut_list_int_equal, gcut_list_int_equal()
gcut_list_int_inspect, gcut_list_int_inspect()
gcut_list_object_inspect, gcut_list_object_inspect()
gcut_list_string_equal, gcut_list_string_equal()
gcut_list_string_inspect, gcut_list_string_inspect()
gcut_list_uint_equal, gcut_list_uint_equal()
gcut_list_uint_inspect, gcut_list_uint_inspect()
gcut_take_new_list_string_backward_compatibility, gcut_take_new_list_string_backward_compatibility()

S

setup, setup ()

T

teardown, teardown ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.7.xml0000644000175000017500000000736211525702761023772 0ustar koukou ]> A gcut_assert_not_equal_pid, function in GLibサポート付きの検証 C CUTTER_CHECK_VERSION, macro in バージョン情報 cut_assert_equal_boolean, function in 検証 cut_assert_equal_substring, function in 検証 cut_assert_not_equal_boolean, function in 検証 cut_assert_not_equal_double, function in 検証 cut_assert_not_equal_int, function in 検証 cut_assert_not_equal_memory, function in 検証 cut_assert_not_equal_size, function in 検証 cut_assert_not_equal_string, function in 検証 cut_assert_not_equal_substring, function in 検証 cut_assert_not_equal_uint, function in 検証 cut_build_path, function in テストユーティリティ D gcut_data_get_boxed, function in 便利なテストデータ用API T GCUT_TYPE_ERROR, macro in GLibサポート用の型 cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.1.2.xml0000644000175000017500000000070011525702762023754 0ustar koukou ]> C CUT_EXPORT, macro in Cutter cutter-testing-framework-1.1.7/doc/reference/ja/html/home.png0000644000175000017500000000121611525703037022354 0ustar koukouPNG  IHDRw=bKGD pHYs  ~tIME1KvIDATxՕkq?rCp ~CnpCAAJ .B-\'G]:ܠC -(8 Ԁ!fDғklbRoyxwpðIJ<of_-@RHf֟t^ښ$Q|pgv;X^^&s(bwwZF9&3඙ ^IRZUE.0Z]]U PYM8HGIekqqҀ! $۬3n e{-/seeeÌXOͷ$8==USQRR'9-s+B^ Cەs+%<7W :2IENDB`cutter-testing-framework-1.1.7/doc/reference/ja/html/features.html0000644000175000017500000004605211525703040023423 0ustar koukou 機能

機能

機能 — Cutterの機能

はじめに

Cutterは以下のような単体テストフレームワークの基本的な機能を持っています。

  • フィクスチャ

  • テスト登録コード不要

  • デバッグに便利な結果出力

  • 豊富な検証機能

Cutterは以下のようなテスト環境をもっと便利にする高度な機能もあります。

  • 複数のプラットフォーム対応

  • データ駆動テストのサポート

  • カバレッジのサポート

  • クラッシュ時のバックトレース出力

  • テスト結果の保存・復元

  • マルチプロセス・マルチスレッドのサポート

  • 画像差分

  • ...

基本機能

単体テストフレームワークが一般的に提供している機能について、Cutterがどのようにその機能を提供しているかについてを説明します。

フィクスチャ

単体テストフレームワークでいうフィクスチャとは、各テストを実行する前にテスト用データを用意するための仕組みのことです。これは、一般的には各テスト毎にsetup/teardownと呼ばれる初期化処理/終了処理を実行することによって実現します。

Cutterでは以下のようにテストプログラム中にcut_setup()/cut_teardown() 関数を定義すると、それらの関数が初期化処理/終了処理として扱われます。

void
cut_setup (void)
{
   /* 初期化処理 */
}

void
cut_teardown (void)
{
   /* 終了処理 */
}

また、Cutterではテストケース毎の初期化処理/終了処理のためにcut_startup()/cut_shutdown()もサポートしてます。

void
cut_startup (void)
{
   /* テストケースの初期化処理 */
}

void
cut_shutdown (void)
{
   /* テストケースの終了処理 */
}

これらの関数は以下のような順番で呼ばれます。

  • cut_startup()

    • cut_setup()

      • テスト1実行

    • cut_teardown()

    • cut_setup()

      • テスト2実行

    • cut_teardown()

    • ...

  • cut_shutdown()

また、実験的な機能ですが、テスト全体を実行する前、テスト全体を実行した後に呼び出す関数を登録することもできます。これらの関数をそれぞれwarmup/cooldownと呼んでいます。呼び出し順序はこうなります。

  • warmup実行

    • テストケース1のcut_startup()

      • テストケース1のcut_setup()

        • テスト1-1実行

      • テストケース1のcut_teardown()

      • テストケース1のcut_setup()

        • テスト1-2実行

      • テストケース1のcut_teardown()

      • ...

    • テストケース1のcut_shutdown()

    • テストケース2のcut_startup()

      • テストケース2のcut_setup()

        • テスト2-1実行

      • テストケース2のcut_teardown()

      • テストケース2のcut_setup()

        • テスト2-2実行

      • テストケース2のcut_teardown()

      • ...

    • テストケース2のcut_shutdown()

    • ...

  • cooldown実行

この機能は、テスト対象のライブラリがライブラリ初期化関数・終了関数を用意している場合に有用です。ただ、この機能は実験的な機能なのでここでその使い方を紹介するのは控えておきます。もし、使いたい場合は聞いてください。


テスト登録コード不要

動的な言語用の単体テストフレームワークの多くでは明示的にテストを登録する必要はありません。自動的にテストメソッド・テスト関数などを見つけて実行します。しかし、C言語用の単体テストフレームワークの多くでは明示的にテストを登録する必要があります。

Cutterはテストを簡単に書けるようにするため、多くの動的な言語用の単体テストフレームワークのように自動的にテスト関数を見つけます。そのため、以下のように名前が「test_」からはじまる公開関数を定義するだけでその関数がテスト関数として認識されます。

void test_my_function (void);

void
test_my_function (void)
{
    /* テスト関数 */
}

デバッグに便利な結果出力

Cuterは迅速に問題の確認・修正が行えるようにテスト結果を出力します。具体的には以下のように出力を行います。

  • 問題がない部分はシンプルに

  • 問題がある部分は冗長に

まず、問題がない部分をシンプルに表示する(時には何も表示しない)ことにより大事な情報が埋もれてしまうことを防ぎます。

また、問題がある部分はどのような問題があるかを判断するために、知っている情報をできるだけ多く表示します。

例えば、文字列が同じ内容かを比較するテストで文字列が異なって場合を考えます。Cutterは期待値と実測値を並べて表示します。これによりどの部分が異なるかを目視で確認しやすくなります。

expected: <abc def ghi jkl>
 but was: <abc DEF ghi jkl>

もし、これがずれて表示されていたり、同じ行に表示されているとどこが異なるかを見つけるのは大変になります。

expected: <abc def ghi jkl>
but was: <abc DEF ghi jkl>

<abc def ghi jkl> is expected but was <abc DEF ghi jkl>

また、必要ならば期待値と実測値のdiffを表示して具体的にどこが異なるのかも示します。

expected: <abc def ghi jkl>
 but was: <abc DEF ghi jkl>

diff:
- abc def ghi jkl
?     ^^^
+ abc DEF ghi jkl
?     ^^^

このように、Cutterにはテストが失敗した時に迅速に問題を確認するための工夫が施されています。これにより、開発者が迅速に問題を修正することを支援します。


豊富な検証機能

xUnit系の単体テストフレームワークではテスト対象が期待する動作をしているかを検証するために、assertionと呼ばれる検証機能を提供します。例えば、一般的には以下のような検証機能があります。

  • assert: 検証対象が真の値であることを検証

  • assert_equal: 実測値が期待値と等しいことを検証

Cutterでは、以下の検証機能が上記の検証機能に対応します。

  • cut_assert()

  • cut_assert_true(): 機能はcut_assert()と同じだが「真の値」であることを明示(自己記述的なためこちらの利用を推奨)

  • cut_assert_equal_int()

  • cut_assert_equal_uint()

  • cut_assert_equal_string()

  • ...

Cutterは上記のような一般的な検証機能以外にも様々な検証機能が組み込みで提供しているので、より簡単にテストを書くことができます。例えば、以下のような検証機能を提供しています。

  • cut_assert_errno(): errnoが0であることを検証

  • cut_assert_match(): 実測値の文字列が指定した正規表現にマッチすることを検証

  • cut_assert_path_exist(): 指定したパスが存在することを検証

  • ...

検証機能の一覧はリファレンスマニュアルの 検証 や GLibサポート付きの検証 を見てください。

高度な機能

一部の単体テストフレームワークが提供している機能のCutterでの提供の仕方、および、どの単体テストフレームワークも提供していないCutter独特の機能について提供について説明します。

複数のプラットフォーム対応

現在、以下のプラットフォームでの動作を確認しています。

  • GNU/Linux

  • FreeBSD

  • Mac OS X

  • Windows (MinGW)


データ駆動テストのサポート

複数のデータに対して同じテストを実行する場合があります。例えば、以下のような場合が考えられます。

  • 複数の入力パターンがあり、それらを網羅的にテストする場合

  • 複数のバックエンドを抽象化し、どのバックエンドを利用している場合でも同じインターフェイスで扱えるライブラリをテストする場合。(cairoやDBIなど)

このような場合、テスト自体は1つだけ定義し、各テストデータに対してそのテストを実行することで効率的にテストを作成することができます。このようなテストの仕方はデータ駆動テストと呼ばれています。

Cutterでのデータ駆動テストの書き方については cut_add_data() を見てください。

データ駆動テストの場合はテストは以下のような流れで実行されます。

  • テストデータ生成関数呼び出し

  • cut_setup()

    • テストデータ1を使ってテスト実行

  • cut_teardown()

  • cut_setup()

    • テストデータ2を使ってテスト実行

  • cut_teardown()

  • ...


カバレッジのサポート

カバレッジ率はどの程度テストを網羅的に行っているかを示す指標になります。

CutterはGCCを使用したカバレッジ測定を支援するためのM4マクロを提供しています。GNU Autoconf/GNU Automakeを利用している場合はこのM4マクロを利用することにより、カバレッジ測定環境を簡単にビルドシステムに組み込むことができます。

詳しくは README.jaチュートリアル のAC_CHECK_COVERAGEについて書かれている部分を見てください。


クラッシュ時のバックトレース出力

C言語・C++言語で実装されたプログラムではSegmentation Faultでプログラムが異常終了することは珍しくありません。この時、CutterはSEGV シグナルが発生した時点でのバックトレースの取得を試みます。取得できた場合はバックトレースを出力してから終了します。もちろん、この時点でテストプロセスがなにかしら破壊されているので、必ずしもバックトレースを取得できるわけではありません。

問題の詳細を調べるには、GDBなどのデバッガで処理を追いかけていく必要がありますが、バックトレースをデバッグの最初の足がかりとして利用することができます。


テスト結果の保存・復元

ソフトウェアの品質を確認する方法として以下のような方法があります。

  • テスト状況とバグ発見数の推移を測定

  • テスト状況とバグ報告数の推移を測定

  • テスト状況とソース規模の推移を測定

例えば、テストが増えているのにバグ発見数が少ない場合は、効率の悪いテストを行っている、あるいはもともとテスト対象の品質が高かったということが考えられます。テストが増えているのにバグ報告数が伸びている場合は的外れなテストを行っているかもしれません。ソース規模が大きくなっているのにテストが増えていない場合はテスト不足が考えられます。

このように、その時点でのテスト状況だけではなく、過去のテスト結果も利用して時系列でソフトウェアの開発状況を分析することにより、ソフトウェアの品質向上に役立てることができる場合があります。

Cutterはテスト結果をXMLとしてファイルに保存することができます。また、保存したXMLを読み込んでテスト結果を復元することができます。

まだ実装されていませんが、保存したテスト結果を読み込んで、時系列のグラフとしてレポートを出力する機能の実装を予定しています。


マルチプロセス・マルチスレッドのサポート

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-value-equal.xml0000644000175000017500000001360211525703006024617 0ustar koukou ]> GValue用の検証ユーティリティ 3 Cutterライブラリ GValue用の検証ユーティリティ GValueに関する検証をもっと簡単に書くためのユーティリティ。 概要 gboolean gcut_value_equal (const GValue *value1, const GValue *value2); void gcut_value_register_equal_func (GType type1, GType type2, GEqualFunc equal_func); 説明 検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。 このユーティリティはGValueに関する検証を作成を補助します。 詳細 gcut_value_equal () gcut_value_equal gboolean gcut_value_equal (const GValue *value1, const GValue *value2); ふたつのGValuevalue1value2を登録された比較関数で比較します。(GValueの比較関数の登録方法についてはgcut_value_register_equal_func()を見てください。) value1 : 比較するGValue value2 : 比較するGValue 戻り値 :value1value2が等しいときはTRUE、そうでない場合はFALSE。 1.0.5から gcut_value_register_equal_func () gcut_value_register_equal_func void gcut_value_register_equal_func (GType type1, GType type2, GEqualFunc equal_func); 例: TODO type1GValuetype2GValueの等価性を調べる関数を登録します。 type1 : 比較するGValueGType type2 : 比較するGValueGType equal_func : type1GValuetype2GValueを比較する関数。 1.0.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-1-1.html0000644000175000017500000000566511525703040023353 0ustar koukou 1.1.1での新しいシンボル一覧

1.1.1での新しいシンボル一覧

C

cut_assert_equal_sockaddr, cut_assert_equal_sockaddr()
cut_equal_sockaddr, cut_equal_sockaddr()
cut_inspect_sockaddr, cut_inspect_sockaddr()
cut_make_directory, cut_make_directory ()

G

gcut_data_get_object, gcut_data_get_object()
gcut_list_new, gcut_list_new ()
gcut_list_object_free, gcut_list_object_free ()
gcut_take_new_list_object, gcut_take_new_list_object()
cutter-testing-framework-1.1.7/doc/reference/ja/html/index-0-6.html0000644000175000017500000000325411525703040023211 0ustar koukou 0.6での新しいシンボル一覧

0.6での新しいシンボル一覧

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-process.xml0000644000175000017500000017373311525703004024066 0ustar koukou ]> 外部コマンド 3 Cutterライブラリ 外部コマンド 外部コマンドを使うための便利API 概要 #define GCUT_PROCESS_ERROR GCutProcess; GCutProcessClass; enum GCutProcessError; GQuark gcut_process_error_quark (void); GCutProcess * gcut_process_new (const gchar *command, ...); GCutProcess * gcut_process_new_command_line (const gchar *command_line); GCutProcess * gcut_process_new_va_list (const gchar *command, va_list args); GCutProcess * gcut_process_new_argv (gint argc, gchar **argv); GCutProcess * gcut_process_new_strings (const gchar **command); GCutProcess * gcut_process_new_array (GArray *command); void gcut_process_set_flags (GCutProcess *process, GSpawnFlags flags); GSpawnFlags gcut_process_get_flags (GCutProcess *process); void gcut_process_set_env (GCutProcess *process, const gchar *name, ...); gchar ** gcut_process_get_env (GCutProcess *process); gboolean gcut_process_run (GCutProcess *process, GError **error); GPid gcut_process_get_pid (GCutProcess *process); gint gcut_process_wait (GCutProcess *process, guint timeout, GError **error); gboolean gcut_process_kill (GCutProcess *process, gint signal_number, GError **error); gboolean gcut_process_write (GCutProcess *process, const gchar *chunk, gsize size, GError **error); GIOStatus gcut_process_flush (GCutProcess *process, GError **error); GString * gcut_process_get_output_string (GCutProcess *process); GString * gcut_process_get_error_string (GCutProcess *process); GIOChannel * gcut_process_get_input_channel (GCutProcess *process); GIOChannel * gcut_process_get_output_channel (GCutProcess *process); GIOChannel * gcut_process_get_error_channel (GCutProcess *process); GInputStream * gcut_process_get_output_stream (GCutProcess *process); GInputStream * gcut_process_get_error_stream (GCutProcess *process); guint gcut_process_get_forced_termination_wait_time (GCutProcess *process); void gcut_process_set_forced_termination_wait_time (GCutProcess *process, guint timeout); GCutEventLoop * gcut_process_get_event_loop (GCutProcess *process); void gcut_process_set_event_loop (GCutProcess *process, GCutEventLoop *loop); オブジェクト階層 GObject +----GCutProcess プロパティ "command" gpointer : Read / Write シグナル "error" : Run Last "error-received" : Run Last "output-received" : Run Last "reaped" : Run Last 説明 GCutProcessは外部コマンドの実行・通信・終了をカプセル化します。GCutProcessはエラーをGErrorとして報告します。エラーはgcut_assert_error()を使うことにより簡単に検証できます。 外部コマンドはgcut_process_new()gcut_process_new_strings()などのようなコンストラクタで指定します。この時点では外部コマンドは実行されません。gcut_process_hatch()で指定された外部コマンドが実行されます。 外部コマンドの標準出力・エラー出力は"output-received"シグナル・"error-received"シグナル、あるいは、gcut_process_get_output()gcut_process_get_error()が返すGIOChannelで取得できます。gcut_process_write()は外部コマンドの標準入力にデータを書き込みます。 外部コマンドの終了を待つためにはgcut_process_wait()を使うことができます。無限待ちを避けるために、タイムアウトを指定することができます。 例: static GString *output_string; static GCutProcess *process; void cut_setup (void) { output_string = g_string_new(NULL); process = NULL; } void cut_teardown (void) { if (output_string) g_string_free(output_string, TRUE); if (process) g_object_unref(process); } static void cb_output_received (GCutProcess *process, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(output_string, chunk, size); } void test_echo (void) { GError *error = NULL; process = gcut_process_new("echo", "XXX", NULL); g_signal_connect(process, "receive-output", G_CALLBACK(cb_output_received), NULL); gcut_process_run(process, &error); gcut_assert_error(error); gcut_process_wait(process, 1000, &error); gcut_assert_error(error); cut_assert_equal_string("XXX\n", output_string->str); } 詳細 GCUT_PROCESS_ERROR GCUT_PROCESS_ERROR #define GCUT_PROCESS_ERROR (gcut_process_error_quark()) GCutProcess GCutProcess typedef struct _GCutProcess GCutProcess; GCutProcessClass GCutProcessClass typedef struct { GObjectClass parent_class; void (*output_received) (GCutProcess *process, const gchar *chunk, gsize size); void (*error_received) (GCutProcess *process, const gchar *chunk, gsize size); void (*reaped) (GCutProcess *process, gint status); void (*error) (GCutProcess *process, GError *error); } GCutProcessClass; enum GCutProcessError GCutProcessError typedef enum { GCUT_PROCESS_ERROR_COMMAND_LINE, GCUT_PROCESS_ERROR_IO_ERROR, GCUT_PROCESS_ERROR_ALREADY_RUNNING, GCUT_PROCESS_ERROR_NOT_RUNNING, GCUT_PROCESS_ERROR_INVALID_OBJECT, GCUT_PROCESS_ERROR_INVALID_SIGNAL, GCUT_PROCESS_ERROR_PERMISSION_DENIED, GCUT_PROCESS_ERROR_TIMEOUT } GCutProcessError; GCutProcess関連の操作で返されるエラーコード。 GCUT_PROCESS_ERROR_COMMAND_LINE コマンドライン関連のエラー。 GCUT_PROCESS_ERROR_IO_ERROR 入出力エラー。 GCUT_PROCESS_ERROR_ALREADY_RUNNING 外部コマンドはすでに実行されています。 GCUT_PROCESS_ERROR_NOT_RUNNING 外部こもアンドが実行されていません。 GCUT_PROCESS_ERROR_INVALID_OBJECT 不正なGCutProcessオブジェクトが渡されました。 GCUT_PROCESS_ERROR_INVALID_SIGNAL 不正なシグナルが渡されました。 GCUT_PROCESS_ERROR_PERMISSION_DENIED 許可がありません。 GCUT_PROCESS_ERROR_TIMEOUT タイムアウト。 1.1.5から gcut_process_error_quark () gcut_process_error_quark GQuark gcut_process_error_quark (void); 戻り値 : gcut_process_new () gcut_process_new GCutProcess * gcut_process_new (const gchar *command, ...); commandを実行する新しいGCutProcessオブジェクトを生成します。 command : 実行する外部コマンド名。 ... : commandの引数 戻り値 :GCutProcessオブジェクト。 1.1.5から gcut_process_new_command_line () gcut_process_new_command_line GCutProcess * gcut_process_new_command_line (const gchar *command_line); command_lineを実行する新しいGCutProcessオブジェクトを生成します。 command_line : コマンドライン 戻り値 :GCutProcessオブジェクト。 1.1.5から gcut_process_new_va_list () gcut_process_new_va_list GCutProcess * gcut_process_new_va_list (const gchar *command, va_list args); commandを実行する新しいGCutProcessオブジェクトを生成します。 command : 実行する外部コマンド名。 args : commandの引数 戻り値 :GCutProcessオブジェクト。 1.1.5から gcut_process_new_argv () gcut_process_new_argv GCutProcess * gcut_process_new_argv (gint argc, gchar **argv); commandを実行する新しいGCutProcessオブジェクトを生成します。 argc : argvの要素数 argv : 実行する外部コマンド名とコマンド引数。 戻り値 :GCutProcessオブジェクト。 1.1.5から gcut_process_new_strings () gcut_process_new_strings GCutProcess * gcut_process_new_strings (const gchar **command); commandを実行する新しいGCutProcessオブジェクトを生成します。 command : 実行する外部コマンド名とコマンド引数。NULL終端。 戻り値 :GCutProcessオブジェクト。 1.1.5から gcut_process_new_array () gcut_process_new_array GCutProcess * gcut_process_new_array (GArray *command); commandを実行する新しいGCutProcessオブジェクトを生成します。 command : 実行する外部コマンド名とコマンド引数。GArrayは0終端にして下さい。 戻り値 :GCutProcessオブジェクト。 1.1.5から gcut_process_set_flags () gcut_process_set_flags void gcut_process_set_flags (GCutProcess *process, GSpawnFlags flags); 外部コマンドを実行するときのflagsを設定します。 process : GCutProcess flags : g_spawn_async_with_pipes()に渡すフラグ。 1.1.5から gcut_process_get_flags () gcut_process_get_flags GSpawnFlags gcut_process_get_flags (GCutProcess *process); 外部コマンドを実行する時のflagsを取得します。 process : GCutProcess 戻り値 :外部コマンドを実行するときのフラグ。 1.1.5から gcut_process_set_env () gcut_process_set_env void gcut_process_set_env (GCutProcess *process, const gchar *name, ...); 外部コマンドの環境変数を設定します。 process : GCutProcess name : 最初の環境変数名。 ... : nameに対応する値。その後に、名前と値のペアを任意の数だけ指定します。最後の引数はNULLにしてください。 1.1.5から gcut_process_get_env () gcut_process_get_env gchar ** gcut_process_get_env (GCutProcess *process); 外部コマンドの環境変数を取得します。 process : GCutProcess 戻り値 :新しく割り当てられたNULL終端の環境変数のリスト("名前1=値1", "名前2=値2", ..., NULL)を返します。必要がなくなったらg_strfreev()で開放してください。 1.1.5から gcut_process_run () gcut_process_run gboolean gcut_process_run (GCutProcess *process, GError **error); 新しい外部プロセスを実行します。 process : GCutProcess error : エラーを返すアドレスまたはNULL 戻り値 :成功したときはTRUE、そうでない場合はFALSE 1.1.5から gcut_process_get_pid () gcut_process_get_pid GPid gcut_process_get_pid (GCutProcess *process); 実行している外部プロセスのプロセスIDを取得します。外部コマンドが実行されていない場合は0が返ります。 process : GCutProcess 戻り値 :実行中の外部コマンドのプロセスID。実行していない場合は0。 1.1.5から gcut_process_wait () gcut_process_wait gint gcut_process_wait (GCutProcess *process, guint timeout, GError **error); 実行中の外部プロセスが終了することをtimeoutミリ秒待ちます。外部コマンドがtimeoutミリ秒以内に終了しなかった場合は、GCUT_PROCESS_ERROR_TIMEOUTエラーが設定され、-1が返ります。外部プロセスが実行されていない場合は、GCUT_PROCESS_ERROR_NOT_RUNNINGエラーが設定され、-1が返ります。 process : GCutProcess timeout : タイムアウト時間(ミリ秒) error : エラーを返すアドレスまたはNULL 戻り値 :外部プロセスが終了した場合は終了ステータス。そうでない場合は-1。 1.1.5から gcut_process_kill () gcut_process_kill gboolean gcut_process_kill (GCutProcess *process, gint signal_number, GError **error); 外部プロセスにsignal_numberシグナルを送ります。 process : GCutProcess signal_number : 外部プロセスに送るシグナル番号。 error : エラーを返すアドレスまたはNULL 戻り値 :成功したときはTRUE、そうでない場合はFALSE 1.1.5から gcut_process_write () gcut_process_write gboolean gcut_process_write (GCutProcess *process, const gchar *chunk, gsize size, GError **error); 外部プロセスの標準入力にchunkを書き込みます。 process : GCutProcess chunk : 書き込むデータ size : chunkのサイズ error : エラーを返すアドレスまたはNULL 戻り値 :成功したときはTRUE、そうでない場合はFALSE 1.1.5から gcut_process_flush () gcut_process_flush GIOStatus gcut_process_flush (GCutProcess *process, GError **error); 外部プロセスの標準出力から読み込んだデータ。 process : GCutProcess error : エラーを返すアドレスまたはNULL 戻り値 : the status of the operation: One of G_IO_STATUS_NORMAL, G_IO_STATUS_AGAIN, or G_IO_STATUS_ERROR. 1.1.5から gcut_process_get_output_string () gcut_process_get_output_string GString * gcut_process_get_output_string (GCutProcess *process); process : GCutProcess 戻り値 :外部プロセスの標準出力の結果をすべて持ったGString 1.1.5から gcut_process_get_error_string () gcut_process_get_error_string GString * gcut_process_get_error_string (GCutProcess *process); process : GCutProcess 戻り値 :外部プロセスの標準エラー出力の結果をすべて持ったGString 1.1.5から gcut_process_get_input_channel () gcut_process_get_input_channel GIOChannel * gcut_process_get_input_channel (GCutProcess *process); 外部プロセスの標準入力と結びついたGIOChannelを取得します。 process : GCutProcess 戻り値 :外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL 1.1.5から gcut_process_get_output_channel () gcut_process_get_output_channel GIOChannel * gcut_process_get_output_channel (GCutProcess *process); 外部プロセスの標準出力と結びついたGIOChannelを取得します。 process : GCutProcess 戻り値 :外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL 1.1.5から gcut_process_get_error_channel () gcut_process_get_error_channel GIOChannel * gcut_process_get_error_channel (GCutProcess *process); 外部プロセスのエラー出力に結びついたGIOChannelを返します。 process : GCutProcess 戻り値 :外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL 1.1.5から gcut_process_get_output_stream () gcut_process_get_output_stream GInputStream * gcut_process_get_output_stream (GCutProcess *process); 外部プロセスの標準出力と結びついたGInputStreamを取得します。 process : GCutProcess 戻り値 :外部プロセスが実行中の場合はGInputStream。そうでない場合はNULL 1.1.5から gcut_process_get_error_stream () gcut_process_get_error_stream GInputStream * gcut_process_get_error_stream (GCutProcess *process); 外部プロセスの標準エラー出力に結びついたGInputStreamを返します。 process : GCutProcess 戻り値 :外部プロセスが実行中の場合はGInputStream。そうでない場合はNULL 1.1.5から gcut_process_get_forced_termination_wait_time () gcut_process_get_forced_termination_wait_time guint gcut_process_get_forced_termination_wait_time (GCutProcess *process); オブジェクトが破棄されるときに行われる外部コマンド強制終了後に待つ時間(ミリ秒)を取得します。 process : GCutProcess 戻り値 :破棄時の強制終了待ちの時間。 1.1.5から gcut_process_set_forced_termination_wait_time () gcut_process_set_forced_termination_wait_time void gcut_process_set_forced_termination_wait_time (GCutProcess *process, guint timeout); オブジェクトが破棄されるときに行われる外部コマンド強制終了時に待つ時間(ミリ秒)を設定します。timeoutが0なら外部コマンドの終了を待ちません。デフォルト値は10です。 process : GCutProcess timeout : タイムアウト時間(ミリ秒) 1.1.5から gcut_process_get_event_loop () gcut_process_get_event_loop GCutEventLoop * gcut_process_get_event_loop (GCutProcess *process); processが使っているイベントループを取得します。 process : GCutProcess 戻り値 :GCutEventLoop 1.1.6から gcut_process_set_event_loop () gcut_process_set_event_loop void gcut_process_set_event_loop (GCutProcess *process, GCutEventLoop *loop); processのイベントループを設定します。loopNULLなら、デフォルトのGLibイベントループが使われます。 process : GCutProcess loop : イベントループまたはNULL 1.1.6から プロパティ詳細 <literal>"command"</literal>プロパティ GCutProcess:command "command" gpointer : Read / Write このプロセスが実行する外部コマンド。 シグナル詳細 <literal>"error"</literal>シグナル GCutProcess::error void user_function (GCutProcess *process, gpointer error, gpointer user_data) : Run Last 外部プロセス関連のエラーが発生した毎に発行されます。(例: 入出力エラー) process : シグナルを受け取るオブジェクト。 error : 外部プロセスのエラー。(GError user_data : シグナルハンドラが接続された時にユーザが指定したデータ。 1.1.5から<literal>"error-received"</literal>シグナル GCutProcess::error-received void user_function (GCutProcess *process, gchar *chunk, guint64 size, gpointer user_data) : Run Last 外部プロセスが標準エラー出力に出力したデータが読み込まれる毎に発行されます。 外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。 process : シグナルを受け取るオブジェクト。 chunk : 外部プロセスの標準エラー出力から読み込んだデータ。 size : chunkのサイズ。(gsize user_data : シグナルハンドラが接続された時にユーザが指定したデータ。 1.1.5から<literal>"output-received"</literal>シグナル GCutProcess::output-received void user_function (GCutProcess *process, gchar *chunk, guint64 size, gpointer user_data) : Run Last 外部プロセスが標準出力に出力したデータが読み込まれる毎に発行されます。 外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。 process : シグナルを受け取るオブジェクト。 chunk : 外部プロセスの標準出力から読み込んだデータ。 size : chunkのサイズ。(gsize user_data : シグナルハンドラが接続された時にユーザが指定したデータ。 1.1.5から<literal>"reaped"</literal>シグナル GCutProcess::reaped void user_function (GCutProcess *process, gint status, gpointer user_data) : Run Last 外部プロセスが終了した時に発行されます。 外部コマンドが終了したこと検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。 process : シグナルを受け取るオブジェクト。 status : 外部プロセスの終了ステータス。 user_data : シグナルハンドラが接続された時にユーザが指定したデータ。 1.1.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-egg.xml0000644000175000017500000016553011525703000023142 0ustar koukou ]> 外部コマンド(非推奨) 3 Cutterライブラリ 外部コマンド(非推奨) 外部コマンドを使うための便利API(非推奨) 概要 #define GCUT_EGG_ERROR GCutEgg; GCutEggClass; enum GCutEggError; GQuark gcut_egg_error_quark (void); GCutEgg * gcut_egg_new (const gchar *command, ...); GCutEgg * gcut_egg_new_va_list (const gchar *command, va_list args); GCutEgg * gcut_egg_new_argv (gint argc, gchar **argv); GCutEgg * gcut_egg_new_strings (const gchar **command); GCutEgg * gcut_egg_new_array (GArray *command); void gcut_egg_set_flags (GCutEgg *egg, GSpawnFlags flags); GSpawnFlags gcut_egg_get_flags (GCutEgg *egg); void gcut_egg_set_env (GCutEgg *egg, const gchar *name, ...); gchar ** gcut_egg_get_env (GCutEgg *egg); gboolean gcut_egg_hatch (GCutEgg *egg, GError **error); void gcut_egg_close (GCutEgg *egg); gboolean gcut_egg_write (GCutEgg *egg, const gchar *chunk, gsize size, GError **error); GPid gcut_egg_get_pid (GCutEgg *egg); gint gcut_egg_wait (GCutEgg *egg, guint timeout, GError **error); void gcut_egg_kill (GCutEgg *egg, gint signal_number); GIOChannel * gcut_egg_get_input (GCutEgg *egg); GIOChannel * gcut_egg_get_output (GCutEgg *egg); GIOChannel * gcut_egg_get_error (GCutEgg *egg); guint gcut_egg_get_forced_termination_wait_time (GCutEgg *egg); void gcut_egg_set_forced_termination_wait_time (GCutEgg *egg, guint timeout); オブジェクト階層 GObject +----GCutEgg プロパティ "command" gpointer : Read / Write シグナル "error" : Run Last "error-received" : Run Last "output-received" : Run Last "reaped" : Run Last 説明 GCutEggは外部コマンドの実行・通信・終了をカプセル化します。GCutEggはエラーをGErrorとして報告します。エラーはgcut_assert_error()を使うことにより簡単に検証できます。 外部コマンドはgcut_egg_new()gcut_egg_new_strings()などのようなコンストラクタで指定します。この時点では外部コマンドは実行されません。gcut_egg_hatch()で指定された外部コマンドが実行されます。 外部コマンドの標準出力・エラー出力は"output-received"シグナル・"error-received"シグナル、あるいは、gcut_egg_get_output()gcut_egg_get_error()が返すGIOChannelで取得できます。gcut_egg_write()は外部コマンドの標準入力にデータを書き込みます。 外部コマンドの終了を待つためにはgcut_egg_wait()を使うことができます。無限待ちを避けるために、タイムアウトを指定することができます。 例: static GString *output_string; static GCutEgg *egg; void cut_setup (void) { output_string = g_string_new(NULL); egg = NULL; } void cut_teardown (void) { if (output_string) g_string_free(output_string, TRUE); if (egg) g_object_unref(egg); } static void cb_output_received (GCutEgg *egg, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(output_string, chunk, size); } void test_echo (void) { GError *error = NULL; egg = gcut_egg_new("echo", "XXX", NULL); g_signal_connect(egg, "receive-output", G_CALLBACK(cb_output_received), NULL); gcut_egg_hatch(egg, &error); gcut_assert_error(error); gcut_egg_wait(egg, 1000, &error); gcut_assert_error(error); cut_assert_equal_string("XXX\n", output_string->str); } 詳細 GCUT_EGG_ERROR GCUT_EGG_ERROR #define GCUT_EGG_ERROR (gcut_egg_error_quark()) GCUT_EGG_ERRORは非推奨です。新しいコードでは使わないでください。 GCutEgg GCutEgg typedef struct _GCutEgg GCutEgg; GCutEggは非推奨です。新しいコードでは使わないでください。 GCutEggClass GCutEggClass typedef struct { GObjectClass parent_class; void (*output_received) (GCutEgg *egg, const gchar *chunk, gsize size); void (*error_received) (GCutEgg *egg, const gchar *chunk, gsize size); void (*reaped) (GCutEgg *egg, gint status); void (*error) (GCutEgg *egg, GError *error); } GCutEggClass; GCutEggClassは非推奨です。新しいコードでは使わないでください。 enum GCutEggError GCutEggErrorGCutEggError typedef enum { GCUT_EGG_ERROR_COMMAND_LINE, GCUT_EGG_ERROR_IO_ERROR, GCUT_EGG_ERROR_ALREADY_RUNNING, GCUT_EGG_ERROR_NOT_RUNNING, GCUT_EGG_ERROR_INVALID_OBJECT, GCUT_EGG_ERROR_TIMEOUT } GCutEggError; GCutEggErrorはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにGCutProcessErrorを使ってください。 GCutEgg関連の操作で返されるエラーコード。 GCUT_EGG_ERROR_COMMAND_LINE コマンドライン関連のエラー。 GCUT_EGG_ERROR_IO_ERROR 入出力エラー。 GCUT_EGG_ERROR_ALREADY_RUNNING 外部コマンドはすでに実行されています。 GCUT_EGG_ERROR_NOT_RUNNING 外部こもアンドが実行されていません。 GCUT_EGG_ERROR_INVALID_OBJECT 不正なGCutEggオブジェクトが渡されました。 GCUT_EGG_ERROR_TIMEOUT タイムアウト。 1.0.6から gcut_egg_error_quark () gcut_egg_error_quark GQuark gcut_egg_error_quark (void); gcut_egg_error_quarkは非推奨です。新しいコードでは使わないでください。 戻り値 : gcut_egg_new () gcut_egg_newgcut_egg_new GCutEgg * gcut_egg_new (const gchar *command, ...); gcut_egg_newはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_new()を使ってください。 commandを実行する新しいGCutEggオブジェクトを生成します。 command : 実行する外部コマンド名。 ... : commandの引数 戻り値 :新しいGCutEgg 1.0.6から gcut_egg_new_va_list () gcut_egg_new_va_listgcut_egg_new_va_list GCutEgg * gcut_egg_new_va_list (const gchar *command, va_list args); gcut_egg_new_va_listはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないで下さい。代わりにgcut_process_new_va_list()を使ってください。 commandを実行する新しいGCutEggオブジェクトを生成します。 command : 実行する外部コマンド名。 args : commandの引数 戻り値 :新しいGCutEgg 1.0.6から gcut_egg_new_argv () gcut_egg_new_argvgcut_egg_new_argv GCutEgg * gcut_egg_new_argv (gint argc, gchar **argv); gcut_egg_new_argvはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_egg_new_argv()を使ってください。 commandを実行する新しいGCutEggオブジェクトを生成します。 argc : argvの要素数 argv : 実行する外部コマンド名とコマンド引数。 戻り値 :新しいGCutEgg 1.0.6から gcut_egg_new_strings () gcut_egg_new_stringsgcut_egg_new_strings GCutEgg * gcut_egg_new_strings (const gchar **command); gcut_egg_new_stringsはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_new_strings()を使ってください。 commandを実行する新しいGCutEggオブジェクトを生成します。 command : 実行する外部コマンド名とコマンド引数。NULL終端。 戻り値 :新しいGCutEgg 1.0.6から gcut_egg_new_array () gcut_egg_new_arraygcut_egg_new_array GCutEgg * gcut_egg_new_array (GArray *command); gcut_egg_new_arrayはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_egg_new_array()を使ってください。 commandを実行する新しいGCutEggオブジェクトを生成します。 command : 実行する外部コマンド名とコマンド引数。GArrayは0終端にして下さい。 戻り値 :新しいGCutEgg 1.0.6から gcut_egg_set_flags () gcut_egg_set_flagsgcut_egg_set_flags void gcut_egg_set_flags (GCutEgg *egg, GSpawnFlags flags); gcut_egg_set_flagsはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_set_flags()を使ってください。 外部コマンドを実行するときのflagsを設定します。 egg : GCutEgg flags : g_spawn_async_with_pipes()に渡すフラグ。 1.0.6から gcut_egg_get_flags () gcut_egg_get_flagsgcut_egg_get_flags GSpawnFlags gcut_egg_get_flags (GCutEgg *egg); gcut_egg_get_flagsはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_flags()を使ってください。 外部コマンドを実行する時のflagsを取得します。 egg : GCutEgg 戻り値 :外部コマンドを実行するときのフラグ。 1.0.6から gcut_egg_set_env () gcut_egg_set_envgcut_egg_set_env void gcut_egg_set_env (GCutEgg *egg, const gchar *name, ...); gcut_egg_set_envはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_set_env()を使ってください。 外部コマンドの環境変数を設定します。 egg : GCutEgg name : 最初の環境変数名。 ... : nameに対応する値。その後に、名前と値のペアを任意の数だけ指定します。最後の引数はNULLにしてください。 1.0.6から gcut_egg_get_env () gcut_egg_get_envgcut_egg_get_env gchar ** gcut_egg_get_env (GCutEgg *egg); gcut_egg_get_envはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_env()を使ってください。 外部コマンドの環境変数を取得します。 egg : GCutEgg 戻り値 :新しく割り当てられたNULL終端の環境変数のリスト("名前1=値1", "名前2=値2", ..., NULL)を返します。必要がなくなったらg_strfreev()で開放してください。 1.0.6から gcut_egg_hatch () gcut_egg_hatchgcut_egg_hatch gboolean gcut_egg_hatch (GCutEgg *egg, GError **error); gcut_egg_hatchはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_run()を使ってください。 新しい外部プロセスを実行します。 egg : GCutEgg error : エラーを返すアドレスまたはNULL 戻り値 :成功したときはTRUE、そうでない場合はFALSE 1.0.6から gcut_egg_close () gcut_egg_closegcut_egg_close void gcut_egg_close (GCutEgg *egg); gcut_egg_closeはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにGCutProcessを使ってください。 実行した外部コマンドのリソースを回収します。破棄されるときに暗黙的に回収されます。 egg : GCutEgg 1.0.6から gcut_egg_write () gcut_egg_writegcut_egg_write gboolean gcut_egg_write (GCutEgg *egg, const gchar *chunk, gsize size, GError **error); gcut_egg_writeはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_write()を使ってください。 外部プロセスの標準入力にchunkを書き込みます。 egg : GCutEgg chunk : 書き込むデータ size : chunkのサイズ error : エラーを返すアドレスまたはNULL 戻り値 :成功したときはTRUE、そうでない場合はFALSE 1.0.6から gcut_egg_get_pid () gcut_egg_get_pidgcut_egg_get_pid GPid gcut_egg_get_pid (GCutEgg *egg); gcut_egg_get_pidはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_pid()を使ってください。 実行している外部プロセスのプロセスIDを取得します。外部コマンドが実行されていない場合は0が返ります。 egg : GCutEgg 戻り値 :実行中の外部コマンドのプロセスID。実行していない場合は0。 1.0.6から gcut_egg_wait () gcut_egg_waitgcut_egg_wait gint gcut_egg_wait (GCutEgg *egg, guint timeout, GError **error); gcut_egg_waitはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_wait()を使ってください。 実行中の外部プロセスが終了することをtimeoutミリ秒待ちます。外部コマンドがtimeoutミリ秒以内に終了しなかった場合は、GCUT_EGG_ERROR_TIMEOUTエラーが設定され、-1が返ります。外部プロセスが実行されていない場合は、GCUT_EGG_ERROR_NOT_RUNNINGエラーが設定され、-1が返ります。 egg : GCutEgg timeout : タイムアウト時間(ミリ秒) error : エラーを返すアドレスまたはNULL 戻り値 :外部プロセスが終了した場合は終了ステータス。そうでない場合は-1。 1.0.6から gcut_egg_kill () gcut_egg_killgcut_egg_kill void gcut_egg_kill (GCutEgg *egg, gint signal_number); gcut_egg_killはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないで下さい。代わりにgcut_process_kill()を使ってください。 外部プロセスにsignal_numberシグナルを送ります。 egg : GCutEgg signal_number : 外部プロセスに送るシグナル番号。 1.0.6から gcut_egg_get_input () gcut_egg_get_inputgcut_egg_get_input GIOChannel * gcut_egg_get_input (GCutEgg *egg); gcut_egg_get_inputはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_input_channel()を使ってください。 外部プロセスの標準入力と結びついたGIOChannelを取得します。 egg : GCutEgg 戻り値 :外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL 1.0.6から gcut_egg_get_output () gcut_egg_get_outputgcut_egg_get_output GIOChannel * gcut_egg_get_output (GCutEgg *egg); gcut_egg_get_outputはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_output_channel()を使ってください。 外部プロセスの標準出力と結びついたGIOChannelを取得します。 egg : GCutEgg 戻り値 :外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL 1.0.6から gcut_egg_get_error () gcut_egg_get_errorgcut_egg_get_error GIOChannel * gcut_egg_get_error (GCutEgg *egg); gcut_egg_get_errorはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_egg_get_error()を使ってください。 外部プロセスのエラー出力に結びついたGIOChannelを返します。 egg : GCutEgg 戻り値 :外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL 1.0.6から gcut_egg_get_forced_termination_wait_time () gcut_egg_get_forced_termination_wait_timegcut_egg_get_forced_termination_wait_time guint gcut_egg_get_forced_termination_wait_time (GCutEgg *egg); gcut_egg_get_forced_termination_wait_timeはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_process_get_forced_termination_wait_time()を使ってください。 オブジェクトが破棄されるときに行われる外部コマンド強制終了後に待つ時間(ミリ秒)を取得します。 egg : GCutEgg 戻り値 :破棄時の強制終了待ちの時間。 1.0.6から gcut_egg_set_forced_termination_wait_time () gcut_egg_set_forced_termination_wait_timegcut_egg_set_forced_termination_wait_time void gcut_egg_set_forced_termination_wait_time (GCutEgg *egg, guint timeout); gcut_egg_set_forced_termination_wait_timeはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_egg_set_forced_termination_wait_time()を使ってください。 オブジェクトが破棄されるときに行われる外部コマンド強制終了時に待つ時間(ミリ秒)を設定します。timeoutが0なら外部コマンドの終了を待ちません。デフォルト値は10です。 egg : GCutEgg timeout : タイムアウト時間(ミリ秒) 1.0.6から プロパティ詳細 <literal>"command"</literal>プロパティ GCutEgg:command "command" gpointer : Read / Write 実行する外部コマンド。 シグナル詳細 <literal>"error"</literal>シグナル GCutEgg::error void user_function (GCutEgg *egg, gpointer error, gpointer user_data) : Run Last 外部プロセス関連のエラーが発生した毎に発行されます。(例: 入出力エラー) egg : シグナルを受け取るオブジェクト。 error : 外部プロセスのエラー。(GError user_data : シグナルハンドラが接続された時にユーザが指定したデータ。 1.0.6から<literal>"error-received"</literal>シグナル GCutEgg::error-received void user_function (GCutEgg *egg, gchar *chunk, guint64 size, gpointer user_data) : Run Last 外部プロセスが標準エラー出力に出力したデータが読み込まれる毎に発行されます。 外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。 egg : シグナルを受け取るオブジェクト。 chunk : 外部プロセスの標準エラー出力から読み込んだデータ。 size : chunkのサイズ。(gsize user_data : シグナルハンドラが接続された時にユーザが指定したデータ。 1.0.6から<literal>"output-received"</literal>シグナル GCutEgg::output-received void user_function (GCutEgg *egg, gchar *chunk, guint64 size, gpointer user_data) : Run Last 外部プロセスが標準出力に出力したデータが読み込まれる毎に発行されます。 外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。 egg : シグナルを受け取るオブジェクト。 chunk : 外部プロセスの標準出力から読み込んだデータ。 size : chunkのサイズ。(gsize user_data : シグナルハンドラが接続された時にユーザが指定したデータ。 1.0.6から<literal>"reaped"</literal>シグナル GCutEgg::reaped void user_function (GCutEgg *egg, gint status, gpointer user_data) : Run Last 外部プロセスが終了した時に発行されます。 外部コマンドが終了したこと検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。 egg : シグナルを受け取るオブジェクト。 status : 外部プロセスの終了ステータス。 user_data : シグナルハンドラが接続された時にユーザが指定したデータ。 1.0.6から cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-fedora.html0000644000175000017500000000611111525703040025121 0ustar koukou Fedoraへインストール

Fedoraへインストール

Fedoraへインストール — FedoraへのCutterのインストール方法

はじめに

FedoraへのCutterのインストール方法を説明します。

インストール

CutterのYumリポジトリが提供されているので、yumでインストールできます。

まず、Yumリポジトリを登録します。

% sudo rpm -Uvh http://cutter.sourceforge.net/fedora/cutter-repository-1.0.0-1.noarch.rpm

Yumリポジトリを登録したらyumでインストールできます。

% sudo yum install -y cutter

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/tutorial.html0000644000175000017500000020404411525703040023445 0ustar koukou チュートリアル

チュートリアル

チュートリアル — Cutterの使い方

はじめに

スタックを実現するプログラム(ライブラリ)をC言語で作成する。プログラム作成はテストを作成しながら行う。テストの作成にはC言語用のテスティングフレームワークであるCutterを用いる。

プログラムのビルドシステムにはGNUビルドシステム(GNU Autoconf/GNU Automake/GNU Libtool)を使用する。GNUビルドシステムはビルド環境の差異を吸収する。これによりプログラム・テストを複数の環境で容易にビルドできるようになる。

大きなコストをかけずにプログラム本体が複数の環境で動作するのであれば、その方がよい。さらにテストもその環境で動作するのならば、プログラム本体がその環境で正しく動作することを容易に検証できる。プログラム本体だけではなく、テストも複数の環境で容易に動作することは重要である。

Cutterが依存しているライブラリはGLibのみである。GLibはUNIX系のシステムだけではなく、WindowsやMac OS X上でも動作する移植性の高いライブラリである。CutterはGLibを利用することにより移植性の高い状態を保ちつつ豊富なテスト支援機能を提供するxUnit系のテスティングフレームワークである。

以下、スタックを作成しながらCutterの使い方について述べる。なお、Cutterはインストールされているものとする。

このプログラムのソースコード一式はsample/stack/以下にある。

ディレクトリ構成

まず、プログラムを作成するためのディレクトリを用意する。ディレクトリはstackとする。

% mkdir -p /tmp/stack
% cd /tmp/stack

続いて、stack/ディレクトリ以下にビルド補助ファイル用ディレクトリconfig/、プログラム用ディレクトリsrc/、テストプログラム用ディレクトリtest/を作成する。

[stack]% mkdir config src test

つまり、ディレクトリ構成は以下のようになる。

stack/ -+- config/ ビルド補助用ディレクトリ
        |
        +- src/ ソースファイル用ディレクトリ
        |
        +- test/ テストプログラム用ディレクトリ

GNUビルドシステム化

GNUビルドシステムでは、コマンドを実行し、いくつかのファイルを自動生成する。これらのコマンドは、autogen.shというシェルスクリプトを作成し、そこから呼び出すのが一般的である。ここでも、その慣習に従う。

autogen.sh:

#!/bin/sh

run()
{
    $@
    if test $? -ne 0; then
        echo "Failed $@"
        exit 1
    fi
}

run aclocal ${ACLOCAL_ARGS}
run libtoolize --copy --force
run autoheader
run automake --add-missing --foreign --copy
run autoconf

autogen.shに実行権を付けることを忘れないこと。

[stack]% chmod +x autogen.sh

run()はコマンドの実行結果を確認するための便利のための関数である。実行しているコマンドはそれぞれ以下のためである。

  • aclocal: Automakeが利用するマクロをaclocal.m4に集める

  • libtoolize: libtoolを使用するために必要なファイルを用意

  • autoheader: configureスクリプトが利用するconfig.h.inファイルを作成

  • automake: configureスクリプトが利用するMakefile.inを生成

  • autoconf: configureスクリプトを生成

もし、Cutterをaclocalと異なるprefixでインストールしている場合はACLOCAL_ARGS環境変数を指定する。この環境変数はautogen.sh内で参照している。ここでは、prefixを$HOME/localとしてCutterをインストールしたものとする。

[stack]% export ACLOCAL_ARGS="-I $HOME/local/share/aclocal"

この時点でautogen.shを実行すると以下のようになる。

[stack]% ./autogen.sh
aclocal: `configure.ac' or `configure.in' is required
Failed aclocal

Autoconf用のファイルであるconfigure.acを用意する必要がある。

configure.ac

autogen.shのための最低限のconfigure.acは以下の通りである。

configure.ac:

AC_PREREQ(2.59)

AC_INIT(stack, 0.0.1, you@example.com)
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_HEADER([src/config.h])

AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION)

AC_PROG_LIBTOOL

AC_CONFIG_FILES([Makefile])

AC_OUTPUT

configure.acを用意してもう一度autogen.shを実行すると以下のようになる。

[stack]% ./autogen.sh
Putting files in AC_CONFIG_AUX_DIR, `config'.
configure.ac:7: installing `config/install-sh'
configure.ac:7: installing `config/missing'
automake: no `Makefile.am' found for any configure output
Failed automake --add-missing --foreign --copy

今度はAutomakeのためにMakefile.amを用意する必要がある。


Makefile.am

autogen.shのためだけであれば空のMakefile.amで構わない。

[stack]% touch Makefile.am
[stack]% ./autogen.sh
Putting files in AC_CONFIG_AUX_DIR, `config'.

これでconfigureスクリプトが生成される。この時点で一般的なソフトウェアのようにconfigure; make; make installができるようになる。

[stack]% ./configure
...
[stack]% make
[stack]% make install

ただし、ビルドするものもインストールするものも何もないため、今は何も起きない。

はじめてのテスト作成

最低限のビルド環境が整ったので、テストの作成にはいる。まずは、新しく作ったばかりのスタックは空であることをテストする。コードにすると以下の通りである。

void
test_new_stack (void)
{
    Stack *stack;
    stack = stack_new();
    if (stack_is_empty(stack))
        PASS;
    else
        FAIL;
}

ここでは、上記のテストをCutterのテストとして動作させる。

テストプログラムの作成

テストプログラムはtest/以下に作成する。ここではtest/test-stack.cとして作成するものとする。

まず、Cutterを使うためにcutter.hをincludeする。

test/test-stack.c:

#include <cutter.h>

また、テスト対象のスタックの実装のAPIが書かれているstack.hもincludeする。(stack.hは後で作成する。)

test/test-stack.c:

#include <stack.h>

続いて、このスタックのAPIを用いてテストを作成する。

test/test-stack.c:

void
test_new_stack (void)
{
    Stack *stack;
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}

cut_assert()は引数が0ならテストが失敗、0以外ならテストが成功と判断するマクロである。Cutterのテストとはcut_XXX()マクロを使用して、特定の状況で望んだ動作をしているかを検証するプログラムを作成するということである。

以下に、「作成したばかりのスタックは空である」ということを検証するテストのソースコード全体を示す。

test/test-stack.c:

#include <cutter.h>
#include <stack.h>

void test_new_stack (void);

void
test_new_stack (void)
{
    Stack *stack;
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}

テストのビルド

Cutterの各テストは共有ライブラリになる。上記で作成したテストを共有ライブラリとしてビルドするために、Makefile.amを変更する。

test/以下でのビルド設定

現在のMakefile.amは空である。

まず、make経由でaclocalが実行された場合にもautogen.sh用に設定したACLOCAL_ARGS環境変数が使われるように以下を追記する。

Makefile.am:

ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS

次に、サブディレクトリであるtest/以下のtest/test-stack.cをビルドするためにはMakefile.amにtest/以下がサブディレクトリとして存在することを指定する。

Makefile.am:

...
SUBDIRS = test

Makefile.amを変更した後にmakeを実行すると、makeがMakefile.amの変更を検出し、Makefileなどを自動的に更新する。

[stack]% make
 cd . && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign  Makefile
 cd . && /bin/sh ./config.status Makefile 
config.status: creating Makefile
Making all in test
make[1]: ディレクトリ `/tmp/stack/test' に入ります
make[1]: *** ターゲット `all' を make するルールがありません.  中止.
make[1]: ディレクトリ `/tmp/stack/test' から出ます
make: *** [all-recursive] エラー 1

test/以下もビルドしにいこうとしているのがわかる。ただし、test/Makefileがないためtest/以下でのビルドは失敗している。

test/以下でビルドを行うようにするため、test/Makefile.amを作成する。また、configureがtest/Makefileを生成するようにconfigure.acに指定する。

test/以下でのmakeが失敗しないようにするには、空のtest/Makefile.amでもよい。

[stack]% touch test/Makefile.am

あとはconfigure.acにtest/Makefileを生成するように指定すればmakeは通るようになる。

configure.ac:

...
AC_CONFIG_FILES([Makefile
                 test/Makefile])
...

実際にmakeを実行すると自動で再びconfigureが走り、test/Makefileが生成され、test/以下でのmakeが失敗しなくなる。

[stack]% make
...
config.status: creating test/Makefile
config.status: creating src/config.h
config.status: src/config.h is unchanged
config.status: executing depfiles commands
Making all in test
make[1]: ディレクトリ `/tmp/stack/test' に入ります
make[1]: `all' に対して行うべき事はありません.
make[1]: ディレクトリ `/tmp/stack/test' から出ます
make[1]: ディレクトリ `/tmp/stack' に入ります
make[1]: `all-am' に対して行うべき事はありません.
make[1]: ディレクトリ `/tmp/stack' から出ます

test/test_stack.soのビルド

それではtest/test-stack.cを共有ライブラリとしてビルドできるようにtest/Makefile.amを編集する。テスト用の共有ライブラリは「test_」から始まる名前にする(「test_」の前に「lib」が付いても良い)。また、テストプログラムはインストールする必要がないため「noinst_」を使う。

test/Makefile.am:

noinst_LTLIBRARIES = test_stack.la

テストの共有ライブラリはCutterが提供するテスト実行コマンドcutterから動的に読み込まれる。動的に読み込まれる共有ライブラリは、libtoolに-moduleオプションを渡す必要がある。また、-moduleオプションを指定する場合-rpathも指定する必要がある。そこで、LDFLAGSを以下のように指定する。-avoid-versionはテストの共有ライブラリにはバージョン番号を付ける必要がないため指定している。-no-undefinedは未定義のシンボルがある場合にエラーを報告するオプションである。環境によっては-no-undefinedを指定しないと共有ライブラリが作成されないため指定している。(例えば、Windows上でDLLを作成する場合)

test/Makefile.am:

...
LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

test/test_stack.laのビルド(test_stack.soはtest/.libs/以下に作成される)にはtest/test-stack.cを使用するので、それを指定する。

test/Makefile.am:

...
test_stack_la_SOURCES = test-stack.c

これでtest/test_stack.laがビルドできる。

[stack]% make
...
 cd .. && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign  test/Makefile
test/Makefile.am: required file `config/depcomp' not found
test/Makefile.am:   `automake --add-missing' can install `depcomp'
make[1]: *** [Makefile.in] エラー 1
...

config/depcompを生成するには--add-missingオプション付きでautomakeを実行する必要がある。これにはautogen.shを使用できる。また、configureを再実行する必要もある。

[stack]% ./autogen.sh
[stack]% ./configure

これでmakeを実行することによりtest/test_stack.laができるようになる。

[stack]% make
...
test-stack.c:1:20: error: cutter.h: そのようなファイルやディレクトリはありません
test-stack.c:2:19: error: stack.h: そのようなファイルやディレクトリはありません
test-stack.c: In function ‘test_new_stack’:
test-stack.c:9: error: ‘Stack’ undeclared (first use in this function)
test-stack.c:9: error: (Each undeclared identifier is reported only once
test-stack.c:9: error: for each function it appears in.)
test-stack.c:9: error: ‘stack’ undeclared (first use in this function)
make[1]: *** [test-stack.lo] エラー 1
make[1]: ディレクトリ `/tmp/stack/test' から出ます
make: *** [all-recursive] エラー 1

ただし、上記のようにCutterを使用する設定を行っていないためcutter.hが読み込めない。また、スタックの実装もないためstack.hの読み込みにも失敗する。

Cutterの使用

まずは、cutter.hを読み込めるようにする。Cutterはaclocal用のマクロファイルを提供している。そのため、容易にGNUビルドシステムから利用することができる。

まず、configure.acにCutterを検出するコードを追加する。

configure.ac:

...
AC_CHECK_CUTTER

AC_CONFIG_FILES([Makefile
                 test/Makefile])
...

また、test/Makefile.amでは検出したCutter用の設定を利用する。

test/Makefile.am:

...
INCLUDES = $(CUTTER_CFLAGS)
LIBS = $(CUTTER_LIBS)
...

現時点での完全なconfigure.ac、Makefile.am、test/Makefile.amは以下のようになる。

configure.ac:

AC_PREREQ(2.59)

AC_INIT(stack, 0.0.1, you@example.com)
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_HEADER([src/config.h])

AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION)

AC_PROG_LIBTOOL

AC_CHECK_CUTTER

AC_CONFIG_FILES([Makefile
                 test/Makefile])

AC_OUTPUT

Makefile.am:

ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS

SUBDIRS = test

test/Makefile.am:

noinst_LTLIBRARIES = test_stack.la

INCLUDES = $(CUTTER_CFLAGS)
LIBS = $(CUTTER_LIBS)

LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

test_stack_la_SOURCES = test-stack.c

AC_CHECK_CUTTERマクロ内では一般的なパッケージ情報管理ツールであるpkg-configを使用している。もし、Cutterをpkg-configと異なるprefixでインストールしている場合はPKG_CONFIG_PATH環境変数を指定する。この環境変数はpkg-configが.pcファイルを検索するために利用する。ここではprefixを$HOME/localとしてCutterをインストールしたものとする。

[stack]% export PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig

変更後、makeを実行すると自動的にconfigureが実行され、Cutterを利用したビルドが行われる。

[stack]% make
...
test-stack.c:2:19: error: stack.h: そのようなファイルやディレクトリはありません
test-stack.c: In function ‘test_new_stack’:
test-stack.c:9: error: ‘Stack’ undeclared (first use in this function)
test-stack.c:9: error: (Each undeclared identifier is reported only once
test-stack.c:9: error: for each function it appears in.)
test-stack.c:9: error: ‘stack’ undeclared (first use in this function)
make[1]: *** [test-stack.lo] エラー 1
make[1]: ディレクトリ `/tmp/stack/test' から出ます
make: *** [all-recursive] エラー 1

cutter.hが読み込めないというエラーがなくなった。

スタックAPIの作成

次はstack.hが読み込めないエラーを解消する。

スタックの実装はsrc/以下に作成するので、スタックのAPIであるstack.hはsrc/stack.hに置く。

[stack]% touch src/stack.h

インクルードパスを設定し、テストプログラムからstack.hを読み込めるようにする。

test/Makefile.am:

...
INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src
...

makeを実行するとstack.hが読み込めないエラーが解消されているのが分かる。

[stack]% make
...
test-stack.c: In function ‘test_new_stack’:
test-stack.c:9: error: ‘Stack’ undeclared (first use in this function)
test-stack.c:9: error: (Each undeclared identifier is reported only once
test-stack.c:9: error: for each function it appears in.)
test-stack.c:9: error: ‘stack’ undeclared (first use in this function)
make[1]: *** [test-stack.lo] エラー 1
make[1]: ディレクトリ `/tmp/stack/test' から出ます
make: *** [all-recursive] エラー 1

残りのエラーがStack型が宣言されていないことだけになった。

Stack型の宣言

src/stack.hにStack型を宣言し、テストプログラムをビルドできるようにする。

src/stack.h:

#ifndef __STACK_H__
#define __STACK_H__

typedef struct _Stack Stack;

#endif

stack_new()が宣言されていないため警告がでるが共有ライブラリを作成することはできる。

[stack]% make
...
test-stack.c: In function ‘test_new_stack’:
test-stack.c:10: warning: assignment makes pointer from integer without a cast
...
[stack]% file test/.libs/test_stack.so
test/.libs/test_stack.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

注: Cygwin上では未解決のシンボルがあるときは作成できない。Cygwin環境の場合は気にせずに次に進むこと。

stack_new()/stack_is_empty()の宣言

stack_new()、stack_is_empty()を宣言し、警告を解消する。

src/stack.h:

...
Stack *stack_new      (void);
int    stack_is_empty (Stack *stack);
...

makeをして警告がでないことを確認する。

[stack]% make

テスト起動

共有ライブラリが作成できたので、cutterコマンドでこのテストを起動できる。

[stack]% cutter test/
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new

stack_new()が定義されていないため読み込みに失敗するが、テストプログラムが読み込まれることは確認できる。

注: Cygwin上では未解決のシンボルがあるときはDLL作成できないので、エラーにならず、「0個のテストを実行して失敗しなかった」結果が報告される。以降の作業の中でスタックを実装し、未解決のシンボルが解決されればDLLが作成され、テストが実行できるようになる。それまではテストの実行結果が異なる。Cygwin環境の場合は気にせずに次に進むこと。

テスト起動の自動化

GNUビルドシステムでは一般的にmake checkでテストが起動する。スタックの実装でも同様にテストが起動するようにする。

まず、テストを起動するスクリプトtest/run-test.shを作成する。cutterコマンドのパスは環境変数CUTTERで受け取ることにする。

test/run-test.sh:

#!/bin/sh

export BASE_DIR="`dirname $0`"
$CUTTER -s $BASE_DIR "$@" $BASE_DIR

実行権を付けることを忘れないこと。

[stack]% chmod +x test/run-test.sh

test/Makefile.amにテスト起動スクリプトとしてtest/run-test.shを使うことを指定する。

test/Makefile.am:

TESTS = run-test.sh
TESTS_ENVIRONMENT = CUTTER="$(CUTTER)"
...

TESTS_ENVIRONMENTではcutterコマンドのパスを環境変数CUTTERで渡している。cutterコマンドのパスはconfigure.ac内に追加したAC_CHECK_CUTTERが検出している。

make -s checkでテストが走ることを確認する。-sオプションはmakeの出力を抑えるオプション(silent)であり、これを指定することによりテスト結果が見やすくなる。

[stack]% make -s check
Making check in test
cutter: symbol lookup error: ./.libs/test_stack.so: undefined symbol: stack_new
FAIL: run-test.sh
================================
1 of 1 tests failed
Please report to you@example.com
================================
...

注: 前述のとおり、Cygwin上ではDLLが作成できないため、エラーは発生しない。Cygwin環境の場合は実行結果が異なっても気にせずに次に進むこと。

test/run-test.shの単独実行のサポート

make -s checkではビルドログなどテスト結果以外の出力がでて、テスト結果が埋もれてしまう。そこで、make -s check経由ではなくtest/run-test.shを実行できるようにする。

まず、test/run-test.shを環境変数CUTTERが指定されていない場合は、cutterコマンドのパスを自動的に検出する。さらにmake check経由でtest/run-test.shが起動された場合はmakeを実行し、必要なファイルをビルドする。

test/run-test.sh:

#!/bin/sh

export BASE_DIR="`dirname $0`"
top_dir="$BASE_DIR/.."

if test -z "$NO_MAKE"; then
    make -C $top_dir > /dev/null || exit 1
fi

if test -z "$CUTTER"; then
    CUTTER="`make -s -C $BASE_DIR echo-cutter`"
fi

$CUTTER -s $BASE_DIR "$@" $BASE_DIR

このtest/run-test.shに対応するためにtest/Makefile.amを以下のように変更する。

test/Makefile.am:

...
TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)"
...
echo-cutter:
	@echo $(CUTTER)

test/Makefile.am全体は以下のようになる。

test/Makefile.am:

TESTS = run-test.sh
TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)"

noinst_LTLIBRARIES = test_stack.la

INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src
LIBS = $(CUTTER_LIBS)

LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

test_stack_la_SOURCES = test-stack.c

echo-cutter:
	@echo $(CUTTER)

test/run-test.shを直接実行してテストが起動することを確認する。

[stack]% test/run-test.sh
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new

注: Cygwin環境ではエラーは発生しない。

ここからはmake -s checkではなくtest/run-test.shを使用する。これは必要な情報のみが出力され、本当に興味のあるテストの結果が埋もれてしまうのを防ぐためである。

また、スタックの実装を行う前にテストの実行環境を整備しているのは、テストを実行するコストを下げるためである。これは、テストを実行することが面倒になるとテストを実行しなくなり、その結果、プログラムの品質低下につながるためである。

最初にテスト環境の整備を行うと、その分、プログラム本体の開発着手が遅れてしまう。しかし、プログラム本体が開発・保守され続ける間は常にテストを実行し、品質を保持する必要があるため、最初にテスト環境整備に当てたコストは回収可能である。今後、快適に品質の高いプログラムの開発を行うために、最初にテスト環境の整備を行うことは重要である。


スタックの実装

テスト環境の整備ができたため、スタックの実装に入る。

簡単なstack_new()の実装

まず、stack_new()を定義し、実行時エラーの原因を解決する。

スタックの実装はsrc/stack.cで行う。簡単なstack_new()の実装は以下の通りである。

src/stack.c:

#include <stdlib.h>
#include "stack.h"

Stack *
stack_new (void)
{
    return NULL;
}

src/libstack.laのビルド

それでは、makeでsrc/stack.cをビルドできるようにする。

まず、test/以下をビルド対象に加えたように、src/以下もビルド対象とする。

Makefile.am:

ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS

SUBDIRS = src test

configure.ac:

...
AC_CONFIG_FILES([Makefile
                 src/Makefile
                 test/Makefile])
...

これでsrc/以下もビルド対象となる。

[stack]% test/run-test.sh
configure.ac:13: required file `src/Makefile.in' not found
make: *** [Makefile.in] エラー 1

src/Makefile.amを作成するとこのエラーはなくなる。

[stack]% touch src/Makefile.am
[stack]% test/run-test.sh
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new

注: Cygwin環境ではエラーは発生しない。

makeは通るようになるが、この時点ではsrc/stack.cはビルドされないし、テストプログラムもlibstack.soをリンクしていないのでstack_new()が定義されていないエラーは変わらない。

src/Makefile.amに以下を追加し、src/stack.cからlibstack.soを作成する。

src/Makefile.am:

lib_LTLIBRARIES = libstack.la

LDFLAGS = -no-undefined

libstack_la_SOURCES = stack.c

makeでlibstack.soが生成できるようになるはずである。

[stack]% make
...
make[1]: ディレクトリ `/tmp/stack/src' に入ります
Makefile:275: .deps/stack.Plo: そのようなファイルやディレクトリはありません
make[1]: *** ターゲット `.deps/stack.Plo' を make するルールがありません.  中止.
...

上記のエラーを修正するためにconfigureをもう一度実行する必要がある。

[stack]% ./configure

makeでsrc/.libs/libstack.so.0.0.0を生成することができる。

[stack]% make
[stack]% file src/.libs/libstack.so.0.0.0
src/.libs/libstack.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

注: Cygwin上ではsrc/.libs/cyglibstack.dllが作成される。

src/libstack.laのリンク

libstack.soはできたがテストプログラムにはリンクしていないので、まだ実行時エラーは発生する。

[stack]% test/run-test.sh
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new

注: Cygwin環境ではエラーは発生しない。

libstack.soをリンクするためにtest/Makefile.amを以下のように変更する。

test/Makefile.am:

...
LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la
...

Cygwin環境の場合はsrc/.libs/以下に生成されるスタックを実装したDLLを利用するために、src/.libs/にパスを通す必要がある。そのため、以下のようにtest/run-test.shでcutterを実行する前にPATHを設定する。

test/run-test.sh:

...
case `uname` in
    CYGWIN*)
        PATH="$top_dir/src/.libs:$PATH"
        ;;
    Darwin)
        DYLD_LIBRARY_PATH="$top_dir/src/.libs:$DYLD_LIBRARY_PATH"
        export DYLD_LIBRARY_PATH
        ;;
    *BSD)
        LD_LIBRARY_PATH="$top_dir/src.libs:$LD_LIBRARY_PATH"
        export LD_LIBRARY_PATH
        ;;
    *)
        :
        ;;
esac

$CUTTER -s $BASE_DIR "$@" $BASE_DIR

テストプログラムを再リンクする必要があるため、一度make cleanしてからビルドしなおす。

[stack]% make clean
[stack]% make
[stack]% test/run-test.sh
cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_is_empty

今まではstack_new()が見つからずにエラーが発生していたが、stack_is_empty()が見つからないというエラーに変わった。これにより、libstack.soがリンクされていることが確認できた。

注: Cygwin環境ではエラーは発生しない。

stack_is_empty()の実装

テストプログラム中ではstack_is_empty()の結果を以下のようにテストしている。

test/test-stack.c:

...
cut_assert(stack_is_empty(stack));
...

つまり、stack_is_empty()が真を返すことをテストしている。よって、src/stack.cでのstack_is_empty()は真を返す必要がある。

src/stack.c:

...
#define TRUE 1
#define FALSE 0
...
int
stack_is_empty (Stack *stack)
{
    return TRUE;
}

src/stack.c全体は以下のようになる。

src/stack.c:

#include <stdlib.h>
#include "stack.h"

#define TRUE 1
#define FALSE 0

Stack *
stack_new (void)
{
    return NULL;
}

int
stack_is_empty (Stack *stack)
{
    return TRUE;
}

このstack_is_empty()の実装は常に真を返すため、テストは成功するはずである。

[stack]% test/run-test.sh
.

Finished in 0.000028 seconds

1 test(s), 1 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

「.」がひとつ表示されているのは1つのテストがパスしたことを表している。現在は1つしかテストがないので1つのテストにパスしたということはすべてのテストにパスしたということである。

環境によっては表示が緑になっているはずである。これはテストがパスしているので次に進んでもよいという意味である。

テストが動作することが確認できたので、以降ではテストを作成しながらスタックの実装を完成させる。

pushの実装

まずはpushを実装する。今回の実装では、スタックにはintのみを格納できることする。

pushのテスト

pushをした後はスタックのサイズが1になり、スタックは空ではなくなるはずである。これをテストにすると以下のようになる。

test/test-stack.c:

...
void test_push (void);
...
void
test_push (void)
{
    Stack *stack;

    stack = stack_new();
    cut_assert_equal_int(0, stack_get_size(stack));
    stack_push(stack, 100);
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert(!stack_is_empty(stack));
}

テストを実行すると、stack_get_size()が定義されていないため実行時エラーになる。

[stack]% test/run-test.sh
cutter: symbol lookup error: ./test/.libs/test_stack.so: undefined symbol: stack_get_size

注: Cygwin環境ではエラーは発生しない?

このテストをパスするようにpushを実装する。


cut_stack_push()の実装

まずは、パスしなくても良いのでテストが動くようにstack_get_size()とstack_push()を実装する。

まず、src/stack.hに宣言を追加する。

src/stack.h:

...
int    stack_get_size (Stack *stack);
void   stack_push     (Stack *stack, int value);
...

続いてsrc/stack.cに定義を追加する。

src/stack.c:

...
int
stack_get_size (Stack *stack)
{
    return 0;
}

void
stack_push (Stack *stack, int value)
{
}

stack_get_size()が0を返しているのは、最初のstack_get_size()は以下のように0を期待されているからである。

test/test-stack.c:

...
stack = stack_new();
cut_assert_equal_int(0, stack_get_size(stack));
...

pushの実装ができたのでテストを実行する。

[stack]% test/run-test.sh
.F

1) Failure: test_push
<1 == stack_get_size(stack)>
expected: <1>
 but was: <0>
test/test-stack.c:23: test_push()

Finished in 0.000113 seconds

2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
50% passed

「F」はテストが失敗(Failure)したことを表している。環境によっては表示が赤くなっているはずである。これは、テストがパスしていないので先に進むことは危険であることを示している。popの実装に移る前にテストをパスさせるようにpushを実装を改良するべきだということである。

cutterからのメッセージでは、test/test-stack.cの23行目、test_push()関数の中でstack_get_size(stack)の値が1ではなく0のために失敗したということを表している。該当する行は以下の通りである。

test/test-stack.c:23:

cut_assert_equal_int(1, stack_get_size(stack));

これはstack_get_size()が常に0を返しているためである。stack_push()された後には内部のカウンタを1つ進める必要がある。


メモリ開放

今まではstack_new()でNULLを返していたが、test_pushテストをパスするためには内部にカウンタを持つ必要があるため、メモリを割り当てる必要がある。メモリを割り当てた場合、使用済のメモリを開放する必要がある。

例えば、test_new_stack()では以下のようにする必要がある。

void
test_new_stack (void)
{
    Stack *stack;
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
    stack_free(stack);
}

しかし、stack_free()の前のcut_assert()が失敗した場合はその時点で処理が終了してしまうため、stack_free()が呼ばれずメモリリークが発生する。(ただし、テストプログラムはすぐに終了する短命なプログラムため、害が大きくなることは少ない。)

Cutterではテストの前後に必ず実行される関数を設定することができる。それがcut_setup()/cut_teardown()である。これらはテストが成功した場合も失敗した場合も呼ばれるためテスト中で割り当てたメモリを確実に開放する処理などに使うことができる。

test_new_stack()をcut_setup()/cut_teardown()を使って確実にメモリを開放するようにすると以下のようになる。

test/test-stack.c:

...
static Stack *stack;

void
cut_setup (void)
{
    stack = NULL;
}

void
cut_teardown (void)
{
    if (stack)
        stack_free(stack);
}

void
test_new_stack (void)
{
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}
...

同様に、test_push()でも、関数内のローカル変数stackを使わずにファイル中でstaticなstackを使用すれば確実にメモリを開放できる。

test/test-stack.c:

...
void
test_push (void)
{
    stack = stack_new();
    cut_assert_equal_int(0, stack_get_size(stack));
    stack_push(stack, 100);
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert(!stack_is_empty(stack));
}
...

cut_setup()/cut_teardown()を使用したtest/test-stack.c全体は以下のようになる。

test/test-stack.c:

#include <cutter.h>
#include <stack.h>

void test_new_stack (void);
void test_push (void);

static Stack *stack;

void
cut_setup (void)
{
    stack = NULL;
}

void
cut_teardown (void)
{
    if (stack)
        stack_free(stack);
}

void
test_new_stack (void)
{
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}

void
test_push (void)
{
    stack = stack_new();
    cut_assert_equal_int(0, stack_get_size(stack));
    stack_push(stack, 100);
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert(!stack_is_empty(stack));
}

この変更の後でもテストが変更前と同じ結果を返すことを確認する。

[stack]% test/run-test.sh
.F

1) Failure: test_push
<1 == stack_get_size(stack)>
expected: <1>
 but was: <0>
test/test-stack.c:35: test_push()

Finished in 0.000084 seconds

2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
50% passed

stack_new()/stack_free()の実装

それでは、stack_new()でメモリを割り当て、stack_free()で開放する処理を実装する。

まず、src/stack.hにstack_free()を宣言する。

src/stack.h:

...
void   stack_free     (Stack *stack);
...

続いて、src/stack.cにStackを定義する。Stackはスタックのサイズを保存するフィールドを含む。

src/stack.c:

...
struct _Stack {
    int size;
};
...

stack_new()でStackのためのメモリを割り当て、stack_free()で開放する。

src/stack.c:

...
Stack *
stack_new (void)
{
    Stack *stack;

    stack = malloc(sizeof(Stack));
    if (!stack)
        return NULL;

    stack->size = 0;
    return stack;
}

void
stack_free (Stack *stack)
{
    free(stack);
}
...

この変更の後でもテストが変更前と同じ結果を返すことを確認する。

[stack]% test/run-test.sh
.F

1) Failure: test_push
<1 == stack_get_size(stack)>
expected: <1>
 but was: <0>
test/test-stack.c:35: test_push()

Finished in 0.000113 seconds

2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
50% passed

stack_push()の本実装

Stackにスタックサイズを持つことができるようになったので、これを使用してテストをパスするようにstack_push()/stack_get_size()を実装する。

src/stack.c:

...
int
stack_get_size (Stack *stack)
{
    return stack->size;
}

void
stack_push (Stack *stack, int value)
{
    stack->size++;
}

pushする毎にスタックサイズを増やし、そのサイズを返すようにした。これで今まで失敗していたstack_get_size()のテストがパスするはずである。

[stack]% test/run-test.sh
.F

1) Failure: test_push
expected: <!stack_is_empty(stack)> is not FALSE/NULL
test/test-stack.c:36: test_push()

Finished in 0.000113 seconds

2 test(s), 3 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
50% passed

期待通りstack_get_size()のテストはパスしたがその後のtest/test-stack.cの36行目、stack_is_empty()で失敗している。

test/test-stack.c:36:

cut_assert(!stack_is_empty(stack));

スタックにpushしたら空ではなくなるはずである。


stack_is_empty()の本実装

スタックが空なのはスタックサイズが0のときである。よって、stack_is_empty()の実装は以下のようになる。

src/stack.c:

...
int
stack_is_empty (Stack *stack)
{
    return stack->size == 0;
}
...

テストを実行し、すべてのテストにパスすることを確認する。

% test/run-test.sh
..

Finished in 0.000036 seconds

2 test(s), 4 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

pushのテストもパスし、既存のスタックを作った直後の場合のテストもパスしたままである。すべてのテストがパスしたため、結果表示も緑に戻った。これで安心してpopの実装に進むことができる。

popの実装

pushが実装できたので、次はpushで入れたデータを取り出すpopを実装する。

popのテスト

popをすると最後にpushした値が順番に返ってくる。また、popする毎にスタックサイズが減り、最後は空になる。これをテストにすると以下のようになる。

test/test-stack.c:

...
void test_pop (void);
...
void
test_pop (void)
{
    stack = stack_new();

    stack_push(stack, 10);
    stack_push(stack, 20);
    stack_push(stack, 30);

    cut_assert_equal_int(3, stack_get_size(stack));
    cut_assert_equal_int(30, stack_pop(stack));
    cut_assert_equal_int(2, stack_get_size(stack));
    cut_assert_equal_int(20, stack_pop(stack));
    cut_assert_equal_int(1, stack_get_size(stack));

    stack_push(stack, 40);
    cut_assert_equal_int(2, stack_get_size(stack));
    cut_assert_equal_int(40, stack_pop(stack));
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert_equal_int(10, stack_pop(stack));
    cut_assert_equal_int(0, stack_get_size(stack));
    cut_assert(stack_is_empty(stack));
}

テストを走らせる。

[stack]% test/run-test.sh
..cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_pop

stack_pop()を定義していないためエラーが発生している。エラーメッセージの前に「.」が二つ出ているので既存のテストはパスしていることが確認できる。

注: Cygwin環境ではエラーは発生しない?


stack_pop()の実装

まず、src/stack.hにstack_pop()の宣言を追加する。

src/stack.h:

...
int    stack_pop      (Stack *stack);
...

つづいて、src/stack.cにstack_pop()の実装を追加する。

src/stack.c:

...
int
stack_pop (Stack *stack)
{
    return 30;
}

ここで30を返すようにしているのは最初のstack_pop()では30を返すことが期待されているからである。

test/test-stack.c:50:

cut_assert_equal_int(30, stack_pop(stack));

テストを実行し、popのテストもエラーが発生せずに実行されることを確認する。

[stack]% test/run-test.sh
..F

1) Failure: test_pop
<2 == stack_get_size(stack)>
expected: <2>
 but was: <3>
test/test-stack.c:51: test_pop()

Finished in 0.000307 seconds

3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
66.6667% passed

popのテストが実行された。しかし、現在のstack_pop()ではスタックサイズを変更していないため、popした後のスタックサイズを確認しているtest/test-stack.cの50行目のstack_get_size()で失敗している。

test/test-stack.c:51:

cut_assert_equal_int(2, stack_get_size(stack));

データ領域の確保

テストが実行されることが確認できたのでテストにパスするようにstack_pop()を実装する。

後でpopで取り出すために、pushされたデータを保存しておく必要がある。Stackに保存されたデータを示す場所を用意し、stack_push()/stack_pop()で動的に必要な領域を割り当てる。

まず、Stackに保存されたデータを示す場所を用意し、stack_new()で初期化、stack_free()で開放する。

src/stack.c:

...
struct _Stack {
    int size;
    int *data;
};

Stack *
stack_new (void)
{
    ...
    stack->data = NULL;
    ...
}

void
stack_free (Stack *stack)
{
    free(stack->data);
    free(stack);
}
...

この時点では外部向けの処理の内容は変わっていないはずなので、テストを実行して変更前と同じように失敗することを確認する。

[stack]% test/run-test.sh
..F

1) Failure: test_pop
<2 == stack_get_size(stack)>
expected: <2>
 but was: <3>
test/test-stack.c:51: test_pop()

Finished in 0.000097 seconds

3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
66.6667% passed

stack_pop()の本実装

保存したデータを示す場所が用意できたのでstack_push()/stack_pop()でそこに必要な分だけ領域を割り当て、データを保存する。

src/stack.c:

...
void
stack_push (Stack *stack, int value)
{
    int *new_data;

    stack->size++;
    new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);
    if (!new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return;
    }
    stack->data = new_data;

    stack->data[stack->size - 1] = value;
}

int
stack_pop (Stack *stack)
{
    int value;
    int *new_data;

    stack->size--;
    value = stack->data[stack->size];

    new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);
    if (stack->size > 0 && !new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return value;
    }
    stack->data = new_data;

    return value;
}

テストを実行し、popのテストがパスすることを確認する。

[stack]% test/run-test.sh
...

Finished in 0.000076 seconds

3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

重複の排除

stack_push()/stack_pop()の実装では動的なメモリ割り当て部分、メモリ割り当て失敗時のエラー処理部分に重複があった。一般的にコード中に重複があることは、メンテナンス性の面などの理由で悪いこととされている。

ここでは、既存の動作を変更せずに重複している悪い部分を修正する。既存の動作が変わっていないことはテストを実行することで確認することができる。

メモリ割り当て部分の重複の除去

まず、以下のメモリ割り当て部分の重複を除去する。

src/stack.c:

new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);

この部分はstack_realloc()として切り出す。

src/stack.c:

...
static int *
stack_realloc (Stack *stack)
{
    return realloc(stack->data, sizeof(*stack->data) * stack->size);
}

void
stack_push (Stack *stack, int value)
{
    ...
    new_data = stack_realloc(stack);
    ...
}

int
stack_pop (Stack *stack)
{
    ...
    new_data = stack_realloc(stack);
    ...
}

この変更の後でも以前と同じ挙動をしているかを確かめる。

[stack]% test/run-test.sh
...

Finished in 0.000078 seconds

3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

結果が緑なので次へ進める。


エラー処理部分の重複の除去

次に、以下のメモリ割り当て失敗時のエラー処理部分の重複を除去する。

src/stack.c:

...
void
stack_push (Stack *stack, int value)
{
    ...
    new_data = stack_realloc(stack);
    if (!new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return;
    }
    ...
}

int
stack_pop (Stack *stack)
{
    ...
    new_data = stack_realloc(stack);
    if (stack->size > 0 && !new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return value;
    }
    ...
}

これらのエラー処理をstack_realloc()の中に移動し、stack_realloc()は割り当てたメモリを返すのではなく、新しくメモリを割り当てることに成功したかどうかを返すことにする。

src/stack.c:

...
static int
stack_realloc (Stack *stack)
{
    int *new_data;

    new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);
    if (stack->size > 0 && !new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return FALSE;
    }
    stack->data = new_data;

    return TRUE;
}

void
stack_push (Stack *stack, int value)
{
    stack->size++;
    if (!stack_realloc(stack))
        return;
    stack->data[stack->size - 1] = value;
}

int
stack_pop (Stack *stack)
{
    int value;

    stack->size--;
    value = stack->data[stack->size];
    stack_realloc(stack);
    return value;
}

この変更の後でも以前と同じ挙動をしているかを確かめる。

[stack]% test/run-test.sh
...

Finished in 0.000076 seconds

3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s)
100% passed

既存の動作を変更することなく、プログラム中の重複部分を取り除き、プログラムを改良したことを確認できた。

まとめ

本稿では小さなスタックの実装を例にしてGNUビルドシステムを用いたビルド環境の構築方法・Cutterを用いたテストの作成方法・テストのあるプログラムでのプログラムの改良方法を示した。

メリット

GNUビルドシステムを用いることにより、ビルド環境の差異を吸収することが比較的容易になる。これはプログラムの移植性を向上させることにつながる。

Cutterを用いることにより、簡単にテストが書ける。既存のC言語用テスティングフレームワークではテストを定義するために独自のマクロを用いたり、テストの定義とテストの登録を別々に行う必要があるなどテスト以外にも書かなければいけないことが多い。Cutterはこの点を改善し、テスト定義のための独自のマクロを提供せず、通常どおりに関数を定義するだけでテストを定義できるようにした。明示的にテストを定義する必要もない。

本稿ではcut_assert()とcut_assert_equal_int()しか使用しなかったが、cut_assert_equal_string()など期待値と実際の値を比較するための方法を多数用意している。これにより、テストプログラムのための比較方法を定義しなければいけない機会が減り、より簡潔にテストプログラムを書けるようになる。

また、Cutterのテスト結果出力は必要のない情報はなるべく表示せず、必要な情報はできるだけ多く提供する。これは必要な情報が埋もれてしまうのを防ぎ、プログラムの修正を支援する。また、C言語ではよくある異常終了時には、バックトレースの出力を試み、プログラム修正のためのより多くの情報を提供する。

既存の機能を変更せずにプログラムの内部構造を改良することはメンテナンス性を向上させるのに非常に役立つ。自動化されたテストを作成することにより、既存の機能が変更されていないことを容易に確認できる。

また、新規に機能を追加する場合でも、自動化されたテストがあれば、既存の機能を壊すことなく機能を追加していることを確認できる。自動化テストを用意することはメンテナンス面でも、新機能開発面でも品質の高いプログラムを作成する上で有用である。


スタックのテスト

最終的なテストは以下の通りである。

test/test-stack.c

#include <cutter.h>
#include <stack.h>

void test_new_stack (void);
void test_push (void);
void test_pop (void);

static Stack *stack;

void
cut_setup (void)
{
    stack = NULL;
}

void
cut_teardown (void)
{
    if (stack)
        stack_free(stack);
}

void
test_new_stack (void)
{
    stack = stack_new();
    cut_assert(stack_is_empty(stack));
}

void
test_push (void)
{
    stack = stack_new();
    cut_assert_equal_int(0, stack_get_size(stack));
    stack_push(stack, 100);
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert(!stack_is_empty(stack));
}

void
test_pop (void)
{
    stack = stack_new();

    stack_push(stack, 10);
    stack_push(stack, 20);
    stack_push(stack, 30);

    cut_assert_equal_int(3, stack_get_size(stack));
    cut_assert_equal_int(30, stack_pop(stack));
    cut_assert_equal_int(2, stack_get_size(stack));
    cut_assert_equal_int(20, stack_pop(stack));
    cut_assert_equal_int(1, stack_get_size(stack));

    stack_push(stack, 40);
    cut_assert_equal_int(2, stack_get_size(stack));
    cut_assert_equal_int(40, stack_pop(stack));
    cut_assert_equal_int(1, stack_get_size(stack));
    cut_assert_equal_int(10, stack_pop(stack));
    cut_assert_equal_int(0, stack_get_size(stack));
    cut_assert(stack_is_empty(stack));
}

スタックの実装

最終的なプログラムは以下の通りである。このスタックは素朴な実装であるため、エラーの通知方法やパフォーマンスのチューニングなどの課題が残っているが、テストが示している通りの基本的な機能は実装されている。

src/stack.c:

#include <stdlib.h>
#include "stack.h"

#define TRUE 1
#define FALSE 0

struct _Stack {
    int size;
    int *data;
};

Stack *
stack_new (void)
{
    Stack *stack;

    stack = malloc(sizeof(Stack));
    if (!stack)
        return NULL;

    stack->size = 0;
    stack->data = NULL;
    return stack;
}

void
stack_free (Stack *stack)
{
    free(stack->data);
    free(stack);
}

int
stack_is_empty (Stack *stack)
{
    return stack->size == 0;
}

int
stack_get_size (Stack *stack)
{
    return stack->size;
}

static int
stack_realloc (Stack *stack)
{
    int *new_data;

    new_data = realloc(stack->data, sizeof(*stack->data) * stack->size);
    if (stack->size > 0 && !new_data) {
        free(stack->data);
        stack->data = NULL;
        stack->size = 0;
        return FALSE;
    }
    stack->data = new_data;

    return TRUE;
}

void
stack_push (Stack *stack, int value)
{
    stack->size++;
    if (!stack_realloc(stack))
        return;
    stack->data[stack->size - 1] = value;
}

int
stack_pop (Stack *stack)
{
    int value;

    stack->size--;
    value = stack->data[stack->size];
    stack_realloc(stack);
    return value;
}

Cutterがある場合だけテストをサポート

ここで作成したtest/test-stack.cはCutterがない場合はビルドに失敗する。つまり、makeが失敗する。開発者であればテストを実行するのが当然なので、Cutterがない場合は失敗しても問題はない。むしろ、問題に気づきやすいのでそうである方がよいと言える。

しかし、ライブラリとしてスタックを使いたいユーザにはCutterがない場合でもビルドが正常に終了できた方がよい。そのようなユーザは開発者がテストしたリリース版のライブラリを使用していると考えられるからである。

以下はCutterがない場合でもビルドできるようにする方法である。

まず、configure.acのAC_CHECK_CUTERの部分を以下のように変更し、Cutterが提供するm4(cutter.m4)がない場合でもautogen.sh(より詳しくいうとaclocal)が動くようにする。(autogen.shを実行するのが開発者のみであれば、この設定は必要ない。その場合はAC_CHECK_CUTTERの定義がないためにaclocalが失敗する。)

configure.ac:

...
m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"])
...

ここでac_cv_use_cutterという変数名を使っているのは、AC_CHECK_CUTTERが同じ名前の変数を使っているからである。この変数はCutterの検出が失敗した場合にも"no"になるので、cutter.m4がない場合(autogen.shを実行した環境にCutterがない場合)は常にCutterを検出できなかった状態となる。

次に、Cutterの検出に失敗したという情報をMakefile.am中で利用するために、AC_CHECK_CUTTERの後ろでMakefile.am中で使える条件を設定する。

configure.ac:

...
m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"])
AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"])
...

後は、WITH_CUTTERが真の場合だけtest/test-stack.cをビルドし、test/run-test.shを実行すればよい。

test/Makefile.am:

if WITH_CUTTER
TESTS = run-test.sh
TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)"

noinst_LTLIBRARIES = test_stack.la
endif
...

以上の変更を加えたconfigure.acとtest/Makefile.amの全体は以下のとおりである。

configure.ac:

AC_PREREQ(2.59)

AC_INIT(stack, 0.0.1, you@example.com)
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_HEADER([src/config.h])

AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION)

AC_PROG_LIBTOOL

m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"])
AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"])

m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE])

AC_CONFIG_FILES([Makefile
                 src/Makefile
                 test/Makefile])

AC_OUTPUT

test/Makefile.am:

if WITH_CUTTER
TESTS = run-test.sh
TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)"

noinst_LTLIBRARIES = test_stack.la
endif

INCLUDES = -I$(top_srcdir)/src
LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la

AM_CFLAGS = $(CUTTER_CFLAGS)

LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

test_stack_la_SOURCES = test-stack.c

echo-cutter:
	@echo $(CUTTER)

関連項目

  • xUnit: Cutterも属するassertXXXといった方法で結果を確認しながらテストを書いていくテストの書き方をサポートするライブラリのこと。テスティングフレームワークとも呼ぶ。様々な言語で実装されている。

    • SUnit (Smalltalk)

    • JUnit (Java)

    • Test::Unit (Ruby)

    • PyUnit (Pytnon)

    • ...

  • エクストリーム・プログラミング(Extreme Programming, XP):品質の高いプログラムを開発するための方法を集めたプログラミング方法。テストの作成も重要視している。

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-event-loop.xml0000644000175000017500000010037311525703001024463 0ustar koukou ]> 抽象化されたイベントループ 3 Cutterライブラリ 抽象化されたイベントループ GCutterで使うイベントループをカスタマイズするための抽象化されたイベントループAPI。 概要 #define GCUT_EVENT_LOOP_ERROR GCutEventLoop; GCutEventLoopClass; GQuark gcut_event_loop_error_quark (void); void gcut_event_loop_run (GCutEventLoop *loop); gboolean gcut_event_loop_iterate (GCutEventLoop *loop, gboolean may_block); void gcut_event_loop_quit (GCutEventLoop *loop); guint gcut_event_loop_watch_io (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); guint gcut_event_loop_watch_child (GCutEventLoop *loop, GPid pid, GChildWatchFunc function, gpointer data); guint gcut_event_loop_watch_child_full (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); guint gcut_event_loop_add_timeout (GCutEventLoop *loop, gdouble interval_in_seconds, GSourceFunc function, gpointer data); guint gcut_event_loop_add_timeout_full (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); guint gcut_event_loop_add_idle (GCutEventLoop *loop, GSourceFunc function, gpointer data); guint gcut_event_loop_add_idle_full (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); gboolean gcut_event_loop_remove (GCutEventLoop *loop, guint tag); オブジェクト階層 GObject +----GCutEventLoop 説明 GCutEventLoopはイベントループをカプセル化します。イベントループはGCutProcessで使われています。GCutProcessはデフォルトではGLibのデフォルトGMainContextを使います。 ふつうはカスタムGCutEventLoopは必要ありません。必要になるのは特別な場合だけです。例えば、イベントループのバックエンドにGLibのGMainLoopではなく、libevのイベントループに使っている場合です。 GCutterはGLibのGMainContextとGMainLoop用のGCutEventLoopであるGCutGLibEventLoopを提供します。 詳細 GCUT_EVENT_LOOP_ERROR GCUT_EVENT_LOOP_ERROR #define GCUT_EVENT_LOOP_ERROR (gcut_event_loop_error_quark()) GCutEventLoop GCutEventLoop typedef struct _GCutEventLoop GCutEventLoop; GCutEventLoopClass GCutEventLoopClass typedef struct { GObjectClass parent_class; void (*run) (GCutEventLoop *loop); gboolean (*iterate) (GCutEventLoop *loop, gboolean may_block); void (*quit) (GCutEventLoop *loop); guint (*watch_io) (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); guint (*watch_child_full) (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); guint (*add_timeout_full) (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); guint (*add_idle_full) (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); gboolean (*remove) (GCutEventLoop *loop, guint tag); } GCutEventLoopClass; gcut_event_loop_error_quark () gcut_event_loop_error_quark GQuark gcut_event_loop_error_quark (void); 戻り値 : gcut_event_loop_run () gcut_event_loop_run void gcut_event_loop_run (GCutEventLoop *loop); gcut_event_loop_quit()が呼ばれるまでイベントループを回します。 loop : GCutEventLoop 1.1.6から gcut_event_loop_iterate () gcut_event_loop_iterate gboolean gcut_event_loop_iterate (GCutEventLoop *loop, gboolean may_block); イベントループを1回だけ回します。もし、イベントがなくmay_blockTRUEなら、イベントがくるまで待ちつづけます。may_blockFALSEなら、イベントがくるのを待ちません。 loop : GCutEventLoop may_block : 呼び出しがブロックするかどうか。 戻り値 :イベントを処理したらTRUE 1.1.6から gcut_event_loop_quit () gcut_event_loop_quit void gcut_event_loop_quit (GCutEventLoop *loop); 実行中のloopを止めます。 loop : GCutEventLoop 1.1.6から gcut_event_loop_watch_io () gcut_event_loop_watch_io guint gcut_event_loop_watch_io (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); channelをデフォルトの優先度でloopに追加します。channelconditionイベントが発生したらfunctionが呼ばれます。 loop : GCutEventLoop channel : GIOChannel condition : 監視する状態。 function : 呼び出される関数 data : functionに渡されるデータ 戻り値 :イベントID。 1.1.6から gcut_event_loop_watch_child () gcut_event_loop_watch_child guint gcut_event_loop_watch_child (GCutEventLoop *loop, GPid pid, GChildWatchFunc function, gpointer data); pidの子プロセスが終了した時に呼ばれるfunctionをデフォルトの優先度でloopに追加します。 loop : GCutEventLoop pid : 監視するプロセスのID function : 呼び出される関数 data : functionに渡されるデータ 戻り値 :イベントID。 1.1.6から gcut_event_loop_watch_child_full () gcut_event_loop_watch_child_full guint gcut_event_loop_watch_child_full (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); pidの子プロセスが終了した時に呼ばれるfunctionをデフォルトの優先度でloopに追加します。 loop : GCutEventLoop priority : このイベントの優先度。 pid : 監視するプロセスのID function : 呼び出される関数 data : functionに渡されるデータ notify : このイベントが削除された時に呼ばれる関数またはNULL 戻り値 :イベントID。 1.1.6から gcut_event_loop_add_timeout () gcut_event_loop_add_timeout guint gcut_event_loop_add_timeout (GCutEventLoop *loop, gdouble interval_in_seconds, GSourceFunc function, gpointer data); 一定間隔で呼び出されるfunctionをデフォルト優先度で追加します。 loop : GCutEventLoop interval_in_seconds : functionを呼び出す感覚。単位は秒。 function : 呼び出される関数 data : functionに渡されるデータ 戻り値 :イベントID。 1.1.6から gcut_event_loop_add_timeout_full () gcut_event_loop_add_timeout_full guint gcut_event_loop_add_timeout_full (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); 定期的に呼び出される関数を優先度priorityで追加します。 loop : GCutEventLoop priority : このイベントの優先度。 interval_in_seconds : functionを呼び出す感覚。単位は秒。 function : 呼び出される関数 data : functionに渡されるデータ notify : このイベントが削除された時に呼ばれる関数またはNULL 戻り値 :イベントID。 1.1.6から gcut_event_loop_add_idle () gcut_event_loop_add_idle guint gcut_event_loop_add_idle (GCutEventLoop *loop, GSourceFunc function, gpointer data); デフォルト優先度より高い優先度がない場合に呼び出される関数functionを追加します。 loop : GCutEventLoop function : 呼び出される関数 data : functionに渡されるデータ 戻り値 :イベントID。 1.1.6から gcut_event_loop_add_idle_full () gcut_event_loop_add_idle_full guint gcut_event_loop_add_idle_full (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); 優先度priorityより高い優先度のイベントがない場合に呼び出される関数functionを追加します。 loop : GCutEventLoop priority : このイベントの優先度。 function : 呼び出される関数 data : functionに渡されるデータ notify : このイベントが削除された時に呼ばれる関数またはNULL 戻り値 :イベントID。 1.1.6から gcut_event_loop_remove () gcut_event_loop_remove gboolean gcut_event_loop_remove (GCutEventLoop *loop, guint tag); IDがtagのイベントを削除します。 loop : GCutEventLoop tag : 削除するソースのID。 戻り値 :ソースが見つかって削除されたらTRUE 1.1.6から cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-dynamic-data.xml0000644000175000017500000000165511525702777024754 0ustar koukou ]> GCutDynamicData 3 Cutterライブラリ GCutDynamicData 概要 説明 詳細 cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-6.html0000644000175000017500000002734611525703040023357 0ustar koukou 1.0.6での新しいシンボル一覧

1.0.6での新しいシンボル一覧

C

cut_assert_equal_size, cut_assert_equal_size ()
cut_keep_message, cut_keep_message ()
cut_pop_backtrace, cut_pop_backtrace ()
cut_push_backtrace, cut_push_backtrace ()
CUT_RELATIVE_PATH, CUT_RELATIVE_PATH
cut_return, cut_return ()
cut_setup, cut_setup ()
cut_set_message, cut_set_message ()
cut_set_message_va_list, cut_set_message_va_list ()
cut_shutdown, cut_shutdown ()
cut_startup, cut_startup ()
cut_take_replace, cut_take_replace ()
cut_teardown, cut_teardown ()

G

GCutEgg::error, "error"シグナル
GCutEgg::error-received, "error-received"シグナル
GCutEgg::output-received, "output-received"シグナル
GCutEgg::reaped, "reaped"シグナル
GCutEggError, enum GCutEggError
GCutEnumError, enum GCutEnumError
GCutInspectFunction, GCutInspectFunction ()
GCUTTER_ENABLED, GCUTTER_ENABLED
gcut_add_datum, gcut_add_datum ()
gcut_assert_equal_hash_table, gcut_assert_equal_hash_table ()
gcut_assert_equal_list, gcut_assert_equal_list ()
gcut_assert_equal_pid, gcut_assert_equal_pid ()
gcut_data_get_enum, gcut_data_get_enum ()
gcut_data_get_flags, gcut_data_get_flags ()
gcut_data_get_int, gcut_data_get_int ()
gcut_data_get_pointer, gcut_data_get_pointer ()
gcut_data_get_string, gcut_data_get_string ()
gcut_data_get_type, gcut_data_get_type ()
gcut_data_get_uint, gcut_data_get_uint ()
gcut_egg_close, gcut_egg_close ()
gcut_egg_get_env, gcut_egg_get_env ()
gcut_egg_get_error, gcut_egg_get_error ()
gcut_egg_get_flags, gcut_egg_get_flags ()
gcut_egg_get_forced_termination_wait_time, gcut_egg_get_forced_termination_wait_time ()
gcut_egg_get_input, gcut_egg_get_input ()
gcut_egg_get_output, gcut_egg_get_output ()
gcut_egg_get_pid, gcut_egg_get_pid ()
gcut_egg_hatch, gcut_egg_hatch ()
gcut_egg_kill, gcut_egg_kill ()
gcut_egg_new, gcut_egg_new ()
gcut_egg_new_argv, gcut_egg_new_argv ()
gcut_egg_new_array, gcut_egg_new_array ()
gcut_egg_new_strings, gcut_egg_new_strings ()
gcut_egg_new_va_list, gcut_egg_new_va_list ()
gcut_egg_set_env, gcut_egg_set_env ()
gcut_egg_set_flags, gcut_egg_set_flags ()
gcut_egg_set_forced_termination_wait_time, gcut_egg_set_forced_termination_wait_time ()
gcut_egg_wait, gcut_egg_wait ()
gcut_egg_write, gcut_egg_write ()
GCUT_ENUM_ERROR, GCUT_ENUM_ERROR
gcut_enum_parse, gcut_enum_parse ()
gcut_flags_get_all, gcut_flags_get_all ()
gcut_flags_parse, gcut_flags_parse ()
gcut_inspect_direct, gcut_inspect_direct ()
gcut_inspect_enum, gcut_inspect_enum ()
gcut_inspect_flags, gcut_inspect_flags ()
gcut_inspect_int, gcut_inspect_int ()
gcut_inspect_pointer, gcut_inspect_pointer ()
gcut_inspect_string, gcut_inspect_string ()
gcut_inspect_type, gcut_inspect_type ()
gcut_inspect_uint, gcut_inspect_uint ()
gcut_list_equal_int, gcut_list_equal_int ()
gcut_list_equal_string, gcut_list_equal_string ()
gcut_list_equal_uint, gcut_list_equal_uint ()
gcut_list_inspect_enum, gcut_list_inspect_enum ()
gcut_list_inspect_flags, gcut_list_inspect_flags ()
gcut_list_inspect_int, gcut_list_inspect_int ()
gcut_list_inspect_object, gcut_list_inspect_object ()
gcut_list_inspect_string, gcut_list_inspect_string ()
gcut_list_inspect_uint, gcut_list_inspect_uint ()
gcut_list_string_new_array, gcut_list_string_new_array ()
gcut_take_new_list_string_array, gcut_take_new_list_string_array ()
GDKCUTTER_PIXBUF_ENABLED, GDKCUTTER_PIXBUF_ENABLED
cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-mac-os-x.html0000644000175000017500000000637211525703040025316 0ustar koukou Mac OS Xへインストール

Mac OS Xへインストール

Mac OS Xへインストール — Mac OS XへのCutterのインストール方法

はじめに

Mac OS XへのCutterのインストール方法を説明します。

インストール

CutterのMacPortsが提供されているので、portでインストールできます。

まず、Cutter用のMacPortsを取得します。

% cd ~
% svn co https://cutter.svn.sourceforge.net/svnroot/cutter/macports/ cutter-macports

次に、取得したディレクトリを登録します。

% echo file://$HOME/cutter-macports | sudo sh -c "cat >> /opt/local/etc/macports/sources.conf"

portでインストールします。

% sudo port install cutter

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-1-2.html0000644000175000017500000000352511525703040023345 0ustar koukou 1.1.2での新しいシンボル一覧

1.1.2での新しいシンボル一覧

C

CUT_EXPORT, CUT_EXPORT
cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-others.html0000644000175000017500000001150511525703040025170 0ustar koukou その他のプラットフォームへインストール

その他のプラットフォームへインストール

その他のプラットフォームへインストール — その他のプラットフォームへのCutterのインストール方法

はじめに

Debian GNU/LinuxUbuntu LinuxFreeBSDSolarisCygwin 以外のプラットフォームへのインストール方法です。

GLibのインストール

Cutterを動かすためにはGLib 2.16以降が必要です。もし、システムで提供されているGLibが古い場合(例えばCentOS)は別途GLibをインストールし、それを利用することができます。

~/local/以下にGLibをインストールするとします。

% mkdir -p ~/src
% cd ~/src
% wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz
% tar xvfz glib-2.22.4.tar.gz
% cd glib-2.22.4
% ./configure --prefix=$HOME/local
% make
% make install

Cutterのインストール

CutterはGNUビルドツールを利用しているので、他のフリーソフトウェアと同じように以下でインストールできます。

% mkdir -p ~/src
% cd ~/src
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz
% tar xvzf cutter-1.1.7.tar.gz
% cd cutter-1.1.7
% ./configure
% make
% sudo make install

もし、~/local/以下にGLibをインストールした場合は以下のようになります。この例ではCutterも~/local/以下にインストールしています。

% mkdir -p ~/src
% cd ~/src
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz
% tar xvzf cutter-1.1.7.tar.gz
% cd cutter-1.1.7
% ./configure PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig LD_LIBRARY_PATH=$HOME/local/lib --prefix=$HOME/local
% make
% make install

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-GCutter.html0000644000175000017500000001237411525703040024466 0ustar koukou GCutter

GCutter

GCutter — GLibサポート付きのCutter。

概要

#define             GCUTTER_ENABLED

説明

GCutterはGLibベースのたくさんの便利な機能をCutterに追加します。より簡単にテストを書きたい場合はGCutterの使用を検討してください。

GCutterを使うことは簡単です。<cutter.h>の代わりに<gcutter.h>をinlcudeして、cutter.pcの代わりにgcutter.pcを使うだけです。

test-xxx.c:

1
2
-#include <cutter.h>
+#include <gcutter.h>

configure.ac:

1
2
-AC_CHECK_CUTTER
+AC_CHECK_GCUTTER

Makefile.am:

1
2
3
4
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(GCUTTER_CFLAGS)
+XXX_LIBS = $(GCUTTER_LIBS)

詳細

GCUTTER_ENABLED

#define GCUTTER_ENABLED 1

GCutterが有効なとき定義されます。

1.0.6から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertions-with-GLib-support.html0000644000175000017500000024650711525703040030550 0ustar koukou GLibサポート付きの検証

GLibサポート付きの検証

GLibサポート付きの検証 — GLibサポート付きであなたのプログラムが期待通りに動作しているかを検証します。

概要

void                gcut_assert_equal_type              (GType expected,
                                                         GType actual,
                                                         ...);
void                cut_assert_equal_g_type             (GType expected,
                                                         GType actual,
                                                         ...);
void                gcut_assert_equal_value             (GValue *expected,
                                                         GValue *actual,
                                                         ...);
void                cut_assert_equal_g_value            (GValue *expected,
                                                         GValue *actual,
                                                         ...);
void                gcut_assert_equal_list              (GList *expected,
                                                         GList *actual,
                                                         GEqualFunc equal_function,
                                                         GCutInspectFunction inspect_function,
                                                         gpointer inspect_user_data,
                                                         ...);
void                gcut_assert_equal_list_int          (GList *expected,
                                                         GList *actual,
                                                         ...);
void                cut_assert_equal_g_list_int         (GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_uint         (GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_string       (GList *expected,
                                                         GList *actual,
                                                         ...);
void                cut_assert_equal_g_list_string      (GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_object       (GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_object_custom
                                                        (GList *expected,
                                                         GList *actual,
                                                         GEqualFunc equal_function,
                                                         ...);
void                gcut_assert_equal_list_enum         (GType type,
                                                         GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_list_flags        (GType type,
                                                         GList *expected,
                                                         GList *actual,
                                                         ...);
void                gcut_assert_equal_hash_table        (GHashTable *expected,
                                                         GHashTable *actual,
                                                         GEqualFunc equal_function,
                                                         GCutInspectFunction key_inspect_function,
                                                         GCutInspectFunction value_inspect_function,
                                                         gpointer inspect_user_data,
                                                         ...);
void                gcut_assert_equal_hash_table_string_string
                                                        (GHashTable *expected,
                                                         GHashTable *actual,
                                                         ...);
void                gcut_assert_error                   (GError *error,
                                                         ...);
void                cut_assert_g_error                  (GError *error,
                                                         ...);
void                gcut_assert_equal_error             (GError *expected,
                                                         GError *actual,
                                                         ...);
void                gcut_assert_remove_path             (const gchar *path,
                                                         ...);
void                cut_assert_remove_path              (const gchar *path,
                                                         ...);
void                gcut_assert_equal_time_val          (GTimeVal expected,
                                                         GTimeVal actual,
                                                         ...);
void                gcut_assert_equal_enum              (GType enum_type,
                                                         gint expected,
                                                         gint actual,
                                                         ...);
void                gcut_assert_equal_flags             (GType flags_type,
                                                         guint expected,
                                                         guint actual,
                                                         ...);
void                gcut_assert_equal_object            (GObject *expected,
                                                         GObject *actual,
                                                         ...);
void                gcut_assert_equal_object_custom     (GObject *expected,
                                                         GObject *actual,
                                                         GEqualFunc equal_function,
                                                         ...);
void                gcut_assert_equal_int64             (gint64 expected,
                                                         gint64 actual,
                                                         ...);
void                gcut_assert_not_equal_int64         (gint64 expected,
                                                         gint64 actual,
                                                         ...);
void                gcut_assert_equal_uint64            (guint64 expected,
                                                         guint64 actual,
                                                         ...);
void                gcut_assert_not_equal_uint64        (guint64 expected,
                                                         guint64 actual,
                                                         ...);
void                gcut_assert_equal_pid               (GPid expected,
                                                         GPid actual,
                                                         ...);
void                gcut_assert_not_equal_pid           (GPid expected,
                                                         GPid actual,
                                                         ...);
void                gcut_assert_equal_string            (GString *expected,
                                                         GString *actual,
                                                         ...);

説明

詳細

gcut_assert_equal_type ()

void                gcut_assert_equal_type              (GType expected,
                                                         GType actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.3から


cut_assert_equal_g_type ()

void                cut_assert_equal_g_type             (GType expected,
                                                         GType actual,
                                                         ...);

Warning

cut_assert_equal_g_typeはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_type()を使ってください。

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

gcut_assert_equal_value ()

void                gcut_assert_equal_value             (GValue *expected,
                                                         GValue *actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.3から


cut_assert_equal_g_value ()

void                cut_assert_equal_g_value            (GValue *expected,
                                                         GValue *actual,
                                                         ...);

Warning

cut_assert_equal_g_valueはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_value()を使ってください。

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

gcut_assert_equal_list ()

void                gcut_assert_equal_list              (GList *expected,
                                                         GList *actual,
                                                         GEqualFunc equal_function,
                                                         GCutInspectFunction inspect_function,
                                                         gpointer inspect_user_data,
                                                         ...);

equal_function(expected, actual) == CUT_TRUEのときパスします。

expected :

期待するリスト。

actual :

実際のリスト。

equal_function :

expectedリストとactualリストの各要素を比較する関数。

inspect_function :

expectedリストとactualリスとの詳細を示す関数。

inspect_user_data :

inspect_functionに渡されるデータ。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.6から


gcut_assert_equal_list_int ()

void                gcut_assert_equal_list_int          (GList *expected,
                                                         GList *actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待する整数のリスト。

actual :

実際の整数のリスト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.3から


cut_assert_equal_g_list_int ()

void                cut_assert_equal_g_list_int         (GList *expected,
                                                         GList *actual,
                                                         ...);

Warning

cut_assert_equal_g_string_list_intはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_list_int()を使ってください。

expected == actualが成り立つときパスします。

expected :

期待する整数のリスト。

actual :

実際の整数のリスト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.8から


gcut_assert_equal_list_uint ()

void                gcut_assert_equal_list_uint         (GList *expected,
                                                         GList *actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待する符号無し整数のリスト。

actual :

実際の符号無し整数のリスト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.3から


gcut_assert_equal_list_string ()

void                gcut_assert_equal_list_string       (GList *expected,
                                                         GList *actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待する文字列のリスト。

actual :

実際の文字列のリスト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.3から


cut_assert_equal_g_list_string ()

void                cut_assert_equal_g_list_string      (GList *expected,
                                                         GList *actual,
                                                         ...);

Warning

cut_assert_equal_g_list_stringはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_equal_list_string()を使ってください。

expected == actualが成り立つときパスします。

expected :

期待する文字列のリスト。

actual :

実際の文字列のリスト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.8から


gcut_assert_equal_list_object ()

void                gcut_assert_equal_list_object       (GList *expected,
                                                         GList *actual,
                                                         ...);

expectedactualが同じGObject *を同じ順番で持っているときパスします。

expected :

期待するGObjectのリスト。

actual :

実際のGObjectのリスト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_equal_list_object_custom ()

void                gcut_assert_equal_list_object_custom
                                                        (GList *expected,
                                                         GList *actual,
                                                         GEqualFunc equal_function,
                                                         ...);

expectedactualが等しいGObjectを同じ順序で持っているときパスします。それぞれのGObjectの比較にはequal_functionを使います。

expected :

期待するGObjectのリスト。

actual :

実際のGObjectのリスト。

equal_function :

ふたつのGObjectを比較する関数。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_equal_list_enum ()

void                gcut_assert_equal_list_enum         (GType type,
                                                         GList *expected,
                                                         GList *actual,
                                                         ...);

expectedactualが同じ列挙値を同じ順序で持っているときパスします。

type :

GEnumの型。

expected :

期待する列挙値のリスト。

actual :

実際の列挙値のリスト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_equal_list_flags ()

void                gcut_assert_equal_list_flags        (GType type,
                                                         GList *expected,
                                                         GList *actual,
                                                         ...);

expectedactualが同じフラグ値を同じ順序で持っているときパスします。

type :

GFlagsの型。

expected :

期待するフラグ値のリスト。

actual :

実際のフラグ値のリスト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_equal_hash_table ()

void                gcut_assert_equal_hash_table        (GHashTable *expected,
                                                         GHashTable *actual,
                                                         GEqualFunc equal_function,
                                                         GCutInspectFunction key_inspect_function,
                                                         GCutInspectFunction value_inspect_function,
                                                         gpointer inspect_user_data,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待する文字列のGHashTable

actual :

実際の文字列のGHashTable

equal_function :

expectedハッシュテーブルとactualハッシュテーブルのそれぞれの値を比較する関数。

key_inspect_function :

expectedハッシュテーブルとactualハッシュテーブルのそれぞれのキーの詳細を示す関数。

value_inspect_function :

expectedハッシュテーブルとactualハッシュテーブルのそれぞれの値の詳細を示す関数。

inspect_user_data :

inspect_functionに渡されるデータ。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.6から


gcut_assert_equal_hash_table_string_string ()

void                gcut_assert_equal_hash_table_string_string
                                                        (GHashTable *expected,
                                                         GHashTable *actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待する文字列のGHashTable

actual :

実際の文字列のGHashTable

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.4から


gcut_assert_error ()

void                gcut_assert_error                   (GError *error,
                                                         ...);

error == NULLのときパスします。

error :

検証対象のGError

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.3から


cut_assert_g_error ()

void                cut_assert_g_error                  (GError *error,
                                                         ...);

Warning

cut_assert_g_errorはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_error()を使ってください。

error == NULLのときパスします。

error :

検証対象のGError

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0から


gcut_assert_equal_error ()

void                gcut_assert_equal_error             (GError *expected,
                                                         GError *actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_remove_path ()

void                gcut_assert_remove_path             (const gchar *path,
                                                         ...);

cut_utils_build_path(path, ...)の削除に成功するとパスします。

path :

削除するパスの最初の要素。

... :

パスの残りの要素。NULL終端。

1.0.3から


cut_assert_remove_path ()

void                cut_assert_remove_path              (const gchar *path,
                                                         ...);

Warning

cut_assert_remove_pathはバージョン1.0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_assert_remove_path()を使ってください。

cut_utils_build_path(path, ...)の削除に成功するとパスします。

path :

削除するパスの最初の要素。

... :

パスの残りの要素。NULL終端。

1.0.2から


gcut_assert_equal_time_val ()

void                gcut_assert_equal_time_val          (GTimeVal expected,
                                                         GTimeVal actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.4から


gcut_assert_equal_enum ()

void                gcut_assert_equal_enum              (GType enum_type,
                                                         gint expected,
                                                         gint actual,
                                                         ...);

expected == actualが成り立つときパスします。

例:

1
2
3
4
gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE,
                          GTK_DIR_LEFT, GTK_DIR_LEFT); -> パス
gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE,
                          GTK_DIR_DOWN, GTK_DIR_LEFT); -> 失敗

enum_type :

GEnumの型。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_equal_flags ()

void                gcut_assert_equal_flags             (GType flags_type,
                                                         guint expected,
                                                         guint actual,
                                                         ...);

expected == actualが成り立つときパスします。

例:

1
2
3
4
5
6
7
8
9
gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS,
                        GTK_DIALOG_DESTROY_MODAL |
                          GTK_DIALOG_DESTROY_WITH_PARENT,
                        GTK_DIALOG_DESTROY_MODAL |
                          GTK_DIALOG_DESTROY_WITH_PARENT); -> パス
gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS,
                        GTK_DIALOG_DESTROY_MODAL |
                          GTK_DIALOG_DESTROY_WITH_PARENT,
                        GTK_DIALOG_DESTROY_MODAL); -> 失敗

flags_type :

GFlagsの型。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_equal_object ()

void                gcut_assert_equal_object            (GObject *expected,
                                                         GObject *actual,
                                                         ...);

expected == actualのときパスします。等価条件を変更する必要がある場合はgcut_assert_equal_object_custom()見てください。

例:

1
2
3
4
gcut_assert_equal_object(object, object);   -> パス
gcut_assert_equal_object(object1, object2); -> 失敗
gcut_assert_equal_object(NULL, NULL);       -> パス
gcut_assert_equal_object(object1, NULL);    -> 失敗

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_equal_object_custom ()

void                gcut_assert_equal_object_custom     (GObject *expected,
                                                         GObject *actual,
                                                         GEqualFunc equal_function,
                                                         ...);

equal_function(expected, actual) == CUT_TRUEのときパスします。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
static gboolean
equal_name (gconstpointer data1, gconstpointer data2)
{
    return g_str_equal(my_object_get_name(MY_OBJECT(data1)),
                       my_object_get_name(MY_OBJECT(data2)));
}

gcut_assert_equal_object_custom(object, object, equal_name);   -> パス
gcut_assert_equal_object_custom(same_name_object1,
                                same_name_object2,
                                equal_name);                   -> パス
gcut_assert_equal_object_custom(different_name_object1,
                                different_name_object2,
                                equal_name);                   -> 失敗

expected :

期待値。

actual :

実測値。

equal_function :

ふたつのオブジェクトを比較する関数。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_equal_int64 ()

void                gcut_assert_equal_int64             (gint64 expected,
                                                         gint64 actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_not_equal_int64 ()

void                gcut_assert_not_equal_int64         (gint64 expected,
                                                         gint64 actual,
                                                         ...);

expected != actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.4から


gcut_assert_equal_uint64 ()

void                gcut_assert_equal_uint64            (guint64 expected,
                                                         guint64 actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


gcut_assert_not_equal_uint64 ()

void                gcut_assert_not_equal_uint64        (guint64 expected,
                                                         guint64 actual,
                                                         ...);

expected != actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.4から


gcut_assert_equal_pid ()

void                gcut_assert_equal_pid               (GPid expected,
                                                         GPid actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.6から


gcut_assert_not_equal_pid ()

void                gcut_assert_not_equal_pid           (GPid expected,
                                                         GPid actual,
                                                         ...);

expected != actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


gcut_assert_equal_string ()

void                gcut_assert_equal_string            (GString *expected,
                                                         GString *actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-public.xml0000644000175000017500000003126611525703004023660 0ustar koukou ]> gcut-public 3 Cutterライブラリ gcut-public 概要 GObject * cut_test_context_take_g_object (CutTestContext *context, GObject *object); const GError * cut_test_context_take_g_error (CutTestContext *context, GError *error); const GList * cut_test_context_take_g_list (CutTestContext *context, GList *list, CutDestroyFunction destroy); GHashTable * cut_test_context_take_g_hash_table (CutTestContext *context, GHashTable *hash_table); GString * cut_test_context_take_g_string (CutTestContext *context, GString *string); GString * gcut_utils_get_fixture_data (CutTestContext *context, const gchar **full_path, const gchar *path, ...); GString * gcut_utils_get_fixture_data_va_list (CutTestContext *context, const gchar **full_path, const gchar *path, va_list args); 説明 詳細 cut_test_context_take_g_object () cut_test_context_take_g_object GObject * cut_test_context_take_g_object (CutTestContext *context, GObject *object); context : object : 戻り値 : cut_test_context_take_g_error () cut_test_context_take_g_error const GError * cut_test_context_take_g_error (CutTestContext *context, GError *error); context : error : 戻り値 : cut_test_context_take_g_list () cut_test_context_take_g_list const GList * cut_test_context_take_g_list (CutTestContext *context, GList *list, CutDestroyFunction destroy); context : list : destroy : 戻り値 : cut_test_context_take_g_hash_table () cut_test_context_take_g_hash_table GHashTable * cut_test_context_take_g_hash_table (CutTestContext *context, GHashTable *hash_table); context : hash_table : 戻り値 : cut_test_context_take_g_string () cut_test_context_take_g_string GString * cut_test_context_take_g_string (CutTestContext *context, GString *string); context : string : 戻り値 : gcut_utils_get_fixture_data () gcut_utils_get_fixture_data GString * gcut_utils_get_fixture_data (CutTestContext *context, const gchar **full_path, const gchar *path, ...); context : full_path : path : ... : 戻り値 : gcut_utils_get_fixture_data_va_list () gcut_utils_get_fixture_data_va_list GString * gcut_utils_get_fixture_data_va_list (CutTestContext *context, const gchar **full_path, const gchar *path, va_list args); context : full_path : path : args : 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-glib-event-loop.xml0000644000175000017500000000701711525703001025377 0ustar koukou ]> GLib用イベントループ 3 Cutterライブラリ GLib用イベントループ GLibのGMainContextとGMainLoop用のイベントループAPI。 概要 GCutGLibEventLoop; GCutGLibEventLoopClass; GCutEventLoop * gcut_glib_event_loop_new (GMainContext *context); 説明 GCutGLibEventLoopはGLibのGMainContextとGMainLoop用のGCutEventLoop実装です。 詳細 GCutGLibEventLoop GCutGLibEventLoop typedef struct { GCutEventLoop object; } GCutGLibEventLoop; GCutGLibEventLoopClass GCutGLibEventLoopClass typedef struct { GCutEventLoopClass parent_class; } GCutGLibEventLoopClass; gcut_glib_event_loop_new () gcut_glib_event_loop_new GCutEventLoop * gcut_glib_event_loop_new (GMainContext *context); context用の新しいGCutEeventLoopを作ります。contextNULLならGLibのデフォルトGMainContextが使われます。 context : GMainContextまたはNULL 戻り値 :新しいGCutEventLoop 1.1.6から cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Convenience-test-data-API.html0000644000175000017500000014114111525703040027633 0ustar koukou 便利なテストデータ用API

便利なテストデータ用API

便利なテストデータ用API — 構造体定義なしでテストデータを作成するためのAPI。

概要

void                gcut_add_datum                      (const gchar *name,
                                                         const gchar *first_field_name,
                                                         ...);
gboolean            gcut_data_has_field                 (gconstpointer data,
                                                         const gchar *field_name);
#define             gcut_data_get_char                  (data,
                                                         field_name)
const gchar *       gcut_data_get_string                (gconstpointer data,
                                                         const gchar *field_name);
gint                gcut_data_get_int                   (gconstpointer data,
                                                         const gchar *field_name);
guint               gcut_data_get_uint                  (gconstpointer data,
                                                         const gchar *field_name);
#define             gcut_data_get_int64                 (data,
                                                         field_name)
#define             gcut_data_get_uint64                (data,
                                                         field_name)
#define             gcut_data_get_size                  (data,
                                                         field_name)
GType               gcut_data_get_type                  (gconstpointer data,
                                                         const gchar *field_name);
guint               gcut_data_get_flags                 (gconstpointer data,
                                                         const gchar *field_name);
gint                gcut_data_get_enum                  (gconstpointer data,
                                                         const gchar *field_name);
gconstpointer       gcut_data_get_pointer               (gconstpointer data,
                                                         const gchar *field_name);
gconstpointer       gcut_data_get_boxed                 (gconstpointer data,
                                                         const gchar *field_name);
#define             gcut_data_get_object                (data,
                                                         field_name)
#define             gcut_data_get_boolean               (data,
                                                         field_name)
#define             gcut_data_get_double                (data,
                                                         field_name)

説明

cut_add_data()で複雑なテストデータを使用したい場合はテストデータ用にデータ型を定義する必要があります。しかし、それは少し面倒です。gcut_add_datum()はデータ型を定義せずに複雑なテストデータを使用するためのAPIを提供します。このAPIは複雑なデータを扱うためにGTypeを使います。

詳細

gcut_add_datum ()

void                gcut_add_datum                      (const gchar *name,
                                                         const gchar *first_field_name,
                                                         ...);

データ駆動テスト用のデータを追加します。複雑なテストデータのために新しく構造体を定義する必要がないため、cut_add_data()よりも便利です。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <gcutter.h>

void data_translate (void);
void test_translate (gconstpointer data);

static const gchar*
translate (gint input)
{
   switch(input) {
   case 1:
       return "first";
   case 111:
       return "a hundred eleven";
   default:
       return "unsupported";
   }
}

void
data_translate(void)
{
    gcut_add_datum("simple data",
                   "translated", G_TYPE_STRING, "first",
                   "input", G_TYPE_INT, 1,
                   NULL);
    gcut_add_datum("complex data",
                   "translated", G_TYPE_STRING, "a hundred eleven",
                   "input", G_TYPE_INT, 111,
                   NULL);
}

void
test_translate(gconstpointer data)
{
    cut_assert_equal_string(gcut_data_get_string(data, "translated"),
                            gcut_data_get_int(data, "input"));
}

利用可能な型とその時の値は以下の通りです。

G_TYPE_CHAR

gcharの値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_CHAR, 'X',
               NULL);

G_TYPE_STRING

const gchar *value

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_STRING, "string value",
               NULL);

G_TYPE_INT

gintの値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_INT, 100,
               NULL);

G_TYPE_UINT

guintの値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_UINT, 100,
               NULL);

G_TYPE_INT64

gint64の値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_INT64, G_GINT64_CONSTANT(100),
               NULL);

G_TYPE_UINT64

guint64の値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_UINT64, G_GUINT64_CONSTANT(100),
               NULL);

G_TYPE_GTYPE

GTypeの値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_GTYPE, G_TYPE_OBJECT,
               NULL);

GFlagsの型

その型の値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", GTK_TYPE_WIDGET_FLAGS, GTK_TOPLEVEL | GTK_MAPPED,
               NULL);

GEnumの型

その型の値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", GTK_TYPE_WRAP_MODE, GTK_WRAP_NONE,
               NULL);

G_TYPE_POINTER

gconstpointer value, GDestroyNotify notify

valueが破棄されるときにnotifyが呼ばれます。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_POINTER, my_structure_new(...), my_structure_free,
               NULL);

注意: 値の所有者はCutterになります。解放しないで下さい。

GBoxedの型

その型の値。

例:

1
2
3
4
5
6
gcut_add_datum("data name",
               "field-name", G_TYPE_HASH_TABLE,
               gcut_hash_table_string_string_new("name1", "value1",
                                                 "name2", "value2",
                                                 NULL),
               NULL);

注意: 値の所有者はCutterになります。解放しないで下さい。

G_TYPE_BOOLEAN

gbooleanの値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_BOOLEAN, TRUE,
               NULL);

G_TYPE_DOUBLE

gdoubleの値。

例:

1
2
3
gcut_add_datum("data name",
               "field-name", G_TYPE_DOUBLE, 2.9,
               NULL);

name :

データの名前。

first_field_name :

最初のフィールド名。

... :

最初のフィールドの型と値。その後に、フィールドの名前と型と値の3つを任意の数だけ指定します。最後の引数はNULLにしてください。詳細は関数の説明文のところにあります。

1.0.6から


gcut_data_has_field ()

gboolean            gcut_data_has_field                 (gconstpointer data,
                                                         const gchar *field_name);

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

datafield_nameフィールドがあればTRUE、そうでなければFALSE

1.1.5から


gcut_data_get_char()

#define             gcut_data_get_char(data, field_name)

field_nameフィールドの値を文字として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.1.3から


gcut_data_get_string ()

const gchar *       gcut_data_get_string                (gconstpointer data,
                                                         const gchar *field_name);

field_nameフィールドの値を文字列として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.0.6から


gcut_data_get_int ()

gint                gcut_data_get_int                   (gconstpointer data,
                                                         const gchar *field_name);

field_nameフィールドの値を整数として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.0.6から


gcut_data_get_uint ()

guint               gcut_data_get_uint                  (gconstpointer data,
                                                         const gchar *field_name);

field_nameの値を符号なし整数として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.0.6から


gcut_data_get_int64()

#define             gcut_data_get_int64(data, field_name)

field_nameフィールドの値を64bit整数として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.1.3から


gcut_data_get_uint64()

#define             gcut_data_get_uint64(data, field_name)

field_nameの値を64bit符号なし整数として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.1.3から


gcut_data_get_size()

#define             gcut_data_get_size(data, field_name)

field_nameフィールドの値をsize_tとして取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.1.3から


gcut_data_get_type ()

GType               gcut_data_get_type                  (gconstpointer data,
                                                         const gchar *field_name);

field_nameフィールドの値をGTypeとして取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.0.6から


gcut_data_get_flags ()

guint               gcut_data_get_flags                 (gconstpointer data,
                                                         const gchar *field_name);

field_nameの値をGFlags型の符号なし整数として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.0.6から


gcut_data_get_enum ()

gint                gcut_data_get_enum                  (gconstpointer data,
                                                         const gchar *field_name);

field_nameフィールドの値をGEnum型の整数として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.0.6から


gcut_data_get_pointer ()

gconstpointer       gcut_data_get_pointer               (gconstpointer data,
                                                         const gchar *field_name);

field_nameの値をポインタとして取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.0.6から


gcut_data_get_boxed ()

gconstpointer       gcut_data_get_boxed                 (gconstpointer data,
                                                         const gchar *field_name);

field_nameフィールドの値をGBoxed型の値として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.0.7から


gcut_data_get_object()

#define             gcut_data_get_object(data, field_name)

field_nameフィールドの値をGObjectとして取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.1.1から


gcut_data_get_boolean()

#define             gcut_data_get_boolean(data, field_name)

field_nameの値を真偽値として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.1.3から


gcut_data_get_double()

#define             gcut_data_get_double(data, field_name)

field_nameの値を倍精度浮動小数点数として取得します。

data :

gcut_add_datum()で追加したデータ。

field_name :

フィールド名。

戻り値 :

field_nameに対応するフィールドの値。

1.1.3から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-Utilities-for-GHashTable.html0000644000175000017500000004725311525703040031561 0ustar koukou GHashTable用の検証ユーティリティ

GHashTable用の検証ユーティリティ

GHashTable用の検証ユーティリティ — GHashTableに関する検証をもっと簡単に書くためのユーティリティ。

概要

gboolean            gcut_hash_table_equal               (GHashTable *hash1,
                                                         GHashTable *hash2,
                                                         GEqualFunc equal_func);
gchar *             gcut_hash_table_inspect             (GHashTable *hash,
                                                         GCutInspectFunction key_inspect_func,
                                                         GCutInspectFunction value_inspect_func,
                                                         gpointer user_data);
gchar *             gcut_hash_table_inspect_sorted      (GHashTable *hash,
                                                         GCutInspectFunction key_inspect_func,
                                                         GCutInspectFunction value_inspect_func,
                                                         GCompareFunc key_compare_func,
                                                         gpointer user_data);
gboolean            gcut_hash_table_string_equal        (GHashTable *hash1,
                                                         GHashTable *hash2);
gchar *             gcut_hash_table_string_string_inspect
                                                        (GHashTable *hash);
GHashTable *        gcut_hash_table_string_string_copy  (GHashTable *hash);

説明

検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。

このユーティリティはGHashTableに関する検証の作成を補助します。

詳細

gcut_hash_table_equal ()

gboolean            gcut_hash_table_equal               (GHashTable *hash1,
                                                         GHashTable *hash2,
                                                         GEqualFunc equal_func);

ふたつのGHashTablehash1hash2を比較します。equal_funchash1hash2の同じキーに対応する値それぞれについて呼ばれます。

例:

1
TODO

hash1 :

比較するGHashTable

hash2 :

比較するGHashTable

equal_func :

ふたつの値を比較する関数。

戻り値 :

同じキーに対応するすべてのhash1hash2の値がequal_funcでTRUEとなったらTRUE、そうでない場合はFALSE。

1.0.5から


gcut_hash_table_inspect ()

gchar *             gcut_hash_table_inspect             (GHashTable *hash,
                                                         GCutInspectFunction key_inspect_func,
                                                         GCutInspectFunction value_inspect_func,
                                                         gpointer user_data);

hashの詳細を返します。hashの各キーはkey_inspect_funcで詳細化し、hashの各値はvalue_inspect_funcで詳細化します。返された文字列が必要なくなったときは開放してください。

例:

1
TODO

hash :

詳細を示すGHashTable

key_inspect_func :

各キーの詳細を示す関数。

value_inspect_func :

各値の詳細を示す関数。

user_data :

関数に渡すユーザ用データ。

戻り値 :

hashの詳細を示した文字列。

1.0.5から


gcut_hash_table_inspect_sorted ()

gchar *             gcut_hash_table_inspect_sorted      (GHashTable *hash,
                                                         GCutInspectFunction key_inspect_func,
                                                         GCutInspectFunction value_inspect_func,
                                                         GCompareFunc key_compare_func,
                                                         gpointer user_data);

key_compare_funcを使ってキーを基準にしてhashを並び替えて、その詳細を返します。hashの各キーはkey_inspect_funcで詳細化し、hashの各値はvalue_inspect_funcで詳細化します。返された文字列が必要なくなったときは開放してください。

key_compare_funcNULLならhashを並び替えません。これはgcut_hash_table_inspect()と同じ動作です。

例:

1
TODO

hash :

並び替えて詳細を示すGHashTable

key_inspect_func :

各キーの詳細を示す関数。

value_inspect_func :

各値の詳細を示す関数。

key_compare_func :

各キーを比較する関数。

user_data :

関数に渡すユーザ用データ。

戻り値 :

hashを並び替えて詳細を示した文字列。

1.0.9から


gcut_hash_table_string_equal ()

gboolean            gcut_hash_table_string_equal        (GHashTable *hash1,
                                                         GHashTable *hash2);

ふたつのGHashTablehash1hash2を比較します。hash1hash2は文字列のキーと文字列の値を持っていなければいけません。

hash1 :

比較するGHashTable

hash2 :

比較するGHashTable

戻り値 :

hash1hash2の同じキーの値それぞれすべてが同じ内容の文字列の場合TRUE、そうでない場合はFALSE。

1.0.5から


gcut_hash_table_string_string_inspect ()

gchar *             gcut_hash_table_string_string_inspect
                                                        (GHashTable *hash);

hashの詳細を返します。hashは文字列のキーと文字列の値を持っていなければいけません。返された文字列が必要なくなったときは開放してください。

hash :

詳細を示すGHashTable

戻り値 :

hashの詳細を示した文字列。

1.0.5から


gcut_hash_table_string_string_copy ()

GHashTable *        gcut_hash_table_string_string_copy  (GHashTable *hash);

hashを複製します。hashは文字列のキーと文字列の値を持っていなければいけません。返されたhashg_hash_table_unref()で開放しなければいけません。

hash :

複製するGHashTable

戻り値 :

複製されたGHashTable。必要がなくなったら開放しなければいけません。

1.0.8から

cutter-testing-framework-1.1.7/doc/reference/ja/html/gdkcutter-pixbuf.xml0000644000175000017500000000520611525703007024727 0ustar koukou ]> GdkCutter Pixbuf 3 Cutterライブラリ GdkCutter Pixbuf gdk-pixbufサポート付きのCutter。 概要 #define GDKCUTTER_PIXBUF_ENABLED 説明 GdkCutter Pixbufはgdk-pixbufベースのたくさんの便利な機能をCutterに追加します。画像のテストを書きたい場合はGdkCutter Pixbufの使用を検討してください。 GdkCutter Pixbufを使うことは簡単です。<cutter.h>または<gcutter.h>の代わりに<gdk-cutter-pixbuf.h>をincludeし、cutter.pcまたはgcutter.pcの代わりにgdkcutter-pixbuf.pcを使うだけです。 test-xxx.c: -#include <cutter.h> +#include <gdkcutter-pixbuf.h> configure.ac: -AC_CHECK_CUTTER +AC_CHECK_GDKCUTTER_PIXBUF Makefile.am: -XXX_CFLAGS = $(CUTTER_CFLAGS) -XXX_LIBS = $(CUTTER_LIBS) +XXX_CFLAGS = $(GDKCUTTER_PIXBUF_CFLAGS) +XXX_LIBS = $(GDKCUTTER_PIXBUF_LIBS) 詳細 GDKCUTTER_PIXBUF_ENABLED GDKCUTTER_PIXBUF_ENABLED #define GDKCUTTER_PIXBUF_ENABLED 1 GdkCutter Pixbufが有効なとき定義されます。1.0.6から 参考 gdk-pixbufサポート付きの検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-list.xml0000644000175000017500000011525611525703003023356 0ustar koukou ]> GList用の検証ユーティリティ 3 Cutterライブラリ GList用の検証ユーティリティ GListに関する検証をもっと簡単に書くためのユーティリティ。 概要 gboolean gcut_list_equal (const GList *list1, const GList *list2, GEqualFunc equal_func); gchar * gcut_list_inspect (const GList *list, GCutInspectFunction inspect_func, gpointer user_data); gboolean gcut_list_equal_int (const GList *list1, const GList *list2); gchar * gcut_list_inspect_int (const GList *list); gboolean gcut_list_equal_uint (const GList *list1, const GList *list2); gchar * gcut_list_inspect_uint (const GList *list); gboolean gcut_list_equal_string (const GList *list1, const GList *list2); gchar * gcut_list_inspect_string (const GList *list); gchar * gcut_list_inspect_object (const GList *list); gchar * gcut_list_inspect_enum (GType type, const GList *list); gchar * gcut_list_inspect_flags (GType type, const GList *list); #define gcut_list_int_equal (list1, list2) #define gcut_list_int_inspect (list) #define gcut_list_uint_equal (list1, list2) #define gcut_list_uint_inspect (list) #define gcut_list_string_equal (list1, list2) #define gcut_list_string_inspect (list) #define gcut_list_object_inspect (list) #define gcut_list_enum_inspect (list, type) #define gcut_list_flags_inspect (list, type) 説明 検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。 このユーティリティはGListに関する検証の作成を補助します。 詳細 gcut_list_equal () gcut_list_equal gboolean gcut_list_equal (const GList *list1, const GList *list2, GEqualFunc equal_func); ふたつのGListlist1list2を比較します。equal_funclist1list2の対応する値それぞれに対して呼ばれます。 例: TODO list1 : 比較するGList list2 : 比較するGList equal_func : ふたつの値を比較する関数。 戻り値 :list1list2のすべての対応する値がequal_funcでTRUEの場合はTRUE、そうでない場合はFALSE。 1.0.5から gcut_list_inspect () gcut_list_inspect gchar * gcut_list_inspect (const GList *list, GCutInspectFunction inspect_func, gpointer user_data); listの詳細を返します。listのそれぞれの値はinspect_funcで詳細化されます。返された文字列が必要なくなったときは開放してください。 例: TODO list : 詳細を示すGList inspect_func : 各値の詳細を示す関数。 user_data : 関数に渡すユーザ用データ。 戻り値 :listの詳細を示した文字列。 1.0.5から gcut_list_equal_int () gcut_list_equal_int gboolean gcut_list_equal_int (const GList *list1, const GList *list2); ふたつのGListlist1list2を比較します。list1list2gintGListでなければいけません。 list1 : 比較するgintGList list2 : 比較するgintGList 戻り値 :list1list2の対応するすべての値が同じ場合はTRUE、そうでない場合はFALSE。 1.0.6から gcut_list_inspect_int () gcut_list_inspect_int gchar * gcut_list_inspect_int (const GList *list); listの詳細を返します。listgintGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示すgintGList 戻り値 :listの詳細を示した文字列。 1.0.6から gcut_list_equal_uint () gcut_list_equal_uint gboolean gcut_list_equal_uint (const GList *list1, const GList *list2); ふたつのGListlist1list2を比較します。list1list2guintGListでなければいけません。 list1 : 比較するguintGList list2 : 比較するguintGList 戻り値 :list1list2のすべての対応する符号なし整数値が同じ値の場合はTRUE、そうでない場合はFALSE。 1.0.6から gcut_list_inspect_uint () gcut_list_inspect_uint gchar * gcut_list_inspect_uint (const GList *list); listの詳細を返します。listguintGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示すguintGListです。 戻り値 :listの詳細を示した文字列。 1.0.6から gcut_list_equal_string () gcut_list_equal_string gboolean gcut_list_equal_string (const GList *list1, const GList *list2); ふたつのGListlist1list2を比較します。list1list2は文字列のGListでなければいけません。 list1 : 比較する文字列のGList list2 : 比較する文字列のGList 戻り値 :list1list2のすべての対応する文字列が同じ内容の文字列の場合はTRUE、そうでない場合はFALSE。 1.0.6から gcut_list_inspect_string () gcut_list_inspect_string gchar * gcut_list_inspect_string (const GList *list); listの詳細を返します。listは文字列のGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示す文字列のGList 戻り値 :listの詳細を示した文字列。 1.0.6から gcut_list_inspect_object () gcut_list_inspect_object gchar * gcut_list_inspect_object (const GList *list); listの詳細を返します。listGObjectGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示すGObjectGList 戻り値 :listの詳細を示した文字列。 1.0.6から gcut_list_inspect_enum () gcut_list_inspect_enum gchar * gcut_list_inspect_enum (GType type, const GList *list); listの詳細を返します。listGEnumの列挙値のGListでなければいけません。返された文字列が必要なくなったときは開放してください。 type : GEnumの型。 list : 詳細を示す列挙値のGList 戻り値 :listの詳細を示した文字列。 1.0.6から gcut_list_inspect_flags () gcut_list_inspect_flags gchar * gcut_list_inspect_flags (GType type, const GList *list); listの詳細を返します。listGFlagsのフラグ値のGListでなければいけません。返された文字列が必要なくなったときは開放してください。 type : GFlagsの型。 list : 詳細を示すフラグ値のGList 戻り値 :listの詳細を示した文字列。 1.0.6から gcut_list_int_equal() gcut_list_int_equalgcut_list_int_equal #define gcut_list_int_equal(list1, list2) gcut_list_int_equalはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_equal_int()を使って下さい。 ふたつのGListlist1list2を比較します。list1list2gintGListでなければいけません。 list1 : 比較するgintGList list2 : 比較するgintGList 戻り値 :list1list2の対応するすべての値が同じ場合はTRUE、そうでない場合はFALSE。 1.0.5から gcut_list_int_inspect() gcut_list_int_inspectgcut_list_int_inspect #define gcut_list_int_inspect(list) gcut_list_int_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_int()を使ってください。 listの詳細を返します。listgintGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示すgintGList 戻り値 :listの詳細を示した文字列。 1.0.5から gcut_list_uint_equal() gcut_list_uint_equalgcut_list_uint_equal #define gcut_list_uint_equal(list1, list2) gcut_list_uint_equalはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_equal_uint()を使ってください。 ふたつのGListlist1list2を比較します。list1list2guintGListでなければいけません。 list1 : 比較するguintGList list2 : 比較するguintGList 戻り値 :list1list2のすべての対応する符号なし整数値が同じ値の場合はTRUE、そうでない場合はFALSE。 1.0.5から gcut_list_uint_inspect() gcut_list_uint_inspectgcut_list_uint_inspect #define gcut_list_uint_inspect(list) gcut_list_uint_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_uint()を使ってください。 listの詳細を返します。listguintGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示すguintGListです。 戻り値 :listの詳細を示した文字列。 1.0.5から gcut_list_string_equal() gcut_list_string_equalgcut_list_string_equal #define gcut_list_string_equal(list1, list2) gcut_list_string_equalはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_equal_string()を使ってください。 ふたつのGListlist1list2を比較します。list1list2は文字列のGListでなければいけません。 list1 : 比較する文字列のGList list2 : 比較する文字列のGList 戻り値 :list1list2のすべての対応する文字列が同じ内容の文字列の場合はTRUE、そうでない場合はFALSE。 1.0.5から gcut_list_string_inspect() gcut_list_string_inspectgcut_list_string_inspect #define gcut_list_string_inspect(list) gcut_list_string_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_string()を使ってください。 listの詳細を返します。listは文字列のGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示す文字列のGList 戻り値 :listの詳細を示した文字列。 1.0.5から gcut_list_object_inspect() gcut_list_object_inspectgcut_list_object_inspect #define gcut_list_object_inspect(list) gcut_list_object_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_object()を使ってください。 listの詳細を返します。listGObjectGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示すGObjectGList 戻り値 :listの詳細を示した文字列。 1.0.5から gcut_list_enum_inspect() gcut_list_enum_inspectgcut_list_enum_inspect #define gcut_list_enum_inspect(list, type) gcut_list_enum_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_enum()を使ってください。 listの詳細を返します。listGEnumの列挙値のGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示す列挙値のGList type : GEnumの型。 戻り値 :listの詳細を示した文字列。 1.0.5から gcut_list_flags_inspect() gcut_list_flags_inspectgcut_list_flags_inspect #define gcut_list_flags_inspect(list, type) gcut_list_flags_inspectはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないでください。代わりにgcut_list_inspect_flags()を使ってください。 listの詳細を返します。listGFlagsのフラグ値のGListでなければいけません。返された文字列が必要なくなったときは開放してください。 list : 詳細を示すフラグ値のGList type : GFlagsの型。 戻り値 :listの詳細を示した文字列。 1.0.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-Utilities-for-GString.html0000644000175000017500000001426611525703040031172 0ustar koukou GString用の検証ユーティリティ

GString用の検証ユーティリティ

GString用の検証ユーティリティ — GStringに関する検証をもっと簡単に書くためのユーティリティ。

概要

gboolean            gcut_string_equal                   (const GString *string1,
                                                         const GString *string2);
gchar *             gcut_string_inspect                 (const GString *string);

説明

検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。

このユーティリティはGStringに関する検証の作成を補助します。

詳細

gcut_string_equal ()

gboolean            gcut_string_equal                   (const GString *string1,
                                                         const GString *string2);

ふたつのGStringstring1string2を比較します。

string1 :

比較するGString

string2 :

比較するGString

戻り値 :

string1string2が同じ内容ならTRUE、そうでなればFALSE

1.1.5から


gcut_string_inspect ()

gchar *             gcut_string_inspect                 (const GString *string);

stringの詳細を返します。返された文字列が必要なくなったときは開放してください。

string :

GStringの値。

戻り値 :

stringの詳細を示した文字列。

1.1.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-object.xml0000644000175000017500000001715211525703003023645 0ustar koukou ]> GObject用の検証ユーティリティ 3 Cutterライブラリ GObject用の検証ユーティリティ GObjectに関する検証をもっと簡単に書くためのユーティリティ。 概要 gboolean gcut_object_equal (const GObject *object1, const GObject *object2, GEqualFunc equal_func); gchar * gcut_object_inspect (const GObject *object); gchar * gcut_object_inspect_custom (const GObject *object, GCutInspectFunction inspect_func, gpointer user_data); 説明 検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。 このユーティリティはGObjectに関する検証の作成を補助します。 詳細 gcut_object_equal () gcut_object_equal gboolean gcut_object_equal (const GObject *object1, const GObject *object2, GEqualFunc equal_func); ふたつのGObjectobject1object2equal_funcで比較します。equal_funcがNULLの場合はobject1object2は単にメモリの位置だけで比較します。 object1 : 比較するGObject object2 : 比較するGObject equal_func : ふたつのGObjectを比較する関数。NULLも可。 戻り値 :object1 == object2あるいはequal_func(object1, object2)がTRUEならTRUE、そうでない場合はFALSE。 1.0.5から gcut_object_inspect () gcut_object_inspect gchar * gcut_object_inspect (const GObject *object); objectのプロパティの詳細を返します。返された文字列が必要なくなったときは開放してください。 object : GObject 戻り値 :objectの詳細を示した文字列。 1.0.5から gcut_object_inspect_custom () gcut_object_inspect_custom gchar * gcut_object_inspect_custom (const GObject *object, GCutInspectFunction inspect_func, gpointer user_data); objectinspect_funcで詳細を示します。返された文字列が必要なくなったときは開放してください。 object : GObject inspect_func : objectの詳細を示す関数。 user_data : 関数に渡すユーザ用データ。 戻り値 :objectの詳細を示した文字列。 1.0.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Object-inspection-functions.html0000644000175000017500000012170211525703040030472 0ustar koukou オブジェクト調査関数

オブジェクト調査関数

オブジェクト調査関数 — デバッグ用にオブジェクトの詳細を示す関数です。

概要

void                gcut_inspect_direct                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_int                    (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_uint                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_int64                  (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_uint64                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_size                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_char                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_string                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_type                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_flags                  (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_enum                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_pointer                (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_boolean                (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);
void                gcut_inspect_double                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

説明

デバッグするために、テスト結果ではオブジェクトの詳細を示す必要があります。このセクションの関数はオブジェクトの詳細を示す場合に役立ちます。

詳細

gcut_inspect_direct ()

void                gcut_inspect_direct                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

符号なし整数としてdataの詳細を示します。

例:

1
gcut_inspect_direct(string, GUINT_TO_POINTER(100), NULL) -> "100"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.0.6から


gcut_inspect_int ()

void                gcut_inspect_int                    (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

整数としてdataの詳細を示します。

例:

1
2
gint int_value = 100;
gcut_inspect_int(string, &int_value, NULL) -> "100"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.0.6から


gcut_inspect_uint ()

void                gcut_inspect_uint                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

符号なし整数としてdataの詳細を示します。

例:

1
2
guint uint_value = 100;
gcut_inspect_uint(string, &uint_value, NULL) -> "100"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.0.6から


gcut_inspect_int64 ()

void                gcut_inspect_int64                  (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

64bit整数としてdataの詳細を示します。

例:

1
2
gint64 int64_value = 100;
gcut_inspect_int64(string, &int64_value, NULL) -> "100"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.1.3から


gcut_inspect_uint64 ()

void                gcut_inspect_uint64                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

64bit符号なし整数としてdataの詳細を示します。

例:

1
2
guint64 uint64_value = 100;
gcut_inspect_uint64(string, &uint64_value, NULL) -> "100"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.1.3から


gcut_inspect_size ()

void                gcut_inspect_size                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

符号なし整数としてdataの詳細を示します。

例:

1
2
gsize size_value = 100;
gcut_inspect_size(string, &size_value, NULL) -> "100"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.1.3から


gcut_inspect_char ()

void                gcut_inspect_char                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

文字としてdataの詳細を示します。

例:

1
2
3
gcut_inspect_char(string, 'C', NULL) -> "'C'"
gcut_inspect_char(string, '\0', NULL) -> "'\0'"
gcut_inspect_char(string, '\n', NULL) -> "'\n'"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.1.3から


gcut_inspect_string ()

void                gcut_inspect_string                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

文字列としてdataの詳細を示します。NULLでも構いません。

例:

1
gcut_inspect_string(string, "string", NULL) -> "\"string\""

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.0.6から


gcut_inspect_type ()

void                gcut_inspect_type                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

GTypeとしてdataの詳細を示します。

例:

1
gcut_inspect_type(string, GTK_TYPE_WINDOW, NULL) -> "<GtkWindow>"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.0.6から


gcut_inspect_flags ()

void                gcut_inspect_flags                  (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

GFlagsの型の値としてdataの詳細を示します。

例:

1
2
3
4
5
6
7
GType flags_type;
GtkWidgetFlags flags;

flags_type = GTK_TYPE_WIDGET_FLAGS;
flags = GTK_TOPLEVEL | GTK_VISIBLE;
gcut_inspect_flags(string, &flags, &flags_type);
-> #<GtkWidgetFlags: toplevel|visible (GTK_TOPLEVEL:0x10)|(GTK_VISIBLE:0x100)>

string :

出力の文字列。

data :

関心のある対象。

user_data :

GFlagsの型のポインタ。

1.0.6から


gcut_inspect_enum ()

void                gcut_inspect_enum                   (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

GEnumの型の値としてdataの詳細を示します。

例:

1
2
3
4
5
6
7
GType enum_type;
GtkWidgetHelpType value;

enum_type = GTK_TYPE_WIDGET_HELP_TYPE;
value = GTK_WIDGET_HELP_TOOLTIP;
gcut_inspect_enum(string, &value, &enum_type);
-> #<GtkWidgetHelpType: tooltip(GTK_WIDGET_HELP_TOOLTIP:0)>

string :

出力の文字列。

data :

関心のある対象。

user_data :

GEnumの型のポインタ。

1.0.6から


gcut_inspect_pointer ()

void                gcut_inspect_pointer                (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

ポインタとしてdataの詳細を示します。

例:

1
2
memory = malloc(1);
gcut_inspect_pointer(string, memory, NULL) -> "#<0xXXXXXXX>"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.0.6から


gcut_inspect_boolean ()

void                gcut_inspect_boolean                (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

真偽値としてdataの詳細を示します。

例:

1
2
3
4
5
6
gboolean boolean_value;

boolean_value = TRUE;
gcut_inspect_boolean(string, &boolean_value, NULL) -> "TRUE"
boolean_value = FALSE;
gcut_inspect_boolean(string, &boolean_value, NULL) -> "FALSE"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.1.3から


gcut_inspect_double ()

void                gcut_inspect_double                 (GString *string,
                                                         gconstpointer data,
                                                         gpointer user_data);

倍精度浮動小数点数としてdataの詳細を示します。

例:

1
2
gdouble double_value = 2.9;
gcut_inspect_double(string, &double_value, NULL) -> "2.9"

string :

出力の文字列。

data :

関心のある対象。

user_data :

ユーザが渡したデータ。(無視されます)

1.1.3から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-Utilities-for-GObject.html0000644000175000017500000002316111525703040031124 0ustar koukou GObject用の検証ユーティリティ

GObject用の検証ユーティリティ

GObject用の検証ユーティリティ — GObjectに関する検証をもっと簡単に書くためのユーティリティ。

概要

gboolean            gcut_object_equal                   (const GObject *object1,
                                                         const GObject *object2,
                                                         GEqualFunc equal_func);
gchar *             gcut_object_inspect                 (const GObject *object);
gchar *             gcut_object_inspect_custom          (const GObject *object,
                                                         GCutInspectFunction inspect_func,
                                                         gpointer user_data);

説明

検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。

このユーティリティはGObjectに関する検証の作成を補助します。

詳細

gcut_object_equal ()

gboolean            gcut_object_equal                   (const GObject *object1,
                                                         const GObject *object2,
                                                         GEqualFunc equal_func);

ふたつのGObjectobject1object2equal_funcで比較します。equal_funcがNULLの場合はobject1object2は単にメモリの位置だけで比較します。

object1 :

比較するGObject

object2 :

比較するGObject

equal_func :

ふたつのGObjectを比較する関数。NULLも可。

戻り値 :

object1 == object2あるいはequal_func(object1, object2)がTRUEならTRUE、そうでない場合はFALSE。

1.0.5から


gcut_object_inspect ()

gchar *             gcut_object_inspect                 (const GObject *object);

objectのプロパティの詳細を返します。返された文字列が必要なくなったときは開放してください。

object :

GObject

戻り値 :

objectの詳細を示した文字列。

1.0.5から


gcut_object_inspect_custom ()

gchar *             gcut_object_inspect_custom          (const GObject *object,
                                                         GCutInspectFunction inspect_func,
                                                         gpointer user_data);

objectinspect_funcで詳細を示します。返された文字列が必要なくなったときは開放してください。

object :

GObject

inspect_func :

objectの詳細を示す関数。

user_data :

関数に渡すユーザ用データ。

戻り値 :

objectの詳細を示した文字列。

1.0.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.1.3.xml0000644000175000017500000001010511525702763023756 0ustar koukou ]> C cut_assert_equal_char, macro in 検証 cut_assert_not_equal_char, macro in 検証 cut_take_convert, macro in テストユーティリティ D gcut_data_get_boolean, macro in 便利なテストデータ用API gcut_data_get_char, macro in 便利なテストデータ用API gcut_data_get_double, macro in 便利なテストデータ用API gcut_data_get_int64, macro in 便利なテストデータ用API gcut_data_get_size, macro in 便利なテストデータ用API gcut_data_get_uint64, macro in 便利なテストデータ用API I gcut_inspect_boolean, function in オブジェクト調査関数 gcut_inspect_char, function in オブジェクト調査関数 gcut_inspect_double, function in オブジェクト調査関数 gcut_inspect_int64, function in オブジェクト調査関数 gcut_inspect_size, function in オブジェクト調査関数 gcut_inspect_uint64, function in オブジェクト調査関数 T GCUT_TYPE_SIZE, macro in GLibサポート用の型 cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-assertions.xml0000644000175000017500000050032411525702770024432 0ustar koukou ]> 検証 3 Cutterライブラリ 検証 あなたのプログラムが期待通りに動作しているかを検証します。 概要 void cut_assert (cut_boolean expression, ...); void cut_assert_true (cut_boolean expression, ...); void cut_assert_false (cut_boolean expression, ...); void cut_assert_equal_boolean (cut_boolean expected, cut_boolean actual, ...); void cut_assert_not_equal_boolean (cut_boolean expected, cut_boolean actual, ...); void cut_assert_null (const void *expression, ...); void cut_assert_null_string (const char *string, ...); void cut_assert_not_null (const void *expression, ...); void cut_assert_equal_int (int expected, int actual, ...); void cut_assert_not_equal_int (int expected, int actual, ...); #define cut_assert_equal_int_least8 (expected, actual, ...) #define cut_assert_not_equal_int_least8 (expected, actual, ...) #define cut_assert_equal_int_least16 (expected, actual, ...) #define cut_assert_not_equal_int_least16 (expected, actual, ...) #define cut_assert_equal_int_least32 (expected, actual, ...) #define cut_assert_not_equal_int_least32 (expected, actual, ...) #define cut_assert_equal_int_least64 (expected, actual, ...) #define cut_assert_not_equal_int_least64 (expected, actual, ...) #define cut_assert_equal_int_fast8 (expected, actual, ...) #define cut_assert_not_equal_int_fast8 (expected, actual, ...) #define cut_assert_equal_int_fast16 (expected, actual, ...) #define cut_assert_not_equal_int_fast16 (expected, actual, ...) #define cut_assert_equal_int_fast32 (expected, actual, ...) #define cut_assert_not_equal_int_fast32 (expected, actual, ...) #define cut_assert_equal_int_fast64 (expected, actual, ...) #define cut_assert_not_equal_int_fast64 (expected, actual, ...) #define cut_assert_equal_intptr (expected, actual, ...) #define cut_assert_not_equal_intptr (expected, actual, ...) #define cut_assert_equal_intmax (expected, actual, ...) #define cut_assert_not_equal_intmax (expected, actual, ...) void cut_assert_equal_uint (unsigned int expected, unsigned int actual, ...); void cut_assert_not_equal_uint (unsigned int expected, unsigned int actual, ...); #define cut_assert_equal_uint_least8 (expected, actual, ...) #define cut_assert_not_equal_uint_least8 (expected, actual, ...) #define cut_assert_equal_uint_least16 (expected, actual, ...) #define cut_assert_not_equal_uint_least16 (expected, actual, ...) #define cut_assert_equal_uint_least32 (expected, actual, ...) #define cut_assert_not_equal_uint_least32 (expected, actual, ...) #define cut_assert_equal_uint_least64 (expected, actual, ...) #define cut_assert_not_equal_uint_least64 (expected, actual, ...) #define cut_assert_equal_uint_fast8 (expected, actual, ...) #define cut_assert_not_equal_uint_fast8 (expected, actual, ...) #define cut_assert_equal_uint_fast16 (expected, actual, ...) #define cut_assert_not_equal_uint_fast16 (expected, actual, ...) #define cut_assert_equal_uint_fast32 (expected, actual, ...) #define cut_assert_not_equal_uint_fast32 (expected, actual, ...) #define cut_assert_equal_uint_fast64 (expected, actual, ...) #define cut_assert_not_equal_uint_fast64 (expected, actual, ...) #define cut_assert_equal_uintptr (expected, actual, ...) #define cut_assert_not_equal_uintptr (expected, actual, ...) #define cut_assert_equal_uintmax (expected, actual, ...) #define cut_assert_not_equal_uintmax (expected, actual, ...) void cut_assert_equal_size (size_t expected, size_t actual, ...); void cut_assert_not_equal_size (size_t expected, size_t actual, ...); void cut_assert_equal_double (double expected, double error, double actual, ...); void cut_assert_not_equal_double (double expected, double error, double actual, ...); #define cut_assert_equal_char (expected, actual, ...) #define cut_assert_not_equal_char (expected, actual, ...) void cut_assert_equal_string (const char *expected, const char *actual, ...); void cut_assert_not_equal_string (const char *expected, const char *actual, ...); void cut_assert_equal_string_with_free (const char *expected, const char *actual, ...); void cut_assert_equal_string_or_null (const char *expected, const char *actual, ...); void cut_assert_equal_substring (const char *expected, const char *actual, size_t length, ...); void cut_assert_not_equal_substring (const char *expected, const char *actual, size_t length, ...); void cut_assert_equal_memory (const void *expected, size_t expected_size, const void *actual, size_t actual_size, ...); void cut_assert_not_equal_memory (const void *expected, size_t expected_size, const void *actual, size_t actual_size, ...); void cut_assert_equal_string_array (char **expected, char **actual, ...); void cut_assert_equal_string_array_with_free (char **expected, char **actual, ...); #define cut_assert_operator (lhs, operator, rhs, ...) #define cut_assert_operator_int (lhs, operator, rhs, ...) #define cut_assert_operator_uint (lhs, operator, rhs, ...) #define cut_assert_operator_size (lhs, operator, rhs, ...) #define cut_assert_operator_double (lhs, operator, rhs, ...) #define cut_assert_equal (function, expected, actual, ...) void cut_assert_errno (...); void cut_assert_file_exist (const char *path, ...); void cut_assert_path_exist (const char *path, ...); void cut_assert_exist_path (const char *path, ...); void cut_assert_path_not_exist (const char *path, ...); void cut_assert_not_exist_path (const char *path, ...); void cut_assert_match (const char *pattern, const char *actual, ...); void cut_assert_match_with_free (const char *pattern, const char *actual, ...); void cut_assert_equal_pointer (const void *expected, const void *actual, ...); void cut_assert_equal_fixture_data_string (const char *expected, const void *path, ...); #define cut_assert_equal_sockaddr (expected, actual, ...) #define cut_assert_equal_file_raw (expected, actual, ...) #define cut_assert_not_equal_file_raw (expected, actual, ...) void cut_error (const char *format, ...); void cut_error_errno (...); void cut_fail (const char *format, ...); void cut_pend (const char *format, ...); void cut_pending (const char *format, ...); void cut_notify (const char *format, ...); void cut_omit (const char *format, ...); void cut_return (void); 説明 あなたのプログラムが期待通りに動作しているかを検証するために、期待した値が得られていることを検証したい箇所でcut_assert_XXX()を使います。 例: cut_assert_equal_int(3, 1 + 2); 詳細 cut_assert () cut_assert void cut_assert (cut_boolean expression, ...); expressionが0でもNULLでもないとパスします。 例: char *string; string = malloc(16); cut_assert(string); MyObject *object; object = my_object_new(); cut_assert(object, cut_message("my_object_new() should not be failed")); expression : チェックする式。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_true () cut_assert_true void cut_assert_true (cut_boolean expression, ...); expressionCUT_TRUEのとき(0でもNULLでもないとき)パスします。 expression : チェックする式。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.9から cut_assert_false () cut_assert_false void cut_assert_false (cut_boolean expression, ...); expressionが0またはNULLのときパスします。 expression : チェックする式。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.9から cut_assert_equal_boolean () cut_assert_equal_boolean void cut_assert_equal_boolean (cut_boolean expected, cut_boolean actual, ...); expectedactualが両方ともCUT_TRUEの値か、両方ともCUT_FALSEの値のときパスします。 例: cut_assert_equal_boolean(CUT_TRUE, CUT_TRUE); -> パス cut_assert_equal_boolean(CUT_FALSE, CUT_FALSE); -> パス cut_assert_equal_boolean(CUT_TRUE, CUT_FALSE); -> 失敗 expected : 期待する真偽値。 actual : 実際の真偽値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_not_equal_boolean () cut_assert_not_equal_boolean void cut_assert_not_equal_boolean (cut_boolean expected, cut_boolean actual, ...); expectedCUT_TRUEの値だがactualCUT_FALSEの値のとき、または、expectedCUT_FALSEの値だがactualCUT_TRUEの値のときにパスします。 例: cut_assert_not_equal_boolean(CUT_TRUE, CUT_TRUE); -> 失敗 cut_assert_not_equal_boolean(CUT_FALSE, CUT_FALSE); -> 失敗 cut_assert_not_equal_boolean(CUT_TRUE, CUT_FALSE); -> パス expected : 期待する真偽値。 actual : 実際の真偽値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_null () cut_assert_null void cut_assert_null (const void *expression, ...); expressionNULLのときパスします。 expression : チェックする式。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_null_string () cut_assert_null_string void cut_assert_null_string (const char *string, ...); stringNULLのときパスします。 string : チェックする文字列。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.3から cut_assert_not_null () cut_assert_not_null void cut_assert_not_null (const void *expression, ...); expressionNULL以外のときパスします。 expression : チェックする式。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_equal_int () cut_assert_equal_int void cut_assert_equal_int (int expected, int actual, ...); expected == actualが成り立つときパスします。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_not_equal_int () cut_assert_not_equal_int void cut_assert_not_equal_int (int expected, int actual, ...); expected != actualが成り立つときパスします。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_equal_int_least8() cut_assert_equal_int_least8 #define cut_assert_equal_int_least8(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_int_least8() cut_assert_not_equal_int_least8 #define cut_assert_not_equal_int_least8(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_int_least16() cut_assert_equal_int_least16 #define cut_assert_equal_int_least16(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_int_least16() cut_assert_not_equal_int_least16 #define cut_assert_not_equal_int_least16(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_int_least32() cut_assert_equal_int_least32 #define cut_assert_equal_int_least32(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_int_least32() cut_assert_not_equal_int_least32 #define cut_assert_not_equal_int_least32(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_int_least64() cut_assert_equal_int_least64 #define cut_assert_equal_int_least64(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_int_least64() cut_assert_not_equal_int_least64 #define cut_assert_not_equal_int_least64(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_int_fast8() cut_assert_equal_int_fast8 #define cut_assert_equal_int_fast8(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_int_fast8() cut_assert_not_equal_int_fast8 #define cut_assert_not_equal_int_fast8(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_int_fast16() cut_assert_equal_int_fast16 #define cut_assert_equal_int_fast16(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_int_fast16() cut_assert_not_equal_int_fast16 #define cut_assert_not_equal_int_fast16(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_int_fast32() cut_assert_equal_int_fast32 #define cut_assert_equal_int_fast32(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_int_fast32() cut_assert_not_equal_int_fast32 #define cut_assert_not_equal_int_fast32(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_int_fast64() cut_assert_equal_int_fast64 #define cut_assert_equal_int_fast64(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_int_fast64() cut_assert_not_equal_int_fast64 #define cut_assert_not_equal_int_fast64(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_intptr() cut_assert_equal_intptr #define cut_assert_equal_intptr(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_intptr() cut_assert_not_equal_intptr #define cut_assert_not_equal_intptr(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_intmax() cut_assert_equal_intmax #define cut_assert_equal_intmax(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_intmax() cut_assert_not_equal_intmax #define cut_assert_not_equal_intmax(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する整数の値。 actual : 実際の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uint () cut_assert_equal_uint void cut_assert_equal_uint (unsigned int expected, unsigned int actual, ...); expected == actualが成り立つときパスします。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_not_equal_uint () cut_assert_not_equal_uint void cut_assert_not_equal_uint (unsigned int expected, unsigned int actual, ...); expected != actualが成り立つときパスします。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_equal_uint_least8() cut_assert_equal_uint_least8 #define cut_assert_equal_uint_least8(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uint_least8() cut_assert_not_equal_uint_least8 #define cut_assert_not_equal_uint_least8(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uint_least16() cut_assert_equal_uint_least16 #define cut_assert_equal_uint_least16(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uint_least16() cut_assert_not_equal_uint_least16 #define cut_assert_not_equal_uint_least16(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uint_least32() cut_assert_equal_uint_least32 #define cut_assert_equal_uint_least32(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uint_least32() cut_assert_not_equal_uint_least32 #define cut_assert_not_equal_uint_least32(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uint_least64() cut_assert_equal_uint_least64 #define cut_assert_equal_uint_least64(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uint_least64() cut_assert_not_equal_uint_least64 #define cut_assert_not_equal_uint_least64(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uint_fast8() cut_assert_equal_uint_fast8 #define cut_assert_equal_uint_fast8(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uint_fast8() cut_assert_not_equal_uint_fast8 #define cut_assert_not_equal_uint_fast8(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uint_fast16() cut_assert_equal_uint_fast16 #define cut_assert_equal_uint_fast16(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uint_fast16() cut_assert_not_equal_uint_fast16 #define cut_assert_not_equal_uint_fast16(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uint_fast32() cut_assert_equal_uint_fast32 #define cut_assert_equal_uint_fast32(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uint_fast32() cut_assert_not_equal_uint_fast32 #define cut_assert_not_equal_uint_fast32(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uint_fast64() cut_assert_equal_uint_fast64 #define cut_assert_equal_uint_fast64(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uint_fast64() cut_assert_not_equal_uint_fast64 #define cut_assert_not_equal_uint_fast64(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uintptr() cut_assert_equal_uintptr #define cut_assert_equal_uintptr(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uintptr() cut_assert_not_equal_uintptr #define cut_assert_not_equal_uintptr(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_uintmax() cut_assert_equal_uintmax #define cut_assert_equal_uintmax(expected, actual, ...) expected == actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_not_equal_uintmax() cut_assert_not_equal_uintmax #define cut_assert_not_equal_uintmax(expected, actual, ...) expected != actualが成り立つときパスします。 この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。 expected : 期待する符号無し整数の値。 actual : 実際の符号無し符号整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.0から cut_assert_equal_size () cut_assert_equal_size void cut_assert_equal_size (size_t expected, size_t actual, ...); expected == actualが成り立つときパスします。 expected : 期待するsize_tの値。 actual : 実際のsize_tの値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.6から cut_assert_not_equal_size () cut_assert_not_equal_size void cut_assert_not_equal_size (size_t expected, size_t actual, ...); expected != actualが成り立つときパスします。 expected : 期待するsize_tの値。 actual : 実際のsize_tの値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_equal_double () cut_assert_equal_double void cut_assert_equal_double (double expected, double error, double actual, ...); (expected - error) <= actual <= (expected + error)が成り立つときパスします。 expected : 期待する浮動小数点数。 error : 誤差範囲を示す浮動小数点数。 actual : 実際の浮動小数点数。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_not_equal_double () cut_assert_not_equal_double void cut_assert_not_equal_double (double expected, double error, double actual, ...); actual < (expected - error) && (expected + error) < actualが成り立つときパスします。 expected : 期待する浮動小数点数。 error : 誤差範囲を示す浮動小数点数。 actual : 実際の浮動小数点数。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_equal_char() cut_assert_equal_char #define cut_assert_equal_char(expected, actual, ...) expected == actualが成り立つときパスします。 例: cut_assert_equal_char('a', 'a'); -> パス cut_assert_equal_char('a', 'b'); -> 失敗 expected : 期待する文字。 actual : 実際の文字。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.3から cut_assert_not_equal_char() cut_assert_not_equal_char #define cut_assert_not_equal_char(expected, actual, ...) expected != actualが成り立つときパスします。 例: cut_assert_not_equal_char('a', 'b'); -> パス cut_assert_not_equal_char('a', 'a'); -> 失敗 expected : 期待する文字。 actual : 実際の文字。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.3から cut_assert_equal_string () cut_assert_equal_string void cut_assert_equal_string (const char *expected, const char *actual, ...); expectedactualがどちらともNULL、あるいはstrcmp(expected, actual) == 0が成り立つときにパスします。 例: cut_assert_equal_string("abc", "abc"); -> パス cut_assert_equal_string(NULL, NULL); -> パス cut_assert_equal_string("abc", "ABC"); -> 失敗 cut_assert_equal_string("abc", NULL); -> 失敗 cut_assert_equal_string(NULL, "abc"); -> 失敗 expected : 期待する文字列。 actual : 実際の文字列の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_not_equal_string () cut_assert_not_equal_string void cut_assert_not_equal_string (const char *expected, const char *actual, ...); expectedactualのどちらかがNULLのとき、または、strcmp(expected, actual) != 0のときパスします。 例: cut_assert_not_equal_string("abc", NULL); -> パス cut_assert_not_equal_string(NULL, "abc"); -> パス cut_assert_not_equal_string("abc", "ABC"); -> パス cut_assert_not_equal_string("abc", "abc"); -> 失敗 cut_assert_not_equal_string(NULL, NULL); -> 失敗 expected : 期待する文字列。 actual : 実際の文字列の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_equal_string_with_free () cut_assert_equal_string_with_free void cut_assert_equal_string_with_free (const char *expected, const char *actual, ...); expectedactualがどちらともNULL、あるいはstrcmp(expected, actual) == 0が成り立つときにパスします。 使用例はcut_assert_equal_string()を見てください。 expected : 期待する文字列。 actual : 実際の文字列の値。(チェック後に開放される) ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.3から cut_assert_equal_string_or_null () cut_assert_equal_string_or_null void cut_assert_equal_string_or_null (const char *expected, const char *actual, ...); cut_assert_equal_string_or_nullはバージョン0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_assert_equal_string()を使ってください。 expected : 期待する文字列。 actual : 実際の文字列の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_equal_substring () cut_assert_equal_substring void cut_assert_equal_substring (const char *expected, const char *actual, size_t length, ...); (1)expectedactualが両方ともNULLlength == 1が成り立つとき、または、(2) strncmp(expected, actual, length) == 0が成り立つときパスします。 例: cut_assert_equal_substring("abcdef", "abcDEF", 3); -> パス cut_assert_equal_substring(NULL, NULL, 0); -> パス cut_assert_equal_substring(NULL, NULL, 3); -> 失敗 cut_assert_equal_substring("abc", "ABC", 3); -> 失敗 cut_assert_equal_substring("abc", NULL, 3); -> 失敗 cut_assert_equal_substring(NULL, "abc", 3); -> 失敗 expected : 期待する文字列。 actual : 実際の文字列の値。 length : compared string length. ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_not_equal_substring () cut_assert_not_equal_substring void cut_assert_not_equal_substring (const char *expected, const char *actual, size_t length, ...); (1) expectedactualのどちらかがNULL、または、(2) strncmp(expected, actual, length) != 0が成り立つときパスします。 例: cut_assert_not_equal_substring("abc", "ABC", 3); -> パス cut_assert_not_equal_substring("abc", NULL, 3); -> パス cut_assert_not_equal_substring(NULL, "abc", 3); -> パス cut_assert_not_equal_substring("abcdef", "abcDEF", 3); -> 失敗 cut_assert_not_equal_substring(NULL, NULL, 0); -> 失敗 cut_assert_not_equal_substring(NULL, NULL, 3); -> 失敗 expected : 期待する文字列。 actual : 実際の文字列の値。 length : compared string length. ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_equal_memory () cut_assert_equal_memory void cut_assert_equal_memory (const void *expected, size_t expected_size, const void *actual, size_t actual_size, ...); expected_size == actual_sizeが成り立ち、かつ、memcmp(expected, actual, expected_size) == 0が成り立つときにパスします。 expected : 期待するデータ。 expected_size : expectedのサイズ。 actual : 実際のデータ。 actual_size : actualのサイズ。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_not_equal_memory () cut_assert_not_equal_memory void cut_assert_not_equal_memory (const void *expected, size_t expected_size, const void *actual, size_t actual_size, ...); expected_size != actual_sizeまたはmemcmp(expected, actual, expected_size) != 0が成り立つときパスします。 expected : 期待するデータ。 expected_size : expectedのサイズ。 actual : 実際のデータ。 actual_size : actualのサイズ。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.7から cut_assert_equal_string_array () cut_assert_equal_string_array void cut_assert_equal_string_array (char **expected, char **actual, ...); expectedactualがどちらともNULLではなく、どちらも同じ内容の文字列(strcmp() == 0)を持つときにパスします。 expected : 期待する文字列の配列。配列はNULL終端。 actual : 実際の文字列の配列。配列はNULL終端。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_equal_string_array_with_free () cut_assert_equal_string_array_with_free void cut_assert_equal_string_array_with_free (char **expected, char **actual, ...); expectedactualがどちらともNULLではなく、どちらも同じ内容の文字列(strcmp() == 0)を持つときにパスします。 expected : 期待する文字列の配列。配列はNULL終端。 actual : 実際の文字列の配列。配列はNULL終端。(チェック後に開放される) ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.9から cut_assert_operator() cut_assert_operator #define cut_assert_operator(lhs, operator, rhs, ...) (lhs operator rhs)が真のときにパスします。 例: cut_assert_operator(1, <, 2) -> (1 < 2); lhs : 左辺値。 operator : 二項演算子。 rhs : 右辺値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_operator_int() cut_assert_operator_int #define cut_assert_operator_int(lhs, operator, rhs, ...) (lhs operator rhs)が真のときにパスします。 例: cut_assert_operator_int(1, <, 2) -> (1 < 2); lhs : 左辺の整数の値。 operator : 二項演算子。 rhs : 右辺の整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_operator_uint() cut_assert_operator_uint #define cut_assert_operator_uint(lhs, operator, rhs, ...) (lhs operator rhs)が真のときにパスします。 例: cut_assert_operator_uint(1, <, 2) -> (1 < 2); lhs : 左辺の符号無し整数の値。 operator : 二項演算子。 rhs : 右辺の符号無し整数の値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から cut_assert_operator_size() cut_assert_operator_size #define cut_assert_operator_size(lhs, operator, rhs, ...) (lhs operator rhs)が真のときにパスします。 例: cut_assert_operator_size(1, <, 2) -> (1 < 2); lhs : 左辺のsize_tの値。 operator : 二項演算子。 rhs : 右辺のsize_tの値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から cut_assert_operator_double() cut_assert_operator_double #define cut_assert_operator_double(lhs, operator, rhs, ...) (lhs operator rhs)が真のときにパスします。 例: cut_assert_operator_double(1.1, <, 2.2) -> (1.1 < 2.2); lhs : 左辺の浮動小数点値。 operator : 二項演算子。 rhs : 右辺の浮動小数点値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から cut_assert_equal() cut_assert_equal #define cut_assert_equal(function, expected, actual, ...) function(expected, actual)がCUT_TRUEを返すときパスします。 例: cut_assert_equal(!strcmp, "abc", "abc"); -> パス function : actualexpectedを比較する関数。 expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 cut_assert_errno () cut_assert_errno void cut_assert_errno (...); errnoが0だとパスします。 例: count = write(stdout, buffer, strlen(buffer)); cut_assert_errno("Failed to write"); -> count != -1のときパス ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.8から cut_assert_file_exist () cut_assert_file_existcut_assert_file_exist void cut_assert_file_exist (const char *path, ...); cut_assert_file_existはバージョン1.0.2から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_assert_path_exist()を使ってください。 pathが存在するときにパスします。普通のファイルかもしれませんし、そうでないかもしれません。(例えばシンボリックリンクやディレクトリなど) 例: cut_assert_file_exist("/tmp"); -> 多くの環境ではパス cut_assert_file_exist("/non-existent"); -> 失敗 path : テストするパス。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 0.9から cut_assert_path_exist () cut_assert_path_existcut_assert_path_exist void cut_assert_path_exist (const char *path, ...); cut_assert_path_existはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_assert_exist_path()を使ってください。 pathが存在するときにパスします。普通のファイルかもしれませんし、そうでないかもしれません。(例えばシンボリックリンクやディレクトリなど) 例: cut_assert_path_exist("/tmp"); -> 多くの環境ではパス cut_assert_path_exist("/non-existent"); -> 失敗 path : テストするパス。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.2から cut_assert_exist_path () cut_assert_exist_path void cut_assert_exist_path (const char *path, ...); pathが存在するときにパスします。普通のファイルかもしれませんし、そうでないかもしれません。(例えばシンボリックリンクやディレクトリなど) 例: cut_assert_exist_path("/tmp"); -> 多くの環境ではパス cut_assert_exist_path("/non-existent"); -> 失敗 path : テストするパス。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.5から cut_assert_path_not_exist () cut_assert_path_not_existcut_assert_path_not_exist void cut_assert_path_not_exist (const char *path, ...); cut_assert_path_not_existはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_assert_not_exist_path()を使ってください。 pathが存在しないとパスします。 例: cut_assert_path_not_exist("/non-existent"); -> 多くの環境ではパス cut_assert_path_not_exist("/tmp"); -> 失敗 path : テストするパス。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.2から cut_assert_not_exist_path () cut_assert_not_exist_path void cut_assert_not_exist_path (const char *path, ...); pathが存在しないとパスします。 例: cut_assert_not_exist_path("/non-existent"); -> 多くの環境ではパス cut_assert_not_exist_path("/tmp"); -> 失敗 path : テストするパス。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.5から cut_assert_match () cut_assert_match void cut_assert_match (const char *pattern, const char *actual, ...); patternstringにマッチしたときパスします。 例: cut_assert_match("^abc", "abc"); -> パス cut_assert_match("^abc", " abc"); -> 失敗 pattern : 正規表現。 actual : マッチされる文字列。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0から cut_assert_match_with_free () cut_assert_match_with_free void cut_assert_match_with_free (const char *pattern, const char *actual, ...); patternstringにマッチしたときパスします。詳細は pattern : 正規表現。(文字列で指定) actual : マッチされる文字列。(チェック後に開放される) ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0から cut_assert_equal_pointer () cut_assert_equal_pointer void cut_assert_equal_pointer (const void *expected, const void *actual, ...); expected == actualが成り立つときパスします。 expected : 期待するポインタ。 actual : 実際のポインタ。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0から cut_assert_equal_fixture_data_string () cut_assert_equal_fixture_data_string void cut_assert_equal_fixture_data_string (const char *expected, const void *path, ...); expected == cut_get_fixture_data_string(path, ...)が成り立つときパスします。 expected : 期待する文字列。 path : フィクスチャデータのパスの最初の要素。 ... : パスの残りの要素。NULL終端。 1.0.2から cut_assert_equal_sockaddr() cut_assert_equal_sockaddr #define cut_assert_equal_sockaddr(expected, actual, ...) expected == actualが成り立つときパスします。 この検証はCUT_DISABLE_SOCKET_SUPPORTを定義すると無効にできます。 expected : 期待するソケットアドレス。 actual : 実際のソケットアドレス。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.1から cut_assert_equal_file_raw() cut_assert_equal_file_raw #define cut_assert_equal_file_raw(expected, actual, ...) expectedの内容とactual内容が等しいときパスします。 expected : パス。 actual : パス。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.4から cut_assert_not_equal_file_raw() cut_assert_not_equal_file_raw #define cut_assert_not_equal_file_raw(expected, actual, ...) expectedの内容とactual内容が異なるときパスします。 expected : パス。 actual : パス。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.1.4から cut_error () cut_error void cut_error (const char *format, ...); メッセージ付きでエラーを発生させます。 format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 cut_error_errno () cut_error_errno void cut_error_errno (...); 例: void setup (void) { mkdir("tmp", 0700); cut_error_errno("Failed to make tmp directory"); -> Error when tmp directory isn't made successfully. } ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.2から cut_fail () cut_fail void cut_fail (const char *format, ...); メッセージ付きでテストを失敗させます。 format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 cut_pend () cut_pend void cut_pend (const char *format, ...); メッセージ付きでこのテストが未解決であると印を付けます。テストはここで中断します。 format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 cut_pending () cut_pending void cut_pending (const char *format, ...); cut_pendingはバージョン0.4から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_pend()を使ってください。 メッセージ付きでこのテストが未解決であると印を付けます。テストはここで中断します。 format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 cut_notify () cut_notify void cut_notify (const char *format, ...); 通知用のメッセージを残します。テストは続行します。 format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 cut_omit () cut_omit void cut_omit (const char *format, ...); このテストを省略します。 例: if (version < 2.0) cut_omit("Require >= 2.0"); format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 0.8から cut_return () cut_return void cut_return (void); このテストを終了します。 例: static void sub_xxx (void) { some_assertions(); if (no_need_more_test) cut_return(); some_assertions(); } void test_xxx (void) { some_assertions(); cut_trace(sub_xxx()); some_assertions(); } 1.0.6から cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Available-features.html0000644000175000017500000001241511525703040026601 0ustar koukou 利用可能な機能一覧

利用可能な機能一覧

利用可能な機能一覧 — インストールされているCutterで利用可能な機能一覧。

説明

インストールされているCutterで利用可能な機能かどうかを確認するマクロがあります。

詳細

CUT_SUPPORT_GLIB

#define CUT_SUPPORT_GLIB 1

GLibサポートが利用可能であることを示します。つまり、<gcutter.h>を使えるということです。このマクロは常に定義されます。


CUT_SUPPORT_GDK_PIXBUF

#define CUT_SUPPORT_GDK_PIXBUF 1

GdkPixbufサポートが利用可能であることを示します。つまり、<gdkcutter-pixbuf.h>を使えるということです。


CUT_SUPPORT_GIO

#define CUT_SUPPORT_GIO 1

Shows GIO support is available.


CUT_SUPPORT_LIBSOUP

#define CUT_SUPPORT_LIBSOUP 1

Shows LibSoup support is available.


CUT_SUPPORT_C99_STDINT_TYPES

#define CUT_SUPPORT_C99_STDINT_TYPES 1

C99の整数型のサポートが利用可能であることを示します。つまり、C99の整数型を利用した検証を利用できるということです。例えば、cut_assert_equal_int_least8()がC99の整数型を利用した検証です。

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-hash-table.xml0000644000175000017500000004044511525703001024406 0ustar koukou ]> GHashTable用の検証ユーティリティ 3 Cutterライブラリ GHashTable用の検証ユーティリティ GHashTableに関する検証をもっと簡単に書くためのユーティリティ。 概要 gboolean gcut_hash_table_equal (GHashTable *hash1, GHashTable *hash2, GEqualFunc equal_func); gchar * gcut_hash_table_inspect (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, gpointer user_data); gchar * gcut_hash_table_inspect_sorted (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, GCompareFunc key_compare_func, gpointer user_data); gboolean gcut_hash_table_string_equal (GHashTable *hash1, GHashTable *hash2); gchar * gcut_hash_table_string_string_inspect (GHashTable *hash); GHashTable * gcut_hash_table_string_string_copy (GHashTable *hash); 説明 検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。 このユーティリティはGHashTableに関する検証の作成を補助します。 詳細 gcut_hash_table_equal () gcut_hash_table_equal gboolean gcut_hash_table_equal (GHashTable *hash1, GHashTable *hash2, GEqualFunc equal_func); ふたつのGHashTablehash1hash2を比較します。equal_funchash1hash2の同じキーに対応する値それぞれについて呼ばれます。 例: TODO hash1 : 比較するGHashTable hash2 : 比較するGHashTable equal_func : ふたつの値を比較する関数。 戻り値 :同じキーに対応するすべてのhash1hash2の値がequal_funcでTRUEとなったらTRUE、そうでない場合はFALSE。 1.0.5から gcut_hash_table_inspect () gcut_hash_table_inspect gchar * gcut_hash_table_inspect (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, gpointer user_data); hashの詳細を返します。hashの各キーはkey_inspect_funcで詳細化し、hashの各値はvalue_inspect_funcで詳細化します。返された文字列が必要なくなったときは開放してください。 例: TODO hash : 詳細を示すGHashTable key_inspect_func : 各キーの詳細を示す関数。 value_inspect_func : 各値の詳細を示す関数。 user_data : 関数に渡すユーザ用データ。 戻り値 :hashの詳細を示した文字列。 1.0.5から gcut_hash_table_inspect_sorted () gcut_hash_table_inspect_sorted gchar * gcut_hash_table_inspect_sorted (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, GCompareFunc key_compare_func, gpointer user_data); key_compare_funcを使ってキーを基準にしてhashを並び替えて、その詳細を返します。hashの各キーはkey_inspect_funcで詳細化し、hashの各値はvalue_inspect_funcで詳細化します。返された文字列が必要なくなったときは開放してください。 key_compare_funcNULLならhashを並び替えません。これはgcut_hash_table_inspect()と同じ動作です。 例: TODO hash : 並び替えて詳細を示すGHashTable key_inspect_func : 各キーの詳細を示す関数。 value_inspect_func : 各値の詳細を示す関数。 key_compare_func : 各キーを比較する関数。 user_data : 関数に渡すユーザ用データ。 戻り値 :hashを並び替えて詳細を示した文字列。 1.0.9から gcut_hash_table_string_equal () gcut_hash_table_string_equal gboolean gcut_hash_table_string_equal (GHashTable *hash1, GHashTable *hash2); ふたつのGHashTablehash1hash2を比較します。hash1hash2は文字列のキーと文字列の値を持っていなければいけません。 hash1 : 比較するGHashTable hash2 : 比較するGHashTable 戻り値 :hash1hash2の同じキーの値それぞれすべてが同じ内容の文字列の場合TRUE、そうでない場合はFALSE。 1.0.5から gcut_hash_table_string_string_inspect () gcut_hash_table_string_string_inspect gchar * gcut_hash_table_string_string_inspect (GHashTable *hash); hashの詳細を返します。hashは文字列のキーと文字列の値を持っていなければいけません。返された文字列が必要なくなったときは開放してください。 hash : 詳細を示すGHashTable 戻り値 :hashの詳細を示した文字列。 1.0.5から gcut_hash_table_string_string_copy () gcut_hash_table_string_string_copy GHashTable * gcut_hash_table_string_string_copy (GHashTable *hash); hashを複製します。hashは文字列のキーと文字列の値を持っていなければいけません。返されたhashg_hash_table_unref()で開放しなければいけません。 hash : 複製するGHashTable 戻り値 :複製されたGHashTable。必要がなくなったら開放しなければいけません。 1.0.8から cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-version.xml0000644000175000017500000001025411525702774023727 0ustar koukou ]> バージョン情報 3 Cutterライブラリ バージョン情報 Cutterのバージョンをチェックするためのマクロ 概要 #define CUTTER_VERSION_MAJOR #define CUTTER_VERSION_MINOR #define CUTTER_VERSION_MICRO #define CUTTER_VERSION_STRING #define CUTTER_CHECK_VERSION (major, minor, micro) 説明 Cutterはビルド時の設定で便利なようにバージョン情報を提供します。通常のテストではここで説明する機能は使わないでしょう。 詳細 CUTTER_VERSION_MAJOR CUTTER_VERSION_MAJOR #define CUTTER_VERSION_MAJOR 1 Cutterのメジャーバージョン。 CUTTER_VERSION_MINOR CUTTER_VERSION_MINOR #define CUTTER_VERSION_MINOR 1 Cutterのマイナーバージョン。 CUTTER_VERSION_MICRO CUTTER_VERSION_MICRO #define CUTTER_VERSION_MICRO 7 Cutterのマイクロバージョン。 CUTTER_VERSION_STRING CUTTER_VERSION_STRING #define CUTTER_VERSION_STRING "1.1.7" "#{メジャーバージョン}.#{マイナーバージョン}.#{マイクロバージョン}"という書式のCutterのバージョン文字列。 CUTTER_CHECK_VERSION() CUTTER_CHECK_VERSION #define CUTTER_CHECK_VERSION(major, minor, micro) Cutterのバージョンをチェックします。Cutterのヘッダファイルのバージョンと同じかそれより新しいバージョンを渡すと真を返します。 major : メジャーバージョン番号。 minor : マイナーバージョン番号。 micro : マイクロバージョン番号。 1.0.7から cutter-testing-framework-1.1.7/doc/reference/ja/html/cppcut-assertions.xml0000644000175000017500000000550311525702766025141 0ustar koukou ]> C++サポート付きの検証 3 Cutterライブラリ C++サポート付きの検証 C++サポート付きであなたのプログラムが期待通りに動作しているかを検証します。 概要 #define cppcut_assert_equal (expected, actual, ...) 説明 詳細 cppcut_assert_equal() cppcut_assert_equal #define cppcut_assert_equal(expected, actual, ...) この検証はテンプレートを利用しています。任意のオブジェクトのリファレンスをexpectedactualに渡せます。 expected == actualが成り立つときパスします。 例: cppcut_assert_equal(3, 1 + 2); cppcut_assert_equal(3, 1 + 2, cppcut_message("easy expression")); cppcut_assert_equal(3, 1 + 2, cppcut_message() << "easy expression")); expected : 期待値。 actual : 実測値。 ... : 追加メッセージ(省略可能)。詳細はcppcut_message()を見てください。 1.0.9から cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Cutter.html0000644000175000017500000013477511525703040024371 0ustar koukou Cutter

Cutter

Cutter — C言語・C++言語用単体テストフレームワーク

概要

void                setup                               (void);
void                cut_setup                           (void);
void                teardown                            (void);
void                cut_teardown                        (void);
void                cut_startup                         (void);
void                cut_shutdown                        (void);
#define             cut_add_data                        (first_data_name,
                                                         ...)
#define             cut_add_data_backward_compatibility (context,
                                                         ...)
#define             cut_set_attributes                  (first_attribute_name,
                                                         ...)
#define             cut_get_current_test_context
#define             cut_set_current_test_context        (test_context)
void                cut_set_message                     (const char *format,
                                                         ...);
void                cut_set_message_va_list             (const char *format,
                                                         va_list args);
void                cut_keep_message                    (void);
void                cut_message                         (const char *format,
                                                         ...);
#define             CUT_EXPORT

説明

Cutterは以下のような特徴をもったC言語・C++言語用の単体テストフレームワークです。

  • 簡単に使えます。Cutterではテストプログラム中にCUTTER_DEFINE_TEST_STARTやCUTTER_DEFINE_TEST_ENDなどといった不思議なマクロを使う必要がありません。通常のプログラムと同じようにテストプログラムを書くことができます。ただし、プログラムが期待した通り動作していることを検証するためにcut_assert_XXX()を使う必要があります。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <cutter.h>
    #include "my-stack.h"
    
    void
    test_my_stack (void)
    {
        MyStack *stack = my_stack_new();
    
        cut_assert_not_null(stack);
        cut_assert(my_stack_is_empty(stack));
        cut_assert_equal_int(0, my_stack_get_size(stack));
    
        my_stack_push(stack, 10);
        cut_assert(!my_stack_is_empty(stack));
        cut_assert_equal_int(1, my_stack_get_size(stack));
    
        my_stack_push(stack, 20);
        cut_assert_equal_int(2, my_stack_get_size(stack));
    
        cut_assert_equal(20, my_stack_pop(stack));
        cut_assert(!my_stack_is_empty(stack));
        cut_assert_equal_int(1, my_stack_get_size(stack));
    
        cut_assert_equal(10, my_stack_pop(stack));
        cut_assert(my_stack_is_empty(stack));
        cut_assert_equal_int(0, my_stack_get_size(stack));
    }
  • 簡素ですが有用な情報を出力をします。Cutterはデフォルトではテストが問題なく動いているときは静かに動きます。以下は、Cutter自身のテストの出力です。

    1
    2
    3
    4
    5
    ...........................................................
    
    Finished in 0.213021 seconds
    
    59 test(s), 246 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 notification(s)

    Cutterはテストが1つパスしたことを示すためには「.」だけを出力し、最後にテスト結果の要約を出力します。Cutterは各テストの名前や何個検証したかなどの情報は表示しません。これは、テスト成功時にはこれらの情報は必要ないからです。

    Cutterは失敗時にはたくさんの情報を出力します。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .....................F.....................................
    
    1) Failure: test_error
    <"Strange" == cut_test_result_get_test_name(result)>
    expected: <Strange!!!>
     but was: <dummy-error-test>
    test/test-cut-assertions.c:240: cut_assert_test_result()
    
    Finished in 0.223657 seconds
    
    59 test(s), 242 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s)

    上記の結果はCutterの自己テストにおかしな期待値を追加したために起きています。

    1
    cut_assert_equal_string("Strange!!!", cut_test_result_get_test_name(result));

    おかしな検証はtest/test-cut-assertions.cの240行目に書かれていて、その行はcut_assert_test_result()関数内にあります。この関数はtest_errorテストから呼び出されています。cut_test_result_get_test_name(result)が"Strange!!!"を返すことを期待していますが、実際は"dummy-error-name"が返ってきています。このような情報を上記のCutterの出力から得ることができます。これはデバッグの手助けになるでしょう。

    Cutterの出力形式は実用的です。' but was:'はその上の'expected:'と並ぶようにインデントされています。これは期待値と実測値をパッと見て簡単に比較できるようにするためです。問題のあった行は「ファイル名:行: 関数」というように整形されています。これはEmacsと連携するためです。Emacsのcompilation-modeではこの形式が*compilation*バッファに表れると、next-errorコマンド(C-x `)で「ファイル名」の「行」へジャンプすることができます。これは問題行を素早く見つける手助けをします。

    Cutterは簡単にテストを書くことを支援するだけではなく、簡単にデバッグをできることも支援します。

詳細

setup ()

void                setup                               (void);

Warning

setupはバージョン1.0.7から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_setup()を使ってください。

テストプログラム中でsetup()を定義していたら、cutterは各テストが実行される前に定義されたsetup()を呼びだします。cut_setup()が定義されていた場合は、setup()は無視されます。


cut_setup ()

void                cut_setup                           (void);

テストプログラム中でcut_setup()を定義していたら、cutterは各テストが実行される前に定義されたcut_setup()を呼びだします。cut_setup()setup()が定義されていた場合はcut_setup()だけが使われます。

1.0.6から


teardown ()

void                teardown                            (void);

Warning

teardownはバージョン1.0.7から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_teardown()を使ってください。

テストプログラム中でteardown()を定義していたら、cutterは各テストの後に、たとえテストが失敗していた時でも、teardown()を呼びだします。cut_teardown()が定義されていた場合は、teardown()は無視されます。


cut_teardown ()

void                cut_teardown                        (void);

テストプログラム中でcut_teardown()を定義していたら、cutterは各テストの後に、たとえテストが失敗していた時でも、cut_teardown()を呼びだします。cut_teardown()teardown()が定義されていた場合はcut_teardown()だけが使われます。

1.0.6から


cut_startup ()

void                cut_startup                         (void);

テストプログラム中でcut_startup()を定義していたら、cutterは各テストケースが実行される前に定義されたcut_startup()を呼びだします。cut_startup()startup()が定義されていた場合はcut_startup()だけが使われます。

1.0.6から


cut_shutdown ()

void                cut_shutdown                        (void);

テストプログラム中でshutdown()を定義していたら、cutterは各テストケースが実行された後に定義されたshutdown()を呼びだします。cut_shutdown()shutdown()が定義されていた場合はcut_shutdown()だけが使われます。

1.0.6から


cut_add_data()

#define             cut_add_data(first_data_name, ...)

データ駆動テストで使うデータを追加します。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <cutter.h>

void data_translate (void);
void test_translate (const void *data);

static const char*
translate (int input)
{
   switch(input) {
   case 1:
       return "first";
   case 111:
       return "a hundred eleven";
   default:
       return "unsupported";
   }
}

typedef struct _TranslateTestData
{
    char *translated;
    int input;
} TranslateTestData;

static TranslateTestData *
translate_test_data_new (char *translated, int input)
{
    TranslateTestData *data;

    data = malloc(sizeof(TranslateTestData));
    data->translated = strdup(translated);
    data->input = input;

    return data;
}

static void
translate_test_data_free (TranslateTestData *data)
{
    free(data->translated);
    free(data);
}

void
data_translate(void)
{
    cut_add_data("simple data",
                 translate_test_data_new("first", 1),
                 translate_test_data_free,
                 "complex data",
                 translate_test_data_new("a hundred eleven", 111),
                 translate_test_data_free,
                 NULL);
}

void
test_translate(const void *data)
{
     const TranslateTestData *test_data = data;

     cut_assert_equal_string(test_data->translated,
                             translate(test_data->input));
}

first_data_name :

最初のデータ名。

... :

最初のデータとデータ破棄関数。続けて任意の数の「名前・データ・データ破棄関数(CutDestroyFunction)」の三つ組を指定します。1.0.6から可変長の引数はNULL終端しなければいけなくなりました。

1.0.3から


cut_add_data_backward_compatibility()

#define             cut_add_data_backward_compatibility(context, ...)

Warning

cut_add_data_backward_compatibilityは非推奨です。新しいコードでは使わないでください。

context :

... :


cut_set_attributes()

#define             cut_set_attributes(first_attribute_name, ...)

テストの属性を設定します。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cutter.h>

void attributes_repeat (void);
void test_repeat (void);

void
attributes_repeat(void)
{
    cut_set_attributes("description", "a test for repeat function",
                       "bug", "111",
                       "priority", "high",
                       NULL);
}

void
test_repeat(void)
{
     cut_assert_equal_string_with_free("XXX", repeat("X", 3));
}

first_attribute_name :

最初の属性名。

... :

最初の属性値です。その後に任意個数の名前と値のペアが続きます。1.0.7からNULL終端が必須になりました。

1.0.4から


cut_get_current_test_context

#define             cut_get_current_test_context()

現在のテストコンテキストを返します。「現在のテストコンテキスト」はスレッドローカルなオブジェクトです。もしテストの中で新しいスレッドを作らない場合はテストコンテキストを気にする必要はありません。新しいスレッドを作る場合だけ必要になります。テストのスレッドが持っている「現在のテストコンテキスト」を新しく作ったスレッドに渡す必要がありません。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int
your_thread_function(void *data)
{
    CutTestContext *test_context = data;
    cut_set_current_test_context(test_context);
    ...
}

void
run_your_thread(void)
{
    int result;
    pthread_t your_thread;

    result = pthread_create(&your_thread, NULL,
                            your_thread_function,
                            cut_get_current_test_context());
    ...
}

戻り値 :

CutTestContextオブジェクト。

1.0.4から


cut_set_current_test_context()

#define             cut_set_current_test_context(test_context)

現在のテストコンテキストをtest_contextにします。詳細はcut_get_current_test_context()を見てください。

test_context :

現在のテストコンテキストになるCutTestContext

1.0.4から


cut_set_message ()

void                cut_set_message                     (const char *format,
                                                         ...);

Warning

cut_set_messageはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_message()を使ってください。

次の検証で使われるメッセージです。

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

1.0.6から


cut_set_message_va_list ()

void                cut_set_message_va_list             (const char *format,
                                                         va_list args);

Warning

cut_set_message_va_listはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないで下さい。代わりにcut_message()を使ってください。

次の検証で使われるメッセージです。

format :

整形文字列。printf()のドキュメントを見てください。

args :

整形文字列に挿入されるパラメータ。

1.0.6から


cut_keep_message ()

void                cut_keep_message                    (void);

Warning

cut_keep_messageはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_message()を使ってください。

cut_set_message()またはcut_set_message_va_list()で設定した現在のメッセージを次の検証の後でも維持します。

1.0.6から


cut_message ()

void                cut_message                         (const char *format,
                                                         ...);

追加の検証メッセージを指定します。

例:

1
2
cut_assert_equal_string("abc", "def",
                        cut_message("should fail!"));

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

1.1.0から


CUT_EXPORT

#define             CUT_EXPORT

公開関数であるというしるしをつけます。このしるしはWindows環境上でだけ必要です。Windows上でもテストを実行したい場合はこのマクロを使う必要があります。そうでなければ使う必要はありません。

例:

1
2
3
4
5
CUT_EXPORT void
test_add (void)
{
  ...
}

1.1.2から

参考

検証
cutter-testing-framework-1.1.7/doc/reference/ja/html/news.html0000644000175000017500000021205311525703040022555 0ustar koukou お知らせ

お知らせ

お知らせ — Cutterの歴史

1.1.7: 2011-02-13

Cutter

改良

  • growlnotify対応。

変更

  • Debian GNU/Linux lennyのサポートを終了。

修正

  • CentOS 5.5で動かない問題を修正。[中村弘輝さんが報告]


ドキュメント

===== 修正

  • チュートリアルのtypoを修正。[中村弘輝さんが報告]


感謝

  • 中村弘輝さん

1.1.6: 2011-02-09

Cutter

改良

修正

  • 間違ったテストを修正。[Ilya Baryginさんが提案]


cut-diff

改良


感謝

  • Romuald Contyさん

  • Ilya Baryginさん

1.1.5: 2010-09-06

Cutter

改良

修正

  • ロケールに依存したテストを修正。[Romain Tartièreさんが提案]


cut-diff

改良


ドキュメント

改良

  • FreeBSDではportsを使うように変更。[Romain Tartièreさんが提案]


感謝

  • Romain Tartièreさん

1.1.4: 2010-06-10

CentOS対応。

Cutter

改良

修正

  • 検証に指定したメッセージが無視される問題の修正


ドキュメント

修正

  • Debian, Ubuntu: ファイルのパスを修正。[Romuald Contyさんが報告]


感謝

  • Romuald Contyさん

1.1.3: 2010-04-13

データ駆動テストサポートの強化。

Cutter

改良

  • AC_CHECK_ENABLE_COVERAGE: 'make check'に失敗してもカバレッジを出力するcoverage-forceターゲットを追加

バグ修正

  • 不要なメモリ解放を削除 [Reported by Zed Shaw]

  • AC_CHECK_ENABLE_COVERAGEがタブではなく空白を出力する問題の修正


GCutter

バグ修正

  • Mac OS Xでgcut_list_inspect_enum()とgcut_list_inspect_flags()がクラッシュする問題の修正。


ドキュメント

バグ修正

  • Cygwin 1.7での依存パッケージを修正


感謝

  • Zed Shaw

1.1.2: 2010-04-03

Windows対応強化。

Cutter

改良

  • lcov 1.8対応

  • --enable-coverage=SOMETHINGと指定しても動作するようにした[グニャラくんが報告]

  • #2976775: cut_setup()内でのcut_omit()対応[Romain Tartièreさんが報告]

  • Visual Studio C++ 2008でのビルド・テスト実行に対応


CppCutter

改良

  • Windows用でのテスト定義用マクロ CUT_EXPORT を追加


ドキュメント

改良

  • Ubuntu Karmic Koara対応


感謝

  • Romain Tartièreさん

  • グニャラくん

1.1.1: 2010-03-11

1.1.0のバグ修正とGObject、sockaddr対応強化。

Cutter

改良

修正

  • stdint.hがあるがinttypes.hがない環境でビルドが失敗する問題の修正


GCutter

改良

1.1.0: 2009-11-03

注意: APIに非互換があります。

Cutter

改良

  • stdint.hに定義されている型の検証を追加 [はやみずさん]

  • API変更 : 省略可能な検証メッセージを再有効化

    変更前:

    cut_assert_equal_string("a", "b", "message");

    変更後:

    cut_assert_equal_string("a", "b", cut_message("message"));

CppCutter

改良


感謝

  • はやみずさん

1.0.9: 2009-10-20

改良


バグ修正

  • ロケール依存を修正 [奥地さんによる報告]


感謝

  • 奥地さん

1.0.7: 2009-05-20

1.0.6: 2009-03-01

1.0.5: 2008-10-15

1.0.4: 2008-08-27

1.0.3: 2008-07-15

1.0.2: 2008-06-27

  • フィクスチャデータのサポート:

    • cut_set_fixture_data_dir()

    • cut_get_fixture_data_string()

    • cut_build_fixture_data_path()

  • ユーティリティの追加:

    • cut_remove_path()

  • 検証の追加:

    • cut_assert_equal_fixture_data_string()

    • cut_assert_path_not_exist()

    • cut_assert_remove_path()

    • cut_error_errno()

  • 実験的:

    • Windowsサポート

1.0.1: 2008-06-13

  • AC_CHECK_COVERAGEの改良

  • ドキュメント:

    • 追加: SennaのテストをCutterで書くには

    • 修正: GLib 2.16以上が必要

  • 実験的:

    • GStreamerサポート:

      • テスト結果をリモートへの転送するなど

    • warmup()/cooldown()のサポート

1.0.0: 2008-05-20

  • 検証の追加

    • cut_assert_equal_pointer()

    • cut_assert_g_error()

    • cut_assert_match()

    • cut_assert_match_with_free()

  • テスト対象から除外するファイルを指定する--exclude-fileオプションの追加

  • テスト対象から除外するディレクトリを指定する--exclude-dirオプションの追加

  • cutter.m4に--without-cutterを追加(configureのオプション)

  • 実験的:

    • Cutterプロトコルの実装(CutXMLStreamerとCutStreamParser)

    • cut_take_g_error()の追加

    • Mac OS Xのサポート

0.9.0: 2008-05-12

  • 検証の追加

    • cut_assert_equal_string_array_with_free()

    • cut_assert_true()

    • cut_assert_false()

    • cut_assert_file_exist()

  • AC_CHECK_GCUTTERの追加

  • 実験的: GObjectサポート:

    • cut_take_g_object()

0.8.0: 2008-05-07

  • LGPL2 -> LGPL3

  • 検証の追加

    • cut_assert_equal_g_list_int()

    • cut_assert_equal_g_list_string()

    • cut_assert_errno()

  • 省略のサポート: cut_omit()

  • テストケースの最初と最後に実行するフックstartup/shutdownの追加

  • diffのサポート

  • gcovのサポート

  • 実験的: forkのサポート:

    • cut_fork()

    • cut_wait_process()

    • cut_fork_get_stdout_message()

    • cut_fork_get_stderr_message()

0.7.0: 2008-03-26

  • パッケージの修正

  • --help-allの修正

  • 出力するXMLのフォーマットのドキュメントを追加

0.6.0: 2008-03-21

  • XMLで結果を出力する-xml-reportオプションの追加。

  • テストケース名で実行するテストケースを並び替える--test-case-orderオプションの追加。

  • バージョンを表示する--versionオプションの追加。

  • configureに--disable-bfdオプションの追加

0.5.0: 2008-03-10

  • パッケージもれのcutter/gbsearcharray.hを追加。

0.4.0: 2008-02-28

  • cut_pending() -> cut_pend()。

  • 属性サポート。

0.3.0: 2007-12-14

  • ドキュメントの修正。

  • cut_assert_equal_string_or_null()を非推奨に変更。

  • 代わりにcut_assert_equal_string()がNULLを受け付けるように変更。

  • 実験的なAPIをドキュメントから除外。

0.2.0: 2007-11-29

  • SF.netでの最初のリリース。

cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-0.8.xml0000644000175000017500000000371411525702757023636 0ustar koukou ]> C cut_assert_equal_g_list_int, function in GLibサポート付きの検証 cut_assert_equal_g_list_string, function in GLibサポート付きの検証 cut_assert_errno, function in 検証 cut_fork, macro in 実験 cut_fork_get_stderr_message, macro in 実験 cut_fork_get_stdout_message, macro in 実験 cut_omit, function in 検証 cut_wait_process, macro in 実験 cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.9.xml0000644000175000017500000000361011525702761023764 0ustar koukou ]> C CPPCUTTER_ENABLED, macro in CppCutter cppcut_assert_equal, macro in C++サポート付きの検証 CPPCUT_BEGIN_TEST_DECLS, macro in CppCutter CPPCUT_END_TEST_DECLS, macro in CppCutter cut_set_actual, macro in 検証作成の補助 cut_set_expected, macro in 検証作成の補助 H gcut_hash_table_inspect_sorted, function in GHashTable用の検証ユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-1-3.html0000644000175000017500000000777411525703040023360 0ustar koukou 1.1.3での新しいシンボル一覧

1.1.3での新しいシンボル一覧

C

cut_assert_equal_char, cut_assert_equal_char()
cut_assert_not_equal_char, cut_assert_not_equal_char()
cut_take_convert, cut_take_convert()

G

gcut_data_get_boolean, gcut_data_get_boolean()
gcut_data_get_char, gcut_data_get_char()
gcut_data_get_double, gcut_data_get_double()
gcut_data_get_int64, gcut_data_get_int64()
gcut_data_get_size, gcut_data_get_size()
gcut_data_get_uint64, gcut_data_get_uint64()
gcut_inspect_boolean, gcut_inspect_boolean ()
gcut_inspect_char, gcut_inspect_char ()
gcut_inspect_double, gcut_inspect_double ()
gcut_inspect_int64, gcut_inspect_int64 ()
gcut_inspect_size, gcut_inspect_size ()
gcut_inspect_uint64, gcut_inspect_uint64 ()
GCUT_TYPE_SIZE, GCUT_TYPE_SIZE
cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-SoupCutter.html0000644000175000017500000001307711525703040025227 0ustar koukou SoupCutter

SoupCutter

SoupCutter — libsoupを用いたHTTPサポート付きのCutter。

概要

#define             SOUPCUTTER_ENABLED

説明

SoupCutterはlibsoupを用いたHTTP関連のたくさんの便利な機能をCutterに追加します。より簡単にHTTPのテストを書きたい場合はSoupCutterの使用を検討してください。

SoupCutterを使うことは簡単です。<cutter.h>または<gcutter.h>の代わりに<soupcutter.h>をincludeし、cutter.pcまたはgcutter.pcの代わりにsoupcutter.pcを使うだけです。

test-xxx.c:

1
2
-#include <cutter.h>
+#include <soupcutter.h>

configure.ac:

1
2
-AC_CHECK_CUTTER
+AC_CHECK_SOUPCUTTER

Makefile.am:

1
2
3
4
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(SOUPCUTTER_CFLAGS)
+XXX_LIBS = $(SOUPCUTTER_LIBS)

詳細

SOUPCUTTER_ENABLED

#define SOUPCUTTER_ENABLED 1

SoupCutterが有効なとき定義されます。

1.0.8から

cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-1-7.html0000644000175000017500000000330211525703040023343 0ustar koukou 1.1.7での新しいシンボル一覧

1.1.7での新しいシンボル一覧

cutter-testing-framework-1.1.7/doc/reference/ja/html/gdkcut-pixbuf.xml0000644000175000017500000002067611525703006024223 0ustar koukou ]> gdkcut-pixbuf 3 Cutterライブラリ gdkcut-pixbuf 概要 gboolean gdkcut_pixbuf_equal_property (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2); gboolean gdkcut_pixbuf_equal_content (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); GdkPixbuf * gdkcut_pixbuf_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); gchar * gdkcut_pixbuf_save_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold, const gchar *prefix, GError **error); 説明 詳細 gdkcut_pixbuf_equal_property () gdkcut_pixbuf_equal_property gboolean gdkcut_pixbuf_equal_property (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2); pixbuf1 : pixbuf2 : 戻り値 : gdkcut_pixbuf_equal_content () gdkcut_pixbuf_equal_content gboolean gdkcut_pixbuf_equal_content (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); pixbuf1 : pixbuf2 : threshold : 戻り値 : gdkcut_pixbuf_diff () gdkcut_pixbuf_diff GdkPixbuf * gdkcut_pixbuf_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); pixbuf1 : pixbuf2 : threshold : 戻り値 : gdkcut_pixbuf_save_diff () gdkcut_pixbuf_save_diff gchar * gdkcut_pixbuf_save_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold, const gchar *prefix, GError **error); pixbuf1 : pixbuf2 : threshold : prefix : error : 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter.html0000644000175000017500000003301411525703040023105 0ustar koukou cutter

cutter

cutter — C言語・C++言語用のxUnit系テスティングフレームワーク

名前

cutter - C言語・C++言語用のxUnit系テスティングフレームワーク

書式

cutter [ オプション... ] テストディレクトリ

cutter --mode=analyze [ オプション ... ] ログディレクトリ

説明

CutterはC言語・C++言語用のxUnit系単体テスト(ユニットテスト)フレームワークです。Cutterはプログラマに2つの重要なインターフェイスを提供します。

  1. 簡単にテストが書けるAPI

  2. 簡単にデバッグできるユーザインターフェイス

Cutterはプログラマが新しいテストを書くこと、すでにあるテストを実行すること、実行したテストからフィードバックを得ることを支援します。

テストディレクトリ にはtest_*.soがあるディレクトリを指定します。Cutterはtest_*.soは再帰的に検索します。

ログディレクトリ にはCutterのログファイルがあるディレクトリを指定します。Cutterは--stream-directoryオプションがしていされるとテスト結果をログファイルに出力します。

オプション

--version

バージョンを表示して終了します。

--mode=[test|analyze]

実行モードを指定します。testモードのときはテストを実行します。analyzeモードのときはテスト結果を解析します。

デフォルトはtestです。

-s DIRECTORY, --source-directory=DIRECTORY

テストが失敗した場合にファイル名の前にDIRECTORYを付加します。Cutterの出力からテストが失敗した箇所にジャンプするツール(Emacsなど)と連携するための機能です。

-t TEST_CASE_NAME, --test-case=TEST_CASE_NAME

TEST_CASE_NAMEにマッチしたテストケースを実行します。もし、TEST_CASE_NAMEが"/"で囲まれていた場合は(例: /test_/)正規表現として扱います。

このオプションは複数回指定できます。その場合は、どれかのTEST_CASE_NAMEにマッチしたテストケースを実行します。(OR)

-n TEST_NAME, --name=TEST_NAME

TEST_NAMEにマッチしたテストを実行します。もし、TEST_NAMEが"/"で囲まれていた場合は(例: /test_/)正規表現として扱います。

このオプションは複数回指定できます。その場合は、どれかのTEST_NAMEにマッチしたテストケースを実行します。(OR)

-m, --multi-thread

各テストケースを新しいスレッドで実行します。

デフォルトでは無効です。

--max-threads=MAX_THREADS

最大MAX_THREADSスレッドを同時に動かしてテストケースと繰り返しテストを実行します。-1を指定すると最大同時スレッド数を制限しません。

デフォルトは最大10スレッドです。

--disable-signal-handling

C-cでのテスト途中終了や、SEGV時のバックトレース取得などを行うシグナル処理機能を無効にします。シグナルを用いてるライブラリをテストする場合はこの機能が障害になることがあります。その場合はこのオプションでCutterのシグナル処理機能を無効にしてください。

デフォルトでは有効です。

--test-case-order=[none|name|name-desc]

各テストケースの実行順を並び替えます。

noneを指定すると並び替えません。nameを指定するとテストケース名で昇順に並び替えます。name-descを指定するとテストケース名で降順に並び替えます。

デフォルトはnoneです。

--exclude-file=FILE

テストを集めるときにFILEを読み込みません。

--exclude-directory=DIRECTORY

DIRECTORY以下にあるテストを検索しません。

--fatal-failures

失敗を致命的な問題として扱います。つまり、表明に失敗するとテストの実行を中断します。

デフォルトでは無効です。

--keep-opening-modules

ロードしたモジュールを開いたままにします。シンボルを解決できるようになるため、デバッグ時に便利です。

デフォルトでは無効です。

--enable-convenience-attribute-definition

便利ですが、危険でもある、"#{属性名}_#{テスト名 - 'test_'プリフィックス}"属性設定関数を有効にします。

デフォルトでは無効です。

--stop-before-test

テスト関数を実行する直前にブレークポイントを設定します。デバッガ上でcutterを実行し、ステップインすれば、簡単にテスト関数に入ることができます。

デフォルトでは無効です。

-u=[console|gtk], --ui=[console|gtk]

UIを指定します。

デフォルトはコンソールUIです。

-v[s|silent|n|normal|v|verbose], --verbose=[s|silent|n|normal|v|verbose]

出力の詳細さを指定します。

このオプションはコンソールUIを使用する場合だけ有効です。

-c[yes|true|no|false|auto], --color=[yes|true|no|false|auto]

yesまたはtrueが指定された場合はCutterはエスケープシーケンスで色付けして出力します。noまたはfalseが指定された場合は色付けしません。autoあるいは値が省略された時は、可能なら色付けをします。

このオプションはコンソールUIを使用する場合だけ有効です。

--pdf-report=FILE

FILEにPDF形式でテスト結果を出力します。

--xml-report=FILE

FILEにXML形式でテスト結果を出力します。

--stream=[xml]

ストリームバックエンドを指定します。ストリームバックエンドはテスト結果を配信します。

現在はXMLストリームバックエンドがあります。

--stream-fd=FILE_DESCRIPTOR

出力ファイルディスクリプタを指定します。XMLストリームバックエンドはFILE_DESCRIPTORに配信します。

このオプションはXMLストリームバックエンドを使用する場合だけ有効です。

--stream-directory=DIRECTORY

出力ディレクトリを指定します。XMLストリームバックエンドはDIRECTORY以下にファイルを作成し、そのファイルに配信します。

このオプションはXMLストリームバックエンドを使用する場合だけ有効です。

-?, --help

UIやテスト結果レポート機能に依存しないオプションを表示します。

--help-stream

ストリーム関連のオプションを表示します。

--help-report

レポート関連のオプションを表示します。

--help-ui

UI関連のオプションを表示します。

--help-all

すべてのオプションを表示します。

終了ステータス

すべてのテストがパスすると0で、そうでない場合は0以外になります。テスト結果の「省略」と「通知」は失敗として扱いません。

ファイル

/usr/local/share/doc/cutter/ja/

リファレンスマニュアルやチュートリアルなどのCutterのドキュメントがあります。

以下の例では、cutterはtest/ディレクトリ以下のテストを実行し、テストの進行状況を詳細に表示します。

% cutter -v v test/

以下の例では、テスト結果がlogs/ディレクトリ以下に保存されます。

% cutter --stream=xml --stream-directory=logs/ test/

関連項目

GLibのリファレンスマニュアル。

cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-types.xml0000644000175000017500000000757011525702774023415 0ustar koukou ]> 3 Cutterライブラリ テストで使う型です。 概要 void (*CutDestroyFunction) (void *data); void (*CutCallbackFunction) (void); typedef cut_boolean; #define CUT_TRUE #define CUT_FALSE 説明 テストで使う型がいくつかあります。 詳細 CutDestroyFunction () CutDestroyFunction void (*CutDestroyFunction) (void *data); データが破棄されるときに呼ばれる関数の型です。データのポインタを受け取り、そのデータ用に割り当てられたメモリとリソースを開放します。 data : 破棄するデータ。 CutCallbackFunction () CutCallbackFunction void (*CutCallbackFunction) (void); cut_boolean cut_boolean typedef int cut_boolean; 標準的な真偽値型。この型の値はCUT_TRUECUT_FALSEだけです。 CUT_TRUE CUT_TRUE #define CUT_TRUE cut_boolean型のためにCUT_TRUEを定義します。 CUT_FALSE CUT_FALSE #define CUT_FALSE cut_boolean型のためにCUT_FALSEを定義します。 cutter-testing-framework-1.1.7/doc/reference/ja/html/index.html0000644000175000017500000003700211525703040022707 0ustar koukou Cutterリファレンスマニュアル

Cutter 1.1.7 用


I. はじめに
Cutterの概要
お知らせ — Cutterの歴史
はじめに — C言語・C++言語用単体テストフレームワークCutterの概要
機能 — Cutterの機能
利用者 — Cutterを使っているプロジェクト・開発者
プラットフォーム毎のCutterのインストール方法
Debian GNU/Linuxへインストール — Debian GNU/LinuxへのCutterのインストール方法
Ubuntuへインストール — UbuntuへのCutterのインストール方法
Fedoraへインストール — FedoraへのCutterのインストール方法
CentOSへインストール — CentOSへのCutterのインストール方法
FreeBSDへインストール — FreeBSDへのCutterのインストール方法
Solarisへインストール — SolarisへのCutterのインストール方法
Mac OS Xへインストール — Mac OS XへのCutterのインストール方法
Cygwinへインストール — CygwinへのCutterのインストール方法
その他のプラットフォームへインストール — その他のプラットフォームへのCutterのインストール方法
はじめよう
チュートリアル — Cutterの使い方
II. リファレンス
コマンド
cutter — C言語・C++言語用のxUnit系テスティングフレームワーク
cut-diff — 色付きで2つのファイルの違いを表示
テスト作成
Cutter — C言語・C++言語用単体テストフレームワーク
バージョン情報 — Cutterのバージョンをチェックするためのマクロ
利用可能な機能一覧 — インストールされているCutterで利用可能な機能一覧。
検証 — あなたのプログラムが期待通りに動作しているかを検証します。
テストユーティリティ — テストをもっと簡単に書くためのユーティリティ。
— テストで使う型です。
マルチプロセス — マルチプロセスでテストを走らせるためのユーティリティ。
GCutter — GLibサポート付きのCutter。
GLibサポート付きの検証 — GLibサポート付きであなたのプログラムが期待通りに動作しているかを検証します。
GLibサポート付きテストユーティリティ — テストをもっと簡単に書くためのGLibサポート付きユーティリティ。
GLibサポート用の型 — GLibサポート付きテストで使う型です。
便利なテストデータ用API — 構造体定義なしでテストデータを作成するためのAPI。
外部コマンド — 外部コマンドを使うための便利API
外部コマンド(非推奨) — 外部コマンドを使うための便利API(非推奨)
抽象化されたイベントループ — GCutterで使うイベントループをカスタマイズするための抽象化されたイベントループAPI。
GLib用イベントループ — GLibのGMainContextとGMainLoop用のイベントループAPI。
CppCutter — C++サポート付きのCutter。
C++サポート付きの検証 — C++サポート付きであなたのプログラムが期待通りに動作しているかを検証します。
GdkCutter Pixbuf — gdk-pixbufサポート付きのCutter。
gdk-pixbufサポート付きの検証 — gdk-pixbufサポート付きであなたのプログラムが期待通りに動作しているかを検証します。
SoupCutter — libsoupを用いたHTTPサポート付きのCutter。
HTTPクライアント・サーバ用の検証 — libsoupを使ってあなたのHTTPクライアント・サーバが期待通りに動作しているかを検証します。
便利なHTTPクライアントAPI — HTTPクライアントとして動作するためのAPI。
便利なHTTPサーバーAPI — HTTPサーバーとして動作するためのAPI。
実験 — 実験的なAPI
検証作成
検証作成の補助 — このセクションにあるシンボルは独自検証を作成することを補助します。
GEnumとGFlags用の検証ユーティリティGEnumまたはGFlagsに関する検証をもっと簡単に書くためのユーティリティ。
GError用の検証ユーティリティGErrorに関する検証をもっと簡単に書くためのユーティリティ。
GHashTable用の検証ユーティリティGHashTableに関する検証をもっと簡単に書くためのユーティリティ。
GList用の検証ユーティリティGListに関する検証をもっと簡単に書くためのユーティリティ。
GObject用の検証ユーティリティGObjectに関する検証をもっと簡単に書くためのユーティリティ。
GValue用の検証ユーティリティGValueに関する検証をもっと簡単に書くためのユーティリティ。
オブジェクト調査関数 — デバッグ用にオブジェクトの詳細を示す関数です。
GString用の検証ユーティリティGStringに関する検証をもっと簡単に書くためのユーティリティ。
すべてのシンボル一覧
非推奨のシンボル一覧
1.1.7での新しいシンボル一覧
1.1.6での新しいシンボル一覧
1.1.5での新しいシンボル一覧
1.1.4での新しいシンボル一覧
1.1.3での新しいシンボル一覧
1.1.2での新しいシンボル一覧
1.1.1での新しいシンボル一覧
1.1.0での新しいシンボル一覧
1.0.9での新しいシンボル一覧
1.0.8での新しいシンボル一覧
1.0.7での新しいシンボル一覧
1.0.6での新しいシンボル一覧
1.0.5での新しいシンボル一覧
1.0.4での新しいシンボル一覧
1.0.3での新しいシンボル一覧
1.0.2での新しいシンボル一覧
1.0.1での新しいシンボル一覧
1.0での新しいシンボル一覧
0.9での新しいシンボル一覧
0.8での新しいシンボル一覧
0.7での新しいシンボル一覧
0.6での新しいシンボル一覧
0.5での新しいシンボル一覧
0.4での新しいシンボル一覧
0.3での新しいシンボル一覧
cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Convenience-HTTP-server-API.html0000644000175000017500000001704211525703040030032 0ustar koukou 便利なHTTPサーバーAPI

便利なHTTPサーバーAPI

便利なHTTPサーバーAPI — HTTPサーバーとして動作するためのAPI。

概要

SoupServer *        soupcut_server_take                 (SoupServer *server);
SoupServer *        soupcut_server_take_new             (GMainContext *context);
const gchar *       soupcut_server_build_uri            (SoupServer *server,
                                                         const gchar *path);

説明

SoupServerの便利なラッパー。

詳細

soupcut_server_take ()

SoupServer *        soupcut_server_take                 (SoupServer *server);

サーバーは tear down 時に自動的にシャットダウンされ、g_object_unref()により解放されます。

server :

SoupServerオブジェクト。

戻り値 :

serverはCutterが所有権を持つので、g_object_unref()を呼ばないでください。

1.0.8から


soupcut_server_take_new ()

SoupServer *        soupcut_server_take_new             (GMainContext *context);

コンテキストがcontextであるSoupServerオブジェクトを生成して返します。サーバーはtear down 時に自動的にシャットダウンされ、

context :

サーバーのGMainContextコンテキスト。

戻り値 :

新たにSoupServerオブジェクトを生成します。作成されたサーバーはCutterが所有権を持つので、g_object_unref()を呼ばないでください。

1.0.8から


soupcut_server_build_uri ()

const gchar *       soupcut_server_build_uri            (SoupServer *server,
                                                         const gchar *path);

@server のベースURIにパスとして @path を組み合わせたURIの文字列を作成します。

server :

SoupServerオブジェクト。

path :

パス。

戻り値 :

Cutterが所有するURI文字列。解放しないで下さい。

1.0.8から

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-data-helper.xml0000644000175000017500000007076511525702776024616 0ustar koukou ]> gcut-data-helper 3 Cutterライブラリ gcut-data-helper 概要 gchar gcut_data_get_char_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); const gchar * gcut_data_get_string_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gint gcut_data_get_int_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); guint gcut_data_get_uint_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gint64 gcut_data_get_int64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); guint64 gcut_data_get_uint64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gsize gcut_data_get_size_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); GType gcut_data_get_type_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); guint gcut_data_get_flags_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gint gcut_data_get_enum_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gconstpointer gcut_data_get_pointer_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gconstpointer gcut_data_get_boxed_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gpointer gcut_data_get_object_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gboolean gcut_data_get_boolean_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); gdouble gcut_data_get_double_helper (gconstpointer data, const gchar *field_name, CutCallbackFunctionコールバック。); 説明 詳細 gcut_data_get_char_helper () gcut_data_get_char_helper gchar gcut_data_get_char_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_string_helper () gcut_data_get_string_helper const gchar * gcut_data_get_string_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_int_helper () gcut_data_get_int_helper gint gcut_data_get_int_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_uint_helper () gcut_data_get_uint_helper guint gcut_data_get_uint_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_int64_helper () gcut_data_get_int64_helper gint64 gcut_data_get_int64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_uint64_helper () gcut_data_get_uint64_helper guint64 gcut_data_get_uint64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_size_helper () gcut_data_get_size_helper gsize gcut_data_get_size_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_type_helper () gcut_data_get_type_helper GType gcut_data_get_type_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_flags_helper () gcut_data_get_flags_helper guint gcut_data_get_flags_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_enum_helper () gcut_data_get_enum_helper gint gcut_data_get_enum_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_pointer_helper () gcut_data_get_pointer_helper gconstpointer gcut_data_get_pointer_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_boxed_helper () gcut_data_get_boxed_helper gconstpointer gcut_data_get_boxed_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_object_helper () gcut_data_get_object_helper gpointer gcut_data_get_object_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_boolean_helper () gcut_data_get_boolean_helper gboolean gcut_data_get_boolean_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : gcut_data_get_double_helper () gcut_data_get_double_helper gdouble gcut_data_get_double_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/html/nested-circle.png0000644000175000017500000000414111525703037024145 0ustar koukouPNG  IHDRddpTsRGBbKGD pHYs  tIME  E\tEXtCommentCreated with GIMPWIDATx{LSW }TByhiFXIy5 d&j_{h2eh( \$\`"RZTK>pHuޖ9OwL{-`1Gӱ`a Jf 6<&[qy\{83}l +p8&$<. }.qx2iaSI!g +-y#reg@n}"}j=uWn1~CaaVfvEoeC<|֫Ai엿Nh M<yzSXK^@ŀ l63,hUA8-&3zXbpCH?W`3C pN{G1XU GnFcCVH϶KUp8b`씔xe]:PzG-D d (-Sq7F$#E=fP2Rj w}•ME;fS揽@wD,>* wH"Tq* d#f#Yn_zGCIhN!QG;Fm4e ]e@a$/#{~xn 0 v8zGS$(#! Bσ 'zG볣0hX=zG) o$wD.MB E}d#8/0h'nDP]dgQm*Hzdgo GrF@:t |3@]s`Jg Ɣ"Ev!=u H0RZ_F`$nOm@/22B-e-Ŕ"cZd"PGj78rZ:Q)phE%ғzE:ç_}&g⇦8(s8|H%X;F$Ӡ_g{kGϒ2zXj'\t WHG*IZ}_m{6 I7q6լW-OE5Np#ޓeS=9;-3Mhˉj`ηXޙ*V0v*ʊ 5=dM˔KܼꜾ\gcS-s~SY&e4 &$s8j*˥ Ȯ +}[.w8a]JcV:\S%D2H88n*RO'gD%g[{=ѳ!iFI a@&/c k_,8 ^eɭ_N`뻱b*@0, @0, @>ήZIENDB`cutter-testing-framework-1.1.7/doc/reference/ja/html/cppcut-macros.xml0000644000175000017500000000233111525702766024227 0ustar koukou ]> cppcut-macros 3 Cutterライブラリ cppcut-macros 概要 #define CPPCUT_DECL 説明 詳細 CPPCUT_DECL CPPCUT_DECL #define CPPCUT_DECL cutter-testing-framework-1.1.7/doc/reference/ja/html/reference.html0000644000175000017500000002430311525703040023536 0ustar koukou Part II. リファレンス

Part II. リファレンス

Table of Contents

コマンド
cutter — C言語・C++言語用のxUnit系テスティングフレームワーク
cut-diff — 色付きで2つのファイルの違いを表示
テスト作成
Cutter — C言語・C++言語用単体テストフレームワーク
バージョン情報 — Cutterのバージョンをチェックするためのマクロ
利用可能な機能一覧 — インストールされているCutterで利用可能な機能一覧。
検証 — あなたのプログラムが期待通りに動作しているかを検証します。
テストユーティリティ — テストをもっと簡単に書くためのユーティリティ。
— テストで使う型です。
マルチプロセス — マルチプロセスでテストを走らせるためのユーティリティ。
GCutter — GLibサポート付きのCutter。
GLibサポート付きの検証 — GLibサポート付きであなたのプログラムが期待通りに動作しているかを検証します。
GLibサポート付きテストユーティリティ — テストをもっと簡単に書くためのGLibサポート付きユーティリティ。
GLibサポート用の型 — GLibサポート付きテストで使う型です。
便利なテストデータ用API — 構造体定義なしでテストデータを作成するためのAPI。
外部コマンド — 外部コマンドを使うための便利API
外部コマンド(非推奨) — 外部コマンドを使うための便利API(非推奨)
抽象化されたイベントループ — GCutterで使うイベントループをカスタマイズするための抽象化されたイベントループAPI。
GLib用イベントループ — GLibのGMainContextとGMainLoop用のイベントループAPI。
CppCutter — C++サポート付きのCutter。
C++サポート付きの検証 — C++サポート付きであなたのプログラムが期待通りに動作しているかを検証します。
GdkCutter Pixbuf — gdk-pixbufサポート付きのCutter。
gdk-pixbufサポート付きの検証 — gdk-pixbufサポート付きであなたのプログラムが期待通りに動作しているかを検証します。
SoupCutter — libsoupを用いたHTTPサポート付きのCutter。
HTTPクライアント・サーバ用の検証 — libsoupを使ってあなたのHTTPクライアント・サーバが期待通りに動作しているかを検証します。
便利なHTTPクライアントAPI — HTTPクライアントとして動作するためのAPI。
便利なHTTPサーバーAPI — HTTPサーバーとして動作するためのAPI。
実験 — 実験的なAPI
検証作成
検証作成の補助 — このセクションにあるシンボルは独自検証を作成することを補助します。
GEnumとGFlags用の検証ユーティリティGEnumまたはGFlagsに関する検証をもっと簡単に書くためのユーティリティ。
GError用の検証ユーティリティGErrorに関する検証をもっと簡単に書くためのユーティリティ。
GHashTable用の検証ユーティリティGHashTableに関する検証をもっと簡単に書くためのユーティリティ。
GList用の検証ユーティリティGListに関する検証をもっと簡単に書くためのユーティリティ。
GObject用の検証ユーティリティGObjectに関する検証をもっと簡単に書くためのユーティリティ。
GValue用の検証ユーティリティGValueに関する検証をもっと簡単に書くためのユーティリティ。
オブジェクト調査関数 — デバッグ用にオブジェクトの詳細を示す関数です。
GString用の検証ユーティリティGStringに関する検証をもっと簡単に書くためのユーティリティ。
cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertions.html0000644000175000017500000060425011525703040025243 0ustar koukou 検証

検証

検証 — あなたのプログラムが期待通りに動作しているかを検証します。

概要

void                cut_assert                          (cut_boolean expression,
                                                         ...);
void                cut_assert_true                     (cut_boolean expression,
                                                         ...);
void                cut_assert_false                    (cut_boolean expression,
                                                         ...);
void                cut_assert_equal_boolean            (cut_boolean expected,
                                                         cut_boolean actual,
                                                         ...);
void                cut_assert_not_equal_boolean        (cut_boolean expected,
                                                         cut_boolean actual,
                                                         ...);
void                cut_assert_null                     (const void *expression,
                                                         ...);
void                cut_assert_null_string              (const char *string,
                                                         ...);
void                cut_assert_not_null                 (const void *expression,
                                                         ...);
void                cut_assert_equal_int                (int expected,
                                                         int actual,
                                                         ...);
void                cut_assert_not_equal_int            (int expected,
                                                         int actual,
                                                         ...);
#define             cut_assert_equal_int_least8         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_least8     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_least16        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_least16    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_least32        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_least32    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_least64        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_least64    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_fast8          (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_fast8      (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_fast16         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_fast16     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_fast32         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_fast32     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_int_fast64         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_int_fast64     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_intptr             (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_intptr         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_intmax             (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_intmax         (expected,
                                                         actual,
                                                         ...)
void                cut_assert_equal_uint               (unsigned int expected,
                                                         unsigned int actual,
                                                         ...);
void                cut_assert_not_equal_uint           (unsigned int expected,
                                                         unsigned int actual,
                                                         ...);
#define             cut_assert_equal_uint_least8        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_least8    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_least16       (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_least16   (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_least32       (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_least32   (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_least64       (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_least64   (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_fast8         (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_fast8     (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_fast16        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_fast16    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_fast32        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_fast32    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uint_fast64        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uint_fast64    (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uintptr            (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uintptr        (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_uintmax            (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_uintmax        (expected,
                                                         actual,
                                                         ...)
void                cut_assert_equal_size               (size_t expected,
                                                         size_t actual,
                                                         ...);
void                cut_assert_not_equal_size           (size_t expected,
                                                         size_t actual,
                                                         ...);
void                cut_assert_equal_double             (double expected,
                                                         double error,
                                                         double actual,
                                                         ...);
void                cut_assert_not_equal_double         (double expected,
                                                         double error,
                                                         double actual,
                                                         ...);
#define             cut_assert_equal_char               (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_char           (expected,
                                                         actual,
                                                         ...)
void                cut_assert_equal_string             (const char *expected,
                                                         const char *actual,
                                                         ...);
void                cut_assert_not_equal_string         (const char *expected,
                                                         const char *actual,
                                                         ...);
void                cut_assert_equal_string_with_free   (const char *expected,
                                                         const char *actual,
                                                         ...);
void                cut_assert_equal_string_or_null     (const char *expected,
                                                         const char *actual,
                                                         ...);
void                cut_assert_equal_substring          (const char *expected,
                                                         const char *actual,
                                                         size_t length,
                                                         ...);
void                cut_assert_not_equal_substring      (const char *expected,
                                                         const char *actual,
                                                         size_t length,
                                                         ...);
void                cut_assert_equal_memory             (const void *expected,
                                                         size_t expected_size,
                                                         const void *actual,
                                                         size_t actual_size,
                                                         ...);
void                cut_assert_not_equal_memory         (const void *expected,
                                                         size_t expected_size,
                                                         const void *actual,
                                                         size_t actual_size,
                                                         ...);
void                cut_assert_equal_string_array       (char **expected,
                                                         char **actual,
                                                         ...);
void                cut_assert_equal_string_array_with_free
                                                        (char **expected,
                                                         char **actual,
                                                         ...);
#define             cut_assert_operator                 (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_operator_int             (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_operator_uint            (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_operator_size            (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_operator_double          (lhs,
                                                         operator,
                                                         rhs,
                                                         ...)
#define             cut_assert_equal                    (function,
                                                         expected,
                                                         actual,
                                                         ...)
void                cut_assert_errno                    (...);
void                cut_assert_file_exist               (const char *path,
                                                         ...);
void                cut_assert_path_exist               (const char *path,
                                                         ...);
void                cut_assert_exist_path               (const char *path,
                                                         ...);
void                cut_assert_path_not_exist           (const char *path,
                                                         ...);
void                cut_assert_not_exist_path           (const char *path,
                                                         ...);
void                cut_assert_match                    (const char *pattern,
                                                         const char *actual,
                                                         ...);
void                cut_assert_match_with_free          (const char *pattern,
                                                         const char *actual,
                                                         ...);
void                cut_assert_equal_pointer            (const void *expected,
                                                         const void *actual,
                                                         ...);
void                cut_assert_equal_fixture_data_string
                                                        (const char *expected,
                                                         const void *path,
                                                         ...);
#define             cut_assert_equal_sockaddr           (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_equal_file_raw           (expected,
                                                         actual,
                                                         ...)
#define             cut_assert_not_equal_file_raw       (expected,
                                                         actual,
                                                         ...)
void                cut_error                           (const char *format,
                                                         ...);
void                cut_error_errno                     (...);
void                cut_fail                            (const char *format,
                                                         ...);
void                cut_pend                            (const char *format,
                                                         ...);
void                cut_pending                         (const char *format,
                                                         ...);
void                cut_notify                          (const char *format,
                                                         ...);
void                cut_omit                            (const char *format,
                                                         ...);
void                cut_return                          (void);

説明

あなたのプログラムが期待通りに動作しているかを検証するために、期待した値が得られていることを検証したい箇所でcut_assert_XXX()を使います。

例:

1
cut_assert_equal_int(3, 1 + 2);

詳細

cut_assert ()

void                cut_assert                          (cut_boolean expression,
                                                         ...);

expressionが0でもNULLでもないとパスします。

例:

1
2
3
char *string;
string = malloc(16);
cut_assert(string);

1
2
3
MyObject *object;
object = my_object_new();
cut_assert(object, cut_message("my_object_new() should not be failed"));

expression :

チェックする式。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_true ()

void                cut_assert_true                     (cut_boolean expression,
                                                         ...);

expressionCUT_TRUEのとき(0でもNULLでもないとき)パスします。

expression :

チェックする式。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.9から


cut_assert_false ()

void                cut_assert_false                    (cut_boolean expression,
                                                         ...);

expressionが0またはNULLのときパスします。

expression :

チェックする式。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.9から


cut_assert_equal_boolean ()

void                cut_assert_equal_boolean            (cut_boolean expected,
                                                         cut_boolean actual,
                                                         ...);

expectedactualが両方ともCUT_TRUEの値か、両方ともCUT_FALSEの値のときパスします。

例:

1
2
3
cut_assert_equal_boolean(CUT_TRUE, CUT_TRUE);   -> パス
cut_assert_equal_boolean(CUT_FALSE, CUT_FALSE); -> パス
cut_assert_equal_boolean(CUT_TRUE, CUT_FALSE);  -> 失敗

expected :

期待する真偽値。

actual :

実際の真偽値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_not_equal_boolean ()

void                cut_assert_not_equal_boolean        (cut_boolean expected,
                                                         cut_boolean actual,
                                                         ...);

expectedCUT_TRUEの値だがactualCUT_FALSEの値のとき、または、expectedCUT_FALSEの値だがactualCUT_TRUEの値のときにパスします。

例:

1
2
3
cut_assert_not_equal_boolean(CUT_TRUE, CUT_TRUE);   -> 失敗
cut_assert_not_equal_boolean(CUT_FALSE, CUT_FALSE); -> 失敗
cut_assert_not_equal_boolean(CUT_TRUE, CUT_FALSE);  -> パス

expected :

期待する真偽値。

actual :

実際の真偽値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_null ()

void                cut_assert_null                     (const void *expression,
                                                         ...);

expressionNULLのときパスします。

expression :

チェックする式。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_null_string ()

void                cut_assert_null_string              (const char *string,
                                                         ...);

stringNULLのときパスします。

string :

チェックする文字列。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.3から


cut_assert_not_null ()

void                cut_assert_not_null                 (const void *expression,
                                                         ...);

expressionNULL以外のときパスします。

expression :

チェックする式。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_equal_int ()

void                cut_assert_equal_int                (int expected,
                                                         int actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_not_equal_int ()

void                cut_assert_not_equal_int            (int expected,
                                                         int actual,
                                                         ...);

expected != actualが成り立つときパスします。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_equal_int_least8()

#define             cut_assert_equal_int_least8(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_int_least8()

#define             cut_assert_not_equal_int_least8(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_int_least16()

#define             cut_assert_equal_int_least16(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_int_least16()

#define             cut_assert_not_equal_int_least16(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_int_least32()

#define             cut_assert_equal_int_least32(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_int_least32()

#define             cut_assert_not_equal_int_least32(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_int_least64()

#define             cut_assert_equal_int_least64(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_int_least64()

#define             cut_assert_not_equal_int_least64(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_int_fast8()

#define             cut_assert_equal_int_fast8(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_int_fast8()

#define             cut_assert_not_equal_int_fast8(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_int_fast16()

#define             cut_assert_equal_int_fast16(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_int_fast16()

#define             cut_assert_not_equal_int_fast16(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_int_fast32()

#define             cut_assert_equal_int_fast32(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_int_fast32()

#define             cut_assert_not_equal_int_fast32(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_int_fast64()

#define             cut_assert_equal_int_fast64(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_int_fast64()

#define             cut_assert_not_equal_int_fast64(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_intptr()

#define             cut_assert_equal_intptr(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_intptr()

#define             cut_assert_not_equal_intptr(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_intmax()

#define             cut_assert_equal_intmax(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_intmax()

#define             cut_assert_not_equal_intmax(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する整数の値。

actual :

実際の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uint ()

void                cut_assert_equal_uint               (unsigned int expected,
                                                         unsigned int actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_not_equal_uint ()

void                cut_assert_not_equal_uint           (unsigned int expected,
                                                         unsigned int actual,
                                                         ...);

expected != actualが成り立つときパスします。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_equal_uint_least8()

#define             cut_assert_equal_uint_least8(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uint_least8()

#define             cut_assert_not_equal_uint_least8(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uint_least16()

#define             cut_assert_equal_uint_least16(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uint_least16()

#define             cut_assert_not_equal_uint_least16(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uint_least32()

#define             cut_assert_equal_uint_least32(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uint_least32()

#define             cut_assert_not_equal_uint_least32(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uint_least64()

#define             cut_assert_equal_uint_least64(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uint_least64()

#define             cut_assert_not_equal_uint_least64(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uint_fast8()

#define             cut_assert_equal_uint_fast8(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uint_fast8()

#define             cut_assert_not_equal_uint_fast8(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uint_fast16()

#define             cut_assert_equal_uint_fast16(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uint_fast16()

#define             cut_assert_not_equal_uint_fast16(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uint_fast32()

#define             cut_assert_equal_uint_fast32(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uint_fast32()

#define             cut_assert_not_equal_uint_fast32(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uint_fast64()

#define             cut_assert_equal_uint_fast64(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uint_fast64()

#define             cut_assert_not_equal_uint_fast64(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uintptr()

#define             cut_assert_equal_uintptr(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uintptr()

#define             cut_assert_not_equal_uintptr(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_uintmax()

#define             cut_assert_equal_uintmax(expected, actual, ...)

expected == actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_not_equal_uintmax()

#define             cut_assert_not_equal_uintmax(expected, actual, ...)

expected != actualが成り立つときパスします。

この関数はCUT_SUPPORT_C99_STDINT_TYPESが定義されているときだけ使用できます。

expected :

期待する符号無し整数の値。

actual :

実際の符号無し符号整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.0から


cut_assert_equal_size ()

void                cut_assert_equal_size               (size_t expected,
                                                         size_t actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待するsize_tの値。

actual :

実際のsize_tの値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.6から


cut_assert_not_equal_size ()

void                cut_assert_not_equal_size           (size_t expected,
                                                         size_t actual,
                                                         ...);

expected != actualが成り立つときパスします。

expected :

期待するsize_tの値。

actual :

実際のsize_tの値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_equal_double ()

void                cut_assert_equal_double             (double expected,
                                                         double error,
                                                         double actual,
                                                         ...);

(expected - error) <= actual <= (expected + error)が成り立つときパスします。

expected :

期待する浮動小数点数。

error :

誤差範囲を示す浮動小数点数。

actual :

実際の浮動小数点数。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_not_equal_double ()

void                cut_assert_not_equal_double         (double expected,
                                                         double error,
                                                         double actual,
                                                         ...);

actual < (expected - error) && (expected + error) < actualが成り立つときパスします。

expected :

期待する浮動小数点数。

error :

誤差範囲を示す浮動小数点数。

actual :

実際の浮動小数点数。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_equal_char()

#define             cut_assert_equal_char(expected, actual, ...)

expected == actualが成り立つときパスします。

例:

1
2
cut_assert_equal_char('a', 'a'); -> パス
cut_assert_equal_char('a', 'b'); -> 失敗

expected :

期待する文字。

actual :

実際の文字。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.3から


cut_assert_not_equal_char()

#define             cut_assert_not_equal_char(expected, actual, ...)

expected != actualが成り立つときパスします。

例:

1
2
cut_assert_not_equal_char('a', 'b'); -> パス
cut_assert_not_equal_char('a', 'a'); -> 失敗

expected :

期待する文字。

actual :

実際の文字。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.3から


cut_assert_equal_string ()

void                cut_assert_equal_string             (const char *expected,
                                                         const char *actual,
                                                         ...);

expectedactualがどちらともNULL、あるいはstrcmp(expected, actual) == 0が成り立つときにパスします。

例:

1
2
3
4
5
cut_assert_equal_string("abc", "abc"); -> パス
cut_assert_equal_string(NULL, NULL);   -> パス
cut_assert_equal_string("abc", "ABC"); -> 失敗
cut_assert_equal_string("abc", NULL);  -> 失敗
cut_assert_equal_string(NULL, "abc");  -> 失敗

expected :

期待する文字列。

actual :

実際の文字列の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_not_equal_string ()

void                cut_assert_not_equal_string         (const char *expected,
                                                         const char *actual,
                                                         ...);

expectedactualのどちらかがNULLのとき、または、strcmp(expected, actual) != 0のときパスします。

例:

1
2
3
4
5
cut_assert_not_equal_string("abc", NULL);  -> パス
cut_assert_not_equal_string(NULL, "abc");  -> パス
cut_assert_not_equal_string("abc", "ABC"); -> パス
cut_assert_not_equal_string("abc", "abc"); -> 失敗
cut_assert_not_equal_string(NULL, NULL);   -> 失敗

expected :

期待する文字列。

actual :

実際の文字列の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_equal_string_with_free ()

void                cut_assert_equal_string_with_free   (const char *expected,
                                                         const char *actual,
                                                         ...);

expectedactualがどちらともNULL、あるいはstrcmp(expected, actual) == 0が成り立つときにパスします。

使用例はcut_assert_equal_string()を見てください。

expected :

期待する文字列。

actual :

実際の文字列の値。(チェック後に開放される)

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.3から


cut_assert_equal_string_or_null ()

void                cut_assert_equal_string_or_null     (const char *expected,
                                                         const char *actual,
                                                         ...);

Warning

cut_assert_equal_string_or_nullはバージョン0.3から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_assert_equal_string()を使ってください。

expected :

期待する文字列。

actual :

実際の文字列の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_equal_substring ()

void                cut_assert_equal_substring          (const char *expected,
                                                         const char *actual,
                                                         size_t length,
                                                         ...);

(1)expectedactualが両方ともNULLlength == 1が成り立つとき、または、(2) strncmp(expected, actual, length) == 0が成り立つときパスします。

例:

1
2
3
4
5
6
cut_assert_equal_substring("abcdef", "abcDEF", 3); -> パス
cut_assert_equal_substring(NULL, NULL, 0);         -> パス
cut_assert_equal_substring(NULL, NULL, 3);         -> 失敗
cut_assert_equal_substring("abc", "ABC", 3);       -> 失敗
cut_assert_equal_substring("abc", NULL, 3);        -> 失敗
cut_assert_equal_substring(NULL, "abc", 3);        -> 失敗

expected :

期待する文字列。

actual :

実際の文字列の値。

length :

compared string length.

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_not_equal_substring ()

void                cut_assert_not_equal_substring      (const char *expected,
                                                         const char *actual,
                                                         size_t length,
                                                         ...);

(1) expectedactualのどちらかがNULL、または、(2) strncmp(expected, actual, length) != 0が成り立つときパスします。

例:

1
2
3
4
5
6
cut_assert_not_equal_substring("abc", "ABC", 3);       -> パス
cut_assert_not_equal_substring("abc", NULL, 3);        -> パス
cut_assert_not_equal_substring(NULL, "abc", 3);        -> パス
cut_assert_not_equal_substring("abcdef", "abcDEF", 3); -> 失敗
cut_assert_not_equal_substring(NULL, NULL, 0);         -> 失敗
cut_assert_not_equal_substring(NULL, NULL, 3);         -> 失敗

expected :

期待する文字列。

actual :

実際の文字列の値。

length :

compared string length.

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_equal_memory ()

void                cut_assert_equal_memory             (const void *expected,
                                                         size_t expected_size,
                                                         const void *actual,
                                                         size_t actual_size,
                                                         ...);

expected_size == actual_sizeが成り立ち、かつ、memcmp(expected, actual, expected_size) == 0が成り立つときにパスします。

expected :

期待するデータ。

expected_size :

expectedのサイズ。

actual :

実際のデータ。

actual_size :

actualのサイズ。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_not_equal_memory ()

void                cut_assert_not_equal_memory         (const void *expected,
                                                         size_t expected_size,
                                                         const void *actual,
                                                         size_t actual_size,
                                                         ...);

expected_size != actual_sizeまたはmemcmp(expected, actual, expected_size) != 0が成り立つときパスします。

expected :

期待するデータ。

expected_size :

expectedのサイズ。

actual :

実際のデータ。

actual_size :

actualのサイズ。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.7から


cut_assert_equal_string_array ()

void                cut_assert_equal_string_array       (char **expected,
                                                         char **actual,
                                                         ...);

expectedactualがどちらともNULLではなく、どちらも同じ内容の文字列(strcmp() == 0)を持つときにパスします。

expected :

期待する文字列の配列。配列はNULL終端。

actual :

実際の文字列の配列。配列はNULL終端。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_equal_string_array_with_free ()

void                cut_assert_equal_string_array_with_free
                                                        (char **expected,
                                                         char **actual,
                                                         ...);

expectedactualがどちらともNULLではなく、どちらも同じ内容の文字列(strcmp() == 0)を持つときにパスします。

expected :

期待する文字列の配列。配列はNULL終端。

actual :

実際の文字列の配列。配列はNULL終端。(チェック後に開放される)

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.9から


cut_assert_operator()

#define             cut_assert_operator(lhs, operator, rhs, ...)

(lhs operator rhs)が真のときにパスします。

例:

1
cut_assert_operator(1, <, 2) -> (1 < 2);

lhs :

左辺値。

operator :

二項演算子。

rhs :

右辺値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_operator_int()

#define             cut_assert_operator_int(lhs, operator, rhs, ...)

(lhs operator rhs)が真のときにパスします。

例:

1
cut_assert_operator_int(1, <, 2) -> (1 < 2);

lhs :

左辺の整数の値。

operator :

二項演算子。

rhs :

右辺の整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_operator_uint()

#define             cut_assert_operator_uint(lhs, operator, rhs, ...)

(lhs operator rhs)が真のときにパスします。

例:

1
cut_assert_operator_uint(1, <, 2) -> (1 < 2);

lhs :

左辺の符号無し整数の値。

operator :

二項演算子。

rhs :

右辺の符号無し整数の値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


cut_assert_operator_size()

#define             cut_assert_operator_size(lhs, operator, rhs, ...)

(lhs operator rhs)が真のときにパスします。

例:

1
cut_assert_operator_size(1, <, 2) -> (1 < 2);

lhs :

左辺のsize_tの値。

operator :

二項演算子。

rhs :

右辺のsize_tの値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


cut_assert_operator_double()

#define             cut_assert_operator_double(lhs, operator, rhs, ...)

(lhs operator rhs)が真のときにパスします。

例:

1
cut_assert_operator_double(1.1, <, 2.2) -> (1.1 < 2.2);

lhs :

左辺の浮動小数点値。

operator :

二項演算子。

rhs :

右辺の浮動小数点値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から


cut_assert_equal()

#define             cut_assert_equal(function, expected, actual, ...)

function(expected, actual)がCUT_TRUEを返すときパスします。

例:

1
cut_assert_equal(!strcmp, "abc", "abc"); -> パス

function :

actualexpectedを比較する関数。

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

cut_assert_errno ()

void                cut_assert_errno                    (...);

errnoが0だとパスします。

例:

1
2
count = write(stdout, buffer, strlen(buffer));
cut_assert_errno("Failed to write");            -> count != -1のときパス

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.8から


cut_assert_file_exist ()

void                cut_assert_file_exist               (const char *path,
                                                         ...);

Warning

cut_assert_file_existはバージョン1.0.2から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_assert_path_exist()を使ってください。

pathが存在するときにパスします。普通のファイルかもしれませんし、そうでないかもしれません。(例えばシンボリックリンクやディレクトリなど)

例:

1
2
cut_assert_file_exist("/tmp");             -> 多くの環境ではパス
cut_assert_file_exist("/non-existent");    -> 失敗

path :

テストするパス。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

0.9から


cut_assert_path_exist ()

void                cut_assert_path_exist               (const char *path,
                                                         ...);

Warning

cut_assert_path_existはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_assert_exist_path()を使ってください。

pathが存在するときにパスします。普通のファイルかもしれませんし、そうでないかもしれません。(例えばシンボリックリンクやディレクトリなど)

例:

1
2
cut_assert_path_exist("/tmp");             -> 多くの環境ではパス
cut_assert_path_exist("/non-existent");    -> 失敗

path :

テストするパス。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.2から


cut_assert_exist_path ()

void                cut_assert_exist_path               (const char *path,
                                                         ...);

pathが存在するときにパスします。普通のファイルかもしれませんし、そうでないかもしれません。(例えばシンボリックリンクやディレクトリなど)

例:

1
2
cut_assert_exist_path("/tmp");             -> 多くの環境ではパス
cut_assert_exist_path("/non-existent");    -> 失敗

path :

テストするパス。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.5から


cut_assert_path_not_exist ()

void                cut_assert_path_not_exist           (const char *path,
                                                         ...);

Warning

cut_assert_path_not_existはバージョン1.1.5から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_assert_not_exist_path()を使ってください。

pathが存在しないとパスします。

例:

1
2
cut_assert_path_not_exist("/non-existent");    -> 多くの環境ではパス
cut_assert_path_not_exist("/tmp");             -> 失敗

path :

テストするパス。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.2から


cut_assert_not_exist_path ()

void                cut_assert_not_exist_path           (const char *path,
                                                         ...);

pathが存在しないとパスします。

例:

1
2
cut_assert_not_exist_path("/non-existent");    -> 多くの環境ではパス
cut_assert_not_exist_path("/tmp");             -> 失敗

path :

テストするパス。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.5から


cut_assert_match ()

void                cut_assert_match                    (const char *pattern,
                                                         const char *actual,
                                                         ...);

patternstringにマッチしたときパスします。

例:

1
2
cut_assert_match("^abc", "abc");            -> パス
cut_assert_match("^abc", " abc");           -> 失敗

pattern :

正規表現。

actual :

マッチされる文字列。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0から


cut_assert_match_with_free ()

void                cut_assert_match_with_free          (const char *pattern,
                                                         const char *actual,
                                                         ...);

patternstringにマッチしたときパスします。詳細は

pattern :

正規表現。(文字列で指定)

actual :

マッチされる文字列。(チェック後に開放される)

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0から


cut_assert_equal_pointer ()

void                cut_assert_equal_pointer            (const void *expected,
                                                         const void *actual,
                                                         ...);

expected == actualが成り立つときパスします。

expected :

期待するポインタ。

actual :

実際のポインタ。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0から


cut_assert_equal_fixture_data_string ()

void                cut_assert_equal_fixture_data_string
                                                        (const char *expected,
                                                         const void *path,
                                                         ...);

expected == cut_get_fixture_data_string(path, ...)が成り立つときパスします。

expected :

期待する文字列。

path :

フィクスチャデータのパスの最初の要素。

... :

パスの残りの要素。NULL終端。

1.0.2から


cut_assert_equal_sockaddr()

#define             cut_assert_equal_sockaddr(expected, actual, ...)

expected == actualが成り立つときパスします。

この検証はCUT_DISABLE_SOCKET_SUPPORTを定義すると無効にできます。

expected :

期待するソケットアドレス。

actual :

実際のソケットアドレス。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.1から


cut_assert_equal_file_raw()

#define             cut_assert_equal_file_raw(expected, actual, ...)

expectedの内容とactual内容が等しいときパスします。

expected :

パス。

actual :

パス。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.4から


cut_assert_not_equal_file_raw()

#define             cut_assert_not_equal_file_raw(expected, actual, ...)

expectedの内容とactual内容が異なるときパスします。

expected :

パス。

actual :

パス。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.1.4から


cut_error ()

void                cut_error                           (const char *format,
                                                         ...);

メッセージ付きでエラーを発生させます。

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

cut_error_errno ()

void                cut_error_errno                     (...);

例:

1
2
3
4
5
6
7
void
setup (void)
{
    mkdir("tmp", 0700);
    cut_error_errno("Failed to make tmp directory");
      -> Error when tmp directory isn't made successfully.
}

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.2から


cut_fail ()

void                cut_fail                            (const char *format,
                                                         ...);

メッセージ付きでテストを失敗させます。

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

cut_pend ()

void                cut_pend                            (const char *format,
                                                         ...);

メッセージ付きでこのテストが未解決であると印を付けます。テストはここで中断します。

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

cut_pending ()

void                cut_pending                         (const char *format,
                                                         ...);

Warning

cut_pendingはバージョン0.4から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_pend()を使ってください。

メッセージ付きでこのテストが未解決であると印を付けます。テストはここで中断します。

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

cut_notify ()

void                cut_notify                          (const char *format,
                                                         ...);

通知用のメッセージを残します。テストは続行します。

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

cut_omit ()

void                cut_omit                            (const char *format,
                                                         ...);

このテストを省略します。

例:

1
2
if (version < 2.0)
  cut_omit("Require >= 2.0");

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

0.8から


cut_return ()

void                cut_return                          (void);

このテストを終了します。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void
sub_xxx (void)
{
  some_assertions();
  if (no_need_more_test)
    cut_return();
  some_assertions();
}

void
test_xxx (void)
{
   some_assertions();
   cut_trace(sub_xxx());
   some_assertions();
}

1.0.6から

cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.5.xml0000644000175000017500000003516311525702760023767 0ustar koukou ]> A gcut_assert_equal_enum, function in GLibサポート付きの検証 gcut_assert_equal_error, function in GLibサポート付きの検証 gcut_assert_equal_flags, function in GLibサポート付きの検証 gcut_assert_equal_int64, function in GLibサポート付きの検証 gcut_assert_equal_list_enum, function in GLibサポート付きの検証 gcut_assert_equal_list_flags, function in GLibサポート付きの検証 gcut_assert_equal_list_object, function in GLibサポート付きの検証 gcut_assert_equal_list_object_custom, function in GLibサポート付きの検証 gcut_assert_equal_object, function in GLibサポート付きの検証 gcut_assert_equal_object_custom, function in GLibサポート付きの検証 gcut_assert_equal_uint64, function in GLibサポート付きの検証 C cut_assert_operator_double, macro in 検証 cut_assert_operator_size, macro in 検証 cut_assert_operator_uint, macro in 検証 cut_equal_double, function in 検証作成の補助 cut_equal_string, function in 検証作成の補助 cut_sub_process_get_max_threads, function in マルチプロセス cut_sub_process_set_max_threads, function in マルチプロセス cut_take, function in テストユーティリティ cut_take_memdup, function in テストユーティリティ cut_take_memory, function in テストユーティリティ cut_take_strdup, function in テストユーティリティ cut_take_strndup, function in テストユーティリティ cut_test_fail, function in 検証作成の補助 cut_test_fail_va_list, function in 検証作成の補助 cut_test_pass, function in 検証作成の補助 cut_trace, macro in 検証作成の補助 cut_trace_with_info_expression, macro in 検証作成の補助 E gcut_enum_inspect, function in GEnumとGFlags用の検証ユーティリティ gcut_error_equal, function in GError用の検証ユーティリティ gcut_error_inspect, function in GError用の検証ユーティリティ F gcut_flags_inspect, function in GEnumとGFlags用の検証ユーティリティ G gdkcut_pixbuf_assert_equal, function in gdk-pixbufサポート付きの検証 H gcut_hash_table_equal, function in GHashTable用の検証ユーティリティ gcut_hash_table_inspect, function in GHashTable用の検証ユーティリティ gcut_hash_table_string_equal, function in GHashTable用の検証ユーティリティ gcut_hash_table_string_string_inspect, function in GHashTable用の検証ユーティリティ gcut_hash_table_string_string_new_va_list, function in GLibサポート付きテストユーティリティ L gcut_list_enum_inspect, macro in GList用の検証ユーティリティ gcut_list_equal, function in GList用の検証ユーティリティ gcut_list_flags_inspect, macro in GList用の検証ユーティリティ gcut_list_inspect, function in GList用の検証ユーティリティ gcut_list_int_equal, macro in GList用の検証ユーティリティ gcut_list_int_inspect, macro in GList用の検証ユーティリティ gcut_list_object_inspect, macro in GList用の検証ユーティリティ gcut_list_string_equal, macro in GList用の検証ユーティリティ gcut_list_string_inspect, macro in GList用の検証ユーティリティ gcut_list_uint_equal, macro in GList用の検証ユーティリティ gcut_list_uint_inspect, macro in GList用の検証ユーティリティ O gcut_object_equal, function in GObject用の検証ユーティリティ gcut_object_inspect, function in GObject用の検証ユーティリティ gcut_object_inspect_custom, function in GObject用の検証ユーティリティ T gcut_take_new_hash_table_string_string, function in GLibサポート付きテストユーティリティ gcut_take_new_list_string, function in GLibサポート付きテストユーティリティ V gcut_value_equal, function in GValue用の検証ユーティリティ gcut_value_register_equal_func, function in GValue用の検証ユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/index.sgml0000644000175000017500000021367611525703037022730 0ustar koukou cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Version-Information.html0000644000175000017500000001334611525703040027021 0ustar koukou バージョン情報

バージョン情報

バージョン情報 — Cutterのバージョンをチェックするためのマクロ

概要

#define             CUTTER_VERSION_MAJOR
#define             CUTTER_VERSION_MINOR
#define             CUTTER_VERSION_MICRO
#define             CUTTER_VERSION_STRING
#define             CUTTER_CHECK_VERSION                (major,
                                                         minor,
                                                         micro)

説明

Cutterはビルド時の設定で便利なようにバージョン情報を提供します。通常のテストではここで説明する機能は使わないでしょう。

詳細

CUTTER_VERSION_MAJOR

#define CUTTER_VERSION_MAJOR 1

Cutterのメジャーバージョン。


CUTTER_VERSION_MINOR

#define CUTTER_VERSION_MINOR 1

Cutterのマイナーバージョン。


CUTTER_VERSION_MICRO

#define CUTTER_VERSION_MICRO 7

Cutterのマイクロバージョン。


CUTTER_VERSION_STRING

#define CUTTER_VERSION_STRING "1.1.7"

"#{メジャーバージョン}.#{マイナーバージョン}.#{マイクロバージョン}"という書式のCutterのバージョン文字列。


CUTTER_CHECK_VERSION()

#define             CUTTER_CHECK_VERSION(major, minor, micro)

Cutterのバージョンをチェックします。Cutterのヘッダファイルのバージョンと同じかそれより新しいバージョンを渡すと真を返します。

major :

メジャーバージョン番号。

minor :

マイナーバージョン番号。

micro :

マイクロバージョン番号。

1.0.7から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-GdkCutter-Pixbuf.html0000644000175000017500000001320411525703040026231 0ustar koukou GdkCutter Pixbuf

GdkCutter Pixbuf

GdkCutter Pixbuf — gdk-pixbufサポート付きのCutter。

概要

#define             GDKCUTTER_PIXBUF_ENABLED

説明

GdkCutter Pixbufはgdk-pixbufベースのたくさんの便利な機能をCutterに追加します。画像のテストを書きたい場合はGdkCutter Pixbufの使用を検討してください。

GdkCutter Pixbufを使うことは簡単です。<cutter.h>または<gcutter.h>の代わりに<gdk-cutter-pixbuf.h>をincludeし、cutter.pcまたはgcutter.pcの代わりにgdkcutter-pixbuf.pcを使うだけです。

test-xxx.c:

1
2
-#include <cutter.h>
+#include <gdkcutter-pixbuf.h>

configure.ac:

1
2
-AC_CHECK_CUTTER
+AC_CHECK_GDKCUTTER_PIXBUF

Makefile.am:

1
2
3
4
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(GDKCUTTER_PIXBUF_CFLAGS)
+XXX_LIBS = $(GDKCUTTER_PIXBUF_LIBS)

詳細

GDKCUTTER_PIXBUF_ENABLED

#define GDKCUTTER_PIXBUF_ENABLED 1

GdkCutter Pixbufが有効なとき定義されます。

1.0.6から

cutter-testing-framework-1.1.7/doc/reference/ja/html/overview.html0000644000175000017500000000444611525703040023454 0ustar koukou Cutterの概要

Cutterの概要

お知らせ — Cutterの歴史
はじめに — C言語・C++言語用単体テストフレームワークCutterの概要
機能 — Cutterの機能
利用者 — Cutterを使っているプロジェクト・開発者
././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootcutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertions-for-HTTP-client-and-server.htmlcutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertions-for-HTTP-client-and-server.ht0000644000175000017500000003444311525703040031574 0ustar koukou HTTPクライアント・サーバ用の検証

HTTPクライアント・サーバ用の検証

HTTPクライアント・サーバ用の検証 — libsoupを使ってあなたのHTTPクライアント・サーバが期待通りに動作しているかを検証します。

概要

void                soupcut_message_assert_equal_content_type
                                                        (const gchar *expected,
                                                         SoupMessage *message,
                                                         ...);
void                soupcut_client_assert_equal_content_type
                                                        (const gchar *expected,
                                                         SoupCutClient *client,
                                                         ...);
void                soupcut_client_assert_response      (SoupCutClient *client,
                                                         ...);
void                soupcut_client_assert_equal_body    (const gchar *expected,
                                                         SoupCutClient *client,
                                                         ...);
void                soupcut_client_assert_match_body    (const gchar *pattern,
                                                         SoupCutClient *client,
                                                         ...);

説明

詳細

soupcut_message_assert_equal_content_type ()

void                soupcut_message_assert_equal_content_type
                                                        (const gchar *expected,
                                                         SoupMessage *message,
                                                         ...);

expected == message->response_headers->content_typeが成り立つときパスします。

expected :

期待するContent-Type。

message :

SoupMessageオブジェクト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.8から


soupcut_client_assert_equal_content_type ()

void                soupcut_client_assert_equal_content_type
                                                        (const gchar *expected,
                                                         SoupCutClient *client,
                                                         ...);

expectedclientの最後のメッセージのContent-Typeと等しいとパスします。

expected :

期待するContent-Type。

client :

SoupCutClientオブジェクト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.8から


soupcut_client_assert_response ()

void                soupcut_client_assert_response      (SoupCutClient *client,
                                                         ...);

clientのステータスコードが2XXならパスします。

client :

SoupCutClientオブジェクト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.8から


soupcut_client_assert_equal_body ()

void                soupcut_client_assert_equal_body    (const gchar *expected,
                                                         SoupCutClient *client,
                                                         ...);

expected == message->response_body->dataが成り立つときパスします。

expected :

期待するレスポンスの本体。

client :

SoupCutClientオブジェクト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.8から


soupcut_client_assert_match_body ()

void                soupcut_client_assert_match_body    (const gchar *pattern,
                                                         SoupCutClient *client,
                                                         ...);

patternclientの最後のメッセージのレスポンスの本体にマッチしたときにパスします。

pattern :

正規表現。

client :

SoupCutClientオブジェクト。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.8から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-GCutGLibEventLoop.html0000644000175000017500000001255711525703040026350 0ustar koukou GLib用イベントループ

GLib用イベントループ

GLib用イベントループ — GLibのGMainContextとGMainLoop用のイベントループAPI。

説明

GCutGLibEventLoopはGLibのGMainContextとGMainLoop用のGCutEventLoop実装です。

詳細

GCutGLibEventLoop

typedef struct {
    GCutEventLoop object;
} GCutGLibEventLoop;


GCutGLibEventLoopClass

typedef struct {
    GCutEventLoopClass parent_class;
} GCutGLibEventLoopClass;


gcut_glib_event_loop_new ()

GCutEventLoop *     gcut_glib_event_loop_new            (GMainContext *context);

context用の新しいGCutEeventLoopを作ります。contextNULLならGLibのデフォルトGMainContextが使われます。

context :

GMainContextまたはNULL

戻り値 :

新しいGCutEventLoop

1.1.6から

cutter-testing-framework-1.1.7/doc/reference/ja/html/index-0-7.html0000644000175000017500000000325411525703040023212 0ustar koukou 0.7での新しいシンボル一覧

0.7での新しいシンボル一覧

cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-5.html0000644000175000017500000002446111525703040023351 0ustar koukou 1.0.5での新しいシンボル一覧

1.0.5での新しいシンボル一覧

C

cut_assert_operator_double, cut_assert_operator_double()
cut_assert_operator_size, cut_assert_operator_size()
cut_assert_operator_uint, cut_assert_operator_uint()
cut_equal_double, cut_equal_double ()
cut_equal_string, cut_equal_string ()
cut_sub_process_get_max_threads, cut_sub_process_get_max_threads ()
cut_sub_process_set_max_threads, cut_sub_process_set_max_threads ()
cut_take, cut_take ()
cut_take_memdup, cut_take_memdup ()
cut_take_memory, cut_take_memory ()
cut_take_strdup, cut_take_strdup ()
cut_take_strndup, cut_take_strndup ()
cut_test_fail, cut_test_fail ()
cut_test_fail_va_list, cut_test_fail_va_list ()
cut_test_pass, cut_test_pass ()
cut_trace, cut_trace()
cut_trace_with_info_expression, cut_trace_with_info_expression()

G

gcut_assert_equal_enum, gcut_assert_equal_enum ()
gcut_assert_equal_error, gcut_assert_equal_error ()
gcut_assert_equal_flags, gcut_assert_equal_flags ()
gcut_assert_equal_int64, gcut_assert_equal_int64 ()
gcut_assert_equal_list_enum, gcut_assert_equal_list_enum ()
gcut_assert_equal_list_flags, gcut_assert_equal_list_flags ()
gcut_assert_equal_list_object, gcut_assert_equal_list_object ()
gcut_assert_equal_list_object_custom, gcut_assert_equal_list_object_custom ()
gcut_assert_equal_object, gcut_assert_equal_object ()
gcut_assert_equal_object_custom, gcut_assert_equal_object_custom ()
gcut_assert_equal_uint64, gcut_assert_equal_uint64 ()
gcut_enum_inspect, gcut_enum_inspect ()
gcut_error_equal, gcut_error_equal ()
gcut_error_inspect, gcut_error_inspect ()
gcut_flags_inspect, gcut_flags_inspect ()
gcut_hash_table_equal, gcut_hash_table_equal ()
gcut_hash_table_inspect, gcut_hash_table_inspect ()
gcut_hash_table_string_equal, gcut_hash_table_string_equal ()
gcut_hash_table_string_string_inspect, gcut_hash_table_string_string_inspect ()
gcut_hash_table_string_string_new_va_list, gcut_hash_table_string_string_new_va_list ()
gcut_list_enum_inspect, gcut_list_enum_inspect()
gcut_list_equal, gcut_list_equal ()
gcut_list_flags_inspect, gcut_list_flags_inspect()
gcut_list_inspect, gcut_list_inspect ()
gcut_list_int_equal, gcut_list_int_equal()
gcut_list_int_inspect, gcut_list_int_inspect()
gcut_list_object_inspect, gcut_list_object_inspect()
gcut_list_string_equal, gcut_list_string_equal()
gcut_list_string_inspect, gcut_list_string_inspect()
gcut_list_uint_equal, gcut_list_uint_equal()
gcut_list_uint_inspect, gcut_list_uint_inspect()
gcut_object_equal, gcut_object_equal ()
gcut_object_inspect, gcut_object_inspect ()
gcut_object_inspect_custom, gcut_object_inspect_custom ()
gcut_take_new_hash_table_string_string, gcut_take_new_hash_table_string_string ()
gcut_take_new_list_string, gcut_take_new_list_string ()
gcut_value_equal, gcut_value_equal ()
gcut_value_register_equal_func, gcut_value_register_equal_func ()
gdkcut_pixbuf_assert_equal, gdkcut_pixbuf_assert_equal ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/index-all.html0000644000175000017500000020334711525703040023464 0ustar koukou すべてのシンボル一覧

すべてのシンボル一覧

C

CPPCUTTER_ENABLED, CPPCUTTER_ENABLED
cppcut_assert_equal, cppcut_assert_equal()
CPPCUT_BEGIN_TEST_DECLS, CPPCUT_BEGIN_TEST_DECLS
CPPCUT_END_TEST_DECLS, CPPCUT_END_TEST_DECLS
cppcut_message, cppcut_message()
CutCallbackFunction, CutCallbackFunction ()
CutDestroyFunction, CutDestroyFunction ()
CutSubProcess, CutSubProcess
CutSubProcessGroup, CutSubProcessGroup
CUTTER_CHECK_VERSION, CUTTER_CHECK_VERSION()
CUTTER_VERSION_MAJOR, CUTTER_VERSION_MAJOR
CUTTER_VERSION_MICRO, CUTTER_VERSION_MICRO
CUTTER_VERSION_MINOR, CUTTER_VERSION_MINOR
CUTTER_VERSION_STRING, CUTTER_VERSION_STRING
cut_add_data, cut_add_data()
cut_add_data_backward_compatibility, cut_add_data_backward_compatibility()
cut_append_diff, cut_append_diff ()
cut_assert, cut_assert ()
cut_assert_equal, cut_assert_equal()
cut_assert_equal_boolean, cut_assert_equal_boolean ()
cut_assert_equal_char, cut_assert_equal_char()
cut_assert_equal_double, cut_assert_equal_double ()
cut_assert_equal_file_raw, cut_assert_equal_file_raw()
cut_assert_equal_fixture_data_string, cut_assert_equal_fixture_data_string ()
cut_assert_equal_g_list_int, cut_assert_equal_g_list_int ()
cut_assert_equal_g_list_string, cut_assert_equal_g_list_string ()
cut_assert_equal_g_type, cut_assert_equal_g_type ()
cut_assert_equal_g_value, cut_assert_equal_g_value ()
cut_assert_equal_int, cut_assert_equal_int ()
cut_assert_equal_intmax, cut_assert_equal_intmax()
cut_assert_equal_intptr, cut_assert_equal_intptr()
cut_assert_equal_int_fast16, cut_assert_equal_int_fast16()
cut_assert_equal_int_fast32, cut_assert_equal_int_fast32()
cut_assert_equal_int_fast64, cut_assert_equal_int_fast64()
cut_assert_equal_int_fast8, cut_assert_equal_int_fast8()
cut_assert_equal_int_least16, cut_assert_equal_int_least16()
cut_assert_equal_int_least32, cut_assert_equal_int_least32()
cut_assert_equal_int_least64, cut_assert_equal_int_least64()
cut_assert_equal_int_least8, cut_assert_equal_int_least8()
cut_assert_equal_memory, cut_assert_equal_memory ()
cut_assert_equal_pointer, cut_assert_equal_pointer ()
cut_assert_equal_size, cut_assert_equal_size ()
cut_assert_equal_sockaddr, cut_assert_equal_sockaddr()
cut_assert_equal_string, cut_assert_equal_string ()
cut_assert_equal_string_array, cut_assert_equal_string_array ()
cut_assert_equal_string_array_with_free, cut_assert_equal_string_array_with_free ()
cut_assert_equal_string_or_null, cut_assert_equal_string_or_null ()
cut_assert_equal_string_with_free, cut_assert_equal_string_with_free ()
cut_assert_equal_substring, cut_assert_equal_substring ()
cut_assert_equal_uint, cut_assert_equal_uint ()
cut_assert_equal_uintmax, cut_assert_equal_uintmax()
cut_assert_equal_uintptr, cut_assert_equal_uintptr()
cut_assert_equal_uint_fast16, cut_assert_equal_uint_fast16()
cut_assert_equal_uint_fast32, cut_assert_equal_uint_fast32()
cut_assert_equal_uint_fast64, cut_assert_equal_uint_fast64()
cut_assert_equal_uint_fast8, cut_assert_equal_uint_fast8()
cut_assert_equal_uint_least16, cut_assert_equal_uint_least16()
cut_assert_equal_uint_least32, cut_assert_equal_uint_least32()
cut_assert_equal_uint_least64, cut_assert_equal_uint_least64()
cut_assert_equal_uint_least8, cut_assert_equal_uint_least8()
cut_assert_errno, cut_assert_errno ()
cut_assert_exist_path, cut_assert_exist_path ()
cut_assert_false, cut_assert_false ()
cut_assert_file_exist, cut_assert_file_exist ()
cut_assert_g_error, cut_assert_g_error ()
cut_assert_match, cut_assert_match ()
cut_assert_match_with_free, cut_assert_match_with_free ()
cut_assert_not_equal_boolean, cut_assert_not_equal_boolean ()
cut_assert_not_equal_char, cut_assert_not_equal_char()
cut_assert_not_equal_double, cut_assert_not_equal_double ()
cut_assert_not_equal_file_raw, cut_assert_not_equal_file_raw()
cut_assert_not_equal_int, cut_assert_not_equal_int ()
cut_assert_not_equal_intmax, cut_assert_not_equal_intmax()
cut_assert_not_equal_intptr, cut_assert_not_equal_intptr()
cut_assert_not_equal_int_fast16, cut_assert_not_equal_int_fast16()
cut_assert_not_equal_int_fast32, cut_assert_not_equal_int_fast32()
cut_assert_not_equal_int_fast64, cut_assert_not_equal_int_fast64()
cut_assert_not_equal_int_fast8, cut_assert_not_equal_int_fast8()
cut_assert_not_equal_int_least16, cut_assert_not_equal_int_least16()
cut_assert_not_equal_int_least32, cut_assert_not_equal_int_least32()
cut_assert_not_equal_int_least64, cut_assert_not_equal_int_least64()
cut_assert_not_equal_int_least8, cut_assert_not_equal_int_least8()
cut_assert_not_equal_memory, cut_assert_not_equal_memory ()
cut_assert_not_equal_size, cut_assert_not_equal_size ()
cut_assert_not_equal_string, cut_assert_not_equal_string ()
cut_assert_not_equal_substring, cut_assert_not_equal_substring ()
cut_assert_not_equal_uint, cut_assert_not_equal_uint ()
cut_assert_not_equal_uintmax, cut_assert_not_equal_uintmax()
cut_assert_not_equal_uintptr, cut_assert_not_equal_uintptr()
cut_assert_not_equal_uint_fast16, cut_assert_not_equal_uint_fast16()
cut_assert_not_equal_uint_fast32, cut_assert_not_equal_uint_fast32()
cut_assert_not_equal_uint_fast64, cut_assert_not_equal_uint_fast64()
cut_assert_not_equal_uint_fast8, cut_assert_not_equal_uint_fast8()
cut_assert_not_equal_uint_least16, cut_assert_not_equal_uint_least16()
cut_assert_not_equal_uint_least32, cut_assert_not_equal_uint_least32()
cut_assert_not_equal_uint_least64, cut_assert_not_equal_uint_least64()
cut_assert_not_equal_uint_least8, cut_assert_not_equal_uint_least8()
cut_assert_not_exist_path, cut_assert_not_exist_path ()
cut_assert_not_null, cut_assert_not_null ()
cut_assert_null, cut_assert_null ()
cut_assert_null_string, cut_assert_null_string ()
cut_assert_operator, cut_assert_operator()
cut_assert_operator_double, cut_assert_operator_double()
cut_assert_operator_int, cut_assert_operator_int()
cut_assert_operator_size, cut_assert_operator_size()
cut_assert_operator_uint, cut_assert_operator_uint()
cut_assert_path_exist, cut_assert_path_exist ()
cut_assert_path_not_exist, cut_assert_path_not_exist ()
cut_assert_remove_path, cut_assert_remove_path ()
cut_assert_true, cut_assert_true ()
cut_boolean, cut_boolean
cut_build_fixture_data_path, cut_build_fixture_data_path ()
cut_build_fixture_path, cut_build_fixture_path ()
cut_build_path, cut_build_path ()
cut_build_path_array, cut_build_path_array ()
cut_equal_double, cut_equal_double ()
cut_equal_sockaddr, cut_equal_sockaddr()
cut_equal_string, cut_equal_string ()
cut_error, cut_error ()
cut_error_errno, cut_error_errno ()
CUT_EXPORT, CUT_EXPORT
cut_fail, cut_fail ()
CUT_FALSE, CUT_FALSE
cut_fork, cut_fork
cut_fork_get_stderr_message, cut_fork_get_stderr_message()
cut_fork_get_stdout_message, cut_fork_get_stdout_message()
cut_get_current_test_context, cut_get_current_test_context
cut_get_fixture_data, cut_get_fixture_data ()
cut_get_fixture_data_string, cut_get_fixture_data_string ()
cut_get_source_directory, cut_get_source_directory ()
cut_get_test_directory, cut_get_test_directory ()
cut_inspect_sockaddr, cut_inspect_sockaddr()
cut_inspect_string_array, cut_inspect_string_array ()
cut_keep_message, cut_keep_message ()
cut_make_directory, cut_make_directory ()
cut_message, cut_message ()
cut_notify, cut_notify ()
cut_omit, cut_omit ()
cut_pend, cut_pend ()
cut_pending, cut_pending ()
cut_pop_backtrace, cut_pop_backtrace ()
cut_push_backtrace, cut_push_backtrace ()
CUT_RELATIVE_PATH, CUT_RELATIVE_PATH
cut_remove_path, cut_remove_path ()
cut_return, cut_return ()
cut_setup, cut_setup ()
cut_set_actual, cut_set_actual()
cut_set_attributes, cut_set_attributes()
cut_set_current_test_context, cut_set_current_test_context()
cut_set_expected, cut_set_expected()
cut_set_fixture_data_dir, cut_set_fixture_data_dir ()
cut_set_message, cut_set_message ()
cut_set_message_va_list, cut_set_message_va_list ()
cut_shutdown, cut_shutdown ()
cut_startup, cut_startup ()
cut_sub_process_get_elapsed, cut_sub_process_get_elapsed ()
cut_sub_process_get_exclude_directories, cut_sub_process_get_exclude_directories ()
cut_sub_process_get_exclude_files, cut_sub_process_get_exclude_files ()
cut_sub_process_get_fatal_failures, cut_sub_process_get_fatal_failures ()
cut_sub_process_get_max_threads, cut_sub_process_get_max_threads ()
cut_sub_process_get_multi_thread, cut_sub_process_get_multi_thread ()
cut_sub_process_get_source_directory, cut_sub_process_get_source_directory ()
cut_sub_process_get_target_test_case_names, cut_sub_process_get_target_test_case_names ()
cut_sub_process_get_target_test_names, cut_sub_process_get_target_test_names ()
cut_sub_process_get_test_directory, cut_sub_process_get_test_directory ()
cut_sub_process_get_total_elapsed, cut_sub_process_get_total_elapsed ()
cut_sub_process_group_add, cut_sub_process_group_add ()
cut_sub_process_group_run, cut_sub_process_group_run ()
cut_sub_process_group_run_async, cut_sub_process_group_run_async ()
cut_sub_process_group_wait, cut_sub_process_group_wait ()
cut_sub_process_is_crashed, cut_sub_process_is_crashed ()
cut_sub_process_is_running, cut_sub_process_is_running ()
cut_sub_process_is_success, cut_sub_process_is_success ()
cut_sub_process_run, cut_sub_process_run ()
cut_sub_process_run_async, cut_sub_process_run_async ()
cut_sub_process_set_exclude_directories, cut_sub_process_set_exclude_directories ()
cut_sub_process_set_exclude_files, cut_sub_process_set_exclude_files ()
cut_sub_process_set_fatal_failures, cut_sub_process_set_fatal_failures ()
cut_sub_process_set_max_threads, cut_sub_process_set_max_threads ()
cut_sub_process_set_multi_thread, cut_sub_process_set_multi_thread ()
cut_sub_process_set_source_directory, cut_sub_process_set_source_directory ()
cut_sub_process_set_target_test_case_names, cut_sub_process_set_target_test_case_names ()
cut_sub_process_set_target_test_names, cut_sub_process_set_target_test_names ()
cut_sub_process_set_test_directory, cut_sub_process_set_test_directory ()
cut_sub_process_wait, cut_sub_process_wait ()
CUT_SUPPORT_C99_STDINT_TYPES, CUT_SUPPORT_C99_STDINT_TYPES
CUT_SUPPORT_GDK_PIXBUF, CUT_SUPPORT_GDK_PIXBUF
CUT_SUPPORT_GIO, CUT_SUPPORT_GIO
CUT_SUPPORT_GLIB, CUT_SUPPORT_GLIB
CUT_SUPPORT_LIBSOUP, CUT_SUPPORT_LIBSOUP
cut_take, cut_take ()
cut_take_convert, cut_take_convert()
cut_take_diff, cut_take_diff ()
cut_take_inspect_string, cut_take_inspect_string ()
cut_take_memdup, cut_take_memdup ()
cut_take_memory, cut_take_memory ()
cut_take_new_sub_process, cut_take_new_sub_process ()
cut_take_new_sub_process_group, cut_take_new_sub_process_group ()
cut_take_printf, cut_take_printf ()
cut_take_replace, cut_take_replace ()
cut_take_strdup, cut_take_strdup ()
cut_take_string, cut_take_string ()
cut_take_string_array, cut_take_string_array ()
cut_take_strndup, cut_take_strndup ()
cut_teardown, cut_teardown ()
cut_test_fail, cut_test_fail ()
cut_test_fail_va_list, cut_test_fail_va_list ()
cut_test_pass, cut_test_pass ()
cut_trace, cut_trace()
cut_trace_with_info_expression, cut_trace_with_info_expression()
CUT_TRUE, CUT_TRUE
cut_wait_process, cut_wait_process()

G

GCutEgg, GCutEgg
GCutEgg::error, "error"シグナル
GCutEgg::error-received, "error-received"シグナル
GCutEgg::output-received, "output-received"シグナル
GCutEgg::reaped, "reaped"シグナル
GCutEgg:command, "command"プロパティ
GCutEggClass, GCutEggClass
GCutEggError, enum GCutEggError
GCutEnumError, enum GCutEnumError
GCutEventLoop, GCutEventLoop
GCutEventLoopClass, GCutEventLoopClass
GCutGLibEventLoop, GCutGLibEventLoop
GCutGLibEventLoopClass, GCutGLibEventLoopClass
GCutInspectFunction, GCutInspectFunction ()
GCutProcess, GCutProcess
GCutProcess::error, "error"シグナル
GCutProcess::error-received, "error-received"シグナル
GCutProcess::output-received, "output-received"シグナル
GCutProcess::reaped, "reaped"シグナル
GCutProcess:command, "command"プロパティ
GCutProcessClass, GCutProcessClass
GCutProcessError, enum GCutProcessError
GCUTTER_ENABLED, GCUTTER_ENABLED
gcut_add_datum, gcut_add_datum ()
gcut_assert_equal_enum, gcut_assert_equal_enum ()
gcut_assert_equal_error, gcut_assert_equal_error ()
gcut_assert_equal_flags, gcut_assert_equal_flags ()
gcut_assert_equal_hash_table, gcut_assert_equal_hash_table ()
gcut_assert_equal_hash_table_string_string, gcut_assert_equal_hash_table_string_string ()
gcut_assert_equal_int64, gcut_assert_equal_int64 ()
gcut_assert_equal_list, gcut_assert_equal_list ()
gcut_assert_equal_list_enum, gcut_assert_equal_list_enum ()
gcut_assert_equal_list_flags, gcut_assert_equal_list_flags ()
gcut_assert_equal_list_int, gcut_assert_equal_list_int ()
gcut_assert_equal_list_object, gcut_assert_equal_list_object ()
gcut_assert_equal_list_object_custom, gcut_assert_equal_list_object_custom ()
gcut_assert_equal_list_string, gcut_assert_equal_list_string ()
gcut_assert_equal_list_uint, gcut_assert_equal_list_uint ()
gcut_assert_equal_object, gcut_assert_equal_object ()
gcut_assert_equal_object_custom, gcut_assert_equal_object_custom ()
gcut_assert_equal_pid, gcut_assert_equal_pid ()
gcut_assert_equal_string, gcut_assert_equal_string ()
gcut_assert_equal_time_val, gcut_assert_equal_time_val ()
gcut_assert_equal_type, gcut_assert_equal_type ()
gcut_assert_equal_uint64, gcut_assert_equal_uint64 ()
gcut_assert_equal_value, gcut_assert_equal_value ()
gcut_assert_error, gcut_assert_error ()
gcut_assert_not_equal_int64, gcut_assert_not_equal_int64 ()
gcut_assert_not_equal_pid, gcut_assert_not_equal_pid ()
gcut_assert_not_equal_uint64, gcut_assert_not_equal_uint64 ()
gcut_assert_remove_path, gcut_assert_remove_path ()
gcut_data_get_boolean, gcut_data_get_boolean()
gcut_data_get_boxed, gcut_data_get_boxed ()
gcut_data_get_char, gcut_data_get_char()
gcut_data_get_double, gcut_data_get_double()
gcut_data_get_enum, gcut_data_get_enum ()
gcut_data_get_flags, gcut_data_get_flags ()
gcut_data_get_int, gcut_data_get_int ()
gcut_data_get_int64, gcut_data_get_int64()
gcut_data_get_object, gcut_data_get_object()
gcut_data_get_pointer, gcut_data_get_pointer ()
gcut_data_get_size, gcut_data_get_size()
gcut_data_get_string, gcut_data_get_string ()
gcut_data_get_type, gcut_data_get_type ()
gcut_data_get_uint, gcut_data_get_uint ()
gcut_data_get_uint64, gcut_data_get_uint64()
gcut_data_has_field, gcut_data_has_field ()
gcut_egg_close, gcut_egg_close ()
GCUT_EGG_ERROR, GCUT_EGG_ERROR
gcut_egg_error_quark, gcut_egg_error_quark ()
gcut_egg_get_env, gcut_egg_get_env ()
gcut_egg_get_error, gcut_egg_get_error ()
gcut_egg_get_flags, gcut_egg_get_flags ()
gcut_egg_get_forced_termination_wait_time, gcut_egg_get_forced_termination_wait_time ()
gcut_egg_get_input, gcut_egg_get_input ()
gcut_egg_get_output, gcut_egg_get_output ()
gcut_egg_get_pid, gcut_egg_get_pid ()
gcut_egg_hatch, gcut_egg_hatch ()
gcut_egg_kill, gcut_egg_kill ()
gcut_egg_new, gcut_egg_new ()
gcut_egg_new_argv, gcut_egg_new_argv ()
gcut_egg_new_array, gcut_egg_new_array ()
gcut_egg_new_strings, gcut_egg_new_strings ()
gcut_egg_new_va_list, gcut_egg_new_va_list ()
gcut_egg_set_env, gcut_egg_set_env ()
gcut_egg_set_flags, gcut_egg_set_flags ()
gcut_egg_set_forced_termination_wait_time, gcut_egg_set_forced_termination_wait_time ()
gcut_egg_wait, gcut_egg_wait ()
gcut_egg_write, gcut_egg_write ()
GCUT_ENUM_ERROR, GCUT_ENUM_ERROR
gcut_enum_error_quark, gcut_enum_error_quark ()
gcut_enum_inspect, gcut_enum_inspect ()
gcut_enum_parse, gcut_enum_parse ()
gcut_error_equal, gcut_error_equal ()
gcut_error_get_type, gcut_error_get_type ()
gcut_error_inspect, gcut_error_inspect ()
gcut_event_loop_add_idle, gcut_event_loop_add_idle ()
gcut_event_loop_add_idle_full, gcut_event_loop_add_idle_full ()
gcut_event_loop_add_timeout, gcut_event_loop_add_timeout ()
gcut_event_loop_add_timeout_full, gcut_event_loop_add_timeout_full ()
GCUT_EVENT_LOOP_ERROR, GCUT_EVENT_LOOP_ERROR
gcut_event_loop_error_quark, gcut_event_loop_error_quark ()
gcut_event_loop_iterate, gcut_event_loop_iterate ()
gcut_event_loop_quit, gcut_event_loop_quit ()
gcut_event_loop_remove, gcut_event_loop_remove ()
gcut_event_loop_run, gcut_event_loop_run ()
gcut_event_loop_watch_child, gcut_event_loop_watch_child ()
gcut_event_loop_watch_child_full, gcut_event_loop_watch_child_full ()
gcut_event_loop_watch_io, gcut_event_loop_watch_io ()
gcut_flags_get_all, gcut_flags_get_all ()
gcut_flags_inspect, gcut_flags_inspect ()
gcut_flags_parse, gcut_flags_parse ()
gcut_get_fixture_data, gcut_get_fixture_data ()
gcut_glib_event_loop_new, gcut_glib_event_loop_new ()
gcut_hash_table_equal, gcut_hash_table_equal ()
gcut_hash_table_inspect, gcut_hash_table_inspect ()
gcut_hash_table_inspect_sorted, gcut_hash_table_inspect_sorted ()
gcut_hash_table_string_equal, gcut_hash_table_string_equal ()
gcut_hash_table_string_string_copy, gcut_hash_table_string_string_copy ()
gcut_hash_table_string_string_inspect, gcut_hash_table_string_string_inspect ()
gcut_hash_table_string_string_new, gcut_hash_table_string_string_new ()
gcut_hash_table_string_string_new_va_list, gcut_hash_table_string_string_new_va_list ()
gcut_inspect_boolean, gcut_inspect_boolean ()
gcut_inspect_char, gcut_inspect_char ()
gcut_inspect_direct, gcut_inspect_direct ()
gcut_inspect_double, gcut_inspect_double ()
gcut_inspect_enum, gcut_inspect_enum ()
gcut_inspect_flags, gcut_inspect_flags ()
gcut_inspect_int, gcut_inspect_int ()
gcut_inspect_int64, gcut_inspect_int64 ()
gcut_inspect_pointer, gcut_inspect_pointer ()
gcut_inspect_size, gcut_inspect_size ()
gcut_inspect_string, gcut_inspect_string ()
gcut_inspect_type, gcut_inspect_type ()
gcut_inspect_uint, gcut_inspect_uint ()
gcut_inspect_uint64, gcut_inspect_uint64 ()
gcut_list_enum_inspect, gcut_list_enum_inspect()
gcut_list_equal, gcut_list_equal ()
gcut_list_equal_int, gcut_list_equal_int ()
gcut_list_equal_string, gcut_list_equal_string ()
gcut_list_equal_uint, gcut_list_equal_uint ()
gcut_list_flags_inspect, gcut_list_flags_inspect()
gcut_list_inspect, gcut_list_inspect ()
gcut_list_inspect_enum, gcut_list_inspect_enum ()
gcut_list_inspect_flags, gcut_list_inspect_flags ()
gcut_list_inspect_int, gcut_list_inspect_int ()
gcut_list_inspect_object, gcut_list_inspect_object ()
gcut_list_inspect_string, gcut_list_inspect_string ()
gcut_list_inspect_uint, gcut_list_inspect_uint ()
gcut_list_int_equal, gcut_list_int_equal()
gcut_list_int_inspect, gcut_list_int_inspect()
gcut_list_int_new, gcut_list_int_new ()
gcut_list_new, gcut_list_new ()
gcut_list_object_free, gcut_list_object_free ()
gcut_list_object_inspect, gcut_list_object_inspect()
gcut_list_string_equal, gcut_list_string_equal()
gcut_list_string_free, gcut_list_string_free ()
gcut_list_string_inspect, gcut_list_string_inspect()
gcut_list_string_new, gcut_list_string_new ()
gcut_list_string_new_array, gcut_list_string_new_array ()
gcut_list_uint_equal, gcut_list_uint_equal()
gcut_list_uint_inspect, gcut_list_uint_inspect()
gcut_list_uint_new, gcut_list_uint_new ()
gcut_object_equal, gcut_object_equal ()
gcut_object_inspect, gcut_object_inspect ()
gcut_object_inspect_custom, gcut_object_inspect_custom ()
GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR
gcut_process_error_quark, gcut_process_error_quark ()
gcut_process_flush, gcut_process_flush ()
gcut_process_get_env, gcut_process_get_env ()
gcut_process_get_error_channel, gcut_process_get_error_channel ()
gcut_process_get_error_stream, gcut_process_get_error_stream ()
gcut_process_get_error_string, gcut_process_get_error_string ()
gcut_process_get_event_loop, gcut_process_get_event_loop ()
gcut_process_get_flags, gcut_process_get_flags ()
gcut_process_get_forced_termination_wait_time, gcut_process_get_forced_termination_wait_time ()
gcut_process_get_input_channel, gcut_process_get_input_channel ()
gcut_process_get_output_channel, gcut_process_get_output_channel ()
gcut_process_get_output_stream, gcut_process_get_output_stream ()
gcut_process_get_output_string, gcut_process_get_output_string ()
gcut_process_get_pid, gcut_process_get_pid ()
gcut_process_kill, gcut_process_kill ()
gcut_process_new, gcut_process_new ()
gcut_process_new_argv, gcut_process_new_argv ()
gcut_process_new_array, gcut_process_new_array ()
gcut_process_new_command_line, gcut_process_new_command_line ()
gcut_process_new_strings, gcut_process_new_strings ()
gcut_process_new_va_list, gcut_process_new_va_list ()
gcut_process_run, gcut_process_run ()
gcut_process_set_env, gcut_process_set_env ()
gcut_process_set_event_loop, gcut_process_set_event_loop ()
gcut_process_set_flags, gcut_process_set_flags ()
gcut_process_set_forced_termination_wait_time, gcut_process_set_forced_termination_wait_time ()
gcut_process_wait, gcut_process_wait ()
gcut_process_write, gcut_process_write ()
gcut_size_get_type, gcut_size_get_type ()
gcut_string_equal, gcut_string_equal ()
gcut_string_inspect, gcut_string_inspect ()
gcut_take_error, gcut_take_error ()
gcut_take_hash_table, gcut_take_hash_table ()
gcut_take_list, gcut_take_list ()
gcut_take_new_hash_table_string_string, gcut_take_new_hash_table_string_string ()
gcut_take_new_list_int, gcut_take_new_list_int ()
gcut_take_new_list_object, gcut_take_new_list_object()
gcut_take_new_list_string, gcut_take_new_list_string ()
gcut_take_new_list_string_array, gcut_take_new_list_string_array ()
gcut_take_new_list_string_backward_compatibility, gcut_take_new_list_string_backward_compatibility()
gcut_take_new_list_uint, gcut_take_new_list_uint ()
gcut_take_new_string, gcut_take_new_string ()
gcut_take_object, gcut_take_object ()
gcut_take_string, gcut_take_string ()
GCUT_TYPE_ERROR, GCUT_TYPE_ERROR
GCUT_TYPE_SIZE, GCUT_TYPE_SIZE
gcut_value_equal, gcut_value_equal ()
gcut_value_register_equal_func, gcut_value_register_equal_func ()
GDKCUTTER_PIXBUF_ENABLED, GDKCUTTER_PIXBUF_ENABLED
gdkcut_pixbuf_assert_equal, gdkcut_pixbuf_assert_equal ()

S

setup, setup ()
SoupCutClient, SoupCutClient
SoupCutClient:async, "async"プロパティ
SoupCutClientClass, SoupCutClientClass
SOUPCUTTER_ENABLED, SOUPCUTTER_ENABLED
soupcut_client_assert_equal_body, soupcut_client_assert_equal_body ()
soupcut_client_assert_equal_content_type, soupcut_client_assert_equal_content_type ()
soupcut_client_assert_match_body, soupcut_client_assert_match_body ()
soupcut_client_assert_response, soupcut_client_assert_response ()
soupcut_client_get, soupcut_client_get ()
soupcut_client_get_async_context, soupcut_client_get_async_context ()
soupcut_client_get_latest_message, soupcut_client_get_latest_message ()
soupcut_client_get_n_messages, soupcut_client_get_n_messages ()
soupcut_client_new, soupcut_client_new ()
soupcut_client_send_message, soupcut_client_send_message ()
soupcut_client_set_base, soupcut_client_set_base ()
soupcut_message_assert_equal_content_type, soupcut_message_assert_equal_content_type ()
soupcut_server_build_uri, soupcut_server_build_uri ()
soupcut_server_take, soupcut_server_take ()
soupcut_server_take_new, soupcut_server_take_new ()

T

teardown, teardown ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/gdkcut-pixbuf-assertions.xml0000644000175000017500000001063611525703006026406 0ustar koukou ]> gdk-pixbufサポート付きの検証 3 Cutterライブラリ gdk-pixbufサポート付きの検証 gdk-pixbufサポート付きであなたのプログラムが期待通りに動作しているかを検証します。 概要 void gdkcut_pixbuf_assert_equal (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, ...); 説明 詳細 gdkcut_pixbuf_assert_equal () gdkcut_pixbuf_assert_equal void gdkcut_pixbuf_assert_equal (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, ...); expected == actualが成り立つときパスします。もし、対応するピクセル値のそれぞれの違いがしきい値以内の場合はexpectedactualは同じ画像として扱います。 もし、しきい値が3、expectedの(1, 1)のピクセル値が127、actualの(1, 1)のピクセル値が131とすると、actualexpectedは等しくありません。もし、actualの(1, 1)のピクセル値が130ならactualexpectedは等しいかもしれません。(等しくなるためには、他のすべての対応するピクセル値がこの条件を満たしている必要があります。) expected : 期待するGdkPixbuf actual : 実際のGdkPixbuf threshold : ピクセルの違いを検出するために使われるしきい値。 ... : 追加メッセージ(省略可能)。詳細はcut_message()を見てください。 1.0.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0.html0000644000175000017500000000442311525703040023203 0ustar koukou 1.0での新しいシンボル一覧

1.0での新しいシンボル一覧

C

cut_assert_equal_pointer, cut_assert_equal_pointer ()
cut_assert_g_error, cut_assert_g_error ()
cut_assert_match, cut_assert_match ()
cut_assert_match_with_free, cut_assert_match_with_free ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/style.css0000644000175000017500000001205611525703037022574 0ustar koukou.synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; border: solid 1px #d3d7cf; padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ background: #e6f3ff; border: solid 1px #729fcf; padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } @media screen { sup a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { position: relative; padding-top:4.5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 3.2em; padding-bottom: 20em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; z-index: 10; } .navigation a, .navigation a:visited { /* tango:scarlet red 3 */ color: #a40000; } .navigation a:hover { /* tango:scarlet red 1 */ color: #ef2929; } td.shortcuts { /* tango:scarlet red 1 */ color: #ef2929; font-size: 80%; white-space: nowrap; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } .navigation .title { font-size: 200%; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } hr { /* tango:aluminium 3 */ color: #babdb6; background: #babdb6; border: none 0px; height: 1px; clear: both; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .warning { /* tango:orange 0/1 */ background: #ffeed9; border-color: #ffb04f; } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; border-color: #abf562; } .note, .warning { padding: 0.5em; border-width: 1px; border-style: solid; } .note h3, .warning h3 { margin-top: 0.0em } .note p, .warning p { margin-bottom: 0.0em } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-size: 80%; font-weight: normal; } /* code listings */ .listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */ .listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */ .listing_code .programlisting .function { color: #000000; font-weight: bold; } .listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */ .listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */ .listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ .listing_code .programlisting .normal { color: #000000; } .listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */ .listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ .listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */ .listing_code .programlisting .type { color: #000000; } .listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */ .listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */ .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; } .listing_lines pre, .listing_code pre { margin: 0px; } cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-string-diff-writer.xml0000644000175000017500000000706511525702773025775 0ustar koukou ]> CutStringDiffWriter 3 Cutterライブラリ CutStringDiffWriter 概要 CutStringDiffWriter; CutStringDiffWriterClass; CutDiffWriter * cut_string_diff_writer_new (void); const gchar * cut_string_diff_writer_get_result (CutDiffWriter *writer); 説明 詳細 CutStringDiffWriter CutStringDiffWriter typedef struct { CutDiffWriter object; } CutStringDiffWriter; CutStringDiffWriterClass CutStringDiffWriterClass typedef struct { CutDiffWriterClass parent_class; } CutStringDiffWriterClass; cut_string_diff_writer_new () cut_string_diff_writer_new CutDiffWriter * cut_string_diff_writer_new (void); 戻り値 : cut_string_diff_writer_get_result () cut_string_diff_writer_get_result const gchar * cut_string_diff_writer_get_result (CutDiffWriter *writer); writer : 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.0.8.xml0000644000175000017500000001122211525702761023761 0ustar koukou ]> H gcut_hash_table_string_string_copy, function in GHashTable用の検証ユーティリティ S SOUPCUTTER_ENABLED, macro in SoupCutter soupcut_client_assert_equal_body, function in HTTPクライアント・サーバ用の検証 soupcut_client_assert_equal_content_type, function in HTTPクライアント・サーバ用の検証 soupcut_client_assert_match_body, function in HTTPクライアント・サーバ用の検証 soupcut_client_assert_response, function in HTTPクライアント・サーバ用の検証 soupcut_client_get, function in SoupCutClient soupcut_client_get_async_context, function in SoupCutClient soupcut_client_get_latest_message, function in SoupCutClient soupcut_client_get_n_messages, function in SoupCutClient soupcut_client_new, function in SoupCutClient soupcut_client_send_message, function in SoupCutClient soupcut_client_set_base, function in SoupCutClient soupcut_message_assert_equal_content_type, function in HTTPクライアント・サーバ用の検証 soupcut_server_build_uri, function in 便利なHTTPサーバーAPI soupcut_server_take, function in 便利なHTTPサーバーAPI soupcut_server_take_new, function in 便利なHTTPサーバーAPI cutter-testing-framework-1.1.7/doc/reference/ja/html/gcutter.xml0000644000175000017500000000455011525703006023115 0ustar koukou ]> GCutter 3 Cutterライブラリ GCutter GLibサポート付きのCutter。 概要 #define GCUTTER_ENABLED 説明 GCutterはGLibベースのたくさんの便利な機能をCutterに追加します。より簡単にテストを書きたい場合はGCutterの使用を検討してください。 GCutterを使うことは簡単です。<cutter.h>の代わりに<gcutter.h>をinlcudeして、cutter.pcの代わりにgcutter.pcを使うだけです。 test-xxx.c: -#include <cutter.h> +#include <gcutter.h> configure.ac: -AC_CHECK_CUTTER +AC_CHECK_GCUTTER Makefile.am: -XXX_CFLAGS = $(CUTTER_CFLAGS) -XXX_LIBS = $(CUTTER_LIBS) +XXX_CFLAGS = $(GCUTTER_CFLAGS) +XXX_LIBS = $(GCUTTER_LIBS) 詳細 GCUTTER_ENABLED GCUTTER_ENABLED #define GCUTTER_ENABLED 1 GCutterが有効なとき定義されます。1.0.6から 参考 GLibサポート付きの検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-main.xml0000644000175000017500000000615711525703003023326 0ustar koukou ]> gcut-main 3 Cutterライブラリ gcut-main 概要 void gcut_init (void); void gcut_value_equal_init (void); void gcut_quit (void); void gcut_value_equal_quit (void); 説明 詳細 gcut_init () gcut_init void gcut_init (void); gcut_value_equal_init () gcut_value_equal_init void gcut_value_equal_init (void); gcut_quit () gcut_quit void gcut_quit (void); gcut_value_equal_quit () gcut_value_equal_quit void gcut_value_equal_quit (void); cutter-testing-framework-1.1.7/doc/reference/ja/html/soupcut-assertions-helper.xml0000644000175000017500000002747411525703007026622 0ustar koukou ]> soupcut-assertions-helper 3 Cutterライブラリ soupcut-assertions-helper 概要 void soupcut_message_assert_equal_content_type_helper (const gchar *expected, SoupMessage *message, const gchar *expression_expected, const gchar *expression_message); void soupcut_client_assert_equal_content_type_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); void soupcut_client_assert_response_helper (SoupCutClient *client, const gchar *expression_client); void soupcut_client_assert_equal_body_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); void soupcut_client_assert_match_body_helper (const gchar *pattern, SoupCutClient *client, const gchar *expression_pattern, const gchar *expression_client); 説明 詳細 soupcut_message_assert_equal_content_type_helper () soupcut_message_assert_equal_content_type_helper void soupcut_message_assert_equal_content_type_helper (const gchar *expected, SoupMessage *message, const gchar *expression_expected, const gchar *expression_message); expected : message : expression_expected : expression_message : soupcut_client_assert_equal_content_type_helper () soupcut_client_assert_equal_content_type_helper void soupcut_client_assert_equal_content_type_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); expected : client : expression_expected : expression_client : soupcut_client_assert_response_helper () soupcut_client_assert_response_helper void soupcut_client_assert_response_helper (SoupCutClient *client, const gchar *expression_client); client : expression_client : soupcut_client_assert_equal_body_helper () soupcut_client_assert_equal_body_helper void soupcut_client_assert_equal_body_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); expected : client : expression_expected : expression_client : soupcut_client_assert_match_body_helper () soupcut_client_assert_match_body_helper void soupcut_client_assert_match_body_helper (const gchar *pattern, SoupCutClient *client, const gchar *expression_pattern, const gchar *expression_client); pattern : client : expression_pattern : expression_client : cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.1.5.xml0000644000175000017500000002354311525702763023772 0ustar koukou ]> A gcut_assert_equal_string, function in GLibサポート付きの検証 C cut_assert_exist_path, function in 検証 cut_assert_not_exist_path, function in 検証 cut_build_path_array, function in テストユーティリティ cut_get_source_directory, function in 検証作成の補助 D gcut_data_has_field, function in 便利なテストデータ用API L gcut_list_int_new, function in GLibサポート付きテストユーティリティ gcut_list_uint_new, function in GLibサポート付きテストユーティリティ P GCutProcess::error, object signal in GCutProcess GCutProcess::error-received, object signal in GCutProcess GCutProcess::output-received, object signal in GCutProcess GCutProcess::reaped, object signal in GCutProcess GCutProcessError, enum in GCutProcess gcut_process_flush, function in GCutProcess gcut_process_get_env, function in GCutProcess gcut_process_get_error_channel, function in GCutProcess gcut_process_get_error_stream, function in GCutProcess gcut_process_get_error_string, function in GCutProcess gcut_process_get_flags, function in GCutProcess gcut_process_get_forced_termination_wait_time, function in GCutProcess gcut_process_get_input_channel, function in GCutProcess gcut_process_get_output_channel, function in GCutProcess gcut_process_get_output_stream, function in GCutProcess gcut_process_get_output_string, function in GCutProcess gcut_process_get_pid, function in GCutProcess gcut_process_kill, function in GCutProcess gcut_process_new, function in GCutProcess gcut_process_new_argv, function in GCutProcess gcut_process_new_array, function in GCutProcess gcut_process_new_command_line, function in GCutProcess gcut_process_new_strings, function in GCutProcess gcut_process_new_va_list, function in GCutProcess gcut_process_run, function in GCutProcess gcut_process_set_env, function in GCutProcess gcut_process_set_flags, function in GCutProcess gcut_process_set_forced_termination_wait_time, function in GCutProcess gcut_process_wait, function in GCutProcess gcut_process_write, function in GCutProcess S gcut_string_equal, function in GString用の検証ユーティリティ gcut_string_inspect, function in GString用の検証ユーティリティ T gcut_take_new_list_int, function in GLibサポート付きテストユーティリティ gcut_take_new_list_uint, function in GLibサポート付きテストユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-console-diff-writer.xml0000644000175000017500000004623611525702770026131 0ustar koukou ]> CutConsoleDiffWriter 3 Cutterライブラリ CutConsoleDiffWriter 概要 CutConsoleDiffWriter; CutConsoleDiffWriterClass; CutDiffWriter * cut_console_diff_writer_new (gboolean use_color); void cut_console_diff_writer_set_deleted_mark_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_deleted_mark_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_mark_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_inserted_mark_color (CutDiffWriter *writer); void cut_console_diff_writer_set_deleted_line_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_deleted_line_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_line_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_inserted_line_color (CutDiffWriter *writer); void cut_console_diff_writer_set_deleted_segment_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_deleted_segment_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_segment_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_inserted_segment_color (CutDiffWriter *writer); 説明 詳細 CutConsoleDiffWriter CutConsoleDiffWriter typedef struct { CutDiffWriter object; } CutConsoleDiffWriter; CutConsoleDiffWriterClass CutConsoleDiffWriterClass typedef struct { CutDiffWriterClass parent_class; } CutConsoleDiffWriterClass; cut_console_diff_writer_new () cut_console_diff_writer_new CutDiffWriter * cut_console_diff_writer_new (gboolean use_color); use_color : 戻り値 : cut_console_diff_writer_set_deleted_mark_color () cut_console_diff_writer_set_deleted_mark_color void cut_console_diff_writer_set_deleted_mark_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_deleted_mark_color () cut_console_diff_writer_get_deleted_mark_color const gchar * cut_console_diff_writer_get_deleted_mark_color (CutDiffWriter *writer); writer : 戻り値 : cut_console_diff_writer_set_inserted_mark_color () cut_console_diff_writer_set_inserted_mark_color void cut_console_diff_writer_set_inserted_mark_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_inserted_mark_color () cut_console_diff_writer_get_inserted_mark_color const gchar * cut_console_diff_writer_get_inserted_mark_color (CutDiffWriter *writer); writer : 戻り値 : cut_console_diff_writer_set_deleted_line_color () cut_console_diff_writer_set_deleted_line_color void cut_console_diff_writer_set_deleted_line_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_deleted_line_color () cut_console_diff_writer_get_deleted_line_color const gchar * cut_console_diff_writer_get_deleted_line_color (CutDiffWriter *writer); writer : 戻り値 : cut_console_diff_writer_set_inserted_line_color () cut_console_diff_writer_set_inserted_line_color void cut_console_diff_writer_set_inserted_line_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_inserted_line_color () cut_console_diff_writer_get_inserted_line_color const gchar * cut_console_diff_writer_get_inserted_line_color (CutDiffWriter *writer); writer : 戻り値 : cut_console_diff_writer_set_deleted_segment_color () cut_console_diff_writer_set_deleted_segment_color void cut_console_diff_writer_set_deleted_segment_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_deleted_segment_color () cut_console_diff_writer_get_deleted_segment_color const gchar * cut_console_diff_writer_get_deleted_segment_color (CutDiffWriter *writer); writer : 戻り値 : cut_console_diff_writer_set_inserted_segment_color () cut_console_diff_writer_set_inserted_segment_color void cut_console_diff_writer_set_inserted_segment_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_inserted_segment_color () cut_console_diff_writer_get_inserted_segment_color const gchar * cut_console_diff_writer_get_inserted_segment_color (CutDiffWriter *writer); writer : 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-unified-differ.xml0000644000175000017500000000165211525702774025124 0ustar koukou ]> CutUnifiedDiffer 3 Cutterライブラリ CutUnifiedDiffer 概要 説明 詳細 cutter-testing-framework-1.1.7/doc/reference/ja/html/start.html0000644000175000017500000000357311525703040022743 0ustar koukou はじめよう

はじめよう

チュートリアル — Cutterの使い方
cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter.devhelp20000644000175000017500000023112111525703037023657 0ustar koukou cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Multi-Process.html0000644000175000017500000020723511525703040025621 0ustar koukou マルチプロセス

マルチプロセス

マルチプロセス — マルチプロセスでテストを走らせるためのユーティリティ。

概要

                    CutSubProcess;
                    CutSubProcessGroup;
CutSubProcess *     cut_take_new_sub_process            (const char *test_directory);
cut_boolean         cut_sub_process_run                 (CutSubProcess *sub_process);
void                cut_sub_process_run_async           (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_wait                (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_is_success          (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_is_running          (CutSubProcess *sub_process);
const char *        cut_sub_process_get_test_directory  (CutSubProcess *sub_process);
void                cut_sub_process_set_test_directory  (CutSubProcess *sub_process,
                                                         const char *test_directory);
const char *        cut_sub_process_get_source_directory
                                                        (CutSubProcess *sub_process);
void                cut_sub_process_set_source_directory
                                                        (CutSubProcess *sub_process,
                                                         const char *source_directory);
cut_boolean         cut_sub_process_get_multi_thread    (CutSubProcess *sub_process);
void                cut_sub_process_set_multi_thread    (CutSubProcess *sub_process,
                                                         cut_boolean multi_thread);
int                 cut_sub_process_get_max_threads     (CutSubProcess *sub_process);
void                cut_sub_process_set_max_threads     (CutSubProcess *sub_process,
                                                         int max_threads);
const char **       cut_sub_process_get_exclude_files   (CutSubProcess *sub_process);
void                cut_sub_process_set_exclude_files   (CutSubProcess *sub_process,
                                                         const char **files);
const char **       cut_sub_process_get_exclude_directories
                                                        (CutSubProcess *sub_process);
void                cut_sub_process_set_exclude_directories
                                                        (CutSubProcess *sub_process,
                                                         const char **directories);
const char **       cut_sub_process_get_target_test_case_names
                                                        (CutSubProcess *sub_process);
void                cut_sub_process_set_target_test_case_names
                                                        (CutSubProcess *sub_process,
                                                         const char **names);
const char **       cut_sub_process_get_target_test_names
                                                        (CutSubProcess *sub_process);
void                cut_sub_process_set_target_test_names
                                                        (CutSubProcess *sub_process,
                                                         const char **names);
double              cut_sub_process_get_elapsed         (CutSubProcess *sub_process);
double              cut_sub_process_get_total_elapsed   (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_is_crashed          (CutSubProcess *sub_process);
cut_boolean         cut_sub_process_get_fatal_failures  (CutSubProcess *sub_process);
void                cut_sub_process_set_fatal_failures  (CutSubProcess *sub_process,
                                                         cut_boolean fatal_failures);
CutSubProcessGroup * cut_take_new_sub_process_group     (void);
void                cut_sub_process_group_add           (CutSubProcessGroup *group,
                                                         CutSubProcess *sub_process);
cut_boolean         cut_sub_process_group_run           (CutSubProcessGroup *group);
void                cut_sub_process_group_run_async     (CutSubProcessGroup *group);
cut_boolean         cut_sub_process_group_wait          (CutSubProcessGroup *group);

説明

もしテスト対象のソフトウェアがマルチプロセスやマルチスレッドでの使用をサポートしているなら、それらの機能をテストする必要があります。そのようなテストために、CutSubProcessCutSubProcessGroupを使うことができます。

CutSubProcessはテストを別のプロセスで走らせ、その結果をメインプロセスに転送します。このため、別のプロセス上でのテスト結果もメインプロセス上でのテスト結果と同じように見えます。

CutSubProcessGroupはいくつかのCutSubProcessをまとめて実行するための便利オブジェクトです。

詳細

CutSubProcess

typedef struct _CutSubProcess CutSubProcess;

サブcutterプロセスを表現するオブジェクトです。サブcutterプロセスのパラメタとテスト結果を持っています。

例:

1
2
3
4
5
CutSubProcess *sub_process;

sub_process = cut_take_new_sub_process("test-dir");
cut_sub_process_set_multi_thread(sub_process, TRUE);
cut_assert_true(cut_sub_process_run(sub_process));

1.0.4から


CutSubProcessGroup

typedef struct _CutSubProcessGroup CutSubProcessGroup;

サブcutterプロセスを実行するオブジェクトです。このオブジェクトは便利にテストを書くために導入されています。

例:

1
2
3
4
5
6
7
8
9
10
11
12
CutSubProcess *sub_process1, *sub_process2, *sub_process3;
CutSubProcessGroup *group;

sub_process1 = cut_take_new_sub_process("test-dir1");
sub_process2 = cut_take_new_sub_process("test-dir2");
sub_process3 = cut_take_new_sub_process("test-dir3");

group = cut_take_new_sub_process_group();
cut_sub_process_group_add(group, sub_process1);
cut_sub_process_group_add(group, sub_process2);
cut_sub_process_group_add(group, sub_process3);
cut_assert_true(cut_sub_process_group_run(group));

1.0.4から


cut_take_new_sub_process ()

CutSubProcess *     cut_take_new_sub_process            (const char *test_directory);

test_directory以下のテストを実行するサブcutterプロセスを作り、それを返します。返されたサブcutterプロセスの所有者はCutterです。

test_directory :

サブcutterプロセスのテストがあるディレクトリ。

戻り値 :

CutSubProcessオブジェクト。

1.0.4から


cut_sub_process_run ()

cut_boolean         cut_sub_process_run                 (CutSubProcess *sub_process);

サブcutterプロセスを実行します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

もし、sub_processが正常に終了した場合はCUT_TRUE、そうでない場合はCUT_FALSE

1.0.4から


cut_sub_process_run_async ()

void                cut_sub_process_run_async           (CutSubProcess *sub_process);

非同期でサブcutterコマンドを実行します。sub_processの結果はcut_sub_process_wait()で取得できます。

sub_process :

CutSubProcessオブジェクト。

1.0.4から


cut_sub_process_wait ()

cut_boolean         cut_sub_process_wait                (CutSubProcess *sub_process);

非同期で実行されたサブcutterプロセスの終了を待ち、結果を返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

もし、sub_processが正常に終了した場合はCUT_TRUE、そうでない場合はCUT_FALSE

1.0.4から


cut_sub_process_is_success ()

cut_boolean         cut_sub_process_is_success          (CutSubProcess *sub_process);

sub_processが正常に終了したかどうかを返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

もし、sub_processが正常に終了した場合はCUT_TRUE、そうでない場合はCUT_FALSE

1.0.4から


cut_sub_process_is_running ()

cut_boolean         cut_sub_process_is_running          (CutSubProcess *sub_process);

sub_processが実行中かどうかを返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

sub_processが実行中の場合はCUT_TRUE、そうでない場合はCUT_FALSE

1.0.4から


cut_sub_process_get_test_directory ()

const char *        cut_sub_process_get_test_directory  (CutSubProcess *sub_process);

実行対象のテストがあるディレクトリを返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

テストディレクトリ

1.0.4から


cut_sub_process_set_test_directory ()

void                cut_sub_process_set_test_directory  (CutSubProcess *sub_process,
                                                         const char *test_directory);

実行対象のテストがあるディレクトリとしてtest_directoryを指定します。これは必須のコマンドライン引数であるTEST_DIRECTORYと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

test_directory :

テストディレクトリ

1.0.4から


cut_sub_process_get_source_directory ()

const char *        cut_sub_process_get_source_directory
                                                        (CutSubProcess *sub_process);

ソースファイルがあるディレクトリを返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

ソースディレクトリ。

1.0.4から


cut_sub_process_set_source_directory ()

void                cut_sub_process_set_source_directory
                                                        (CutSubProcess *sub_process,
                                                         const char *source_directory);

ソースファイルがあるディレクトリとしてsource_directoryを指定します。これは--source-directoryコマンドラインオプションと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

source_directory :

ソースディレクトリ。

1.0.4から


cut_sub_process_get_multi_thread ()

cut_boolean         cut_sub_process_get_multi_thread    (CutSubProcess *sub_process);

sub_processをマルチスレッドモードで実行するかどうかを返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

sub_processがマルチスレッドモードで実行されるならCUT_TRUE、そうでなければCUT_FALSE

1.0.4から


cut_sub_process_set_multi_thread ()

void                cut_sub_process_set_multi_thread    (CutSubProcess *sub_process,
                                                         cut_boolean multi_thread);

sub_processがマルチスレッドモードで実行されるかどうかを指定します。これは--multi-threadコマンドラインオプションと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

multi_thread :

マルチスレッドモードで実行するならCUT_TRUE

1.0.4から


cut_sub_process_get_max_threads ()

int                 cut_sub_process_get_max_threads     (CutSubProcess *sub_process);

sub_process中で同時に動く最大スレッド数を返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

sub_process中で同時に動く最大スレッド数。

1.0.5から


cut_sub_process_set_max_threads ()

void                cut_sub_process_set_max_threads     (CutSubProcess *sub_process,
                                                         int max_threads);

sub_process中で同時に動く最大スレッド数を設定します。-1は制限がないことを意味します。これは--max-threadsコマンドラインオプションと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

max_threads :

同時に動く最大スレッド数。

1.0.5から


cut_sub_process_get_exclude_files ()

const char **       cut_sub_process_get_exclude_files   (CutSubProcess *sub_process);

テスト対象ファイルから除外されるファイル名を返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

テスト対象ファイルから除外されるファイル名。

1.0.4から


cut_sub_process_set_exclude_files ()

void                cut_sub_process_set_exclude_files   (CutSubProcess *sub_process,
                                                         const char **files);

テスト対象から除外されるファイル名を指定します。これは--exclude-fileコマンドラインオプションと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

files :

テスト対象ファイルから除外されるファイル名。

1.0.4から


cut_sub_process_get_exclude_directories ()

const char **       cut_sub_process_get_exclude_directories
                                                        (CutSubProcess *sub_process);

テスト対象ディレクトリから除外されるディレクトリ名を返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

テスト対象ディレクトリから除外されるディレクトリ名。

1.0.4から


cut_sub_process_set_exclude_directories ()

void                cut_sub_process_set_exclude_directories
                                                        (CutSubProcess *sub_process,
                                                         const char **directories);

テスト対象ディレクトリから除外されるディレクトリ名を指定します。これは--exclude-directoryコマンドラインオプションと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

directories :

テスト対象ディレクトリから除外されるディレクトリ名。

1.0.4から


cut_sub_process_get_target_test_case_names ()

const char **       cut_sub_process_get_target_test_case_names
                                                        (CutSubProcess *sub_process);

実行されるテストケース名を返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

実行されるテストケース名。

1.0.4から


cut_sub_process_set_target_test_case_names ()

void                cut_sub_process_set_target_test_case_names
                                                        (CutSubProcess *sub_process,
                                                         const char **names);

実行されるテストケース名を指定します。これは--test-caseコマンドラインオプションと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

names :

実行されるテストケース名。

1.0.4から


cut_sub_process_get_target_test_names ()

const char **       cut_sub_process_get_target_test_names
                                                        (CutSubProcess *sub_process);

実行されるテスト名を返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

実行されるテスト名。

1.0.4から


cut_sub_process_set_target_test_names ()

void                cut_sub_process_set_target_test_names
                                                        (CutSubProcess *sub_process,
                                                         const char **names);

実行されるテスト名を指定します。これは--testコマンドラインオプションと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

names :

実行されるテスト名。

1.0.4から


cut_sub_process_get_elapsed ()

double              cut_sub_process_get_elapsed         (CutSubProcess *sub_process);

sub_processを実行していた間の時間を取得します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

sub_processを実行していた間の時間。

1.0.4から


cut_sub_process_get_total_elapsed ()

double              cut_sub_process_get_total_elapsed   (CutSubProcess *sub_process);

各テストで使われた時間の合計を返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

各テストで使われた時間の合計。

1.0.4から


cut_sub_process_is_crashed ()

cut_boolean         cut_sub_process_is_crashed          (CutSubProcess *sub_process);

sub_processが異常終了したかどうかを返します。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

sub_processが異常終了したときはCUT_TRUE、そうでない場合はCUT_FALSE

1.0.4から


cut_sub_process_get_fatal_failures ()

cut_boolean         cut_sub_process_get_fatal_failures  (CutSubProcess *sub_process);

sub_processが「失敗は致命的」モードで動くかどうかを返します。「失敗は致命的」モードの詳細はcut_sub_process_set_fatal_failures()を見てください。

sub_process :

CutSubProcessオブジェクト。

戻り値 :

sub_processが「失敗は致命的」モードで実行されるならCUT_TRUE、そうでなければCUT_FALSE

1.0.4から


cut_sub_process_set_fatal_failures ()

void                cut_sub_process_set_fatal_failures  (CutSubProcess *sub_process,
                                                         cut_boolean fatal_failures);

sub_processが「失敗は致命的」モードで実行されるかどうかを設定します。このモードではすべての失敗は致命的な問題として扱われます。つまり、失敗時にテストが異常終了します。いくつかの環境ではブレークポイントが設定されます。

--fatal-failuresコマンドラインオプションと同じ意味を持ちます。

sub_process :

CutSubProcessオブジェクト。

fatal_failures :

「失敗は致命的」モードで実行するならCUT_TRUE

1.0.4から


cut_take_new_sub_process_group ()

CutSubProcessGroup * cut_take_new_sub_process_group     (void);

サブcuterプロセスのグループを作ります。作られたグループの所有者はCutterです。

戻り値 :

CutSubProcessGroupオブジェクト。

1.0.4から


cut_sub_process_group_add ()

void                cut_sub_process_group_add           (CutSubProcessGroup *group,
                                                         CutSubProcess *sub_process);

sub_processgroupに追加します。

group :

CutSubProcessGroupオブジェクト。

sub_process :

CutSubProcessオブジェクト。

1.0.4から


cut_sub_process_group_run ()

cut_boolean         cut_sub_process_group_run           (CutSubProcessGroup *group);

group内のすべてのサブcutterプロセスを実行し、その結果を返します。

group :

CutSubProcessGroupオブジェクト。

戻り値 :

group内のすべてのサブcutterプロセスが正常終了したらCUT_TRUE、そうでない場合はCUT_FALSE

1.0.4から


cut_sub_process_group_run_async ()

void                cut_sub_process_group_run_async     (CutSubProcessGroup *group);

group内のすべてのサブcutterプロセスを非同期で実行します。実行結果はcut_sub_process_group_wait()で取得できます。

group :

CutSubProcessGroupオブジェクト。

1.0.4から


cut_sub_process_group_wait ()

cut_boolean         cut_sub_process_group_wait          (CutSubProcessGroup *group);

group内の非同期で実行されたすべてのサブcutterプロセスの終了を待ち、終了結果を返します。

group :

CutSubProcessGroupオブジェクト。

戻り値 :

group内のすべてのサブcutterプロセスが正常終了したらCUT_TRUE、そうでない場合はCUT_FALSE

1.0.4から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertions-with-gdk-pixbuf-support.html0000644000175000017500000001435011525703040031760 0ustar koukou gdk-pixbufサポート付きの検証

gdk-pixbufサポート付きの検証

gdk-pixbufサポート付きの検証 — gdk-pixbufサポート付きであなたのプログラムが期待通りに動作しているかを検証します。

概要

void                gdkcut_pixbuf_assert_equal          (const GdkPixbuf *expected,
                                                         const GdkPixbuf *actual,
                                                         guint threshold,
                                                         ...);

説明

詳細

gdkcut_pixbuf_assert_equal ()

void                gdkcut_pixbuf_assert_equal          (const GdkPixbuf *expected,
                                                         const GdkPixbuf *actual,
                                                         guint threshold,
                                                         ...);

expected == actualが成り立つときパスします。もし、対応するピクセル値のそれぞれの違いがしきい値以内の場合はexpectedactualは同じ画像として扱います。

もし、しきい値が3、expectedの(1, 1)のピクセル値が127、actualの(1, 1)のピクセル値が131とすると、actualexpectedは等しくありません。もし、actualの(1, 1)のピクセル値が130ならactualexpectedは等しいかもしれません。(等しくなるためには、他のすべての対応するピクセル値がこの条件を満たしている必要があります。)

expected :

期待するGdkPixbuf

actual :

実際のGdkPixbuf

threshold :

ピクセルの違いを検出するために使われるしきい値。

... :

追加メッセージ(省略可能)。詳細はcut_message()を見てください。

1.0.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/install-to-ubuntu.html0000644000175000017500000001024511525703040025206 0ustar koukou Ubuntuへインストール

Ubuntuへインストール

Ubuntuへインストール — UbuntuへのCutterのインストール方法

はじめに

UbuntuへのCutterのインストール方法を説明します。

インストール

CutterのDebianパッケージが提供されているので、aptitudeでインストールできます。

現在は、Ubuntu Lucid Lynx/Maverick Meerkat i386/amd64用のパッケージのみ提供しています。他のバージョンが必要な場合は メーリングリスト でリクエストしてください。

Lucidの場合は以下のapt lineを書いた/etc/apt/sources.list.d/cutter.listを作成してください。

/etc/apt/sources.list.d/cutter.list:

deb http://cutter.sourceforge.net/ubuntu/ lucid main
deb-src http://cutter.sourceforge.net/ubuntu/ lucid main

Maverickの場合は以下のapt lineを書いた/etc/apt/sources.list.d/cutter.listを作成してください。

/etc/apt/sources.list.d/cutter.list:

deb http://cutter.sourceforge.net/ubuntu/ maverick main
deb-src http://cutter.sourceforge.net/ubuntu/ maverick main

パッケージはkou@cozmixng.org/kou@clear-code.comの鍵でサインしています。信用する場合は鍵を登録します。

% gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31
% gpg --export 1C837F31 | sudo apt-key add -

鍵を登録したらaptitudeでインストールできます。

% sudo aptitude update
% sudo aptitude -V -D install cutter-testing-framework

次のステップ

以上でインストールは完了です。

まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。

cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-0.9.xml0000644000175000017500000000214611525702757023635 0ustar koukou ]> C cut_assert_equal_string_array_with_free, function in 検証 cut_assert_false, function in 検証 cut_assert_file_exist, function in 検証 cut_assert_true, function in 検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/SoupCutClient.html0000644000175000017500000004507511525703040024352 0ustar koukou 便利なHTTPクライアントAPI

便利なHTTPクライアントAPI

便利なHTTPクライアントAPI — HTTPクライアントとして動作するためのAPI。

概要

                    SoupCutClient;
                    SoupCutClientClass;
SoupCutClient *     soupcut_client_new                  (void);
void                soupcut_client_set_base             (SoupCutClient *client,
                                                         const gchar *uri);
guint               soupcut_client_send_message         (SoupCutClient *client,
                                                         SoupMessage *message);
guint               soupcut_client_get                  (SoupCutClient *client,
                                                         const gchar *uri,
                                                         const gchar *first_query_name,
                                                         ...);
guint               soupcut_client_get_n_messages       (SoupCutClient *client);
SoupMessage *       soupcut_client_get_latest_message   (SoupCutClient *client);
GMainContext *      soupcut_client_get_async_context    (SoupCutClient *client);

オブジェクト階層

  GObject
   +----SoupCutClient

プロパティ

  "async"                    gboolean              : Read / Write

説明

SoupCutClientオブジェクトはHTTPクライアントとして動作します。SoupCutClientは複数のリクエストやレスポンスを管理することができます。また、SoupCutClientに関連するアサーションのAPIも提供しています。

詳細

SoupCutClient

typedef struct _SoupCutClient SoupCutClient;


SoupCutClientClass

typedef struct {
    GObjectClass parent_class;
} SoupCutClientClass;


soupcut_client_new ()

SoupCutClient *     soupcut_client_new                  (void);

新たにSoupCutClientオブジェクトを生成して返します。

戻り値 :

SoupCutClientオブジェクト。

1.0.8から


soupcut_client_set_base ()

void                soupcut_client_set_base             (SoupCutClient *client,
                                                         const gchar *uri);

clientのベースURIをuriに設定します。

client :

SoupCutClientオブジェクト。

uri :

ベースURIの文字列。

1.0.8から


soupcut_client_send_message ()

guint               soupcut_client_send_message         (SoupCutClient *client,
                                                         SoupMessage *message);

clientを使ってmessageを送信します。clientは過去に送信した全てのSoupMessageの情報を保持しています。

client :

SoupCutClientオブジェクト。

message :

SoupMessageオブジェクト。

戻り値 :

レスポンスのステータスコード。

1.0.8から


soupcut_client_get ()

guint               soupcut_client_get                  (SoupCutClient *client,
                                                         const gchar *uri,
                                                         const gchar *first_query_name,
                                                         ...);

uriとクエリパラメータで指定されたURIにGETリクエストを送信します。もしもclientのベースURIがsoupcut_client_set_base()によって設定されていた場合は、URIはベースURIとuriを組み合わせたものとなります。そうでない場合は、uriは絶対URIである必要があります。

client :

SoupCutClientオブジェクト。

uri :

URI文字列。

first_query_name :

ひとつめのクエリパラメータの名前

... :

first_query_nameから始まる、クエリパラメータの名前と値のペア。最後にNULLを指定しなければいけません。

戻り値 :

レスポンスのステータスコード。

1.0.8から


soupcut_client_get_n_messages ()

guint               soupcut_client_get_n_messages       (SoupCutClient *client);

clientが送信した#SoupMessageの数。

client :

SoupCutClientオブジェクト。

戻り値 :

SoupMessageの数。

1.0.8から


soupcut_client_get_latest_message ()

SoupMessage *       soupcut_client_get_latest_message   (SoupCutClient *client);

clientが最後に送信したSoupMessageオブジェクト。

client :

SoupCutClientオブジェクト。

戻り値 :

最後に送信されたSoupMessageオブジェクト。

1.0.8から


soupcut_client_get_async_context ()

GMainContext *      soupcut_client_get_async_context    (SoupCutClient *client);

clientの非同期コンテキスト。

client :

SoupCutClientオブジェクト。

戻り値 :

clientGMainContextNULLが返る可能性があります。

1.0.8から

プロパティ詳細

"async"プロパティ

  "async"                    gboolean              : Read / Write

セッションが非同期の場合は真。

デフォルト値: FALSE

cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.1.6.xml0000644000175000017500000001141411525702763023765 0ustar koukou ]> C cut_build_fixture_path, function in テストユーティリティ cut_get_fixture_data, function in テストユーティリティ E gcut_event_loop_add_idle, function in GCutEventLoop gcut_event_loop_add_idle_full, function in GCutEventLoop gcut_event_loop_add_timeout, function in GCutEventLoop gcut_event_loop_add_timeout_full, function in GCutEventLoop gcut_event_loop_iterate, function in GCutEventLoop gcut_event_loop_quit, function in GCutEventLoop gcut_event_loop_remove, function in GCutEventLoop gcut_event_loop_run, function in GCutEventLoop gcut_event_loop_watch_child, function in GCutEventLoop gcut_event_loop_watch_child_full, function in GCutEventLoop gcut_event_loop_watch_io, function in GCutEventLoop G gcut_get_fixture_data, function in GLibサポート付きテストユーティリティ gcut_glib_event_loop_new, function in GCutGLibEventLoop P gcut_process_get_event_loop, function in GCutProcess gcut_process_set_event_loop, function in GCutProcess T gcut_take_new_string, function in GLibサポート付きテストユーティリティ gcut_take_string, function in GLibサポート付きテストユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-writing-helper.html0000644000175000017500000014337111525703040030020 0ustar koukou 検証作成の補助

検証作成の補助

検証作成の補助 — このセクションにあるシンボルは独自検証を作成することを補助します。

概要

void                cut_test_pass                       (void);
void                cut_test_fail                       (const char *system_message,
                                                         ...);
void                cut_test_fail_va_list               (const char *system_message,
                                                         const char *user_message_format);
#define             CUT_RELATIVE_PATH
void                cut_push_backtrace                  (const char *expression);
void                cut_pop_backtrace                   (void);
#define             cut_trace                           (expression)
#define             cut_trace_with_info_expression      (expression,
                                                         info_expression)
const char *        cut_append_diff                     (const char *message,
                                                         const char *from,
                                                         const char *to);
#define             cut_set_expected                    (expected)
#define             cut_set_actual                      (actual)
const char *        cut_inspect_string_array            (const char **strings);
cut_boolean         cut_equal_string                    (const char *string1,
                                                         const char *string2);
cut_boolean         cut_equal_double                    (double double1,
                                                         double double2,
                                                         double error);
#define             cut_equal_sockaddr                  (address1,
                                                         address2)
#define             cut_inspect_sockaddr                (address)
const char *        cut_get_test_directory              (void);
const char *        cut_get_source_directory            (void);

説明

読みやすいテストを書くために独自の検証を作成する必要があるでしょう。このセクションのシンボルは独自の検証作成を補助します。

例:

my-assertions.h:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef __MY_ASSERTIONS_H__
#define __MY_ASSERTIONS_H__

#include <cutter.h>

#ifdef __cplusplus
extern "C" {
#endif

#define my_assert_equal_int(expected, actual)                    \
    cut_trace_with_info_expression(                              \
        my_assert_equal_int_helper((expected), (actual),         \
                                   # expected, # actual),        \
        my_assert_equal_int(expected, actual, __VA_ARGS__))

void my_assert_equal_int_help (long expected,
                               long actual,
                               const char *expression_expected,
                               const char *expression_actual);

#ifdef __cplusplus
}
#endif

#endif

my-assertions.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "my-assertions.h"

void
my_assert_equal_int_helper (long expected,
                            long actual,
                            const char *expression_expected,
                            const char *expression_actual)
{
    if (expected == actual) {
        cut_test_pass();
    } else {
        cut_test_fail(cut_take_printf("<%s == %s>\n"
                                      "expected: <%ld>\n"
                                      "  actual: <%ld>",
                                      expression_expected,
                                      expression_actual,
                                      expected, actual));
    }
}

Makefile.am:

1
2
3
4
5
AM_CFLAGS = $(CUTTER_CFLAGS)
LIBS = $(CUTTER_LIBS)
noinst_LTLIBRARIES = libmy-assertions.la
libmy_assertions_la_SOURCES = my-assertions.c my-assertions.h
AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined

詳細

cut_test_pass ()

void                cut_test_pass                       (void);

検証をパスしたらcut_test_pass()を呼んでください。cut_test_pass()は検証数を増やします。

1.0.5から


cut_test_fail ()

void                cut_test_fail                       (const char *system_message,
                                                         ...);

検証が失敗したらcut_test_fail()を呼んでください。cut_test_fail()は失敗数を増やし、現在のテストを中断します。

system_message :

テストフレームワーク指定の失敗メッセージ。

... :

省略可能な整形文字列。以降のパラメータが整形文字列に挿入されます。(printf()と同じ。)このパラメータは0.1.6から非推奨となっています。代わりにcut_set_message()を使ってください。

1.0.5から


cut_test_fail_va_list ()

void                cut_test_fail_va_list               (const char *system_message,
                                                         const char *user_message_format);

Warning

cut_test_fail_va_listはバージョン1.0.6から非推奨になりました。新しく書くコードでは使わないで下さい。代わりにcut_test_fail()を使ってください。

cut_test_fail_va_list()の動作についてはcut_test_fail()を見てください。user_message_formatは可変長引数の1つ前の引数です。

例:

1
2
3
4
5
6
7
8
9
10
11
void
my_assert(cut_boolean result,
          const gchar *user_message_format,
          ...)
{
    if (result) {
        cut_test_pass();
    } else {
        cut_test_fail_va_list("Fail!", user_message_format);
    }
}

system_message :

テストフレームワーク指定の失敗メッセージ。

user_message_format :

ユーザ指定の失敗メッセージ。

1.0.5から


CUT_RELATIVE_PATH

#  define CUT_RELATIVE_PATH NULL

もし、テスト用の補助ライブラリを共有ライブラリとして使っている場合は、補助ライブラリのソースコード中またはビルドオプション(例: -DCUT_RELATIVE_PATH=\""sub/dir/"\")でこのマクロを定義してください。もし、このパスが設定されていない場合はcut_trace()cut_trace_with_info_expression()で正しいパスが得られません。

説明用のディレクト構成例です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--- core-lib/ --- XXX.c # コアライブラリ
 |             +- ...
 |             +- YYY.c
 +- util-lib/ --- AAA.c # 便利ライブラリ
 |             +- ...
 |             +- BBB.c
 |
 +- test/ --- core/ --- test-XXX.c # コアライブラリのテスト
           |         +- ...
           |         +- test-YYY.c
           +- util/ --- test-AAA.c # 便利ライブラリのテスト
           |         +- ...
           |         +- test-BBB.c
           +- lib/  --- my-assertions.c # テスト用補助ライブラリ
                     +- my-assertions.h # テスト中(
                     |                  # test/core/test-*.soと
                     |                  # test/util/test-*.soの中)
                     |                  # で共有ライブラリとして使われる
                     +- ...

  % cutter --source-directory=test test

上記の構成例では、test/lib/my-assertions.cではCUT_RELATIVE_PATHを"lib"と定義しなければいけません。これは、:source-directoryコマンドラインオプションで指定した"test"ソースディレクトリからみてlib/ディレクトリにmy-assertions.cがあるからです。

コードとビルドオプションの例です。

1
2
3
4
5
6
test/lib/my-assertions.c:
  #define CUT_RELATIVE_PATH "lib"
  #include <cutter.h>

build option:
  % gcc -DCUT_RELATIVE_PATH="\"lib\"" ...

1.0.6から


cut_push_backtrace ()

void                cut_push_backtrace                  (const char *expression);

expressionと現在のソースの場所をバックトレーススタックにプッシュします。

通常は直接使う必要はありません。cut_trace()で十分です。

expression :

呼び出されたことを記録される式。

1.0.6から


cut_pop_backtrace ()

void                cut_pop_backtrace                   (void);

バックトレーススタックからバックトレースをポップします。

通常は直接使う必要はありません。cut_trace()で十分です。

1.0.6から


cut_trace()

#define             cut_trace(expression)

現在のファイル名、行番号、関数名、expressionを記憶し、expression内で検証が失敗した場合に表示します。expressionの多くは関数呼び出しになるでしょう。

expressionの戻り値を取得できないことに注意してください。

cut_trace()は以下の通りです。もし、cut_assert_not_null(object)が失敗したら、バックトレースには2行含まれます。cut_assert_not_null(object)とcreate_my_object("my-name")です。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static MyObject *object;

static void
create_my_object(const char *name)
{
    object = my_object_new(name);
    cut_assert_not_null(object);
}

void
test_my_object_name(void)
{
    cut_trace(create_my_object("my-name"));
    cut_assert_equal_string("my-name",
                            my_object_get_name(object));
}

テストを読みやすくするためにcut_trace()を使ったマクロを書くかもしれません:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static MyObject *object;

static void
create_my_object_helper(const char *name)
{
    object = my_object_new(name);
    cut_assert_not_null(object);
}

#define create_my_object(...)                        \
    cut_trace(create_my_object_helper(__VA_ARGS__))

void
test_my_object_name(void)
{
    create_my_object("my-name");
    cut_assert_equal_string("my-name",
                            my_object_get_name(object));
}

expression :

呼び出されたことを記録される式。

1.0.5から


cut_trace_with_info_expression()

#define             cut_trace_with_info_expression(expression, info_expression)

cut_trace()cut_trace_with_info_expression()の違いは記録される式がexpressionと同じかどうかです。cut_trace_with_info_expression()はバックトレースの読みやすさのためにexpressionから情報を隠したいときに便利です。

cut_trace_with_info_expression()の例です。cut_assert_not_null(object)が失敗すると以下の2行を含んだバックトレースが得られます:

  • cut_assert_not_null(object)

  • create_my_object_helper("my-name")ではなくcreate_my_object("my-name")

もし、cut_trace_with_info_expression()ではなくcut_trace()を使った場合はcreate_my_object_helper("my-name")になります。もし、create_my_object_helper("my-name")が得られたら以下のように混乱してしまうかもしれません。「create_my_object_helper("my-name")はどこからきたんだ?test_my_object_name()はcreate_my_object("my-name")は使っているけど、create_my_object_helper("my-name")は使っていないぞ。」

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static MyObject *object;

static void
create_my_object_helper(const char *name)
{
    object = my_object_new(name);
    cut_assert_not_null(object);
}

#define create_my_object(...)                        \
    cut_trace_with_info_expression(                  \
        create_my_object_helper(__VA_ARGS__),        \
        create_my_object(__VA_ARGS__))

void
test_my_object_name(void)
{
    create_my_object("my-name");
    cut_assert_equal_string("my-name",
                            my_object_get_name(object));
}

expression :

呼び出されたことを記録される式。

info_expression :

呼び出されたと記録される式。

1.0.5から


cut_append_diff ()

const char *        cut_append_diff                     (const char *message,
                                                         const char *from,
                                                         const char *to);

Warning

cut_append_diffはバージョン1.0.9から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_set_expected()cut_set_actual()を使ってください。

fromtoのdiffを計算し、そのdiffをmessageに追加します。戻り値の文字列の所有者はCutterです。

message :

diffが追加される文字列。

from :

元の文字列。

to :

修正された文字列。

戻り値 :

fromto間のdiff付きのmessage。必要なさそうなdiffであればmessageと同じ。開放しないでください。

1.0.3から


cut_set_expected()

#define             cut_set_expected(expected)

次の検証で使う詳細化した期待値オブジェクトを設定します。

期待値オブジェクトと実際値オブジェクトの両方が設定され、それらのdiffが必要な場合は自動的にdiffを生成します。

cut_set_actual()も見てください。

expected :

期待値オブジェクトの詳細。

1.0.9から


cut_set_actual()

#define             cut_set_actual(actual)

次の検証で使う詳細化した実際値オブジェクトを設定します。

期待値オブジェクトと実際値オブジェクトの両方が設定され、それらのdiffが必要な場合は自動的にdiffを生成します。

cut_set_expected()も見てください。

actual :

実測値オブジェクトの詳細。

1.0.9から


cut_inspect_string_array ()

const char *        cut_inspect_string_array            (const char **strings);

stringsを人が読みやすい文字列に整形します。整形された文字列の所有者はCutterです。

strings :

整形される文字列の配列。

戻り値 :

Cutterが所有する整形された文字列。解放しないで下さい。

cut_equal_string ()

cut_boolean         cut_equal_string                    (const char *string1,
                                                         const char *string2);

string1string2を比較します。string1あるいはstring2、または両方がNULLでもかまいません。

string1 :

文字列。

string2 :

文字列。

戻り値 :

string1string2が両方NULL、あるいは同じ内容の場合はCUT_TRUE、そうでない場合はCUT_FALSE

1.0.5から


cut_equal_double ()

cut_boolean         cut_equal_double                    (double double1,
                                                         double double2,
                                                         double error);

double1double2を誤差範囲errorで比較します。

double1 :

浮動小数点値。

double2 :

浮動小数点値。

error :

誤差範囲を示す浮動小数点数。

戻り値 :

|double1 - double2| <= errorならCUT_TRUE、そうでなければCUT_FALSE

1.0.5から


cut_equal_sockaddr()

#define             cut_equal_sockaddr(address1, address2)

address1address2を比較します。

この関数はCUT_DISABLE_SOCKET_SUPPORTを定義すると無効にできます。

address1 :

ソケットアドレス。

address2 :

ソケットアドレス。

戻り値 :

sub_processが異常終了したときはCUT_TRUE、そうでない場合はCUT_FALSE

1.1.1から


cut_inspect_sockaddr()

#define             cut_inspect_sockaddr(address)

addressを人が読みやすい文字列に整形します。整形された文字列の所有者はCutterです。

この関数はCUT_DISABLE_SOCKET_SUPPORTを定義すると無効にできます。

address :

詳細化されるソケットアドレス。

戻り値 :

Cutterが所有する整形されたソケットアドレス。解放しないで下さい。

1.1.1から


cut_get_test_directory ()

const char *        cut_get_test_directory              (void);

コマンドラインで指定されたテストディレクトリ名を返します。

戻り値 :

Cutterが所有する文字列。解放しないで下さい。

1.1.4から


cut_get_source_directory ()

const char *        cut_get_source_directory            (void);

コマンドラインで指定されたソースディレクトリ名を返します。

戻り値 :

Cutterが所有する文字列。解放しないで下さい。

1.1.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-diff.html0000644000175000017500000001324311525703040023302 0ustar koukou cut-diff

cut-diff

cut-diff — 色付きで2つのファイルの違いを表示

名前

cut-diff - 色付きで2つのファイルの違いを表示

書式

cut-diff [ オプション... ] ファイル1 ファイル2

説明

cut-diffはCutterで使用している差分表示機能を利用したdiffコマンドです。色付きでわかりやすく差分を表示したい場合に便利です。patchコマンドと一緒に使う、色がなくても問題ない、などの場合は通常のdiffコマンドがおすすめです。

オプション

--version

バージョンを表示して終了します。

-c [yes|true|no|false|auto], --color=[yes|true|no|false|auto]

色付きで差分を表示するかどうかを指定します。 yes または true の場合は色付きで表示します。 no または false の場合は色なしで表示します。 auto の場合は色付けできそうな場合は色付きで表示し、そうでない場合は色なしで表示します。

デフォルトはautoです。

-u, --unified

unified diff形式で出力します。

--context-lines=LINES

差分の周辺 LINES 行を表示します。

デフォルトでは全部の行を表示します。unified diff形式の場合は3行です。

--label=LABEL, -L=LABEL

ヘッダのラベルに LABEL を使います。1つめの --label オプションで指定した値は file1 のラベルになり、2つめの --label オプションで指定した値は file2 のラベルになります。

デフォルトではファイル名を使います。

終了ステータス

エラーが発生した場合は0以外、そうでない場合は0を返します。

TODO: 変更がない場合は0、変更があった場合は1、エラーが起きた場合は2を返すこと。

以下の例は、 file1file2 の差分を表示します。

% cut-diff file1 file2

以下の例は、 file1file2 の差分をunified diff形式で表示します。

% cut-diff -u file1 file2

関連項目

diff(1)

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertion-Utilities-for-GValue.html0000644000175000017500000001744611525703040031003 0ustar koukou GValue用の検証ユーティリティ

GValue用の検証ユーティリティ

GValue用の検証ユーティリティ — GValueに関する検証をもっと簡単に書くためのユーティリティ。

概要

gboolean            gcut_value_equal                    (const GValue *value1,
                                                         const GValue *value2);
void                gcut_value_register_equal_func      (GType type1,
                                                         GType type2,
                                                         GEqualFunc equal_func);

説明

検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。

このユーティリティはGValueに関する検証を作成を補助します。

詳細

gcut_value_equal ()

gboolean            gcut_value_equal                    (const GValue *value1,
                                                         const GValue *value2);

ふたつのGValuevalue1value2を登録された比較関数で比較します。(GValueの比較関数の登録方法についてはgcut_value_register_equal_func()を見てください。)

value1 :

比較するGValue

value2 :

比較するGValue

戻り値 :

value1value2が等しいときはTRUE、そうでない場合はFALSE。

1.0.5から


gcut_value_register_equal_func ()

void                gcut_value_register_equal_func      (GType type1,
                                                         GType type2,
                                                         GEqualFunc equal_func);

例:

1
TODO

type1GValuetype2GValueの等価性を調べる関数を登録します。

type1 :

比較するGValueGType

type2 :

比較するGValueGType

equal_func :

type1GValuetype2GValueを比較する関数。

1.0.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter.devhelp0000644000175000017500000016755511525703037023620 0ustar koukou cutter-testing-framework-1.1.7/doc/reference/ja/html/left.png0000644000175000017500000000071311525703037022357 0ustar koukouPNG  IHDRw=bKGD pHYs  ~tIME1&[(XIDATx!OPE*ID%~ꊯ"p'ŏ`sܖrKf hmiIz}ܯI.p\`x l?l[,Hk<#c%\AUx[S7n6rzEs1j@NL$ݤi0 5/}\EKIo͓$a0jdFbkIAh>WlC'?tk;|/t*INZ^`y4Nr]׮ J<ڐt`X1@p䀸dZ')hK $V?%]+LsgUK"w53OIENDB`cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Assertions-with-C++-support.html0000644000175000017500000001410711525703040030230 0ustar koukou C++サポート付きの検証

C++サポート付きの検証

C++サポート付きの検証 — C++サポート付きであなたのプログラムが期待通りに動作しているかを検証します。

概要

#define             cppcut_assert_equal                 (expected,
                                                         actual,
                                                         ...)

説明

詳細

cppcut_assert_equal()

#define             cppcut_assert_equal(expected, actual, ...)

この検証はテンプレートを利用しています。任意のオブジェクトのリファレンスをexpectedactualに渡せます。

expected == actualが成り立つときパスします。

例:

1
2
3
cppcut_assert_equal(3, 1 + 2);
cppcut_assert_equal(3, 1 + 2, cppcut_message("easy expression"));
cppcut_assert_equal(3, 1 + 2, cppcut_message() << "easy expression"));

expected :

期待値。

actual :

実測値。

... :

追加メッセージ(省略可能)。詳細はcppcut_message()を見てください。

1.0.9から

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-test-utils.xml0000644000175000017500000011760211525703005024517 0ustar koukou ]> GLibサポート付きテストユーティリティ 3 Cutterライブラリ GLibサポート付きテストユーティリティ テストをもっと簡単に書くためのGLibサポート付きユーティリティ。 概要 GObject * gcut_take_object (GObject *object); GError * gcut_take_error (GError *error); const GList * gcut_take_list (const GList *list, CutDestroyFunction destroy_function); GHashTable * gcut_take_hash_table (GHashTable *hash_table); GString * gcut_take_string (GString *string); GString * gcut_take_new_string (const gchar *string); GList * gcut_list_new (const gpointer element, ...); GList * gcut_list_int_new (guint n, gint value, ...); GList * gcut_list_uint_new (guint n, guint value, ...); GList * gcut_list_string_new (const gchar *value, ...); GList * gcut_list_string_new_array (const gchar **strings); const GList * gcut_take_new_list_int (guint n, gint value, ...); const GList * gcut_take_new_list_uint (guint n, guint value, ...); const GList * gcut_take_new_list_string (const gchar *value, ...); #define gcut_take_new_list_string_backward_compatibility(value, ...) const GList * gcut_take_new_list_string_array (const gchar **strings); #define gcut_take_new_list_object (object, ...) void gcut_list_string_free (GList *list); void gcut_list_object_free (GList *list); GHashTable * gcut_hash_table_string_string_new (const gchar *key, ...); GHashTable * gcut_hash_table_string_string_new_va_list (const gchar *key, va_list args); GHashTable * gcut_take_new_hash_table_string_string (const gchar *key, ...); GString * gcut_get_fixture_data (const gchar *path, ...); 説明 テストを書くためには、テスト環境を前処理・後処理するコードや、検証する結果を準備するコードなどたくさんのコードを書く必要があります。Cutterはもっと簡単にテストを書くためにユーティリティを提供します。 このユーティリティはGLibと一緒に使います。 詳細 gcut_take_object () gcut_take_object GObject * gcut_take_object (GObject *object); objectの所有権をCutterに渡し、objectを返します。 object : Cutterに所有権を渡すGObject 戻り値 :Cutterが所有権をもつobjectg_object_unref()しないでください。 1.0.3から gcut_take_error () gcut_take_error GError * gcut_take_error (GError *error); Cutterにerrorの所有権を渡し、errorそれ自身を返します。 error : Cutterに所有権を渡すGError 戻り値 :Cutterが所有権をもつGErrorg_error_free()しないでください。 1.0.3から gcut_take_list () gcut_take_list const GList * gcut_take_list (const GList *list, CutDestroyFunction destroy_function); listの所有権をCutterに渡し、listそれ自身を返します。 list : Cutterに所有権を渡すGList destroy_function : listの各要素を破棄する関数、またはNULL 戻り値 :Cutterが所有権を持つGListg_list_free()しないでください。 1.0.3から gcut_take_hash_table () gcut_take_hash_table GHashTable * gcut_take_hash_table (GHashTable *hash_table); hash_tableの所有権をCutterに渡し、hash_tableそれ自身を返します。 hash_table : Cutterに所有権を渡すGHashTable 戻り値 :Cutterが所有権をもつGHashTableg_hash_table_unref()しないでください。 1.0.4から gcut_take_string () gcut_take_string GString * gcut_take_string (GString *string); stringの所有権をCutterに渡し、stringそれ自身を返します。 string : Cutterに所有権を渡すGString 戻り値 :Cutterが所有権を持つGStringg_string_free()しないでください。 1.1.6から gcut_take_new_string () gcut_take_new_string GString * gcut_take_new_string (const gchar *string); 渡された文字列からGStringを作成します。 string : 文字列。NULLも可。 戻り値 :Cutterが所有権を持つGStringg_string_free()しないでください。 1.1.6から gcut_list_new () gcut_list_new GList * gcut_list_new (const gpointer element, ...); 渡された要素を含むリストを作ります。 例: GCutEgg *echo_egg, *cat_egg; echo_egg = gcut_egg_new("echo", "Hello", NULL); cat_egg = gcut_egg_new("cat", "/etc/hosts", NULL); egg_list = gcut_list_new(echo_egg, cat_egg, NULL); element : 最初のgpointer ... : パスの残りの要素。NULL終端。 戻り値 :新しく割り当てられたGList。渡された要素を持ちます。 1.1.1から gcut_list_int_new () gcut_list_int_new GList * gcut_list_int_new (guint n, gint value, ...); 渡された整数からリストを作ります。 例: gcut_list_int_new(3, -10, 1, 29); -> (-10, 1, 29) n : 整数の数。 value : 最初の整数値。 ... : リストの残りの整数値。 戻り値 :渡された整数を含むGListg_list_free()で開放すること。 1.1.5から gcut_list_uint_new () gcut_list_uint_new GList * gcut_list_uint_new (guint n, guint value, ...); 渡された符号無し整数からリストを作ります。 例: gcut_list_uint_new(3, 0, 1, 2); -> (0, 1, 2) n : 符号無し符号整数の数。 value : 最初の符号無し符号整数値。 ... : リストの残りの符号無し符号整数値。 戻り値 :渡された符号無し整数を含むGListg_list_free()で開放すること。 1.1.5から gcut_list_string_new () gcut_list_string_new GList * gcut_list_string_new (const gchar *value, ...); 渡された文字列からリストを作ります。 value : 最初の文字列。 ... : リストの残りの文字列。NULL終端。 戻り値 :渡された文字列を含むGListgcut_list_string_free()で開放すること。 1.0.3から gcut_list_string_new_array () gcut_list_string_new_array GList * gcut_list_string_new_array (const gchar **strings); 渡された文字列配列からリストを作ります。 strings : 文字列の配列。NULL終端。 戻り値 :渡された文字列配列と同じ内容のGListgcut_list_string_free()で開放すること。 1.0.6から gcut_take_new_list_int () gcut_take_new_list_int const GList * gcut_take_new_list_int (guint n, gint value, ...); 渡された整数からリストを作ります。作られたリストはCutterが所有権を持ちます。 例: gcut_take_new_list_int(3, -10, 1, 29); -> (-10, 1, 29) n : 整数の数。 value : 最初の整数値。 ... : リストの残りの文字列。 戻り値 :渡された整数と同じ内容のGList。Cutterが所有権を持ちます。 1.1.5から gcut_take_new_list_uint () gcut_take_new_list_uint const GList * gcut_take_new_list_uint (guint n, guint value, ...); 渡された符号無し整数からリストを作ります。作られたリストはCutterが所有権を持ちます。 例: gcut_take_new_list_uint(3, 0, 1, 2); -> (0, 1, 2) n : 符号無し符号整数の数。 value : 最初の符号無し符号整数値。 ... : リストの残りの文字列。 戻り値 :渡された符号無し整数と同じ内容のGList。Cutterが所有権を持ちます。 1.1.5から gcut_take_new_list_string () gcut_take_new_list_string const GList * gcut_take_new_list_string (const gchar *value, ...); 渡された文字列からリストを作ります。作られたリストはCutterが所有権を持ちます。 value : 最初の文字列。 ... : リストの残りの文字列。NULL終端。 戻り値 :渡された文字列と同じ内容のGList。Cutterが所有権を持ちます。 1.0.5から gcut_take_new_list_string_backward_compatibility() gcut_take_new_list_string_backward_compatibility #define gcut_take_new_list_string_backward_compatibility(value, ...) gcut_take_new_list_string_backward_compatibilityは非推奨です。新しいコードでは使わないでください。 value : ... : gcut_take_new_list_string_array () gcut_take_new_list_string_array const GList * gcut_take_new_list_string_array (const gchar **strings); 渡された文字列の配列からリストを作ります。Cutterが所有権を持ちます。 strings : 文字列の配列。NULL終端。 戻り値 :渡された文字列の配列と同じ内容のGList。Cutterが所有。 1.0.6から gcut_take_new_list_object() gcut_take_new_list_object #define gcut_take_new_list_object(object, ...) 渡されたオブジェクトからリストを作ります。作られたリストはCutterが所有権を持ちます。 object : 最初のGObject ... : リストの残りのオブジェクト。NULL終端。 戻り値 :新しく割り当てられたGList。リストには渡されたオブジェクトが含まれます。Cutterが所有権を持ちます。 1.1.1から gcut_list_string_free () gcut_list_string_free void gcut_list_string_free (GList *list); listlist内にある文字列を開放します。 list : 開放する文字列のリスト。 1.0.3から gcut_list_object_free () gcut_list_object_free void gcut_list_object_free (GList *list); listと中のオブジェクトを破棄します。listNULLが含まれていても大丈夫です。 list : リファレンスを減らしたいGObjectを含んだリスト。 1.1.1から gcut_hash_table_string_string_new () gcut_hash_table_string_string_new GHashTable * gcut_hash_table_string_string_new (const gchar *key, ...); 引数で指定されたキーと値のペアから、文字列のキーと値を持つハッシュテーブルを作成します。 key : 最初のキー文字列。 ... : 残りの引数のNULL終端のリスト。まず、最初のキーの文字列値を指定します。続いて、任意の数だけキー・値のペアを指定します。最後にNULLを指定しなければいけません。 戻り値 :渡されたキー・値を持つGHashTableg_hash_table_unref()で開放してください。 1.0.4から gcut_hash_table_string_string_new_va_list () gcut_hash_table_string_string_new_va_list GHashTable * gcut_hash_table_string_string_new_va_list (const gchar *key, va_list args); 引数で指定されたキーと値のペアから、文字列のキーと値を持つハッシュテーブルを作成します。 key : 最初のキー文字列。 args : 残りの引数のNULL終端のリスト。まず、最初のキーの文字列値を指定します。続いて、任意の数だけキー・値のペアを指定します。最後にNULLを指定しなければいけません。 戻り値 :渡されたキー・値を持つGHashTableg_hash_table_unref()で開放してください。 1.0.5から gcut_take_new_hash_table_string_string () gcut_take_new_hash_table_string_string GHashTable * gcut_take_new_hash_table_string_string (const gchar *key, ...); 渡されたキー・値のペアから文字列のキー・値を持つハッシュテーブルを作成します。作成されたハッシュテーブルはCutterが所有権を持つので、g_hash_table_unref()を呼ばないでください。 key : 最初のキー文字列。 ... : 残りの引数のNULL終端のリスト。まず、最初のキーの文字列値を指定します。続いて、任意の数だけキー・値のペアを指定します。最後にNULLを指定しなければいけません。 戻り値 :渡されたキー・値を持つGHashTable 1.0.5から gcut_get_fixture_data () gcut_get_fixture_data GString * gcut_get_fixture_data (const gchar *path, ...); path/..."にあるフィクスチャデータを読み込み、GStringとして返します。GStringはCutterが所持します。cut_build_fixture_data_path()の説明にはフィクスチャデータのパスがどのように決定されるかが書かれています。 path : フィクスチャデータのパスの最初の要素。 ... : パスの残りの要素。NULL終端が必須です。 戻り値 :フィクスチャデータの内容が入ったGString。GStringはCutterが所持します。開放しないでください。 1.1.6から cutter-testing-framework-1.1.7/doc/reference/ja/html/introduction.html0000644000175000017500000001104511525703040024320 0ustar koukou Part I. はじめに

Part I. はじめに

Table of Contents

Cutterの概要
お知らせ — Cutterの歴史
はじめに — C言語・C++言語用単体テストフレームワークCutterの概要
機能 — Cutterの機能
利用者 — Cutterを使っているプロジェクト・開発者
プラットフォーム毎のCutterのインストール方法
Debian GNU/Linuxへインストール — Debian GNU/LinuxへのCutterのインストール方法
Ubuntuへインストール — UbuntuへのCutterのインストール方法
Fedoraへインストール — FedoraへのCutterのインストール方法
CentOSへインストール — CentOSへのCutterのインストール方法
FreeBSDへインストール — FreeBSDへのCutterのインストール方法
Solarisへインストール — SolarisへのCutterのインストール方法
Mac OS Xへインストール — Mac OS XへのCutterのインストール方法
Cygwinへインストール — CygwinへのCutterのインストール方法
その他のプラットフォームへインストール — その他のプラットフォームへのCutterのインストール方法
はじめよう
チュートリアル — Cutterの使い方
cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-differ.xml0000644000175000017500000000157111525702771023500 0ustar koukou ]> CutDiffer 3 Cutterライブラリ CutDiffer 概要 説明 詳細 cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Test-Utilities.html0000644000175000017500000011341411525703040025776 0ustar koukou テストユーティリティ

テストユーティリティ

テストユーティリティ — テストをもっと簡単に書くためのユーティリティ。

概要

void *              cut_take                            (void *object,
                                                         CutDestroyFunction destroy_function);
const void *        cut_take_memory                     (void *memory);
const char *        cut_take_string                     (char *string);
const char *        cut_take_strdup                     (const char *string);
const char *        cut_take_strndup                    (const char *string,
                                                         size_t size);
const void *        cut_take_memdup                     (const void *memory,
                                                         size_t size);
const char *        cut_take_printf                     (const char *format,
                                                         ...);
char **             cut_take_string_array               (char **strings);
const char *        cut_take_diff                       (const char *from,
                                                         const char *to);
const char *        cut_take_replace                    (const char *target,
                                                         const char *pattern,
                                                         const char *replacement);
#define             cut_take_convert                    (string,
                                                         to_code_set,
                                                         from_code_set)
const char *        cut_take_inspect_string             (const char *string);
void                cut_set_fixture_data_dir            (const char *path,
                                                         ...);
char *              cut_build_fixture_data_path         (const char *path,
                                                         ...);
const char *        cut_build_fixture_path              (const char *path,
                                                         ...);
const char *        cut_get_fixture_data_string         (const char *path,
                                                         ...);
const char *        cut_get_fixture_data                (size_t *size,
                                                         const char *path,
                                                         ...);
void                cut_remove_path                     (const char *path,
                                                         ...);
const char *        cut_build_path                      (const char *path,
                                                         ...);
const char *        cut_build_path_array                (const char **paths);
void                cut_make_directory                  (const char *path,
                                                         ...);

説明

テストを書くためには、テスト環境を前処理・後処理するコードや、検証する結果を準備するコードなどたくさんのコードを書く必要があります。Cutterはもっと簡単にテストを書くためにユーティリティを提供します。

このユーティリティはGLibサポート無しでも使えます。

詳細

cut_take ()

void *              cut_take                            (void *object,
                                                         CutDestroyFunction destroy_function);

objectの所有権をCutterに渡し、object自身を返します。objectdestroy_funcを用いて破棄されます。

object :

Cutterが所有権をもつことになるオブジェクト。

destroy_function :

オブジェクト用の破棄関数。

戻り値 :

Cutterが所有するobject。解放しないで下さい。

1.0.5から


cut_take_memory ()

const void *        cut_take_memory                     (void *memory);

memoryの所有権をCutterに渡し、memory自身を返します。memoryfree()で破棄されます。

memory :

Cutterが所有権を持つことになるメモリ。

戻り値 :

Cutterが所有するmemory。解放しないで下さい。

1.0.5から


cut_take_string ()

const char *        cut_take_string                     (char *string);

stringの所有権をCutterに渡し、stringそれ自身を返します。

string :

Cutterが所有権を持つことになる文字列。

戻り値 :

Cutterが所有するstring。解放しないで下さい。

cut_take_strdup ()

const char *        cut_take_strdup                     (const char *string);

stringを複製し、その所有権をCutterに渡し、複製されたメモリを返します。

string :

複製される文字列。

戻り値 :

Cutterが所有する複製された文字列。解放しないで下さい。

1.0.5から


cut_take_strndup ()

const char *        cut_take_strndup                    (const char *string,
                                                         size_t size);

stringの先頭sizeバイトを複製し、その所有権ををCutterに渡し、複製された文字列を返します。複製された文字列は常にNULL終端しています。

string :

複製される文字列。

size :

複製するバイト数。

戻り値 :

Cutterが所有する複製された文字列。解放しないで下さい。

1.0.5から


cut_take_memdup ()

const void *        cut_take_memdup                     (const void *memory,
                                                         size_t size);

memorysizeバイトを複製し、その所有権をCutterに渡し、複製されたメモリを返します。

memory :

複製されるメモリ。

size :

複製するバイト数。

戻り値 :

Cutterが所有する複製されたメモリ。解放しないで下さい。

1.0.5から


cut_take_printf ()

const char *        cut_take_printf                     (const char *format,
                                                         ...);

printf()のように文字列を整形しますが、整形された文字列はCutterが所有します。

format :

整形文字列。printf()のドキュメントを見てください。

... :

整形文字列に挿入されるパラメータ。

戻り値 :

Cutterが所有する整形された文字列。解放しないで下さい。

cut_take_string_array ()

char **             cut_take_string_array               (char **strings);

配列の所有権をCutterに渡し、stringsそれ自身を返します。

strings :

Cutterが所有権を持つことになる文字列の配列。

戻り値 :

Cutterが所有するstrings。解放しないで下さい。

cut_take_diff ()

const char *        cut_take_diff                       (const char *from,
                                                         const char *to);

fromtoのdiffを計算します。diffの所有者はCutterです。

from :

元の文字列。

to :

修正された文字列。

戻り値 :

Cutterが所有するfromtoのdiff。開放しないでください。

cut_take_replace ()

const char *        cut_take_replace                    (const char *target,
                                                         const char *pattern,
                                                         const char *replacement);

target文字列中で、patternにマッチする部分をreplacementで置き換えます。

target :

置換対象の文字列。

pattern :

正規表現パターン。(文字列で指定)

replacement :

マッチした部分を置き換える文字列。

戻り値 :

Cutterが所有する複製された文字列。解放しないで下さい。

1.0.6から


cut_take_convert()

#define             cut_take_convert(string, to_code_set, from_code_set)

stringのコードセットをfrom_code_setからto_code_setへ変換します。

string :

変換対象の文字列。NULL終端。

to_code_set :

変換先のコードセット名。

from_code_set :

stringのコードセット名。

戻り値 :

Cutterが所有する変換された文字列。解放しないで下さい。

1.1.3から


cut_take_inspect_string ()

const char *        cut_take_inspect_string             (const char *string);

stringの詳細を返す。

string :

詳細な情報を取得したい文字列。NULLまたはNULL終端でなければいけません。

戻り値 :

Cutterが所有する整形された文字列。解放しないで下さい。

1.1.4から


cut_set_fixture_data_dir ()

void                cut_set_fixture_data_dir            (const char *path,
                                                         ...);

cut_get_fixture_data_string()などで使われるフィクスチャデータのディレクトリを指定します。

path :

フィクスチャデータディレクトリのパスの最初の要素。

... :

パスの残りの要素。1.0.7からNULL終端が必須となりました。

1.0.2から


cut_build_fixture_data_path ()

char *              cut_build_fixture_data_path         (const char *path,
                                                         ...);

Warning

cut_build_fixture_data_pathはバージョン1.1.6からヒス衣装になりました。新しく書くコードでは使わないでください。代わりにcut_build_fixture_path()を使ってください。

フィクスチャデータへのパスを生成します。もし、pathが相対パスなら、パスはcut_set_fixture_data_dir()で指定したディレクトリか、現在のディレクトリからの相対パスとして処理されます。

path :

フィクスチャデータのパスの最初の要素。

... :

パスの残りの要素。1.0.7からNULL終端が必須となりました。

戻り値 :

フィクスチャデータのパス。返された文字列が必要なくなったときは開放してください。

1.0.2から


cut_build_fixture_path ()

const char *        cut_build_fixture_path              (const char *path,
                                                         ...);

フィクスチャデータへのパスを生成します。もし、pathが相対パスなら、パスはcut_set_fixture_data_dir()で指定したディレクトリか、現在のディレクトリからの相対パスとして処理されます。

path :

フィクスチャデータのパスの最初の要素。

... :

パスの残りの要素。NULL終端が必須です。

戻り値 :

Cutterが所有するフィクスチャデータのパス。解放しないで下さい。

1.1.6から


cut_get_fixture_data_string ()

const char *        cut_get_fixture_data_string         (const char *path,
                                                         ...);

"path/..."にあるフィクスチャデータを読み込み、文字列として返します。文字列はCutterが所持します。cut_build_fixture_data_path()の説明にはフィクスチャデータのパスがどのように決定されるかが書かれています。

path :

フィクスチャデータのパスの最初の要素。

... :

パスの残りの要素。1.0.7からNULL終端が必須となりました。

戻り値 :

フィクスチャデータの内容。Cutterが所有しているので開放しないください。

1.0.2から


cut_get_fixture_data ()

const char *        cut_get_fixture_data                (size_t *size,
                                                         const char *path,
                                                         ...);

"path/..."にあるフィクスチャデータを読み込み、文字列として返します。文字列はCutterが所持します。cut_build_fixture_data_path()の説明にはフィクスチャデータのパスがどのように決定されるかが書かれています。

size :

フィクスチャデータのサイズを返すアドレスまたはNULL

path :

フィクスチャデータのパスの最初の要素。

... :

パスの残りの要素。NULL終端が必須です。

戻り値 :

フィクスチャデータの内容。Cutterが所有しているので開放しないください。

1.1.6から


cut_remove_path ()

void                cut_remove_path                     (const char *path,
                                                         ...);

pathと、その下にあるパスを再帰的に削除します。いかなるエラーも報告しません。

path :

削除するパスの最初の要素。

... :

パスの残りの要素。1.0.7からNULL終端が必須となりました。

1.0.2から


cut_build_path ()

const char *        cut_build_path                      (const char *path,
                                                         ...);

pathと続く要素を使ってパスを作ります。

path :

パスの最初の要素。

... :

パスの残りの要素。NULL終端。

戻り値 :

Cutterが所有する作成したパス。解放しないで下さい。

1.0.7から


cut_build_path_array ()

const char *        cut_build_path_array                (const char **paths);

pathsからパスを作ります。

paths :

パスの要素を含んだNULL終端の文字列の配列。

戻り値 :

Cutterが所有する作成したパス。解放しないで下さい。

1.1.5から


cut_make_directory ()

void                cut_make_directory                  (const char *path,
                                                         ...);

pathと、その途中にあるパスを再帰的に作成します。いかなるエラーも報告しません。

path :

作成するパスの最初の要素。

... :

パスの残りの要素。NULL終端。

1.1.1から

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-string-io-channel.xml0000644000175000017500000004100711525703004025715 0ustar koukou ]> gcut-string-io-channel 3 Cutterライブラリ gcut-string-io-channel 概要 GIOChannel * gcut_string_io_channel_new (const gchar *initial); GString * gcut_string_io_channel_get_string (GIOChannel *channel); void gcut_string_io_channel_clear (GIOChannel *channel); gsize gcut_string_io_channel_get_buffer_limit (GIOChannel *channel); void gcut_string_io_channel_set_buffer_limit (GIOChannel *channel, gsize limit); gsize gcut_string_io_channel_get_limit (GIOChannel *channel); void gcut_string_io_channel_set_limit (GIOChannel *channel, gsize limit); gboolean gcut_string_io_channel_get_read_fail (GIOChannel *channel); void gcut_string_io_channel_set_read_fail (GIOChannel *channel, gboolean read_fail); gboolean gcut_string_io_channel_get_pipe_mode (GIOChannel *channel); void gcut_string_io_channel_set_pipe_mode (GIOChannel *channel, gboolean pipe_mode); GMainContext * gcut_string_io_channel_get_main_context (GIOChannel *channel); void gcut_string_io_channel_set_main_context (GIOChannel *channel, GMainContext *main_context); 説明 詳細 gcut_string_io_channel_new () gcut_string_io_channel_new GIOChannel * gcut_string_io_channel_new (const gchar *initial); initial : 戻り値 : gcut_string_io_channel_get_string () gcut_string_io_channel_get_string GString * gcut_string_io_channel_get_string (GIOChannel *channel); channel : 戻り値 : gcut_string_io_channel_clear () gcut_string_io_channel_clear void gcut_string_io_channel_clear (GIOChannel *channel); channel : gcut_string_io_channel_get_buffer_limit () gcut_string_io_channel_get_buffer_limit gsize gcut_string_io_channel_get_buffer_limit (GIOChannel *channel); channel : 戻り値 : gcut_string_io_channel_set_buffer_limit () gcut_string_io_channel_set_buffer_limit void gcut_string_io_channel_set_buffer_limit (GIOChannel *channel, gsize limit); channel : limit : gcut_string_io_channel_get_limit () gcut_string_io_channel_get_limit gsize gcut_string_io_channel_get_limit (GIOChannel *channel); channel : 戻り値 : gcut_string_io_channel_set_limit () gcut_string_io_channel_set_limit void gcut_string_io_channel_set_limit (GIOChannel *channel, gsize limit); channel : limit : gcut_string_io_channel_get_read_fail () gcut_string_io_channel_get_read_fail gboolean gcut_string_io_channel_get_read_fail (GIOChannel *channel); channel : 戻り値 : gcut_string_io_channel_set_read_fail () gcut_string_io_channel_set_read_fail void gcut_string_io_channel_set_read_fail (GIOChannel *channel, gboolean read_fail); channel : read_fail : gcut_string_io_channel_get_pipe_mode () gcut_string_io_channel_get_pipe_mode gboolean gcut_string_io_channel_get_pipe_mode (GIOChannel *channel); channel : 戻り値 : gcut_string_io_channel_set_pipe_mode () gcut_string_io_channel_set_pipe_mode void gcut_string_io_channel_set_pipe_mode (GIOChannel *channel, gboolean pipe_mode); channel : pipe_mode : gcut_string_io_channel_get_main_context () gcut_string_io_channel_get_main_context GMainContext * gcut_string_io_channel_get_main_context (GIOChannel *channel); channel : 戻り値 : gcut_string_io_channel_set_main_context () gcut_string_io_channel_set_main_context void gcut_string_io_channel_set_main_context (GIOChannel *channel, GMainContext *main_context); channel : main_context : cutter-testing-framework-1.1.7/doc/reference/ja/html/index-0-9.html0000644000175000017500000000442011525703040023210 0ustar koukou 0.9での新しいシンボル一覧

0.9での新しいシンボル一覧

C

cut_assert_equal_string_array_with_free, cut_assert_equal_string_array_with_free ()
cut_assert_false, cut_assert_false ()
cut_assert_file_exist, cut_assert_file_exist ()
cut_assert_true, cut_assert_true ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/index-0-5.html0000644000175000017500000000325411525703040023210 0ustar koukou 0.5での新しいシンボル一覧

0.5での新しいシンボル一覧

cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-1-4.html0000644000175000017500000000533311525703040023346 0ustar koukou 1.1.4での新しいシンボル一覧

1.1.4での新しいシンボル一覧

C

cut_assert_equal_file_raw, cut_assert_equal_file_raw()
cut_assert_not_equal_file_raw, cut_assert_not_equal_file_raw()
cut_get_test_directory, cut_get_test_directory ()
cut_take_inspect_string, cut_take_inspect_string ()

G

gcut_assert_not_equal_int64, gcut_assert_not_equal_int64 ()
gcut_assert_not_equal_uint64, gcut_assert_not_equal_uint64 ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/users.html0000644000175000017500000000772111525703040022746 0ustar koukou 利用者

利用者

利用者 — Cutterを使っているプロジェクト・開発者

一覧

  • Cutter : セルフテスト

  • Senna :全文検索エンジン

  • groonga :全文検索エンジンとカラムストア

  • mroonga :バックエンドにgroongaを使うMySQLのストレージエンジン

  • milter manager : milterを効果的に使うためのmilter

  • 風博士 :ブラウザ

  • GtkIEEmbed :インターネットエクスプローラのHTMLレンダリングエンジンを使うためのGTK+用のウィジェットライブラリ

  • GPointingDeviceSettings :ポインティングデバイスを設定するためのGUIツール

  • nfc-tools :オープンソース近距離無線通信(NFC)ライブラリ libnfc を用いた、POSIX準拠OS用の便利なツールを提供するプロジェクト。

  • 海野さん

cutter-testing-framework-1.1.7/doc/reference/ja/html/dark-circle.png0000644000175000017500000000326511525703037023612 0ustar koukouPNG  IHDRddpTsRGBbKGD pHYs  tIME  sLtEXtCommentCreated with GIMPWIDATx]H[gOĐؘi*&\JZ*YLh z /F3zQWn*8lͱNhw%4#~XK45!Mbyߜn *;JNNAe| Tv]@TvoÀ/( ^@Tv}~ *;B-4vTY@=e.D ZE%!f3 EKD "J]xe!m F 3Bdjx0!xM ix(XXRӡnoyP3 ÇՏ_C46}@#d!YNQwU^ne։uuwtHbw2v|_;Gln}7$~YׯnA7Uۋsf׉譓||kE$T<9B. yqCwO_z.^׉UgyM\YW !VYW .mB,'3ο'rM뻽WG'K\HjqVf,¥-q4`!4eⱢDhɈy2!CX&d?pl˄,:!GLQ8p|7$ B@!B Q`7aIENDB`cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-2.html0000644000175000017500000000603111525703040023337 0ustar koukou 1.0.2での新しいシンボル一覧

1.0.2での新しいシンボル一覧

C

cut_assert_equal_fixture_data_string, cut_assert_equal_fixture_data_string ()
cut_assert_path_exist, cut_assert_path_exist ()
cut_assert_path_not_exist, cut_assert_path_not_exist ()
cut_assert_remove_path, cut_assert_remove_path ()
cut_build_fixture_data_path, cut_build_fixture_data_path ()
cut_error_errno, cut_error_errno ()
cut_get_fixture_data_string, cut_get_fixture_data_string ()
cut_remove_path, cut_remove_path ()
cut_set_fixture_data_dir, cut_set_fixture_data_dir ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/cut-colorize-differ.xml0000644000175000017500000000166111525702770025323 0ustar koukou ]> CutColorizeDiffer 3 Cutterライブラリ CutColorizeDiffer 概要 説明 詳細 cutter-testing-framework-1.1.7/doc/reference/ja/html/GCutProcess.html0000644000175000017500000021750011525703040024004 0ustar koukou 外部コマンド

外部コマンド

外部コマンド — 外部コマンドを使うための便利API

概要

#define             GCUT_PROCESS_ERROR
                    GCutProcess;
                    GCutProcessClass;
enum                GCutProcessError;
GQuark              gcut_process_error_quark            (void);
GCutProcess *       gcut_process_new                    (const gchar *command,
                                                         ...);
GCutProcess *       gcut_process_new_command_line       (const gchar *command_line);
GCutProcess *       gcut_process_new_va_list            (const gchar *command,
                                                         va_list args);
GCutProcess *       gcut_process_new_argv               (gint argc,
                                                         gchar **argv);
GCutProcess *       gcut_process_new_strings            (const gchar **command);
GCutProcess *       gcut_process_new_array              (GArray *command);
void                gcut_process_set_flags              (GCutProcess *process,
                                                         GSpawnFlags flags);
GSpawnFlags         gcut_process_get_flags              (GCutProcess *process);
void                gcut_process_set_env                (GCutProcess *process,
                                                         const gchar *name,
                                                         ...);
gchar **            gcut_process_get_env                (GCutProcess *process);
gboolean            gcut_process_run                    (GCutProcess *process,
                                                         GError **error);
GPid                gcut_process_get_pid                (GCutProcess *process);
gint                gcut_process_wait                   (GCutProcess *process,
                                                         guint timeout,
                                                         GError **error);
gboolean            gcut_process_kill                   (GCutProcess *process,
                                                         gint signal_number,
                                                         GError **error);
gboolean            gcut_process_write                  (GCutProcess *process,
                                                         const gchar *chunk,
                                                         gsize size,
                                                         GError **error);
GIOStatus           gcut_process_flush                  (GCutProcess *process,
                                                         GError **error);
GString *           gcut_process_get_output_string      (GCutProcess *process);
GString *           gcut_process_get_error_string       (GCutProcess *process);
GIOChannel *        gcut_process_get_input_channel      (GCutProcess *process);
GIOChannel *        gcut_process_get_output_channel     (GCutProcess *process);
GIOChannel *        gcut_process_get_error_channel      (GCutProcess *process);
GInputStream *      gcut_process_get_output_stream      (GCutProcess *process);
GInputStream *      gcut_process_get_error_stream       (GCutProcess *process);
guint               gcut_process_get_forced_termination_wait_time
                                                        (GCutProcess *process);
void                gcut_process_set_forced_termination_wait_time
                                                        (GCutProcess *process,
                                                         guint timeout);
GCutEventLoop *     gcut_process_get_event_loop         (GCutProcess *process);
void                gcut_process_set_event_loop         (GCutProcess *process,
                                                         GCutEventLoop *loop);

オブジェクト階層

  GObject
   +----GCutProcess

プロパティ

  "command"                  gpointer              : Read / Write

シグナル

  "error"                                          : Run Last
  "error-received"                                 : Run Last
  "output-received"                                : Run Last
  "reaped"                                         : Run Last

説明

GCutProcessは外部コマンドの実行・通信・終了をカプセル化します。GCutProcessはエラーをGErrorとして報告します。エラーはgcut_assert_error()を使うことにより簡単に検証できます。

外部コマンドはgcut_process_new()gcut_process_new_strings()などのようなコンストラクタで指定します。この時点では外部コマンドは実行されません。gcut_process_hatch()で指定された外部コマンドが実行されます。

外部コマンドの標準出力・エラー出力は"output-received"シグナル・"error-received"シグナル、あるいは、gcut_process_get_output()gcut_process_get_error()が返すGIOChannelで取得できます。gcut_process_write()は外部コマンドの標準入力にデータを書き込みます。

外部コマンドの終了を待つためにはgcut_process_wait()を使うことができます。無限待ちを避けるために、タイムアウトを指定することができます。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
static GString *output_string;
static GCutProcess *process;

void
cut_setup (void)
{
    output_string = g_string_new(NULL);
    process = NULL;
}

void
cut_teardown (void)
{
    if (output_string)
        g_string_free(output_string, TRUE);
    if (process)
        g_object_unref(process);
}

static void
cb_output_received (GCutProcess *process, const gchar *chunk, gsize size,
                    gpointer user_data)
{
    g_string_append_len(output_string, chunk, size);
}

void
test_echo (void)
{
    GError *error = NULL;

    process = gcut_process_new("echo", "XXX", NULL);
    g_signal_connect(process, "receive-output",
                     G_CALLBACK(cb_output_received), NULL);

    gcut_process_run(process, &error);
    gcut_assert_error(error);

    gcut_process_wait(process, 1000, &error);
    gcut_assert_error(error);
    cut_assert_equal_string("XXX\n", output_string->str);
}

詳細

GCUT_PROCESS_ERROR

#define GCUT_PROCESS_ERROR           (gcut_process_error_quark())


GCutProcess

typedef struct _GCutProcess GCutProcess;


GCutProcessClass

typedef struct {
    GObjectClass parent_class;

    void (*output_received) (GCutProcess *process,
                             const gchar *chunk,
                             gsize        size);
    void (*error_received)  (GCutProcess *process,
                             const gchar *chunk,
                             gsize        size);
    void (*reaped)          (GCutProcess *process,
                             gint         status);
    void (*error)           (GCutProcess *process,
                             GError      *error);
} GCutProcessClass;


enum GCutProcessError

typedef enum
{
    GCUT_PROCESS_ERROR_COMMAND_LINE,
    GCUT_PROCESS_ERROR_IO_ERROR,
    GCUT_PROCESS_ERROR_ALREADY_RUNNING,
    GCUT_PROCESS_ERROR_NOT_RUNNING,
    GCUT_PROCESS_ERROR_INVALID_OBJECT,
    GCUT_PROCESS_ERROR_INVALID_SIGNAL,
    GCUT_PROCESS_ERROR_PERMISSION_DENIED,
    GCUT_PROCESS_ERROR_TIMEOUT
} GCutProcessError;

GCutProcess関連の操作で返されるエラーコード。

GCUT_PROCESS_ERROR_COMMAND_LINE

コマンドライン関連のエラー。

GCUT_PROCESS_ERROR_IO_ERROR

入出力エラー。

GCUT_PROCESS_ERROR_ALREADY_RUNNING

外部コマンドはすでに実行されています。

GCUT_PROCESS_ERROR_NOT_RUNNING

外部こもアンドが実行されていません。

GCUT_PROCESS_ERROR_INVALID_OBJECT

不正なGCutProcessオブジェクトが渡されました。

GCUT_PROCESS_ERROR_INVALID_SIGNAL

不正なシグナルが渡されました。

GCUT_PROCESS_ERROR_PERMISSION_DENIED

許可がありません。

GCUT_PROCESS_ERROR_TIMEOUT

タイムアウト。

1.1.5から


gcut_process_error_quark ()

GQuark              gcut_process_error_quark            (void);

戻り値 :


gcut_process_new ()

GCutProcess *       gcut_process_new                    (const gchar *command,
                                                         ...);

commandを実行する新しいGCutProcessオブジェクトを生成します。

command :

実行する外部コマンド名。

... :

commandの引数

戻り値 :

GCutProcessオブジェクト。

1.1.5から


gcut_process_new_command_line ()

GCutProcess *       gcut_process_new_command_line       (const gchar *command_line);

command_lineを実行する新しいGCutProcessオブジェクトを生成します。

command_line :

コマンドライン

戻り値 :

GCutProcessオブジェクト。

1.1.5から


gcut_process_new_va_list ()

GCutProcess *       gcut_process_new_va_list            (const gchar *command,
                                                         va_list args);

commandを実行する新しいGCutProcessオブジェクトを生成します。

command :

実行する外部コマンド名。

args :

commandの引数

戻り値 :

GCutProcessオブジェクト。

1.1.5から


gcut_process_new_argv ()

GCutProcess *       gcut_process_new_argv               (gint argc,
                                                         gchar **argv);

commandを実行する新しいGCutProcessオブジェクトを生成します。

argc :

argvの要素数

argv :

実行する外部コマンド名とコマンド引数。

戻り値 :

GCutProcessオブジェクト。

1.1.5から


gcut_process_new_strings ()

GCutProcess *       gcut_process_new_strings            (const gchar **command);

commandを実行する新しいGCutProcessオブジェクトを生成します。

command :

実行する外部コマンド名とコマンド引数。NULL終端。

戻り値 :

GCutProcessオブジェクト。

1.1.5から


gcut_process_new_array ()

GCutProcess *       gcut_process_new_array              (GArray *command);

commandを実行する新しいGCutProcessオブジェクトを生成します。

command :

実行する外部コマンド名とコマンド引数。GArrayは0終端にして下さい。

戻り値 :

GCutProcessオブジェクト。

1.1.5から


gcut_process_set_flags ()

void                gcut_process_set_flags              (GCutProcess *process,
                                                         GSpawnFlags flags);

外部コマンドを実行するときのflagsを設定します。

process :

GCutProcess

flags :

g_spawn_async_with_pipes()に渡すフラグ。

1.1.5から


gcut_process_get_flags ()

GSpawnFlags         gcut_process_get_flags              (GCutProcess *process);

外部コマンドを実行する時のflagsを取得します。

process :

GCutProcess

戻り値 :

外部コマンドを実行するときのフラグ。

1.1.5から


gcut_process_set_env ()

void                gcut_process_set_env                (GCutProcess *process,
                                                         const gchar *name,
                                                         ...);

外部コマンドの環境変数を設定します。

process :

GCutProcess

name :

最初の環境変数名。

... :

nameに対応する値。その後に、名前と値のペアを任意の数だけ指定します。最後の引数はNULLにしてください。

1.1.5から


gcut_process_get_env ()

gchar **            gcut_process_get_env                (GCutProcess *process);

外部コマンドの環境変数を取得します。

process :

GCutProcess

戻り値 :

新しく割り当てられたNULL終端の環境変数のリスト("名前1=値1", "名前2=値2", ..., NULL)を返します。必要がなくなったらg_strfreev()で開放してください。

1.1.5から


gcut_process_run ()

gboolean            gcut_process_run                    (GCutProcess *process,
                                                         GError **error);

新しい外部プロセスを実行します。

process :

GCutProcess

error :

エラーを返すアドレスまたはNULL

戻り値 :

成功したときはTRUE、そうでない場合はFALSE

1.1.5から


gcut_process_get_pid ()

GPid                gcut_process_get_pid                (GCutProcess *process);

実行している外部プロセスのプロセスIDを取得します。外部コマンドが実行されていない場合は0が返ります。

process :

GCutProcess

戻り値 :

実行中の外部コマンドのプロセスID。実行していない場合は0。

1.1.5から


gcut_process_wait ()

gint                gcut_process_wait                   (GCutProcess *process,
                                                         guint timeout,
                                                         GError **error);

実行中の外部プロセスが終了することをtimeoutミリ秒待ちます。外部コマンドがtimeoutミリ秒以内に終了しなかった場合は、GCUT_PROCESS_ERROR_TIMEOUTエラーが設定され、-1が返ります。外部プロセスが実行されていない場合は、GCUT_PROCESS_ERROR_NOT_RUNNINGエラーが設定され、-1が返ります。

process :

GCutProcess

timeout :

タイムアウト時間(ミリ秒)

error :

エラーを返すアドレスまたはNULL

戻り値 :

外部プロセスが終了した場合は終了ステータス。そうでない場合は-1。

1.1.5から


gcut_process_kill ()

gboolean            gcut_process_kill                   (GCutProcess *process,
                                                         gint signal_number,
                                                         GError **error);

外部プロセスにsignal_numberシグナルを送ります。

process :

GCutProcess

signal_number :

外部プロセスに送るシグナル番号。

error :

エラーを返すアドレスまたはNULL

戻り値 :

成功したときはTRUE、そうでない場合はFALSE

1.1.5から


gcut_process_write ()

gboolean            gcut_process_write                  (GCutProcess *process,
                                                         const gchar *chunk,
                                                         gsize size,
                                                         GError **error);

外部プロセスの標準入力にchunkを書き込みます。

process :

GCutProcess

chunk :

書き込むデータ

size :

chunkのサイズ

error :

エラーを返すアドレスまたはNULL

戻り値 :

成功したときはTRUE、そうでない場合はFALSE

1.1.5から


gcut_process_flush ()

GIOStatus           gcut_process_flush                  (GCutProcess *process,
                                                         GError **error);

外部プロセスの標準出力から読み込んだデータ。

process :

GCutProcess

error :

エラーを返すアドレスまたはNULL

戻り値 :

the status of the operation: One of G_IO_STATUS_NORMAL, G_IO_STATUS_AGAIN, or G_IO_STATUS_ERROR.

1.1.5から


gcut_process_get_output_string ()

GString *           gcut_process_get_output_string      (GCutProcess *process);

process :

GCutProcess

戻り値 :

外部プロセスの標準出力の結果をすべて持ったGString

1.1.5から


gcut_process_get_error_string ()

GString *           gcut_process_get_error_string       (GCutProcess *process);

process :

GCutProcess

戻り値 :

外部プロセスの標準エラー出力の結果をすべて持ったGString

1.1.5から


gcut_process_get_input_channel ()

GIOChannel *        gcut_process_get_input_channel      (GCutProcess *process);

外部プロセスの標準入力と結びついたGIOChannelを取得します。

process :

GCutProcess

戻り値 :

外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL

1.1.5から


gcut_process_get_output_channel ()

GIOChannel *        gcut_process_get_output_channel     (GCutProcess *process);

外部プロセスの標準出力と結びついたGIOChannelを取得します。

process :

GCutProcess

戻り値 :

外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL

1.1.5から


gcut_process_get_error_channel ()

GIOChannel *        gcut_process_get_error_channel      (GCutProcess *process);

外部プロセスのエラー出力に結びついたGIOChannelを返します。

process :

GCutProcess

戻り値 :

外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL

1.1.5から


gcut_process_get_output_stream ()

GInputStream *      gcut_process_get_output_stream      (GCutProcess *process);

外部プロセスの標準出力と結びついたGInputStreamを取得します。

process :

GCutProcess

戻り値 :

外部プロセスが実行中の場合はGInputStream。そうでない場合はNULL

1.1.5から


gcut_process_get_error_stream ()

GInputStream *      gcut_process_get_error_stream       (GCutProcess *process);

外部プロセスの標準エラー出力に結びついたGInputStreamを返します。

process :

GCutProcess

戻り値 :

外部プロセスが実行中の場合はGInputStream。そうでない場合はNULL

1.1.5から


gcut_process_get_forced_termination_wait_time ()

guint               gcut_process_get_forced_termination_wait_time
                                                        (GCutProcess *process);

オブジェクトが破棄されるときに行われる外部コマンド強制終了後に待つ時間(ミリ秒)を取得します。

process :

GCutProcess

戻り値 :

破棄時の強制終了待ちの時間。

1.1.5から


gcut_process_set_forced_termination_wait_time ()

void                gcut_process_set_forced_termination_wait_time
                                                        (GCutProcess *process,
                                                         guint timeout);

オブジェクトが破棄されるときに行われる外部コマンド強制終了時に待つ時間(ミリ秒)を設定します。timeoutが0なら外部コマンドの終了を待ちません。デフォルト値は10です。

process :

GCutProcess

timeout :

タイムアウト時間(ミリ秒)

1.1.5から


gcut_process_get_event_loop ()

GCutEventLoop *     gcut_process_get_event_loop         (GCutProcess *process);

processが使っているイベントループを取得します。

process :

GCutProcess

戻り値 :

GCutEventLoop

1.1.6から


gcut_process_set_event_loop ()

void                gcut_process_set_event_loop         (GCutProcess *process,
                                                         GCutEventLoop *loop);

processのイベントループを設定します。loopNULLなら、デフォルトのGLibイベントループが使われます。

process :

GCutProcess

loop :

イベントループまたはNULL

1.1.6から

プロパティ詳細

"command"プロパティ

  "command"                  gpointer              : Read / Write

このプロセスが実行する外部コマンド。

シグナル詳細

"error"シグナル

void                user_function                      (GCutProcess *process,
                                                        gpointer     error,
                                                        gpointer     user_data)      : Run Last

外部プロセス関連のエラーが発生した毎に発行されます。(例: 入出力エラー)

process :

シグナルを受け取るオブジェクト。

error :

外部プロセスのエラー。(GError

user_data :

シグナルハンドラが接続された時にユーザが指定したデータ。

1.1.5から


"error-received"シグナル

void                user_function                      (GCutProcess *process,
                                                        gchar       *chunk,
                                                        guint64      size,
                                                        gpointer     user_data)      : Run Last

外部プロセスが標準エラー出力に出力したデータが読み込まれる毎に発行されます。

外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。

process :

シグナルを受け取るオブジェクト。

chunk :

外部プロセスの標準エラー出力から読み込んだデータ。

size :

chunkのサイズ。(gsize

user_data :

シグナルハンドラが接続された時にユーザが指定したデータ。

1.1.5から


"output-received"シグナル

void                user_function                      (GCutProcess *process,
                                                        gchar       *chunk,
                                                        guint64      size,
                                                        gpointer     user_data)      : Run Last

外部プロセスが標準出力に出力したデータが読み込まれる毎に発行されます。

外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。

process :

シグナルを受け取るオブジェクト。

chunk :

外部プロセスの標準出力から読み込んだデータ。

size :

chunkのサイズ。(gsize

user_data :

シグナルハンドラが接続された時にユーザが指定したデータ。

1.1.5から


"reaped"シグナル

void                user_function                      (GCutProcess *process,
                                                        gint         status,
                                                        gpointer     user_data)      : Run Last

外部プロセスが終了した時に発行されます。

外部コマンドが終了したこと検出するために、g_main_loop_run()g_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。

process :

シグナルを受け取るオブジェクト。

status :

外部プロセスの終了ステータス。

user_data :

シグナルハンドラが接続された時にユーザが指定したデータ。

1.1.5から

cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-CppCutter.html0000644000175000017500000003132611525703040025020 0ustar koukou CppCutter

CppCutter

CppCutter — C++サポート付きのCutter。

概要

#define             CPPCUTTER_ENABLED
#define             CPPCUT_BEGIN_TEST_DECLS
#define             CPPCUT_END_TEST_DECLS
#define             cppcut_message                      (...)

説明

CppCutterはC++で便利な機能をCutterに追加します。C++でテストを書きたい場合はCppCutterの使用を検討してください。

CppCutterを使うことは簡単です。<cutter.h>の代わりに<cppcutter.h>をinlcudeして、cutter.pcの代わりにcppcutter.pcを使うだけです。

test-xxx.cpp:

1
2
-#include <cutter.h>
+#include <cppcutter.h>

configure.ac:

1
2
-AC_CHECK_CUTTER
+AC_CHECK_CPPCUTTER

Makefile.am:

1
2
3
4
-XXX_CFLAGS = $(CUTTER_CFLAGS)
-XXX_LIBS = $(CUTTER_LIBS)
+XXX_CFLAGS = $(CPPCUTTER_CFLAGS)
+XXX_LIBS = $(CPPCUTTER_LIBS)

テスト関数はnamespaceの中に定義します。名前付け規則はCutterと同じです。つまり、'test_...'関数はテスト関数、'setup'または'cut_setup'は初期化関数、'teardown'または'cut_teardown'は後始末関数になります。

test-calc.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cppcutter.h>

namespace calc
{
    void
    test_add (void)
    {
        cppcut_assert_equal(3, calc.add(1, 2));
    }

    void
    test_sub (void)
    {
        cppcut_assert_equal(5, calc.sub(9, 4));
    }
}

新しいテストを追加するときはいつも通り関数を定義するだけです。よくわからないマクロを使う必要はありません。

詳細

CPPCUTTER_ENABLED

#define CPPCUTTER_ENABLED 1

CppCutterが有効なとき定義されます。

1.0.9から


CPPCUT_BEGIN_TEST_DECLS

#define CPPCUT_BEGIN_TEST_DECLS extern "C" {

Warning

CPPCUT_BEGIN_TEST_DECLSはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。

テスト関数のプロトタイプ宣言はCPPCUT_BEGIN_TEST_DECLSCPPCUT_END_TEST_DECLSで囲みます:

1
2
3
4
CPPCUT_BEGIN_TEST_DECLS
void test_add ();
void test_remove ();
CPPCUT_END_TEST_DECLS

このマクロは単にテスト関数のプロトタイプ宣言を'extern "C" {...}'で囲むだけです。

1.0.9から


CPPCUT_END_TEST_DECLS

#define CPPCUT_END_TEST_DECLS }

Warning

CPPCUT_END_TEST_DECLSはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにnamespaceを使ってください。

CPPCUT_BEGIN_TEST_DECLSを見て下さい。

1.0.9から


cppcut_message()

#define             cppcut_message(...)

C++らしいAPIで検証の省略可能なメッセージを指定します。メッセージはprintf()と同じAPIか"<<"を使ったストリームと同じAPIを使って指定します。

例:

1
2
3
4
cppcut_assert_equal("abc", "def",
                    cppcut_message("should fail!"));
cppcut_assert_equal("abc", "def",
                    cppcut_message() << "should fail!");

... :

整形文字列に挿入されるパラメータ。

戻り値 :

1.1.0から

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-enum.xml0000644000175000017500000003404711525703000023342 0ustar koukou ]> GEnumとGFlags用の検証ユーティリティ 3 Cutterライブラリ GEnumとGFlags用の検証ユーティリティ GEnumまたはGFlagsに関する検証をもっと簡単に書くためのユーティリティ。 概要 #define GCUT_ENUM_ERROR GQuark gcut_enum_error_quark (void); enum GCutEnumError; gchar * gcut_enum_inspect (GType enum_type, gint enum_value); gint gcut_enum_parse (GType enum_type, const gchar *enum_value, GError **error); gchar * gcut_flags_inspect (GType flags_type, guint flags_value); guint gcut_flags_parse (GType flags_type, const gchar *flags_value, GError **error); guint gcut_flags_get_all (GType flags_type, GError **error); 説明 検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。 このユーティリティはGEnumまたはGFlagsに関する検証の作成を補助します。 詳細 GCUT_ENUM_ERROR GCUT_ENUM_ERROR #define GCUT_ENUM_ERROR (gcut_enum_error_quark()) 列挙型関連操作用のエラードメインです。このドメインのエラーはGCutEnumError列挙型のどれかです。1.0.6から gcut_enum_error_quark () gcut_enum_error_quark GQuark gcut_enum_error_quark (void); 戻り値 : enum GCutEnumError GCutEnumError typedef enum { GCUT_ENUM_ERROR_INVALID_TYPE, GCUT_ENUM_ERROR_INVALID_VALUE } GCutEnumError; 列挙型関連操作で返されるエラーコード。 GCUT_ENUM_ERROR_INVALID_TYPE 不正な型。 GCUT_ENUM_ERROR_INVALID_VALUE 不正な値。 1.0.6から gcut_enum_inspect () gcut_enum_inspect gchar * gcut_enum_inspect (GType enum_type, gint enum_value); enum_typeの値enum_valueの詳細を返します。返された文字列が必要なくなったときは開放してください。 enum_type : GEnumの型。 enum_value : 詳細を示すGEnumの値。 戻り値 :enum_valueの詳細を示した文字列。 1.0.5から gcut_enum_parse () gcut_enum_parse gint gcut_enum_parse (GType enum_type, const gchar *enum_value, GError **error); enum_valueをパースし、enum_type型の列挙値を返します。enum_valueは列挙名またはニックネームでなければいけません。enum_valueがマッチしない場合はerrorGCutEnumErrorエラーが設定されます。 enum_type : GEnumの型。 enum_value : パースされる文字列。 error : エラーを返すアドレスまたはNULL 戻り値 :enum_valueに対応するenum_typeの値。 1.0.6から gcut_flags_inspect () gcut_flags_inspect gchar * gcut_flags_inspect (GType flags_type, guint flags_value); flags_typeの値flags_valueの詳細を返します。返された文字列が必要なくなったときは開放してください。 flags_type : GFlagsの型。 flags_value : 詳細を示すGFlagsの値。 戻り値 :flags_valueの詳細を示した文字列。 1.0.5から gcut_flags_parse () gcut_flags_parse guint gcut_flags_parse (GType flags_type, const gchar *flags_value, GError **error); flags_valueをパースし、flags_type型のフラグ値を返します。flags_valueは"ニックネームまたは名前1|ニックネームまたは名前2|...|ニックネームまたは名前N"という書式でなければいけません。flags_valueが未知のフラグを含んでいる場合は、errorGCutEnumErrorエラーが設定されます。 flags_type : GFlagsの型。 flags_value : パースされる文字列。 error : エラーを返すアドレスまたはNULL 戻り値 :flags_valueに対応するflags_typeの値。 1.0.6から gcut_flags_get_all () gcut_flags_get_all guint gcut_flags_get_all (GType flags_type, GError **error); すべてのフラグ値が有効なフラグ値を返します。 flags_type : GFlagsの型。 error : エラーを返すアドレスまたはNULL 戻り値 :すべてのフラグ値が有効なフラグ値。 1.0.6から cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-0-7.html0000644000175000017500000000771511525703040023356 0ustar koukou 1.0.7での新しいシンボル一覧

1.0.7での新しいシンボル一覧

C

CUTTER_CHECK_VERSION, CUTTER_CHECK_VERSION()
cut_assert_equal_boolean, cut_assert_equal_boolean ()
cut_assert_equal_substring, cut_assert_equal_substring ()
cut_assert_not_equal_boolean, cut_assert_not_equal_boolean ()
cut_assert_not_equal_double, cut_assert_not_equal_double ()
cut_assert_not_equal_int, cut_assert_not_equal_int ()
cut_assert_not_equal_memory, cut_assert_not_equal_memory ()
cut_assert_not_equal_size, cut_assert_not_equal_size ()
cut_assert_not_equal_string, cut_assert_not_equal_string ()
cut_assert_not_equal_substring, cut_assert_not_equal_substring ()
cut_assert_not_equal_uint, cut_assert_not_equal_uint ()
cut_build_path, cut_build_path ()

G

gcut_assert_not_equal_pid, gcut_assert_not_equal_pid ()
gcut_data_get_boxed, gcut_data_get_boxed ()
GCUT_TYPE_ERROR, GCUT_TYPE_ERROR
cutter-testing-framework-1.1.7/doc/reference/ja/html/api-index-1.1.1.xml0000644000175000017500000000445711525702762023770 0ustar koukou ]> C cut_assert_equal_sockaddr, macro in 検証 cut_equal_sockaddr, macro in 検証作成の補助 cut_inspect_sockaddr, macro in 検証作成の補助 cut_make_directory, function in テストユーティリティ D gcut_data_get_object, macro in 便利なテストデータ用API L gcut_list_new, function in GLibサポート付きテストユーティリティ gcut_list_object_free, function in GLibサポート付きテストユーティリティ T gcut_take_new_list_object, macro in GLibサポート付きテストユーティリティ cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter-Experimental.html0000644000175000017500000003165411525703040025550 0ustar koukou 実験

実験

実験 — 実験的なAPI

概要

#define             cut_fork
#define             cut_wait_process                    (pid,
                                                         usec_timeout)
#define             cut_fork_get_stdout_message         (pid)
#define             cut_fork_get_stderr_message         (pid)

説明

将来、このAPIは変更されるかもしれません。

詳細

cut_fork

#define             cut_fork()

子プロセスを生成します。

例:

1
2
3
4
5
6
7
8
9
10
int pid;
pid = cut_fork();
cut_assert_errno();

if (pid == 0) {
  do_something_for_child_process();
  _exit(EXIT_SUCCESS);
}

do_something_for_parent_process();

戻り値 :

プロセスID。

0.8から


cut_wait_process()

#define             cut_wait_process(pid, usec_timeout)

pidで指定されたプロセスの終了を待ちます。

例:

1
2
3
4
5
6
7
8
9
10
11
int pid;
pid = cut_fork();
cut_assert_errno();

if (pid == 0) {
  do_something_for_child_process();
  _exit(EXIT_SUCCESS);
}

do_something_for_parent_process();
cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));

pid :

終了を待つプロセスのID。

usec_timeout :

タイムアウトする時間。100万分の1秒単位で指定。

0.8から


cut_fork_get_stdout_message()

#define             cut_fork_get_stdout_message(pid)

pidで指定されたプロセスからメッセージを読みます。

例:

1
2
3
4
5
6
7
8
9
10
11
int pid;
pid = cut_fork();
cut_assert_errno();

if (pid == 0) {
  g_print("I'm a child.");
  _exit(EXIT_SUCCESS);
}

cut_assert_equal_string("I'm a child.", cut_fork_get_stdout_message(pid));
cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));

pid :

プロセスID。

戻り値 :

pidで指定されたプロセスの標準出力から読み込まれたメッセージ。

0.8から


cut_fork_get_stderr_message()

#define             cut_fork_get_stderr_message(pid)

pidで指定されたプロセスからメッセージを読みます。

例:

1
2
3
4
5
6
7
8
9
10
11
int pid;
pid = cut_fork();
cut_assert_errno();

if (pid == 0) {
  g_print("I'm a child.");
  _exit(EXIT_SUCCESS);
}

cut_assert_equal_string("I'm a child.", cut_fork_get_stderr_message(pid));
cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100));

pid :

プロセスID。

戻り値 :

pidで指定されたプロセスの標準エラー出力から読み込まれたメッセージ。

0.8から

cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-error.xml0000644000175000017500000001114411525703000023520 0ustar koukou ]> GError用の検証ユーティリティ 3 Cutterライブラリ GError用の検証ユーティリティ GErrorに関する検証をもっと簡単に書くためのユーティリティ。 概要 gboolean gcut_error_equal (const GError *error1, const GError *error2); gchar * gcut_error_inspect (const GError *error); 説明 検証を書くためには等価性を検証し、期待値と実測値を表示する必要があります。 このユーティリティはGErrorに関する検証の作成を補助します。 詳細 gcut_error_equal () gcut_error_equal gboolean gcut_error_equal (const GError *error1, const GError *error2); ふたつのGErrorerror1error2を比較します。 error1 : 比較するGErrorの値。 error2 : 比較するGErrorの値。 戻り値 :error1error2が同じドメイン、コード、メッセージならTRUE、そうでなればFALSE 1.0.5から gcut_error_inspect () gcut_error_inspect gchar * gcut_error_inspect (const GError *error); errorの詳細を返します。返された文字列が必要なくなったときは開放してください。 error : GErrorの値。 戻り値 :errorの詳細を示した文字列。 1.0.5から cutter-testing-framework-1.1.7/doc/reference/ja/html/cutter.xml0000644000175000017500000006741611525702774022773 0ustar koukou ]> Cutter 3 Cutterライブラリ Cutter C言語・C++言語用単体テストフレームワーク 概要 void setup (void); void cut_setup (void); void teardown (void); void cut_teardown (void); void cut_startup (void); void cut_shutdown (void); #define cut_add_data (first_data_name, ...) #define cut_add_data_backward_compatibility (context, ...) #define cut_set_attributes (first_attribute_name, ...) #define cut_get_current_test_context #define cut_set_current_test_context (test_context) void cut_set_message (const char *format, ...); void cut_set_message_va_list (const char *format, va_list args); void cut_keep_message (void); void cut_message (const char *format, ...); #define CUT_EXPORT 説明 Cutterは以下のような特徴をもったC言語・C++言語用の単体テストフレームワークです。 簡単に使えます。Cutterではテストプログラム中にCUTTER_DEFINE_TEST_STARTやCUTTER_DEFINE_TEST_ENDなどといった不思議なマクロを使う必要がありません。通常のプログラムと同じようにテストプログラムを書くことができます。ただし、プログラムが期待した通り動作していることを検証するためにcut_assert_XXX()を使う必要があります。 #include <cutter.h> #include "my-stack.h" void test_my_stack (void) { MyStack *stack = my_stack_new(); cut_assert_not_null(stack); cut_assert(my_stack_is_empty(stack)); cut_assert_equal_int(0, my_stack_get_size(stack)); my_stack_push(stack, 10); cut_assert(!my_stack_is_empty(stack)); cut_assert_equal_int(1, my_stack_get_size(stack)); my_stack_push(stack, 20); cut_assert_equal_int(2, my_stack_get_size(stack)); cut_assert_equal(20, my_stack_pop(stack)); cut_assert(!my_stack_is_empty(stack)); cut_assert_equal_int(1, my_stack_get_size(stack)); cut_assert_equal(10, my_stack_pop(stack)); cut_assert(my_stack_is_empty(stack)); cut_assert_equal_int(0, my_stack_get_size(stack)); } 簡素ですが有用な情報を出力をします。Cutterはデフォルトではテストが問題なく動いているときは静かに動きます。以下は、Cutter自身のテストの出力です。 ........................................................... Finished in 0.213021 seconds 59 test(s), 246 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 notification(s) Cutterはテストが1つパスしたことを示すためには「.」だけを出力し、最後にテスト結果の要約を出力します。Cutterは各テストの名前や何個検証したかなどの情報は表示しません。これは、テスト成功時にはこれらの情報は必要ないからです。Cutterは失敗時にはたくさんの情報を出力します。 .....................F..................................... 1) Failure: test_error <"Strange" == cut_test_result_get_test_name(result)> expected: <Strange!!!> but was: <dummy-error-test> test/test-cut-assertions.c:240: cut_assert_test_result() Finished in 0.223657 seconds 59 test(s), 242 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) 上記の結果はCutterの自己テストにおかしな期待値を追加したために起きています。 cut_assert_equal_string("Strange!!!", cut_test_result_get_test_name(result)); おかしな検証はtest/test-cut-assertions.cの240行目に書かれていて、その行はcut_assert_test_result()関数内にあります。この関数はtest_errorテストから呼び出されています。cut_test_result_get_test_name(result)が"Strange!!!"を返すことを期待していますが、実際は"dummy-error-name"が返ってきています。このような情報を上記のCutterの出力から得ることができます。これはデバッグの手助けになるでしょう。Cutterの出力形式は実用的です。' but was:'はその上の'expected:'と並ぶようにインデントされています。これは期待値と実測値をパッと見て簡単に比較できるようにするためです。問題のあった行は「ファイル名:行: 関数」というように整形されています。これはEmacsと連携するためです。Emacsのcompilation-modeではこの形式が*compilation*バッファに表れると、next-errorコマンド(C-x `)で「ファイル名」の「行」へジャンプすることができます。これは問題行を素早く見つける手助けをします。Cutterは簡単にテストを書くことを支援するだけではなく、簡単にデバッグをできることも支援します。 詳細 setup () setup void setup (void); setupはバージョン1.0.7から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_setup()を使ってください。 テストプログラム中でsetup()を定義していたら、cutterは各テストが実行される前に定義されたsetup()を呼びだします。cut_setup()が定義されていた場合は、setup()は無視されます。 cut_setup () cut_setup void cut_setup (void); テストプログラム中でcut_setup()を定義していたら、cutterは各テストが実行される前に定義されたcut_setup()を呼びだします。cut_setup()setup()が定義されていた場合はcut_setup()だけが使われます。1.0.6から teardown () teardown void teardown (void); teardownはバージョン1.0.7から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_teardown()を使ってください。 テストプログラム中でteardown()を定義していたら、cutterは各テストの後に、たとえテストが失敗していた時でも、teardown()を呼びだします。cut_teardown()が定義されていた場合は、teardown()は無視されます。 cut_teardown () cut_teardown void cut_teardown (void); テストプログラム中でcut_teardown()を定義していたら、cutterは各テストの後に、たとえテストが失敗していた時でも、cut_teardown()を呼びだします。cut_teardown()teardown()が定義されていた場合はcut_teardown()だけが使われます。1.0.6から cut_startup () cut_startup void cut_startup (void); テストプログラム中でcut_startup()を定義していたら、cutterは各テストケースが実行される前に定義されたcut_startup()を呼びだします。cut_startup()startup()が定義されていた場合はcut_startup()だけが使われます。1.0.6から cut_shutdown () cut_shutdown void cut_shutdown (void); テストプログラム中でshutdown()を定義していたら、cutterは各テストケースが実行された後に定義されたshutdown()を呼びだします。cut_shutdown()shutdown()が定義されていた場合はcut_shutdown()だけが使われます。1.0.6から cut_add_data() cut_add_data #define cut_add_data(first_data_name, ...) データ駆動テストで使うデータを追加します。 例: #include <cutter.h> void data_translate (void); void test_translate (const void *data); static const char* translate (int input) { switch(input) { case 1: return "first"; case 111: return "a hundred eleven"; default: return "unsupported"; } } typedef struct _TranslateTestData { char *translated; int input; } TranslateTestData; static TranslateTestData * translate_test_data_new (char *translated, int input) { TranslateTestData *data; data = malloc(sizeof(TranslateTestData)); data->translated = strdup(translated); data->input = input; return data; } static void translate_test_data_free (TranslateTestData *data) { free(data->translated); free(data); } void data_translate(void) { cut_add_data("simple data", translate_test_data_new("first", 1), translate_test_data_free, "complex data", translate_test_data_new("a hundred eleven", 111), translate_test_data_free, NULL); } void test_translate(const void *data) { const TranslateTestData *test_data = data; cut_assert_equal_string(test_data->translated, translate(test_data->input)); } first_data_name : 最初のデータ名。 ... : 最初のデータとデータ破棄関数。続けて任意の数の「名前・データ・データ破棄関数(CutDestroyFunction)」の三つ組を指定します。1.0.6から可変長の引数はNULL終端しなければいけなくなりました。 1.0.3から cut_add_data_backward_compatibility() cut_add_data_backward_compatibility #define cut_add_data_backward_compatibility(context, ...) cut_add_data_backward_compatibilityは非推奨です。新しいコードでは使わないでください。 context : ... : cut_set_attributes() cut_set_attributes #define cut_set_attributes(first_attribute_name, ...) テストの属性を設定します。 例: #include <cutter.h> void attributes_repeat (void); void test_repeat (void); void attributes_repeat(void) { cut_set_attributes("description", "a test for repeat function", "bug", "111", "priority", "high", NULL); } void test_repeat(void) { cut_assert_equal_string_with_free("XXX", repeat("X", 3)); } first_attribute_name : 最初の属性名。 ... : 最初の属性値です。その後に任意個数の名前と値のペアが続きます。1.0.7からNULL終端が必須になりました。 1.0.4から cut_get_current_test_context cut_get_current_test_context #define cut_get_current_test_context() 現在のテストコンテキストを返します。「現在のテストコンテキスト」はスレッドローカルなオブジェクトです。もしテストの中で新しいスレッドを作らない場合はテストコンテキストを気にする必要はありません。新しいスレッドを作る場合だけ必要になります。テストのスレッドが持っている「現在のテストコンテキスト」を新しく作ったスレッドに渡す必要がありません。 例: int your_thread_function(void *data) { CutTestContext *test_context = data; cut_set_current_test_context(test_context); ... } void run_your_thread(void) { int result; pthread_t your_thread; result = pthread_create(&your_thread, NULL, your_thread_function, cut_get_current_test_context()); ... } 戻り値 :CutTestContextオブジェクト。 1.0.4から cut_set_current_test_context() cut_set_current_test_context #define cut_set_current_test_context(test_context) 現在のテストコンテキストをtest_contextにします。詳細はcut_get_current_test_context()を見てください。 test_context : 現在のテストコンテキストになるCutTestContext 1.0.4から cut_set_message () cut_set_messagecut_set_message void cut_set_message (const char *format, ...); cut_set_messageはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_message()を使ってください。 次の検証で使われるメッセージです。 format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 1.0.6から cut_set_message_va_list () cut_set_message_va_listcut_set_message_va_list void cut_set_message_va_list (const char *format, va_list args); cut_set_message_va_listはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないで下さい。代わりにcut_message()を使ってください。 次の検証で使われるメッセージです。 format : 整形文字列。printf()のドキュメントを見てください。 args : 整形文字列に挿入されるパラメータ。 1.0.6から cut_keep_message () cut_keep_messagecut_keep_message void cut_keep_message (void); cut_keep_messageはバージョン1.1.0から非推奨になりました。新しく書くコードでは使わないでください。代わりにcut_message()を使ってください。 cut_set_message()またはcut_set_message_va_list()で設定した現在のメッセージを次の検証の後でも維持します。1.0.6から cut_message () cut_message void cut_message (const char *format, ...); 追加の検証メッセージを指定します。 例: cut_assert_equal_string("abc", "def", cut_message("should fail!")); format : 整形文字列。printf()のドキュメントを見てください。 ... : 整形文字列に挿入されるパラメータ。 1.1.0から CUT_EXPORT CUT_EXPORT #define CUT_EXPORT 公開関数であるというしるしをつけます。このしるしはWindows環境上でだけ必要です。Windows上でもテストを実行したい場合はこのマクロを使う必要があります。そうでなければ使う必要はありません。 例: CUT_EXPORT void test_add (void) { ... } 1.1.2から 参考 検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/soupcut-client.xml0000644000175000017500000003564711525703007024432 0ustar koukou ]> 便利なHTTPクライアントAPI 3 Cutterライブラリ 便利なHTTPクライアントAPI HTTPクライアントとして動作するためのAPI。 概要 SoupCutClient; SoupCutClientClass; SoupCutClient * soupcut_client_new (void); void soupcut_client_set_base (SoupCutClient *client, const gchar *uri); guint soupcut_client_send_message (SoupCutClient *client, SoupMessage *message); guint soupcut_client_get (SoupCutClient *client, const gchar *uri, const gchar *first_query_name, ...); guint soupcut_client_get_n_messages (SoupCutClient *client); SoupMessage * soupcut_client_get_latest_message (SoupCutClient *client); GMainContext * soupcut_client_get_async_context (SoupCutClient *client); オブジェクト階層 GObject +----SoupCutClient プロパティ "async" gboolean : Read / Write 説明 SoupCutClientオブジェクトはHTTPクライアントとして動作します。SoupCutClientは複数のリクエストやレスポンスを管理することができます。また、SoupCutClientに関連するアサーションのAPIも提供しています。 詳細 SoupCutClient SoupCutClient typedef struct _SoupCutClient SoupCutClient; SoupCutClientClass SoupCutClientClass typedef struct { GObjectClass parent_class; } SoupCutClientClass; soupcut_client_new () soupcut_client_new SoupCutClient * soupcut_client_new (void); 新たにSoupCutClientオブジェクトを生成して返します。 戻り値 :SoupCutClientオブジェクト。 1.0.8から soupcut_client_set_base () soupcut_client_set_base void soupcut_client_set_base (SoupCutClient *client, const gchar *uri); clientのベースURIをuriに設定します。 client : SoupCutClientオブジェクト。 uri : ベースURIの文字列。 1.0.8から soupcut_client_send_message () soupcut_client_send_message guint soupcut_client_send_message (SoupCutClient *client, SoupMessage *message); clientを使ってmessageを送信します。clientは過去に送信した全てのSoupMessageの情報を保持しています。 client : SoupCutClientオブジェクト。 message : SoupMessageオブジェクト。 戻り値 :レスポンスのステータスコード。 1.0.8から soupcut_client_get () soupcut_client_get guint soupcut_client_get (SoupCutClient *client, const gchar *uri, const gchar *first_query_name, ...); uriとクエリパラメータで指定されたURIにGETリクエストを送信します。もしもclientのベースURIがsoupcut_client_set_base()によって設定されていた場合は、URIはベースURIとuriを組み合わせたものとなります。そうでない場合は、uriは絶対URIである必要があります。 client : SoupCutClientオブジェクト。 uri : URI文字列。 first_query_name : ひとつめのクエリパラメータの名前 ... : first_query_nameから始まる、クエリパラメータの名前と値のペア。最後にNULLを指定しなければいけません。 戻り値 :レスポンスのステータスコード。 1.0.8から soupcut_client_get_n_messages () soupcut_client_get_n_messages guint soupcut_client_get_n_messages (SoupCutClient *client); clientが送信した#SoupMessageの数。 client : SoupCutClientオブジェクト。 戻り値 :SoupMessageの数。 1.0.8から soupcut_client_get_latest_message () soupcut_client_get_latest_message SoupMessage * soupcut_client_get_latest_message (SoupCutClient *client); clientが最後に送信したSoupMessageオブジェクト。 client : SoupCutClientオブジェクト。 戻り値 :最後に送信されたSoupMessageオブジェクト。 1.0.8から soupcut_client_get_async_context () soupcut_client_get_async_context GMainContext * soupcut_client_get_async_context (SoupCutClient *client); clientの非同期コンテキスト。 client : SoupCutClientオブジェクト。 戻り値 :clientGMainContextNULLが返る可能性があります。 1.0.8から プロパティ詳細 <literal>"async"</literal>プロパティ SoupCutClient:async "async" gboolean : Read / Write セッションが非同期の場合は真。デフォルト値: FALSE 参考 HTTPクライアント・サーバ用の検証 cutter-testing-framework-1.1.7/doc/reference/ja/html/index-1-1-6.html0000644000175000017500000001076211525703040023352 0ustar koukou 1.1.6での新しいシンボル一覧

1.1.6での新しいシンボル一覧

C

cut_build_fixture_path, cut_build_fixture_path ()
cut_get_fixture_data, cut_get_fixture_data ()

G

gcut_event_loop_add_idle, gcut_event_loop_add_idle ()
gcut_event_loop_add_idle_full, gcut_event_loop_add_idle_full ()
gcut_event_loop_add_timeout, gcut_event_loop_add_timeout ()
gcut_event_loop_add_timeout_full, gcut_event_loop_add_timeout_full ()
gcut_event_loop_iterate, gcut_event_loop_iterate ()
gcut_event_loop_quit, gcut_event_loop_quit ()
gcut_event_loop_remove, gcut_event_loop_remove ()
gcut_event_loop_run, gcut_event_loop_run ()
gcut_event_loop_watch_child, gcut_event_loop_watch_child ()
gcut_event_loop_watch_child_full, gcut_event_loop_watch_child_full ()
gcut_event_loop_watch_io, gcut_event_loop_watch_io ()
gcut_get_fixture_data, gcut_get_fixture_data ()
gcut_glib_event_loop_new, gcut_glib_event_loop_new ()
gcut_process_get_event_loop, gcut_process_get_event_loop ()
gcut_process_set_event_loop, gcut_process_set_event_loop ()
gcut_take_new_string, gcut_take_new_string ()
gcut_take_string, gcut_take_string ()
cutter-testing-framework-1.1.7/doc/reference/ja/html/gcut-types.xml0000644000175000017500000001334211525703005023542 0ustar koukou ]> GLibサポート用の型 3 Cutterライブラリ GLibサポート用の型 GLibサポート付きテストで使う型です。 概要 void (*GCutInspectFunction) (GString *string, gconstpointer data, gpointer user_data); #define GCUT_TYPE_ERROR #define GCUT_TYPE_SIZE GType gcut_error_get_type (void); GType gcut_size_get_type (void); 説明 GLibサポート付きテストで使う型がいくつかあります。 詳細 GCutInspectFunction () GCutInspectFunction void (*GCutInspectFunction) (GString *string, gconstpointer data, gpointer user_data); data要素の詳細を示すときに呼ばれる関数の型です。データ要素のポインタを渡されるので、dataの詳細をstringに追加してください。 string : 詳細情報を保存するGString data : 詳細化されるデータ。 user_data : 関数に渡すユーザ用データ。 1.0.6から GCUT_TYPE_ERROR GCUT_TYPE_ERROR #define GCUT_TYPE_ERROR (gcut_error_get_type()) GErrorへの参照を保持するGBoxed型のGType1.0.7から GCUT_TYPE_SIZE GCUT_TYPE_SIZE #define GCUT_TYPE_SIZE (gcut_size_get_type()) gsizeのためのGType1.1.3から gcut_error_get_type () gcut_error_get_type GType gcut_error_get_type (void); 戻り値 : gcut_size_get_type () gcut_size_get_type GType gcut_size_get_type (void); 戻り値 : cutter-testing-framework-1.1.7/doc/reference/ja/cutter-docs.sgml0000644000175000017500000001673511525702756023115 0ustar koukou ]> Cutterリファレンスマニュアル Cutter &version;用 はじめに Cutterの概要 プラットフォーム毎のCutterのインストール方法 はじめよう リファレンス コマンド テスト作成 検証作成 すべてのシンボル一覧 非推奨のシンボル一覧 1.1.7での新しいシンボル一覧 1.1.6での新しいシンボル一覧 1.1.5での新しいシンボル一覧 1.1.4での新しいシンボル一覧 1.1.3での新しいシンボル一覧 1.1.2での新しいシンボル一覧 1.1.1での新しいシンボル一覧 1.1.0での新しいシンボル一覧 1.0.9での新しいシンボル一覧 1.0.8での新しいシンボル一覧 1.0.7での新しいシンボル一覧 1.0.6での新しいシンボル一覧 1.0.5での新しいシンボル一覧 1.0.4での新しいシンボル一覧 1.0.3での新しいシンボル一覧 1.0.2での新しいシンボル一覧 1.0.1での新しいシンボル一覧 1.0での新しいシンボル一覧 0.9での新しいシンボル一覧 0.8での新しいシンボル一覧 0.7での新しいシンボル一覧 0.6での新しいシンボル一覧 0.5での新しいシンボル一覧 0.4での新しいシンボル一覧 0.3での新しいシンボル一覧 cutter-testing-framework-1.1.7/doc/reference/ja/xml/0000755000175000017500000000000011525707421020553 5ustar koukoucutter-testing-framework-1.1.7/doc/reference/install-to-others.xml0000644000175000017500000000477411525655563023520 0ustar koukou Install to other platform CUTTER Library Install to other platform How to install Cutter to other platform Introduction This document explains how to install Cutter to platforms except Debian GNU/Linux , Ubuntu Linux , FreeBSD , Solaris and Cygwin . Install GLib Cutter requires GLib 2.16 or later. We can install GLib that satisfies the condition by ourselves and use it if our system doesn't provide GLib that satisfies the condition. (e.g. CentOS) Here is an instruction to install GLib into ~/local/: % mkdir -p ~/src % cd ~/src % wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz % tar xvfz glib-2.22.4.tar.gz % cd glib-2.22.4 % ./configure --prefix=$HOME/local % make % make install Install Cutter Cutter can be installed like other free software because Cutter uses GNU build tools: % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % make % sudo make install Here is an instruction to use GLib installed into ~/local/ by ourselves. In the instruction, Cutter is also installed into ~/local/: % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig LD_LIBRARY_PATH=$HOME/local/lib --prefix=$HOME/local % make % make install The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/news.xml0000644000175000017500000014047711525702723021074 0ustar koukou NEWS CUTTER Library NEWS The history of Cutter 1.1.7: 2011-02-13 Cutter Improvements Supported growlnotify. Changes Droped Debian GNU/Linux lenny support. Fixes Fixed using unknown symbol on CentOS 5.5. [Reported by Hiroaki Nakamura] Document ===== Fixes Fixed typos in tutorial. [Reported by Hiroaki Nakamura] Thanks Hiroaki Nakamura 1.1.6: 2011-02-09 Cutter Improvments Renamed an utility: cut_build_fixture_data_path() -> cut_build_fixture_path() Added utitlities: gcut_take_string() cut_get_fixture_data() gcut_get_fixture_data() GCutEventLoop GCutGLibEventLoop Supported Debian GNU/Linux squeeze. [Suggested by Romuald Conty] Supported Ubuntu Maverick Meerkat. Supported Fedora 14. cutter.m4: supported --config-cache. cutter.m4: supported custom Makefile for --enable-coverage. (specify custome Makefile name to AC_CHECK_COVERAGE() argument) Supported notify-send. Fixes Fixed a wrong test. [Suggested by Ilya Barygin] cut-diff Improvements Added --label option that specify labels in header. Thanks Romuald Conty Ilya Barygin 1.1.5: 2010-09-06 Cutter Improvements Renamed assertions: cut_assert_path_exist() -> cut_assert_exist_path() cut_assert_path_not_exist() -> cut_assert_not_exist_path() Added an assertion: gcut_assert_equal_string() Renamed an utility: GCutEgg -> GCutProcess Added utilities: cut_get_source_directory() cut_build_path_array() gcut_data_has_field() gcut_list_int_new() gcut_list_uint_new() gcut_take_new_list_int() gcut_take_new_list_uint() Supported Ubuntu Lucid Lynx. Supported configure result report on configure finish. [Suggested by Romain Tartière] Supported libgoffice-0.8. (libgoffice-0.6 support was dropped.) [Suggested by Romain Tartière] Supported lcov 1.9. #3056684 [Patch by Romain Tartière] Supported full-width spaces in test description. Supported sub-cutter command in PATH. [Patch by Romain Tartière] Fixes Fixed locale depended tests. [Suggested by Romain Tartière] cut-diff Improvements Added --context-lines option that specifies how many lines are shown around diff. Documentation Improvements Used ports on FreeBSD. [Suggested by Romain Tartière] Thanks Romain Tartière 1.1.4: 2010-06-10 Supported CentOS. Cutter Improvements Added assertions: cut_assert_equal_file_raw() cut_assert_not_equal_file_raw() gcut_assert_not_equal_int64() gcut_assert_not_equal_uint64() Added utilities: cut_get_test_directory() Changed to use tabs in diff if they are needed. Supported CentOS. Fixes Fixed a bug that assertion message is ignored. Document Fixes Debian, Ubuntu: Fixed file paths. [Reported by Romuald Conty] Thanks Romuald Conty 1.1.3: 2010-04-13 Improved test driven test support. Cutter Improvements AC_CHECK_ENABLE_COVERAGE: Added a new 'coverage-force' target that reports coverage even if 'make check' is failed. Bug fixes Removed unneeded memory free [Reported by Zed Shaw] AC_CHECK_ENABLE_COVERAGE: Fixed a bug that 8 spaces instead of a TAB is printed into Makefile. GCutter Improvements Improved data driven test support: gcut_data_get_size() gcut_data_get_char() gcut_data_get_boolean() gcut_data_get_double() gcut_data_get_int64() gcut_data_get_uint64() Added utilities: gcut_inspect_size() gcut_inspect_char() gcut_inspect_boolean() gcut_inspect_double() gcut_inspect_int64() gcut_inspect_uint64() Bug fixes Fixed a bug that gcut_list_inspect_enum() and gcut_list_inspect_flags() is crashed on Mac OS X. Document Bug fixes Fixed dependency package list for Cygwin 1.7. Thanks Zed Shaw 1.1.2: 2010-04-03 Improves Windows support. Cutter Improvements Supported lcov 1.8 Supported --enable-coverage=SOMETHING style. [Reported by gunyara-kun] #2976775: Supported cut_omit() in cut_setup() [Reported by Romain Tartière] Supported building and testing with Visual Studio C++ 2008 CppCutter Improvements Added CUT_EXPORT that is a macro to mark test function on Windows Document Improvements Supported Ubuntu Karmic Koara. Thanks Romain Tartière gunyara-kun 1.1.1: 2010-03-11 Bug in 1.1.0 fixes and improvements of GObject and sockaddr support. Cutter Improvements Supported DLL generated by Visual C++. Added an assertion: cut_assert_equal_sockaddr() Added test utilities: cut_equal_sockaddr() cut_inspect_sockaddr() cut_make_directory() Fixes Fixed a build problem on having stdint.h but not having inttypes.h. GCutter Improvements Improved data driven test support: gcut_data_get_object() Added utilities: gcut_list_new() gcut_take_new_list_object() gcut_list_object_free() 1.1.0: 2009-11-03 NOTE: This release includes API incompatibility. Cutter Improvements Add assertions for types defined in stdint.h [Yuto Hayamizu] API CHANGE : Re-enable optional assertion message Before: cut_assert_equal_string("a", "b", "message"); After: cut_assert_equal_string("a", "b", cut_message("message")); Add cut_message() Make cut_set_message() obsolete Make cut_set_message_va_list() obsolete Make cut_keep_message() obsolete CppCutter Improvements Add supported types by cppcut_assert_equal() Support test definition detection in namespace Make CPPCUT_BEGIN_TEST_DECLS obsolete Make CPPCUT_END_TEST_DECLS obsolete Support optional assertion message Add cppcut_message() Thanks Yuto Hayamizu 1.0.9: 2009-10-20 Improvements Add a function to Assertion Utilities for GHashTable : gcut_hash_table_inspect_sorted() Inspect hash table after sorted by key Support colorized diff: colorized-diff.png Add --stop-before-test option that sets breakpoint before each test [Suggested by Yoshinori K. Okuji] Add cut-diff command Support unified diff Support C++: CppCutter Bug fixes Fix locale dependent bugs [Reported by Yoshinori K. Okuji] Thanks Yoshinori K. Okuji 1.0.8: 2009-08-29 Support libsoup: HTTP client: soupcut_client_new() soupcut_client_set_base() soupcut_client_send_message() soupcut_client_get() soupcut_client_get_n_messages() soupcut_client_get_latest_message() soupcut_client_get_async_context() HTTP server: soupcut_server_take() soupcut_server_take_new() soupcut_server_build_uri() Assertions: soupcut_message_assert_equal_content_type() soupcut_client_assert_equal_content_type() soupcut_client_assert_response() soupcut_client_assert_equal_body() soupcut_client_assert_match_body() Add an function to Assertion Utilities for GHashTable : gcut_hash_table_string_string_copy() Add mroonga to project list that use Cutter Support rpm package for Fedora Support deb package for Debian Support deb package for Ubuntu Support lcov 1.7 Document: Add install document for Ubuntu Add install document for FreeBSD Add install document for Mac OS X Add install document for Solaris 1.0.7: 2009-05-20 Provide Version Information Support GBoxed type test data Display test name on crash (if available) Add shared library parser Support ELF (Linux/*BSD), PE (Windows), Mach-O (Mac OS X) Don't use BFD by default Use ImageHlp instead of BFD on Windows Document: Add cutter command's man Add install document for Debian Add install document for Cygwin Add Cygwin related notes to tutorial [Yamakawa Hiroshi] Add test utilities: cut_build_path() Add assertions: cut_assert_equal_boolean() cut_assert_not_equal_boolean() cut_assert_equal_substring() cut_assert_not_equal_substring() cut_assert_not_equal_double() [gunyara-kun] cut_assert_not_equal_int() [gunyara-kun] cut_assert_not_equal_uint() [gunyara-kun] cut_assert_not_equal_memory() [gunyara-kun] cut_assert_not_equal_size() [gunyara-kun] cut_assert_not_equal_string() [gunyara-kun] gcut_assert_not_equal_pid() [gunyara-kun] Compatibility: Make fixture functions without "cut_" prefix deprecated. [gunyara-kun] setup() -> cut_setup() teardown() -> cut_teardown() startup() -> cut_startup() shutdown() -> cut_shutdown() Bug fixes: Fix a typo in tutorial: [UNNO Hideyuki] Fix file descriptor redirection: [UNNO Hideyuki] Add --disable-signal-handling option 1.0.6: 2009-03-01 Add project list that use Cutter Add convenience API for using external command Improve backtrace detection: CUT_RELATIVE_PATH Improve user message related API for assertions: Obsolete optional message for supporting non-GCC compilers Add APIs to set user message independently of assertions: cut_set_message() cut_set_message_va_list() Add API to use the same message with assertions: cut_keep_message() Improve data driven test support: Convenience test data API Add "cut_" prefix to fixture functions: cut_setup() cut_teardown() cut_startup() cut_shutdown() Add test utilities: Object inspection functions cut_push_backtrace() cut_pop_backtrace() cut_take_replace() gcut_enum_parse() gcut_flags_get_all() gcut_flags_parse() gcut_list_equal_int() gcut_list_equal_uint() gcut_list_equal_string() gcut_list_inspect_enum() gcut_list_inspect_flags() gcut_list_inspect_int() gcut_list_inspect_object() gcut_list_inspect_string() gcut_list_inspect_uint() gcut_list_string_new_array() gcut_take_new_list_string_array() Add assertions: cut_assert_equal_size() cut_return() gcut_assert_equal_list() gcut_assert_equal_pid() 1.0.5: 2008-10-15 Support max number of threads ran concurrently: Add --max-threads option For sub process: cut_sub_process_get_max_threads() cut_sub_process_set_max_threads() Support GdkPixbuf: Image comparison Image diff expected: dark-circle.png actual: nested-circle.png diff: diff-dark-and-nested-circle.png Improve debug support: Add --keep-opening-modules option Keep opening modules for resolving symbols on debugging Show test result on SIGABORT like on SIGSEGV --name option support iterated test 'but was:' -> 'actual:' Add test utilities: cut_take() cut_take_memdup() cut_take_memory() cut_take_strdup() cut_take_strndup() gcut_take_new_hash_table_string_string() gcut_take_new_list_string() gcut_hash_table_string_string_new() gcut_hash_table_string_string_new_va_list() Add assertions: cut_assert_operator_double() cut_assert_operator_uint() gcut_assert_equal_enum() gcut_assert_equal_error() gcut_assert_equal_flags() gcut_assert_equal_int64() gcut_assert_equal_list_enum() gcut_assert_equal_list_flags() gcut_assert_equal_list_object() gcut_assert_equal_list_object_custom() gcut_assert_equal_object() gcut_assert_equal_object_custom() Improve user defined assertion writing support: Support backtrace cut_trace() cut_trace_with_info_expression() Writing assertion Assertion writing helper Assertion Utilities for GEnum and GFlags Assertion Utilities for GError Assertion Utilities for GHashTable Assertion Utilities for GList Assertion Utilities for GObject Assertion Utilities for GValue cut_equal_double() cut_equal_string() Bug fixes: Fix memory leak (Daijiro MORI) Fix a bug that test result is ignored in setup()/teardown() 1.0.4: 2008-08-27 Option: Add --stream-log-dir option that is for logging test result history Add --fatal-failures option that test is aborted on failure (for cooperation with debugger) Output: Support folded diff Output newline into long summary (".", "F", ...) Add cut_set_attributes() to set attributes Support test on multi-process Support data driven test on multi-thread Add assertions: gcut_assert_equal_hash_table_string_string() gcut_assert_equal_time_val() Add utilities: gcut_hash_table_string_string_new() gcut_take_hash_table() Fix: Fix a build bug on no GOffice environment. (Reported by Kazumasa Matsunaga) Experimental: Add --analyzer mode that cutter analyzes test result log. 1.0.3: 2008-07-15 Support Data-Driven Testing: cut_add_data() Add assertions: gcut_assert_equal_list_uint() Rename assertions: Rename features that requires GLib support to 'gcut_XXX' from 'cut_XXX'. 'cut_XXX' can be still used but they are deprecated. See Assertions with GLib support for more details. Add utilities: cut_append_diff() : appends diff to a string. gcut_list_string_new() / gcut_list_string_free() : helps creating a list of strings. gcut_take_error() : takes ownership of GError * to Cutter. gcut_take_list() : takes ownership of GList * to Cutter. gcut_take_object() : takes ownership of GObject * to Cutter. 1.0.2: 2008-06-27 Support fixture data cut_set_fixture_data_dir() cut_get_fixture_data_string() cut_build_fixture_data_path() Add a utility cut_remove_path() Add assertions cut_assert_equal_fixture_data_string() cut_assert_path_not_exist() cut_assert_remove_path() cut_error_errno() Experimental: Windows support 1.0.1: 2008-06-13 Improve AC_CHECK_COVERAGE Document: Fix: Require GLib >= 2.16 Experimental: Support GStreamer: Transport test result to remote machine and so on Support warmup()/cooldown() 1.0.0: 2008-05-20 Add assertions: cut_assert_equal_pointer() cut_assert_g_error() cut_assert_match() cut_assert_match_with_free() Add --exclude-file option that specifies excluded files from test targets Add --exclude-dir option that specifies excluded directories from test targets Add --without-cutter to cutter.m4 (configure option) Experimental: Implement Cutter protocol (CutXMLStreamer and CutStreamParser) Add cut_take_g_error() Support Mac OS X 0.9.0: 2008-05-12 Add assertions. cut_assert_equal_string_array_with_free() cut_assert_true() cut_assert_false() cut_assert_file_exist() Add AC_CHECK_GCUTTER Experimental: Support GObject: cut_take_g_object() 0.8.0: 2008-05-07 LGPL2 -> LGPL3 Add assertions. cut_assert_equal_g_list_int() cut_assert_equal_g_list_string() cut_assert_errno() Support omission: cut_omit() Support startup/shutdown hooks that are ran on before test case start and end. Support diff. Support gcov. Experimental: Support fork: cut_fork() cut_wait_process() cut_fork_get_stdout_message() cut_fork_get_stderr_message() 0.7.0: 2008-03-26 Fixed packaging failure. Fixed --help-all. Added a document for XML format reported by Cutter. 0.6.0: 2008-03-21 Added --xml-report option for reporting test result as XML. Added --test-case-order option for sorting test case by name. Added --version option for outputting Cutter version. Added --disable-bfd option to configure. 0.5.0: 2008-03-10 Included missing cutter/gbsearcharray.h. 0.4.0: 2008-02-28 cut_pending() -> cut_pend(). Supported attributes. 0.3.0: 2007-12-14 Fixed documentation. Marked cut_assert_equal_string_or_null() as deprecated. cut_assert_equal_string() accepted NULL. Removed an experimental API from document. 0.2.0: 2007-11-29 Initial release on SF.net. cutter-testing-framework-1.1.7/doc/reference/xml/0000755000175000017500000000000011525707421020161 5ustar koukoucutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.6.xml0000644000175000017500000004167011442136355023231 0ustar koukou ]> A gcut_add_datum, function in Convenience test data API gcut_assert_equal_hash_table, function in Assertions with GLib support gcut_assert_equal_list, function in Assertions with GLib support gcut_assert_equal_pid, function in Assertions with GLib support C cut_assert_equal_size, function in Assertions cut_keep_message, function in Cutter cut_pop_backtrace, function in Assertion writing helper cut_push_backtrace, function in Assertion writing helper CUT_RELATIVE_PATH, macro in Assertion writing helper cut_return, function in Assertions cut_setup, function in Cutter cut_set_message, function in Cutter cut_set_message_va_list, function in Cutter cut_shutdown, function in Cutter cut_startup, function in Cutter cut_take_replace, function in Test Utilities cut_teardown, function in Cutter D gcut_data_get_enum, function in Convenience test data API gcut_data_get_flags, function in Convenience test data API gcut_data_get_int, function in Convenience test data API gcut_data_get_pointer, function in Convenience test data API gcut_data_get_string, function in Convenience test data API gcut_data_get_type, function in Convenience test data API gcut_data_get_uint, function in Convenience test data API E GCutEgg::error, object signal in GCutEgg GCutEgg::error-received, object signal in GCutEgg GCutEgg::output-received, object signal in GCutEgg GCutEgg::reaped, object signal in GCutEgg GCutEggError, enum in GCutEgg gcut_egg_close, function in GCutEgg gcut_egg_get_env, function in GCutEgg gcut_egg_get_error, function in GCutEgg gcut_egg_get_flags, function in GCutEgg gcut_egg_get_forced_termination_wait_time, function in GCutEgg gcut_egg_get_input, function in GCutEgg gcut_egg_get_output, function in GCutEgg gcut_egg_get_pid, function in GCutEgg gcut_egg_hatch, function in GCutEgg gcut_egg_kill, function in GCutEgg gcut_egg_new, function in GCutEgg gcut_egg_new_argv, function in GCutEgg gcut_egg_new_array, function in GCutEgg gcut_egg_new_strings, function in GCutEgg gcut_egg_new_va_list, function in GCutEgg gcut_egg_set_env, function in GCutEgg gcut_egg_set_flags, function in GCutEgg gcut_egg_set_forced_termination_wait_time, function in GCutEgg gcut_egg_wait, function in GCutEgg gcut_egg_write, function in GCutEgg GCutEnumError, enum in Assertion Utilities for GEnum and GFlags GCUT_ENUM_ERROR, macro in Assertion Utilities for GEnum and GFlags gcut_enum_parse, function in Assertion Utilities for GEnum and GFlags F gcut_flags_get_all, function in Assertion Utilities for GEnum and GFlags gcut_flags_parse, function in Assertion Utilities for GEnum and GFlags G GDKCUTTER_PIXBUF_ENABLED, macro in GdkCutter Pixbuf I GCutInspectFunction, user_function in Types for GLib support gcut_inspect_direct, function in Object inspection functions gcut_inspect_enum, function in Object inspection functions gcut_inspect_flags, function in Object inspection functions gcut_inspect_int, function in Object inspection functions gcut_inspect_pointer, function in Object inspection functions gcut_inspect_string, function in Object inspection functions gcut_inspect_type, function in Object inspection functions gcut_inspect_uint, function in Object inspection functions L gcut_list_equal_int, function in Assertion Utilities for GList gcut_list_equal_string, function in Assertion Utilities for GList gcut_list_equal_uint, function in Assertion Utilities for GList gcut_list_inspect_enum, function in Assertion Utilities for GList gcut_list_inspect_flags, function in Assertion Utilities for GList gcut_list_inspect_int, function in Assertion Utilities for GList gcut_list_inspect_object, function in Assertion Utilities for GList gcut_list_inspect_string, function in Assertion Utilities for GList gcut_list_inspect_uint, function in Assertion Utilities for GList gcut_list_string_new_array, function in Test Utilities with GLib support T gcut_take_new_list_string_array, function in Test Utilities with GLib support GCUTTER_ENABLED, macro in GCutter cutter-testing-framework-1.1.7/doc/reference/xml/cut-diff-writer.xml0000644000175000017500000000167211400101215023701 0ustar koukou ]> CutDiffWriter 3 CUTTER Library CutDiffWriter Synopsis Description Details cutter-testing-framework-1.1.7/doc/reference/xml/cut-test-utils.xml0000644000175000017500000010432311523761120023606 0ustar koukou ]> Test Utilities 3 CUTTER Library Test Utilities Utilities to write tests more easily. Synopsis void * cut_take (void *object, CutDestroyFunction destroy_function); const void * cut_take_memory (void *memory); const char * cut_take_string (char *string); const char * cut_take_strdup (const char *string); const char * cut_take_strndup (const char *string, size_t size); const void * cut_take_memdup (const void *memory, size_t size); const char * cut_take_printf (const char *format, ...); char ** cut_take_string_array (char **strings); const char * cut_take_diff (const char *from, const char *to); const char * cut_take_replace (const char *target, const char *pattern, const char *replacement); #define cut_take_convert (string, to_code_set, from_code_set) const char * cut_take_inspect_string (const char *string); void cut_set_fixture_data_dir (const char *path, ...); char * cut_build_fixture_data_path (const char *path, ...); const char * cut_build_fixture_path (const char *path, ...); const char * cut_get_fixture_data_string (const char *path, ...); const char * cut_get_fixture_data (size_t *size, const char *path, ...); void cut_remove_path (const char *path, ...); const char * cut_build_path (const char *path, ...); const char * cut_build_path_array (const char **paths); void cut_make_directory (const char *path, ...); Description To write tests, you need to write codes that set up/tear down test environment, prepare expected and actual values and so on. Cutter provides test utilities to you write your tests more easily. The utilities work without GLib support. Details cut_take () cut_take void * cut_take (void *object, CutDestroyFunction destroy_function); Passes ownership of object to Cutter and returns object itself. object is destroyed by destroy_func. object : the object to be owned by Cutter. destroy_function : the destroy function for the object. Returns : object owned by Cutter. Don't free it. Since 1.0.5 cut_take_memory () cut_take_memory const void * cut_take_memory (void *memory); Passes ownership of memory to Cutter and returns memory itself. memory is destroyed by free(). memory : the memory to be owned by Cutter. Returns : memory owned by Cutter. Don't free it. Since 1.0.5 cut_take_string () cut_take_string const char * cut_take_string (char *string); Passes ownership of string to Cutter and returns string itself. string : the string to be owned by Cutter. Returns : string owned by Cutter. Don't free it. cut_take_strdup () cut_take_strdup const char * cut_take_strdup (const char *string); Duplicates string, passes ownership of the duplicated string to Cutter and returns the duplicated string. string : the string to be duplicated. Returns : a duplicated string owned by Cutter. Don't free it. Since 1.0.5 cut_take_strndup () cut_take_strndup const char * cut_take_strndup (const char *string, size_t size); Duplicates the first size bytes of string, passes ownership of the duplicated string to Cutter and returns the duplicated string. The duplicated string is always NULL-terminated. string : the string to be duplicated. size : the number of bytes to duplicate. Returns : a duplicated string owned by Cutter. Don't free it. Since 1.0.5 cut_take_memdup () cut_take_memdup const void * cut_take_memdup (const void *memory, size_t size); Duplicates size bytes of memory, passes ownership of the duplicated memory to Cutter and returns the duplicated memory. memory : the memory to be duplicated. size : the number of bytes to duplicate. Returns : a duplicated memory owned by Cutter. Don't free it. Since 1.0.5 cut_take_printf () cut_take_printf const char * cut_take_printf (const char *format, ...); Formats a string like printf() but the formatted string is owned by Cutter. format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. Returns : a formatted string owned by Cutter. Don't free it. cut_take_string_array () cut_take_string_array char ** cut_take_string_array (char **strings); Passes ownership of the array of strings to Cutter and returns strings itself. strings : the array of strings to be owned by Cutter. Returns : strings owned by Cutter. Don't free it. cut_take_diff () cut_take_diff const char * cut_take_diff (const char *from, const char *to); Computes diff between from and to that is owned by Cutter. from : the original string. to : the modified string. Returns : a diff between from and to owned by Cutter. Don't free it. cut_take_replace () cut_take_replace const char * cut_take_replace (const char *target, const char *pattern, const char *replacement); Replaces all occurrences of the pattern with the replacement in the target string. target : the replace target string. pattern : the regular expression pattern as string. replacement : text to replace each match with Returns : a replaced string owned by Cutter. Don't free it. Since 1.0.6 cut_take_convert() cut_take_convert #define cut_take_convert(string, to_code_set, from_code_set) Converts string code set to to_code_set from from_code_set. string : the convert target string. It should be NULL-terminated. to_code_set : the code set name which to convert string. from_code_set : the code set name of string. Returns : a converted string owned by Cutter. Don't free it. Since 1.1.3 cut_take_inspect_string () cut_take_inspect_string const char * cut_take_inspect_string (const char *string); Inspects string. string : the inspect target string. It should be NULL or NULL-terminated. Returns : a inspected string owned by Cutter. Don't free it. Since 1.1.4 cut_set_fixture_data_dir () cut_set_fixture_data_dir void cut_set_fixture_data_dir (const char *path, ...); Set fixture data directory that is used by cut_get_fixture_data_string() and so on. path : a first element of the path to the fixture data directory. ... : remaining elements in path. NULL-terminate is required since 1.0.7. Since 1.0.2 cut_build_fixture_data_path () cut_build_fixture_data_pathcut_build_fixture_data_path char * cut_build_fixture_data_path (const char *path, ...); cut_build_fixture_data_path has been deprecated since version 1.1.6 and should not be used in newly-written code. Use cut_build_fixture_path() instead. Builds a path to the fixture data. If path is relative path, the path is handled as a relative path from a directory that is specified by cut_set_fixture_data_dir() or the current directory. path : a first element of the path to the fixture data. ... : remaining elements in path. NULL-terminate is required since 1.0.7. Returns : a path to the fixture data. It should be freed when no longer needed. Since 1.0.2 cut_build_fixture_path () cut_build_fixture_path const char * cut_build_fixture_path (const char *path, ...); Builds a path to the fixture data. If path is relative path, the path is handled as a relative path from a directory that is specified by cut_set_fixture_data_dir() or the current directory. path : a first element of the path to the fixture data. ... : remaining elements in path. NULL-terminate is required. Returns : a path to the fixture data. It is owned by Cutter. Don't free it. Since 1.1.6 cut_get_fixture_data_string () cut_get_fixture_data_string const char * cut_get_fixture_data_string (const char *path, ...); Reads the fixture data at "path/..." and returns it as a string that is owned by Cutter. The description of cut_build_fixture_path() shows how the fixture data path is determined. path : a first element of the path to the fixture data. ... : remaining elements in path. NULL-terminate is required since 1.0.7. Returns : a content of the fixture data as string owend by Cutter. Don't free it. Since 1.0.2 cut_get_fixture_data () cut_get_fixture_data const char * cut_get_fixture_data (size_t *size, const char *path, ...); Reads the fixture data at "path/..." and returns it as a string that is owned by Cutter. The description of cut_build_fixture_path() shows how the fixture data path is determined. size : return location for a size of the fixture data, or NULL. path : a first element of the path to the fixture data. ... : remaining elements in path. NULL-terminate is required. Returns : a content of the fixture data as string owend by Cutter. Don't free it. Since 1.1.6 cut_remove_path () cut_remove_path void cut_remove_path (const char *path, ...); Removes path and it's children recursively. It doesn't report any errors. path : a first element of the path to be removed. ... : remaining elements in path. NULL-terminate is required since 1.0.7. Since 1.0.2 cut_build_path () cut_build_path const char * cut_build_path (const char *path, ...); Builds path from path and the following elements. path : a first element of the path. ... : remaining elements in path. NULL terminated. Returns : built path owned by Cutter. Don't free it. Since 1.0.7 cut_build_path_array () cut_build_path_array const char * cut_build_path_array (const char **paths); Builds path from paths. paths : NULL-terminated array of strings containing the path elements. Returns : built path owned by Cutter. Don't free it. Since 1.1.5 cut_make_directory () cut_make_directory void cut_make_directory (const char *path, ...); Makes path and it's parents recursively. It doesn't report any errors. path : a first element of the path to be made. ... : remaining elements in path. NULL terminated. Since 1.1.1 cutter-testing-framework-1.1.7/doc/reference/xml/gdkcut-pixbuf-assertions-helper.xml0000644000175000017500000001010611400101216027100 0ustar koukou ]> gdkcut-pixbuf-assertions-helper 3 CUTTER Library gdkcut-pixbuf-assertions-helper Synopsis void gdkcut_pixbuf_assert_equal_helper (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_threshold); Description Details gdkcut_pixbuf_assert_equal_helper () gdkcut_pixbuf_assert_equal_helper void gdkcut_pixbuf_assert_equal_helper (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_threshold); expected : actual : threshold : expression_expected : expression_actual : expression_threshold : cutter-testing-framework-1.1.7/doc/reference/xml/gcut-key-file.xml0000644000175000017500000001401411400101216023326 0ustar koukou ]> gcut-key-file 3 CUTTER Library gcut-key-file Synopsis gint gcut_key_file_get_enum (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType enum_type, GError **error); guint gcut_key_file_get_flags (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType flags_type, GError **error); Description Details gcut_key_file_get_enum () gcut_key_file_get_enum gint gcut_key_file_get_enum (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType enum_type, GError **error); key_file : group_name : key : enum_type : error : Returns : gcut_key_file_get_flags () gcut_key_file_get_flags guint gcut_key_file_get_flags (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType flags_type, GError **error); key_file : group_name : key : flags_type : error : Returns : cutter-testing-framework-1.1.7/doc/reference/xml/cut-helper.xml0000644000175000017500000007670611424024726022771 0ustar koukou ]> Assertion writing helper 3 CUTTER Library Assertion writing helper Symbols in this section help you writing your own assertions. Synopsis void cut_test_pass (void); void cut_test_fail (const char *system_message, ...); void cut_test_fail_va_list (const char *system_message, const char *user_message_format); #define CUT_RELATIVE_PATH void cut_push_backtrace (const char *expression); void cut_pop_backtrace (void); #define cut_trace (expression) #define cut_trace_with_info_expression (expression, info_expression) const char * cut_append_diff (const char *message, const char *from, const char *to); #define cut_set_expected (expected) #define cut_set_actual (actual) const char * cut_inspect_string_array (const char **strings); cut_boolean cut_equal_string (const char *string1, const char *string2); cut_boolean cut_equal_double (double double1, double double2, double error); #define cut_equal_sockaddr (address1, address2) #define cut_inspect_sockaddr (address) const char * cut_get_test_directory (void); const char * cut_get_source_directory (void); Description You will need to write your own assertions for writing easy to read test. Symbols in this section help you writing your own assertions. e.g.: my-assertions.h: #ifndef __MY_ASSERTIONS_H__ #define __MY_ASSERTIONS_H__ #include <cutter.h> #ifdef __cplusplus extern "C" { #endif #define my_assert_equal_int(expected, actual) \ cut_trace_with_info_expression( \ my_assert_equal_int_helper((expected), (actual), \ # expected, # actual), \ my_assert_equal_int(expected, actual, __VA_ARGS__)) void my_assert_equal_int_help (long expected, long actual, const char *expression_expected, const char *expression_actual); #ifdef __cplusplus } #endif #endif my-assertions.c: #include "my-assertions.h" void my_assert_equal_int_helper (long expected, long actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_test_fail(cut_take_printf("<%s == %s>\n" "expected: <%ld>\n" " actual: <%ld>", expression_expected, expression_actual, expected, actual)); } } Makefile.am: AM_CFLAGS = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) noinst_LTLIBRARIES = libmy-assertions.la libmy_assertions_la_SOURCES = my-assertions.c my-assertions.h AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined Details cut_test_pass () cut_test_pass void cut_test_pass (void); Call cut_test_pass() if an assertion is passed. cut_test_pass() counts up n-assertions. Since 1.0.5 cut_test_fail () cut_test_fail void cut_test_fail (const char *system_message, ...); Call cut_test_fail() if an assertion is failed. cut_test_fail() counts up n-failures and terminate the current test. system_message : a failure message from testing system. ... : optional format string, followed by parameters to insert into the format string. (as with printf()) This is deprecated since 0.1.6. Use cut_set_message() instead. Since 1.0.5 cut_test_fail_va_list () cut_test_fail_va_listcut_test_fail_va_list void cut_test_fail_va_list (const char *system_message, const char *user_message_format); cut_test_fail_va_list has been deprecated since version 1.0.6 and should not be used in newly-written code. Use cut_test_fail() instead. See cut_test_fail() for cut_test_fail_va_list()'s behavior. user_message_format is the prior variable of variable length arguments. e.g.: void my_assert(cut_boolean result, const gchar *user_message_format, ...) { if (result) { cut_test_pass(); } else { cut_test_fail_va_list("Fail!", user_message_format); } } system_message : a failure message from testing system. user_message_format : a failure message from user. Since 1.0.5 CUT_RELATIVE_PATH CUT_RELATIVE_PATH # define CUT_RELATIVE_PATH NULL Define this macro in a source code or build option (e.g. -DCUT_RELATIVE_PATH=\""sub/dir/"\") if the source code is built as shared library and used it as helper library of your test. If this path isn't set, you can't get correct path from cut_trace() and cut_trace_with_info_expression(). Here is an example structure for explain: --- core-lib/ --- XXX.c # Your core library | +- ... | +- YYY.c +- util-lib/ --- AAA.c # Your utility library | +- ... | +- BBB.c | +- test/ --- core/ --- test-XXX.c # Tests for your core library | +- ... | +- test-YYY.c +- util/ --- test-AAA.c # Tests for your utility library | +- ... | +- test-BBB.c +- lib/ --- my-assertions.c # Your library of tests. +- my-assertions.h # This library will be used | # as shared library of your | # tests (test/core/test-*.so | # and test/util/test-*.so) +- ... % cutter --source-directory=test test In the above example structure, you need to define CUT_RELATIVE_PATH as "lib" in test/lib/my-assertions.c because my-assertions.c is in lib/ directory from source directory "test" specified by command line option --source-directory. Here are example code and build option: test/lib/my-assertions.c: #define CUT_RELATIVE_PATH "lib" #include <cutter.h> build option: % gcc -DCUT_RELATIVE_PATH="\"lib\"" ... Since 1.0.6 cut_push_backtrace () cut_push_backtrace void cut_push_backtrace (const char *expression); Pushes expression and the current source place to the backtrace stack. Normally, you don't need to use it directory. cut_trace() is enough. expression : an expression to be traced. Since 1.0.6 cut_pop_backtrace () cut_pop_backtrace void cut_pop_backtrace (void); Pops a backtrace from the backtrace stack. Normally, you don't need to use it directory. cut_trace() is enough. Since 1.0.6 cut_trace() cut_trace #define cut_trace(expression) Mark the current file, line, function and expression and show it when assertion is failed in expression. Most of expression will be function call. Note that you can't get return value of expression. Here is an example of cut_trace(). If cut_assert_not_null(object) is failed, you will get a backtrace that contains two line; cut_assert_not_null(object) and create_my_object("my-name"). e.g.: static MyObject *object; static void create_my_object(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } void test_my_object_name(void) { cut_trace(create_my_object("my-name")); cut_assert_equal_string("my-name", my_object_get_name(object)); } You will use cut_trace() with macro for test readability: static MyObject *object; static void create_my_object_helper(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } #define create_my_object(...) \ cut_trace(create_my_object_helper(__VA_ARGS__)) void test_my_object_name(void) { create_my_object("my-name"); cut_assert_equal_string("my-name", my_object_get_name(object)); } expression : an expression to be traced. Since 1.0.5 cut_trace_with_info_expression() cut_trace_with_info_expression #define cut_trace_with_info_expression(expression, info_expression) It's difference between cut_trace() and cut_trace_with_info_expression() that traced expression is the same expression as expression or not. cut_trace_with_info_expression() is useful when you want to hide some information in expression for backtrace readability. Here is an example of cut_trace_with_info_expression(). If cut_assert_not_null(object) is failed, you will get a backtrace that contains two line: cut_assert_not_null(object) create_my_object("my-name") not create_my_object_helper("my-name") If you use cut_trace() instead of cut_trace_with_info_expression(), you will get create_my_object_helper("my-name"). You may be confused about 'Where is create_my_object_helper("my-name") from? test_my_object_name() uses create_my_object("my-name") but does not use create_my_object_helper("my-name").'. e.g.: static MyObject *object; static void create_my_object_helper(const char *name) { object = my_object_new(name); cut_assert_not_null(object); } #define create_my_object(...) \ cut_trace_with_info_expression( \ create_my_object_helper(__VA_ARGS__), \ create_my_object(__VA_ARGS__)) void test_my_object_name(void) { create_my_object("my-name"); cut_assert_equal_string("my-name", my_object_get_name(object)); } expression : an expression to be traced. info_expression : a traced expression. Since 1.0.5 cut_append_diff () cut_append_diffcut_append_diff const char * cut_append_diff (const char *message, const char *from, const char *to); cut_append_diff has been deprecated since version 1.0.9 and should not be used in newly-written code. Use cut_set_expected() and cut_set_actual() instead. Computes diff between from and to and append the diff to message. Returned string is owned by Cutter. message : the string to be appended diff. from : the original string. to : the modified string. Returns : message with diff between from and to or same as message if the diff not interested. Don't free it. Since 1.0.3 cut_set_expected() cut_set_expected #define cut_set_expected(expected) Sets an inspected expected object to be used by the next assertion. If both of expected and actual object are set and diff of them is needed, the diff is generated automatically. See also cut_set_actual(). expected : the inspected expected object. Since 1.0.9 cut_set_actual() cut_set_actual #define cut_set_actual(actual) Sets an inspected actual object to be used by the next assertion. If both of expected and actual object are set and diff of them is needed, the diff is generated automatically. See also cut_set_expected(). actual : the inspected actual object. Since 1.0.9 cut_inspect_string_array () cut_inspect_string_array const char * cut_inspect_string_array (const char **strings); Formats strings as human readable string that is owned by Cutter. strings : the array of strings to be inspected. Returns : a inspected string owned by Cutter. Don't free it. cut_equal_string () cut_equal_string cut_boolean cut_equal_string (const char *string1, const char *string2); Compare string1 to string2. string1 and/or string2 maybe NULL. string1 : a string. string2 : a string. Returns : CUT_TRUE if both string1 and string2 are NULL or have the same contents; CUT_FALSE otherwise. Since 1.0.5 cut_equal_double () cut_equal_double cut_boolean cut_equal_double (double double1, double double2, double error); Compare double1 to double2 with error range. double1 : a double value. double2 : a double value. error : a double value that specifies error range. Returns : CUT_TRUE if |double1 - double2| <= error; CUT_FALSE otherwise. Since 1.0.5 cut_equal_sockaddr() cut_equal_sockaddr #define cut_equal_sockaddr(address1, address2) Compare address1 to address2. This function can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT. address1 : a socket address. address2 : a socket address. Returns : CUT_TRUE if address1 == address2, CUT_FALSE otherwise. Since 1.1.1 cut_inspect_sockaddr() cut_inspect_sockaddr #define cut_inspect_sockaddr(address) Formats address as human readable string that is owned by Cutter. This function can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT. address : the socket address to be inspected. Returns : a inspected socket address owned by Cutter. Don't free it. Since 1.1.1 cut_get_test_directory () cut_get_test_directory const char * cut_get_test_directory (void); Gets the test directory name which is specified by command line. Returns : a string owned by Cutter that must not be modified or freed. Since 1.1.4 cut_get_source_directory () cut_get_source_directory const char * cut_get_source_directory (void); Gets the source directory name which is specified by command line. Returns : a string owned by Cutter that must not be modified or freed. Since 1.1.5 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-data.xml0000644000175000017500000010364611442136354022565 0ustar koukou ]> Convenience test data API 3 CUTTER Library Convenience test data API API to create test data without structure definition. Synopsis void gcut_add_datum (const gchar *name, const gchar *first_field_name, ...); gboolean gcut_data_has_field (gconstpointer data, const gchar *field_name); #define gcut_data_get_char (data, field_name) const gchar * gcut_data_get_string (gconstpointer data, const gchar *field_name); gint gcut_data_get_int (gconstpointer data, const gchar *field_name); guint gcut_data_get_uint (gconstpointer data, const gchar *field_name); #define gcut_data_get_int64 (data, field_name) #define gcut_data_get_uint64 (data, field_name) #define gcut_data_get_size (data, field_name) GType gcut_data_get_type (gconstpointer data, const gchar *field_name); guint gcut_data_get_flags (gconstpointer data, const gchar *field_name); gint gcut_data_get_enum (gconstpointer data, const gchar *field_name); gconstpointer gcut_data_get_pointer (gconstpointer data, const gchar *field_name); gconstpointer gcut_data_get_boxed (gconstpointer data, const gchar *field_name); #define gcut_data_get_object (data, field_name) #define gcut_data_get_boolean (data, field_name) #define gcut_data_get_double (data, field_name) Description cut_add_data() requires custom data type for complex test data. But it's not easy to write. gcut_add_datum() provides API to use complex test data without custom data type. It uses GType for providing complex data. Details gcut_add_datum () gcut_add_datum void gcut_add_datum (const gchar *name, const gchar *first_field_name, ...); Adds a datum to be used in data driven test. It's convenient rather than cut_add_data() because you doesn't need to define a new structure for a complex test data. e.g.: #include <gcutter.h> void data_translate (void); void test_translate (gconstpointer data); static const gchar* translate (gint input) { switch(input) { case 1: return "first"; case 111: return "a hundred eleven"; default: return "unsupported"; } } void data_translate(void) { gcut_add_datum("simple data", "translated", G_TYPE_STRING, "first", "input", G_TYPE_INT, 1, NULL); gcut_add_datum("complex data", "translated", G_TYPE_STRING, "a hundred eleven", "input", G_TYPE_INT, 111, NULL); } void test_translate(gconstpointer data) { cut_assert_equal_string(gcut_data_get_string(data, "translated"), gcut_data_get_int(data, "input")); } Available types and their values are the followings: G_TYPE_CHAR gchar value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_CHAR, 'X', NULL); G_TYPE_STRING const gchar *value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_STRING, "string value", NULL); G_TYPE_INT gint value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_INT, 100, NULL); G_TYPE_UINT guint value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_UINT, 100, NULL); G_TYPE_INT64 gint64 value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_INT64, G_GINT64_CONSTANT(100), NULL); G_TYPE_UINT64 guint64 value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_UINT64, G_GUINT64_CONSTANT(100), NULL); G_TYPE_GTYPE GType value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_GTYPE, G_TYPE_OBJECT, NULL); GFlags types its type value. e.g.: gcut_add_datum("data name", "field-name", GTK_TYPE_WIDGET_FLAGS, GTK_TOPLEVEL | GTK_MAPPED, NULL); GEnum types its type value. e.g.: gcut_add_datum("data name", "field-name", GTK_TYPE_WRAP_MODE, GTK_WRAP_NONE, NULL); G_TYPE_POINTER gconstpointer value, GDestroyNotify notify notify is called when value is destroyed. e.g.: gcut_add_datum("data name", "field-name", G_TYPE_POINTER, my_structure_new(...), my_structure_free, NULL); NOTE: value's ownership is passed to Cutter. Don't free it. GBoxed types its type value. e.g.: gcut_add_datum("data name", "field-name", G_TYPE_HASH_TABLE, gcut_hash_table_string_string_new("name1", "value1", "name2", "value2", NULL), NULL); NOTE: value's ownership is passed to Cutter. Don't free it. G_TYPE_BOOLEAN gboolean value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_BOOLEAN, TRUE, NULL); G_TYPE_DOUBLE gdouble value e.g.: gcut_add_datum("data name", "field-name", G_TYPE_DOUBLE, 2.9, NULL); name : the name of the data. first_field_name : the first field name. ... : the type and value pair of the first field, followed optionally by the next field name, type and value triples. NULL-terminated. See description for more details. Since 1.0.6 gcut_data_has_field () gcut_data_has_field gboolean gcut_data_has_field (gconstpointer data, const gchar *field_name); data : the data added by gcut_add_datum(). field_name : the field name. Returns : TRUE if data has a field_name field is available, FALSE otherwise. Since 1.1.5 gcut_data_get_char() gcut_data_get_char #define gcut_data_get_char(data, field_name) Gets a field value identified by field_name as char. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.1.3 gcut_data_get_string () gcut_data_get_string const gchar * gcut_data_get_string (gconstpointer data, const gchar *field_name); Gets a field value identified by field_name as string. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.0.6 gcut_data_get_int () gcut_data_get_int gint gcut_data_get_int (gconstpointer data, const gchar *field_name); Gets a field value identified by field_name as integer. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.0.6 gcut_data_get_uint () gcut_data_get_uint guint gcut_data_get_uint (gconstpointer data, const gchar *field_name); Gets a field value identified by field_name as unsigned integer. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.0.6 gcut_data_get_int64() gcut_data_get_int64 #define gcut_data_get_int64(data, field_name) Gets a field value identified by field_name as 64-bit integer. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.1.3 gcut_data_get_uint64() gcut_data_get_uint64 #define gcut_data_get_uint64(data, field_name) Gets a field value identified by field_name as 64-bit unsigned integer. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.1.3 gcut_data_get_size() gcut_data_get_size #define gcut_data_get_size(data, field_name) Gets a field value identified by field_name as size_t. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.1.3 gcut_data_get_type () gcut_data_get_type GType gcut_data_get_type (gconstpointer data, const gchar *field_name); Gets a field value identified by field_name as GType. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.0.6 gcut_data_get_flags () gcut_data_get_flags guint gcut_data_get_flags (gconstpointer data, const gchar *field_name); Gets a field value identified by field_name as unsigned integer of GFlags. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.0.6 gcut_data_get_enum () gcut_data_get_enum gint gcut_data_get_enum (gconstpointer data, const gchar *field_name); Gets a field value identified by field_name as integer of GEnum type. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.0.6 gcut_data_get_pointer () gcut_data_get_pointer gconstpointer gcut_data_get_pointer (gconstpointer data, const gchar *field_name); Gets a field value identified by field_name as pointer. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.0.6 gcut_data_get_boxed () gcut_data_get_boxed gconstpointer gcut_data_get_boxed (gconstpointer data, const gchar *field_name); Gets a field value identified by field_name as GBoxed type value. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.0.7 gcut_data_get_object() gcut_data_get_object #define gcut_data_get_object(data, field_name) Gets a field value identified by field_name as GObject type value. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.1.1 gcut_data_get_boolean() gcut_data_get_boolean #define gcut_data_get_boolean(data, field_name) Gets a field value identified by field_name as boolean. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.1.3 gcut_data_get_double() gcut_data_get_double #define gcut_data_get_double(data, field_name) Gets a field value identified by field_name as double floating point number. data : the data added by gcut_add_datum(). field_name : the field name. Returns : a field value corresponded to field_name. Since 1.1.3 cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.1.0.xml0000644000175000017500000002337311442136355023224 0ustar koukou ]> C cppcut_message, macro in CppCutter cut_assert_equal_intmax, macro in Assertions cut_assert_equal_intptr, macro in Assertions cut_assert_equal_int_fast16, macro in Assertions cut_assert_equal_int_fast32, macro in Assertions cut_assert_equal_int_fast64, macro in Assertions cut_assert_equal_int_fast8, macro in Assertions cut_assert_equal_int_least16, macro in Assertions cut_assert_equal_int_least32, macro in Assertions cut_assert_equal_int_least64, macro in Assertions cut_assert_equal_int_least8, macro in Assertions cut_assert_equal_uintmax, macro in Assertions cut_assert_equal_uintptr, macro in Assertions cut_assert_equal_uint_fast16, macro in Assertions cut_assert_equal_uint_fast32, macro in Assertions cut_assert_equal_uint_fast64, macro in Assertions cut_assert_equal_uint_fast8, macro in Assertions cut_assert_equal_uint_least16, macro in Assertions cut_assert_equal_uint_least32, macro in Assertions cut_assert_equal_uint_least64, macro in Assertions cut_assert_equal_uint_least8, macro in Assertions cut_assert_not_equal_intmax, macro in Assertions cut_assert_not_equal_intptr, macro in Assertions cut_assert_not_equal_int_fast16, macro in Assertions cut_assert_not_equal_int_fast32, macro in Assertions cut_assert_not_equal_int_fast64, macro in Assertions cut_assert_not_equal_int_fast8, macro in Assertions cut_assert_not_equal_int_least16, macro in Assertions cut_assert_not_equal_int_least32, macro in Assertions cut_assert_not_equal_int_least64, macro in Assertions cut_assert_not_equal_int_least8, macro in Assertions cut_assert_not_equal_uintmax, macro in Assertions cut_assert_not_equal_uintptr, macro in Assertions cut_assert_not_equal_uint_fast16, macro in Assertions cut_assert_not_equal_uint_fast32, macro in Assertions cut_assert_not_equal_uint_fast64, macro in Assertions cut_assert_not_equal_uint_fast8, macro in Assertions cut_assert_not_equal_uint_least16, macro in Assertions cut_assert_not_equal_uint_least32, macro in Assertions cut_assert_not_equal_uint_least64, macro in Assertions cut_assert_not_equal_uint_least8, macro in Assertions cut_message, function in Cutter cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.2.xml0000644000175000017500000000442311442136355023220 0ustar koukou ]> C cut_assert_equal_fixture_data_string, function in Assertions cut_assert_path_exist, function in Assertions cut_assert_path_not_exist, function in Assertions cut_assert_remove_path, function in Assertions with GLib support cut_build_fixture_data_path, function in Test Utilities cut_error_errno, function in Assertions cut_get_fixture_data_string, function in Test Utilities cut_remove_path, function in Test Utilities cut_set_fixture_data_dir, function in Test Utilities cutter-testing-framework-1.1.7/doc/reference/xml/soupcut-server.xml0000644000175000017500000001347311400101216023677 0ustar koukou ]> Convenience HTTP server API 3 CUTTER Library Convenience HTTP server API API to work as HTTP server. Synopsis SoupServer * soupcut_server_take (SoupServer *server); SoupServer * soupcut_server_take_new (GMainContext *context); const gchar * soupcut_server_build_uri (SoupServer *server, const gchar *path); Description Useful wrappers for SoupServer are provided. Details soupcut_server_take () soupcut_server_take SoupServer * soupcut_server_take (SoupServer *server); server is shut down and unref when tear down. server : a SoupServer. Returns : server owned by Cutter. Don't g_object_unref() it. Since 1.0.8 soupcut_server_take_new () soupcut_server_take_new SoupServer * soupcut_server_take_new (GMainContext *context); Creates and returns a new SoupServer, whose context is context. The server is shut down and unref when tear down. context : a GMainContext for the main loop of a new server. Returns : a new SoupServer owned by Cutter. Don't g_object_unref() it. Since 1.0.8 soupcut_server_build_uri () soupcut_server_build_uri const gchar * soupcut_server_build_uri (SoupServer *server, const gchar *path); an URI is built and returned with the base uri of server and path. server : a SoupServer. path : a path. Returns : a new uri string owned by Cutter. Don't free it. Since 1.0.8 See Also Assertions for HTTP client and server cutter-testing-framework-1.1.7/doc/reference/xml/cut-readable-differ.xml0000644000175000017500000000171411400101215024450 0ustar koukou ]> CutReadableDiffer 3 CUTTER Library CutReadableDiffer Synopsis Description Details cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.4.xml0000644000175000017500000002347011442136355023225 0ustar koukou ]> A gcut_assert_equal_hash_table_string_string, function in Assertions with GLib support gcut_assert_equal_time_val, function in Assertions with GLib support C CutSubProcess, struct in Multi Process CutSubProcessGroup, struct in Multi Process cut_get_current_test_context, macro in Cutter cut_set_attributes, macro in Cutter cut_set_current_test_context, macro in Cutter cut_sub_process_get_elapsed, function in Multi Process cut_sub_process_get_exclude_directories, function in Multi Process cut_sub_process_get_exclude_files, function in Multi Process cut_sub_process_get_fatal_failures, function in Multi Process cut_sub_process_get_multi_thread, function in Multi Process cut_sub_process_get_source_directory, function in Multi Process cut_sub_process_get_target_test_case_names, function in Multi Process cut_sub_process_get_target_test_names, function in Multi Process cut_sub_process_get_test_directory, function in Multi Process cut_sub_process_get_total_elapsed, function in Multi Process cut_sub_process_group_add, function in Multi Process cut_sub_process_group_run, function in Multi Process cut_sub_process_group_run_async, function in Multi Process cut_sub_process_group_wait, function in Multi Process cut_sub_process_is_crashed, function in Multi Process cut_sub_process_is_running, function in Multi Process cut_sub_process_is_success, function in Multi Process cut_sub_process_run, function in Multi Process cut_sub_process_run_async, function in Multi Process cut_sub_process_set_exclude_directories, function in Multi Process cut_sub_process_set_exclude_files, function in Multi Process cut_sub_process_set_fatal_failures, function in Multi Process cut_sub_process_set_multi_thread, function in Multi Process cut_sub_process_set_source_directory, function in Multi Process cut_sub_process_set_target_test_case_names, function in Multi Process cut_sub_process_set_target_test_names, function in Multi Process cut_sub_process_set_test_directory, function in Multi Process cut_sub_process_wait, function in Multi Process cut_take_new_sub_process, function in Multi Process cut_take_new_sub_process_group, function in Multi Process H gcut_hash_table_string_string_new, function in Test Utilities with GLib support T gcut_take_hash_table, function in Test Utilities with GLib support cutter-testing-framework-1.1.7/doc/reference/xml/api-index-deprecated.xml0000644000175000017500000003063611523751237024671 0ustar koukou ]> C CPPCUT_BEGIN_TEST_DECLS, macro in CppCutter CPPCUT_END_TEST_DECLS, macro in CppCutter cut_add_data_backward_compatibility, macro in Cutter cut_append_diff, function in Assertion writing helper cut_assert_equal_g_list_int, function in Assertions with GLib support cut_assert_equal_g_list_string, function in Assertions with GLib support cut_assert_equal_g_type, function in Assertions with GLib support cut_assert_equal_g_value, function in Assertions with GLib support cut_assert_equal_string_or_null, function in Assertions cut_assert_file_exist, function in Assertions cut_assert_g_error, function in Assertions with GLib support cut_assert_path_exist, function in Assertions cut_assert_path_not_exist, function in Assertions cut_assert_remove_path, function in Assertions with GLib support cut_build_fixture_data_path, function in Test Utilities cut_keep_message, function in Cutter cut_pending, function in Assertions cut_set_message, function in Cutter cut_set_message_va_list, function in Cutter cut_test_fail_va_list, function in Assertion writing helper E GCutEgg, struct in GCutEgg GCutEggClass, struct in GCutEgg GCutEggError, enum in GCutEgg gcut_egg_close, function in GCutEgg GCUT_EGG_ERROR, macro in GCutEgg gcut_egg_error_quark, function in GCutEgg gcut_egg_get_env, function in GCutEgg gcut_egg_get_error, function in GCutEgg gcut_egg_get_flags, function in GCutEgg gcut_egg_get_forced_termination_wait_time, function in GCutEgg gcut_egg_get_input, function in GCutEgg gcut_egg_get_output, function in GCutEgg gcut_egg_get_pid, function in GCutEgg gcut_egg_hatch, function in GCutEgg gcut_egg_kill, function in GCutEgg gcut_egg_new, function in GCutEgg gcut_egg_new_argv, function in GCutEgg gcut_egg_new_array, function in GCutEgg gcut_egg_new_strings, function in GCutEgg gcut_egg_new_va_list, function in GCutEgg gcut_egg_set_env, function in GCutEgg gcut_egg_set_flags, function in GCutEgg gcut_egg_set_forced_termination_wait_time, function in GCutEgg gcut_egg_wait, function in GCutEgg gcut_egg_write, function in GCutEgg L gcut_list_enum_inspect, macro in Assertion Utilities for GList gcut_list_flags_inspect, macro in Assertion Utilities for GList gcut_list_int_equal, macro in Assertion Utilities for GList gcut_list_int_inspect, macro in Assertion Utilities for GList gcut_list_object_inspect, macro in Assertion Utilities for GList gcut_list_string_equal, macro in Assertion Utilities for GList gcut_list_string_inspect, macro in Assertion Utilities for GList gcut_list_uint_equal, macro in Assertion Utilities for GList gcut_list_uint_inspect, macro in Assertion Utilities for GList S setup, function in Cutter T gcut_take_new_list_string_backward_compatibility, macro in Test Utilities with GLib support teardown, function in Cutter cutter-testing-framework-1.1.7/doc/reference/xml/cut-experimental.xml0000644000175000017500000001273011400101216024152 0ustar koukou ]> Experimental 3 CUTTER Library Experimental Experimental API. Synopsis #define cut_fork #define cut_wait_process (pid, usec_timeout) #define cut_fork_get_stdout_message (pid) #define cut_fork_get_stderr_message (pid) Description This API may be changed in the future. Details cut_fork cut_fork #define cut_fork() Makes child process. e.g.: int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { do_something_for_child_process(); _exit(EXIT_SUCCESS); } do_something_for_parent_process(); Returns : Process ID. Since 0.8 cut_wait_process() cut_wait_process #define cut_wait_process(pid, usec_timeout) Waits a process specified by pid. e.g.: int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { do_something_for_child_process(); _exit(EXIT_SUCCESS); } do_something_for_parent_process(); cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); pid : Process ID to wait. usec_timeout : Timeout in usec. Since 0.8 cut_fork_get_stdout_message() cut_fork_get_stdout_message #define cut_fork_get_stdout_message(pid) Reads a message from a process specified by pid. e.g.: int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { g_print("I'm a child."); _exit(EXIT_SUCCESS); } cut_assert_equal_string("I'm a child.", cut_fork_get_stdout_message(pid)); cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); pid : Process ID. Returns : a message read from stdout of a process specified by pid. Since 0.8 cut_fork_get_stderr_message() cut_fork_get_stderr_message #define cut_fork_get_stderr_message(pid) Reads a message from a process specified by pid. e.g.: int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { g_print("I'm a child."); _exit(EXIT_SUCCESS); } cut_assert_equal_string("I'm a child.", cut_fork_get_stderr_message(pid)); cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); pid : Process ID. Returns : a message read from stderr of a process specified by pid. Since 0.8 cutter-testing-framework-1.1.7/doc/reference/xml/soupcut-assertions.xml0000644000175000017500000002546511400101216024567 0ustar koukou ]> Assertions for HTTP client and server 3 CUTTER Library Assertions for HTTP client and server Checks that your HTTP client/server works as you expect with libsoup support. Synopsis void soupcut_message_assert_equal_content_type (const gchar *expected, SoupMessage *message, ...); void soupcut_client_assert_equal_content_type (const gchar *expected, SoupCutClient *client, ...); void soupcut_client_assert_response (SoupCutClient *client, ...); void soupcut_client_assert_equal_body (const gchar *expected, SoupCutClient *client, ...); void soupcut_client_assert_match_body (const gchar *pattern, SoupCutClient *client, ...); Description Details soupcut_message_assert_equal_content_type () soupcut_message_assert_equal_content_type void soupcut_message_assert_equal_content_type (const gchar *expected, SoupMessage *message, ...); Passes if expected == message->response_headers->content_type. expected : an expected Content-Type. message : a SoupMessage. ... : optional message. See cut_message() for details. Since 1.0.8 soupcut_client_assert_equal_content_type () soupcut_client_assert_equal_content_type void soupcut_client_assert_equal_content_type (const gchar *expected, SoupCutClient *client, ...); Passes if expected equals to Content-Type of the latest message of client. expected : an expected Content-Type. client : a SoupCutClient. ... : optional message. See cut_message() for details. Since 1.0.8 soupcut_client_assert_response () soupcut_client_assert_response void soupcut_client_assert_response (SoupCutClient *client, ...); Passes if status code of client is 2XX. client : a SoupCutClient. ... : optional message. See cut_message() for details. Since 1.0.8 soupcut_client_assert_equal_body () soupcut_client_assert_equal_body void soupcut_client_assert_equal_body (const gchar *expected, SoupCutClient *client, ...); Passes if expected == client->response_body->data. expected : an expected response body. client : a SoupCutClient. ... : optional message. See cut_message() for details. Since 1.0.8 soupcut_client_assert_match_body () soupcut_client_assert_match_body void soupcut_client_assert_match_body (const gchar *pattern, SoupCutClient *client, ...); Passes if pattern matches the response body of the latest message of client. pattern : the regular expression pattern. client : a SoupCutClient. ... : optional message. See cut_message() for details. Since 1.0.8 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-io.xml0000644000175000017500000000360011400101216022227 0ustar koukou ]> gcut-io 3 CUTTER Library gcut-io Synopsis gchar * gcut_io_inspect_condition (GIOCondition condition); Description Details gcut_io_inspect_condition () gcut_io_inspect_condition gchar * gcut_io_inspect_condition (GIOCondition condition); condition : Returns : cutter-testing-framework-1.1.7/doc/reference/xml/soupcutter.xml0000644000175000017500000000474111424023261023115 0ustar koukou ]> SoupCutter 3 CUTTER Library SoupCutter HTTP supported Cutter with libsoup. Synopsis #define SOUPCUTTER_ENABLED Description SoupCutter adds many useful HTTP related features based on libsoup to Cutter. If you want to write tests for HTTP, it's good idea that you consider SoupCutter to be used too. It's easy to use SoupCutter. You just include <soupcuttter.h> instead of <cutter.h> or <gcutter.h> and use soupcutter-pixbuf.pc instead of cutter.pc or gcutter.pc: test-xxx.c: -#include <cutter.h> +#include <soupcutter.h> configure.ac: -AC_CHECK_CUTTER +AC_CHECK_SOUPCUTTER Makefile.am: -XXX_CFLAGS = $(CUTTER_CFLAGS) -XXX_LIBS = $(CUTTER_LIBS) +XXX_CFLAGS = $(SOUPCUTTER_CFLAGS) +XXX_LIBS = $(SOUPCUTTER_LIBS) Details SOUPCUTTER_ENABLED SOUPCUTTER_ENABLED #define SOUPCUTTER_ENABLED 1 Defined when SoupCutter is enabled. Since 1.0.8 See Also Assertions for HTTP client/server based on libsoup cutter-testing-framework-1.1.7/doc/reference/xml/cppcutter.xml0000644000175000017500000001460211400101216022675 0ustar koukou ]> CppCutter 3 CUTTER Library CppCutter Cutter with C++ support. Synopsis #define CPPCUTTER_ENABLED #define CPPCUT_BEGIN_TEST_DECLS #define CPPCUT_END_TEST_DECLS #define cppcut_message (...) Description CppCutter provides C++ friendly interface of Cutter. If you want to write tests with C++, it's good idea that you consider CppCutter to be used too. It's easy to use CppCutter. You just include <cppcutter.h> instead of <cutter.h> and use cppcutter.pc instead of cutter.pc: test-xxx.cpp: -#include <cutter.h> +#include <cppcutter.h> configure.ac: -AC_CHECK_CUTTER +AC_CHECK_CPPCUTTER Makefile.am: -XXX_CFLAGS = $(CUTTER_CFLAGS) -XXX_LIBS = $(CUTTER_LIBS) +XXX_CFLAGS = $(CPPCUTTER_CFLAGS) +XXX_LIBS = $(CPPCUTTER_LIBS) Test functions are defined in namespace. Naming convention is the same as Cutter. i.e.: 'test_...' function is test function, 'setup' or 'cut_setup' is setup function and 'teardown' or 'cut_teardown' is teardown function. test-calc.cpp: #include <cppcutter.h> namespace calc { void test_add (void) { cppcut_assert_equal(3, calc.add(1, 2)); } void test_sub (void) { cppcut_assert_equal(5, calc.sub(9, 4)); } } You just define a function for adding a new test. You don't need to use magical macros. Details CPPCUTTER_ENABLED CPPCUTTER_ENABLED #define CPPCUTTER_ENABLED 1 Defined when CppCutter is enabled. Since 1.0.9 CPPCUT_BEGIN_TEST_DECLS CPPCUT_BEGIN_TEST_DECLSCPPCUT_BEGIN_TEST_DECLS #define CPPCUT_BEGIN_TEST_DECLS extern "C" { CPPCUT_BEGIN_TEST_DECLS has been deprecated since version 1.1.0 and should not be used in newly-written code. Use namespace instead. Use CPPCUT_BEGIN_TEST_DECLS and CPPCUT_END_TEST_DECLS pair for prototype declarations for test functions: CPPCUT_BEGIN_TEST_DECLS void test_add (); void test_remove (); CPPCUT_END_TEST_DECLS Those macros just surround prototype declarations for test functions with 'extern "C" {...}'. Since 1.0.9 CPPCUT_END_TEST_DECLS CPPCUT_END_TEST_DECLSCPPCUT_END_TEST_DECLS #define CPPCUT_END_TEST_DECLS } CPPCUT_END_TEST_DECLS has been deprecated since version 1.1.0 and should not be used in newly-written code. Use namespace instead. See CPPCUT_BEGIN_TEST_DECLS. Since 1.0.9 cppcut_message() cppcut_message #define cppcut_message(...) Specifies optional assertion message with C++ friendly API. The optional message can be specified with printf() style API or "<<" stream style API. e.g.: cppcut_assert_equal("abc", "def", cppcut_message("should fail!")); cppcut_assert_equal("abc", "def", cppcut_message() << "should fail!"); ... : the parameters to insert into the format string. Returns : Since 1.1.0 See Also Assertions with C++ support cutter-testing-framework-1.1.7/doc/reference/xml/cut-features.xml0000644000175000017500000000651011424024726023312 0ustar koukou ]> Available features 3 CUTTER Library Available features Available features in the installed Cutter. Synopsis #define CUT_SUPPORT_GLIB #define CUT_SUPPORT_GDK_PIXBUF #define CUT_SUPPORT_GIO #define CUT_SUPPORT_LIBSOUP #define CUT_SUPPORT_C99_STDINT_TYPES Description There are some macros to check a feature is available in the installed Cutter. Details CUT_SUPPORT_GLIB CUT_SUPPORT_GLIB #define CUT_SUPPORT_GLIB 1 Shows GLib support is available. That is, we can use <gcutter.h>. It is always defined. CUT_SUPPORT_GDK_PIXBUF CUT_SUPPORT_GDK_PIXBUF #define CUT_SUPPORT_GDK_PIXBUF 1 Shows GdkPixbuf support is available. That is, we can use <gdkcutter-pixbuf.h>. CUT_SUPPORT_GIO CUT_SUPPORT_GIO #define CUT_SUPPORT_GIO 1 Shows GIO support is available. CUT_SUPPORT_LIBSOUP CUT_SUPPORT_LIBSOUP #define CUT_SUPPORT_LIBSOUP 1 Shows LibSoup support is available. CUT_SUPPORT_C99_STDINT_TYPES CUT_SUPPORT_C99_STDINT_TYPES #define CUT_SUPPORT_C99_STDINT_TYPES 1 Shows C99 stdint types support is available. That is, we can use assertions that use C99 stdint types. e.g. cut_assert_equal_int_least8(). cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.3.xml0000644000175000017500000000734711442136355023231 0ustar koukou ]> A gcut_assert_equal_list_int, function in Assertions with GLib support gcut_assert_equal_list_string, function in Assertions with GLib support gcut_assert_equal_list_uint, function in Assertions with GLib support gcut_assert_equal_type, function in Assertions with GLib support gcut_assert_equal_value, function in Assertions with GLib support gcut_assert_error, function in Assertions with GLib support gcut_assert_remove_path, function in Assertions with GLib support C cut_add_data, macro in Cutter cut_append_diff, function in Assertion writing helper L gcut_list_string_free, function in Test Utilities with GLib support gcut_list_string_new, function in Test Utilities with GLib support T gcut_take_error, function in Test Utilities with GLib support gcut_take_list, function in Test Utilities with GLib support gcut_take_object, function in Test Utilities with GLib support cutter-testing-framework-1.1.7/doc/reference/xml/gcut-inspect.xml0000644000175000017500000007330311424024726023314 0ustar koukou ]> Object inspection functions 3 CUTTER Library Object inspection functions Functions to inspect an object for debugging. Synopsis void gcut_inspect_direct (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_int (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_uint (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_int64 (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_uint64 (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_size (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_char (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_string (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_type (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_flags (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_enum (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_pointer (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_boolean (GString *string, gconstpointer data, gpointer user_data); void gcut_inspect_double (GString *string, gconstpointer data, gpointer user_data); Description In test result, we need to know detail of inspected objects for debugging. Functions of this section help us to inspect interested objects. Details gcut_inspect_direct () gcut_inspect_direct void gcut_inspect_direct (GString *string, gconstpointer data, gpointer user_data); Shows data as unsigned integer. e.g.: gcut_inspect_direct(string, GUINT_TO_POINTER(100), NULL) -> "100" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.0.6 gcut_inspect_int () gcut_inspect_int void gcut_inspect_int (GString *string, gconstpointer data, gpointer user_data); Shows data as integer. e.g.: gint int_value = 100; gcut_inspect_int(string, &int_value, NULL) -> "100" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.0.6 gcut_inspect_uint () gcut_inspect_uint void gcut_inspect_uint (GString *string, gconstpointer data, gpointer user_data); Shows data as unsigned integer. e.g.: guint uint_value = 100; gcut_inspect_uint(string, &uint_value, NULL) -> "100" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.0.6 gcut_inspect_int64 () gcut_inspect_int64 void gcut_inspect_int64 (GString *string, gconstpointer data, gpointer user_data); Shows data as 64-bit integer. e.g.: gint64 int64_value = 100; gcut_inspect_int64(string, &int64_value, NULL) -> "100" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.1.3 gcut_inspect_uint64 () gcut_inspect_uint64 void gcut_inspect_uint64 (GString *string, gconstpointer data, gpointer user_data); Shows data as 64-bit unsigned integer. e.g.: guint64 uint64_value = 100; gcut_inspect_uint64(string, &uint64_value, NULL) -> "100" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.1.3 gcut_inspect_size () gcut_inspect_size void gcut_inspect_size (GString *string, gconstpointer data, gpointer user_data); Shows data as unsigned integer. e.g.: gsize size_value = 100; gcut_inspect_size(string, &size_value, NULL) -> "100" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.1.3 gcut_inspect_char () gcut_inspect_char void gcut_inspect_char (GString *string, gconstpointer data, gpointer user_data); Shows data as character. e.g.: gcut_inspect_char(string, 'C', NULL) -> "'C'" gcut_inspect_char(string, '\0', NULL) -> "'\0'" gcut_inspect_char(string, '\n', NULL) -> "'\n'" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.1.3 gcut_inspect_string () gcut_inspect_string void gcut_inspect_string (GString *string, gconstpointer data, gpointer user_data); Shows data as string. It also accepts NULL. e.g.: gcut_inspect_string(string, "string", NULL) -> "\"string\"" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.0.6 gcut_inspect_type () gcut_inspect_type void gcut_inspect_type (GString *string, gconstpointer data, gpointer user_data); Shows data as GType. e.g.: gcut_inspect_type(string, GTK_TYPE_WINDOW, NULL) -> "<GtkWindow>" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.0.6 gcut_inspect_flags () gcut_inspect_flags void gcut_inspect_flags (GString *string, gconstpointer data, gpointer user_data); Shows data as value a GFlags type. e.g.: GType flags_type; GtkWidgetFlags flags; flags_type = GTK_TYPE_WIDGET_FLAGS; flags = GTK_TOPLEVEL | GTK_VISIBLE; gcut_inspect_flags(string, &flags, &flags_type); -> #<GtkWidgetFlags: toplevel|visible (GTK_TOPLEVEL:0x10)|(GTK_VISIBLE:0x100)> string : the output string. data : the interested target. user_data : the pointer of GFlags type. Since 1.0.6 gcut_inspect_enum () gcut_inspect_enum void gcut_inspect_enum (GString *string, gconstpointer data, gpointer user_data); Shows data as value of a GEnum type. e.g.: GType enum_type; GtkWidgetHelpType value; enum_type = GTK_TYPE_WIDGET_HELP_TYPE; value = GTK_WIDGET_HELP_TOOLTIP; gcut_inspect_enum(string, &value, &enum_type); -> #<GtkWidgetHelpType: tooltip(GTK_WIDGET_HELP_TOOLTIP:0)> string : the output string. data : the interested target. user_data : the pointer of GEnum type. Since 1.0.6 gcut_inspect_pointer () gcut_inspect_pointer void gcut_inspect_pointer (GString *string, gconstpointer data, gpointer user_data); Shows data as a pointer. e.g.: memory = malloc(1); gcut_inspect_pointer(string, memory, NULL) -> "#<0xXXXXXXX>" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.0.6 gcut_inspect_boolean () gcut_inspect_boolean void gcut_inspect_boolean (GString *string, gconstpointer data, gpointer user_data); Shows data as boolean. e.g.: gboolean boolean_value; boolean_value = TRUE; gcut_inspect_boolean(string, &boolean_value, NULL) -> "TRUE" boolean_value = FALSE; gcut_inspect_boolean(string, &boolean_value, NULL) -> "FALSE" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.1.3 gcut_inspect_double () gcut_inspect_double void gcut_inspect_double (GString *string, gconstpointer data, gpointer user_data); Shows data as double floating point number. e.g.: gdouble double_value = 2.9; gcut_inspect_double(string, &double_value, NULL) -> "2.9" string : the output string. data : the interested target. user_data : the data passed by user. (ignored) Since 1.1.3 cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.xml0000644000175000017500000000220511442136355023054 0ustar koukou ]> C cut_assert_equal_pointer, function in Assertions cut_assert_g_error, function in Assertions with GLib support cut_assert_match, function in Assertions cut_assert_match_with_free, function in Assertions cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.1.4.xml0000644000175000017500000000335411442136355023225 0ustar koukou ]> A gcut_assert_not_equal_int64, function in Assertions with GLib support gcut_assert_not_equal_uint64, function in Assertions with GLib support C cut_assert_equal_file_raw, macro in Assertions cut_assert_not_equal_file_raw, macro in Assertions cut_get_test_directory, function in Assertion writing helper cut_take_inspect_string, function in Test Utilities cutter-testing-framework-1.1.7/doc/reference/xml/cut-console.xml0000644000175000017500000002310411400101215023113 0ustar koukou ]> cut-console 3 CUTTER Library cut-console Synopsis #define CUT_CONSOLE_COLOR_RED #define CUT_CONSOLE_COLOR_RED_BACK #define CUT_CONSOLE_COLOR_GREEN #define CUT_CONSOLE_COLOR_GREEN_BACK #define CUT_CONSOLE_COLOR_YELLOW #define CUT_CONSOLE_COLOR_BLUE #define CUT_CONSOLE_COLOR_BLUE_BACK #define CUT_CONSOLE_COLOR_MAGENTA #define CUT_CONSOLE_COLOR_CYAN #define CUT_CONSOLE_COLOR_CYAN_BACK #define CUT_CONSOLE_COLOR_WHITE #define CUT_CONSOLE_COLOR_WHITE_BACK #define CUT_CONSOLE_COLOR_BLACK_BACK #define CUT_CONSOLE_COLOR_NORMAL gboolean cut_console_guess_color_usability (void); gboolean cut_console_parse_color_arg (const gchar *option_name, const gchar *value, gboolean *use_color, GError **error); Description Details CUT_CONSOLE_COLOR_RED CUT_CONSOLE_COLOR_RED #define CUT_CONSOLE_COLOR_RED "\033[01;31m" CUT_CONSOLE_COLOR_RED_BACK CUT_CONSOLE_COLOR_RED_BACK #define CUT_CONSOLE_COLOR_RED_BACK "\033[41m" CUT_CONSOLE_COLOR_GREEN CUT_CONSOLE_COLOR_GREEN #define CUT_CONSOLE_COLOR_GREEN "\033[01;32m" CUT_CONSOLE_COLOR_GREEN_BACK CUT_CONSOLE_COLOR_GREEN_BACK #define CUT_CONSOLE_COLOR_GREEN_BACK "\033[01;42m" CUT_CONSOLE_COLOR_YELLOW CUT_CONSOLE_COLOR_YELLOW #define CUT_CONSOLE_COLOR_YELLOW "\033[01;33m" CUT_CONSOLE_COLOR_BLUE CUT_CONSOLE_COLOR_BLUE #define CUT_CONSOLE_COLOR_BLUE "\033[01;34m" CUT_CONSOLE_COLOR_BLUE_BACK CUT_CONSOLE_COLOR_BLUE_BACK #define CUT_CONSOLE_COLOR_BLUE_BACK "\033[01;44m" CUT_CONSOLE_COLOR_MAGENTA CUT_CONSOLE_COLOR_MAGENTA #define CUT_CONSOLE_COLOR_MAGENTA "\033[01;35m" CUT_CONSOLE_COLOR_CYAN CUT_CONSOLE_COLOR_CYAN #define CUT_CONSOLE_COLOR_CYAN "\033[01;36m" CUT_CONSOLE_COLOR_CYAN_BACK CUT_CONSOLE_COLOR_CYAN_BACK #define CUT_CONSOLE_COLOR_CYAN_BACK "\033[01;46m" CUT_CONSOLE_COLOR_WHITE CUT_CONSOLE_COLOR_WHITE #define CUT_CONSOLE_COLOR_WHITE "\033[01;37m" CUT_CONSOLE_COLOR_WHITE_BACK CUT_CONSOLE_COLOR_WHITE_BACK #define CUT_CONSOLE_COLOR_WHITE_BACK "\033[01;47m" CUT_CONSOLE_COLOR_BLACK_BACK CUT_CONSOLE_COLOR_BLACK_BACK #define CUT_CONSOLE_COLOR_BLACK_BACK "\033[01;40m" CUT_CONSOLE_COLOR_NORMAL CUT_CONSOLE_COLOR_NORMAL #define CUT_CONSOLE_COLOR_NORMAL "\033[00m" cut_console_guess_color_usability () cut_console_guess_color_usability gboolean cut_console_guess_color_usability (void); Returns : cut_console_parse_color_arg () cut_console_parse_color_arg gboolean cut_console_parse_color_arg (const gchar *option_name, const gchar *value, gboolean *use_color, GError **error); option_name : value : use_color : error : Returns : cutter-testing-framework-1.1.7/doc/reference/xml/gcut-string.xml0000644000175000017500000001100611424027634023146 0ustar koukou ]> Assertion Utilities for GString 3 CUTTER Library Assertion Utilities for GString Utilities to write assertions related to GString more easily. Synopsis gboolean gcut_string_equal (const GString *string1, const GString *string2); gchar * gcut_string_inspect (const GString *string); Description To write assertions, you need to check equality and show expected and actual values. The utilities help you to write assertions that are related to GString. Details gcut_string_equal () gcut_string_equal gboolean gcut_string_equal (const GString *string1, const GString *string2); Compares two GString, string1 and string2. string1 : a GString to be compared. string2 : a GString to be compared. Returns : TRUE if both of string1 and string2 have the same content, FALSE otherwise. Since 1.1.5 gcut_string_inspect () gcut_string_inspect gchar * gcut_string_inspect (const GString *string); Inspects string. The returned string should be freed when no longer needed. string : a GString value. Returns : inspected string as a string. Since 1.1.5 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-assertions.xml0000644000175000017500000021651611442136354024047 0ustar koukou ]> Assertions with GLib support 3 CUTTER Library Assertions with GLib support Checks that your program works as you expect with GLib support. Synopsis void gcut_assert_equal_type (GType expected, GType actual, ...); void cut_assert_equal_g_type (GType expected, GType actual, ...); void gcut_assert_equal_value (GValue *expected, GValue *actual, ...); void cut_assert_equal_g_value (GValue *expected, GValue *actual, ...); void gcut_assert_equal_list (GList *expected, GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, ...); void gcut_assert_equal_list_int (GList *expected, GList *actual, ...); void cut_assert_equal_g_list_int (GList *expected, GList *actual, ...); void gcut_assert_equal_list_uint (GList *expected, GList *actual, ...); void gcut_assert_equal_list_string (GList *expected, GList *actual, ...); void cut_assert_equal_g_list_string (GList *expected, GList *actual, ...); void gcut_assert_equal_list_object (GList *expected, GList *actual, ...); void gcut_assert_equal_list_object_custom (GList *expected, GList *actual, GEqualFunc equal_function, ...); void gcut_assert_equal_list_enum (GType type, GList *expected, GList *actual, ...); void gcut_assert_equal_list_flags (GType type, GList *expected, GList *actual, ...); void gcut_assert_equal_hash_table (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, ...); void gcut_assert_equal_hash_table_string_string (GHashTable *expected, GHashTable *actual, ...); void gcut_assert_error (GError *error, ...); void cut_assert_g_error (GError *error, ...); void gcut_assert_equal_error (GError *expected, GError *actual, ...); void gcut_assert_remove_path (const gchar *path, ...); void cut_assert_remove_path (const gchar *path, ...); void gcut_assert_equal_time_val (GTimeVal expected, GTimeVal actual, ...); void gcut_assert_equal_enum (GType enum_type, gint expected, gint actual, ...); void gcut_assert_equal_flags (GType flags_type, guint expected, guint actual, ...); void gcut_assert_equal_object (GObject *expected, GObject *actual, ...); void gcut_assert_equal_object_custom (GObject *expected, GObject *actual, GEqualFunc equal_function, ...); void gcut_assert_equal_int64 (gint64 expected, gint64 actual, ...); void gcut_assert_not_equal_int64 (gint64 expected, gint64 actual, ...); void gcut_assert_equal_uint64 (guint64 expected, guint64 actual, ...); void gcut_assert_not_equal_uint64 (guint64 expected, guint64 actual, ...); void gcut_assert_equal_pid (GPid expected, GPid actual, ...); void gcut_assert_not_equal_pid (GPid expected, GPid actual, ...); void gcut_assert_equal_string (GString *expected, GString *actual, ...); Description Details gcut_assert_equal_type () gcut_assert_equal_type void gcut_assert_equal_type (GType expected, GType actual, ...); Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.3 cut_assert_equal_g_type () cut_assert_equal_g_type void cut_assert_equal_g_type (GType expected, GType actual, ...); cut_assert_equal_g_type has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_type() instead. Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. gcut_assert_equal_value () gcut_assert_equal_value void gcut_assert_equal_value (GValue *expected, GValue *actual, ...); Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.3 cut_assert_equal_g_value () cut_assert_equal_g_value void cut_assert_equal_g_value (GValue *expected, GValue *actual, ...); cut_assert_equal_g_value has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_value() instead. Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. gcut_assert_equal_list () gcut_assert_equal_list void gcut_assert_equal_list (GList *expected, GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, ...); Passes if equal_function(expected, actual) == CUT_TRUE. expected : an expected list. actual : an actual list. equal_function : a function that compares each elements of expected and actual list. inspect_function : a function that inspected expected and actual list. inspect_user_data : a data to be passed to inspect_function. ... : optional message. See cut_message() for details. Since 1.0.6 gcut_assert_equal_list_int () gcut_assert_equal_list_int void gcut_assert_equal_list_int (GList *expected, GList *actual, ...); Passes if expected == actual. expected : an expected list of integer. actual : an actual list of integer. ... : optional message. See cut_message() for details. Since 1.0.3 cut_assert_equal_g_list_int () cut_assert_equal_g_list_intcut_assert_equal_g_list_int void cut_assert_equal_g_list_int (GList *expected, GList *actual, ...); cut_assert_equal_g_list_int has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_list_int() instead. Passes if expected == actual. expected : an expected list of integer. actual : an actual list of integer. ... : optional message. See cut_message() for details. Since 0.8 gcut_assert_equal_list_uint () gcut_assert_equal_list_uint void gcut_assert_equal_list_uint (GList *expected, GList *actual, ...); Passes if expected == actual. expected : an expected list of unsigned integer. actual : an actual list of unsigned integer. ... : optional message. See cut_message() for details. Since 1.0.3 gcut_assert_equal_list_string () gcut_assert_equal_list_string void gcut_assert_equal_list_string (GList *expected, GList *actual, ...); Passes if expected == actual. expected : an expected list of string. actual : an actual list of string. ... : optional message. See cut_message() for details. Since 1.0.3 cut_assert_equal_g_list_string () cut_assert_equal_g_list_stringcut_assert_equal_g_list_string void cut_assert_equal_g_list_string (GList *expected, GList *actual, ...); cut_assert_equal_g_list_string has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_equal_list_string() instead. Passes if expected == actual. expected : an expected list of string. actual : an actual list of string. ... : optional message. See cut_message() for details. Since 0.8 gcut_assert_equal_list_object () gcut_assert_equal_list_object void gcut_assert_equal_list_object (GList *expected, GList *actual, ...); Passes if expected and actual has same GObject * in same order. expected : an expected list of GObject. actual : an actual list of GObject. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_equal_list_object_custom () gcut_assert_equal_list_object_custom void gcut_assert_equal_list_object_custom (GList *expected, GList *actual, GEqualFunc equal_function, ...); Passes if expected and actual has same GObject in same order. Each comparison of GObject uses equal_function. expected : an expected list of GObject. actual : an actual list of GObject. equal_function : a function that compares two GObject. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_equal_list_enum () gcut_assert_equal_list_enum void gcut_assert_equal_list_enum (GType type, GList *expected, GList *actual, ...); Passes if expected and actual has same enum values in same order. type : a GEnum type. expected : an expected list of enum value. actual : an actual list of enum value. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_equal_list_flags () gcut_assert_equal_list_flags void gcut_assert_equal_list_flags (GType type, GList *expected, GList *actual, ...); Passes if expected and actual has same flags values in same order. type : a GFlags type. expected : an expected list of flags value. actual : an actual list of flags value. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_equal_hash_table () gcut_assert_equal_hash_table void gcut_assert_equal_hash_table (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, ...); Passes if expected == actual. expected : an expected GHashTable of string. actual : an actual GHashTable of string. equal_function : a function that compares each values of expected and actual hash table. key_inspect_function : a function that inspected a key of expected and actual hash table. value_inspect_function : a function that inspected a value of expected and actual hash table. inspect_user_data : a data to be passed to inspect_function. ... : optional message. See cut_message() for details. Since 1.0.6 gcut_assert_equal_hash_table_string_string () gcut_assert_equal_hash_table_string_string void gcut_assert_equal_hash_table_string_string (GHashTable *expected, GHashTable *actual, ...); Passes if expected == actual. expected : an expected GHashTable of string. actual : an actual GHashTable of string. ... : optional message. See cut_message() for details. Since 1.0.4 gcut_assert_error () gcut_assert_error void gcut_assert_error (GError *error, ...); Passes if error == NULL. error : a target GError. ... : optional message. See cut_message() for details. Since 1.0.3 cut_assert_g_error () cut_assert_g_errorcut_assert_g_error void cut_assert_g_error (GError *error, ...); cut_assert_g_error has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_error() instead. Passes if error == NULL. error : a target GError. ... : optional message. See cut_message() for details. Since 1.0 gcut_assert_equal_error () gcut_assert_equal_error void gcut_assert_equal_error (GError *expected, GError *actual, ...); Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_remove_path () gcut_assert_remove_path void gcut_assert_remove_path (const gchar *path, ...); Passes if cut_utils_build_path(path, ...) is removed successfully. path : a first element of the path to the removed path. ... : remaining elements in path. NULL terminated. Since 1.0.3 cut_assert_remove_path () cut_assert_remove_pathcut_assert_remove_path void cut_assert_remove_path (const gchar *path, ...); cut_assert_remove_path has been deprecated since version 1.0.3 and should not be used in newly-written code. Use gcut_assert_remove_path() instead. Passes if cut_utils_build_path(path, ...) is removed successfully. path : a first element of the path to the removed path. ... : remaining elements in path. NULL terminated. Since 1.0.2 gcut_assert_equal_time_val () gcut_assert_equal_time_val void gcut_assert_equal_time_val (GTimeVal expected, GTimeVal actual, ...); Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.4 gcut_assert_equal_enum () gcut_assert_equal_enum void gcut_assert_equal_enum (GType enum_type, gint expected, gint actual, ...); Passes if expected == actual. e.g.: gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE, GTK_DIR_LEFT, GTK_DIR_LEFT); -> Pass gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE, GTK_DIR_DOWN, GTK_DIR_LEFT); -> Fail enum_type : a GEnum type. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_equal_flags () gcut_assert_equal_flags void gcut_assert_equal_flags (GType flags_type, guint expected, guint actual, ...); Passes if expected == actual. e.g.: gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS, GTK_DIALOG_DESTROY_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_DIALOG_DESTROY_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT); -> Pass gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS, GTK_DIALOG_DESTROY_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_DIALOG_DESTROY_MODAL); -> Fail flags_type : a GFlags type. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_equal_object () gcut_assert_equal_object void gcut_assert_equal_object (GObject *expected, GObject *actual, ...); Passes if expected == actual. See gcut_assert_equal_object_custom() when you need to customize equality check. e.g.: gcut_assert_equal_object(object, object); -> Pass gcut_assert_equal_object(object1, object2); -> Fail gcut_assert_equal_object(NULL, NULL); -> Pass gcut_assert_equal_object(object1, NULL); -> Fail expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_equal_object_custom () gcut_assert_equal_object_custom void gcut_assert_equal_object_custom (GObject *expected, GObject *actual, GEqualFunc equal_function, ...); Passes if equal_function(expected, actual) == CUT_TRUE. e.g.: static gboolean equal_name (gconstpointer data1, gconstpointer data2) { return g_str_equal(my_object_get_name(MY_OBJECT(data1)), my_object_get_name(MY_OBJECT(data2))); } gcut_assert_equal_object_custom(object, object, equal_name); -> Pass gcut_assert_equal_object_custom(same_name_object1, same_name_object2, equal_name); -> Pass gcut_assert_equal_object_custom(different_name_object1, different_name_object2, equal_name); -> Fail expected : an expected value. actual : an actual value. equal_function : a function that compare two objects. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_equal_int64 () gcut_assert_equal_int64 void gcut_assert_equal_int64 (gint64 expected, gint64 actual, ...); Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_not_equal_int64 () gcut_assert_not_equal_int64 void gcut_assert_not_equal_int64 (gint64 expected, gint64 actual, ...); Passes if expected != actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.1.4 gcut_assert_equal_uint64 () gcut_assert_equal_uint64 void gcut_assert_equal_uint64 (guint64 expected, guint64 actual, ...); Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.5 gcut_assert_not_equal_uint64 () gcut_assert_not_equal_uint64 void gcut_assert_not_equal_uint64 (guint64 expected, guint64 actual, ...); Passes if expected != actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.1.4 gcut_assert_equal_pid () gcut_assert_equal_pid void gcut_assert_equal_pid (GPid expected, GPid actual, ...); Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.6 gcut_assert_not_equal_pid () gcut_assert_not_equal_pid void gcut_assert_not_equal_pid (GPid expected, GPid actual, ...); Passes if expected != actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.0.7 gcut_assert_equal_string () gcut_assert_equal_string void gcut_assert_equal_string (GString *expected, GString *actual, ...); Passes if expected == actual. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. Since 1.1.5 cutter-testing-framework-1.1.7/doc/reference/xml/api-index-0.3.xml0000644000175000017500000000133611442136355023062 0ustar koukou ]> C cut_assert_equal_string_with_free, function in Assertions cut_assert_null_string, function in Assertions cutter-testing-framework-1.1.7/doc/reference/xml/gcut-assertions-helper.xml0000644000175000017500000017350411424024726025322 0ustar koukou ]> gcut-assertions-helper 3 CUTTER Library gcut-assertions-helper Synopsis void gcut_assert_equal_type_helper (GType expected, GType actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_value_helper (GValue *expected, GValue *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_list_int_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_uint_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_string_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_enum_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_flags_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_object_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_hash_table_helper (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_hash_table_string_string_helper (GHashTable *expected, GHashTable *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_error_helper (GError *error, const gchar *expression_error); void gcut_assert_equal_error_helper (const GError *expected, const GError *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_remove_path_helper (const gchar *path, ...); void gcut_assert_equal_time_val_helper (GTimeVal *expected, GTimeVal *actual, const gchar *expression_expected, const gchar *actual_expected); void gcut_assert_equal_enum_helper (GType enum_type, gint expected, gint actual, const gchar *expression_enum_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_flags_helper (GType flags_type, gint expected, gint actual, const gchar *expression_flags_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_object_helper (GObject *expected, GObject *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_string_helper (const GString *expected, const GString *actual, const gchar *expression_expected, const gchar *expression_actual); Description Details gcut_assert_equal_type_helper () gcut_assert_equal_type_helper void gcut_assert_equal_type_helper (GType expected, GType actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_value_helper () gcut_assert_equal_value_helper void gcut_assert_equal_value_helper (GValue *expected, GValue *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_list_helper () gcut_assert_equal_list_helper void gcut_assert_equal_list_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); expected : actual : equal_function : inspect_function : inspect_user_data : expression_expected : expression_actual : expression_equal_function : gcut_assert_equal_list_int_helper () gcut_assert_equal_list_int_helper void gcut_assert_equal_list_int_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_list_uint_helper () gcut_assert_equal_list_uint_helper void gcut_assert_equal_list_uint_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_list_string_helper () gcut_assert_equal_list_string_helper void gcut_assert_equal_list_string_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_list_enum_helper () gcut_assert_equal_list_enum_helper void gcut_assert_equal_list_enum_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); type : expected : actual : expression_type : expression_expected : expression_actual : gcut_assert_equal_list_flags_helper () gcut_assert_equal_list_flags_helper void gcut_assert_equal_list_flags_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); type : expected : actual : expression_type : expression_expected : expression_actual : gcut_assert_equal_list_object_helper () gcut_assert_equal_list_object_helper void gcut_assert_equal_list_object_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual); expected : actual : equal_function : expression_expected : expression_actual : gcut_assert_equal_hash_table_helper () gcut_assert_equal_hash_table_helper void gcut_assert_equal_hash_table_helper (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); expected : actual : equal_function : key_inspect_function : value_inspect_function : inspect_user_data : expression_expected : expression_actual : expression_equal_function : gcut_assert_equal_hash_table_string_string_helper () gcut_assert_equal_hash_table_string_string_helper void gcut_assert_equal_hash_table_string_string_helper (GHashTable *expected, GHashTable *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_error_helper () gcut_assert_error_helper void gcut_assert_error_helper (GError *error, const gchar *expression_error); error : expression_error : gcut_assert_equal_error_helper () gcut_assert_equal_error_helper void gcut_assert_equal_error_helper (const GError *expected, const GError *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_remove_path_helper () gcut_assert_remove_path_helper void gcut_assert_remove_path_helper (const gchar *path, ...); path : ... : gcut_assert_equal_time_val_helper () gcut_assert_equal_time_val_helper void gcut_assert_equal_time_val_helper (GTimeVal *expected, GTimeVal *actual, const gchar *expression_expected, const gchar *actual_expected); expected : actual : expression_expected : actual_expected : gcut_assert_equal_enum_helper () gcut_assert_equal_enum_helper void gcut_assert_equal_enum_helper (GType enum_type, gint expected, gint actual, const gchar *expression_enum_type, const gchar *expression_expected, const gchar *expression_actual); enum_type : expected : actual : expression_enum_type : expression_expected : expression_actual : gcut_assert_equal_flags_helper () gcut_assert_equal_flags_helper void gcut_assert_equal_flags_helper (GType flags_type, gint expected, gint actual, const gchar *expression_flags_type, const gchar *expression_expected, const gchar *expression_actual); flags_type : expected : actual : expression_flags_type : expression_expected : expression_actual : gcut_assert_equal_object_helper () gcut_assert_equal_object_helper void gcut_assert_equal_object_helper (GObject *expected, GObject *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); expected : actual : equal_function : expression_expected : expression_actual : expression_equal_function : gcut_assert_equal_int64_helper () gcut_assert_equal_int64_helper void gcut_assert_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_not_equal_int64_helper () gcut_assert_not_equal_int64_helper void gcut_assert_not_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_uint64_helper () gcut_assert_equal_uint64_helper void gcut_assert_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_not_equal_uint64_helper () gcut_assert_not_equal_uint64_helper void gcut_assert_not_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_pid_helper () gcut_assert_equal_pid_helper void gcut_assert_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_not_equal_pid_helper () gcut_assert_not_equal_pid_helper void gcut_assert_not_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); expected : actual : expression_expected : expression_actual : gcut_assert_equal_string_helper () gcut_assert_equal_string_helper void gcut_assert_equal_string_helper (const GString *expected, const GString *actual, const gchar *expression_expected, const gchar *expression_actual); expected : actual : expression_expected : expression_actual : cutter-testing-framework-1.1.7/doc/reference/xml/cut-multi-process.xml0000644000175000017500000014536011400101216024271 0ustar koukou ]> Multi Process 3 CUTTER Library Multi Process Utilities to run your tests on multi processes. Synopsis CutSubProcess; CutSubProcessGroup; CutSubProcess * cut_take_new_sub_process (const char *test_directory); cut_boolean cut_sub_process_run (CutSubProcess *sub_process); void cut_sub_process_run_async (CutSubProcess *sub_process); cut_boolean cut_sub_process_wait (CutSubProcess *sub_process); cut_boolean cut_sub_process_is_success (CutSubProcess *sub_process); cut_boolean cut_sub_process_is_running (CutSubProcess *sub_process); const char * cut_sub_process_get_test_directory (CutSubProcess *sub_process); void cut_sub_process_set_test_directory (CutSubProcess *sub_process, const char *test_directory); const char * cut_sub_process_get_source_directory (CutSubProcess *sub_process); void cut_sub_process_set_source_directory (CutSubProcess *sub_process, const char *source_directory); cut_boolean cut_sub_process_get_multi_thread (CutSubProcess *sub_process); void cut_sub_process_set_multi_thread (CutSubProcess *sub_process, cut_boolean multi_thread); int cut_sub_process_get_max_threads (CutSubProcess *sub_process); void cut_sub_process_set_max_threads (CutSubProcess *sub_process, int max_threads); const char ** cut_sub_process_get_exclude_files (CutSubProcess *sub_process); void cut_sub_process_set_exclude_files (CutSubProcess *sub_process, const char **files); const char ** cut_sub_process_get_exclude_directories (CutSubProcess *sub_process); void cut_sub_process_set_exclude_directories (CutSubProcess *sub_process, const char **directories); const char ** cut_sub_process_get_target_test_case_names (CutSubProcess *sub_process); void cut_sub_process_set_target_test_case_names (CutSubProcess *sub_process, const char **names); const char ** cut_sub_process_get_target_test_names (CutSubProcess *sub_process); void cut_sub_process_set_target_test_names (CutSubProcess *sub_process, const char **names); double cut_sub_process_get_elapsed (CutSubProcess *sub_process); double cut_sub_process_get_total_elapsed (CutSubProcess *sub_process); cut_boolean cut_sub_process_is_crashed (CutSubProcess *sub_process); cut_boolean cut_sub_process_get_fatal_failures (CutSubProcess *sub_process); void cut_sub_process_set_fatal_failures (CutSubProcess *sub_process, cut_boolean fatal_failures); CutSubProcessGroup * cut_take_new_sub_process_group (void); void cut_sub_process_group_add (CutSubProcessGroup *group, CutSubProcess *sub_process); cut_boolean cut_sub_process_group_run (CutSubProcessGroup *group); void cut_sub_process_group_run_async (CutSubProcessGroup *group); cut_boolean cut_sub_process_group_wait (CutSubProcessGroup *group); Description If your test target supports multi-process and/or multi-thread, you need to test them. You can use CutSubProcess and CutSubProcessGroup to do it. CutSubProcess runs your test on another process and forwards results of it to a test on your main process. You will get results of test on another process as results of test on your main process. CutSubProcessGroup is a convenience object to run some CutSubProcess. Details CutSubProcess CutSubProcess typedef struct _CutSubProcess CutSubProcess; An object to represent sub cutter process. It contains sub cutter process's parameters and results of sub cutter process. e.g.: CutSubProcess *sub_process; sub_process = cut_take_new_sub_process("test-dir"); cut_sub_process_set_multi_thread(sub_process, TRUE); cut_assert_true(cut_sub_process_run(sub_process)); Since 1.0.4 CutSubProcessGroup CutSubProcessGroup typedef struct _CutSubProcessGroup CutSubProcessGroup; An object to run sub cutter processes. This is just for convenience. e.g.: CutSubProcess *sub_process1, *sub_process2, *sub_process3; CutSubProcessGroup *group; sub_process1 = cut_take_new_sub_process("test-dir1"); sub_process2 = cut_take_new_sub_process("test-dir2"); sub_process3 = cut_take_new_sub_process("test-dir3"); group = cut_take_new_sub_process_group(); cut_sub_process_group_add(group, sub_process1); cut_sub_process_group_add(group, sub_process2); cut_sub_process_group_add(group, sub_process3); cut_assert_true(cut_sub_process_group_run(group)); Since 1.0.4 cut_take_new_sub_process () cut_take_new_sub_process CutSubProcess * cut_take_new_sub_process (const char *test_directory); Creates sub cutter process that runs tests under test_directory and returns it. A created sub process is owned by Cutter. test_directory : a directory includes sub process test. Returns : a CutSubProcess. Since 1.0.4 cut_sub_process_run () cut_sub_process_run cut_boolean cut_sub_process_run (CutSubProcess *sub_process); Runs sub cutter process. sub_process : a CutSubProcess. Returns : CUT_TRUE if sub_process is completed successfully, CUT_FALSE otherwise. Since 1.0.4 cut_sub_process_run_async () cut_sub_process_run_async void cut_sub_process_run_async (CutSubProcess *sub_process); Runs sub cutter process asynchronously. The result of sub_process can be gotten by cut_sub_process_wait(). sub_process : a CutSubProcess. Since 1.0.4 cut_sub_process_wait () cut_sub_process_wait cut_boolean cut_sub_process_wait (CutSubProcess *sub_process); Waits for sub cutter process that is ran asynchronously to complete and returns the result. sub_process : a CutSubProcess. Returns : CUT_TRUE if sub_process is completed successfully, CUT_FALSE otherwise. Since 1.0.4 cut_sub_process_is_success () cut_sub_process_is_success cut_boolean cut_sub_process_is_success (CutSubProcess *sub_process); Returns whether sub_process is completed successfully or not. sub_process : a CutSubProcess. Returns : CUT_TRUE if sub_process is completed successfully, CUT_FALSE otherwise. Since 1.0.4 cut_sub_process_is_running () cut_sub_process_is_running cut_boolean cut_sub_process_is_running (CutSubProcess *sub_process); Returns whether sub_process is running or not. sub_process : a CutSubProcess. Returns : CUT_TRUE if sub_process is running, CUT_FALSE otherwise. Since 1.0.4 cut_sub_process_get_test_directory () cut_sub_process_get_test_directory const char * cut_sub_process_get_test_directory (CutSubProcess *sub_process); Returns a test directory that has tests to be ran. sub_process : a CutSubProcess. Returns : a test directory. Since 1.0.4 cut_sub_process_set_test_directory () cut_sub_process_set_test_directory void cut_sub_process_set_test_directory (CutSubProcess *sub_process, const char *test_directory); Sets test_directory as a test directory that has tests to be ran. This is same as TEST_DIRECTORY required command line argument. sub_process : a CutSubProcess. test_directory : a test directory. Since 1.0.4 cut_sub_process_get_source_directory () cut_sub_process_get_source_directory const char * cut_sub_process_get_source_directory (CutSubProcess *sub_process); Returns a source directory that has source files. sub_process : a CutSubProcess. Returns : a source directory. Since 1.0.4 cut_sub_process_set_source_directory () cut_sub_process_set_source_directory void cut_sub_process_set_source_directory (CutSubProcess *sub_process, const char *source_directory); Sets source_directory as a source directory that has source files. This is same as --source-directory command line option. sub_process : a CutSubProcess. source_directory : a source directory. Since 1.0.4 cut_sub_process_get_multi_thread () cut_sub_process_get_multi_thread cut_boolean cut_sub_process_get_multi_thread (CutSubProcess *sub_process); Returns whether sub_process is ran in multi-thread mode. sub_process : a CutSubProcess. Returns : CUT_TRUE if sub_process is ran in multi-thread mode, CUT_FALSE otherwise. Since 1.0.4 cut_sub_process_set_multi_thread () cut_sub_process_set_multi_thread void cut_sub_process_set_multi_thread (CutSubProcess *sub_process, cut_boolean multi_thread); Sets whether sub_process is ran in multi-thread mode or not. This is same as --multi-thread command line option. sub_process : a CutSubProcess. multi_thread : CUT_TRUE to be ran in multi-thread mode. Since 1.0.4 cut_sub_process_get_max_threads () cut_sub_process_get_max_threads int cut_sub_process_get_max_threads (CutSubProcess *sub_process); Returns how many threads are used concurrently at a maximum in sub_process. sub_process : a CutSubProcess. Returns : max number of threads used concurrently at a maximum in sub_process. Since 1.0.5 cut_sub_process_set_max_threads () cut_sub_process_set_max_threads void cut_sub_process_set_max_threads (CutSubProcess *sub_process, int max_threads); Sets how many threads are used concurrently at a maximum in sub_process. -1 means no limit. This is same as --max-threads command line option. sub_process : a CutSubProcess. max_threads : max number of threads used concurrently at a maximum. Since 1.0.5 cut_sub_process_get_exclude_files () cut_sub_process_get_exclude_files const char ** cut_sub_process_get_exclude_files (CutSubProcess *sub_process); Returns file names that are excluded from target test files. sub_process : a CutSubProcess. Returns : file names that are excluded from target test files. Since 1.0.4 cut_sub_process_set_exclude_files () cut_sub_process_set_exclude_files void cut_sub_process_set_exclude_files (CutSubProcess *sub_process, const char **files); Sets file names that are excluded from target test files. This is same as --exclude-file command line option. sub_process : a CutSubProcess. files : file names that are excluded from target test files. Since 1.0.4 cut_sub_process_get_exclude_directories () cut_sub_process_get_exclude_directories const char ** cut_sub_process_get_exclude_directories (CutSubProcess *sub_process); Returns directory names that are excluded from target test directories. sub_process : a CutSubProcess. Returns : directory names that are excluded from target test directories. Since 1.0.4 cut_sub_process_set_exclude_directories () cut_sub_process_set_exclude_directories void cut_sub_process_set_exclude_directories (CutSubProcess *sub_process, const char **directories); Sets directory names that are excluded from target test directories. This is same as --exclude-directory command line option. sub_process : a CutSubProcess. directories : directory names that are excluded from target test directories. Since 1.0.4 cut_sub_process_get_target_test_case_names () cut_sub_process_get_target_test_case_names const char ** cut_sub_process_get_target_test_case_names (CutSubProcess *sub_process); Returns test case names that are ran. sub_process : a CutSubProcess. Returns : test case names that are ran. Since 1.0.4 cut_sub_process_set_target_test_case_names () cut_sub_process_set_target_test_case_names void cut_sub_process_set_target_test_case_names (CutSubProcess *sub_process, const char **names); Sets test case names that are ran. This is same as --test-case command line option. sub_process : a CutSubProcess. names : test case names that are ran. Since 1.0.4 cut_sub_process_get_target_test_names () cut_sub_process_get_target_test_names const char ** cut_sub_process_get_target_test_names (CutSubProcess *sub_process); Returns test names that are ran. sub_process : a CutSubProcess. Returns : test names that are ran. Since 1.0.4 cut_sub_process_set_target_test_names () cut_sub_process_set_target_test_names void cut_sub_process_set_target_test_names (CutSubProcess *sub_process, const char **names); Sets test names that are ran. This is same as --test command line option. sub_process : a CutSubProcess. names : test names that are ran. Since 1.0.4 cut_sub_process_get_elapsed () cut_sub_process_get_elapsed double cut_sub_process_get_elapsed (CutSubProcess *sub_process); Gets the time while sub_process was running. sub_process : a CutSubProcess. Returns : the time while sub_process was running. Since 1.0.4 cut_sub_process_get_total_elapsed () cut_sub_process_get_total_elapsed double cut_sub_process_get_total_elapsed (CutSubProcess *sub_process); Gets the sum of times that are used by each test. sub_process : a CutSubProcess. Returns : the sum of times that are used by each test. Since 1.0.4 cut_sub_process_is_crashed () cut_sub_process_is_crashed cut_boolean cut_sub_process_is_crashed (CutSubProcess *sub_process); Returns whether sub_process was crashed or not. sub_process : a CutSubProcess. Returns : CUT_TRUE if sub_process was crashed, CUT_FALSE otherwise. Since 1.0.4 cut_sub_process_get_fatal_failures () cut_sub_process_get_fatal_failures cut_boolean cut_sub_process_get_fatal_failures (CutSubProcess *sub_process); Returns whether sub_process is ran in fatal-failures mode. See cut_sub_process_set_fatal_failures() more details of fatal-failures mode. sub_process : a CutSubProcess. Returns : CUT_TRUE if sub_process is ran in fatal-failures mode, CUT_FALSE otherwise. Since 1.0.4 cut_sub_process_set_fatal_failures () cut_sub_process_set_fatal_failures void cut_sub_process_set_fatal_failures (CutSubProcess *sub_process, cut_boolean fatal_failures); Sets whether sub_process is ran in fatal-failures mode or not. In this mode, all failures are treated as fatal problems. It means that test is aborted on failure. On some environments, breakpoint is set. This is same as --fatal-failures command line option. sub_process : a CutSubProcess. fatal_failures : CUT_TRUE to be ran in fatal-failures mode. Since 1.0.4 cut_take_new_sub_process_group () cut_take_new_sub_process_group CutSubProcessGroup * cut_take_new_sub_process_group (void); Creates a group of sub cutter process. A created group is owned by Cutter. Returns : a CutSubProcessGroup. Since 1.0.4 cut_sub_process_group_add () cut_sub_process_group_add void cut_sub_process_group_add (CutSubProcessGroup *group, CutSubProcess *sub_process); Adds sub_process to group. group : a CutSubProcessGroup. sub_process : a CutSubProcess. Since 1.0.4 cut_sub_process_group_run () cut_sub_process_group_run cut_boolean cut_sub_process_group_run (CutSubProcessGroup *group); Runs all sub cutter processes of group and returns the result of them. group : a CutSubProcessGroup. Returns : CUT_TRUE if all sub cutter processes of group are completed successfully, CUT_FALSE otherwise. Since 1.0.4 cut_sub_process_group_run_async () cut_sub_process_group_run_async void cut_sub_process_group_run_async (CutSubProcessGroup *group); Runs all sub cutter processes of group asynchronously. The result of them can be gotten by cut_sub_process_group_wait(). group : a CutSubProcessGroup. Since 1.0.4 cut_sub_process_group_wait () cut_sub_process_group_wait cut_boolean cut_sub_process_group_wait (CutSubProcessGroup *group); Waits for all sub cutter processes of group that are ran asynchronously to complete and returns the result. group : a CutSubProcessGroup. Returns : CUT_TRUE if all sub cutter processes of group are completed successfully, CUT_FALSE otherwise. Since 1.0.4 cutter-testing-framework-1.1.7/doc/reference/xml/cut-config.xml0000644000175000017500000000446111400101215022723 0ustar koukou ]> cut-config 3 CUTTER Library cut-config Synopsis #define CUT_HAVE_STDINT_H #define CUT_HAVE_INTTYPES_H #define CUT_HAVE_SYS_SOCKET_H #define CUT_HAVE_SYS_UN_H Description Details CUT_HAVE_STDINT_H CUT_HAVE_STDINT_H #define CUT_HAVE_STDINT_H 1 CUT_HAVE_INTTYPES_H CUT_HAVE_INTTYPES_H #define CUT_HAVE_INTTYPES_H 1 CUT_HAVE_SYS_SOCKET_H CUT_HAVE_SYS_SOCKET_H #define CUT_HAVE_SYS_SOCKET_H 1 CUT_HAVE_SYS_UN_H CUT_HAVE_SYS_UN_H #define CUT_HAVE_SYS_UN_H 1 cutter-testing-framework-1.1.7/doc/reference/xml/api-index-full.xml0000644000175000017500000040721711523761415023535 0ustar koukou ]> A gcut_add_datum, function in Convenience test data API gcut_assert_equal_enum, function in Assertions with GLib support gcut_assert_equal_enum_helper, function in gcut-assertions-helper gcut_assert_equal_error, function in Assertions with GLib support gcut_assert_equal_error_helper, function in gcut-assertions-helper gcut_assert_equal_flags, function in Assertions with GLib support gcut_assert_equal_flags_helper, function in gcut-assertions-helper gcut_assert_equal_hash_table, function in Assertions with GLib support gcut_assert_equal_hash_table_helper, function in gcut-assertions-helper gcut_assert_equal_hash_table_string_string, function in Assertions with GLib support gcut_assert_equal_hash_table_string_string_helper, function in gcut-assertions-helper gcut_assert_equal_int64, function in Assertions with GLib support gcut_assert_equal_int64_helper, function in gcut-assertions-helper gcut_assert_equal_list, function in Assertions with GLib support gcut_assert_equal_list_enum, function in Assertions with GLib support gcut_assert_equal_list_enum_helper, function in gcut-assertions-helper gcut_assert_equal_list_flags, function in Assertions with GLib support gcut_assert_equal_list_flags_helper, function in gcut-assertions-helper gcut_assert_equal_list_helper, function in gcut-assertions-helper gcut_assert_equal_list_int, function in Assertions with GLib support gcut_assert_equal_list_int_helper, function in gcut-assertions-helper gcut_assert_equal_list_object, function in Assertions with GLib support gcut_assert_equal_list_object_custom, function in Assertions with GLib support gcut_assert_equal_list_object_helper, function in gcut-assertions-helper gcut_assert_equal_list_string, function in Assertions with GLib support gcut_assert_equal_list_string_helper, function in gcut-assertions-helper gcut_assert_equal_list_uint, function in Assertions with GLib support gcut_assert_equal_list_uint_helper, function in gcut-assertions-helper gcut_assert_equal_object, function in Assertions with GLib support gcut_assert_equal_object_custom, function in Assertions with GLib support gcut_assert_equal_object_helper, function in gcut-assertions-helper gcut_assert_equal_pid, function in Assertions with GLib support gcut_assert_equal_pid_helper, function in gcut-assertions-helper gcut_assert_equal_string, function in Assertions with GLib support gcut_assert_equal_string_helper, function in gcut-assertions-helper gcut_assert_equal_time_val, function in Assertions with GLib support gcut_assert_equal_time_val_helper, function in gcut-assertions-helper gcut_assert_equal_type, function in Assertions with GLib support gcut_assert_equal_type_helper, function in gcut-assertions-helper gcut_assert_equal_uint64, function in Assertions with GLib support gcut_assert_equal_uint64_helper, function in gcut-assertions-helper gcut_assert_equal_value, function in Assertions with GLib support gcut_assert_equal_value_helper, function in gcut-assertions-helper gcut_assert_error, function in Assertions with GLib support gcut_assert_error_helper, function in gcut-assertions-helper gcut_assert_not_equal_int64, function in Assertions with GLib support gcut_assert_not_equal_int64_helper, function in gcut-assertions-helper gcut_assert_not_equal_pid, function in Assertions with GLib support gcut_assert_not_equal_pid_helper, function in gcut-assertions-helper gcut_assert_not_equal_uint64, function in Assertions with GLib support gcut_assert_not_equal_uint64_helper, function in gcut-assertions-helper gcut_assert_remove_path, function in Assertions with GLib support gcut_assert_remove_path_helper, function in gcut-assertions-helper C CPPCUTTER_ENABLED, macro in CppCutter cppcut_assert_equal, macro in Assertions with C++ support CPPCUT_BEGIN_TEST_DECLS, macro in CppCutter CPPCUT_DECL, macro in cppcut-macros CPPCUT_END_TEST_DECLS, macro in CppCutter cppcut_message, macro in CppCutter CutCallbackFunction, user_function in Types CutConsoleDiffWriter, struct in CutConsoleDiffWriter CutConsoleDiffWriterClass, struct in CutConsoleDiffWriter CutDestroyFunction, user_function in Types CutStringDiffWriter, struct in CutStringDiffWriter CutStringDiffWriterClass, struct in CutStringDiffWriter CutSubProcess, struct in Multi Process CutSubProcessGroup, struct in Multi Process CUTTER_CHECK_VERSION, macro in Version Information CUTTER_VERSION_MAJOR, macro in Version Information CUTTER_VERSION_MICRO, macro in Version Information CUTTER_VERSION_MINOR, macro in Version Information CUTTER_VERSION_STRING, macro in Version Information cut_add_data, macro in Cutter cut_add_data_backward_compatibility, macro in Cutter cut_append_diff, function in Assertion writing helper cut_assert, function in Assertions cut_assert_equal, macro in Assertions cut_assert_equal_boolean, function in Assertions cut_assert_equal_char, macro in Assertions cut_assert_equal_double, function in Assertions cut_assert_equal_file_raw, macro in Assertions cut_assert_equal_fixture_data_string, function in Assertions cut_assert_equal_g_list_int, function in Assertions with GLib support cut_assert_equal_g_list_string, function in Assertions with GLib support cut_assert_equal_g_type, function in Assertions with GLib support cut_assert_equal_g_value, function in Assertions with GLib support cut_assert_equal_int, function in Assertions cut_assert_equal_intmax, macro in Assertions cut_assert_equal_intptr, macro in Assertions cut_assert_equal_int_fast16, macro in Assertions cut_assert_equal_int_fast32, macro in Assertions cut_assert_equal_int_fast64, macro in Assertions cut_assert_equal_int_fast8, macro in Assertions cut_assert_equal_int_least16, macro in Assertions cut_assert_equal_int_least32, macro in Assertions cut_assert_equal_int_least64, macro in Assertions cut_assert_equal_int_least8, macro in Assertions cut_assert_equal_memory, function in Assertions cut_assert_equal_pointer, function in Assertions cut_assert_equal_size, function in Assertions cut_assert_equal_sockaddr, macro in Assertions cut_assert_equal_string, function in Assertions cut_assert_equal_string_array, function in Assertions cut_assert_equal_string_array_with_free, function in Assertions cut_assert_equal_string_or_null, function in Assertions cut_assert_equal_string_with_free, function in Assertions cut_assert_equal_substring, function in Assertions cut_assert_equal_uint, function in Assertions cut_assert_equal_uintmax, macro in Assertions cut_assert_equal_uintptr, macro in Assertions cut_assert_equal_uint_fast16, macro in Assertions cut_assert_equal_uint_fast32, macro in Assertions cut_assert_equal_uint_fast64, macro in Assertions cut_assert_equal_uint_fast8, macro in Assertions cut_assert_equal_uint_least16, macro in Assertions cut_assert_equal_uint_least32, macro in Assertions cut_assert_equal_uint_least64, macro in Assertions cut_assert_equal_uint_least8, macro in Assertions cut_assert_errno, function in Assertions cut_assert_exist_path, function in Assertions cut_assert_false, function in Assertions cut_assert_file_exist, function in Assertions cut_assert_g_error, function in Assertions with GLib support cut_assert_match, function in Assertions cut_assert_match_with_free, function in Assertions cut_assert_not_equal_boolean, function in Assertions cut_assert_not_equal_char, macro in Assertions cut_assert_not_equal_double, function in Assertions cut_assert_not_equal_file_raw, macro in Assertions cut_assert_not_equal_int, function in Assertions cut_assert_not_equal_intmax, macro in Assertions cut_assert_not_equal_intptr, macro in Assertions cut_assert_not_equal_int_fast16, macro in Assertions cut_assert_not_equal_int_fast32, macro in Assertions cut_assert_not_equal_int_fast64, macro in Assertions cut_assert_not_equal_int_fast8, macro in Assertions cut_assert_not_equal_int_least16, macro in Assertions cut_assert_not_equal_int_least32, macro in Assertions cut_assert_not_equal_int_least64, macro in Assertions cut_assert_not_equal_int_least8, macro in Assertions cut_assert_not_equal_memory, function in Assertions cut_assert_not_equal_size, function in Assertions cut_assert_not_equal_string, function in Assertions cut_assert_not_equal_substring, function in Assertions cut_assert_not_equal_uint, function in Assertions cut_assert_not_equal_uintmax, macro in Assertions cut_assert_not_equal_uintptr, macro in Assertions cut_assert_not_equal_uint_fast16, macro in Assertions cut_assert_not_equal_uint_fast32, macro in Assertions cut_assert_not_equal_uint_fast64, macro in Assertions cut_assert_not_equal_uint_fast8, macro in Assertions cut_assert_not_equal_uint_least16, macro in Assertions cut_assert_not_equal_uint_least32, macro in Assertions cut_assert_not_equal_uint_least64, macro in Assertions cut_assert_not_equal_uint_least8, macro in Assertions cut_assert_not_exist_path, function in Assertions cut_assert_not_null, function in Assertions cut_assert_null, function in Assertions cut_assert_null_string, function in Assertions cut_assert_operator, macro in Assertions cut_assert_operator_double, macro in Assertions cut_assert_operator_int, macro in Assertions cut_assert_operator_size, macro in Assertions cut_assert_operator_uint, macro in Assertions cut_assert_path_exist, function in Assertions cut_assert_path_not_exist, function in Assertions cut_assert_remove_path, function in Assertions with GLib support cut_assert_true, function in Assertions cut_boolean, typedef in Types cut_build_fixture_data_path, function in Test Utilities cut_build_fixture_path, function in Test Utilities cut_build_path, function in Test Utilities cut_build_path_array, function in Test Utilities CUT_CONSOLE_COLOR_BLACK_BACK, macro in cut-console CUT_CONSOLE_COLOR_BLUE, macro in cut-console CUT_CONSOLE_COLOR_BLUE_BACK, macro in cut-console CUT_CONSOLE_COLOR_CYAN, macro in cut-console CUT_CONSOLE_COLOR_CYAN_BACK, macro in cut-console CUT_CONSOLE_COLOR_GREEN, macro in cut-console CUT_CONSOLE_COLOR_GREEN_BACK, macro in cut-console CUT_CONSOLE_COLOR_MAGENTA, macro in cut-console CUT_CONSOLE_COLOR_NORMAL, macro in cut-console CUT_CONSOLE_COLOR_RED, macro in cut-console CUT_CONSOLE_COLOR_RED_BACK, macro in cut-console CUT_CONSOLE_COLOR_WHITE, macro in cut-console CUT_CONSOLE_COLOR_WHITE_BACK, macro in cut-console CUT_CONSOLE_COLOR_YELLOW, macro in cut-console cut_console_diff_writer_get_deleted_line_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_deleted_mark_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_deleted_segment_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_inserted_line_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_inserted_mark_color, function in CutConsoleDiffWriter cut_console_diff_writer_get_inserted_segment_color, function in CutConsoleDiffWriter cut_console_diff_writer_new, function in CutConsoleDiffWriter cut_console_diff_writer_set_deleted_line_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_deleted_mark_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_deleted_segment_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_inserted_line_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_inserted_mark_color, function in CutConsoleDiffWriter cut_console_diff_writer_set_inserted_segment_color, function in CutConsoleDiffWriter cut_console_guess_color_usability, function in cut-console cut_console_parse_color_arg, function in cut-console cut_equal_double, function in Assertion writing helper cut_equal_sockaddr, macro in Assertion writing helper cut_equal_string, function in Assertion writing helper cut_error, function in Assertions cut_error_errno, function in Assertions CUT_EXPORT, macro in Cutter cut_fail, function in Assertions CUT_FALSE, macro in Types cut_fork, macro in Experimental cut_fork_get_stderr_message, macro in Experimental cut_fork_get_stdout_message, macro in Experimental cut_get_current_test_context, macro in Cutter cut_get_fixture_data, function in Test Utilities cut_get_fixture_data_string, function in Test Utilities cut_get_source_directory, function in Assertion writing helper cut_get_test_directory, function in Assertion writing helper CUT_HAVE_INTTYPES_H, macro in cut-config CUT_HAVE_STDINT_H, macro in cut-config CUT_HAVE_SYS_SOCKET_H, macro in cut-config CUT_HAVE_SYS_UN_H, macro in cut-config cut_inspect_sockaddr, macro in Assertion writing helper cut_inspect_string_array, function in Assertion writing helper cut_keep_message, function in Cutter cut_make_directory, function in Test Utilities cut_message, function in Cutter cut_notify, function in Assertions cut_omit, function in Assertions cut_pend, function in Assertions cut_pending, function in Assertions cut_pop_backtrace, function in Assertion writing helper cut_push_backtrace, function in Assertion writing helper CUT_RELATIVE_PATH, macro in Assertion writing helper cut_remove_path, function in Test Utilities cut_return, function in Assertions cut_setup, function in Cutter cut_set_actual, macro in Assertion writing helper cut_set_attributes, macro in Cutter cut_set_current_test_context, macro in Cutter cut_set_expected, macro in Assertion writing helper cut_set_fixture_data_dir, function in Test Utilities cut_set_message, function in Cutter cut_set_message_va_list, function in Cutter cut_shutdown, function in Cutter cut_startup, function in Cutter cut_string_diff_writer_get_result, function in CutStringDiffWriter cut_string_diff_writer_new, function in CutStringDiffWriter cut_sub_process_get_elapsed, function in Multi Process cut_sub_process_get_exclude_directories, function in Multi Process cut_sub_process_get_exclude_files, function in Multi Process cut_sub_process_get_fatal_failures, function in Multi Process cut_sub_process_get_max_threads, function in Multi Process cut_sub_process_get_multi_thread, function in Multi Process cut_sub_process_get_source_directory, function in Multi Process cut_sub_process_get_target_test_case_names, function in Multi Process cut_sub_process_get_target_test_names, function in Multi Process cut_sub_process_get_test_directory, function in Multi Process cut_sub_process_get_total_elapsed, function in Multi Process cut_sub_process_group_add, function in Multi Process cut_sub_process_group_run, function in Multi Process cut_sub_process_group_run_async, function in Multi Process cut_sub_process_group_wait, function in Multi Process cut_sub_process_is_crashed, function in Multi Process cut_sub_process_is_running, function in Multi Process cut_sub_process_is_success, function in Multi Process cut_sub_process_run, function in Multi Process cut_sub_process_run_async, function in Multi Process cut_sub_process_set_exclude_directories, function in Multi Process cut_sub_process_set_exclude_files, function in Multi Process cut_sub_process_set_fatal_failures, function in Multi Process cut_sub_process_set_max_threads, function in Multi Process cut_sub_process_set_multi_thread, function in Multi Process cut_sub_process_set_source_directory, function in Multi Process cut_sub_process_set_target_test_case_names, function in Multi Process cut_sub_process_set_target_test_names, function in Multi Process cut_sub_process_set_test_directory, function in Multi Process cut_sub_process_wait, function in Multi Process CUT_SUPPORT_C99_STDINT_TYPES, macro in Available features CUT_SUPPORT_GDK_PIXBUF, macro in Available features CUT_SUPPORT_GIO, macro in Available features CUT_SUPPORT_GLIB, macro in Available features CUT_SUPPORT_LIBSOUP, macro in Available features cut_take, function in Test Utilities cut_take_convert, macro in Test Utilities cut_take_diff, function in Test Utilities cut_take_inspect_string, function in Test Utilities cut_take_memdup, function in Test Utilities cut_take_memory, function in Test Utilities cut_take_new_sub_process, function in Multi Process cut_take_new_sub_process_group, function in Multi Process cut_take_printf, function in Test Utilities cut_take_replace, function in Test Utilities cut_take_strdup, function in Test Utilities cut_take_string, function in Test Utilities cut_take_string_array, function in Test Utilities cut_take_strndup, function in Test Utilities cut_teardown, function in Cutter cut_test_context_take_g_error, function in gcut-public cut_test_context_take_g_hash_table, function in gcut-public cut_test_context_take_g_list, function in gcut-public cut_test_context_take_g_object, function in gcut-public cut_test_context_take_g_string, function in gcut-public cut_test_fail, function in Assertion writing helper cut_test_fail_va_list, function in Assertion writing helper cut_test_pass, function in Assertion writing helper cut_trace, macro in Assertion writing helper cut_trace_with_info_expression, macro in Assertion writing helper CUT_TRUE, macro in Types cut_wait_process, macro in Experimental D gcut_data_get_boolean, macro in Convenience test data API gcut_data_get_boolean_helper, function in gcut-data-helper gcut_data_get_boxed, function in Convenience test data API gcut_data_get_boxed_helper, function in gcut-data-helper gcut_data_get_char, macro in Convenience test data API gcut_data_get_char_helper, function in gcut-data-helper gcut_data_get_double, macro in Convenience test data API gcut_data_get_double_helper, function in gcut-data-helper gcut_data_get_enum, function in Convenience test data API gcut_data_get_enum_helper, function in gcut-data-helper gcut_data_get_flags, function in Convenience test data API gcut_data_get_flags_helper, function in gcut-data-helper gcut_data_get_int, function in Convenience test data API gcut_data_get_int64, macro in Convenience test data API gcut_data_get_int64_helper, function in gcut-data-helper gcut_data_get_int_helper, function in gcut-data-helper gcut_data_get_object, macro in Convenience test data API gcut_data_get_object_helper, function in gcut-data-helper gcut_data_get_pointer, function in Convenience test data API gcut_data_get_pointer_helper, function in gcut-data-helper gcut_data_get_size, macro in Convenience test data API gcut_data_get_size_helper, function in gcut-data-helper gcut_data_get_string, function in Convenience test data API gcut_data_get_string_helper, function in gcut-data-helper gcut_data_get_type, function in Convenience test data API gcut_data_get_type_helper, function in gcut-data-helper gcut_data_get_uint, function in Convenience test data API gcut_data_get_uint64, macro in Convenience test data API gcut_data_get_uint64_helper, function in gcut-data-helper gcut_data_get_uint_helper, function in gcut-data-helper gcut_data_has_field, function in Convenience test data API E GCutEgg, struct in GCutEgg GCutEgg::error, object signal in GCutEgg GCutEgg::error-received, object signal in GCutEgg GCutEgg::output-received, object signal in GCutEgg GCutEgg::reaped, object signal in GCutEgg GCutEgg:command, object property in GCutEgg GCutEggClass, struct in GCutEgg GCutEggError, enum in GCutEgg gcut_egg_close, function in GCutEgg GCUT_EGG_ERROR, macro in GCutEgg gcut_egg_error_quark, function in GCutEgg gcut_egg_get_env, function in GCutEgg gcut_egg_get_error, function in GCutEgg gcut_egg_get_flags, function in GCutEgg gcut_egg_get_forced_termination_wait_time, function in GCutEgg gcut_egg_get_input, function in GCutEgg gcut_egg_get_output, function in GCutEgg gcut_egg_get_pid, function in GCutEgg gcut_egg_hatch, function in GCutEgg gcut_egg_kill, function in GCutEgg gcut_egg_new, function in GCutEgg gcut_egg_new_argv, function in GCutEgg gcut_egg_new_array, function in GCutEgg gcut_egg_new_strings, function in GCutEgg gcut_egg_new_va_list, function in GCutEgg gcut_egg_set_env, function in GCutEgg gcut_egg_set_flags, function in GCutEgg gcut_egg_set_forced_termination_wait_time, function in GCutEgg gcut_egg_wait, function in GCutEgg gcut_egg_write, function in GCutEgg GCutEnumError, enum in Assertion Utilities for GEnum and GFlags GCUT_ENUM_ERROR, macro in Assertion Utilities for GEnum and GFlags gcut_enum_error_quark, function in Assertion Utilities for GEnum and GFlags gcut_enum_inspect, function in Assertion Utilities for GEnum and GFlags gcut_enum_parse, function in Assertion Utilities for GEnum and GFlags gcut_error_equal, function in Assertion Utilities for GError gcut_error_get_type, function in Types for GLib support gcut_error_inspect, function in Assertion Utilities for GError GCutEventLoop, struct in GCutEventLoop GCutEventLoopClass, struct in GCutEventLoop gcut_event_loop_add_idle, function in GCutEventLoop gcut_event_loop_add_idle_full, function in GCutEventLoop gcut_event_loop_add_timeout, function in GCutEventLoop gcut_event_loop_add_timeout_full, function in GCutEventLoop GCUT_EVENT_LOOP_ERROR, macro in GCutEventLoop gcut_event_loop_error_quark, function in GCutEventLoop gcut_event_loop_iterate, function in GCutEventLoop gcut_event_loop_quit, function in GCutEventLoop gcut_event_loop_remove, function in GCutEventLoop gcut_event_loop_run, function in GCutEventLoop gcut_event_loop_watch_child, function in GCutEventLoop gcut_event_loop_watch_child_full, function in GCutEventLoop gcut_event_loop_watch_io, function in GCutEventLoop F gcut_flags_get_all, function in Assertion Utilities for GEnum and GFlags gcut_flags_inspect, function in Assertion Utilities for GEnum and GFlags gcut_flags_parse, function in Assertion Utilities for GEnum and GFlags G GDKCUTTER_PIXBUF_ENABLED, macro in GdkCutter Pixbuf gdkcut_pixbuf_assert_equal, function in Assertions with gdk-pixbuf support gdkcut_pixbuf_assert_equal_helper, function in gdkcut-pixbuf-assertions-helper gdkcut_pixbuf_diff, function in gdkcut-pixbuf gdkcut_pixbuf_equal_content, function in gdkcut-pixbuf gdkcut_pixbuf_equal_property, function in gdkcut-pixbuf gdkcut_pixbuf_save_diff, function in gdkcut-pixbuf gcut_get_fixture_data, function in Test Utilities with GLib support GCutGLibEventLoop, struct in GCutGLibEventLoop GCutGLibEventLoopClass, struct in GCutGLibEventLoop gcut_glib_event_loop_new, function in GCutGLibEventLoop H gcut_hash_table_equal, function in Assertion Utilities for GHashTable gcut_hash_table_inspect, function in Assertion Utilities for GHashTable gcut_hash_table_inspect_sorted, function in Assertion Utilities for GHashTable gcut_hash_table_string_equal, function in Assertion Utilities for GHashTable gcut_hash_table_string_string_copy, function in Assertion Utilities for GHashTable gcut_hash_table_string_string_inspect, function in Assertion Utilities for GHashTable gcut_hash_table_string_string_new, function in Test Utilities with GLib support gcut_hash_table_string_string_new_va_list, function in Test Utilities with GLib support I gcut_init, function in gcut-main GCutInspectFunction, user_function in Types for GLib support gcut_inspect_boolean, function in Object inspection functions gcut_inspect_char, function in Object inspection functions gcut_inspect_direct, function in Object inspection functions gcut_inspect_double, function in Object inspection functions gcut_inspect_enum, function in Object inspection functions gcut_inspect_flags, function in Object inspection functions gcut_inspect_int, function in Object inspection functions gcut_inspect_int64, function in Object inspection functions gcut_inspect_pointer, function in Object inspection functions gcut_inspect_size, function in Object inspection functions gcut_inspect_string, function in Object inspection functions gcut_inspect_type, function in Object inspection functions gcut_inspect_uint, function in Object inspection functions gcut_inspect_uint64, function in Object inspection functions gcut_io_inspect_condition, function in gcut-io K gcut_key_file_get_enum, function in gcut-key-file gcut_key_file_get_flags, function in gcut-key-file L gcut_list_enum_inspect, macro in Assertion Utilities for GList gcut_list_equal, function in Assertion Utilities for GList gcut_list_equal_int, function in Assertion Utilities for GList gcut_list_equal_string, function in Assertion Utilities for GList gcut_list_equal_uint, function in Assertion Utilities for GList gcut_list_flags_inspect, macro in Assertion Utilities for GList gcut_list_inspect, function in Assertion Utilities for GList gcut_list_inspect_enum, function in Assertion Utilities for GList gcut_list_inspect_flags, function in Assertion Utilities for GList gcut_list_inspect_int, function in Assertion Utilities for GList gcut_list_inspect_object, function in Assertion Utilities for GList gcut_list_inspect_string, function in Assertion Utilities for GList gcut_list_inspect_uint, function in Assertion Utilities for GList gcut_list_int_equal, macro in Assertion Utilities for GList gcut_list_int_inspect, macro in Assertion Utilities for GList gcut_list_int_new, function in Test Utilities with GLib support gcut_list_new, function in Test Utilities with GLib support gcut_list_object_free, function in Test Utilities with GLib support gcut_list_object_inspect, macro in Assertion Utilities for GList gcut_list_string_equal, macro in Assertion Utilities for GList gcut_list_string_free, function in Test Utilities with GLib support gcut_list_string_inspect, macro in Assertion Utilities for GList gcut_list_string_new, function in Test Utilities with GLib support gcut_list_string_new_array, function in Test Utilities with GLib support gcut_list_uint_equal, macro in Assertion Utilities for GList gcut_list_uint_inspect, macro in Assertion Utilities for GList gcut_list_uint_new, function in Test Utilities with GLib support O gcut_object_equal, function in Assertion Utilities for GObject gcut_object_inspect, function in Assertion Utilities for GObject gcut_object_inspect_custom, function in Assertion Utilities for GObject P GCutProcess, struct in GCutProcess GCutProcess::error, object signal in GCutProcess GCutProcess::error-received, object signal in GCutProcess GCutProcess::output-received, object signal in GCutProcess GCutProcess::reaped, object signal in GCutProcess GCutProcess:command, object property in GCutProcess GCutProcessClass, struct in GCutProcess GCutProcessError, enum in GCutProcess GCUT_PROCESS_ERROR, macro in GCutProcess gcut_process_error_quark, function in GCutProcess gcut_process_flush, function in GCutProcess gcut_process_get_env, function in GCutProcess gcut_process_get_error_channel, function in GCutProcess gcut_process_get_error_stream, function in GCutProcess gcut_process_get_error_string, function in GCutProcess gcut_process_get_event_loop, function in GCutProcess gcut_process_get_flags, function in GCutProcess gcut_process_get_forced_termination_wait_time, function in GCutProcess gcut_process_get_input_channel, function in GCutProcess gcut_process_get_output_channel, function in GCutProcess gcut_process_get_output_stream, function in GCutProcess gcut_process_get_output_string, function in GCutProcess gcut_process_get_pid, function in GCutProcess gcut_process_kill, function in GCutProcess gcut_process_new, function in GCutProcess gcut_process_new_argv, function in GCutProcess gcut_process_new_array, function in GCutProcess gcut_process_new_command_line, function in GCutProcess gcut_process_new_strings, function in GCutProcess gcut_process_new_va_list, function in GCutProcess gcut_process_run, function in GCutProcess gcut_process_set_env, function in GCutProcess gcut_process_set_event_loop, function in GCutProcess gcut_process_set_flags, function in GCutProcess gcut_process_set_forced_termination_wait_time, function in GCutProcess gcut_process_wait, function in GCutProcess gcut_process_write, function in GCutProcess Q gcut_quit, function in gcut-main S setup, function in Cutter gcut_size_get_type, function in Types for GLib support SoupCutClient, struct in SoupCutClient SoupCutClient:async, object property in SoupCutClient SoupCutClientClass, struct in SoupCutClient SOUPCUTTER_ENABLED, macro in SoupCutter soupcut_client_assert_equal_body, function in Assertions for HTTP client and server soupcut_client_assert_equal_body_helper, function in soupcut-assertions-helper soupcut_client_assert_equal_content_type, function in Assertions for HTTP client and server soupcut_client_assert_equal_content_type_helper, function in soupcut-assertions-helper soupcut_client_assert_match_body, function in Assertions for HTTP client and server soupcut_client_assert_match_body_helper, function in soupcut-assertions-helper soupcut_client_assert_response, function in Assertions for HTTP client and server soupcut_client_assert_response_helper, function in soupcut-assertions-helper soupcut_client_get, function in SoupCutClient soupcut_client_get_async_context, function in SoupCutClient soupcut_client_get_latest_message, function in SoupCutClient soupcut_client_get_n_messages, function in SoupCutClient soupcut_client_new, function in SoupCutClient soupcut_client_send_message, function in SoupCutClient soupcut_client_set_base, function in SoupCutClient soupcut_message_assert_equal_content_type, function in Assertions for HTTP client and server soupcut_message_assert_equal_content_type_helper, function in soupcut-assertions-helper soupcut_server_build_uri, function in Convenience HTTP server API soupcut_server_take, function in Convenience HTTP server API soupcut_server_take_new, function in Convenience HTTP server API gcut_string_equal, function in Assertion Utilities for GString gcut_string_inspect, function in Assertion Utilities for GString gcut_string_io_channel_clear, function in gcut-string-io-channel gcut_string_io_channel_get_buffer_limit, function in gcut-string-io-channel gcut_string_io_channel_get_limit, function in gcut-string-io-channel gcut_string_io_channel_get_main_context, function in gcut-string-io-channel gcut_string_io_channel_get_pipe_mode, function in gcut-string-io-channel gcut_string_io_channel_get_read_fail, function in gcut-string-io-channel gcut_string_io_channel_get_string, function in gcut-string-io-channel gcut_string_io_channel_new, function in gcut-string-io-channel gcut_string_io_channel_set_buffer_limit, function in gcut-string-io-channel gcut_string_io_channel_set_limit, function in gcut-string-io-channel gcut_string_io_channel_set_main_context, function in gcut-string-io-channel gcut_string_io_channel_set_pipe_mode, function in gcut-string-io-channel gcut_string_io_channel_set_read_fail, function in gcut-string-io-channel T gcut_take_error, function in Test Utilities with GLib support gcut_take_hash_table, function in Test Utilities with GLib support gcut_take_list, function in Test Utilities with GLib support gcut_take_new_hash_table_string_string, function in Test Utilities with GLib support gcut_take_new_list_int, function in Test Utilities with GLib support gcut_take_new_list_object, macro in Test Utilities with GLib support gcut_take_new_list_string, function in Test Utilities with GLib support gcut_take_new_list_string_array, function in Test Utilities with GLib support gcut_take_new_list_string_backward_compatibility, macro in Test Utilities with GLib support gcut_take_new_list_uint, function in Test Utilities with GLib support gcut_take_new_string, function in Test Utilities with GLib support gcut_take_object, function in Test Utilities with GLib support gcut_take_string, function in Test Utilities with GLib support teardown, function in Cutter GCUTTER_ENABLED, macro in GCutter GCUT_TYPE_ERROR, macro in Types for GLib support GCUT_TYPE_SIZE, macro in Types for GLib support U gcut_utils_get_fixture_data, function in gcut-public gcut_utils_get_fixture_data_va_list, function in gcut-public V gcut_value_equal, function in Assertion Utilities for GValue gcut_value_equal_init, function in gcut-main gcut_value_equal_quit, function in gcut-main gcut_value_register_equal_func, function in Assertion Utilities for GValue cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.7.xml0000644000175000017500000000737211442136355023233 0ustar koukou ]> A gcut_assert_not_equal_pid, function in Assertions with GLib support C CUTTER_CHECK_VERSION, macro in Version Information cut_assert_equal_boolean, function in Assertions cut_assert_equal_substring, function in Assertions cut_assert_not_equal_boolean, function in Assertions cut_assert_not_equal_double, function in Assertions cut_assert_not_equal_int, function in Assertions cut_assert_not_equal_memory, function in Assertions cut_assert_not_equal_size, function in Assertions cut_assert_not_equal_string, function in Assertions cut_assert_not_equal_substring, function in Assertions cut_assert_not_equal_uint, function in Assertions cut_build_path, function in Test Utilities D gcut_data_get_boxed, function in Convenience test data API T GCUT_TYPE_ERROR, macro in Types for GLib support cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.1.2.xml0000644000175000017500000000070011442136355023213 0ustar koukou ]> C CUT_EXPORT, macro in Cutter cutter-testing-framework-1.1.7/doc/reference/xml/gcut-value-equal.xml0000644000175000017500000001344011400101216024044 0ustar koukou ]> Assertion Utilities for GValue 3 CUTTER Library Assertion Utilities for GValue Utilities to write assertions related to GValue more easily. Synopsis gboolean gcut_value_equal (const GValue *value1, const GValue *value2); void gcut_value_register_equal_func (GType type1, GType type2, GEqualFunc equal_func); Description To write assertions, you need to check equality and show expected and actual values. The utilities help you to write assertions that are related to GValue. Details gcut_value_equal () gcut_value_equal gboolean gcut_value_equal (const GValue *value1, const GValue *value2); Compares two GValue, value1 and value2 by registered equal function. (See gcut_value_register_equal_func() for detail of how to register equal function of GValue) value1 : a GValue to be compared. value2 : a GValue to be compared. Returns : TRUE if value1 equals to value2, FALSE otherwise. Since 1.0.5 gcut_value_register_equal_func () gcut_value_register_equal_func void gcut_value_register_equal_func (GType type1, GType type2, GEqualFunc equal_func); e.g.: TODO Registers equality check function between GValue of type1 and GValue of type2. type1 : a GType of compared GValue. type2 : a GType of compared GValue. equal_func : a function that compares type1's GValue with type2's GValue. Since 1.0.5 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-process.xml0000644000175000017500000017064011523751467023340 0ustar koukou ]> External command 3 CUTTER Library External command Convenience API for using external command. Synopsis #define GCUT_PROCESS_ERROR GCutProcess; GCutProcessClass; enum GCutProcessError; GQuark gcut_process_error_quark (void); GCutProcess * gcut_process_new (const gchar *command, ...); GCutProcess * gcut_process_new_command_line (const gchar *command_line); GCutProcess * gcut_process_new_va_list (const gchar *command, va_list args); GCutProcess * gcut_process_new_argv (gint argc, gchar **argv); GCutProcess * gcut_process_new_strings (const gchar **command); GCutProcess * gcut_process_new_array (GArray *command); void gcut_process_set_flags (GCutProcess *process, GSpawnFlags flags); GSpawnFlags gcut_process_get_flags (GCutProcess *process); void gcut_process_set_env (GCutProcess *process, const gchar *name, ...); gchar ** gcut_process_get_env (GCutProcess *process); gboolean gcut_process_run (GCutProcess *process, GError **error); GPid gcut_process_get_pid (GCutProcess *process); gint gcut_process_wait (GCutProcess *process, guint timeout, GError **error); gboolean gcut_process_kill (GCutProcess *process, gint signal_number, GError **error); gboolean gcut_process_write (GCutProcess *process, const gchar *chunk, gsize size, GError **error); GIOStatus gcut_process_flush (GCutProcess *process, GError **error); GString * gcut_process_get_output_string (GCutProcess *process); GString * gcut_process_get_error_string (GCutProcess *process); GIOChannel * gcut_process_get_input_channel (GCutProcess *process); GIOChannel * gcut_process_get_output_channel (GCutProcess *process); GIOChannel * gcut_process_get_error_channel (GCutProcess *process); GInputStream * gcut_process_get_output_stream (GCutProcess *process); GInputStream * gcut_process_get_error_stream (GCutProcess *process); guint gcut_process_get_forced_termination_wait_time (GCutProcess *process); void gcut_process_set_forced_termination_wait_time (GCutProcess *process, guint timeout); GCutEventLoop * gcut_process_get_event_loop (GCutProcess *process); void gcut_process_set_event_loop (GCutProcess *process, GCutEventLoop *loop); Object Hierarchy GObject +----GCutProcess Properties "command" gpointer : Read / Write Signals "error" : Run Last "error-received" : Run Last "output-received" : Run Last "reaped" : Run Last Description GCutProcess encapsulates external command execution, communication and termination. GCutProcess reports an error as GError. It can be asserted easily by gcut_assert_error(). External command is specified to constructor like gcut_process_new(), gcut_process_new_strings() and so on. External command isn't run at the time. gcut_process_run() runs specified external command. Standard/Error outputs of external command are passed by "output-received"/"error-received" signals or GIOChannel returned by gcut_process_get_output()/gcut_process_get_error(). gcut_process_write() writes a chunk to standard input of external command. To wait external command finished, gcut_process_wait() can be used. It accepts timeout to avoid infinite waiting. e.g.: static GString *output_string; static GCutProcess *process; void cut_setup (void) { output_string = g_string_new(NULL); process = NULL; } void cut_teardown (void) { if (output_string) g_string_free(output_string, TRUE); if (process) g_object_unref(process); } static void cb_output_received (GCutProcess *process, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(output_string, chunk, size); } void test_echo (void) { GError *error = NULL; process = gcut_process_new("echo", "XXX", NULL); g_signal_connect(process, "receive-output", G_CALLBACK(cb_output_received), NULL); gcut_process_run(process, &error); gcut_assert_error(error); gcut_process_wait(process, 1000, &error); gcut_assert_error(error); cut_assert_equal_string("XXX\n", output_string->str); } Details GCUT_PROCESS_ERROR GCUT_PROCESS_ERROR #define GCUT_PROCESS_ERROR (gcut_process_error_quark()) GCutProcess GCutProcess typedef struct _GCutProcess GCutProcess; GCutProcessClass GCutProcessClass typedef struct { GObjectClass parent_class; void (*output_received) (GCutProcess *process, const gchar *chunk, gsize size); void (*error_received) (GCutProcess *process, const gchar *chunk, gsize size); void (*reaped) (GCutProcess *process, gint status); void (*error) (GCutProcess *process, GError *error); } GCutProcessClass; enum GCutProcessError GCutProcessError typedef enum { GCUT_PROCESS_ERROR_COMMAND_LINE, GCUT_PROCESS_ERROR_IO_ERROR, GCUT_PROCESS_ERROR_ALREADY_RUNNING, GCUT_PROCESS_ERROR_NOT_RUNNING, GCUT_PROCESS_ERROR_INVALID_OBJECT, GCUT_PROCESS_ERROR_INVALID_SIGNAL, GCUT_PROCESS_ERROR_PERMISSION_DENIED, GCUT_PROCESS_ERROR_TIMEOUT } GCutProcessError; Error codes returned by GCutProcess related operations. GCUT_PROCESS_ERROR_COMMAND_LINE Command line related error. GCUT_PROCESS_ERROR_IO_ERROR IO error. GCUT_PROCESS_ERROR_ALREADY_RUNNING External command is already running. GCUT_PROCESS_ERROR_NOT_RUNNING External command isn't running. GCUT_PROCESS_ERROR_INVALID_OBJECT Invalid GCutProcess object is passed. GCUT_PROCESS_ERROR_INVALID_SIGNAL Invalid signal is passed. GCUT_PROCESS_ERROR_PERMISSION_DENIED Permission denied. GCUT_PROCESS_ERROR_TIMEOUT Timeout. Since 1.1.5 gcut_process_error_quark () gcut_process_error_quark GQuark gcut_process_error_quark (void); Returns : gcut_process_new () gcut_process_new GCutProcess * gcut_process_new (const gchar *command, ...); Creates a new GCutProcess object that runs command. command : the external command name to be ran ... : the arguments for command Returns : a new GCutProcess. Since 1.1.5 gcut_process_new_command_line () gcut_process_new_command_line GCutProcess * gcut_process_new_command_line (const gchar *command_line); Creates a new GCutProcess object that runs command_line. command_line : a command line Returns : a new GCutProcess. Since 1.1.5 gcut_process_new_va_list () gcut_process_new_va_list GCutProcess * gcut_process_new_va_list (const gchar *command, va_list args); Creates a new GCutProcess object that runs command. command : the external command name to be ran args : arguments for command Returns : a new GCutProcess. Since 1.1.5 gcut_process_new_argv () gcut_process_new_argv GCutProcess * gcut_process_new_argv (gint argc, gchar **argv); Creates a new GCutProcess object that runs command. argc : the number of elements of argv argv : the external command name to be ran and arguments of it. Returns : a new GCutProcess. Since 1.1.5 gcut_process_new_strings () gcut_process_new_strings GCutProcess * gcut_process_new_strings (const gchar **command); Creates a new GCutProcess object that runs command. command : the external command name to be ran and arguments of it. NULL-terminated. Returns : a new GCutProcess. Since 1.1.5 gcut_process_new_array () gcut_process_new_array GCutProcess * gcut_process_new_array (GArray *command); Creates a new GCutProcess object that runs command. command : the external command name to be ran and arguments of it. The GArray should be zero-terminated. Returns : a new GCutProcess. Since 1.1.5 gcut_process_set_flags () gcut_process_set_flags void gcut_process_set_flags (GCutProcess *process, GSpawnFlags flags); Sets flags for spawning. process : a GCutProcess flags : the flags to be passed to g_spawn_async_with_pipes(). Since 1.1.5 gcut_process_get_flags () gcut_process_get_flags GSpawnFlags gcut_process_get_flags (GCutProcess *process); Gets flags for spawning. process : a GCutProcess Returns : the flags for spawning. Since 1.1.5 gcut_process_set_env () gcut_process_set_env void gcut_process_set_env (GCutProcess *process, const gchar *name, ...); Sets environment variable for external command. process : a GCutProcess name : the first environment name. ... : the value of name, followed by name and value pairs. NULL-terminated. Since 1.1.5 gcut_process_get_env () gcut_process_get_env gchar ** gcut_process_get_env (GCutProcess *process); Gets environment variable for external command. process : a GCutProcess Returns : a newly-allocated NULL-terminated environment variables. ("NAME1=VALUE1", "NAME2=VALUE2", ..., NULL) It should be freed by g_strfreev() when no longer needed. Since 1.1.5 gcut_process_run () gcut_process_run gboolean gcut_process_run (GCutProcess *process, GError **error); Runs a new external process. process : a GCutProcess error : return location for an error, or NULL Returns : TRUE on success, otherwise FALSE Since 1.1.5 gcut_process_get_pid () gcut_process_get_pid GPid gcut_process_get_pid (GCutProcess *process); Gets the process ID of running external process. If external process isn't running, 0 is returned. process : a GCutProcess Returns : the process ID of running external process if external process is running, otherwise 0. Since 1.1.5 gcut_process_wait () gcut_process_wait gint gcut_process_wait (GCutProcess *process, guint timeout, GError **error); Waits running external process is finished while timeout milliseconds. If external process isn't finished while timeout milliseconds, GCUT_PROCESS_ERROR_TIMEOUT error is set and -1 is returned. If external process isn't running, GCUT_PROCESS_ERROR_NOT_RUNNING error is set and -1 is returned. process : a GCutProcess timeout : the timeout period in milliseconds error : return location for an error, or NULL Returns : an exit status of external process on success, otherwise -1. Since 1.1.5 gcut_process_kill () gcut_process_kill gboolean gcut_process_kill (GCutProcess *process, gint signal_number, GError **error); Sends signal_number signal to external process. process : a GCutProcess signal_number : the signal number to be sent to external process error : return location for an error, or NULL Returns : TRUE on success, otherwise FALSE Since 1.1.5 gcut_process_write () gcut_process_write gboolean gcut_process_write (GCutProcess *process, const gchar *chunk, gsize size, GError **error); Writes chunk to external process's standard input. process : a GCutProcess chunk : the data to be wrote size : the size of chunk error : return location for an error, or NULL Returns : TRUE on success, otherwise FALSE Since 1.1.5 gcut_process_flush () gcut_process_flush GIOStatus gcut_process_flush (GCutProcess *process, GError **error); Flush buffered external process's standard input. process : a GCutProcess error : return location for an error, or NULL Returns : the status of the operation: One of G_IO_STATUS_NORMAL, G_IO_STATUS_AGAIN, or G_IO_STATUS_ERROR. Since 1.1.5 gcut_process_get_output_string () gcut_process_get_output_string GString * gcut_process_get_output_string (GCutProcess *process); process : a GCutProcess Returns : a GString that has all result of standard output of external process. Since 1.1.5 gcut_process_get_error_string () gcut_process_get_error_string GString * gcut_process_get_error_string (GCutProcess *process); process : a GCutProcess Returns : a GString that has all result of standard error of external process. Since 1.1.5 gcut_process_get_input_channel () gcut_process_get_input_channel GIOChannel * gcut_process_get_input_channel (GCutProcess *process); Gets a GIOChannel connected with standard input of external process. process : a GCutProcess Returns : a GIOChannel if external process is running, otherwise NULL. Since 1.1.5 gcut_process_get_output_channel () gcut_process_get_output_channel GIOChannel * gcut_process_get_output_channel (GCutProcess *process); Gets a GIOChannel connected with standard output of external process. process : a GCutProcess Returns : a GIOChannel if external process is running, otherwise NULL. Since 1.1.5 gcut_process_get_error_channel () gcut_process_get_error_channel GIOChannel * gcut_process_get_error_channel (GCutProcess *process); Gets a GIOChannel connected with standard error output of external process. process : a GCutProcess Returns : a GIOChannel if external process is running, otherwise NULL. Since 1.1.5 gcut_process_get_output_stream () gcut_process_get_output_stream GInputStream * gcut_process_get_output_stream (GCutProcess *process); Gets a GInputStream connected with standard output of external process. process : a GCutProcess Returns : a GInputStream if external process is running, otherwise NULL. Since 1.1.5 gcut_process_get_error_stream () gcut_process_get_error_stream GInputStream * gcut_process_get_error_stream (GCutProcess *process); Gets a GInputStream connected with standard error output of external process. process : a GCutProcess Returns : a GInputStream if external process is running, otherwise NULL. Since 1.1.5 gcut_process_get_forced_termination_wait_time () gcut_process_get_forced_termination_wait_time guint gcut_process_get_forced_termination_wait_time (GCutProcess *process); Gets a wait time in milliseconds for forced termination on dispose. process : a GCutProcess Returns : a timeout value for waiting forced terminated external command on dispose. Since 1.1.5 gcut_process_set_forced_termination_wait_time () gcut_process_set_forced_termination_wait_time void gcut_process_set_forced_termination_wait_time (GCutProcess *process, guint timeout); Sets a wait time in milliseconds for forced termination on dispose. If timeout is 0, it doesn't wait termination of external process. The default value is 10. process : a GCutProcess timeout : the timeout value in milliseconds Since 1.1.5 gcut_process_get_event_loop () gcut_process_get_event_loop GCutEventLoop * gcut_process_get_event_loop (GCutProcess *process); Gets a event loop using by the process. process : a GCutProcess Returns : a GCutEventLoop. Since 1.1.6 gcut_process_set_event_loop () gcut_process_set_event_loop void gcut_process_set_event_loop (GCutProcess *process, GCutEventLoop *loop); Sets a event loop for the process. If loop is NULL, the default GLib event loop will be used. process : a GCutProcess loop : the event loop or NULL Since 1.1.6 Property Details The <literal>"command"</literal> property GCutProcess:command "command" gpointer : Read / Write The command to be ran by the process. Signal Details The <literal>"error"</literal> signal GCutProcess::error void user_function (GCutProcess *process, gpointer error, gpointer user_data) : Run Last It is emitted each time an external process causes an error. (e.g. IO error) process : the object which received the signal. error : the error of an external process. (GError) user_data : user data set when the signal handler was connected. Since 1.1.5The <literal>"error-received"</literal> signal GCutProcess::error-received void user_function (GCutProcess *process, gchar *chunk, guint64 size, gpointer user_data) : Run Last It is emitted each time an external process outputs something to its standard error output and it is read. Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process's output is readable. process : the object which received the signal. chunk : the chunk read from an external process's standard error output. size : the size of chunk. (gsize) user_data : user data set when the signal handler was connected. Since 1.1.5The <literal>"output-received"</literal> signal GCutProcess::output-received void user_function (GCutProcess *process, gchar *chunk, guint64 size, gpointer user_data) : Run Last It is emitted each time an external process outputs something to its standard output and it is read. Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process's output is readable. process : the object which received the signal. chunk : the chunk read from an external process's standard output. size : the size of chunk. (gsize) user_data : user data set when the signal handler was connected. Since 1.1.5The <literal>"reaped"</literal> signal GCutProcess::reaped void user_function (GCutProcess *process, gint status, gpointer user_data) : Run Last It is emitted when an external process is exited. Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process is exited. process : the object which received the signal. status : the exit status of an external process. user_data : user data set when the signal handler was connected. Since 1.1.5 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-egg.xml0000644000175000017500000016051011442136354022407 0ustar koukou ]> External command (deprecated) 3 CUTTER Library External command (deprecated) Convenience API for using external command. (deprecated) Synopsis #define GCUT_EGG_ERROR GCutEgg; GCutEggClass; enum GCutEggError; GQuark gcut_egg_error_quark (void); GCutEgg * gcut_egg_new (const gchar *command, ...); GCutEgg * gcut_egg_new_va_list (const gchar *command, va_list args); GCutEgg * gcut_egg_new_argv (gint argc, gchar **argv); GCutEgg * gcut_egg_new_strings (const gchar **command); GCutEgg * gcut_egg_new_array (GArray *command); void gcut_egg_set_flags (GCutEgg *egg, GSpawnFlags flags); GSpawnFlags gcut_egg_get_flags (GCutEgg *egg); void gcut_egg_set_env (GCutEgg *egg, const gchar *name, ...); gchar ** gcut_egg_get_env (GCutEgg *egg); gboolean gcut_egg_hatch (GCutEgg *egg, GError **error); void gcut_egg_close (GCutEgg *egg); gboolean gcut_egg_write (GCutEgg *egg, const gchar *chunk, gsize size, GError **error); GPid gcut_egg_get_pid (GCutEgg *egg); gint gcut_egg_wait (GCutEgg *egg, guint timeout, GError **error); void gcut_egg_kill (GCutEgg *egg, gint signal_number); GIOChannel * gcut_egg_get_input (GCutEgg *egg); GIOChannel * gcut_egg_get_output (GCutEgg *egg); GIOChannel * gcut_egg_get_error (GCutEgg *egg); guint gcut_egg_get_forced_termination_wait_time (GCutEgg *egg); void gcut_egg_set_forced_termination_wait_time (GCutEgg *egg, guint timeout); Object Hierarchy GObject +----GCutEgg Properties "command" gpointer : Read / Write Signals "error" : Run Last "error-received" : Run Last "output-received" : Run Last "reaped" : Run Last Description GCutEgg encapsulates external command execution, communication and termination. GCutEgg reports an error as GError. It can be asserted easily by gcut_assert_error(). External command is specified to constructor like gcut_egg_new(), gcut_egg_new_strings() and so on. External command isn't run at the time. gcut_egg_hatch() runs specified external command. Standard/Error outputs of external command are passed by "output-received"/"error-received" signals or GIOChannel returned by gcut_egg_get_output()/gcut_egg_get_error(). gcut_egg_write() writes a chunk to standard input of external command. To wait external command finished, gcut_egg_wait() can be used. It accepts timeout to avoid infinite waiting. e.g.: static GString *output_string; static GCutEgg *egg; void cut_setup (void) { output_string = g_string_new(NULL); egg = NULL; } void cut_teardown (void) { if (output_string) g_string_free(output_string, TRUE); if (egg) g_object_unref(egg); } static void cb_output_received (GCutEgg *egg, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(output_string, chunk, size); } void test_echo (void) { GError *error = NULL; egg = gcut_egg_new("echo", "XXX", NULL); g_signal_connect(egg, "receive-output", G_CALLBACK(cb_output_received), NULL); gcut_egg_hatch(egg, &error); gcut_assert_error(error); gcut_egg_wait(egg, 1000, &error); gcut_assert_error(error); cut_assert_equal_string("XXX\n", output_string->str); } Details GCUT_EGG_ERROR GCUT_EGG_ERROR #define GCUT_EGG_ERROR (gcut_egg_error_quark()) GCUT_EGG_ERROR is deprecated and should not be used in newly-written code. GCutEgg GCutEgg typedef struct _GCutEgg GCutEgg; GCutEgg is deprecated and should not be used in newly-written code. GCutEggClass GCutEggClass typedef struct { GObjectClass parent_class; void (*output_received) (GCutEgg *egg, const gchar *chunk, gsize size); void (*error_received) (GCutEgg *egg, const gchar *chunk, gsize size); void (*reaped) (GCutEgg *egg, gint status); void (*error) (GCutEgg *egg, GError *error); } GCutEggClass; GCutEggClass is deprecated and should not be used in newly-written code. enum GCutEggError GCutEggErrorGCutEggError typedef enum { GCUT_EGG_ERROR_COMMAND_LINE, GCUT_EGG_ERROR_IO_ERROR, GCUT_EGG_ERROR_ALREADY_RUNNING, GCUT_EGG_ERROR_NOT_RUNNING, GCUT_EGG_ERROR_INVALID_OBJECT, GCUT_EGG_ERROR_TIMEOUT } GCutEggError; GCutEggError has been deprecated since version 1.1.5 and should not be used in newly-written code. Use GCutProcessError instead. Error codes returned by GCutEgg related operations. GCUT_EGG_ERROR_COMMAND_LINE Command line related error. GCUT_EGG_ERROR_IO_ERROR IO error. GCUT_EGG_ERROR_ALREADY_RUNNING External command is already running. GCUT_EGG_ERROR_NOT_RUNNING External command isn't running. GCUT_EGG_ERROR_INVALID_OBJECT Invalid GCutEgg object is passed. GCUT_EGG_ERROR_TIMEOUT Timeout. Since 1.0.6 gcut_egg_error_quark () gcut_egg_error_quark GQuark gcut_egg_error_quark (void); gcut_egg_error_quark is deprecated and should not be used in newly-written code. Returns : gcut_egg_new () gcut_egg_newgcut_egg_new GCutEgg * gcut_egg_new (const gchar *command, ...); gcut_egg_new has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new() instead. Creates a new GCutEgg object that runs command. command : the external command name to be ran ... : the arguments for command Returns : a new GCutEgg. Since 1.0.6 gcut_egg_new_va_list () gcut_egg_new_va_listgcut_egg_new_va_list GCutEgg * gcut_egg_new_va_list (const gchar *command, va_list args); gcut_egg_new_va_list has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new_va_list() instead. Creates a new GCutEgg object that runs command. command : the external command name to be ran args : arguments for command Returns : a new GCutEgg. Since 1.0.6 gcut_egg_new_argv () gcut_egg_new_argvgcut_egg_new_argv GCutEgg * gcut_egg_new_argv (gint argc, gchar **argv); gcut_egg_new_argv has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new_argv() instead. Creates a new GCutEgg object that runs command. argc : the number of elements of argv argv : the external command name to be ran and arguments of it. Returns : a new GCutEgg. Since 1.0.6 gcut_egg_new_strings () gcut_egg_new_stringsgcut_egg_new_strings GCutEgg * gcut_egg_new_strings (const gchar **command); gcut_egg_new_strings has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new_strings() instead. Creates a new GCutEgg object that runs command. command : the external command name to be ran and arguments of it. NULL-terminated. Returns : a new GCutEgg. Since 1.0.6 gcut_egg_new_array () gcut_egg_new_arraygcut_egg_new_array GCutEgg * gcut_egg_new_array (GArray *command); gcut_egg_new_array has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_new_array() instead. Creates a new GCutEgg object that runs command. command : the external command name to be ran and arguments of it. The GArray should be zero-terminated. Returns : a new GCutEgg. Since 1.0.6 gcut_egg_set_flags () gcut_egg_set_flagsgcut_egg_set_flags void gcut_egg_set_flags (GCutEgg *egg, GSpawnFlags flags); gcut_egg_set_flags has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_set_flags() instead. Sets flags for spawning. egg : a GCutEgg flags : the flags to be passed to g_spawn_async_with_pipes(). Since 1.0.6 gcut_egg_get_flags () gcut_egg_get_flagsgcut_egg_get_flags GSpawnFlags gcut_egg_get_flags (GCutEgg *egg); gcut_egg_get_flags has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_flags() instead. Gets flags for spawning. egg : a GCutEgg Returns : the flags for spawning. Since 1.0.6 gcut_egg_set_env () gcut_egg_set_envgcut_egg_set_env void gcut_egg_set_env (GCutEgg *egg, const gchar *name, ...); gcut_egg_set_env has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_set_env() instead. Sets environment variable for external command. egg : a GCutEgg name : the first environment name. ... : the value of name, followed by name and value pairs. NULL-terminated. Since 1.0.6 gcut_egg_get_env () gcut_egg_get_envgcut_egg_get_env gchar ** gcut_egg_get_env (GCutEgg *egg); gcut_egg_get_env has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_env() instead. Gets environment variable for external command. egg : a GCutEgg Returns : a newly-allocated NULL-terminated environment variables. ("NAME1=VALUE1", "NAME2=VALUE2", ..., NULL) It should be freed by g_strfreev() when no longer needed. Since 1.0.6 gcut_egg_hatch () gcut_egg_hatchgcut_egg_hatch gboolean gcut_egg_hatch (GCutEgg *egg, GError **error); gcut_egg_hatch has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_run() instead. Hatches a new external process. egg : a GCutEgg error : return location for an error, or NULL Returns : TRUE on success, otherwise FALSE Since 1.0.6 gcut_egg_close () gcut_egg_closegcut_egg_close void gcut_egg_close (GCutEgg *egg); gcut_egg_close has been deprecated since version 1.1.5 and should not be used in newly-written code. no need to close explicitly on GCutProcess. Closes a hatched external process. It is closed implicitly on destroy. egg : a GCutEgg Since 1.0.6 gcut_egg_write () gcut_egg_writegcut_egg_write gboolean gcut_egg_write (GCutEgg *egg, const gchar *chunk, gsize size, GError **error); gcut_egg_write has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_write() instead. Writes chunk to external process's standard input. egg : a GCutEgg chunk : the data to be wrote size : the size of chunk error : return location for an error, or NULL Returns : TRUE on success, otherwise FALSE Since 1.0.6 gcut_egg_get_pid () gcut_egg_get_pidgcut_egg_get_pid GPid gcut_egg_get_pid (GCutEgg *egg); gcut_egg_get_pid has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_pid() instead. Gets the process ID of running external process. If external process isn't running, 0 is returned. egg : a GCutEgg Returns : the process ID of running external process if external process is running, otherwise 0. Since 1.0.6 gcut_egg_wait () gcut_egg_waitgcut_egg_wait gint gcut_egg_wait (GCutEgg *egg, guint timeout, GError **error); gcut_egg_wait has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_wait() instead. Waits running external process is finished while timeout milliseconds. If external process isn't finished while timeout milliseconds, GCUT_EGG_ERROR_TIMEOUT error is set and -1 is returned. If external process isn't running, GCUT_EGG_ERROR_NOT_RUNNING error is set and -1 is returned. egg : a GCutEgg timeout : the timeout period in milliseconds error : return location for an error, or NULL Returns : an exit status of external process on success, otherwise -1. Since 1.0.6 gcut_egg_kill () gcut_egg_killgcut_egg_kill void gcut_egg_kill (GCutEgg *egg, gint signal_number); gcut_egg_kill has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_kill() instead. Sends signal_number signal to external process. egg : a GCutEgg signal_number : the signal number to be sent to external process Since 1.0.6 gcut_egg_get_input () gcut_egg_get_inputgcut_egg_get_input GIOChannel * gcut_egg_get_input (GCutEgg *egg); gcut_egg_get_input has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_input_channel() instead. Gets a GIOChannel connected with standard input of external process. egg : a GCutEgg Returns : a GIOChannel if external process is running, otherwise NULL. Since 1.0.6 gcut_egg_get_output () gcut_egg_get_outputgcut_egg_get_output GIOChannel * gcut_egg_get_output (GCutEgg *egg); gcut_egg_get_output has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_output_channel() instead. Gets a GIOChannel connected with standard output of external process. egg : a GCutEgg Returns : a GIOChannel if external process is running, otherwise NULL. Since 1.0.6 gcut_egg_get_error () gcut_egg_get_errorgcut_egg_get_error GIOChannel * gcut_egg_get_error (GCutEgg *egg); gcut_egg_get_error has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_error_channel() instead. Gets a GIOChannel connected with standard error output of external process. egg : a GCutEgg Returns : a GIOChannel if external process is running, otherwise NULL. Since 1.0.6 gcut_egg_get_forced_termination_wait_time () gcut_egg_get_forced_termination_wait_timegcut_egg_get_forced_termination_wait_time guint gcut_egg_get_forced_termination_wait_time (GCutEgg *egg); gcut_egg_get_forced_termination_wait_time has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_get_forced_termination_wait_time() instead. Gets a wait time in milliseconds for forced termination on dispose. egg : a GCutEgg Returns : a timeout value for waiting forced terminated external command on dispose. Since 1.0.6 gcut_egg_set_forced_termination_wait_time () gcut_egg_set_forced_termination_wait_timegcut_egg_set_forced_termination_wait_time void gcut_egg_set_forced_termination_wait_time (GCutEgg *egg, guint timeout); gcut_egg_set_forced_termination_wait_time has been deprecated since version 1.1.5 and should not be used in newly-written code. Use gcut_process_set_forced_termination_wait_time() instead. Sets a wait time in milliseconds for forced termination on dispose. If timeout is 0, it doesn't wait termination of external process. The default value is 10. egg : a GCutEgg timeout : the timeout value in milliseconds Since 1.0.6 Property Details The <literal>"command"</literal> property GCutEgg:command "command" gpointer : Read / Write The command to be ran by the egg. Signal Details The <literal>"error"</literal> signal GCutEgg::error void user_function (GCutEgg *egg, gpointer error, gpointer user_data) : Run Last It is emitted each time an external process causes an error. (e.g. IO error) egg : the object which received the signal. error : the error of an external process. (GError) user_data : user data set when the signal handler was connected. Since 1.0.6The <literal>"error-received"</literal> signal GCutEgg::error-received void user_function (GCutEgg *egg, gchar *chunk, guint64 size, gpointer user_data) : Run Last It is emitted each time an external process outputs something to its standard error output and it is read. Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process's output is readable. egg : the object which received the signal. chunk : the chunk read from an external process's standard error output. size : the size of chunk. (gsize) user_data : user data set when the signal handler was connected. Since 1.0.6The <literal>"output-received"</literal> signal GCutEgg::output-received void user_function (GCutEgg *egg, gchar *chunk, guint64 size, gpointer user_data) : Run Last It is emitted each time an external process outputs something to its standard output and it is read. Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process's output is readable. egg : the object which received the signal. chunk : the chunk read from an external process's standard output. size : the size of chunk. (gsize) user_data : user data set when the signal handler was connected. Since 1.0.6The <literal>"reaped"</literal> signal GCutEgg::reaped void user_function (GCutEgg *egg, gint status, gpointer user_data) : Run Last It is emitted when an external process is exited. Note that you need to run GLib's main loop by g_main_loop_run(), g_main_context_iteration() and so on for detecting an external process is exited. egg : the object which received the signal. status : the exit status of an external process. user_data : user data set when the signal handler was connected. Since 1.0.6 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-event-loop.xml0000644000175000017500000007753211523757406023757 0ustar koukou ]> Abstracted event loop 3 CUTTER Library Abstracted event loop Abstracted event loop API for customizing event loop in GCutter. Synopsis #define GCUT_EVENT_LOOP_ERROR GCutEventLoop; GCutEventLoopClass; GQuark gcut_event_loop_error_quark (void); void gcut_event_loop_run (GCutEventLoop *loop); gboolean gcut_event_loop_iterate (GCutEventLoop *loop, gboolean may_block); void gcut_event_loop_quit (GCutEventLoop *loop); guint gcut_event_loop_watch_io (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); guint gcut_event_loop_watch_child (GCutEventLoop *loop, GPid pid, GChildWatchFunc function, gpointer data); guint gcut_event_loop_watch_child_full (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); guint gcut_event_loop_add_timeout (GCutEventLoop *loop, gdouble interval_in_seconds, GSourceFunc function, gpointer data); guint gcut_event_loop_add_timeout_full (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); guint gcut_event_loop_add_idle (GCutEventLoop *loop, GSourceFunc function, gpointer data); guint gcut_event_loop_add_idle_full (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); gboolean gcut_event_loop_remove (GCutEventLoop *loop, guint tag); Object Hierarchy GObject +----GCutEventLoop Description GCutEventLoop encapsulates event loop. For example, event loop is used in GCutProcess. It uses the GLib's default main context for it. Normally, a custom GCutEventLoop isn't required. It is needed some special case. For example, using libev as event loop backend instead of GLib's main loop. GCutter provides GCutEventLoop for GLib's main context and main loop, GCutGLibEventLoop. Details GCUT_EVENT_LOOP_ERROR GCUT_EVENT_LOOP_ERROR #define GCUT_EVENT_LOOP_ERROR (gcut_event_loop_error_quark()) GCutEventLoop GCutEventLoop typedef struct _GCutEventLoop GCutEventLoop; GCutEventLoopClass GCutEventLoopClass typedef struct { GObjectClass parent_class; void (*run) (GCutEventLoop *loop); gboolean (*iterate) (GCutEventLoop *loop, gboolean may_block); void (*quit) (GCutEventLoop *loop); guint (*watch_io) (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); guint (*watch_child_full) (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); guint (*add_timeout_full) (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); guint (*add_idle_full) (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); gboolean (*remove) (GCutEventLoop *loop, guint tag); } GCutEventLoopClass; gcut_event_loop_error_quark () gcut_event_loop_error_quark GQuark gcut_event_loop_error_quark (void); Returns : gcut_event_loop_run () gcut_event_loop_run void gcut_event_loop_run (GCutEventLoop *loop); Runs the given event loop until gcut_event_loop_quit() is called on the loop. loop : a GCutEventLoop. Since 1.1.6 gcut_event_loop_iterate () gcut_event_loop_iterate gboolean gcut_event_loop_iterate (GCutEventLoop *loop, gboolean may_block); Runs a single iteration for the given event loop. If no events are ready and may_block is TRUE, waiting for a event become ready. Otherwise, if may_block is FALSE, events are not waited to become ready. loop : a GCutEventLoop. may_block : whether the call may block. Returns : TRUE if a event was dispatched. Since 1.1.6 gcut_event_loop_quit () gcut_event_loop_quit void gcut_event_loop_quit (GCutEventLoop *loop); Stops the loop from running. loop : a GCutEventLoop. Since 1.1.6 gcut_event_loop_watch_io () gcut_event_loop_watch_io guint gcut_event_loop_watch_io (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); Adds the channel into loop with the default priority. function is called when condition is met for the given channel. loop : a GCutEventLoop. channel : a GIOChannel condition : conditions to watch for function : function to call data : data to pass to function Returns : the event ID. Since 1.1.6 gcut_event_loop_watch_child () gcut_event_loop_watch_child guint gcut_event_loop_watch_child (GCutEventLoop *loop, GPid pid, GChildWatchFunc function, gpointer data); Adds the function to be called when the child indicated by pid exits into loop with the default priority. loop : a GCutEventLoop. pid : process ID to watch function : function to call data : data to pass to function Returns : the event ID. Since 1.1.6 gcut_event_loop_watch_child_full () gcut_event_loop_watch_child_full guint gcut_event_loop_watch_child_full (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); Adds the function to be called when the child indicated by pid exits into loop with the priority. loop : a GCutEventLoop. priority : the priority of the event. pid : process ID to watch function : function to call data : data to pass to function notify : function to call when the event is removed, or NULL Returns : the event ID. Since 1.1.6 gcut_event_loop_add_timeout () gcut_event_loop_add_timeout guint gcut_event_loop_add_timeout (GCutEventLoop *loop, gdouble interval_in_seconds, GSourceFunc function, gpointer data); Adds the function to be called at regular intervals, with the default priority. loop : a GCutEventLoop. interval_in_seconds : the time between calls to the function, in seconds. function : function to call data : data to pass to function Returns : the event ID. Since 1.1.6 gcut_event_loop_add_timeout_full () gcut_event_loop_add_timeout_full guint gcut_event_loop_add_timeout_full (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); Adds the function to be called at regular intervals, with the priority. loop : a GCutEventLoop. priority : the priority of the event. interval_in_seconds : the time between calls to the function, in seconds. function : function to call data : data to pass to function notify : function to call when the event is removed, or NULL Returns : the event ID. Since 1.1.6 gcut_event_loop_add_idle () gcut_event_loop_add_idle guint gcut_event_loop_add_idle (GCutEventLoop *loop, GSourceFunc function, gpointer data); Adds the function to be called whenever there are no higher priority events pending with the default priority. loop : a GCutEventLoop. function : function to call data : data to pass to function Returns : the event ID. Since 1.1.6 gcut_event_loop_add_idle_full () gcut_event_loop_add_idle_full guint gcut_event_loop_add_idle_full (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); Adds the function to be called whenever there are no higher priority events pending with the priority. loop : a GCutEventLoop. priority : the priority of the event. function : function to call data : data to pass to function notify : function to call when the event is removed, or NULL Returns : the event ID. Since 1.1.6 gcut_event_loop_remove () gcut_event_loop_remove gboolean gcut_event_loop_remove (GCutEventLoop *loop, guint tag); Removes the event with the given ID, tag. loop : a GCutEventLoop. tag : the ID of the source to remove Returns : TRUE if the source was found and removed. Since 1.1.6 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-dynamic-data.xml0000644000175000017500000000171011400101215024152 0ustar koukou ]> GCutDynamicData 3 CUTTER Library GCutDynamicData Synopsis Description Details cutter-testing-framework-1.1.7/doc/reference/xml/gcut-public.xml0000644000175000017500000003144111523751467023133 0ustar koukou ]> gcut-public 3 CUTTER Library gcut-public Synopsis GObject * cut_test_context_take_g_object (CutTestContext *context, GObject *object); const GError * cut_test_context_take_g_error (CutTestContext *context, GError *error); const GList * cut_test_context_take_g_list (CutTestContext *context, GList *list, CutDestroyFunction destroy); GHashTable * cut_test_context_take_g_hash_table (CutTestContext *context, GHashTable *hash_table); GString * cut_test_context_take_g_string (CutTestContext *context, GString *string); GString * gcut_utils_get_fixture_data (CutTestContext *context, const gchar **full_path, const gchar *path, ...); GString * gcut_utils_get_fixture_data_va_list (CutTestContext *context, const gchar **full_path, const gchar *path, va_list args); Description Details cut_test_context_take_g_object () cut_test_context_take_g_object GObject * cut_test_context_take_g_object (CutTestContext *context, GObject *object); context : object : Returns : cut_test_context_take_g_error () cut_test_context_take_g_error const GError * cut_test_context_take_g_error (CutTestContext *context, GError *error); context : error : Returns : cut_test_context_take_g_list () cut_test_context_take_g_list const GList * cut_test_context_take_g_list (CutTestContext *context, GList *list, CutDestroyFunction destroy); context : list : destroy : Returns : cut_test_context_take_g_hash_table () cut_test_context_take_g_hash_table GHashTable * cut_test_context_take_g_hash_table (CutTestContext *context, GHashTable *hash_table); context : hash_table : Returns : cut_test_context_take_g_string () cut_test_context_take_g_string GString * cut_test_context_take_g_string (CutTestContext *context, GString *string); context : string : Returns : gcut_utils_get_fixture_data () gcut_utils_get_fixture_data GString * gcut_utils_get_fixture_data (CutTestContext *context, const gchar **full_path, const gchar *path, ...); context : full_path : path : ... : Returns : gcut_utils_get_fixture_data_va_list () gcut_utils_get_fixture_data_va_list GString * gcut_utils_get_fixture_data_va_list (CutTestContext *context, const gchar **full_path, const gchar *path, va_list args); context : full_path : path : args : Returns : cutter-testing-framework-1.1.7/doc/reference/xml/gcut-glib-event-loop.xml0000644000175000017500000000672111523760055024654 0ustar koukou ]> GLib event loop 3 CUTTER Library GLib event loop Event loop API for GLib main context and loop. Synopsis GCutGLibEventLoop; GCutGLibEventLoopClass; GCutEventLoop * gcut_glib_event_loop_new (GMainContext *context); Description GCutGLibEventLoop is an GCutEventLoop implementation for GLib's main context and loop. Details GCutGLibEventLoop GCutGLibEventLoop typedef struct { GCutEventLoop object; } GCutGLibEventLoop; GCutGLibEventLoopClass GCutGLibEventLoopClass typedef struct { GCutEventLoopClass parent_class; } GCutGLibEventLoopClass; gcut_glib_event_loop_new () gcut_glib_event_loop_new GCutEventLoop * gcut_glib_event_loop_new (GMainContext *context); Creates a new GCutEeventLoop for context. If context is NULL, the default GLib's main context is used. context : a GMainContext or NULL Returns : a new GCutEventLoop. Since 1.1.6 cutter-testing-framework-1.1.7/doc/reference/xml/gdkcutter-pixbuf.xml0000644000175000017500000000512011400101216024146 0ustar koukou ]> GdkCutter Pixbuf 3 CUTTER Library GdkCutter Pixbuf Cutter with gdk-pixbuf support. Synopsis #define GDKCUTTER_PIXBUF_ENABLED Description GdkCutter Pixbuf adds many useful features based on gdk-pixbuf to Cutter. If you want to write tests for image, it's good idea that you consider GdkCutter Pixbuf to be used too. It's easy to use GdkCutter Pixbuf. You just include <gdk-cutter-pixbuf.h> instead of <cutter.h> or <gcutter.h> and use gdkcutter-pixbuf.pc instead of cutter.pc or gcutter.pc: test-xxx.c: -#include <cutter.h> +#include <gdkcutter-pixbuf.h> configure.ac: -AC_CHECK_CUTTER +AC_CHECK_GDKCUTTER_PIXBUF Makefile.am: -XXX_CFLAGS = $(CUTTER_CFLAGS) -XXX_LIBS = $(CUTTER_LIBS) +XXX_CFLAGS = $(GDKCUTTER_PIXBUF_CFLAGS) +XXX_LIBS = $(GDKCUTTER_PIXBUF_LIBS) Details GDKCUTTER_PIXBUF_ENABLED GDKCUTTER_PIXBUF_ENABLED #define GDKCUTTER_PIXBUF_ENABLED 1 Defined when GdkCutter Pixbuf is enabled. Since 1.0.6 See Also Assertions with gdk-pixbuf support cutter-testing-framework-1.1.7/doc/reference/xml/gcut-list.xml0000644000175000017500000011216611400101216022603 0ustar koukou ]> Assertion Utilities for GList 3 CUTTER Library Assertion Utilities for GList Utilities to write assertions related to GList more easily. Synopsis gboolean gcut_list_equal (const GList *list1, const GList *list2, GEqualFunc equal_func); gchar * gcut_list_inspect (const GList *list, GCutInspectFunction inspect_func, gpointer user_data); gboolean gcut_list_equal_int (const GList *list1, const GList *list2); gchar * gcut_list_inspect_int (const GList *list); gboolean gcut_list_equal_uint (const GList *list1, const GList *list2); gchar * gcut_list_inspect_uint (const GList *list); gboolean gcut_list_equal_string (const GList *list1, const GList *list2); gchar * gcut_list_inspect_string (const GList *list); gchar * gcut_list_inspect_object (const GList *list); gchar * gcut_list_inspect_enum (GType type, const GList *list); gchar * gcut_list_inspect_flags (GType type, const GList *list); #define gcut_list_int_equal (list1, list2) #define gcut_list_int_inspect (list) #define gcut_list_uint_equal (list1, list2) #define gcut_list_uint_inspect (list) #define gcut_list_string_equal (list1, list2) #define gcut_list_string_inspect (list) #define gcut_list_object_inspect (list) #define gcut_list_enum_inspect (list, type) #define gcut_list_flags_inspect (list, type) Description To write assertions, you need to check equality and show expected and actual values. The utilities help you to write assertions that are related to GList. Details gcut_list_equal () gcut_list_equal gboolean gcut_list_equal (const GList *list1, const GList *list2, GEqualFunc equal_func); Compares two GList, list1 and list2. equal_func is called for each corresponding values of list1 and list2. e.g.: TODO list1 : a GList to be compared. list2 : a GList to be compared. equal_func : a function that compares two values. Returns : TRUE if all corresponding values of list1 and list2 are reported TRUE by equal_func, FALSE otherwise. Since 1.0.5 gcut_list_inspect () gcut_list_inspect gchar * gcut_list_inspect (const GList *list, GCutInspectFunction inspect_func, gpointer user_data); Inspects list. Each value of list is inspected by inspect_func. The returned string should be freed when no longer needed. e.g.: TODO list : a GList to be inspected. inspect_func : a function that inspects each value. user_data : user data to pass to the function. Returns : inspected list as a string. Since 1.0.5 gcut_list_equal_int () gcut_list_equal_int gboolean gcut_list_equal_int (const GList *list1, const GList *list2); Compares two GList, list1 and list2. list1 and list2 should be GList of gint. list1 : a GList of gint to be compared. list2 : a GList of gint to be compared. Returns : TRUE if all corresponding integers of list1 and list2 are same value, FALSE otherwise. Since 1.0.6 gcut_list_inspect_int () gcut_list_inspect_int gchar * gcut_list_inspect_int (const GList *list); Inspects list. list should be GList of gint. The returned string should be freed when no longer needed. list : a GList of gint to be inspected. Returns : inspected list as a string. Since 1.0.6 gcut_list_equal_uint () gcut_list_equal_uint gboolean gcut_list_equal_uint (const GList *list1, const GList *list2); Compares two GList, list1 and list2. list1 and list2 should be GList of guint. list1 : a GList of guint to be compared. list2 : a GList of guint to be compared. Returns : TRUE if all corresponding unsigned integers of list1 and list2 are same value, FALSE otherwise. Since 1.0.6 gcut_list_inspect_uint () gcut_list_inspect_uint gchar * gcut_list_inspect_uint (const GList *list); Inspects list. list should be GList of guint. The returned string should be freed when no longer needed. list : a GList of guint to be inspected. Returns : inspected list as a string. Since 1.0.6 gcut_list_equal_string () gcut_list_equal_string gboolean gcut_list_equal_string (const GList *list1, const GList *list2); Compares two GList, list1 and list2. list1 and list2 should be GList of string. list1 : a GList of string to be compared. list2 : a GList of string to be compared. Returns : TRUE if all corresponding string of list1 and list2 are same content string, FALSE otherwise. Since 1.0.6 gcut_list_inspect_string () gcut_list_inspect_string gchar * gcut_list_inspect_string (const GList *list); Inspects list. list should be GList of string. The returned string should be freed when no longer needed. list : a GList of string to be inspected. Returns : inspected list as a string. Since 1.0.6 gcut_list_inspect_object () gcut_list_inspect_object gchar * gcut_list_inspect_object (const GList *list); Inspects list. list should be GList of GObject. The returned string should be freed when no longer needed. list : a GList of GObject to be inspected. Returns : inspected list as a string. Since 1.0.6 gcut_list_inspect_enum () gcut_list_inspect_enum gchar * gcut_list_inspect_enum (GType type, const GList *list); Inspects list. list should be GList of enum value of GEnum. The returned string should be freed when no longer needed. type : a GEnum type. list : a GList of enum value to be inspected. Returns : inspected list as a string. Since 1.0.6 gcut_list_inspect_flags () gcut_list_inspect_flags gchar * gcut_list_inspect_flags (GType type, const GList *list); Inspects list. list should be GList of flags value of GFlags. The returned string should be freed when no longer needed. type : a GFlags type. list : a GList of flags value to be inspected. Returns : inspected list as a string. Since 1.0.6 gcut_list_int_equal() gcut_list_int_equalgcut_list_int_equal #define gcut_list_int_equal(list1, list2) gcut_list_int_equal has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_equal_int() instead. Compares two GList, list1 and list2. list1 and list2 should be GList of gint. list1 : a GList of gint to be compared. list2 : a GList of gint to be compared. Returns : TRUE if all corresponding integers of list1 and list2 are same value, FALSE otherwise. Since 1.0.5 gcut_list_int_inspect() gcut_list_int_inspectgcut_list_int_inspect #define gcut_list_int_inspect(list) gcut_list_int_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_int() instead. Inspects list. list should be GList of gint. The returned string should be freed when no longer needed. list : a GList of gint to be inspected. Returns : inspected list as a string. Since 1.0.5 gcut_list_uint_equal() gcut_list_uint_equalgcut_list_uint_equal #define gcut_list_uint_equal(list1, list2) gcut_list_uint_equal has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_equal_uint() instead. Compares two GList, list1 and list2. list1 and list2 should be GList of guint. list1 : a GList of guint to be compared. list2 : a GList of guint to be compared. Returns : TRUE if all corresponding unsigned integers of list1 and list2 are same value, FALSE otherwise. Since 1.0.5 gcut_list_uint_inspect() gcut_list_uint_inspectgcut_list_uint_inspect #define gcut_list_uint_inspect(list) gcut_list_uint_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_uint() instead. Inspects list. list should be GList of guint. The returned string should be freed when no longer needed. list : a GList of guint to be inspected. Returns : inspected list as a string. Since 1.0.5 gcut_list_string_equal() gcut_list_string_equalgcut_list_string_equal #define gcut_list_string_equal(list1, list2) gcut_list_string_equal has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_equal_string() instead. Compares two GList, list1 and list2. list1 and list2 should be GList of string. list1 : a GList of string to be compared. list2 : a GList of string to be compared. Returns : TRUE if all corresponding string of list1 and list2 are same content string, FALSE otherwise. Since 1.0.5 gcut_list_string_inspect() gcut_list_string_inspectgcut_list_string_inspect #define gcut_list_string_inspect(list) gcut_list_string_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_string() instead. Inspects list. list should be GList of string. The returned string should be freed when no longer needed. list : a GList of string to be inspected. Returns : inspected list as a string. Since 1.0.5 gcut_list_object_inspect() gcut_list_object_inspectgcut_list_object_inspect #define gcut_list_object_inspect(list) gcut_list_object_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_object() instead. Inspects list. list should be GList of GObject. The returned string should be freed when no longer needed. list : a GList of GObject to be inspected. Returns : inspected list as a string. Since 1.0.5 gcut_list_enum_inspect() gcut_list_enum_inspectgcut_list_enum_inspect #define gcut_list_enum_inspect(list, type) gcut_list_enum_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_enum() instead. Inspects list. list should be GList of enum value of GEnum. The returned string should be freed when no longer needed. list : a GList of enum value to be inspected. type : a GEnum type. Returns : inspected list as a string. Since 1.0.5 gcut_list_flags_inspect() gcut_list_flags_inspectgcut_list_flags_inspect #define gcut_list_flags_inspect(list, type) gcut_list_flags_inspect has been deprecated since version 1.0.6 and should not be used in newly-written code. Use gcut_list_inspect_flags() instead. Inspects list. list should be GList of flags value of GFlags. The returned string should be freed when no longer needed. list : a GList of flags value to be inspected. type : a GFlags type. Returns : inspected list as a string. Since 1.0.5 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-object.xml0000644000175000017500000001664711400101216023105 0ustar koukou ]> Assertion Utilities for GObject 3 CUTTER Library Assertion Utilities for GObject Utilities to write assertions related to GObject more easily. Synopsis gboolean gcut_object_equal (const GObject *object1, const GObject *object2, GEqualFunc equal_func); gchar * gcut_object_inspect (const GObject *object); gchar * gcut_object_inspect_custom (const GObject *object, GCutInspectFunction inspect_func, gpointer user_data); Description To write assertions, you need to check equality and show expected and actual values. The utilities help you to write assertions that are related to GObject. Details gcut_object_equal () gcut_object_equal gboolean gcut_object_equal (const GObject *object1, const GObject *object2, GEqualFunc equal_func); Compares two GObject, object1 and object2 by equal_func. If equal_func is NULL, object1 and object2 is just only compared by memory location. object1 : a GObject to be compared. object2 : a GObject to be compared. equal_func : a function that compares two GObject. NULL is OK. Returns : TRUE if object1 == object2 or equal_func(object1, object2), FALSE otherwise. Since 1.0.5 gcut_object_inspect () gcut_object_inspect gchar * gcut_object_inspect (const GObject *object); Inspects object's property. The returned string should be freed when no longer needed. object : a GObject. Returns : inspected object as a string. Since 1.0.5 gcut_object_inspect_custom () gcut_object_inspect_custom gchar * gcut_object_inspect_custom (const GObject *object, GCutInspectFunction inspect_func, gpointer user_data); Inspects object by inspect_func. The returned string should be freed when no longer needed. object : a GObject. inspect_func : a function that inspects object. user_data : user data to pass to the function. Returns : inspected object as a string. Since 1.0.5 cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.1.3.xml0000644000175000017500000000777011442136355023232 0ustar koukou ]> C cut_assert_equal_char, macro in Assertions cut_assert_not_equal_char, macro in Assertions cut_take_convert, macro in Test Utilities D gcut_data_get_boolean, macro in Convenience test data API gcut_data_get_char, macro in Convenience test data API gcut_data_get_double, macro in Convenience test data API gcut_data_get_int64, macro in Convenience test data API gcut_data_get_size, macro in Convenience test data API gcut_data_get_uint64, macro in Convenience test data API I gcut_inspect_boolean, function in Object inspection functions gcut_inspect_char, function in Object inspection functions gcut_inspect_double, function in Object inspection functions gcut_inspect_int64, function in Object inspection functions gcut_inspect_size, function in Object inspection functions gcut_inspect_uint64, function in Object inspection functions T GCUT_TYPE_SIZE, macro in Types for GLib support cutter-testing-framework-1.1.7/doc/reference/xml/cut-assertions.xml0000644000175000017500000046307111442136354023700 0ustar koukou ]> Assertions 3 CUTTER Library Assertions Checks that your program works as you expect. Synopsis void cut_assert (cut_boolean expression, ...); void cut_assert_true (cut_boolean expression, ...); void cut_assert_false (cut_boolean expression, ...); void cut_assert_equal_boolean (cut_boolean expected, cut_boolean actual, ...); void cut_assert_not_equal_boolean (cut_boolean expected, cut_boolean actual, ...); void cut_assert_null (const void *expression, ...); void cut_assert_null_string (const char *string, ...); void cut_assert_not_null (const void *expression, ...); void cut_assert_equal_int (int expected, int actual, ...); void cut_assert_not_equal_int (int expected, int actual, ...); #define cut_assert_equal_int_least8 (expected, actual, ...) #define cut_assert_not_equal_int_least8 (expected, actual, ...) #define cut_assert_equal_int_least16 (expected, actual, ...) #define cut_assert_not_equal_int_least16 (expected, actual, ...) #define cut_assert_equal_int_least32 (expected, actual, ...) #define cut_assert_not_equal_int_least32 (expected, actual, ...) #define cut_assert_equal_int_least64 (expected, actual, ...) #define cut_assert_not_equal_int_least64 (expected, actual, ...) #define cut_assert_equal_int_fast8 (expected, actual, ...) #define cut_assert_not_equal_int_fast8 (expected, actual, ...) #define cut_assert_equal_int_fast16 (expected, actual, ...) #define cut_assert_not_equal_int_fast16 (expected, actual, ...) #define cut_assert_equal_int_fast32 (expected, actual, ...) #define cut_assert_not_equal_int_fast32 (expected, actual, ...) #define cut_assert_equal_int_fast64 (expected, actual, ...) #define cut_assert_not_equal_int_fast64 (expected, actual, ...) #define cut_assert_equal_intptr (expected, actual, ...) #define cut_assert_not_equal_intptr (expected, actual, ...) #define cut_assert_equal_intmax (expected, actual, ...) #define cut_assert_not_equal_intmax (expected, actual, ...) void cut_assert_equal_uint (unsigned int expected, unsigned int actual, ...); void cut_assert_not_equal_uint (unsigned int expected, unsigned int actual, ...); #define cut_assert_equal_uint_least8 (expected, actual, ...) #define cut_assert_not_equal_uint_least8 (expected, actual, ...) #define cut_assert_equal_uint_least16 (expected, actual, ...) #define cut_assert_not_equal_uint_least16 (expected, actual, ...) #define cut_assert_equal_uint_least32 (expected, actual, ...) #define cut_assert_not_equal_uint_least32 (expected, actual, ...) #define cut_assert_equal_uint_least64 (expected, actual, ...) #define cut_assert_not_equal_uint_least64 (expected, actual, ...) #define cut_assert_equal_uint_fast8 (expected, actual, ...) #define cut_assert_not_equal_uint_fast8 (expected, actual, ...) #define cut_assert_equal_uint_fast16 (expected, actual, ...) #define cut_assert_not_equal_uint_fast16 (expected, actual, ...) #define cut_assert_equal_uint_fast32 (expected, actual, ...) #define cut_assert_not_equal_uint_fast32 (expected, actual, ...) #define cut_assert_equal_uint_fast64 (expected, actual, ...) #define cut_assert_not_equal_uint_fast64 (expected, actual, ...) #define cut_assert_equal_uintptr (expected, actual, ...) #define cut_assert_not_equal_uintptr (expected, actual, ...) #define cut_assert_equal_uintmax (expected, actual, ...) #define cut_assert_not_equal_uintmax (expected, actual, ...) void cut_assert_equal_size (size_t expected, size_t actual, ...); void cut_assert_not_equal_size (size_t expected, size_t actual, ...); void cut_assert_equal_double (double expected, double error, double actual, ...); void cut_assert_not_equal_double (double expected, double error, double actual, ...); #define cut_assert_equal_char (expected, actual, ...) #define cut_assert_not_equal_char (expected, actual, ...) void cut_assert_equal_string (const char *expected, const char *actual, ...); void cut_assert_not_equal_string (const char *expected, const char *actual, ...); void cut_assert_equal_string_with_free (const char *expected, const char *actual, ...); void cut_assert_equal_string_or_null (const char *expected, const char *actual, ...); void cut_assert_equal_substring (const char *expected, const char *actual, size_t length, ...); void cut_assert_not_equal_substring (const char *expected, const char *actual, size_t length, ...); void cut_assert_equal_memory (const void *expected, size_t expected_size, const void *actual, size_t actual_size, ...); void cut_assert_not_equal_memory (const void *expected, size_t expected_size, const void *actual, size_t actual_size, ...); void cut_assert_equal_string_array (char **expected, char **actual, ...); void cut_assert_equal_string_array_with_free (char **expected, char **actual, ...); #define cut_assert_operator (lhs, operator, rhs, ...) #define cut_assert_operator_int (lhs, operator, rhs, ...) #define cut_assert_operator_uint (lhs, operator, rhs, ...) #define cut_assert_operator_size (lhs, operator, rhs, ...) #define cut_assert_operator_double (lhs, operator, rhs, ...) #define cut_assert_equal (function, expected, actual, ...) void cut_assert_errno (...); void cut_assert_file_exist (const char *path, ...); void cut_assert_path_exist (const char *path, ...); void cut_assert_exist_path (const char *path, ...); void cut_assert_path_not_exist (const char *path, ...); void cut_assert_not_exist_path (const char *path, ...); void cut_assert_match (const char *pattern, const char *actual, ...); void cut_assert_match_with_free (const char *pattern, const char *actual, ...); void cut_assert_equal_pointer (const void *expected, const void *actual, ...); void cut_assert_equal_fixture_data_string (const char *expected, const void *path, ...); #define cut_assert_equal_sockaddr (expected, actual, ...) #define cut_assert_equal_file_raw (expected, actual, ...) #define cut_assert_not_equal_file_raw (expected, actual, ...) void cut_error (const char *format, ...); void cut_error_errno (...); void cut_fail (const char *format, ...); void cut_pend (const char *format, ...); void cut_pending (const char *format, ...); void cut_notify (const char *format, ...); void cut_omit (const char *format, ...); void cut_return (void); Description To check that your program works as you expect, you use cut_assert_XXX() where you want to check expected value is got. e.g.: cut_assert_equal_int(3, 1 + 2); Details cut_assert () cut_assert void cut_assert (cut_boolean expression, ...); Passes if expression is not 0 or NULL. e.g.: char *string; string = malloc(16); cut_assert(string); MyObject *object; object = my_object_new(); cut_assert(object, cut_message("my_object_new() should not be failed")); expression : the expression to be checked. ... : optional message. See cut_message() for details. cut_assert_true () cut_assert_true void cut_assert_true (cut_boolean expression, ...); Passes if expression is CUT_TRUE value (not 0 or NULL). expression : the expression to be checked. ... : optional message. See cut_message() for details. Since 0.9 cut_assert_false () cut_assert_false void cut_assert_false (cut_boolean expression, ...); Passes if expression is 0 or NULL. expression : the expression to be checked. ... : optional message. See cut_message() for details. Since 0.9 cut_assert_equal_boolean () cut_assert_equal_boolean void cut_assert_equal_boolean (cut_boolean expected, cut_boolean actual, ...); Passes if both of expected and actual are CUT_TRUE value or both of expected and actual are CUT_FALSE value. e.g.: cut_assert_equal_boolean(CUT_TRUE, CUT_TRUE); -> Pass cut_assert_equal_boolean(CUT_FALSE, CUT_FALSE); -> Pass cut_assert_equal_boolean(CUT_TRUE, CUT_FALSE); -> Fail expected : the expected boolean. actual : the actual boolean. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_not_equal_boolean () cut_assert_not_equal_boolean void cut_assert_not_equal_boolean (cut_boolean expected, cut_boolean actual, ...); Passes if expected is CUT_TRUE value but actual is CUT_FALSE value or expected is CUT_FALSE value but actual is CUT_TRUE value. e.g.: cut_assert_not_equal_boolean(CUT_TRUE, CUT_TRUE); -> Fail cut_assert_not_equal_boolean(CUT_FALSE, CUT_FALSE); -> Fail cut_assert_not_equal_boolean(CUT_TRUE, CUT_FALSE); -> Pass expected : the expected boolean. actual : the actual boolean. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_null () cut_assert_null void cut_assert_null (const void *expression, ...); Passes if expression is NULL. expression : the expression to be checked. ... : optional message. See cut_message() for details. cut_assert_null_string () cut_assert_null_string void cut_assert_null_string (const char *string, ...); Passes if string is NULL. string : the string to be checked. ... : optional message. See cut_message() for details. Since 0.3 cut_assert_not_null () cut_assert_not_null void cut_assert_not_null (const void *expression, ...); Passes if expression is not NULL. expression : the expression to be checked. ... : optional message. See cut_message() for details. cut_assert_equal_int () cut_assert_equal_int void cut_assert_equal_int (int expected, int actual, ...); Passes if expected == actual. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. cut_assert_not_equal_int () cut_assert_not_equal_int void cut_assert_not_equal_int (int expected, int actual, ...); Passes if expected != actual. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_equal_int_least8() cut_assert_equal_int_least8 #define cut_assert_equal_int_least8(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_int_least8() cut_assert_not_equal_int_least8 #define cut_assert_not_equal_int_least8(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_int_least16() cut_assert_equal_int_least16 #define cut_assert_equal_int_least16(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_int_least16() cut_assert_not_equal_int_least16 #define cut_assert_not_equal_int_least16(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_int_least32() cut_assert_equal_int_least32 #define cut_assert_equal_int_least32(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_int_least32() cut_assert_not_equal_int_least32 #define cut_assert_not_equal_int_least32(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_int_least64() cut_assert_equal_int_least64 #define cut_assert_equal_int_least64(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_int_least64() cut_assert_not_equal_int_least64 #define cut_assert_not_equal_int_least64(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_int_fast8() cut_assert_equal_int_fast8 #define cut_assert_equal_int_fast8(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_int_fast8() cut_assert_not_equal_int_fast8 #define cut_assert_not_equal_int_fast8(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_int_fast16() cut_assert_equal_int_fast16 #define cut_assert_equal_int_fast16(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_int_fast16() cut_assert_not_equal_int_fast16 #define cut_assert_not_equal_int_fast16(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_int_fast32() cut_assert_equal_int_fast32 #define cut_assert_equal_int_fast32(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_int_fast32() cut_assert_not_equal_int_fast32 #define cut_assert_not_equal_int_fast32(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_int_fast64() cut_assert_equal_int_fast64 #define cut_assert_equal_int_fast64(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_int_fast64() cut_assert_not_equal_int_fast64 #define cut_assert_not_equal_int_fast64(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_intptr() cut_assert_equal_intptr #define cut_assert_equal_intptr(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_intptr() cut_assert_not_equal_intptr #define cut_assert_not_equal_intptr(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_intmax() cut_assert_equal_intmax #define cut_assert_equal_intmax(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_intmax() cut_assert_not_equal_intmax #define cut_assert_not_equal_intmax(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected integer value. actual : an actual integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uint () cut_assert_equal_uint void cut_assert_equal_uint (unsigned int expected, unsigned int actual, ...); Passes if expected == actual. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. cut_assert_not_equal_uint () cut_assert_not_equal_uint void cut_assert_not_equal_uint (unsigned int expected, unsigned int actual, ...); Passes if expected != actual. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_equal_uint_least8() cut_assert_equal_uint_least8 #define cut_assert_equal_uint_least8(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uint_least8() cut_assert_not_equal_uint_least8 #define cut_assert_not_equal_uint_least8(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uint_least16() cut_assert_equal_uint_least16 #define cut_assert_equal_uint_least16(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uint_least16() cut_assert_not_equal_uint_least16 #define cut_assert_not_equal_uint_least16(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uint_least32() cut_assert_equal_uint_least32 #define cut_assert_equal_uint_least32(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uint_least32() cut_assert_not_equal_uint_least32 #define cut_assert_not_equal_uint_least32(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uint_least64() cut_assert_equal_uint_least64 #define cut_assert_equal_uint_least64(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uint_least64() cut_assert_not_equal_uint_least64 #define cut_assert_not_equal_uint_least64(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uint_fast8() cut_assert_equal_uint_fast8 #define cut_assert_equal_uint_fast8(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uint_fast8() cut_assert_not_equal_uint_fast8 #define cut_assert_not_equal_uint_fast8(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uint_fast16() cut_assert_equal_uint_fast16 #define cut_assert_equal_uint_fast16(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uint_fast16() cut_assert_not_equal_uint_fast16 #define cut_assert_not_equal_uint_fast16(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uint_fast32() cut_assert_equal_uint_fast32 #define cut_assert_equal_uint_fast32(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uint_fast32() cut_assert_not_equal_uint_fast32 #define cut_assert_not_equal_uint_fast32(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uint_fast64() cut_assert_equal_uint_fast64 #define cut_assert_equal_uint_fast64(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uint_fast64() cut_assert_not_equal_uint_fast64 #define cut_assert_not_equal_uint_fast64(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uintptr() cut_assert_equal_uintptr #define cut_assert_equal_uintptr(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uintptr() cut_assert_not_equal_uintptr #define cut_assert_not_equal_uintptr(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_uintmax() cut_assert_equal_uintmax #define cut_assert_equal_uintmax(expected, actual, ...) Passes if expected == actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_not_equal_uintmax() cut_assert_not_equal_uintmax #define cut_assert_not_equal_uintmax(expected, actual, ...) Passes if expected != actual. This function is available only when CUT_SUPPORT_C99_STDINT_TYPES is defined. expected : an expected unsigned integer value. actual : an actual unsigned integer value. ... : optional message. See cut_message() for details. Since 1.1.0 cut_assert_equal_size () cut_assert_equal_size void cut_assert_equal_size (size_t expected, size_t actual, ...); Passes if expected == actual. expected : an expected size_t value. actual : an actual size_t value. ... : optional message. See cut_message() for details. Since 1.0.6 cut_assert_not_equal_size () cut_assert_not_equal_size void cut_assert_not_equal_size (size_t expected, size_t actual, ...); Passes if expected != actual. expected : an expected size_t value. actual : an actual size_t value. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_equal_double () cut_assert_equal_double void cut_assert_equal_double (double expected, double error, double actual, ...); Passes if (expected - error) <= actual <= (expected + error). expected : an expected float value. error : a float value that specifies error range. actual : an actual float value. ... : optional message. See cut_message() for details. cut_assert_not_equal_double () cut_assert_not_equal_double void cut_assert_not_equal_double (double expected, double error, double actual, ...); Passes if actual < (expected - error) && (expected + error) < actual. expected : an expected float value. error : a float value that specifies error range. actual : an actual float value. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_equal_char() cut_assert_equal_char #define cut_assert_equal_char(expected, actual, ...) Passes if expected == actual. e.g.: cut_assert_equal_char('a', 'a'); -> Pass cut_assert_equal_char('a', 'b'); -> Fail expected : an expected char value. actual : an actual char value. ... : optional message. See cut_message() for details. Since 1.1.3 cut_assert_not_equal_char() cut_assert_not_equal_char #define cut_assert_not_equal_char(expected, actual, ...) Passes if expected != actual. e.g.: cut_assert_not_equal_char('a', 'b'); -> Pass cut_assert_not_equal_char('a', 'a'); -> Fail expected : an expected char value. actual : an actual char value. ... : optional message. See cut_message() for details. Since 1.1.3 cut_assert_equal_string () cut_assert_equal_string void cut_assert_equal_string (const char *expected, const char *actual, ...); Passes if both expected and actual are NULL or strcmp(expected, actual) == 0. e.g.: cut_assert_equal_string("abc", "abc"); -> Pass cut_assert_equal_string(NULL, NULL); -> Pass cut_assert_equal_string("abc", "ABC"); -> Fail cut_assert_equal_string("abc", NULL); -> Fail cut_assert_equal_string(NULL, "abc"); -> Fail expected : an expected string value. actual : an actual string value. ... : optional message. See cut_message() for details. cut_assert_not_equal_string () cut_assert_not_equal_string void cut_assert_not_equal_string (const char *expected, const char *actual, ...); Passes if one of expected and actual is NULL or strcmp(expected, actual) != 0. e.g.: cut_assert_not_equal_string("abc", NULL); -> Pass cut_assert_not_equal_string(NULL, "abc"); -> Pass cut_assert_not_equal_string("abc", "ABC"); -> Pass cut_assert_not_equal_string("abc", "abc"); -> Fail cut_assert_not_equal_string(NULL, NULL); -> Fail expected : an expected string value. actual : an actual string value. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_equal_string_with_free () cut_assert_equal_string_with_free void cut_assert_equal_string_with_free (const char *expected, const char *actual, ...); Passes if both expected and actual are NULL or strcmp(expected, actual) == 0. See also cut_assert_equal_string() for examples. expected : an expected string value. actual : an actual string value that is freed. ... : optional message. See cut_message() for details. Since 0.3 cut_assert_equal_string_or_null () cut_assert_equal_string_or_null void cut_assert_equal_string_or_null (const char *expected, const char *actual, ...); cut_assert_equal_string_or_null has been deprecated since version 0.3 and should not be used in newly-written code. Use cut_assert_equal_string() instead. expected : an expected string value. actual : an actual string value. ... : optional message. See cut_message() for details. cut_assert_equal_substring () cut_assert_equal_substring void cut_assert_equal_substring (const char *expected, const char *actual, size_t length, ...); Passes if (1) both expected and actual are NULL and length == 1 or (2) strncmp(expected, actual, length) == 0. e.g.: cut_assert_equal_substring("abcdef", "abcDEF", 3); -> Pass cut_assert_equal_substring(NULL, NULL, 0); -> Pass cut_assert_equal_substring(NULL, NULL, 3); -> Fail cut_assert_equal_substring("abc", "ABC", 3); -> Fail cut_assert_equal_substring("abc", NULL, 3); -> Fail cut_assert_equal_substring(NULL, "abc", 3); -> Fail expected : an expected string value. actual : an actual string value. length : compared string length. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_not_equal_substring () cut_assert_not_equal_substring void cut_assert_not_equal_substring (const char *expected, const char *actual, size_t length, ...); Passes if (1) one of expected and actual is NULL or (2) strncmp(expected, actual, length) != 0. e.g.: cut_assert_not_equal_substring("abc", "ABC", 3); -> Pass cut_assert_not_equal_substring("abc", NULL, 3); -> Pass cut_assert_not_equal_substring(NULL, "abc", 3); -> Pass cut_assert_not_equal_substring("abcdef", "abcDEF", 3); -> Fail cut_assert_not_equal_substring(NULL, NULL, 0); -> Fail cut_assert_not_equal_substring(NULL, NULL, 3); -> Fail expected : an expected string value. actual : an actual string value. length : compared string length. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_equal_memory () cut_assert_equal_memory void cut_assert_equal_memory (const void *expected, size_t expected_size, const void *actual, size_t actual_size, ...); Passes if expected_size == actual_size and memcmp(expected, actual, expected_size) == 0. expected : an expected data. expected_size : a size of expected. actual : an actual data. actual_size : a size of actual. ... : optional message. See cut_message() for details. cut_assert_not_equal_memory () cut_assert_not_equal_memory void cut_assert_not_equal_memory (const void *expected, size_t expected_size, const void *actual, size_t actual_size, ...); Passes if expected_size != actual_size or memcmp(expected, actual, expected_size) != 0. expected : an expected data. expected_size : a size of expected. actual : an actual data. actual_size : a size of actual. ... : optional message. See cut_message() for details. Since 1.0.7 cut_assert_equal_string_array () cut_assert_equal_string_array void cut_assert_equal_string_array (char **expected, char **actual, ...); Passes if both expected and actual are not NULL and have same content (strcmp() == 0) strings. expected : an expected NULL-terminated array of strings. actual : an actual NULL-terminated array of strings. ... : optional message. See cut_message() for details. cut_assert_equal_string_array_with_free () cut_assert_equal_string_array_with_free void cut_assert_equal_string_array_with_free (char **expected, char **actual, ...); Passes if both expected and actual are not NULL and have same content (strcmp() == 0) strings. expected : an expected NULL-terminated array of strings. actual : an actual NULL-terminated array of strings that are freed. ... : optional message. See cut_message() for details. Since 0.9 cut_assert_operator() cut_assert_operator #define cut_assert_operator(lhs, operator, rhs, ...) Passes if (lhs operator rhs) is TRUE. e.g.: cut_assert_operator(1, <, 2) -> (1 < 2); lhs : a left hand side value. operator : a binary operator. rhs : a right hand side value. ... : optional message. See cut_message() for details. cut_assert_operator_int() cut_assert_operator_int #define cut_assert_operator_int(lhs, operator, rhs, ...) Passes if (lhs operator rhs) is TRUE. e.g.: cut_assert_operator_int(1, <, 2) -> (1 < 2); lhs : a left hand side integer value. operator : a binary operator. rhs : a right hand side integer value. ... : optional message. See cut_message() for details. cut_assert_operator_uint() cut_assert_operator_uint #define cut_assert_operator_uint(lhs, operator, rhs, ...) Passes if (lhs operator rhs) is TRUE. e.g.: cut_assert_operator_uint(1, <, 2) -> (1 < 2); lhs : a left hand side unsigned integer value. operator : a binary operator. rhs : a right hand side unsigned integer value. ... : optional message. See cut_message() for details. Since 1.0.5 cut_assert_operator_size() cut_assert_operator_size #define cut_assert_operator_size(lhs, operator, rhs, ...) Passes if (lhs operator rhs) is TRUE. e.g.: cut_assert_operator_size(1, <, 2) -> (1 < 2); lhs : a left hand side size_t value. operator : a binary operator. rhs : a right hand side size_t value. ... : optional message. See cut_message() for details. Since 1.0.5 cut_assert_operator_double() cut_assert_operator_double #define cut_assert_operator_double(lhs, operator, rhs, ...) Passes if (lhs operator rhs) is TRUE. e.g.: cut_assert_operator_double(1.1, <, 2.2) -> (1.1 < 2.2); lhs : a left hand side double value. operator : a binary operator. rhs : a right hand side double value. ... : optional message. See cut_message() for details. Since 1.0.5 cut_assert_equal() cut_assert_equal #define cut_assert_equal(function, expected, actual, ...) Passes if function(expected, actual) returns CUT_TRUE. e.g.: cut_assert_equal(!strcmp, "abc", "abc"); -> Pass function : a function that compares actual with expected. expected : an expected value. actual : an actual value. ... : optional message. See cut_message() for details. cut_assert_errno () cut_assert_errno void cut_assert_errno (...); Passes if errno is 0. e.g.: count = write(stdout, buffer, strlen(buffer)); cut_assert_errno("Failed to write"); -> Pass when count != -1 ... : optional message. See cut_message() for details. Since 0.8 cut_assert_file_exist () cut_assert_file_existcut_assert_file_exist void cut_assert_file_exist (const char *path, ...); cut_assert_file_exist has been deprecated since version 1.0.2 and should not be used in newly-written code. Use cut_assert_path_exist() instead. Passes if path exists. It may or may not be a regular file. e.g.: cut_assert_file_exist("/tmp"); -> Pass on many environment cut_assert_file_exist("/non-existent"); -> Fail path : the path to test. ... : optional message. See cut_message() for details. Since 0.9 cut_assert_path_exist () cut_assert_path_existcut_assert_path_exist void cut_assert_path_exist (const char *path, ...); cut_assert_path_exist has been deprecated since version 1.1.5 and should not be used in newly-written code. Use cut_assert_exist_path() instead. Passes if path exists. It may or may not be a regular file. e.g.: cut_assert_path_exist("/tmp"); -> Pass on many environment cut_assert_path_exist("/non-existent"); -> Fail path : the path to test. ... : optional message. See cut_message() for details. Since 1.0.2 cut_assert_exist_path () cut_assert_exist_path void cut_assert_exist_path (const char *path, ...); Passes if path exists. It may or may not be a regular file. e.g.: cut_assert_exist_path("/tmp"); -> Pass on many environment cut_assert_exist_path("/non-existent"); -> Fail path : the path to test. ... : optional message. See cut_message() for details. Since 1.1.5 cut_assert_path_not_exist () cut_assert_path_not_existcut_assert_path_not_exist void cut_assert_path_not_exist (const char *path, ...); cut_assert_path_not_exist has been deprecated since version 1.1.5 and should not be used in newly-written code. Use cut_assert_not_exist_path() instead. Passes if path doesn't exist. e.g.: cut_assert_path_not_exist("/non-existent"); -> Pass on many environment cut_assert_path_not_exist("/tmp"); -> Fail path : the path to test. ... : optional message. See cut_message() for details. Since 1.0.2 cut_assert_not_exist_path () cut_assert_not_exist_path void cut_assert_not_exist_path (const char *path, ...); Passes if path doesn't exist. e.g.: cut_assert_not_exist_path("/non-existent"); -> Pass on many environment cut_assert_not_exist_path("/tmp"); -> Fail path : the path to test. ... : optional message. See cut_message() for details. Since 1.1.5 cut_assert_match () cut_assert_match void cut_assert_match (const char *pattern, const char *actual, ...); Passes if pattern matches string. e.g.: cut_assert_match("^abc", "abc"); -> Pass cut_assert_match("^abc", " abc"); -> Fail pattern : the regular expression pattern. actual : the string to be matched. ... : optional message. See cut_message() for details. Since 1.0 cut_assert_match_with_free () cut_assert_match_with_free void cut_assert_match_with_free (const char *pattern, const char *actual, ...); Passes if pattern matches string. See cut_assert_match() for detail. pattern : the regular expression as string. actual : the string to be matched that is freed. ... : optional message. See cut_message() for details. Since 1.0 cut_assert_equal_pointer () cut_assert_equal_pointer void cut_assert_equal_pointer (const void *expected, const void *actual, ...); Passes if expected == actual. expected : an expected pointer. actual : an actual pointer. ... : optional message. See cut_message() for details. Since 1.0 cut_assert_equal_fixture_data_string () cut_assert_equal_fixture_data_string void cut_assert_equal_fixture_data_string (const char *expected, const void *path, ...); Passes if expected == cut_get_fixture_data_string(path, ...). expected : an expected string. path : a first element of the path to the fixture data. ... : remaining elements in path. NULL terminated. Since 1.0.2 cut_assert_equal_sockaddr() cut_assert_equal_sockaddr #define cut_assert_equal_sockaddr(expected, actual, ...) Passes if expected == actual. This assertion can be disabled by defining CUT_DISABLE_SOCKET_SUPPORT. expected : an expected socket address. actual : an actual socket address. ... : optional message. See cut_message() for details. Since 1.1.1 cut_assert_equal_file_raw() cut_assert_equal_file_raw #define cut_assert_equal_file_raw(expected, actual, ...) Passes if the content of expected == the content of actual. expected : a path. actual : a path. ... : optional message. See cut_message() for details. Since 1.1.4 cut_assert_not_equal_file_raw() cut_assert_not_equal_file_raw #define cut_assert_not_equal_file_raw(expected, actual, ...) Passes if the content of expected != the content of actual. expected : a path. actual : a path. ... : optional message. See cut_message() for details. Since 1.1.4 cut_error () cut_error void cut_error (const char *format, ...); Raises an error with message. format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. cut_error_errno () cut_error_errno void cut_error_errno (...); e.g.: void setup (void) { mkdir("tmp", 0700); cut_error_errno("Failed to make tmp directory"); -> Error when tmp directory isn't made successfully. } ... : optional message. See cut_message() for details. Since 1.0.2 cut_fail () cut_fail void cut_fail (const char *format, ...); Raises a failure with message. format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. cut_pend () cut_pend void cut_pend (const char *format, ...); Marks the test is pending with message. The test is stopped. format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. cut_pending () cut_pending void cut_pending (const char *format, ...); cut_pending has been deprecated since version 0.4 and should not be used in newly-written code. Use cut_pend() instead. Marks the test is pending with message. The test is stopped. format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. cut_notify () cut_notify void cut_notify (const char *format, ...); Leaves a notification message. The test is continued. format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. cut_omit () cut_omit void cut_omit (const char *format, ...); Omit the test. e.g.: if (version < 2.0) cut_omit("Require >= 2.0"); format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. Since 0.8 cut_return () cut_return void cut_return (void); Finish the test. e.g.: static void sub_xxx (void) { some_assertions(); if (no_need_more_test) cut_return(); some_assertions(); } void test_xxx (void) { some_assertions(); cut_trace(sub_xxx()); some_assertions(); } Since 1.0.6 cutter-testing-framework-1.1.7/doc/reference/xml/gcut-hash-table.xml0000644000175000017500000003751611400101216023645 0ustar koukou ]> Assertion Utilities for GHashTable 3 CUTTER Library Assertion Utilities for GHashTable Utilities to write assertions related to GHashTable more easily. Synopsis gboolean gcut_hash_table_equal (GHashTable *hash1, GHashTable *hash2, GEqualFunc equal_func); gchar * gcut_hash_table_inspect (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, gpointer user_data); gchar * gcut_hash_table_inspect_sorted (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, GCompareFunc key_compare_func, gpointer user_data); gboolean gcut_hash_table_string_equal (GHashTable *hash1, GHashTable *hash2); gchar * gcut_hash_table_string_string_inspect (GHashTable *hash); GHashTable * gcut_hash_table_string_string_copy (GHashTable *hash); Description To write assertions, you need to check equality and show expected and actual values. The utilities help you to write assertions that are related to GHashTable. Details gcut_hash_table_equal () gcut_hash_table_equal gboolean gcut_hash_table_equal (GHashTable *hash1, GHashTable *hash2, GEqualFunc equal_func); Compares two GHashTable, hash1 and hash2. equal_func is called for each values of the same key of hash1 and hash2. e.g.: TODO hash1 : a GHashTable to be compared. hash2 : a GHashTable to be compared. equal_func : a function that compares two values. Returns : TRUE if all same key's values of hash1 and hash2 are reported TRUE by equal_func, FALSE otherwise. Since 1.0.5 gcut_hash_table_inspect () gcut_hash_table_inspect gchar * gcut_hash_table_inspect (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, gpointer user_data); Inspects hash. Each key of hash is inspected by key_inspect_func and each value of hash is inspected by value_inspect_func. The returned string should be freed when no longer needed. e.g.: TODO hash : a GHashTable to be inspected. key_inspect_func : a function that inspects each key. value_inspect_func : a function that inspects each value. user_data : user data to pass to the function. Returns : inspected hash as a string. Since 1.0.5 gcut_hash_table_inspect_sorted () gcut_hash_table_inspect_sorted gchar * gcut_hash_table_inspect_sorted (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, GCompareFunc key_compare_func, gpointer user_data); Sorts hash as key by key_compare_func and inspects it. Each key of hash is inspected by key_inspect_func and each value of hash is inspected by value_inspect_func. The returned string should be freed when no longer needed. If key_compare_func is NULL, hash isn't sorted. It is the same behavior as gcut_hash_table_inspect(). e.g.: TODO hash : a GHashTable to be inspected and sorted. key_inspect_func : a function that inspects each key. value_inspect_func : a function that inspects each value. key_compare_func : a function that compares each key. user_data : user data to pass to the function. Returns : inspected and sorted hash as a string. Since 1.0.9 gcut_hash_table_string_equal () gcut_hash_table_string_equal gboolean gcut_hash_table_string_equal (GHashTable *hash1, GHashTable *hash2); Compares two GHashTable, hash1 and hash2. hash1 and hash2 should have string key and string value. hash1 : a GHashTable to be compared. hash2 : a GHashTable to be compared. Returns : TRUE if all same key's values of hash1 and hash2 are same string content, FALSE otherwise. Since 1.0.5 gcut_hash_table_string_string_inspect () gcut_hash_table_string_string_inspect gchar * gcut_hash_table_string_string_inspect (GHashTable *hash); Inspects hash. hash should have string key and string value. The returned string should be freed when no longer needed. hash : a GHashTable to be inspected. Returns : inspected hash as a string. Since 1.0.5 gcut_hash_table_string_string_copy () gcut_hash_table_string_string_copy GHashTable * gcut_hash_table_string_string_copy (GHashTable *hash); Copy hash. hash should have string key and string value. The returned hash should be freed by g_hash_table_unref(). hash : a GHashTable to be copied. Returns : copied GHashTable. It should be freed when no longer needed. Since 1.0.8 cutter-testing-framework-1.1.7/doc/reference/xml/cut-version.xml0000644000175000017500000001005311525647703023166 0ustar koukou ]> Version Information 3 CUTTER Library Version Information Variables and macros to check the Cutter version Synopsis #define CUTTER_VERSION_MAJOR #define CUTTER_VERSION_MINOR #define CUTTER_VERSION_MICRO #define CUTTER_VERSION_STRING #define CUTTER_CHECK_VERSION (major, minor, micro) Description Cutter provides version information, primarily useful in configure checks for builds that have a configure script. Tests will not typically use the features described here. Details CUTTER_VERSION_MAJOR CUTTER_VERSION_MAJOR #define CUTTER_VERSION_MAJOR 1 The major version number of the Cutter. CUTTER_VERSION_MINOR CUTTER_VERSION_MINOR #define CUTTER_VERSION_MINOR 1 The minor version number of the Cutter. CUTTER_VERSION_MICRO CUTTER_VERSION_MICRO #define CUTTER_VERSION_MICRO 7 The micro version number of the Cutter. CUTTER_VERSION_STRING CUTTER_VERSION_STRING #define CUTTER_VERSION_STRING "1.1.7" The version number string of the Cutter with "#{MAJOR}.#{MINOR}.#{MICRO}" format. CUTTER_CHECK_VERSION() CUTTER_CHECK_VERSION #define CUTTER_CHECK_VERSION(major, minor, micro) Checks the version of the Cutter. Returns true if the version of the Cutter header files is the same as or newer than the passed-in version. major : the major version number. minor : the minor version number. micro : the micro version number. Since 1.0.7 cutter-testing-framework-1.1.7/doc/reference/xml/cppcut-assertions.xml0000644000175000017500000000531411424022630024362 0ustar koukou ]> Assertions with C++ support 3 CUTTER Library Assertions with C++ support Checks that your program works as you expect with C++ support. Synopsis #define cppcut_assert_equal (expected, actual, ...) Description Details cppcut_assert_equal() cppcut_assert_equal #define cppcut_assert_equal(expected, actual, ...) This assertion is a generic method based on template. You can pass any object's reference as expected and actual. Passes if expected == actual. e.g.: cppcut_assert_equal(3, 1 + 2); cppcut_assert_equal(3, 1 + 2, cppcut_message("easy expression")); cppcut_assert_equal(3, 1 + 2, cppcut_message() << "easy expression")); expected : an expected value. actual : an actual value. ... : an optional message. Use cppcut_message() for this. Since 1.0.9 cutter-testing-framework-1.1.7/doc/reference/xml/api-index-0.8.xml0000644000175000017500000000374611442136355023076 0ustar koukou ]> C cut_assert_equal_g_list_int, function in Assertions with GLib support cut_assert_equal_g_list_string, function in Assertions with GLib support cut_assert_errno, function in Assertions cut_fork, macro in Experimental cut_fork_get_stderr_message, macro in Experimental cut_fork_get_stdout_message, macro in Experimental cut_omit, function in Assertions cut_wait_process, macro in Experimental cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.9.xml0000644000175000017500000000360211442136355023225 0ustar koukou ]> C CPPCUTTER_ENABLED, macro in CppCutter cppcut_assert_equal, macro in Assertions with C++ support CPPCUT_BEGIN_TEST_DECLS, macro in CppCutter CPPCUT_END_TEST_DECLS, macro in CppCutter cut_set_actual, macro in Assertion writing helper cut_set_expected, macro in Assertion writing helper H gcut_hash_table_inspect_sorted, function in Assertion Utilities for GHashTable cutter-testing-framework-1.1.7/doc/reference/xml/gdkcut-pixbuf.xml0000644000175000017500000002101311400101216023432 0ustar koukou ]> gdkcut-pixbuf 3 CUTTER Library gdkcut-pixbuf Synopsis gboolean gdkcut_pixbuf_equal_property (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2); gboolean gdkcut_pixbuf_equal_content (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); GdkPixbuf * gdkcut_pixbuf_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); gchar * gdkcut_pixbuf_save_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold, const gchar *prefix, GError **error); Description Details gdkcut_pixbuf_equal_property () gdkcut_pixbuf_equal_property gboolean gdkcut_pixbuf_equal_property (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2); pixbuf1 : pixbuf2 : Returns : gdkcut_pixbuf_equal_content () gdkcut_pixbuf_equal_content gboolean gdkcut_pixbuf_equal_content (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); pixbuf1 : pixbuf2 : threshold : Returns : gdkcut_pixbuf_diff () gdkcut_pixbuf_diff GdkPixbuf * gdkcut_pixbuf_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold); pixbuf1 : pixbuf2 : threshold : Returns : gdkcut_pixbuf_save_diff () gdkcut_pixbuf_save_diff gchar * gdkcut_pixbuf_save_diff (const GdkPixbuf *pixbuf1, const GdkPixbuf *pixbuf2, guint threshold, const gchar *prefix, GError **error); pixbuf1 : pixbuf2 : threshold : prefix : error : Returns : cutter-testing-framework-1.1.7/doc/reference/xml/cut-types.xml0000644000175000017500000000761311400101216022625 0ustar koukou ]> Types 3 CUTTER Library Types Types that is used in test. Synopsis void (*CutDestroyFunction) (void *data); void (*CutCallbackFunction) (void); typedef cut_boolean; #define CUT_TRUE #define CUT_FALSE Description There are some types to be used in test. Details CutDestroyFunction () CutDestroyFunction void (*CutDestroyFunction) (void *data); Specifies the type of function which is called when a data element is destroyed. It is passed the pointer to the data element and should free any memory and resources allocated for it. data : the data element to be destroyed. CutCallbackFunction () CutCallbackFunction void (*CutCallbackFunction) (void); cut_boolean cut_boolean typedef int cut_boolean; A standard boolean type. Variables of this type should only contain the value CUT_TRUE or CUT_FALSE. CUT_TRUE CUT_TRUE #define CUT_TRUE Defines the CUT_TRUE value for the cut_boolean type. CUT_FALSE CUT_FALSE #define CUT_FALSE Defines the CUT_FALSE value for the cut_boolean type. cutter-testing-framework-1.1.7/doc/reference/xml/gcut-data-helper.xml0000644000175000017500000007117611424024726024043 0ustar koukou ]> gcut-data-helper 3 CUTTER Library gcut-data-helper Synopsis gchar gcut_data_get_char_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); const gchar * gcut_data_get_string_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gint gcut_data_get_int_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); guint gcut_data_get_uint_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gint64 gcut_data_get_int64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); guint64 gcut_data_get_uint64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gsize gcut_data_get_size_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); GType gcut_data_get_type_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); guint gcut_data_get_flags_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gint gcut_data_get_enum_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gconstpointer gcut_data_get_pointer_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gconstpointer gcut_data_get_boxed_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gpointer gcut_data_get_object_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gboolean gcut_data_get_boolean_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gdouble gcut_data_get_double_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); Description Details gcut_data_get_char_helper () gcut_data_get_char_helper gchar gcut_data_get_char_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_string_helper () gcut_data_get_string_helper const gchar * gcut_data_get_string_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_int_helper () gcut_data_get_int_helper gint gcut_data_get_int_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_uint_helper () gcut_data_get_uint_helper guint gcut_data_get_uint_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_int64_helper () gcut_data_get_int64_helper gint64 gcut_data_get_int64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_uint64_helper () gcut_data_get_uint64_helper guint64 gcut_data_get_uint64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_size_helper () gcut_data_get_size_helper gsize gcut_data_get_size_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_type_helper () gcut_data_get_type_helper GType gcut_data_get_type_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_flags_helper () gcut_data_get_flags_helper guint gcut_data_get_flags_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_enum_helper () gcut_data_get_enum_helper gint gcut_data_get_enum_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_pointer_helper () gcut_data_get_pointer_helper gconstpointer gcut_data_get_pointer_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_boxed_helper () gcut_data_get_boxed_helper gconstpointer gcut_data_get_boxed_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_object_helper () gcut_data_get_object_helper gpointer gcut_data_get_object_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_boolean_helper () gcut_data_get_boolean_helper gboolean gcut_data_get_boolean_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : gcut_data_get_double_helper () gcut_data_get_double_helper gdouble gcut_data_get_double_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); data : field_name : callback : Returns : cutter-testing-framework-1.1.7/doc/reference/xml/cppcut-macros.xml0000644000175000017500000000235211400101216023443 0ustar koukou ]> cppcut-macros 3 CUTTER Library cppcut-macros Synopsis #define CPPCUT_DECL Description Details CPPCUT_DECL CPPCUT_DECL #define CPPCUT_DECL cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.5.xml0000644000175000017500000003440011442136355023221 0ustar koukou ]> A gcut_assert_equal_enum, function in Assertions with GLib support gcut_assert_equal_error, function in Assertions with GLib support gcut_assert_equal_flags, function in Assertions with GLib support gcut_assert_equal_int64, function in Assertions with GLib support gcut_assert_equal_list_enum, function in Assertions with GLib support gcut_assert_equal_list_flags, function in Assertions with GLib support gcut_assert_equal_list_object, function in Assertions with GLib support gcut_assert_equal_list_object_custom, function in Assertions with GLib support gcut_assert_equal_object, function in Assertions with GLib support gcut_assert_equal_object_custom, function in Assertions with GLib support gcut_assert_equal_uint64, function in Assertions with GLib support C cut_assert_operator_double, macro in Assertions cut_assert_operator_size, macro in Assertions cut_assert_operator_uint, macro in Assertions cut_equal_double, function in Assertion writing helper cut_equal_string, function in Assertion writing helper cut_sub_process_get_max_threads, function in Multi Process cut_sub_process_set_max_threads, function in Multi Process cut_take, function in Test Utilities cut_take_memdup, function in Test Utilities cut_take_memory, function in Test Utilities cut_take_strdup, function in Test Utilities cut_take_strndup, function in Test Utilities cut_test_fail, function in Assertion writing helper cut_test_fail_va_list, function in Assertion writing helper cut_test_pass, function in Assertion writing helper cut_trace, macro in Assertion writing helper cut_trace_with_info_expression, macro in Assertion writing helper E gcut_enum_inspect, function in Assertion Utilities for GEnum and GFlags gcut_error_equal, function in Assertion Utilities for GError gcut_error_inspect, function in Assertion Utilities for GError F gcut_flags_inspect, function in Assertion Utilities for GEnum and GFlags G gdkcut_pixbuf_assert_equal, function in Assertions with gdk-pixbuf support H gcut_hash_table_equal, function in Assertion Utilities for GHashTable gcut_hash_table_inspect, function in Assertion Utilities for GHashTable gcut_hash_table_string_equal, function in Assertion Utilities for GHashTable gcut_hash_table_string_string_inspect, function in Assertion Utilities for GHashTable gcut_hash_table_string_string_new_va_list, function in Test Utilities with GLib support L gcut_list_enum_inspect, macro in Assertion Utilities for GList gcut_list_equal, function in Assertion Utilities for GList gcut_list_flags_inspect, macro in Assertion Utilities for GList gcut_list_inspect, function in Assertion Utilities for GList gcut_list_int_equal, macro in Assertion Utilities for GList gcut_list_int_inspect, macro in Assertion Utilities for GList gcut_list_object_inspect, macro in Assertion Utilities for GList gcut_list_string_equal, macro in Assertion Utilities for GList gcut_list_string_inspect, macro in Assertion Utilities for GList gcut_list_uint_equal, macro in Assertion Utilities for GList gcut_list_uint_inspect, macro in Assertion Utilities for GList O gcut_object_equal, function in Assertion Utilities for GObject gcut_object_inspect, function in Assertion Utilities for GObject gcut_object_inspect_custom, function in Assertion Utilities for GObject T gcut_take_new_hash_table_string_string, function in Test Utilities with GLib support gcut_take_new_list_string, function in Test Utilities with GLib support V gcut_value_equal, function in Assertion Utilities for GValue gcut_value_register_equal_func, function in Assertion Utilities for GValue cutter-testing-framework-1.1.7/doc/reference/xml/gdkcut-pixbuf-assertions.xml0000644000175000017500000001017611400101216025632 0ustar koukou ]> Assertions with gdk-pixbuf support 3 CUTTER Library Assertions with gdk-pixbuf support Checks that your program works as you expect with gdk-pixbuf support. Synopsis void gdkcut_pixbuf_assert_equal (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, ...); Description Details gdkcut_pixbuf_assert_equal () gdkcut_pixbuf_assert_equal void gdkcut_pixbuf_assert_equal (const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, ...); Passes if expected == actual. If difference of each corresponding pixel value is within threshold, expected and actual are treated as equal image. If threshold is 3, pixel value of expected at (1, 1) is 127 and pixel value of actual at (1, 1) is 131, actual doesn't equals to expected. If pixel value of actual at (1, 1) is 130, actual may equal to expected. (All other corresponding pixel values are needed to fill this condition.) expected : an expected GdkPixbuf. actual : an actual GdkPixbuf. threshold : an threshold used for detecting pixel difference. ... : optional message. See cut_message() for details. Since 1.0.5 cutter-testing-framework-1.1.7/doc/reference/xml/cut-string-diff-writer.xml0000644000175000017500000000711611424024726025225 0ustar koukou ]> CutStringDiffWriter 3 CUTTER Library CutStringDiffWriter Synopsis CutStringDiffWriter; CutStringDiffWriterClass; CutDiffWriter * cut_string_diff_writer_new (void); const gchar * cut_string_diff_writer_get_result (CutDiffWriter *writer); Description Details CutStringDiffWriter CutStringDiffWriter typedef struct { CutDiffWriter object; } CutStringDiffWriter; CutStringDiffWriterClass CutStringDiffWriterClass typedef struct { CutDiffWriterClass parent_class; } CutStringDiffWriterClass; cut_string_diff_writer_new () cut_string_diff_writer_new CutDiffWriter * cut_string_diff_writer_new (void); Returns : cut_string_diff_writer_get_result () cut_string_diff_writer_get_result const gchar * cut_string_diff_writer_get_result (CutDiffWriter *writer); writer : Returns : cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.0.8.xml0000644000175000017500000001113111442136355023220 0ustar koukou ]> H gcut_hash_table_string_string_copy, function in Assertion Utilities for GHashTable S SOUPCUTTER_ENABLED, macro in SoupCutter soupcut_client_assert_equal_body, function in Assertions for HTTP client and server soupcut_client_assert_equal_content_type, function in Assertions for HTTP client and server soupcut_client_assert_match_body, function in Assertions for HTTP client and server soupcut_client_assert_response, function in Assertions for HTTP client and server soupcut_client_get, function in SoupCutClient soupcut_client_get_async_context, function in SoupCutClient soupcut_client_get_latest_message, function in SoupCutClient soupcut_client_get_n_messages, function in SoupCutClient soupcut_client_new, function in SoupCutClient soupcut_client_send_message, function in SoupCutClient soupcut_client_set_base, function in SoupCutClient soupcut_message_assert_equal_content_type, function in Assertions for HTTP client and server soupcut_server_build_uri, function in Convenience HTTP server API soupcut_server_take, function in Convenience HTTP server API soupcut_server_take_new, function in Convenience HTTP server API cutter-testing-framework-1.1.7/doc/reference/xml/gcutter.xml0000644000175000017500000000447211400101216022345 0ustar koukou ]> GCutter 3 CUTTER Library GCutter Cutter with GLib support. Synopsis #define GCUTTER_ENABLED Description GCutter adds many useful features based on GLib to Cutter. If you want to write tests with more easily, it's good idea that you consider GCutter to be used too. It's easy to use GCutter. You just include <gcutter.h> instead of <cutter.h> and use gcutter.pc instead of cutter.pc: test-xxx.c: -#include <cutter.h> +#include <gcutter.h> configure.ac: -AC_CHECK_CUTTER +AC_CHECK_GCUTTER Makefile.am: -XXX_CFLAGS = $(CUTTER_CFLAGS) -XXX_LIBS = $(CUTTER_LIBS) +XXX_CFLAGS = $(GCUTTER_CFLAGS) +XXX_LIBS = $(GCUTTER_LIBS) Details GCUTTER_ENABLED GCUTTER_ENABLED #define GCUTTER_ENABLED 1 Defined when GCutter is enabled. Since 1.0.6 See Also Assertions with GLib support cutter-testing-framework-1.1.7/doc/reference/xml/gcut-main.xml0000644000175000017500000000620011400101216022543 0ustar koukou ]> gcut-main 3 CUTTER Library gcut-main Synopsis void gcut_init (void); void gcut_value_equal_init (void); void gcut_quit (void); void gcut_value_equal_quit (void); Description Details gcut_init () gcut_init void gcut_init (void); gcut_value_equal_init () gcut_value_equal_init void gcut_value_equal_init (void); gcut_quit () gcut_quit void gcut_quit (void); gcut_value_equal_quit () gcut_value_equal_quit void gcut_value_equal_quit (void); cutter-testing-framework-1.1.7/doc/reference/xml/soupcut-assertions-helper.xml0000644000175000017500000002762511400101216026044 0ustar koukou ]> soupcut-assertions-helper 3 CUTTER Library soupcut-assertions-helper Synopsis void soupcut_message_assert_equal_content_type_helper (const gchar *expected, SoupMessage *message, const gchar *expression_expected, const gchar *expression_message); void soupcut_client_assert_equal_content_type_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); void soupcut_client_assert_response_helper (SoupCutClient *client, const gchar *expression_client); void soupcut_client_assert_equal_body_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); void soupcut_client_assert_match_body_helper (const gchar *pattern, SoupCutClient *client, const gchar *expression_pattern, const gchar *expression_client); Description Details soupcut_message_assert_equal_content_type_helper () soupcut_message_assert_equal_content_type_helper void soupcut_message_assert_equal_content_type_helper (const gchar *expected, SoupMessage *message, const gchar *expression_expected, const gchar *expression_message); expected : message : expression_expected : expression_message : soupcut_client_assert_equal_content_type_helper () soupcut_client_assert_equal_content_type_helper void soupcut_client_assert_equal_content_type_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); expected : client : expression_expected : expression_client : soupcut_client_assert_response_helper () soupcut_client_assert_response_helper void soupcut_client_assert_response_helper (SoupCutClient *client, const gchar *expression_client); client : expression_client : soupcut_client_assert_equal_body_helper () soupcut_client_assert_equal_body_helper void soupcut_client_assert_equal_body_helper (const gchar *expected, SoupCutClient *client, const gchar *expression_expected, const gchar *expression_client); expected : client : expression_expected : expression_client : soupcut_client_assert_match_body_helper () soupcut_client_assert_match_body_helper void soupcut_client_assert_match_body_helper (const gchar *pattern, SoupCutClient *client, const gchar *expression_pattern, const gchar *expression_client); pattern : client : expression_pattern : expression_client : cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.1.5.xml0000644000175000017500000002336111442136355023226 0ustar koukou ]> A gcut_assert_equal_string, function in Assertions with GLib support C cut_assert_exist_path, function in Assertions cut_assert_not_exist_path, function in Assertions cut_build_path_array, function in Test Utilities cut_get_source_directory, function in Assertion writing helper D gcut_data_has_field, function in Convenience test data API L gcut_list_int_new, function in Test Utilities with GLib support gcut_list_uint_new, function in Test Utilities with GLib support P GCutProcess::error, object signal in GCutProcess GCutProcess::error-received, object signal in GCutProcess GCutProcess::output-received, object signal in GCutProcess GCutProcess::reaped, object signal in GCutProcess GCutProcessError, enum in GCutProcess gcut_process_flush, function in GCutProcess gcut_process_get_env, function in GCutProcess gcut_process_get_error_channel, function in GCutProcess gcut_process_get_error_stream, function in GCutProcess gcut_process_get_error_string, function in GCutProcess gcut_process_get_flags, function in GCutProcess gcut_process_get_forced_termination_wait_time, function in GCutProcess gcut_process_get_input_channel, function in GCutProcess gcut_process_get_output_channel, function in GCutProcess gcut_process_get_output_stream, function in GCutProcess gcut_process_get_output_string, function in GCutProcess gcut_process_get_pid, function in GCutProcess gcut_process_kill, function in GCutProcess gcut_process_new, function in GCutProcess gcut_process_new_argv, function in GCutProcess gcut_process_new_array, function in GCutProcess gcut_process_new_command_line, function in GCutProcess gcut_process_new_strings, function in GCutProcess gcut_process_new_va_list, function in GCutProcess gcut_process_run, function in GCutProcess gcut_process_set_env, function in GCutProcess gcut_process_set_flags, function in GCutProcess gcut_process_set_forced_termination_wait_time, function in GCutProcess gcut_process_wait, function in GCutProcess gcut_process_write, function in GCutProcess S gcut_string_equal, function in Assertion Utilities for GString gcut_string_inspect, function in Assertion Utilities for GString T gcut_take_new_list_int, function in Test Utilities with GLib support gcut_take_new_list_uint, function in Test Utilities with GLib support cutter-testing-framework-1.1.7/doc/reference/xml/cut-console-diff-writer.xml0000644000175000017500000004641111424024726025362 0ustar koukou ]> CutConsoleDiffWriter 3 CUTTER Library CutConsoleDiffWriter Synopsis CutConsoleDiffWriter; CutConsoleDiffWriterClass; CutDiffWriter * cut_console_diff_writer_new (gboolean use_color); void cut_console_diff_writer_set_deleted_mark_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_deleted_mark_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_mark_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_inserted_mark_color (CutDiffWriter *writer); void cut_console_diff_writer_set_deleted_line_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_deleted_line_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_line_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_inserted_line_color (CutDiffWriter *writer); void cut_console_diff_writer_set_deleted_segment_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_deleted_segment_color (CutDiffWriter *writer); void cut_console_diff_writer_set_inserted_segment_color (CutDiffWriter *writer, const gchar *color); const gchar * cut_console_diff_writer_get_inserted_segment_color (CutDiffWriter *writer); Description Details CutConsoleDiffWriter CutConsoleDiffWriter typedef struct { CutDiffWriter object; } CutConsoleDiffWriter; CutConsoleDiffWriterClass CutConsoleDiffWriterClass typedef struct { CutDiffWriterClass parent_class; } CutConsoleDiffWriterClass; cut_console_diff_writer_new () cut_console_diff_writer_new CutDiffWriter * cut_console_diff_writer_new (gboolean use_color); use_color : Returns : cut_console_diff_writer_set_deleted_mark_color () cut_console_diff_writer_set_deleted_mark_color void cut_console_diff_writer_set_deleted_mark_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_deleted_mark_color () cut_console_diff_writer_get_deleted_mark_color const gchar * cut_console_diff_writer_get_deleted_mark_color (CutDiffWriter *writer); writer : Returns : cut_console_diff_writer_set_inserted_mark_color () cut_console_diff_writer_set_inserted_mark_color void cut_console_diff_writer_set_inserted_mark_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_inserted_mark_color () cut_console_diff_writer_get_inserted_mark_color const gchar * cut_console_diff_writer_get_inserted_mark_color (CutDiffWriter *writer); writer : Returns : cut_console_diff_writer_set_deleted_line_color () cut_console_diff_writer_set_deleted_line_color void cut_console_diff_writer_set_deleted_line_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_deleted_line_color () cut_console_diff_writer_get_deleted_line_color const gchar * cut_console_diff_writer_get_deleted_line_color (CutDiffWriter *writer); writer : Returns : cut_console_diff_writer_set_inserted_line_color () cut_console_diff_writer_set_inserted_line_color void cut_console_diff_writer_set_inserted_line_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_inserted_line_color () cut_console_diff_writer_get_inserted_line_color const gchar * cut_console_diff_writer_get_inserted_line_color (CutDiffWriter *writer); writer : Returns : cut_console_diff_writer_set_deleted_segment_color () cut_console_diff_writer_set_deleted_segment_color void cut_console_diff_writer_set_deleted_segment_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_deleted_segment_color () cut_console_diff_writer_get_deleted_segment_color const gchar * cut_console_diff_writer_get_deleted_segment_color (CutDiffWriter *writer); writer : Returns : cut_console_diff_writer_set_inserted_segment_color () cut_console_diff_writer_set_inserted_segment_color void cut_console_diff_writer_set_inserted_segment_color (CutDiffWriter *writer, const gchar *color); writer : color : cut_console_diff_writer_get_inserted_segment_color () cut_console_diff_writer_get_inserted_segment_color const gchar * cut_console_diff_writer_get_inserted_segment_color (CutDiffWriter *writer); writer : Returns : cutter-testing-framework-1.1.7/doc/reference/xml/cut-unified-differ.xml0000644000175000017500000000170511400101215024334 0ustar koukou ]> CutUnifiedDiffer 3 CUTTER Library CutUnifiedDiffer Synopsis Description Details cutter-testing-framework-1.1.7/doc/reference/xml/api-index-0.9.xml0000644000175000017500000000216611442136355023072 0ustar koukou ]> C cut_assert_equal_string_array_with_free, function in Assertions cut_assert_false, function in Assertions cut_assert_file_exist, function in Assertions cut_assert_true, function in Assertions cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.1.6.xml0000644000175000017500000001126011523761415023223 0ustar koukou ]> C cut_build_fixture_path, function in Test Utilities cut_get_fixture_data, function in Test Utilities E gcut_event_loop_add_idle, function in GCutEventLoop gcut_event_loop_add_idle_full, function in GCutEventLoop gcut_event_loop_add_timeout, function in GCutEventLoop gcut_event_loop_add_timeout_full, function in GCutEventLoop gcut_event_loop_iterate, function in GCutEventLoop gcut_event_loop_quit, function in GCutEventLoop gcut_event_loop_remove, function in GCutEventLoop gcut_event_loop_run, function in GCutEventLoop gcut_event_loop_watch_child, function in GCutEventLoop gcut_event_loop_watch_child_full, function in GCutEventLoop gcut_event_loop_watch_io, function in GCutEventLoop G gcut_get_fixture_data, function in Test Utilities with GLib support gcut_glib_event_loop_new, function in GCutGLibEventLoop P gcut_process_get_event_loop, function in GCutProcess gcut_process_set_event_loop, function in GCutProcess T gcut_take_new_string, function in Test Utilities with GLib support gcut_take_string, function in Test Utilities with GLib support cutter-testing-framework-1.1.7/doc/reference/xml/gcut-test-utils.xml0000644000175000017500000011562311523761415023771 0ustar koukou ]> Test Utilities with GLib support 3 CUTTER Library Test Utilities with GLib support Utilities to write tests more easily with GLib support. Synopsis GObject * gcut_take_object (GObject *object); GError * gcut_take_error (GError *error); const GList * gcut_take_list (const GList *list, CutDestroyFunction destroy_function); GHashTable * gcut_take_hash_table (GHashTable *hash_table); GString * gcut_take_string (GString *string); GString * gcut_take_new_string (const gchar *string); GList * gcut_list_new (const gpointer element, ...); GList * gcut_list_int_new (guint n, gint value, ...); GList * gcut_list_uint_new (guint n, guint value, ...); GList * gcut_list_string_new (const gchar *value, ...); GList * gcut_list_string_new_array (const gchar **strings); const GList * gcut_take_new_list_int (guint n, gint value, ...); const GList * gcut_take_new_list_uint (guint n, guint value, ...); const GList * gcut_take_new_list_string (const gchar *value, ...); #define gcut_take_new_list_string_backward_compatibility(value, ...) const GList * gcut_take_new_list_string_array (const gchar **strings); #define gcut_take_new_list_object (object, ...) void gcut_list_string_free (GList *list); void gcut_list_object_free (GList *list); GHashTable * gcut_hash_table_string_string_new (const gchar *key, ...); GHashTable * gcut_hash_table_string_string_new_va_list (const gchar *key, va_list args); GHashTable * gcut_take_new_hash_table_string_string (const gchar *key, ...); GString * gcut_get_fixture_data (const gchar *path, ...); Description To write tests, you need to write codes that set up/tear down test environment, prepare expected and actual values and so on. Cutter provides test utilities to you write your tests more easily. The utilities work with GLib. Details gcut_take_object () gcut_take_object GObject * gcut_take_object (GObject *object); Passes ownership of object to Cutter and returns object. object : the GObject to be owned by Cutter. Returns : object owned by Cutter. Don't g_object_unref() it. Since 1.0.3 gcut_take_error () gcut_take_error GError * gcut_take_error (GError *error); Passes ownership of error to Cutter and returns a error itself. error : the GError to be owned by Cutter. Returns : a GError owned by Cutter. Don't g_error_free() it. Since 1.0.3 gcut_take_list () gcut_take_list const GList * gcut_take_list (const GList *list, CutDestroyFunction destroy_function); Passes ownership of list to Cutter and returns list itself. list : the GList to be owned by Cutter. destroy_function : the destroy function that destroys the elements of list, or NULL. Returns : a GList owned by Cutter. Don't g_list_free() it. Since 1.0.3 gcut_take_hash_table () gcut_take_hash_table GHashTable * gcut_take_hash_table (GHashTable *hash_table); Passes ownership of hash_table to Cutter and returns hash_table itself. hash_table : the GHashTable to be owned by Cutter. Returns : a GHashTable owned by Cutter. Don't g_hash_table_unref() it. Since 1.0.4 gcut_take_string () gcut_take_string GString * gcut_take_string (GString *string); Passes ownership of string to Cutter and returns string itself. string : the GString to be owned by Cutter. Returns : a GString owned by Cutter. Don't g_string_free() it. Since 1.1.6 gcut_take_new_string () gcut_take_new_string GString * gcut_take_new_string (const gchar *string); Creates a GString object from passed string. string : the string. It can be NULL. Returns : a GString owned by Cutter. Don't g_string_free() it. Since 1.1.6 gcut_list_new () gcut_list_new GList * gcut_list_new (const gpointer element, ...); Creates a list from passed elements. e.g.: GCutEgg *echo_egg, *cat_egg; echo_egg = gcut_egg_new("echo", "Hello", NULL); cat_egg = gcut_egg_new("cat", "/etc/hosts", NULL); egg_list = gcut_list_new(echo_egg, cat_egg, NULL); element : the first gpointer. ... : remaining elements in list. NULL-terminate. Returns : a newly-allocated GList that contains passed elements. Since 1.1.1 gcut_list_int_new () gcut_list_int_new GList * gcut_list_int_new (guint n, gint value, ...); Creates a list from passed integer values. e.g.: gcut_list_int_new(3, -10, 1, 29); -> (-10, 1, 29) n : the number of integer values. value : the first integer value. ... : remaining integer values in list. Returns : a newly-allocated GList that contains passed integer values and must be freed with g_list_free(). Since 1.1.5 gcut_list_uint_new () gcut_list_uint_new GList * gcut_list_uint_new (guint n, guint value, ...); Creates a list from passed unsigned integer values. e.g.: gcut_list_uint_new(3, 0, 1, 2); -> (0, 1, 2) n : the number of unsigned integer values. value : the first unsigned integer value. ... : remaining unsigned integer values in list. Returns : a newly-allocated GList that contains passed unsigned integer values and must be freed with g_list_free(). Since 1.1.5 gcut_list_string_new () gcut_list_string_new GList * gcut_list_string_new (const gchar *value, ...); Creates a list from passed strings. value : the first string. ... : remaining strings in list. NULL-terminate. Returns : a newly-allocated GList that contains passed strings and must be freed with gcut_list_string_free(). Since 1.0.3 gcut_list_string_new_array () gcut_list_string_new_array GList * gcut_list_string_new_array (const gchar **strings); Creates a list from passed string array. strings : the string array. NULL-terminate. Returns : a newly-allocated GList that contains passed string array and must be freed with gcut_list_string_free(). Since 1.0.6 gcut_take_new_list_int () gcut_take_new_list_int const GList * gcut_take_new_list_int (guint n, gint value, ...); Creates a list from passed integer values that is owned by Cutter. e.g.: gcut_take_new_list_int(3, -10, 1, 29); -> (-10, 1, 29) n : the number of integer values. value : the first integer value. ... : remaining strings in list. Returns : a newly-allocated GList that contains passed integer values and is owned by Cutter. Since 1.1.5 gcut_take_new_list_uint () gcut_take_new_list_uint const GList * gcut_take_new_list_uint (guint n, guint value, ...); Creates a list from passed unsigned integer values that is owned by Cutter. e.g.: gcut_take_new_list_uint(3, 0, 1, 2); -> (0, 1, 2) n : the number of unsigned integer values. value : the first unsigned integer value. ... : remaining strings in list. Returns : a newly-allocated GList that contains passed unsigned integer values and is owned by Cutter. Since 1.1.5 gcut_take_new_list_string () gcut_take_new_list_string const GList * gcut_take_new_list_string (const gchar *value, ...); Creates a list from passed strings that is owned by Cutter. value : the first string. ... : remaining strings in list. NULL-terminate. Returns : a newly-allocated GList that contains passed strings and is owned by Cutter. Since 1.0.5 gcut_take_new_list_string_backward_compatibility() gcut_take_new_list_string_backward_compatibility #define gcut_take_new_list_string_backward_compatibility(value, ...) gcut_take_new_list_string_backward_compatibility is deprecated and should not be used in newly-written code. value : ... : gcut_take_new_list_string_array () gcut_take_new_list_string_array const GList * gcut_take_new_list_string_array (const gchar **strings); Creates a list from passed string array that is owned by Cutter. strings : the string array. NULL-terminate. Returns : a newly-allocated GList that contains passed string array and is owned by Cutter. Since 1.0.6 gcut_take_new_list_object() gcut_take_new_list_object #define gcut_take_new_list_object(object, ...) Creates a list from passed objects that is owned by Cutter. object : the first GObject. ... : remaining objects in list. NULL-terminate. Returns : a newly-allocated GList that contains passed objects and is owned by Cutter. Since 1.1.1 gcut_list_string_free () gcut_list_string_free void gcut_list_string_free (GList *list); Frees list and contained strings. list : the list that contains strings to be freed. Since 1.0.3 gcut_list_object_free () gcut_list_object_free void gcut_list_object_free (GList *list); Frees list and contained objects. It's safe that list contains NULL. list : the list that contains GObject's to be unrefed. Since 1.1.1 gcut_hash_table_string_string_new () gcut_hash_table_string_string_new GHashTable * gcut_hash_table_string_string_new (const gchar *key, ...); Creates a hash table that has string key and string value from passed key/value pairs. key : The first key string. ... : A NULL-terminated list of rest arguments. The first item is the string value of the first key, followed optionally by more key/value pairs. It must end with NULL. Returns : a newly-allocated GHashTable that contains passed key/value pairs and must be freed with g_hash_table_unref(). Since 1.0.4 gcut_hash_table_string_string_new_va_list () gcut_hash_table_string_string_new_va_list GHashTable * gcut_hash_table_string_string_new_va_list (const gchar *key, va_list args); Creates a hash table that has string key and string value from passed key/value pairs. key : The first key string. args : A NULL-terminated list of rest arguments. The first item is the string value of the first key, followed optionally by more key/value pairs. It must end with NULL. Returns : a newly-allocated GHashTable that contains passed key/value pairs and must be freed with g_hash_table_unref(). Since 1.0.5 gcut_take_new_hash_table_string_string () gcut_take_new_hash_table_string_string GHashTable * gcut_take_new_hash_table_string_string (const gchar *key, ...); Creates a hash table that has string key and string value from passed key/value pairs. The created hash table is owned by Cutter. So don't g_hash_table_unref() it. key : The first key string. ... : A NULL-terminated list of rest arguments. The string value of the first key, followed optionally by more key/value pairs. It must end with NULL. Returns : a newly-allocated GHashTable that contains passed key/value pairs. Since 1.0.5 gcut_get_fixture_data () gcut_get_fixture_data GString * gcut_get_fixture_data (const gchar *path, ...); Reads the fixture data at "path/..." and returns it as a GString that is owned by Cutter. The description of cut_build_fixture_path() shows how the fixture data path is determined. path : a first element of the path to the fixture data. ... : remaining elements in path. NULL-terminate is required. Returns : a content of the fixture data as GString owend by Cutter. Don't free it. Since 1.1.6 cutter-testing-framework-1.1.7/doc/reference/xml/cut-differ.xml0000644000175000017500000000162411400101215022713 0ustar koukou ]> CutDiffer 3 CUTTER Library CutDiffer Synopsis Description Details cutter-testing-framework-1.1.7/doc/reference/xml/gcut-string-io-channel.xml0000644000175000017500000004115611523751467025202 0ustar koukou ]> gcut-string-io-channel 3 CUTTER Library gcut-string-io-channel Synopsis GIOChannel * gcut_string_io_channel_new (const gchar *initial); GString * gcut_string_io_channel_get_string (GIOChannel *channel); void gcut_string_io_channel_clear (GIOChannel *channel); gsize gcut_string_io_channel_get_buffer_limit (GIOChannel *channel); void gcut_string_io_channel_set_buffer_limit (GIOChannel *channel, gsize limit); gsize gcut_string_io_channel_get_limit (GIOChannel *channel); void gcut_string_io_channel_set_limit (GIOChannel *channel, gsize limit); gboolean gcut_string_io_channel_get_read_fail (GIOChannel *channel); void gcut_string_io_channel_set_read_fail (GIOChannel *channel, gboolean read_fail); gboolean gcut_string_io_channel_get_pipe_mode (GIOChannel *channel); void gcut_string_io_channel_set_pipe_mode (GIOChannel *channel, gboolean pipe_mode); GMainContext * gcut_string_io_channel_get_main_context (GIOChannel *channel); void gcut_string_io_channel_set_main_context (GIOChannel *channel, GMainContext *main_context); Description Details gcut_string_io_channel_new () gcut_string_io_channel_new GIOChannel * gcut_string_io_channel_new (const gchar *initial); initial : Returns : gcut_string_io_channel_get_string () gcut_string_io_channel_get_string GString * gcut_string_io_channel_get_string (GIOChannel *channel); channel : Returns : gcut_string_io_channel_clear () gcut_string_io_channel_clear void gcut_string_io_channel_clear (GIOChannel *channel); channel : gcut_string_io_channel_get_buffer_limit () gcut_string_io_channel_get_buffer_limit gsize gcut_string_io_channel_get_buffer_limit (GIOChannel *channel); channel : Returns : gcut_string_io_channel_set_buffer_limit () gcut_string_io_channel_set_buffer_limit void gcut_string_io_channel_set_buffer_limit (GIOChannel *channel, gsize limit); channel : limit : gcut_string_io_channel_get_limit () gcut_string_io_channel_get_limit gsize gcut_string_io_channel_get_limit (GIOChannel *channel); channel : Returns : gcut_string_io_channel_set_limit () gcut_string_io_channel_set_limit void gcut_string_io_channel_set_limit (GIOChannel *channel, gsize limit); channel : limit : gcut_string_io_channel_get_read_fail () gcut_string_io_channel_get_read_fail gboolean gcut_string_io_channel_get_read_fail (GIOChannel *channel); channel : Returns : gcut_string_io_channel_set_read_fail () gcut_string_io_channel_set_read_fail void gcut_string_io_channel_set_read_fail (GIOChannel *channel, gboolean read_fail); channel : read_fail : gcut_string_io_channel_get_pipe_mode () gcut_string_io_channel_get_pipe_mode gboolean gcut_string_io_channel_get_pipe_mode (GIOChannel *channel); channel : Returns : gcut_string_io_channel_set_pipe_mode () gcut_string_io_channel_set_pipe_mode void gcut_string_io_channel_set_pipe_mode (GIOChannel *channel, gboolean pipe_mode); channel : pipe_mode : gcut_string_io_channel_get_main_context () gcut_string_io_channel_get_main_context GMainContext * gcut_string_io_channel_get_main_context (GIOChannel *channel); channel : Returns : gcut_string_io_channel_set_main_context () gcut_string_io_channel_set_main_context void gcut_string_io_channel_set_main_context (GIOChannel *channel, GMainContext *main_context); channel : main_context : cutter-testing-framework-1.1.7/doc/reference/xml/cut-colorize-differ.xml0000644000175000017500000000171411400101215024537 0ustar koukou ]> CutColorizeDiffer 3 CUTTER Library CutColorizeDiffer Synopsis Description Details cutter-testing-framework-1.1.7/doc/reference/xml/gcut-enum.xml0000644000175000017500000003326511400101216022576 0ustar koukou ]> Assertion Utilities for GEnum and GFlags 3 CUTTER Library Assertion Utilities for GEnum and GFlags Utilities to write assertions related to GEnum or GFlags more easily. Synopsis #define GCUT_ENUM_ERROR GQuark gcut_enum_error_quark (void); enum GCutEnumError; gchar * gcut_enum_inspect (GType enum_type, gint enum_value); gint gcut_enum_parse (GType enum_type, const gchar *enum_value, GError **error); gchar * gcut_flags_inspect (GType flags_type, guint flags_value); guint gcut_flags_parse (GType flags_type, const gchar *flags_value, GError **error); guint gcut_flags_get_all (GType flags_type, GError **error); Description To write assertions, you need to check equality and show expected and actual values. The utilities help you to write assertions that are related to GEnum or GFlags. Details GCUT_ENUM_ERROR GCUT_ENUM_ERROR #define GCUT_ENUM_ERROR (gcut_enum_error_quark()) Error domain for enum related operations. Errors in this domain will be from the GCutEnumError enumeration. Since 1.0.6 gcut_enum_error_quark () gcut_enum_error_quark GQuark gcut_enum_error_quark (void); Returns : enum GCutEnumError GCutEnumError typedef enum { GCUT_ENUM_ERROR_INVALID_TYPE, GCUT_ENUM_ERROR_INVALID_VALUE } GCutEnumError; Error codes returned by enum related operation. GCUT_ENUM_ERROR_INVALID_TYPE Invalid type. GCUT_ENUM_ERROR_INVALID_VALUE Invalid value. Since 1.0.6 gcut_enum_inspect () gcut_enum_inspect gchar * gcut_enum_inspect (GType enum_type, gint enum_value); Inspects enum_type value, enum_value. The returned string should be freed when no longer needed. enum_type : a GEnum type. enum_value : a GEnum value to be inspected. Returns : inspected enum_value as a string. Since 1.0.5 gcut_enum_parse () gcut_enum_parse gint gcut_enum_parse (GType enum_type, const gchar *enum_value, GError **error); Parses enum_value and returns a enum value of enum_type. enum_value should be enum name or nick name. If enum_value isn't match then error is set to a GCutEnumError. enum_type : a GEnum type. enum_value : a string to be parsed. error : return location for an error, or NULL Returns : enum value of enum_type corresponded to enum_value. Since 1.0.6 gcut_flags_inspect () gcut_flags_inspect gchar * gcut_flags_inspect (GType flags_type, guint flags_value); Inspects flags_type value, flags_value. The returned string should be freed when no longer needed. flags_type : a GFlags type. flags_value : a GFlags value to be inspected. Returns : inspected flags_value as a string. Since 1.0.5 gcut_flags_parse () gcut_flags_parse guint gcut_flags_parse (GType flags_type, const gchar *flags_value, GError **error); Parses flags_value and returns a flags value of flags_type. flags_value should be formated as "nick-or-name1|nick-or-name2|...|nick-or-nameN". If flags_value includes unknown flag then error is set to a GCutEnumError. flags_type : a GFlags type. flags_value : a string to be parsed. error : return location for an error, or NULL Returns : flags value of flags_type corresponded to flags_value. Since 1.0.6 gcut_flags_get_all () gcut_flags_get_all guint gcut_flags_get_all (GType flags_type, GError **error); Gets a flags value that includes all available flag values. flags_type : a GFlags type. error : return location for an error, or NULL Returns : a flags value that includes all available flag values. Since 1.0.6 cutter-testing-framework-1.1.7/doc/reference/xml/api-index-1.1.1.xml0000644000175000017500000000434511442136355023223 0ustar koukou ]> C cut_assert_equal_sockaddr, macro in Assertions cut_equal_sockaddr, macro in Assertion writing helper cut_inspect_sockaddr, macro in Assertion writing helper cut_make_directory, function in Test Utilities D gcut_data_get_object, macro in Convenience test data API L gcut_list_new, function in Test Utilities with GLib support gcut_list_object_free, function in Test Utilities with GLib support T gcut_take_new_list_object, macro in Test Utilities with GLib support cutter-testing-framework-1.1.7/doc/reference/xml/gcut-error.xml0000644000175000017500000001073711400101216022762 0ustar koukou ]> Assertion Utilities for GError 3 CUTTER Library Assertion Utilities for GError Utilities to write assertions related to GError more easily. Synopsis gboolean gcut_error_equal (const GError *error1, const GError *error2); gchar * gcut_error_inspect (const GError *error); Description To write assertions, you need to check equality and show expected and actual values. The utilities help you to write assertions that are related to GError. Details gcut_error_equal () gcut_error_equal gboolean gcut_error_equal (const GError *error1, const GError *error2); Compares two GError, error1 and error2. error1 : a GError to be compared. error2 : a GError to be compared. Returns : TRUE if both of error1 and error2 have the same domain, code and message, FALSE otherwise. Since 1.0.5 gcut_error_inspect () gcut_error_inspect gchar * gcut_error_inspect (const GError *error); Inspects error. The returned string should be freed when no longer needed. error : a GError value. Returns : inspected error as a string. Since 1.0.5 cutter-testing-framework-1.1.7/doc/reference/xml/cutter.xml0000644000175000017500000006273211424022630022211 0ustar koukou ]> Cutter 3 CUTTER Library Cutter A Unit Testing Framework for C and C++. Synopsis void setup (void); void cut_setup (void); void teardown (void); void cut_teardown (void); void cut_startup (void); void cut_shutdown (void); #define cut_add_data (first_data_name, ...) #define cut_add_data_backward_compatibility (context, ...) #define cut_set_attributes (first_attribute_name, ...) #define cut_get_current_test_context #define cut_set_current_test_context (test_context) void cut_set_message (const char *format, ...); void cut_set_message_va_list (const char *format, va_list args); void cut_keep_message (void); void cut_message (const char *format, ...); #define CUT_EXPORT Description Cutter is a Unit Testing Framework for C and C++ and has the following features: Easy to use. Cutter doesn't introduce any magic macros like CUTTER_DEFINE_TEST_START and CUTTER_DEFINE_TEST_END into your test program. You can write your test program like normal program. You only use cut_assert_XXX() to check that your program works as you expect. #include <cutter.h> #include "my-stack.h" void test_my_stack (void) { MyStack *stack = my_stack_new(); cut_assert_not_null(stack); cut_assert(my_stack_is_empty(stack)); cut_assert_equal_int(0, my_stack_get_size(stack)); my_stack_push(stack, 10); cut_assert(!my_stack_is_empty(stack)); cut_assert_equal_int(1, my_stack_get_size(stack)); my_stack_push(stack, 20); cut_assert_equal_int(2, my_stack_get_size(stack)); cut_assert_equal(20, my_stack_pop(stack)); cut_assert(!my_stack_is_empty(stack)); cut_assert_equal_int(1, my_stack_get_size(stack)); cut_assert_equal(10, my_stack_pop(stack)); cut_assert(my_stack_is_empty(stack)); cut_assert_equal_int(0, my_stack_get_size(stack)); } Simple but useful output. Cutter works quietly if tests are running without any problems by default. The following is an output of self test: ........................................................... Finished in 0.213021 seconds 59 test(s), 246 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 notification(s) Cutter just outputs "." for a passed test and a summary at the end. Cutter doesn't output each test name, how many assertions are used for a test and so because we don't need the information on success. Cutter outputs many information on failure: .....................F..................................... 1) Failure: test_error <"Strange" == cut_test_result_get_test_name(result)> expected: <Strange!!!> but was: <dummy-error-test> test/test-cut-assertions.c:240: cut_assert_test_result() Finished in 0.223657 seconds 59 test(s), 242 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 notification(s) The above result is happened because I add a strange expected staring in Cutter's self test: cut_assert_equal_string("Strange!!!", cut_test_result_get_test_name(result)); The strange assertion is written in the 240th line in test/test-cut-assertions.c and the line is in the cut_assert_test_result() function. The function is called in test_error test. We expected cut_test_result_get_test_name(result) should return "Strange!!!" but got "dummy-error-name". We can get the above information from Cutter output. This will help your debug. Cutter's output format is pragmatic. ' but was:' is indented and aligned with the above 'expected:'. This helps that you find difference between expected value and actual value by your eyes easily. The problem line is formated as 'FILENAME:LINE: FUNCTION' to integrate Emacs. In Emacs's compilation-mode, if the format is appeared in *compilation* buffer, we can jump to FILENAME at LINE with next-error command. (C-x `) This helps that you find the problem line rapidly. Cutter supports not only easy test writing but also easy debugging. Details setup () setup void setup (void); setup has been deprecated since version 1.0.7 and should not be used in newly-written code. Use cut_setup() instead. If you define setup() in your test program, cutter will call your setup() before each your test is run. If you define cut_setup(), setup() is ignored. cut_setup () cut_setup void cut_setup (void); If you define cut_setup() in your test program, cutter will call your cut_setup() before each your test is run. cut_setup() has priority over setup(). Since 1.0.6 teardown () teardown void teardown (void); teardown has been deprecated since version 1.0.7 and should not be used in newly-written code. Use cut_teardown() instead. If you define teardown() in your test program, cutter will call your teardown() after each your test is run even if a test is failed. If you define cut_teardown(), teardown() is ignored. cut_teardown () cut_teardown void cut_teardown (void); If you define cut_teardown() in your test program, cutter will call your cut_teardown() after each your test is run even if a test is failed. cut_teardown() has priority over teardown(). Since 1.0.6 cut_startup () cut_startup void cut_startup (void); If you define cut_startup() in your test program, cutter will call your cut_startup() before each your test case is run. cut_startup() has priority over startup(). Since 1.0.6 cut_shutdown () cut_shutdown void cut_shutdown (void); If you define shutdown() in your test program, cutter will call your shutdown() after each your test case is run. cut_shutdown() has priority over shutdown(). Since 1.0.6 cut_add_data() cut_add_data #define cut_add_data(first_data_name, ...) Adds data to use data driven test. e.g.: #include <cutter.h> void data_translate (void); void test_translate (const void *data); static const char* translate (int input) { switch(input) { case 1: return "first"; case 111: return "a hundred eleven"; default: return "unsupported"; } } typedef struct _TranslateTestData { char *translated; int input; } TranslateTestData; static TranslateTestData * translate_test_data_new (char *translated, int input) { TranslateTestData *data; data = malloc(sizeof(TranslateTestData)); data->translated = strdup(translated); data->input = input; return data; } static void translate_test_data_free (TranslateTestData *data) { free(data->translated); free(data); } void data_translate(void) { cut_add_data("simple data", translate_test_data_new("first", 1), translate_test_data_free, "complex data", translate_test_data_new("a hundred eleven", 111), translate_test_data_free, NULL); } void test_translate(const void *data) { const TranslateTestData *test_data = data; cut_assert_equal_string(test_data->translated, translate(test_data->input)); } first_data_name : The first data name. ... : The data and destroy function of the first data, followed optionally by more name/data/destroy_function(CutDestroyFunction) triples. The variable arguments should be terminated by NULL since 1.0.6. Since 1.0.3 cut_add_data_backward_compatibility() cut_add_data_backward_compatibility #define cut_add_data_backward_compatibility(context, ...) cut_add_data_backward_compatibility is deprecated and should not be used in newly-written code. context : ... : cut_set_attributes() cut_set_attributes #define cut_set_attributes(first_attribute_name, ...) Sets attributes of the test. e.g.: #include <cutter.h> void attributes_repeat (void); void test_repeat (void); void attributes_repeat(void) { cut_set_attributes("description", "a test for repeat function", "bug", "111", "priority", "high", NULL); } void test_repeat(void) { cut_assert_equal_string_with_free("XXX", repeat("X", 3)); } first_attribute_name : The first attribute name. ... : The value of the first attribute, followed optionally by more name/value pairs. NULL-terminate is required since 1.0.7. Since 1.0.4 cut_get_current_test_context cut_get_current_test_context #define cut_get_current_test_context() Returns the current test context. The current test context is a thread local object. It means that you don't need to care this if you don't create a new thread in your test. This is only needed to care if you create a new thread. You need to pass the current test context in your test thread to the current test context in a created thread. e.g.: int your_thread_function(void *data) { CutTestContext *test_context = data; cut_set_current_test_context(test_context); ... } void run_your_thread(void) { int result; pthread_t your_thread; result = pthread_create(&your_thread, NULL, your_thread_function, cut_get_current_test_context()); ... } Returns : a CutTestContext. Since 1.0.4 cut_set_current_test_context() cut_set_current_test_context #define cut_set_current_test_context(test_context) Set test_context as the current test context. See cut_get_current_test_context() for more details. test_context : the CutTestContext to be the current test context. Since 1.0.4 cut_set_message () cut_set_messagecut_set_message void cut_set_message (const char *format, ...); cut_set_message has been deprecated since version 1.1.0 and should not be used in newly-written code. Use cut_message() instead. Sets a message to be used by the next assertion. format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. Since 1.0.6 cut_set_message_va_list () cut_set_message_va_listcut_set_message_va_list void cut_set_message_va_list (const char *format, va_list args); cut_set_message_va_list has been deprecated since version 1.1.0 and should not be used in newly-written code. Use cut_message() instead. Sets a message to be used by the next assertion. format : the message format. See the printf() documentation. args : the parameters to insert into the format string. Since 1.0.6 cut_keep_message () cut_keep_messagecut_keep_message void cut_keep_message (void); cut_keep_message has been deprecated since version 1.1.0 and should not be used in newly-written code. Use cut_message() instead. Keeps the current message set by cut_set_message() or cut_set_message_va_list() after the next assertion. Since 1.0.6 cut_message () cut_message void cut_message (const char *format, ...); Specifies optional assertion message. e.g.: cut_assert_equal_string("abc", "def", cut_message("should fail!")); format : the message format. See the printf() documentation. ... : the parameters to insert into the format string. Since 1.1.0 CUT_EXPORT CUT_EXPORT #define CUT_EXPORT Marks a function as a exported function. This is needed for just Windows environment. If you want to run your tests on Windows, you need to use this. Otherwise, you don't need to use this. e.g.: CUT_EXPORT void test_add (void) { ... } Since 1.1.2 See Also Assertions cutter-testing-framework-1.1.7/doc/reference/xml/soupcut-client.xml0000644000175000017500000003445711424024726023674 0ustar koukou ]> Convenience HTTP client API 3 CUTTER Library Convenience HTTP client API API to work as HTTP client. Synopsis SoupCutClient; SoupCutClientClass; SoupCutClient * soupcut_client_new (void); void soupcut_client_set_base (SoupCutClient *client, const gchar *uri); guint soupcut_client_send_message (SoupCutClient *client, SoupMessage *message); guint soupcut_client_get (SoupCutClient *client, const gchar *uri, const gchar *first_query_name, ...); guint soupcut_client_get_n_messages (SoupCutClient *client); SoupMessage * soupcut_client_get_latest_message (SoupCutClient *client); GMainContext * soupcut_client_get_async_context (SoupCutClient *client); Object Hierarchy GObject +----SoupCutClient Properties "async" gboolean : Read / Write Description SoupCutClient works as a HTTP client. It accepts multiple requests and responses are managed by SoupCutClient. SoupCutClient related assertions are also provided. Details SoupCutClient SoupCutClient typedef struct _SoupCutClient SoupCutClient; SoupCutClientClass SoupCutClientClass typedef struct { GObjectClass parent_class; } SoupCutClientClass; soupcut_client_new () soupcut_client_new SoupCutClient * soupcut_client_new (void); Creates and returns a new SoupCutClient Returns : a new SoupCutClient. Since 1.0.8 soupcut_client_set_base () soupcut_client_set_base void soupcut_client_set_base (SoupCutClient *client, const gchar *uri); Set uri as a base uri of client. client : a SoupCutClient. uri : a base uri. Since 1.0.8 soupcut_client_send_message () soupcut_client_send_message guint soupcut_client_send_message (SoupCutClient *client, SoupMessage *message); Send message with client. client remebers all the messages it sent. client : a SoupCutClient. message : a SoupMessage. Returns : a status code of the response. Since 1.0.8 soupcut_client_get () soupcut_client_get guint soupcut_client_get (SoupCutClient *client, const gchar *uri, const gchar *first_query_name, ...); Send a GET request to uri with queries. If the base URI of client is set by soupcut_client_set_base(), the destination URI is composed of the base URI and uri. If not, uri must be a fully qualified URI. client : a SoupCutClient. uri : an URI string. first_query_name : the name of the first query parameter. ... : pairs of query parameter names and values, starting with first_query_name, terminated by NULL Returns : a status code of the response. Since 1.0.8 soupcut_client_get_n_messages () soupcut_client_get_n_messages guint soupcut_client_get_n_messages (SoupCutClient *client); Returns the number of messages client sent. client : a SoupCutClient. Returns : the number of messages. Since 1.0.8 soupcut_client_get_latest_message () soupcut_client_get_latest_message SoupMessage * soupcut_client_get_latest_message (SoupCutClient *client); Returns the latest SoupMessage client sent. client : a SoupCutClient. Returns : the latest SoupMessage. Since 1.0.8 soupcut_client_get_async_context () soupcut_client_get_async_context GMainContext * soupcut_client_get_async_context (SoupCutClient *client); Returns the asynch_context of client. client : a SoupCutClient. Returns : a GMainContext of client, which may be NULL. Since 1.0.8 Property Details The <literal>"async"</literal> property SoupCutClient:async "async" gboolean : Read / Write True if the session is asynchronous.Default value: FALSE See Also Assertions for HTTP client and server cutter-testing-framework-1.1.7/doc/reference/xml/gcut-types.xml0000644000175000017500000001337511424024726023016 0ustar koukou ]> Types for GLib support 3 CUTTER Library Types for GLib support Types that is used in test with GLib support. Synopsis void (*GCutInspectFunction) (GString *string, gconstpointer data, gpointer user_data); #define GCUT_TYPE_ERROR #define GCUT_TYPE_SIZE GType gcut_error_get_type (void); GType gcut_size_get_type (void); Description There are some types to be used in test with GLib support. Details GCutInspectFunction () GCutInspectFunction void (*GCutInspectFunction) (GString *string, gconstpointer data, gpointer user_data); Specifies the type of function which is called when the data element is inspected. It is passed the pointer to the data element, should inspect data and append inspected string to string. string : the GString to be stored inspected result. data : the data element to be inspected. user_data : user data to pass to the function. Since 1.0.6 GCUT_TYPE_ERROR GCUT_TYPE_ERROR #define GCUT_TYPE_ERROR (gcut_error_get_type()) The GType for a boxed type holding a GError reference. Since 1.0.7 GCUT_TYPE_SIZE GCUT_TYPE_SIZE #define GCUT_TYPE_SIZE (gcut_size_get_type()) The GType for gsize type. Since 1.1.3 gcut_error_get_type () gcut_error_get_type GType gcut_error_get_type (void); Returns : gcut_size_get_type () gcut_size_get_type GType gcut_size_get_type (void); Returns : cutter-testing-framework-1.1.7/doc/reference/Makefile.in0000644000175000017500000010232711525654633021441 0ustar koukou# 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@ # -*- mode: makefile -*- #################################### # Everything below here is generic # #################################### 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@ @HAVE_GDK_PIXBUF_TRUE@am__append_1 = \ @HAVE_GDK_PIXBUF_TRUE@ $(top_builddir)/gdkcutter-pixbuf/libgdkcutter-pixbuf.la \ @HAVE_GDK_PIXBUF_TRUE@ $(GDK_PIXBUF_LIBS) @HAVE_LIBSOUP_TRUE@am__append_2 = \ @HAVE_LIBSOUP_TRUE@ $(top_builddir)/soupcutter/libsoupcutter.la \ @HAVE_LIBSOUP_TRUE@ $(LIBSOUP_LIBS) DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/version.xml.in $(top_srcdir)/gtk-doc.make subdir = doc/reference ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = version.xml CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = ja.po CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ MAINTAINERCLEANFILE = Makefile.in # The name of the module. DOC_MODULE = cutter # The top-level SGML file. DOC_MAIN_SGML_FILE = cutter-docs.sgml SOURCE_DIR_OPTIONS = \ --source-dir="$(top_srcdir)/gcutter" \ --source-dir="$(top_srcdir)/cppcutter" \ --source-dir="$(top_srcdir)/gdkcutter-pixbuf" \ --source-dir="$(top_srcdir)/soupcutter" \ `test "$(top_builddir)" != "$(top_srcdir)" && \ echo --source-dir="$(top_builddir)/cutter"` # Extra options to supply to gtkdoc-scan SCAN_OPTIONS = \ --deprecated-guards="CUTTER_DISABLE_DEPRECATED" \ $(SOURCE_DIR_OPTIONS) # Extra options to supply to gtkdoc-scangobj SCANGOBJ_OPTIONS = \ --types="$(srcdir)/$(DOC_MODULE).types" # The directory containing the source code. Relative to $(srcdir) DOC_SOURCE_DIR = ../../cutter # Used for dependencies HFILE_GLOB = \ $(top_builddir)/cutter/cut-version.h \ $(top_srcdir)/cutter/cut-assertions.h \ $(top_srcdir)/cutter/cut-experimental.h \ $(top_srcdir)/cutter/cut-helper.h \ $(top_srcdir)/cutter/cut-multi-process.h \ $(top_srcdir)/cutter/cut-test-utils.h \ $(top_srcdir)/cutter/cut-types.h \ $(top_srcdir)/cutter/cut-features.h \ $(top_srcdir)/cutter/cutter.h \ $(top_srcdir)/gcutter/gcut-assertions.h \ $(top_srcdir)/gcutter/gcut-data.h \ $(top_srcdir)/gcutter/gcut-egg.h \ $(top_srcdir)/gcutter/gcut-enum.h \ $(top_srcdir)/gcutter/gcut-error.h \ $(top_srcdir)/gcutter/gcut-hash-table.h \ $(top_srcdir)/gcutter/gcut-inspect.h \ $(top_srcdir)/gcutter/gcut-list.h \ $(top_srcdir)/gcutter/gcut-object.h \ $(top_srcdir)/gcutter/gcut-process.h \ $(top_srcdir)/gcutter/gcut-test-utils.h \ $(top_srcdir)/gcutter/gcut-value-equal.h \ $(top_srcdir)/gcutter/gcutter.h \ $(top_srcdir)/cppcutter/cppcut-assertions.h \ $(top_srcdir)/cppcutter/cppcutter.h \ $(top_srcdir)/gdkcutter-pixbuf/gdkcut-pixbuf-assertions.h \ $(top_srcdir)/gdkcutter-pixbuf/gdkcut-pixbuf.h \ $(top_srcdir)/gdkcutter-pixbuf/gdkcutter-pixbuf.h \ $(top_srcdir)/soupcutter/soupcut-assertions.h \ $(top_srcdir)/soupcutter/soupcut-client.h \ $(top_srcdir)/soupcutter/soupcut-server.h \ $(top_srcdir)/soupcutter/soupcutter.h #CFILE_GLOB=$(top_srcdir)/cutter/*.c # Headers to ignore IGNORE_HFILES = \ cut-analyzer.h \ cut-assertions-helper.h \ cut-backtrace-entry.h \ cut-context.h \ cut-contractor.h \ cut-crash-backtrace.h \ cut-diff.h \ cut-diff-writer.h \ cut-differ.h \ cut-colorize-differ.h \ cut-readable-differ.h \ cut-unified-differ.h \ cut-string-differ.h \ cut-elf-loader.h \ cut-enum-types.h \ cut-factory-builder.h \ cut-file-stream-reader.h \ cut-gassertions-helper.h \ cut-gpublic.h \ cut-hidden-definitions.h \ cut-iterated-test.h \ cut-listener-utils.h \ cut-listener.h \ cut-loader.h \ cut-mach-o-loader.h \ cut-macros.h \ cut-main.h \ cut-marshalers.h \ cut-module-factory-utils.h \ cut-module-factory.h \ cut-module-impl.h \ cut-module.h \ cut-pe-loader.h \ cut-pipeline.h \ cut-private.h \ cut-process.h \ cut-public.h \ cut-report-factory-builder.h \ cut-report.h \ cut-repository.h \ cut-run-context.h \ cut-runner.h \ cut-sequence-matcher.h \ cut-stream-factory-builder.h \ cut-stream-parser.h \ cut-stream-reader.h \ cut-stream.h \ cut-sub-process-group.h \ cut-sub-process-group.h \ cut-sub-process.h \ cut-test-case.h \ cut-test-container.h \ cut-test-context.h \ cut-test-data.h \ cut-test-iterator.h \ cut-test-result.h \ cut-test-runner.h \ cut-test-suite.h \ cut-test-utils-helper.h \ cut-test.h \ cut-ui-factory-builder.h \ cut-ui.h \ cut-utils.h \ cut-verbose-level.h \ gcut-dynamic-data.h \ cppcut-assertions-helper.h \ cppcut-message.h \ gbsearcharray.h INCLUDES = \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/cppcutter \ -I$(top_srcdir)/gdkcutter-pixbuf \ -I$(top_srcdir)/soupcutter \ -I$(top_srcdir) \ -I$(top_builddir)/cutter \ $(GLIB_CFLAGS) GTKDOC_LIBS = $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/cppcutter/libcppcutter.la $(GLIB_LIBS) \ $(am__append_1) $(am__append_2) # Extra options to supply to gtkdoc-mkdb MKDB_OPTIONS = \ --sgml-mode \ $(SOURCE_DIR_OPTIONS) # Images to copy into HTML directory HTML_IMAGES = \ dark-circle.png \ nested-circle.png \ diff-dark-and-nested-circle.png \ colorized-diff.png # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE) content_files = \ version.xml \ readme.xml \ news.xml \ tutorial.xml \ features.xml \ users.xml \ cutter.xml \ cut-diff.xml \ install-to-debian.xml \ install-to-ubuntu.xml \ install-to-fedora.xml \ install-to-centos.xml \ install-to-freebsd.xml \ install-to-solaris.xml \ install-to-mac-os-x.xml \ install-to-cygwin.xml \ install-to-others.xml # Extra options to supply to gtkdoc-fixxref FIXXREF_OPTIONS = @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) MAIN_SGML_FILE = main.sgml # Other files to distribute EXTRA_DIST = $(content_files) $(HTML_IMAGES) $(MAIN_SGML_FILE) \ $(DOC_MAIN_SGML_FILE) $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt html-build.stamp version.xml.in \ $(generated_xml_files) sf-logo.html overrides.txt ja.po DOC_STAMPS = scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \ $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) \ $(DOC_MODULE)-sections.txt $(generated_xml_files) # include common portion ... generated_xml_files = \ readme.xml \ readme.xml.ja \ news.xml \ news.xml.ja \ tutorial.xml \ tutorial.xml.ja \ features.xml \ features.xml.ja \ users.xml \ users.xml.ja \ cutter.xml \ cut-diff.xml.ja \ install-to-debian.xml \ install-to-debian.xml.ja \ install-to-ubuntu.xml \ install-to-ubuntu.xml.ja \ install-to-fedora.xml \ install-to-fedora.xml.ja \ install-to-centos.xml \ install-to-centos.xml.ja \ install-to-freebsd.xml \ install-to-freebsd.xml.ja \ install-to-solaris.xml \ install-to-solaris.xml.ja \ install-to-mac-os-x.xml \ install-to-mac-os-x.xml.ja \ install-to-cygwin.xml \ install-to-cygwin.xml.ja \ install-to-others.xml \ install-to-others.xml.ja RD2LIB_DIR = $(top_srcdir)/misc RD2REFENTRY_LIB_FILE = rd2refentry-lib.rb RD2REFENTRY_LIB = $(RD2LIB_DIR)/$(RD2REFENTRY_LIB_FILE) RD2DOCBOOK = $(RUBY) -I $(RD2LIB_DIR) $(RD2) -r $(RD2REFENTRY_LIB_FILE) --name=CUTTER RD2DOCBOOK_JA = $(RD2DOCBOOK) --po=$(srcdir)/ja.po all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/reference/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/reference/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) 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-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local dist-hook distclean \ distclean-generic distclean-libtool distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local 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 installdirs \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-local @ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp @ENABLE_GTK_DOC_FALSE@all-local: docs: html-build.stamp #### scan #### scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) @echo 'gtk-doc: Scanning header files' gtkdoc-scan --module=$(DOC_MODULE) \ --source-dir=$(srcdir)/$(DOC_SOURCE_DIR) \ --ignore-headers="$(IGNORE_HFILES)" \ $(SCAN_OPTIONS) $(EXTRA_HFILES) if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) \ --module=$(DOC_MODULE) --output-dir=.; \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i; \ done \ fi touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt: scan-build.stamp @true #### templates #### tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt @echo 'gtk-doc: Rebuilding template files' gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) touch tmpl-build.stamp tmpl.stamp: tmpl-build.stamp @true $(srcdir)/tmpl/*.sgml: @true #### xml #### $(MAIN_SGML_FILE): $(srcdir)/$(DOC_MAIN_SGML_FILE) cp $(srcdir)/$(DOC_MAIN_SGML_FILE) $(MAIN_SGML_FILE) sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(MAIN_SGML_FILE) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) @echo 'gtk-doc: Building XML' gtkdoc-mkdb --module=$(DOC_MODULE) \ --source-dir=$(srcdir)/$(DOC_SOURCE_DIR) \ --output-format=xml \ --expand-content-files="$(expand_content_files)" \ --main-sgml-file=$(MAIN_SGML_FILE) \ $(MKDB_OPTIONS) touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### html-build.stamp: sgml.stamp $(CATALOGS) $(MAIN_SGML_FILE) $(content_files) @echo 'gtk-doc: Building HTML' @echo "English:" rm -rf html mkdir -p html cd html && gtkdoc-mkhtml $(DOC_MODULE) ../$(MAIN_SGML_FILE) if test "x$(HTML_IMAGES)" != "x"; then \ for image in $(HTML_IMAGES); do \ cp $(srcdir)/$$image html/; \ done; \ fi echo 'gtk-doc: Fixing cross-references' gtkdoc-fixxref --module-dir=html \ --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) for catalog in $(CATALOGS); do \ lang=`echo $$catalog | sed 's/.po$$//'`; \ echo "$$lang:"; \ rm -rf $$lang; \ mkdir -p $$lang/html; \ mkdir -p $$lang/xml; \ xml2po -k -p $(srcdir)/$$catalog -l $$lang \ $(MAIN_SGML_FILE) > $$lang/$(DOC_MAIN_SGML_FILE); \ for xml in $(builddir)/xml/*.xml; do \ xml2po -k -p $(srcdir)/$$catalog -l $$lang $$xml > \ $$lang/xml/`basename $$xml`; \ done; \ for file in $(content_files); do \ if test -f $$file; then \ if test -f $$file.$$lang; then \ cp $$file.$$lang $$lang/$$file; \ else \ cp $$file $$lang; \ fi; \ else \ if test -f $(builddir)/$$file.$$lang; then \ cp $(builddir)/$$file.$$lang $$lang/$$file; \ else \ cp $(builddir)/$$file $$lang; \ fi; \ fi; \ done; \ (cd $$lang/html && \ gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)); \ sed -i'' -e "s,/,/$$lang/,g" $$lang/html/index.sgml; \ if test "x$(HTML_IMAGES)" != "x"; then \ for image in $(HTML_IMAGES); do \ cp $(srcdir)/$$image $$lang/html/; \ done; \ fi; \ echo 'gtk-doc: Fixing cross-references'; \ gtkdoc-fixxref --module-dir=$$lang/html \ --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS); \ done touch html-build.stamp ############## clean-local: rm -f *~ *.bak rm -rf .libs distclean-local: rm -rf xml $(REPORT_FILES) \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt maintainer-clean-local: clean rm -rf xml html install-data-local: for catalog in '' $(CATALOGS); do \ if test x"$$catalog" = "x"; then \ dir="html"; \ target_dir=""; \ else \ lang=`echo $$catalog | sed 's/.po$$//'`; \ dir="$$lang/html"; \ target_dir="/$$lang"; \ fi; \ installfiles=`echo $$dir/*`; \ if test "$$installfiles" = "$$dir/*"; then \ echo '-- Nothing to install'; \ else \ $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR)$$target_dir; \ for i in $$installfiles; do \ echo "-- Installing $$i"; \ $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR)$$target_dir; \ done; \ echo "-- Installing $$dir/index.sgml"; \ $(INSTALL_DATA) $$dir/index.sgml \ $(DESTDIR)$(TARGET_DIR)$$target_dir || :; \ if test `which gtkdoc-rebase` != ""; then \ if test "$(DESTDIR)" = ""; then \ $(GTKDOC_REBASE) --relative \ --html-dir=$(DESTDIR)$(TARGET_DIR)$$target_dir; \ else \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) \ --html-dir=$(DESTDIR)$(TARGET_DIR)$$target_dir; \ fi; \ fi; \ fi; \ done uninstall-local: rm -rf $(DESTDIR)$(TARGET_DIR)/* # # Require gtk-doc when making dist # @ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist" @ENABLE_GTK_DOC_FALSE@ @false dist-hook: dist-check-gtkdoc dist-hook-local mkdir $(distdir)/tmpl mkdir $(distdir)/xml mkdir $(distdir)/html -cp -rp tmpl/*.sgml $(distdir)/tmpl -cp -rp xml/*.xml $(distdir)/xml -cp -rp html/* $(distdir)/html for catalog in $(CATALOGS); do \ lang=`echo $$catalog | sed 's/.po$$//'`; \ mkdir -p $(distdir)/$$lang/html; \ mkdir -p $(distdir)/$$lang/xml; \ cp -rp $$lang/html/* $(distdir)/$$lang/html; \ cp -rp $$lang/xml/* $(distdir)/$$lang/html; \ cp -rp $$lang/$(DOC_MAIN_SGML_FILE) $(distdir)/$$lang/; \ done cp -rp $(DOC_MODULE).types $(distdir)/ cp -rp $(DOC_MODULE)-sections.txt $(distdir)/ cd $(distdir) && rm -f $(DISTCLEANFILES) -$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs $(DOC_MODULE)-overrides.txt: $(srcdir)/overrides.txt cp $< $@ $(DOC_MODULE).pot: sgml-build.stamp xml2po -k -o $(DOC_MODULE).pot \ $(srcdir)/$(DOC_MAIN_SGML_FILE) $(srcdir)/xml/*.xml update-po: Makefile sgml.stamp $(MAKE) $(DOC_MODULE).pot for catalog in $(CATALOGS); do \ xml2po -k -u $$catalog \ $(srcdir)/$(DOC_MAIN_SGML_FILE) \ $(srcdir)/xml/*.xml; \ done news.xml: $(top_srcdir)/NEWS $(RD2REFENTRY_LIB) news.xml.ja $(RD2DOCBOOK) $(top_srcdir)/NEWS > news.xml news.xml.ja: $(top_srcdir)/NEWS.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/NEWS.ja > news.xml.ja readme.xml: $(top_srcdir)/README $(RD2REFENTRY_LIB) readme.xml.ja $(RD2DOCBOOK) $(top_srcdir)/README > readme.xml readme.xml.ja: $(top_srcdir)/README.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/README.ja > readme.xml.ja tutorial.xml: $(top_srcdir)/TUTORIAL $(RD2REFENTRY_LIB) tutorial.xml.ja $(RD2DOCBOOK) $(top_srcdir)/TUTORIAL > tutorial.xml tutorial.xml.ja: $(top_srcdir)/TUTORIAL.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/TUTORIAL.ja > tutorial.xml.ja features.xml: $(top_srcdir)/FEATURES $(RD2REFENTRY_LIB) features.xml.ja $(RD2DOCBOOK) $(top_srcdir)/FEATURES > features.xml features.xml.ja: $(top_srcdir)/FEATURES.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/FEATURES.ja > features.xml.ja users.xml: $(top_srcdir)/USERS $(RD2REFENTRY_LIB) users.xml.ja $(RD2DOCBOOK) $(top_srcdir)/USERS > users.xml users.xml.ja: $(top_srcdir)/USERS.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/USERS.ja > users.xml.ja cutter.xml: $(top_srcdir)/doc/cutter.rd $(RD2REFENTRY_LIB) cutter.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/cutter.rd > cutter.xml cutter.xml.ja: $(top_srcdir)/doc/cutter.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/cutter.rd.ja > cutter.xml.ja cut-diff.xml: $(top_srcdir)/doc/cut-diff.rd $(RD2REFENTRY_LIB) cut-diff.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/cut-diff.rd > cut-diff.xml cut-diff.xml.ja: $(top_srcdir)/doc/cut-diff.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/cut-diff.rd.ja > cut-diff.xml.ja install-to-debian.xml: $(top_srcdir)/doc/install-to-debian.rd $(RD2REFENTRY_LIB) install-to-debian.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-debian.rd > install-to-debian.xml install-to-debian.xml.ja: $(top_srcdir)/doc/install-to-debian.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-debian.rd.ja > install-to-debian.xml.ja install-to-ubuntu.xml: $(top_srcdir)/doc/install-to-ubuntu.rd $(RD2REFENTRY_LIB) install-to-ubuntu.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-ubuntu.rd > install-to-ubuntu.xml install-to-ubuntu.xml.ja: $(top_srcdir)/doc/install-to-ubuntu.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-ubuntu.rd.ja > install-to-ubuntu.xml.ja install-to-fedora.xml: $(top_srcdir)/doc/install-to-fedora.rd $(RD2REFENTRY_LIB) install-to-fedora.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-fedora.rd > install-to-fedora.xml install-to-fedora.xml.ja: $(top_srcdir)/doc/install-to-fedora.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-fedora.rd.ja > install-to-fedora.xml.ja install-to-centos.xml: $(top_srcdir)/doc/install-to-centos.rd $(RD2REFENTRY_LIB) install-to-centos.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-centos.rd > install-to-centos.xml install-to-centos.xml.ja: $(top_srcdir)/doc/install-to-centos.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-centos.rd.ja > install-to-centos.xml.ja install-to-freebsd.xml: $(top_srcdir)/doc/install-to-freebsd.rd $(RD2REFENTRY_LIB) install-to-freebsd.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-freebsd.rd > install-to-freebsd.xml install-to-freebsd.xml.ja: $(top_srcdir)/doc/install-to-freebsd.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-freebsd.rd.ja > install-to-freebsd.xml.ja install-to-solaris.xml: $(top_srcdir)/doc/install-to-solaris.rd $(RD2REFENTRY_LIB) install-to-solaris.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-solaris.rd > install-to-solaris.xml install-to-solaris.xml.ja: $(top_srcdir)/doc/install-to-solaris.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-solaris.rd.ja > install-to-solaris.xml.ja install-to-mac-os-x.xml: $(top_srcdir)/doc/install-to-mac-os-x.rd $(RD2REFENTRY_LIB) install-to-mac-os-x.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-mac-os-x.rd > install-to-mac-os-x.xml install-to-mac-os-x.xml.ja: $(top_srcdir)/doc/install-to-mac-os-x.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-mac-os-x.rd.ja > install-to-mac-os-x.xml.ja install-to-cygwin.xml: $(top_srcdir)/doc/install-to-cygwin.rd $(RD2REFENTRY_LIB) install-to-cygwin.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-cygwin.rd > install-to-cygwin.xml install-to-cygwin.xml.ja: $(top_srcdir)/doc/install-to-cygwin.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-cygwin.rd.ja > install-to-cygwin.xml.ja install-to-others.xml: $(top_srcdir)/doc/install-to-others.rd $(RD2REFENTRY_LIB) install-to-others.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-others.rd > install-to-others.xml install-to-others.xml.ja: $(top_srcdir)/doc/install-to-others.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-others.rd.ja > install-to-others.xml.ja upload: docs rm -rf tmp/ mkdir -p tmp/ cp -rp html/ tmp/reference for catalog in $(CATALOGS); do \ lang=`echo $$catalog | sed 's/.po$$//'`; \ cp -rp $$lang/html/ tmp/reference/$$lang/; \ done chmod -R g+w tmp/reference ruby $(top_srcdir)/misc/prepare-gtk-doc-html-for-publishing.rb \ --template-directory=$(srcdir) --title "$(PACKAGE_TITLE)" \ tmp/reference/*.html ruby $(top_srcdir)/misc/prepare-gtk-doc-html-for-publishing.rb \ --template-directory=$(srcdir) --title "$(PACKAGE_TITLE)" \ --language=ja tmp/reference/ja/*.html rsync -avz --delete tmp/reference/ $(SF_HTDOCS)/reference/ # 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: cutter-testing-framework-1.1.7/doc/reference/tutorial.xml.ja0000644000175000017500000020134111525655563022351 0ustar koukou チュートリアル Cutterライブラリ チュートリアル Cutterの使い方 はじめに スタックを実現するプログラム(ライブラリ)をC言語で作成する。プログラム作成はテストを作成しながら行う。テストの作成にはC言語用のテスティングフレームワークであるCutterを用いる。 プログラムのビルドシステムにはGNUビルドシステム(GNU Autoconf/GNU Automake/GNU Libtool)を使用する。GNUビルドシステムはビルド環境の差異を吸収する。これによりプログラム・テストを複数の環境で容易にビルドできるようになる。 大きなコストをかけずにプログラム本体が複数の環境で動作するのであれば、その方がよい。さらにテストもその環境で動作するのならば、プログラム本体がその環境で正しく動作することを容易に検証できる。プログラム本体だけではなく、テストも複数の環境で容易に動作することは重要である。 Cutterが依存しているライブラリはGLibのみである。GLibはUNIX系のシステムだけではなく、WindowsやMac OS X上でも動作する移植性の高いライブラリである。CutterはGLibを利用することにより移植性の高い状態を保ちつつ豊富なテスト支援機能を提供するxUnit系のテスティングフレームワークである。 以下、スタックを作成しながらCutterの使い方について述べる。なお、Cutterはインストールされているものとする。 このプログラムのソースコード一式はsample/stack/以下にある。 ディレクトリ構成 まず、プログラムを作成するためのディレクトリを用意する。ディレクトリはstackとする。 % mkdir -p /tmp/stack % cd /tmp/stack 続いて、stack/ディレクトリ以下にビルド補助ファイル用ディレクトリconfig/、プログラム用ディレクトリsrc/、テストプログラム用ディレクトリtest/を作成する。 [stack]% mkdir config src test つまり、ディレクトリ構成は以下のようになる。 stack/ -+- config/ ビルド補助用ディレクトリ | +- src/ ソースファイル用ディレクトリ | +- test/ テストプログラム用ディレクトリ GNUビルドシステム化 GNUビルドシステムでは、コマンドを実行し、いくつかのファイルを自動生成する。これらのコマンドは、autogen.shというシェルスクリプトを作成し、そこから呼び出すのが一般的である。ここでも、その慣習に従う。 autogen.sh: #!/bin/sh run() { $@ if test $? -ne 0; then echo "Failed $@" exit 1 fi } run aclocal ${ACLOCAL_ARGS} run libtoolize --copy --force run autoheader run automake --add-missing --foreign --copy run autoconf autogen.shに実行権を付けることを忘れないこと。 [stack]% chmod +x autogen.sh run()はコマンドの実行結果を確認するための便利のための関数である。実行しているコマンドはそれぞれ以下のためである。 aclocal: Automakeが利用するマクロをaclocal.m4に集める libtoolize: libtoolを使用するために必要なファイルを用意 autoheader: configureスクリプトが利用するconfig.h.inファイルを作成 automake: configureスクリプトが利用するMakefile.inを生成 autoconf: configureスクリプトを生成 もし、Cutterをaclocalと異なるprefixでインストールしている場合はACLOCAL_ARGS環境変数を指定する。この環境変数はautogen.sh内で参照している。ここでは、prefixを$HOME/localとしてCutterをインストールしたものとする。 [stack]% export ACLOCAL_ARGS="-I $HOME/local/share/aclocal" この時点でautogen.shを実行すると以下のようになる。 [stack]% ./autogen.sh aclocal: `configure.ac' or `configure.in' is required Failed aclocal Autoconf用のファイルであるconfigure.acを用意する必要がある。 configure.ac autogen.shのための最低限のconfigure.acは以下の通りである。 configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL AC_CONFIG_FILES([Makefile]) AC_OUTPUT configure.acを用意してもう一度autogen.shを実行すると以下のようになる。 [stack]% ./autogen.sh Putting files in AC_CONFIG_AUX_DIR, `config'. configure.ac:7: installing `config/install-sh' configure.ac:7: installing `config/missing' automake: no `Makefile.am' found for any configure output Failed automake --add-missing --foreign --copy 今度はAutomakeのためにMakefile.amを用意する必要がある。 Makefile.am autogen.shのためだけであれば空のMakefile.amで構わない。 [stack]% touch Makefile.am [stack]% ./autogen.sh Putting files in AC_CONFIG_AUX_DIR, `config'. これでconfigureスクリプトが生成される。この時点で一般的なソフトウェアのようにconfigure; make; make installができるようになる。 [stack]% ./configure ... [stack]% make [stack]% make install ただし、ビルドするものもインストールするものも何もないため、今は何も起きない。 はじめてのテスト作成 最低限のビルド環境が整ったので、テストの作成にはいる。まずは、新しく作ったばかりのスタックは空であることをテストする。コードにすると以下の通りである。 void test_new_stack (void) { Stack *stack; stack = stack_new(); if (stack_is_empty(stack)) PASS; else FAIL; } ここでは、上記のテストをCutterのテストとして動作させる。 テストプログラムの作成 テストプログラムはtest/以下に作成する。ここではtest/test-stack.cとして作成するものとする。 まず、Cutterを使うためにcutter.hをincludeする。 test/test-stack.c: #include <cutter.h> また、テスト対象のスタックの実装のAPIが書かれているstack.hもincludeする。(stack.hは後で作成する。) test/test-stack.c: #include <stack.h> 続いて、このスタックのAPIを用いてテストを作成する。 test/test-stack.c: void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); } cut_assert()は引数が0ならテストが失敗、0以外ならテストが成功と判断するマクロである。Cutterのテストとはcut_XXX()マクロを使用して、特定の状況で望んだ動作をしているかを検証するプログラムを作成するということである。 以下に、「作成したばかりのスタックは空である」ということを検証するテストのソースコード全体を示す。 test/test-stack.c: #include <cutter.h> #include <stack.h> void test_new_stack (void); void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); } テストのビルド Cutterの各テストは共有ライブラリになる。上記で作成したテストを共有ライブラリとしてビルドするために、Makefile.amを変更する。 test/以下でのビルド設定 現在のMakefile.amは空である。 まず、make経由でaclocalが実行された場合にもautogen.sh用に設定したACLOCAL_ARGS環境変数が使われるように以下を追記する。 Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS 次に、サブディレクトリであるtest/以下のtest/test-stack.cをビルドするためにはMakefile.amにtest/以下がサブディレクトリとして存在することを指定する。 Makefile.am: ... SUBDIRS = test Makefile.amを変更した後にmakeを実行すると、makeがMakefile.amの変更を検出し、Makefileなどを自動的に更新する。 [stack]% make cd . && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign Makefile cd . && /bin/sh ./config.status Makefile config.status: creating Makefile Making all in test make[1]: ディレクトリ `/tmp/stack/test' に入ります make[1]: *** ターゲット `all' を make するルールがありません. 中止. make[1]: ディレクトリ `/tmp/stack/test' から出ます make: *** [all-recursive] エラー 1 test/以下もビルドしにいこうとしているのがわかる。ただし、test/Makefileがないためtest/以下でのビルドは失敗している。 test/以下でビルドを行うようにするため、test/Makefile.amを作成する。また、configureがtest/Makefileを生成するようにconfigure.acに指定する。 test/以下でのmakeが失敗しないようにするには、空のtest/Makefile.amでもよい。 [stack]% touch test/Makefile.am あとはconfigure.acにtest/Makefileを生成するように指定すればmakeは通るようになる。 configure.ac: ... AC_CONFIG_FILES([Makefile test/Makefile]) ... 実際にmakeを実行すると自動で再びconfigureが走り、test/Makefileが生成され、test/以下でのmakeが失敗しなくなる。 [stack]% make ... config.status: creating test/Makefile config.status: creating src/config.h config.status: src/config.h is unchanged config.status: executing depfiles commands Making all in test make[1]: ディレクトリ `/tmp/stack/test' に入ります make[1]: `all' に対して行うべき事はありません. make[1]: ディレクトリ `/tmp/stack/test' から出ます make[1]: ディレクトリ `/tmp/stack' に入ります make[1]: `all-am' に対して行うべき事はありません. make[1]: ディレクトリ `/tmp/stack' から出ます test/test_stack.soのビルド それではtest/test-stack.cを共有ライブラリとしてビルドできるようにtest/Makefile.amを編集する。テスト用の共有ライブラリは「test_」から始まる名前にする(「test_」の前に「lib」が付いても良い)。また、テストプログラムはインストールする必要がないため「noinst_」を使う。 test/Makefile.am: noinst_LTLIBRARIES = test_stack.la テストの共有ライブラリはCutterが提供するテスト実行コマンドcutterから動的に読み込まれる。動的に読み込まれる共有ライブラリは、libtoolに-moduleオプションを渡す必要がある。また、-moduleオプションを指定する場合-rpathも指定する必要がある。そこで、LDFLAGSを以下のように指定する。-avoid-versionはテストの共有ライブラリにはバージョン番号を付ける必要がないため指定している。-no-undefinedは未定義のシンボルがある場合にエラーを報告するオプションである。環境によっては-no-undefinedを指定しないと共有ライブラリが作成されないため指定している。(例えば、Windows上でDLLを作成する場合) test/Makefile.am: ... LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test/test_stack.laのビルド(test_stack.soはtest/.libs/以下に作成される)にはtest/test-stack.cを使用するので、それを指定する。 test/Makefile.am: ... test_stack_la_SOURCES = test-stack.c これでtest/test_stack.laがビルドできる。 [stack]% make ... cd .. && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign test/Makefile test/Makefile.am: required file `config/depcomp' not found test/Makefile.am: `automake --add-missing' can install `depcomp' make[1]: *** [Makefile.in] エラー 1 ... config/depcompを生成するには--add-missingオプション付きでautomakeを実行する必要がある。これにはautogen.shを使用できる。また、configureを再実行する必要もある。 [stack]% ./autogen.sh [stack]% ./configure これでmakeを実行することによりtest/test_stack.laができるようになる。 [stack]% make ... test-stack.c:1:20: error: cutter.h: そのようなファイルやディレクトリはありません test-stack.c:2:19: error: stack.h: そのようなファイルやディレクトリはありません test-stack.c: In function ‘test_new_stack’: test-stack.c:9: error: ‘Stack’ undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: ‘stack’ undeclared (first use in this function) make[1]: *** [test-stack.lo] エラー 1 make[1]: ディレクトリ `/tmp/stack/test' から出ます make: *** [all-recursive] エラー 1 ただし、上記のようにCutterを使用する設定を行っていないためcutter.hが読み込めない。また、スタックの実装もないためstack.hの読み込みにも失敗する。 Cutterの使用 まずは、cutter.hを読み込めるようにする。Cutterはaclocal用のマクロファイルを提供している。そのため、容易にGNUビルドシステムから利用することができる。 まず、configure.acにCutterを検出するコードを追加する。 configure.ac: ... AC_CHECK_CUTTER AC_CONFIG_FILES([Makefile test/Makefile]) ... また、test/Makefile.amでは検出したCutter用の設定を利用する。 test/Makefile.am: ... INCLUDES = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) ... 現時点での完全なconfigure.ac、Makefile.am、test/Makefile.amは以下のようになる。 configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL AC_CHECK_CUTTER AC_CONFIG_FILES([Makefile test/Makefile]) AC_OUTPUT Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = test test/Makefile.am: noinst_LTLIBRARIES = test_stack.la INCLUDES = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c AC_CHECK_CUTTERマクロ内では一般的なパッケージ情報管理ツールであるpkg-configを使用している。もし、Cutterをpkg-configと異なるprefixでインストールしている場合はPKG_CONFIG_PATH環境変数を指定する。この環境変数はpkg-configが.pcファイルを検索するために利用する。ここではprefixを$HOME/localとしてCutterをインストールしたものとする。 [stack]% export PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig 変更後、makeを実行すると自動的にconfigureが実行され、Cutterを利用したビルドが行われる。 [stack]% make ... test-stack.c:2:19: error: stack.h: そのようなファイルやディレクトリはありません test-stack.c: In function ‘test_new_stack’: test-stack.c:9: error: ‘Stack’ undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: ‘stack’ undeclared (first use in this function) make[1]: *** [test-stack.lo] エラー 1 make[1]: ディレクトリ `/tmp/stack/test' から出ます make: *** [all-recursive] エラー 1 cutter.hが読み込めないというエラーがなくなった。 スタックAPIの作成 次はstack.hが読み込めないエラーを解消する。 スタックの実装はsrc/以下に作成するので、スタックのAPIであるstack.hはsrc/stack.hに置く。 [stack]% touch src/stack.h インクルードパスを設定し、テストプログラムからstack.hを読み込めるようにする。 test/Makefile.am: ... INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src ... makeを実行するとstack.hが読み込めないエラーが解消されているのが分かる。 [stack]% make ... test-stack.c: In function ‘test_new_stack’: test-stack.c:9: error: ‘Stack’ undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: ‘stack’ undeclared (first use in this function) make[1]: *** [test-stack.lo] エラー 1 make[1]: ディレクトリ `/tmp/stack/test' から出ます make: *** [all-recursive] エラー 1 残りのエラーがStack型が宣言されていないことだけになった。 Stack型の宣言 src/stack.hにStack型を宣言し、テストプログラムをビルドできるようにする。 src/stack.h: #ifndef __STACK_H__ #define __STACK_H__ typedef struct _Stack Stack; #endif stack_new()が宣言されていないため警告がでるが共有ライブラリを作成することはできる。 [stack]% make ... test-stack.c: In function ‘test_new_stack’: test-stack.c:10: warning: assignment makes pointer from integer without a cast ... [stack]% file test/.libs/test_stack.so test/.libs/test_stack.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 注: Cygwin上では未解決のシンボルがあるときは作成できない。Cygwin環境の場合は気にせずに次に進むこと。 stack_new()/stack_is_empty()の宣言 stack_new()、stack_is_empty()を宣言し、警告を解消する。 src/stack.h: ... Stack *stack_new (void); int stack_is_empty (Stack *stack); ... makeをして警告がでないことを確認する。 [stack]% make テスト起動 共有ライブラリが作成できたので、cutterコマンドでこのテストを起動できる。 [stack]% cutter test/ cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new stack_new()が定義されていないため読み込みに失敗するが、テストプログラムが読み込まれることは確認できる。 注: Cygwin上では未解決のシンボルがあるときはDLL作成できないので、エラーにならず、「0個のテストを実行して失敗しなかった」結果が報告される。以降の作業の中でスタックを実装し、未解決のシンボルが解決されればDLLが作成され、テストが実行できるようになる。それまではテストの実行結果が異なる。Cygwin環境の場合は気にせずに次に進むこと。 テスト起動の自動化 GNUビルドシステムでは一般的にmake checkでテストが起動する。スタックの実装でも同様にテストが起動するようにする。 まず、テストを起動するスクリプトtest/run-test.shを作成する。cutterコマンドのパスは環境変数CUTTERで受け取ることにする。 test/run-test.sh: #!/bin/sh export BASE_DIR="`dirname $0`" $CUTTER -s $BASE_DIR "$@" $BASE_DIR 実行権を付けることを忘れないこと。 [stack]% chmod +x test/run-test.sh test/Makefile.amにテスト起動スクリプトとしてtest/run-test.shを使うことを指定する。 test/Makefile.am: TESTS = run-test.sh TESTS_ENVIRONMENT = CUTTER="$(CUTTER)" ... TESTS_ENVIRONMENTではcutterコマンドのパスを環境変数CUTTERで渡している。cutterコマンドのパスはconfigure.ac内に追加したAC_CHECK_CUTTERが検出している。 make -s checkでテストが走ることを確認する。-sオプションはmakeの出力を抑えるオプション(silent)であり、これを指定することによりテスト結果が見やすくなる。 [stack]% make -s check Making check in test cutter: symbol lookup error: ./.libs/test_stack.so: undefined symbol: stack_new FAIL: run-test.sh ================================ 1 of 1 tests failed Please report to you@example.com ================================ ... 注: 前述のとおり、Cygwin上ではDLLが作成できないため、エラーは発生しない。Cygwin環境の場合は実行結果が異なっても気にせずに次に進むこと。 test/run-test.shの単独実行のサポート make -s checkではビルドログなどテスト結果以外の出力がでて、テスト結果が埋もれてしまう。そこで、make -s check経由ではなくtest/run-test.shを実行できるようにする。 まず、test/run-test.shを環境変数CUTTERが指定されていない場合は、cutterコマンドのパスを自動的に検出する。さらにmake check経由でtest/run-test.shが起動された場合はmakeを実行し、必要なファイルをビルドする。 test/run-test.sh: #!/bin/sh export BASE_DIR="`dirname $0`" top_dir="$BASE_DIR/.." if test -z "$NO_MAKE"; then make -C $top_dir > /dev/null || exit 1 fi if test -z "$CUTTER"; then CUTTER="`make -s -C $BASE_DIR echo-cutter`" fi $CUTTER -s $BASE_DIR "$@" $BASE_DIR このtest/run-test.shに対応するためにtest/Makefile.amを以下のように変更する。 test/Makefile.am: ... TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" ... echo-cutter: @echo $(CUTTER) test/Makefile.am全体は以下のようになる。 test/Makefile.am: TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) test/run-test.shを直接実行してテストが起動することを確認する。 [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new 注: Cygwin環境ではエラーは発生しない。 ここからはmake -s checkではなくtest/run-test.shを使用する。これは必要な情報のみが出力され、本当に興味のあるテストの結果が埋もれてしまうのを防ぐためである。 また、スタックの実装を行う前にテストの実行環境を整備しているのは、テストを実行するコストを下げるためである。これは、テストを実行することが面倒になるとテストを実行しなくなり、その結果、プログラムの品質低下につながるためである。 最初にテスト環境の整備を行うと、その分、プログラム本体の開発着手が遅れてしまう。しかし、プログラム本体が開発・保守され続ける間は常にテストを実行し、品質を保持する必要があるため、最初にテスト環境整備に当てたコストは回収可能である。今後、快適に品質の高いプログラムの開発を行うために、最初にテスト環境の整備を行うことは重要である。 スタックの実装 テスト環境の整備ができたため、スタックの実装に入る。 簡単なstack_new()の実装 まず、stack_new()を定義し、実行時エラーの原因を解決する。 スタックの実装はsrc/stack.cで行う。簡単なstack_new()の実装は以下の通りである。 src/stack.c: #include <stdlib.h> #include "stack.h" Stack * stack_new (void) { return NULL; } src/libstack.laのビルド それでは、makeでsrc/stack.cをビルドできるようにする。 まず、test/以下をビルド対象に加えたように、src/以下もビルド対象とする。 Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = src test configure.ac: ... AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) ... これでsrc/以下もビルド対象となる。 [stack]% test/run-test.sh configure.ac:13: required file `src/Makefile.in' not found make: *** [Makefile.in] エラー 1 src/Makefile.amを作成するとこのエラーはなくなる。 [stack]% touch src/Makefile.am [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new 注: Cygwin環境ではエラーは発生しない。 makeは通るようになるが、この時点ではsrc/stack.cはビルドされないし、テストプログラムもlibstack.soをリンクしていないのでstack_new()が定義されていないエラーは変わらない。 src/Makefile.amに以下を追加し、src/stack.cからlibstack.soを作成する。 src/Makefile.am: lib_LTLIBRARIES = libstack.la LDFLAGS = -no-undefined libstack_la_SOURCES = stack.c makeでlibstack.soが生成できるようになるはずである。 [stack]% make ... make[1]: ディレクトリ `/tmp/stack/src' に入ります Makefile:275: .deps/stack.Plo: そのようなファイルやディレクトリはありません make[1]: *** ターゲット `.deps/stack.Plo' を make するルールがありません. 中止. ... 上記のエラーを修正するためにconfigureをもう一度実行する必要がある。 [stack]% ./configure makeでsrc/.libs/libstack.so.0.0.0を生成することができる。 [stack]% make [stack]% file src/.libs/libstack.so.0.0.0 src/.libs/libstack.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 注: Cygwin上ではsrc/.libs/cyglibstack.dllが作成される。 src/libstack.laのリンク libstack.soはできたがテストプログラムにはリンクしていないので、まだ実行時エラーは発生する。 [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new 注: Cygwin環境ではエラーは発生しない。 libstack.soをリンクするためにtest/Makefile.amを以下のように変更する。 test/Makefile.am: ... LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la ... Cygwin環境の場合はsrc/.libs/以下に生成されるスタックを実装したDLLを利用するために、src/.libs/にパスを通す必要がある。そのため、以下のようにtest/run-test.shでcutterを実行する前にPATHを設定する。 test/run-test.sh: ... case `uname` in CYGWIN*) PATH="$top_dir/src/.libs:$PATH" ;; Darwin) DYLD_LIBRARY_PATH="$top_dir/src/.libs:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH ;; *BSD) LD_LIBRARY_PATH="$top_dir/src.libs:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH ;; *) : ;; esac $CUTTER -s $BASE_DIR "$@" $BASE_DIR テストプログラムを再リンクする必要があるため、一度make cleanしてからビルドしなおす。 [stack]% make clean [stack]% make [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_is_empty 今まではstack_new()が見つからずにエラーが発生していたが、stack_is_empty()が見つからないというエラーに変わった。これにより、libstack.soがリンクされていることが確認できた。 注: Cygwin環境ではエラーは発生しない。 stack_is_empty()の実装 テストプログラム中ではstack_is_empty()の結果を以下のようにテストしている。 test/test-stack.c: ... cut_assert(stack_is_empty(stack)); ... つまり、stack_is_empty()が真を返すことをテストしている。よって、src/stack.cでのstack_is_empty()は真を返す必要がある。 src/stack.c: ... #define TRUE 1 #define FALSE 0 ... int stack_is_empty (Stack *stack) { return TRUE; } src/stack.c全体は以下のようになる。 src/stack.c: #include <stdlib.h> #include "stack.h" #define TRUE 1 #define FALSE 0 Stack * stack_new (void) { return NULL; } int stack_is_empty (Stack *stack) { return TRUE; } このstack_is_empty()の実装は常に真を返すため、テストは成功するはずである。 [stack]% test/run-test.sh . Finished in 0.000028 seconds 1 test(s), 1 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed 「.」がひとつ表示されているのは1つのテストがパスしたことを表している。現在は1つしかテストがないので1つのテストにパスしたということはすべてのテストにパスしたということである。 環境によっては表示が緑になっているはずである。これはテストがパスしているので次に進んでもよいという意味である。 テストが動作することが確認できたので、以降ではテストを作成しながらスタックの実装を完成させる。 pushの実装 まずはpushを実装する。今回の実装では、スタックにはintのみを格納できることする。 pushのテスト pushをした後はスタックのサイズが1になり、スタックは空ではなくなるはずである。これをテストにすると以下のようになる。 test/test-stack.c: ... void test_push (void); ... void test_push (void) { Stack *stack; stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } テストを実行すると、stack_get_size()が定義されていないため実行時エラーになる。 [stack]% test/run-test.sh cutter: symbol lookup error: ./test/.libs/test_stack.so: undefined symbol: stack_get_size 注: Cygwin環境ではエラーは発生しない? このテストをパスするようにpushを実装する。 cut_stack_push()の実装 まずは、パスしなくても良いのでテストが動くようにstack_get_size()とstack_push()を実装する。 まず、src/stack.hに宣言を追加する。 src/stack.h: ... int stack_get_size (Stack *stack); void stack_push (Stack *stack, int value); ... 続いてsrc/stack.cに定義を追加する。 src/stack.c: ... int stack_get_size (Stack *stack) { return 0; } void stack_push (Stack *stack, int value) { } stack_get_size()が0を返しているのは、最初のstack_get_size()は以下のように0を期待されているからである。 test/test-stack.c: ... stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); ... pushの実装ができたのでテストを実行する。 [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:23: test_push() Finished in 0.000113 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed 「F」はテストが失敗(Failure)したことを表している。環境によっては表示が赤くなっているはずである。これは、テストがパスしていないので先に進むことは危険であることを示している。popの実装に移る前にテストをパスさせるようにpushを実装を改良するべきだということである。 cutterからのメッセージでは、test/test-stack.cの23行目、test_push()関数の中でstack_get_size(stack)の値が1ではなく0のために失敗したということを表している。該当する行は以下の通りである。 test/test-stack.c:23: cut_assert_equal_int(1, stack_get_size(stack)); これはstack_get_size()が常に0を返しているためである。stack_push()された後には内部のカウンタを1つ進める必要がある。 メモリ開放 今まではstack_new()でNULLを返していたが、test_pushテストをパスするためには内部にカウンタを持つ必要があるため、メモリを割り当てる必要がある。メモリを割り当てた場合、使用済のメモリを開放する必要がある。 例えば、test_new_stack()では以下のようにする必要がある。 void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); stack_free(stack); } しかし、stack_free()の前のcut_assert()が失敗した場合はその時点で処理が終了してしまうため、stack_free()が呼ばれずメモリリークが発生する。(ただし、テストプログラムはすぐに終了する短命なプログラムため、害が大きくなることは少ない。) Cutterではテストの前後に必ず実行される関数を設定することができる。それがcut_setup()/cut_teardown()である。これらはテストが成功した場合も失敗した場合も呼ばれるためテスト中で割り当てたメモリを確実に開放する処理などに使うことができる。 test_new_stack()をcut_setup()/cut_teardown()を使って確実にメモリを開放するようにすると以下のようになる。 test/test-stack.c: ... static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } ... 同様に、test_push()でも、関数内のローカル変数stackを使わずにファイル中でstaticなstackを使用すれば確実にメモリを開放できる。 test/test-stack.c: ... void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } ... cut_setup()/cut_teardown()を使用したtest/test-stack.c全体は以下のようになる。 test/test-stack.c: #include <cutter.h> #include <stack.h> void test_new_stack (void); void test_push (void); static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } この変更の後でもテストが変更前と同じ結果を返すことを確認する。 [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:35: test_push() Finished in 0.000084 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed stack_new()/stack_free()の実装 それでは、stack_new()でメモリを割り当て、stack_free()で開放する処理を実装する。 まず、src/stack.hにstack_free()を宣言する。 src/stack.h: ... void stack_free (Stack *stack); ... 続いて、src/stack.cにStackを定義する。Stackはスタックのサイズを保存するフィールドを含む。 src/stack.c: ... struct _Stack { int size; }; ... stack_new()でStackのためのメモリを割り当て、stack_free()で開放する。 src/stack.c: ... Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; return stack; } void stack_free (Stack *stack) { free(stack); } ... この変更の後でもテストが変更前と同じ結果を返すことを確認する。 [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:35: test_push() Finished in 0.000113 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed stack_push()の本実装 Stackにスタックサイズを持つことができるようになったので、これを使用してテストをパスするようにstack_push()/stack_get_size()を実装する。 src/stack.c: ... int stack_get_size (Stack *stack) { return stack->size; } void stack_push (Stack *stack, int value) { stack->size++; } pushする毎にスタックサイズを増やし、そのサイズを返すようにした。これで今まで失敗していたstack_get_size()のテストがパスするはずである。 [stack]% test/run-test.sh .F 1) Failure: test_push expected: <!stack_is_empty(stack)> is not FALSE/NULL test/test-stack.c:36: test_push() Finished in 0.000113 seconds 2 test(s), 3 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed 期待通りstack_get_size()のテストはパスしたがその後のtest/test-stack.cの36行目、stack_is_empty()で失敗している。 test/test-stack.c:36: cut_assert(!stack_is_empty(stack)); スタックにpushしたら空ではなくなるはずである。 stack_is_empty()の本実装 スタックが空なのはスタックサイズが0のときである。よって、stack_is_empty()の実装は以下のようになる。 src/stack.c: ... int stack_is_empty (Stack *stack) { return stack->size == 0; } ... テストを実行し、すべてのテストにパスすることを確認する。 % test/run-test.sh .. Finished in 0.000036 seconds 2 test(s), 4 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed pushのテストもパスし、既存のスタックを作った直後の場合のテストもパスしたままである。すべてのテストがパスしたため、結果表示も緑に戻った。これで安心してpopの実装に進むことができる。 popの実装 pushが実装できたので、次はpushで入れたデータを取り出すpopを実装する。 popのテスト popをすると最後にpushした値が順番に返ってくる。また、popする毎にスタックサイズが減り、最後は空になる。これをテストにすると以下のようになる。 test/test-stack.c: ... void test_pop (void); ... void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } テストを走らせる。 [stack]% test/run-test.sh ..cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_pop stack_pop()を定義していないためエラーが発生している。エラーメッセージの前に「.」が二つ出ているので既存のテストはパスしていることが確認できる。 注: Cygwin環境ではエラーは発生しない? stack_pop()の実装 まず、src/stack.hにstack_pop()の宣言を追加する。 src/stack.h: ... int stack_pop (Stack *stack); ... つづいて、src/stack.cにstack_pop()の実装を追加する。 src/stack.c: ... int stack_pop (Stack *stack) { return 30; } ここで30を返すようにしているのは最初のstack_pop()では30を返すことが期待されているからである。 test/test-stack.c:50: cut_assert_equal_int(30, stack_pop(stack)); テストを実行し、popのテストもエラーが発生せずに実行されることを確認する。 [stack]% test/run-test.sh ..F 1) Failure: test_pop <2 == stack_get_size(stack)> expected: <2> but was: <3> test/test-stack.c:51: test_pop() Finished in 0.000307 seconds 3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 66.6667% passed popのテストが実行された。しかし、現在のstack_pop()ではスタックサイズを変更していないため、popした後のスタックサイズを確認しているtest/test-stack.cの50行目のstack_get_size()で失敗している。 test/test-stack.c:51: cut_assert_equal_int(2, stack_get_size(stack)); データ領域の確保 テストが実行されることが確認できたのでテストにパスするようにstack_pop()を実装する。 後でpopで取り出すために、pushされたデータを保存しておく必要がある。Stackに保存されたデータを示す場所を用意し、stack_push()/stack_pop()で動的に必要な領域を割り当てる。 まず、Stackに保存されたデータを示す場所を用意し、stack_new()で初期化、stack_free()で開放する。 src/stack.c: ... struct _Stack { int size; int *data; }; Stack * stack_new (void) { ... stack->data = NULL; ... } void stack_free (Stack *stack) { free(stack->data); free(stack); } ... この時点では外部向けの処理の内容は変わっていないはずなので、テストを実行して変更前と同じように失敗することを確認する。 [stack]% test/run-test.sh ..F 1) Failure: test_pop <2 == stack_get_size(stack)> expected: <2> but was: <3> test/test-stack.c:51: test_pop() Finished in 0.000097 seconds 3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 66.6667% passed stack_pop()の本実装 保存したデータを示す場所が用意できたのでstack_push()/stack_pop()でそこに必要な分だけ領域を割り当て、データを保存する。 src/stack.c: ... void stack_push (Stack *stack, int value) { int *new_data; stack->size++; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (!new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return; } stack->data = new_data; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; int *new_data; stack->size--; value = stack->data[stack->size]; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return value; } stack->data = new_data; return value; } テストを実行し、popのテストがパスすることを確認する。 [stack]% test/run-test.sh ... Finished in 0.000076 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed 重複の排除 stack_push()/stack_pop()の実装では動的なメモリ割り当て部分、メモリ割り当て失敗時のエラー処理部分に重複があった。一般的にコード中に重複があることは、メンテナンス性の面などの理由で悪いこととされている。 ここでは、既存の動作を変更せずに重複している悪い部分を修正する。既存の動作が変わっていないことはテストを実行することで確認することができる。 メモリ割り当て部分の重複の除去 まず、以下のメモリ割り当て部分の重複を除去する。 src/stack.c: new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); この部分はstack_realloc()として切り出す。 src/stack.c: ... static int * stack_realloc (Stack *stack) { return realloc(stack->data, sizeof(*stack->data) * stack->size); } void stack_push (Stack *stack, int value) { ... new_data = stack_realloc(stack); ... } int stack_pop (Stack *stack) { ... new_data = stack_realloc(stack); ... } この変更の後でも以前と同じ挙動をしているかを確かめる。 [stack]% test/run-test.sh ... Finished in 0.000078 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed 結果が緑なので次へ進める。 エラー処理部分の重複の除去 次に、以下のメモリ割り当て失敗時のエラー処理部分の重複を除去する。 src/stack.c: ... void stack_push (Stack *stack, int value) { ... new_data = stack_realloc(stack); if (!new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return; } ... } int stack_pop (Stack *stack) { ... new_data = stack_realloc(stack); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return value; } ... } これらのエラー処理をstack_realloc()の中に移動し、stack_realloc()は割り当てたメモリを返すのではなく、新しくメモリを割り当てることに成功したかどうかを返すことにする。 src/stack.c: ... static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } この変更の後でも以前と同じ挙動をしているかを確かめる。 [stack]% test/run-test.sh ... Finished in 0.000076 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed 既存の動作を変更することなく、プログラム中の重複部分を取り除き、プログラムを改良したことを確認できた。 まとめ 本稿では小さなスタックの実装を例にしてGNUビルドシステムを用いたビルド環境の構築方法・Cutterを用いたテストの作成方法・テストのあるプログラムでのプログラムの改良方法を示した。 メリット GNUビルドシステムを用いることにより、ビルド環境の差異を吸収することが比較的容易になる。これはプログラムの移植性を向上させることにつながる。 Cutterを用いることにより、簡単にテストが書ける。既存のC言語用テスティングフレームワークではテストを定義するために独自のマクロを用いたり、テストの定義とテストの登録を別々に行う必要があるなどテスト以外にも書かなければいけないことが多い。Cutterはこの点を改善し、テスト定義のための独自のマクロを提供せず、通常どおりに関数を定義するだけでテストを定義できるようにした。明示的にテストを定義する必要もない。 本稿ではcut_assert()とcut_assert_equal_int()しか使用しなかったが、cut_assert_equal_string()など期待値と実際の値を比較するための方法を多数用意している。これにより、テストプログラムのための比較方法を定義しなければいけない機会が減り、より簡潔にテストプログラムを書けるようになる。 また、Cutterのテスト結果出力は必要のない情報はなるべく表示せず、必要な情報はできるだけ多く提供する。これは必要な情報が埋もれてしまうのを防ぎ、プログラムの修正を支援する。また、C言語ではよくある異常終了時には、バックトレースの出力を試み、プログラム修正のためのより多くの情報を提供する。 既存の機能を変更せずにプログラムの内部構造を改良することはメンテナンス性を向上させるのに非常に役立つ。自動化されたテストを作成することにより、既存の機能が変更されていないことを容易に確認できる。 また、新規に機能を追加する場合でも、自動化されたテストがあれば、既存の機能を壊すことなく機能を追加していることを確認できる。自動化テストを用意することはメンテナンス面でも、新機能開発面でも品質の高いプログラムを作成する上で有用である。 スタックのテスト 最終的なテストは以下の通りである。 test/test-stack.c #include <cutter.h> #include <stack.h> void test_new_stack (void); void test_push (void); void test_pop (void); static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } スタックの実装 最終的なプログラムは以下の通りである。このスタックは素朴な実装であるため、エラーの通知方法やパフォーマンスのチューニングなどの課題が残っているが、テストが示している通りの基本的な機能は実装されている。 src/stack.c: #include <stdlib.h> #include "stack.h" #define TRUE 1 #define FALSE 0 struct _Stack { int size; int *data; }; Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; stack->data = NULL; return stack; } void stack_free (Stack *stack) { free(stack->data); free(stack); } int stack_is_empty (Stack *stack) { return stack->size == 0; } int stack_get_size (Stack *stack) { return stack->size; } static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } Cutterがある場合だけテストをサポート ここで作成したtest/test-stack.cはCutterがない場合はビルドに失敗する。つまり、makeが失敗する。開発者であればテストを実行するのが当然なので、Cutterがない場合は失敗しても問題はない。むしろ、問題に気づきやすいのでそうである方がよいと言える。 しかし、ライブラリとしてスタックを使いたいユーザにはCutterがない場合でもビルドが正常に終了できた方がよい。そのようなユーザは開発者がテストしたリリース版のライブラリを使用していると考えられるからである。 以下はCutterがない場合でもビルドできるようにする方法である。 まず、configure.acのAC_CHECK_CUTERの部分を以下のように変更し、Cutterが提供するm4(cutter.m4)がない場合でもautogen.sh(より詳しくいうとaclocal)が動くようにする。(autogen.shを実行するのが開発者のみであれば、この設定は必要ない。その場合はAC_CHECK_CUTTERの定義がないためにaclocalが失敗する。) configure.ac: ... m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) ... ここでac_cv_use_cutterという変数名を使っているのは、AC_CHECK_CUTTERが同じ名前の変数を使っているからである。この変数はCutterの検出が失敗した場合にも"no"になるので、cutter.m4がない場合(autogen.shを実行した環境にCutterがない場合)は常にCutterを検出できなかった状態となる。 次に、Cutterの検出に失敗したという情報をMakefile.am中で利用するために、AC_CHECK_CUTTERの後ろでMakefile.am中で使える条件を設定する。 configure.ac: ... m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) ... 後は、WITH_CUTTERが真の場合だけtest/test-stack.cをビルドし、test/run-test.shを実行すればよい。 test/Makefile.am: if WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif ... 以上の変更を加えたconfigure.acとtest/Makefile.amの全体は以下のとおりである。 configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE]) AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) AC_OUTPUT test/Makefile.am: if WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif INCLUDES = -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la AM_CFLAGS = $(CUTTER_CFLAGS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) 関連項目 xUnit: Cutterも属するassertXXXといった方法で結果を確認しながらテストを書いていくテストの書き方をサポートするライブラリのこと。テスティングフレームワークとも呼ぶ。様々な言語で実装されている。 SUnit (Smalltalk) JUnit (Java) Test::Unit (Ruby) PyUnit (Pytnon) ... エクストリーム・プログラミング(Extreme Programming, XP):品質の高いプログラムを開発するための方法を集めたプログラミング方法。テストの作成も重要視している。 cutter-testing-framework-1.1.7/doc/reference/install-to-mac-os-x.xml0000644000175000017500000000263111525655563023626 0ustar koukou Install to Mac OS X CUTTER Library Install to Mac OS X How to install Cutter to Mac OS X Introduction This document explains how to install Cutter to Mac OS X. Install We can use port because Cutter provides MacPorts. First, we get MacPorts for Cutter: % cd ~ % svn co https://cutter.svn.sourceforge.net/svnroot/cutter/macports/ cutter-macports Next, we register MacPorts for Cutter: % echo file://$HOME/cutter-macports | sudo sh -c "cat >> /opt/local/etc/macports/sources.conf" We can install Cutter by port: % sudo port install cutter The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/Makefile.am0000644000175000017500000003066711442135233021423 0ustar koukouMAINTAINERCLEANFILE = Makefile.in # The name of the module. DOC_MODULE=cutter # The top-level SGML file. DOC_MAIN_SGML_FILE=cutter-docs.sgml SOURCE_DIR_OPTIONS= \ --source-dir="$(top_srcdir)/gcutter" \ --source-dir="$(top_srcdir)/cppcutter" \ --source-dir="$(top_srcdir)/gdkcutter-pixbuf" \ --source-dir="$(top_srcdir)/soupcutter" \ `test "$(top_builddir)" != "$(top_srcdir)" && \ echo --source-dir="$(top_builddir)/cutter"` # Extra options to supply to gtkdoc-scan SCAN_OPTIONS = \ --deprecated-guards="CUTTER_DISABLE_DEPRECATED" \ $(SOURCE_DIR_OPTIONS) # Extra options to supply to gtkdoc-scangobj SCANGOBJ_OPTIONS = \ --types="$(srcdir)/$(DOC_MODULE).types" # The directory containing the source code. Relative to $(srcdir) DOC_SOURCE_DIR=../../cutter # Used for dependencies HFILE_GLOB = \ $(top_builddir)/cutter/cut-version.h \ $(top_srcdir)/cutter/cut-assertions.h \ $(top_srcdir)/cutter/cut-experimental.h \ $(top_srcdir)/cutter/cut-helper.h \ $(top_srcdir)/cutter/cut-multi-process.h \ $(top_srcdir)/cutter/cut-test-utils.h \ $(top_srcdir)/cutter/cut-types.h \ $(top_srcdir)/cutter/cut-features.h \ $(top_srcdir)/cutter/cutter.h \ $(top_srcdir)/gcutter/gcut-assertions.h \ $(top_srcdir)/gcutter/gcut-data.h \ $(top_srcdir)/gcutter/gcut-egg.h \ $(top_srcdir)/gcutter/gcut-enum.h \ $(top_srcdir)/gcutter/gcut-error.h \ $(top_srcdir)/gcutter/gcut-hash-table.h \ $(top_srcdir)/gcutter/gcut-inspect.h \ $(top_srcdir)/gcutter/gcut-list.h \ $(top_srcdir)/gcutter/gcut-object.h \ $(top_srcdir)/gcutter/gcut-process.h \ $(top_srcdir)/gcutter/gcut-test-utils.h \ $(top_srcdir)/gcutter/gcut-value-equal.h \ $(top_srcdir)/gcutter/gcutter.h \ $(top_srcdir)/cppcutter/cppcut-assertions.h \ $(top_srcdir)/cppcutter/cppcutter.h \ $(top_srcdir)/gdkcutter-pixbuf/gdkcut-pixbuf-assertions.h \ $(top_srcdir)/gdkcutter-pixbuf/gdkcut-pixbuf.h \ $(top_srcdir)/gdkcutter-pixbuf/gdkcutter-pixbuf.h \ $(top_srcdir)/soupcutter/soupcut-assertions.h \ $(top_srcdir)/soupcutter/soupcut-client.h \ $(top_srcdir)/soupcutter/soupcut-server.h \ $(top_srcdir)/soupcutter/soupcutter.h #CFILE_GLOB=$(top_srcdir)/cutter/*.c # Headers to ignore IGNORE_HFILES= \ cut-analyzer.h \ cut-assertions-helper.h \ cut-backtrace-entry.h \ cut-context.h \ cut-contractor.h \ cut-crash-backtrace.h \ cut-diff.h \ cut-diff-writer.h \ cut-differ.h \ cut-colorize-differ.h \ cut-readable-differ.h \ cut-unified-differ.h \ cut-string-differ.h \ cut-elf-loader.h \ cut-enum-types.h \ cut-factory-builder.h \ cut-file-stream-reader.h \ cut-gassertions-helper.h \ cut-gpublic.h \ cut-hidden-definitions.h \ cut-iterated-test.h \ cut-listener-utils.h \ cut-listener.h \ cut-loader.h \ cut-mach-o-loader.h \ cut-macros.h \ cut-main.h \ cut-marshalers.h \ cut-module-factory-utils.h \ cut-module-factory.h \ cut-module-impl.h \ cut-module.h \ cut-pe-loader.h \ cut-pipeline.h \ cut-private.h \ cut-process.h \ cut-public.h \ cut-report-factory-builder.h \ cut-report.h \ cut-repository.h \ cut-run-context.h \ cut-runner.h \ cut-sequence-matcher.h \ cut-stream-factory-builder.h \ cut-stream-parser.h \ cut-stream-reader.h \ cut-stream.h \ cut-sub-process-group.h \ cut-sub-process-group.h \ cut-sub-process.h \ cut-test-case.h \ cut-test-container.h \ cut-test-context.h \ cut-test-data.h \ cut-test-iterator.h \ cut-test-result.h \ cut-test-runner.h \ cut-test-suite.h \ cut-test-utils-helper.h \ cut-test.h \ cut-ui-factory-builder.h \ cut-ui.h \ cut-utils.h \ cut-verbose-level.h \ gcut-dynamic-data.h \ cppcut-assertions-helper.h \ cppcut-message.h \ gbsearcharray.h INCLUDES = \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/cppcutter \ -I$(top_srcdir)/gdkcutter-pixbuf \ -I$(top_srcdir)/soupcutter \ -I$(top_srcdir) \ -I$(top_builddir)/cutter \ $(GLIB_CFLAGS) GTKDOC_LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/cppcutter/libcppcutter.la \ $(GLIB_LIBS) if HAVE_GDK_PIXBUF GTKDOC_LIBS += \ $(top_builddir)/gdkcutter-pixbuf/libgdkcutter-pixbuf.la \ $(GDK_PIXBUF_LIBS) endif if HAVE_LIBSOUP GTKDOC_LIBS += \ $(top_builddir)/soupcutter/libsoupcutter.la \ $(LIBSOUP_LIBS) endif # Extra options to supply to gtkdoc-mkdb MKDB_OPTIONS = \ --sgml-mode \ $(SOURCE_DIR_OPTIONS) # Images to copy into HTML directory HTML_IMAGES = \ dark-circle.png \ nested-circle.png \ diff-dark-and-nested-circle.png \ colorized-diff.png # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE) content_files = \ version.xml \ readme.xml \ news.xml \ tutorial.xml \ features.xml \ users.xml \ cutter.xml \ cut-diff.xml \ install-to-debian.xml \ install-to-ubuntu.xml \ install-to-fedora.xml \ install-to-centos.xml \ install-to-freebsd.xml \ install-to-solaris.xml \ install-to-mac-os-x.xml \ install-to-cygwin.xml \ install-to-others.xml # Extra options to supply to gtkdoc-fixxref FIXXREF_OPTIONS= CATALOGS=ja.po # include common portion ... include $(top_srcdir)/gtk-doc.make generated_xml_files = \ readme.xml \ readme.xml.ja \ news.xml \ news.xml.ja \ tutorial.xml \ tutorial.xml.ja \ features.xml \ features.xml.ja \ users.xml \ users.xml.ja \ cutter.xml \ cut-diff.xml.ja \ install-to-debian.xml \ install-to-debian.xml.ja \ install-to-ubuntu.xml \ install-to-ubuntu.xml.ja \ install-to-fedora.xml \ install-to-fedora.xml.ja \ install-to-centos.xml \ install-to-centos.xml.ja \ install-to-freebsd.xml \ install-to-freebsd.xml.ja \ install-to-solaris.xml \ install-to-solaris.xml.ja \ install-to-mac-os-x.xml \ install-to-mac-os-x.xml.ja \ install-to-cygwin.xml \ install-to-cygwin.xml.ja \ install-to-others.xml \ install-to-others.xml.ja CLEANFILES += \ $(DOC_MODULE)-sections.txt \ $(generated_xml_files) # Other files to distribute EXTRA_DIST += \ html-build.stamp \ version.xml.in \ $(generated_xml_files) \ sf-logo.html \ overrides.txt \ ja.po $(DOC_MODULE)-overrides.txt: $(srcdir)/overrides.txt cp $< $@ $(DOC_MODULE).pot: sgml-build.stamp xml2po -k -o $(DOC_MODULE).pot \ $(srcdir)/$(DOC_MAIN_SGML_FILE) $(srcdir)/xml/*.xml update-po: Makefile sgml.stamp $(MAKE) $(DOC_MODULE).pot for catalog in $(CATALOGS); do \ xml2po -k -u $$catalog \ $(srcdir)/$(DOC_MAIN_SGML_FILE) \ $(srcdir)/xml/*.xml; \ done RD2LIB_DIR = $(top_srcdir)/misc RD2REFENTRY_LIB_FILE = rd2refentry-lib.rb RD2REFENTRY_LIB = $(RD2LIB_DIR)/$(RD2REFENTRY_LIB_FILE) RD2DOCBOOK = $(RUBY) -I $(RD2LIB_DIR) $(RD2) -r $(RD2REFENTRY_LIB_FILE) --name=CUTTER RD2DOCBOOK_JA = $(RD2DOCBOOK) --po=$(srcdir)/ja.po news.xml: $(top_srcdir)/NEWS $(RD2REFENTRY_LIB) news.xml.ja $(RD2DOCBOOK) $(top_srcdir)/NEWS > news.xml news.xml.ja: $(top_srcdir)/NEWS.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/NEWS.ja > news.xml.ja readme.xml: $(top_srcdir)/README $(RD2REFENTRY_LIB) readme.xml.ja $(RD2DOCBOOK) $(top_srcdir)/README > readme.xml readme.xml.ja: $(top_srcdir)/README.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/README.ja > readme.xml.ja tutorial.xml: $(top_srcdir)/TUTORIAL $(RD2REFENTRY_LIB) tutorial.xml.ja $(RD2DOCBOOK) $(top_srcdir)/TUTORIAL > tutorial.xml tutorial.xml.ja: $(top_srcdir)/TUTORIAL.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/TUTORIAL.ja > tutorial.xml.ja features.xml: $(top_srcdir)/FEATURES $(RD2REFENTRY_LIB) features.xml.ja $(RD2DOCBOOK) $(top_srcdir)/FEATURES > features.xml features.xml.ja: $(top_srcdir)/FEATURES.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/FEATURES.ja > features.xml.ja users.xml: $(top_srcdir)/USERS $(RD2REFENTRY_LIB) users.xml.ja $(RD2DOCBOOK) $(top_srcdir)/USERS > users.xml users.xml.ja: $(top_srcdir)/USERS.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/USERS.ja > users.xml.ja cutter.xml: $(top_srcdir)/doc/cutter.rd $(RD2REFENTRY_LIB) cutter.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/cutter.rd > cutter.xml cutter.xml.ja: $(top_srcdir)/doc/cutter.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/cutter.rd.ja > cutter.xml.ja cut-diff.xml: $(top_srcdir)/doc/cut-diff.rd $(RD2REFENTRY_LIB) cut-diff.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/cut-diff.rd > cut-diff.xml cut-diff.xml.ja: $(top_srcdir)/doc/cut-diff.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/cut-diff.rd.ja > cut-diff.xml.ja install-to-debian.xml: $(top_srcdir)/doc/install-to-debian.rd $(RD2REFENTRY_LIB) install-to-debian.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-debian.rd > install-to-debian.xml install-to-debian.xml.ja: $(top_srcdir)/doc/install-to-debian.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-debian.rd.ja > install-to-debian.xml.ja install-to-ubuntu.xml: $(top_srcdir)/doc/install-to-ubuntu.rd $(RD2REFENTRY_LIB) install-to-ubuntu.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-ubuntu.rd > install-to-ubuntu.xml install-to-ubuntu.xml.ja: $(top_srcdir)/doc/install-to-ubuntu.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-ubuntu.rd.ja > install-to-ubuntu.xml.ja install-to-fedora.xml: $(top_srcdir)/doc/install-to-fedora.rd $(RD2REFENTRY_LIB) install-to-fedora.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-fedora.rd > install-to-fedora.xml install-to-fedora.xml.ja: $(top_srcdir)/doc/install-to-fedora.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-fedora.rd.ja > install-to-fedora.xml.ja install-to-centos.xml: $(top_srcdir)/doc/install-to-centos.rd $(RD2REFENTRY_LIB) install-to-centos.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-centos.rd > install-to-centos.xml install-to-centos.xml.ja: $(top_srcdir)/doc/install-to-centos.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-centos.rd.ja > install-to-centos.xml.ja install-to-freebsd.xml: $(top_srcdir)/doc/install-to-freebsd.rd $(RD2REFENTRY_LIB) install-to-freebsd.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-freebsd.rd > install-to-freebsd.xml install-to-freebsd.xml.ja: $(top_srcdir)/doc/install-to-freebsd.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-freebsd.rd.ja > install-to-freebsd.xml.ja install-to-solaris.xml: $(top_srcdir)/doc/install-to-solaris.rd $(RD2REFENTRY_LIB) install-to-solaris.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-solaris.rd > install-to-solaris.xml install-to-solaris.xml.ja: $(top_srcdir)/doc/install-to-solaris.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-solaris.rd.ja > install-to-solaris.xml.ja install-to-mac-os-x.xml: $(top_srcdir)/doc/install-to-mac-os-x.rd $(RD2REFENTRY_LIB) install-to-mac-os-x.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-mac-os-x.rd > install-to-mac-os-x.xml install-to-mac-os-x.xml.ja: $(top_srcdir)/doc/install-to-mac-os-x.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-mac-os-x.rd.ja > install-to-mac-os-x.xml.ja install-to-cygwin.xml: $(top_srcdir)/doc/install-to-cygwin.rd $(RD2REFENTRY_LIB) install-to-cygwin.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-cygwin.rd > install-to-cygwin.xml install-to-cygwin.xml.ja: $(top_srcdir)/doc/install-to-cygwin.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-cygwin.rd.ja > install-to-cygwin.xml.ja install-to-others.xml: $(top_srcdir)/doc/install-to-others.rd $(RD2REFENTRY_LIB) install-to-others.xml.ja $(RD2DOCBOOK) $(top_srcdir)/doc/install-to-others.rd > install-to-others.xml install-to-others.xml.ja: $(top_srcdir)/doc/install-to-others.rd.ja $(RD2REFENTRY_LIB) ja.po $(RD2DOCBOOK_JA) $(top_srcdir)/doc/install-to-others.rd.ja > install-to-others.xml.ja upload: docs rm -rf tmp/ mkdir -p tmp/ cp -rp html/ tmp/reference for catalog in $(CATALOGS); do \ lang=`echo $$catalog | sed 's/.po$$//'`; \ cp -rp $$lang/html/ tmp/reference/$$lang/; \ done chmod -R g+w tmp/reference ruby $(top_srcdir)/misc/prepare-gtk-doc-html-for-publishing.rb \ --template-directory=$(srcdir) --title "$(PACKAGE_TITLE)" \ tmp/reference/*.html ruby $(top_srcdir)/misc/prepare-gtk-doc-html-for-publishing.rb \ --template-directory=$(srcdir) --title "$(PACKAGE_TITLE)" \ --language=ja tmp/reference/ja/*.html rsync -avz --delete tmp/reference/ $(SF_HTDOCS)/reference/ cutter-testing-framework-1.1.7/doc/reference/features.xml.ja0000644000175000017500000004141711525655563022332 0ustar koukou 機能 Cutterライブラリ 機能 Cutterの機能 はじめに Cutterは以下のような単体テストフレームワークの基本的な機能を持っています。 フィクスチャ テスト登録コード不要 デバッグに便利な結果出力 豊富な検証機能 Cutterは以下のようなテスト環境をもっと便利にする高度な機能もあります。 複数のプラットフォーム対応 データ駆動テストのサポート カバレッジのサポート クラッシュ時のバックトレース出力 テスト結果の保存・復元 マルチプロセス・マルチスレッドのサポート 画像差分 ... 基本機能 単体テストフレームワークが一般的に提供している機能について、Cutterがどのようにその機能を提供しているかについてを説明します。 フィクスチャ 単体テストフレームワークでいうフィクスチャとは、各テストを実行する前にテスト用データを用意するための仕組みのことです。これは、一般的には各テスト毎にsetup/teardownと呼ばれる初期化処理/終了処理を実行することによって実現します。 Cutterでは以下のようにテストプログラム中にcut_setup()/cut_teardown() 関数を定義すると、それらの関数が初期化処理/終了処理として扱われます。 void cut_setup (void) { /* 初期化処理 */ } void cut_teardown (void) { /* 終了処理 */ } また、Cutterではテストケース毎の初期化処理/終了処理のためにcut_startup()/cut_shutdown()もサポートしてます。 void cut_startup (void) { /* テストケースの初期化処理 */ } void cut_shutdown (void) { /* テストケースの終了処理 */ } これらの関数は以下のような順番で呼ばれます。 cut_startup() cut_setup() テスト1実行 cut_teardown() cut_setup() テスト2実行 cut_teardown() ... cut_shutdown() また、実験的な機能ですが、テスト全体を実行する前、テスト全体を実行した後に呼び出す関数を登録することもできます。これらの関数をそれぞれwarmup/cooldownと呼んでいます。呼び出し順序はこうなります。 warmup実行 テストケース1のcut_startup() テストケース1のcut_setup() テスト1-1実行 テストケース1のcut_teardown() テストケース1のcut_setup() テスト1-2実行 テストケース1のcut_teardown() ... テストケース1のcut_shutdown() テストケース2のcut_startup() テストケース2のcut_setup() テスト2-1実行 テストケース2のcut_teardown() テストケース2のcut_setup() テスト2-2実行 テストケース2のcut_teardown() ... テストケース2のcut_shutdown() ... cooldown実行 この機能は、テスト対象のライブラリがライブラリ初期化関数・終了関数を用意している場合に有用です。ただ、この機能は実験的な機能なのでここでその使い方を紹介するのは控えておきます。もし、使いたい場合は聞いてください。 テスト登録コード不要 動的な言語用の単体テストフレームワークの多くでは明示的にテストを登録する必要はありません。自動的にテストメソッド・テスト関数などを見つけて実行します。しかし、C言語用の単体テストフレームワークの多くでは明示的にテストを登録する必要があります。 Cutterはテストを簡単に書けるようにするため、多くの動的な言語用の単体テストフレームワークのように自動的にテスト関数を見つけます。そのため、以下のように名前が「test_」からはじまる公開関数を定義するだけでその関数がテスト関数として認識されます。 void test_my_function (void); void test_my_function (void) { /* テスト関数 */ } デバッグに便利な結果出力 Cuterは迅速に問題の確認・修正が行えるようにテスト結果を出力します。具体的には以下のように出力を行います。 問題がない部分はシンプルに 問題がある部分は冗長に まず、問題がない部分をシンプルに表示する(時には何も表示しない)ことにより大事な情報が埋もれてしまうことを防ぎます。 また、問題がある部分はどのような問題があるかを判断するために、知っている情報をできるだけ多く表示します。 例えば、文字列が同じ内容かを比較するテストで文字列が異なって場合を考えます。Cutterは期待値と実測値を並べて表示します。これによりどの部分が異なるかを目視で確認しやすくなります。 expected: <abc def ghi jkl> but was: <abc DEF ghi jkl> もし、これがずれて表示されていたり、同じ行に表示されているとどこが異なるかを見つけるのは大変になります。 expected: <abc def ghi jkl> but was: <abc DEF ghi jkl> <abc def ghi jkl> is expected but was <abc DEF ghi jkl> また、必要ならば期待値と実測値のdiffを表示して具体的にどこが異なるのかも示します。 expected: <abc def ghi jkl> but was: <abc DEF ghi jkl> diff: - abc def ghi jkl ? ^^^ + abc DEF ghi jkl ? ^^^ このように、Cutterにはテストが失敗した時に迅速に問題を確認するための工夫が施されています。これにより、開発者が迅速に問題を修正することを支援します。 豊富な検証機能 xUnit系の単体テストフレームワークではテスト対象が期待する動作をしているかを検証するために、assertionと呼ばれる検証機能を提供します。例えば、一般的には以下のような検証機能があります。 assert: 検証対象が真の値であることを検証 assert_equal: 実測値が期待値と等しいことを検証 Cutterでは、以下の検証機能が上記の検証機能に対応します。 cut_assert() cut_assert_true(): 機能はcut_assert()と同じだが「真の値」であることを明示(自己記述的なためこちらの利用を推奨) cut_assert_equal_int() cut_assert_equal_uint() cut_assert_equal_string() ... Cutterは上記のような一般的な検証機能以外にも様々な検証機能が組み込みで提供しているので、より簡単にテストを書くことができます。例えば、以下のような検証機能を提供しています。 cut_assert_errno(): errnoが0であることを検証 cut_assert_match(): 実測値の文字列が指定した正規表現にマッチすることを検証 cut_assert_path_exist(): 指定したパスが存在することを検証 ... 検証機能の一覧はリファレンスマニュアルの 検証 や GLibサポート付きの検証 を見てください。 高度な機能 一部の単体テストフレームワークが提供している機能のCutterでの提供の仕方、および、どの単体テストフレームワークも提供していないCutter独特の機能について提供について説明します。 複数のプラットフォーム対応 現在、以下のプラットフォームでの動作を確認しています。 GNU/Linux FreeBSD Mac OS X Windows (MinGW) データ駆動テストのサポート 複数のデータに対して同じテストを実行する場合があります。例えば、以下のような場合が考えられます。 複数の入力パターンがあり、それらを網羅的にテストする場合 複数のバックエンドを抽象化し、どのバックエンドを利用している場合でも同じインターフェイスで扱えるライブラリをテストする場合。(cairoやDBIなど) このような場合、テスト自体は1つだけ定義し、各テストデータに対してそのテストを実行することで効率的にテストを作成することができます。このようなテストの仕方はデータ駆動テストと呼ばれています。 Cutterでのデータ駆動テストの書き方については cut_add_data() を見てください。 データ駆動テストの場合はテストは以下のような流れで実行されます。 テストデータ生成関数呼び出し cut_setup() テストデータ1を使ってテスト実行 cut_teardown() cut_setup() テストデータ2を使ってテスト実行 cut_teardown() ... カバレッジのサポート カバレッジ率はどの程度テストを網羅的に行っているかを示す指標になります。 CutterはGCCを使用したカバレッジ測定を支援するためのM4マクロを提供しています。GNU Autoconf/GNU Automakeを利用している場合はこのM4マクロを利用することにより、カバレッジ測定環境を簡単にビルドシステムに組み込むことができます。 詳しくは README.ja や チュートリアル のAC_CHECK_COVERAGEについて書かれている部分を見てください。 クラッシュ時のバックトレース出力 C言語・C++言語で実装されたプログラムではSegmentation Faultでプログラムが異常終了することは珍しくありません。この時、CutterはSEGV シグナルが発生した時点でのバックトレースの取得を試みます。取得できた場合はバックトレースを出力してから終了します。もちろん、この時点でテストプロセスがなにかしら破壊されているので、必ずしもバックトレースを取得できるわけではありません。 問題の詳細を調べるには、GDBなどのデバッガで処理を追いかけていく必要がありますが、バックトレースをデバッグの最初の足がかりとして利用することができます。 テスト結果の保存・復元 ソフトウェアの品質を確認する方法として以下のような方法があります。 テスト状況とバグ発見数の推移を測定 テスト状況とバグ報告数の推移を測定 テスト状況とソース規模の推移を測定 例えば、テストが増えているのにバグ発見数が少ない場合は、効率の悪いテストを行っている、あるいはもともとテスト対象の品質が高かったということが考えられます。テストが増えているのにバグ報告数が伸びている場合は的外れなテストを行っているかもしれません。ソース規模が大きくなっているのにテストが増えていない場合はテスト不足が考えられます。 このように、その時点でのテスト状況だけではなく、過去のテスト結果も利用して時系列でソフトウェアの開発状況を分析することにより、ソフトウェアの品質向上に役立てることができる場合があります。 Cutterはテスト結果をXMLとしてファイルに保存することができます。また、保存したXMLを読み込んでテスト結果を復元することができます。 まだ実装されていませんが、保存したテスト結果を読み込んで、時系列のグラフとしてレポートを出力する機能の実装を予定しています。 マルチプロセス・マルチスレッドのサポート cutter-testing-framework-1.1.7/doc/reference/install-to-fedora.xml0000644000175000017500000000233711525655563023445 0ustar koukou Install to Fedora CUTTER Library Install to Fedora How to install Cutter to Fedora Introduction This document explains how to install Cutter to Fedora. Install We can use yum because Cutter provides a Yum repository. First, we need to register Cutter Yum repository: % sudo rpm -Uvh http://cutter.sourceforge.net/fedora/cutter-repository-1.0.0-1.noarch.rpm Now, we can install Cutter by yum: % sudo yum install -y cutter The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/dark-circle.png0000644000175000017500000000326511205747025022254 0ustar koukouPNG  IHDRddpTsRGBbKGD pHYs  tIME  sLtEXtCommentCreated with GIMPWIDATx]H[gOĐؘi*&\JZ*YLh z /F3zQWn*8lͱNhw%4#~XK45!Mbyߜn *;JNNAe| Tv]@TvoÀ/( ^@Tv}~ *;B-4vTY@=e.D ZE%!f3 EKD "J]xe!m F 3Bdjx0!xM ix(XXRӡnoyP3 ÇՏ_C46}@#d!YNQwU^ne։uuwtHbw2v|_;Gln}7$~YׯnA7Uۋsf׉譓||kE$T<9B. yqCwO_z.^׉UgyM\YW !VYW .mB,'3ο'rM뻽WG'K\HjqVf,¥-q4`!4eⱢDhɈy2!CX&d?pl˄,:!GLQ8p|7$ B@!B Q`7aIENDB`cutter-testing-framework-1.1.7/doc/reference/install-to-fedora.xml.ja0000644000175000017500000000274011525655562024033 0ustar koukou Fedoraへインストール Cutterライブラリ Fedoraへインストール FedoraへのCutterのインストール方法 はじめに FedoraへのCutterのインストール方法を説明します。 インストール CutterのYumリポジトリが提供されているので、yumでインストールできます。 まず、Yumリポジトリを登録します。 % sudo rpm -Uvh http://cutter.sourceforge.net/fedora/cutter-repository-1.0.0-1.noarch.rpm Yumリポジトリを登録したらyumでインストールできます。 % sudo yum install -y cutter 次のステップ 以上でインストールは完了です。 まずは チュートリアル を一通り試してください。Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/doc/reference/overrides.txt0000644000175000017500000004112211442135233022116 0ustar koukou# cutter.h cut_set_message void const char *format, ... cut_set_message_va_list void const char *format, va_list args cut_keep_message void void cut_message void const char *format, ... # cut-assertion.h cut_error void const char *format, ... cut_fail void const char *format, ... cut_pend void const char *format, ... cut_pending void const char *format, ... cut_notify void const char *format, ... cut_omit void const char *format, ... cut_assert void cut_boolean expression, ... cut_assert_true void cut_boolean expression, ... cut_assert_false void cut_boolean expression, ... cut_assert_equal_boolean void cut_boolean expected, cut_boolean actual, ... cut_assert_not_equal_boolean void cut_boolean expected, cut_boolean actual, ... cut_assert_null void const void *expression, ... cut_assert_null_string void const char *string, ... cut_assert_not_null void const void *expression, ... cut_assert_equal_int void int expected, int actual, ... cut_assert_not_equal_int void int expected, int actual, ... cut_assert_equal_uint void unsigned int expected, unsigned int actual, ... cut_assert_not_equal_uint void unsigned int expected, unsigned int actual, ... cut_assert_equal_size void size_t expected, size_t actual, ... cut_assert_not_equal_size void size_t expected, size_t actual, ... cut_assert_equal_double void double expected, double error, double actual, ... cut_assert_not_equal_double void double expected, double error, double actual, ... cut_assert_equal_string void const char *expected, const char *actual, ... cut_assert_not_equal_string void const char *expected, const char *actual, ... cut_assert_equal_string_with_free void const char *expected, const char *actual, ... cut_assert_equal_string_or_null void const char *expected, const char *actual, ... cut_assert_equal_substring void const char *expected, const char *actual, size_t length, ... cut_assert_not_equal_substring void const char *expected, const char *actual, size_t length, ... cut_assert_equal_memory void const void *expected, size_t expected_size, const void *actual, size_t actual_size, ... cut_assert_not_equal_memory void const void *expected, size_t expected_size, const void *actual, size_t actual_size, ... cut_assert_equal_string_array void char **expected, char **actual, ... cut_assert_equal_string_array_with_free void char **expected, char **actual, ... cut_assert_errno void ... cut_assert_file_exist void const char *path, ... cut_assert_path_exist void const char *path, ... cut_assert_path_not_exist void const char *path, ... cut_assert_exist_path void const char *path, ... cut_assert_not_exist_path void const char *path, ... cut_assert_match void const char *pattern, const char *actual, ... cut_assert_match_with_free void const char *pattern, const char *actual, ... cut_assert_equal_pointer void const void *expected, const void *actual, ... cut_assert_equal_fixture_data_string void const char *expected, const void *path, ... cut_error_errno void ... cut_return void void # cut-types.h CUT_TRUE #define CUT_TRUE CUT_FALSE #define CUT_FALSE # cut-test-utils.h cut_take void * void *object, CutDestroyFunction destroy_function cut_take_memory const void * void *memory cut_take_string const char * char *string cut_take_strdup const char * const char *string cut_take_strndup const char * const char *string, size_t size cut_take_memdup const void * const void *memory, size_t size cut_take_printf const char * const char *format, ... cut_take_string_array char ** char **strings cut_take_diff const char * const char *from, const char *to cut_take_replace const char * const char *target, const char *pattern, const char *replacement cut_append_diff const char * const char *message, const char *from, const char *to cut_inspect_string_array const char * const char **strings cut_take_inspect_string const char * const char *string cut_set_fixture_data_dir void const char *path, ... cut_build_fixture_data_path char * const char *path, ... cut_get_fixture_data_string const char * const char *path, ... cut_remove_path void const char *path, ... cut_build_path const char * const char *path, ... cut_build_path_array const char * const char **paths cut_make_directory void const char *path, ... cut_equal_string cut_boolean const char *string1, const char *string2 cut_equal_double cut_boolean double double1, double double2, double error # cut-helper.h cut_test_pass void void cut_test_fail void const char *system_message, ... cut_test_fail_va_list void const char *system_message, const char *user_message_format cut_push_backtrace void const char *expression cut_pop_backtrace void void # cut-multi-process.h cut_take_new_sub_process CutSubProcess * const char *test_directory cut_take_new_sub_process_group CutSubProcessGroup * void # gcut-test-utils.h gcut_take_object GObject * GObject *object gcut_take_error GError * GError *error gcut_take_list const GList * const GList *list, CutDestroyFunction destroy_function gcut_take_hash_table GHashTable * GHashTable *hash_table gcut_take_new_list_string const GList * const gchar *value, ... gcut_take_new_list_string_array const GList * const gchar **strings gcut_take_new_list_int const GList * guint n, gint value, ... gcut_take_new_list_uint const GList * guint n, guint value, ... gcut_take_new_hash_table_string_string GHashTable * const gchar *key, ... # gcut-assertions.h gcut_assert_equal_type void GType expected, GType actual, ... cut_assert_equal_g_type void GType expected, GType actual, ... gcut_assert_equal_value void GValue *expected, GValue *actual, ... cut_assert_equal_g_value void GValue *expected, GValue *actual, ... gcut_assert_equal_list void GList *expected, GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, ... gcut_assert_equal_list_int void GList *expected, GList *actual, ... cut_assert_equal_g_list_int void GList *expected, GList *actual, ... gcut_assert_equal_list_uint void GList *expected, GList *actual, ... cut_assert_equal_g_list_uint void GList *expected, GList *actual, ... gcut_assert_equal_list_string void GList *expected, GList *actual, ... cut_assert_equal_g_list_string void GList *expected, GList *actual, ... gcut_assert_equal_list_object void GList *expected, GList *actual, ... gcut_assert_equal_list_object_custom void GList *expected, GList *actual, GEqualFunc equal_function, ... gcut_assert_equal_list_enum void GType type, GList *expected, GList *actual, ... gcut_assert_equal_list_flags void GType type, GList *expected, GList *actual, ... gcut_assert_equal_hash_table void GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, ... gcut_assert_equal_hash_table_string_string void GHashTable *expected, GHashTable *actual, ... gcut_assert_error void GError *error, ... cut_assert_g_error void GError *error, ... gcut_assert_equal_error void GError *expected, GError *actual, ... gcut_assert_remove_path void const gchar *path, ... cut_assert_remove_path void const gchar *path, ... gcut_assert_equal_time_val void GTimeVal expected, GTimeVal actual, ... gcut_assert_equal_enum void GType enum_type, gint expected, gint actual, ... gcut_assert_equal_flags void GType flags_type, guint expected, guint actual, ... gcut_assert_equal_object void GObject *expected, GObject *actual, ... gcut_assert_equal_object_custom void GObject *expected, GObject *actual, GEqualFunc equal_function, ... gcut_assert_equal_int64 void gint64 expected, gint64 actual, ... gcut_assert_not_equal_int64 void gint64 expected, gint64 actual, ... gcut_assert_equal_uint64 void guint64 expected, guint64 actual, ... gcut_assert_not_equal_uint64 void guint64 expected, guint64 actual, ... gcut_assert_equal_pid void GPid expected, GPid actual, ... gcut_assert_not_equal_pid void GPid expected, GPid actual, ... gcut_assert_equal_string void GString *expected, GString *actual, ... # gcut-data.h gcut_add_datum void const gchar *name, const gchar *first_field_name, ... gcut_data_has_field gboolean gconstpointer data, const gchar *field_name gcut_data_get_string const gchar * gconstpointer data, const gchar *field_name gcut_data_get_int gint gconstpointer data, const gchar *field_name gcut_data_get_uint guint gconstpointer data, const gchar *field_name gcut_data_get_type GType gconstpointer data, const gchar *field_name gcut_data_get_flags guint gconstpointer data, const gchar *field_name gcut_data_get_enum gint gconstpointer data, const gchar *field_name gcut_data_get_pointer gconstpointer gconstpointer data, const gchar *field_name gcut_data_get_boxed gconstpointer gconstpointer data, const gchar *field_name # gdkcut-pixbuf-assertions.h gdkcut_pixbuf_assert_equal void const GdkPixbuf *expected, const GdkPixbuf *actual, guint threshold, ... # soupcut-assertions.h soupcut_message_assert_equal_content_type void const gchar *expected, SoupMessage *message, ... soupcut_client_assert_equal_content_type void const gchar *expected, SoupCutClient *client, ... soupcut_client_assert_response void SoupCutClient *client, ... soupcut_client_assert_equal_body void const gchar *expected, SoupCutClient *client, ... soupcut_client_assert_match_body void const gchar *pattern, SoupCutClient *client, ... cutter-testing-framework-1.1.7/doc/reference/install-to-centos.xml0000644000175000017500000000233711525655563023500 0ustar koukou Install to CentOS CUTTER Library Install to CentOS How to install Cutter to CentOS Introduction This document explains how to install Cutter to CentOS. Install We can use yum because Cutter provides a Yum repository. First, we need to register Cutter Yum repository: % sudo rpm -Uvh http://cutter.sourceforge.net/centos/cutter-repository-1.0.0-1.noarch.rpm Now, we can install Cutter by yum: % sudo yum install -y cutter The next step Installation is completed. We should try tutorial with the installed Cutter. cutter-testing-framework-1.1.7/doc/reference/cutter.xml0000644000175000017500000002364211525655563021431 0ustar koukou cutter CUTTER Library cutter xUnit family unit testing framework for C and C++ NAME cutter - xUnit family unit testing framework for C and C++ SYNOPSIS cutter [ option ... ] test-directory cutter --mode=analyze [ option ... ] log-directory DESCRIPTION Cutter is a xUnit family unit testing framework for C and C++. Cutter provides programmers two important interfaces: easy to write API easy to debug UI Cutter helps programmers to write their new tests, run their existing tests, get feedbacks from ran their tests. test-directory is a directory which has test_*.so. test_*.so are searched recursively. log-directory is a directory which has Cutter log files. Cutter logs test results when --stream-directory option is specified. OPTIONS --version Cutter shows its own version and exits. --mode=[test|analyze] It specifies run mode. Cutter runs tests when run mode is test. Cutter analyzes test results when run mode is analyze. The default is test. -s DIRECTORY, --source-directory=DIRECTORY Cutter prepends DIRECTORY to file name when test fails. This is for tolls (like Emacs) which have function jumping to error line. -t TEST_CASE_NAME, --test-case=TEST_CASE_NAME Cutter runs test cases that are matched with TEST_CASE_NAME. If TEST_CASE_NAME is surrounded by "/" (e.g. /test_/), TEST_CASE_NAME is handled as regular expression. This option can be specified n times. In the case, Cutter runs test cases that are matched with any TEST_CASE_NAME. (OR) -n TEST_NAME, --name=TEST_NAME Cutter runs tests that are matched with TEST_NAME. If TEST_NAME is surrounded by "/" (e.g. /test_/), TEST_NAME is handled as regular expression. This option can be specified n times. In the case, Cutter runs test that are matched with any TEST_NAME. (OR) -m, --multi-thread Cutter runs a test case in a new thread. The default is off. --max-threads=MAX_THREADS Run test cases and iterated tests with MAX_THREADS threads concurrently at a maximum. -1 means no limit. The default is 10. --disable-signal-handling Disable signal handling that provides aborting test by C-c, provides backtrace on SEGV and so on. If your test target uses signal, Cutter's signal handling may cause a problem. In the case, you should disable Cutter's signal handling by this option. The default is enabled. --test-case-order=[none|name|name-desc] It specifies test case order. If 'none' is specified, Cutter doesn't sort. If 'name' is specified, Cutter sorts test cases by name in ascending order. If 'name-desc' is specified, Cutter sorts test cases by name in descending order. The default is none. --exclude-file=FILE Cutter doesn't read FILE on test collecting. --exclude-directory=DIRECTORY Cutter doesn't search tests under DIRECTORY. --fatal-failures Cutter treats failures as fatal problem. It means that Cutter stops test run. The default is off. --keep-opening-modules Cutter keeps opening loaded modules to resolve symbols for debugging. The default is off. --enable-convenience-attribute-definition It enables convenience but danger "#{ATTRIBUTE_NAME}_#{TEST_NAME - 'test_' PREFIX}" attribute set function. The default is off. --stop-before-test It sets a breakpoint immediately before each test. You can dive into test function easily by running cutter on your debugger and stepping into the next function. The default is off. -u[console|gtk], --ui=[console|gtk] It specifies UI. The default is console UI. -v[s|silent|n|normal|v|verbose], --verbose=[s|silent|n|normal|v|verbose] It specifies verbose level. This option is only for console UI. -c[yes|true|no|false|auto], --color=[yes|true|no|false|auto] If 'yes' or 'true' is specified, Cutter uses colorized output by escape sequence. If 'no' or 'false' is specified, Cutter never use colorized output. If 'auto' or the option is omitted, Cutter uses colorized output if available. This option is only for console UI. --pdf-report=FILE Cutter outputs a test report to FILE as PDF format. --xml-report=FILE Cutter outputs a test report to FILE as XML format. --stream=[xml] It specifies stream backend. Stream backend streams test results. There is only XML stream backend for now. --stream-fd=FILE_DESCRIPTOR It specifies output file descriptor. The XML stream backend streams to FILE_DESCRIPTOR. This option is only for XML stream backend. --stream-directory=DIRECTORY It specifies output directory. The XML stream backend streams to a file under DIRECTORY. This option is only for XML stream backend. -?, --help Cutter shows common options. --help-stream Cutter shows stream related options. --help-report Cutter shows report related options. --help-ui Cutter shows UI related options. --help-all Cutter shows all options. EXIT STATUS The exit status is 0 if all tests are passed and non-0 otherwise. Omission test result and notification test result are not treated as failure. FILES /usr/local/share/doc/cutter/ The directory has Cutter documents. e.g. reference manual, tutorial and so on. EXAMPLE In the following example, cutter runs tests under tests/ directory and shows test progress verbosely. % cutter -v v test/ In the following example, test results are saved under logs/ directory: % cutter --stream=xml --stream-directory=logs/ test/ SEE ALSO GLib's reference manual. cutter-testing-framework-1.1.7/doc/reference/features.xml0000644000175000017500000003206211525655563021735 0ustar koukou Features CUTTER Library Features What can be done with Cutter Introduction Cutter has basic features of a unit testing framework: Fixture No test registration code Result output with useful format for debugging Many assertions Cutter also has many useful advanced features: Cross platform Data-Driven Testing support Coverage support Backtrace on crash Serialize/deserialize test result Multi-process/multi-thread support Image diff ... Basic This section explains how Cutter provides features that are considered about basic unit testing framework features. Fixture Fixture in a unit testing framework is a mechanism that set up test data before each test. It is usually implemented by executing setup/teardown process. See also Test fixture (Wikipedia) . In Cutter, if cut_setup()/cut_teardown() functions are defined in a test program like the following, their functions are treated as setup/teardown processes: void cut_setup (void) { /* set up test data */ } void cut_teardown (void) { /* tear down test data */ } Cutter also supports cut_startup()/cut_shutdown() functions that are called on each test case starting/completing: void cut_startup (void) { /* set up the test case */ } void cut_shutdown (void) { /* tear down the test case*/ } Their functions are called the following order: cut_startup() cut_setup() run test1 cut_teardown() cut_setup() run test2 cut_teardown() ... cut_shutdown() Cutter also supports functions that are called on all test starting/completing as experimental features. Their functions are called warmup/cooldown. Here is the call order: run warmup cut_startup() of test case1 cut_setup() of test case1 run test1-1 cut_teardown() of test case1 cut_setup() of test case1 run test1-2 cut_teardown() of test case1 ... cut_shutdown() of test case1 cut_startup() of test case2 cut_setup() of test case2 run test2-1 cut_teardown() of test case2 cut_setup() of test case2 run test2-2 cut_teardown() of test case2 ... cut_shutdown() of test case1 ... run cooldown The last two functions are useful for testing a library that has initialize/finalize functions of itself. But they are experimental features. So explanation of their usage is omitted. If you want to use them, please contact us. No test registration code Most of unit testing frameworks for dynamic languages doesn't require that users register their tests. Tests are found by frameworks and ran. But most of unit testing frameworks for C require that users register their tests. Cutter finds test functions automatically like frameworks for dynamic languages to write tests easily. Public functions that their name starts with "test_" are recognized as test functions. Here is a sample test function definition: void test_my_function (void); void test_my_function (void) { /* a test function */ } Result output with useful format for debugging Cutter outputs a test result to confirm and fix a problem quickly. In particular Cutter outputs no problem parts simply and problem parts verbosely. Cutter outputs no problem parts simply (they may not be displayed) to avoid important parts are buried. Cutter outputs information of problem parts as many as possible to provide users information to judge what is a problem. For example, we assume that an expected string and an actual string are different on string equality check test. Cutter arranges and displays the expected string and the actual string to confirm difference between them easily: expected: <abc def ghi jkl> but was: <abc DEF ghi jkl> If their aren't arranged or displayed in the same line, it's difficult to find difference between them: expected: <abc def ghi jkl> but was: <abc DEF ghi jkl> <abc def ghi jkl> is expected but was <abc DEF ghi jkl> Cutter also outputs diff between the expected string and the actual string to show where is different explicitly: expected: <abc def ghi jkl> but was: <abc DEF ghi jkl> diff: - abc def ghi jkl ? ^^^ + abc DEF ghi jkl ? ^^^ Cutter strongly helps us to confirm a problem on test failure as mentioned above. Many assertions xUnit based unit testing frameworks provides assertions to assert test target works as we had expected. For example, many frameworks provides assertions like the followings: assert: asserts that target is true value assert_equal: asserts that an actual value equals an expected value In Cutter, the following assertions are corresponding the above assertions: cut_assert() cut_assert_true(): asserts same as cut_assert() but it clearly specifies "true value" (Cutter recommends to use it because it's self-describing rather than cut_assert()) cut_assert_equal_int() cut_assert_equal_uint() cut_assert_equal_string() ... Cutter also provides many built-in assertions than common assertions as mentioned above to write tests easily. For example, Cutter provides built-in assertions like the followings: cut_assert_errno(): asserts that errno is 0 cut_assert_match(): asserts that an expected string matches an actual string cut_assert_path_exist(): asserts that specified path exists ... See Assertions and Assertions with GLib support in the reference manual for assertion list. Advanced This section explains how Cutter provides features that are provided by a few unit testing frameworks or not provided any unit testing frameworks. Cross platform For now, Cutter works on the following platforms: GNU/Linux FreeBSD Mac OS X Windows (MinGW) Data-Driven Testing support There is a testing method called Data-Driven Testing . Cutter supports Data-Driven Testing. See cut_add_data() for writing a data-driven test. Data-driven tests are executed by the following order: call data setup function cut_setup() run test with test data1 cut_teardown() cut_setup() run test with test data2 cut_teardown() ... Coverage support Code coverage is a measure for how code is tested cyclopaedically. Cutter provides a M4 macro to help us measuring code coverage. If you use GNU Autoconf/GNU Automake, you can add code coverage support into your build system easily. See about AC_CHECK_COVERAGE in README and TUTORIAL . Backtrace on crash It's natural that a program written in C and/or C++crashes. Cutter tries to retrieve a backtrace on SEGV signal is raised. If a backtrace is retrieved, Cutter outputs it and exit. Of course Cutter cannot always retrieve a backtrace because the test process is broken. To check details of a problem, we need to use a debugger like GDB. But we can use a backtrace as the first step. Serialize/deserialize test result There are some methods to confirm how high software's quality: measuring transition between test status and number of found bugs. measuring transition between test status and number of reported bugs. measuring transition between test status and source code size. For example, if number of tests are grown but number of found bugs aren't grown, we may be doing inefficient test or software quality might be high without test. If number of tests are grown but number of reported bugs are grown, we may be testing irrelevance points. If source code size is grown but number of tests aren't grown, we may lazy. We can analyze software development status with test result logs in chronological order not just the current test result. We may use analyzed result to improve software quality. Cutter can save a test result to a file as XML. Cutter can also read saved XML and restore a test result. Cutter will provide a feature that charts test result logs. cutter-testing-framework-1.1.7/doc/install-to-centos.rd0000644000175000017500000000103111523751075021326 0ustar koukou# -*- rd -*- = Install to CentOS --- How to install Cutter to CentOS == Introduction This document explains how to install Cutter to CentOS. == Install We can use yum because Cutter provides a Yum repository. First, we need to register Cutter Yum repository: % sudo rpm -Uvh http://cutter.sourceforge.net/centos/cutter-repository-1.0.0-1.noarch.rpm Now, we can install Cutter by yum: % sudo yum install -y cutter == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/install-to-solaris.rd0000644000175000017500000000347211525645034021521 0ustar koukou# -*- rd -*- = Install to Solaris --- How to install Cutter to Solaris == Introduction This document explains how to install Cutter to Solaris. == Install GLib Cutter requires GLib 2.16 or later. There is no package for GLib 2.16 or later for Solaris 10. We need to build and install by ourself. GLib requires GNU gettext and GNU libiconv. We can install them as packages at (()). For example, we can install GNU gettext with the following steps: % mkdir -p ~/packages % cd ~/packages % wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/gettext-0.17-sol10-sparc-local.gz % gzip -d gettext-0.17-sol10-sparc-local.gz % pkgadd -d ./gettext-0.17-sol10-sparc-local We can install GNU libiconv with the same steps. We also need GNU build system, GNU Autoconf, GNU Automake and GNU Libtool, on development with Cutter. We need to install them. It's a good idea that we also install intltool. It's not required but it's needed for internationalized software development. We can build GLib after we install the above packages. Here are steps to build and install GLib. Note that we need to use GNU make: % mkdir -p ~/src % cd ~/src % wget http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.4.tar.gz % tar xvzf glib-2.22.4.tar.gz % cd glib-2.22.4 % ./configure --with-libiconv=gnu % gmake % sudo gmake install == Install Cutter Cutter can be installed like other free software because Cutter uses GNU build tools. Note that we need to use GNU make: % mkdir -p ~/src % cd ~/src % wget http://downloads.sourceforge.net/cutter/cutter-1.1.7.tar.gz % tar xvzf cutter-1.1.7.tar.gz % cd cutter-1.1.7 % ./configure % gmake % sudo gmake install == The next step Installation is completed. We should try (()) with the installed Cutter. cutter-testing-framework-1.1.7/doc/install-to-debian.rd.ja0000644000175000017500000000335611525702710021654 0ustar koukou# -*- rd -*- = Debian GNU/Linuxへインストール --- Debian GNU/LinuxへのCutterのインストール方法 == はじめに Debian GNU/LinuxへのCutterのインストール方法を説明します。 == インストール CutterのDebianパッケージが提供されているので、aptitudeでインス トールできます。 現在は、Debian GNU/Linux squeeze/sid i386/amd64用のパッケージ を提供しています。他のバージョンが必要な場合は((<メーリングリ スト |URL:https://lists.sourceforge.net/lists/listinfo/cutter-users-ja>)) でリクエストしてください。 squeezeの場合は以下のapt lineを書いた /etc/apt/sources.list.d/cutter.listを作成してください。 /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/debian/ squeeze main deb-src http://cutter.sourceforge.net/debian/ squeeze main sidの場合は以下のapt lineを書いた /etc/apt/sources.list.d/cutter.listを作成してください。 /etc/apt/sources.list.d/cutter.list: deb http://cutter.sourceforge.net/debian/ unstable main deb-src http://cutter.sourceforge.net/debian/ unstable main パッケージはkou@cozmixng.org/kou@clear-code.comの鍵でサイン しています。信用する場合は鍵を登録します。 % gpg --keyserver hkp://subkeys.pgp.net --recv-keys 1C837F31 % gpg --export 1C837F31 | sudo apt-key add - 鍵を登録したらaptitudeでインストールできます。 % sudo aptitude update % sudo aptitude -V -D install cutter-testing-framework == 次のステップ 以上でインストールは完了です。 まずは((<チュートリアル|TUTORIAL.ja>))を一通り試してください。 Cutterを使った開発の流れがわかります。 cutter-testing-framework-1.1.7/cppcutter/0000755000175000017500000000000011525707412016667 5ustar koukoucutter-testing-framework-1.1.7/cppcutter/cppcut-assertions.h0000644000175000017500000000430311345204756022531 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CPPCUT_ASSERTIONS_H__ #define __CPPCUT_ASSERTIONS_H__ #include /** * SECTION: cppcut-assertions * @title: Assertions with C++ support * @short_description: Checks that your program works as you * expect with C++ support. * */ /** * cppcut_assert_equal: * @expected: an expected value. * @actual: an actual value. * @...: an optional message. Use cppcut_message() for this. * * This assertion is a generic method based on template. You * can pass any object's reference as @expected and @actual. * * Passes if @expected == @actual. * * e.g.: * |[ * cppcut_assert_equal(3, 1 + 2); * cppcut_assert_equal(3, 1 + 2, cppcut_message("easy expression")); * cppcut_assert_equal(3, 1 + 2, cppcut_message() << "easy expression")); * ]| * * Since: 1.0.9 */ #define cppcut_assert_equal(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ cut::assert_equal(expected, actual, #expected, #actual), \ __VA_ARGS__), \ cppcut_assert_equal(expected, actual, __VA_ARGS__)); \ } while (0) #endif /* __CPPCUT_ASSERTIONS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cppcutter/cppcut-macros.h0000644000175000017500000000214711300002757021613 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CPPCUT_MACROS_H__ #define __CPPCUT_MACROS_H__ #ifdef _WIN32 # ifdef CPPCUT_BUILDING # define CPPCUT_DECL __declspec(dllexport) # else # define CPPCUT_DECL __declspec(dllimport) # endif #else # define CPPCUT_DECL #endif #endif /* __CPPCUT_MACROS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cppcutter/cppcut-assertions-helper.h0000644000175000017500000000644111277554610024014 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CPPCUT_ASSERTIONS_HELPER_H__ #define __CPPCUT_ASSERTIONS_HELPER_H__ #include #include #include #include namespace cut { CPPCUT_DECL void assert_equal(int expected, int actual, const char *expression_expected, const char *expression_actual); CPPCUT_DECL void assert_equal(unsigned int expected, unsigned int actual, const char *expression_expected, const char *expression_actual); CPPCUT_DECL void assert_equal(long expected, long actual, const char *expression_expected, const char *expression_actual); CPPCUT_DECL void assert_equal(unsigned long expected, unsigned long actual, const char *expression_expected, const char *expression_actual); CPPCUT_DECL void assert_equal(long long expected, long long actual, const char *expression_expected, const char *expression_actual); CPPCUT_DECL void assert_equal(unsigned long long expected, unsigned long long actual, const char *expression_expected, const char *expression_actual); template void assert_equal(Type& expected, Type& actual, const char *expression_expected, const char *expression_actual) { assert_equal_reference(expected, actual, expression_expected, expression_actual); }; template void assert_equal_reference( Type& expected, Type& actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { std::ostringstream inspected_expected; std::ostringstream inspected_actual; std::ostringstream message; inspected_expected << expected; cut_set_expected(inspected_expected.str().c_str()); inspected_actual << actual; cut_set_actual(inspected_actual.str().c_str()); message << "<" << expression_expected << " == "; message << expression_actual << ">"; cut_test_fail(message.str().c_str()); } } } #endif /* __CPPCUT_ASSERTIONS_HELPER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cppcutter/cppcut-message.h0000644000175000017500000000472111400051173021750 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CPPCUT_MESSAGE_H__ #define __CPPCUT_MESSAGE_H__ #include /** * SECTION: cppcut-message * @title: Optional assertion message in C++ * @short_description: Supports optional assertion message * in C++. * */ namespace cut { template inline void delegate_shift_operator(std::ostream& stream, const Type& value) { stream << value; } class Message { public: CUT_EXPORT Message(); CUT_EXPORT Message(const char *format, ...); CUT_EXPORT Message(const char *format, va_list args); CUT_EXPORT ~Message(); template inline Message& operator <<(const Type& value) { delegate_shift_operator(buffer_, value); return *this; } template inline Message& operator <<(const Type *value) { if (value == NULL) { buffer_ << "(null)"; } else { delegate_shift_operator(buffer_, value); } return *this; } CUT_EXPORT inline Message& operator <<(bool value) { return *this << (value ? "true" : "false"); } CUT_EXPORT void printf(const char *format=NULL, ...); CUT_EXPORT inline const char * string() const { return buffer_.str().c_str(); } private: std::ostringstream buffer_; }; inline std::ostream& operator <<(std::ostream& stream, const Message& message) { return stream << message.string(); } } #endif /* __CPPCUT_MESSAGE_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cppcutter/cppcutter.h0000644000175000017500000001000111400051173021025 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CPPCUTTER_H__ #define __CPPCUTTER_H__ #include #include #include #include /** * SECTION: cppcutter * @title: CppCutter * @short_description: Cutter with C++ support. * @see_also: * Assertions with C++ support * * CppCutter provides C++ friendly interface of Cutter. If * you want to write tests with C++, it's good idea that you * consider CppCutter to be used too. * * It's easy to use CppCutter. You just include <cppcutter.h> * instead of <cutter.h> and use cppcutter.pc instead of * cutter.pc: * * test-xxx.cpp: * |[ * -#include * +#include * ]| * * configure.ac: * |[ * -AC_CHECK_CUTTER * +AC_CHECK_CPPCUTTER * ]| * * Makefile.am: * |[ * -XXX_CFLAGS = $(CUTTER_CFLAGS) * -XXX_LIBS = $(CUTTER_LIBS) * +XXX_CFLAGS = $(CPPCUTTER_CFLAGS) * +XXX_LIBS = $(CPPCUTTER_LIBS) * ]| * * Test functions are defined in namespace. Naming * convention is the same as Cutter. i.e.: 'test_...' * function is test function, 'setup' or 'cut_setup' is * setup function and 'teardown' or 'cut_teardown' is * teardown function. * * test-calc.cpp: * |[ * #include * * namespace calc * { * void * test_add (void) * { * cppcut_assert_equal(3, calc.add(1, 2)); * } * * void * test_sub (void) * { * cppcut_assert_equal(5, calc.sub(9, 4)); * } * } * ]| * * You just define a function for adding a new test. You * don't need to use magical macros. */ /** * CPPCUTTER_ENABLED * * Defined when CppCutter is enabled. * * Since: 1.0.9 */ #define CPPCUTTER_ENABLED 1 #ifndef CUTTER_DISABLE_DEPRECATED /** * CPPCUT_BEGIN_TEST_DECLS * * Use %CPPCUT_BEGIN_TEST_DECLS and %CPPCUT_END_TEST_DECLS * pair for prototype declarations for test functions: * * |[ * CPPCUT_BEGIN_TEST_DECLS * void test_add (); * void test_remove (); * CPPCUT_END_TEST_DECLS * ]| * * Those macros just surround prototype declarations for * test functions with 'extern "C" {...}'. * * Since: 1.0.9 * Deprecated: 1.1.0: Use namespace instead. */ #define CPPCUT_BEGIN_TEST_DECLS extern "C" { /** * CPPCUT_END_TEST_DECLS * * See %CPPCUT_BEGIN_TEST_DECLS. * * Since: 1.0.9 * Deprecated: 1.1.0: Use namespace instead. */ #define CPPCUT_END_TEST_DECLS } #endif /** * cppcut_message: * @format: the optional message format. See the printf() * documentation. * @...: the parameters to insert into the format string. * * Specifies optional assertion message with C++ friendly * API. The optional message can be specified with printf() * style API or "<<" stream style API. * * e.g.: * |[ * cppcut_assert_equal("abc", "def", * cppcut_message("should fail!")); * cppcut_assert_equal("abc", "def", * cppcut_message() << "should fail!"); * ]| * * Since: 1.1.0 */ #define cppcut_message(...) \ cut::Message cppcut_message; \ cppcut_message.printf(__VA_ARGS__); \ cppcut_message #endif /* __CPPCUTTER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cppcutter/Makefile.in0000644000175000017500000006067711525654633020762 0ustar koukou# 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@ 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@ subdir = cppcutter DIST_COMMON = $(cppcutter_include_HEADERS) $(pkginclude_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(cppcutter_includedir)" \ "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libcppcutter_la_DEPENDENCIES = $(top_builddir)/cutter/libcutter.la \ $(am__DEPENDENCIES_1) am__objects_1 = am__objects_2 = cppcut-assertions-helper.lo cppcut-message.lo am_libcppcutter_la_OBJECTS = $(am__objects_1) $(am__objects_2) libcppcutter_la_OBJECTS = $(am_libcppcutter_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libcppcutter_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libcppcutter_la_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libcppcutter_la_SOURCES) DIST_SOURCES = $(libcppcutter_la_SOURCES) HEADERS = $(cppcutter_include_HEADERS) $(pkginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CXXFLAGS = \ -DCPPCUT_BUILDING \ $(CUTTER_CFLAGS) \ $(COVERAGE_CFLAGS) CLEANFILES = *.gcno *.gcda lib_LTLIBRARIES = libcppcutter.la cppcutter_public_headers = \ cppcut-assertions.h \ cppcut-assertions-helper.h \ cppcut-macros.h \ cppcut-message.h pkginclude_HEADERS = \ cppcutter.h cppcutter_includedir = $(pkgincludedir)/cppcutter cppcutter_include_HEADERS = \ $(cppcutter_public_headers) libcppcutter_sources = \ cppcut-assertions-helper.cpp \ cppcut-message.cpp libcppcutter_la_SOURCES = \ $(cppcutter_public_headers) \ $(libcppcutter_sources) libcppcutter_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ -no-undefined libcppcutter_la_LIBADD = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign cppcutter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign cppcutter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libcppcutter.la: $(libcppcutter_la_OBJECTS) $(libcppcutter_la_DEPENDENCIES) $(AM_V_CXXLD)$(libcppcutter_la_LINK) -rpath $(libdir) $(libcppcutter_la_OBJECTS) $(libcppcutter_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cppcut-assertions-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cppcut-message.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-cppcutter_includeHEADERS: $(cppcutter_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(cppcutter_includedir)" || $(MKDIR_P) "$(DESTDIR)$(cppcutter_includedir)" @list='$(cppcutter_include_HEADERS)'; test -n "$(cppcutter_includedir)" || 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_HEADER) $$files '$(DESTDIR)$(cppcutter_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(cppcutter_includedir)" || exit $$?; \ done uninstall-cppcutter_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(cppcutter_include_HEADERS)'; test -n "$(cppcutter_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(cppcutter_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(cppcutter_includedir)" && rm -f $$files install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cppcutter_includedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) 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-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-cppcutter_includeHEADERS \ install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-cppcutter_includeHEADERS \ uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-cppcutter_includeHEADERS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am \ install-pkgincludeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-cppcutter_includeHEADERS uninstall-libLTLIBRARIES \ uninstall-pkgincludeHEADERS echo-public-headers: @for header in $(cppcutter_include_HEADERS); do \ echo $(abs_srcdir)/$${header}; \ done echo-libcppcutter-sources: @echo $(libcppcutter_sources) # 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: cutter-testing-framework-1.1.7/cppcutter/Makefile.am0000644000175000017500000000176511355531407020734 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CXXFLAGS = \ -DCPPCUT_BUILDING \ $(CUTTER_CFLAGS) \ $(COVERAGE_CFLAGS) CLEANFILES = *.gcno *.gcda lib_LTLIBRARIES = libcppcutter.la cppcutter_public_headers = \ cppcut-assertions.h \ cppcut-assertions-helper.h \ cppcut-macros.h \ cppcut-message.h pkginclude_HEADERS = \ cppcutter.h cppcutter_includedir=$(pkgincludedir)/cppcutter cppcutter_include_HEADERS = \ $(cppcutter_public_headers) libcppcutter_sources = \ cppcut-assertions-helper.cpp \ cppcut-message.cpp libcppcutter_la_SOURCES = \ $(cppcutter_public_headers) \ $(libcppcutter_sources) libcppcutter_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ -no-undefined libcppcutter_la_LIBADD = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) echo-public-headers: @for header in $(cppcutter_include_HEADERS); do \ echo $(abs_srcdir)/$${header}; \ done echo-libcppcutter-sources: @echo $(libcppcutter_sources) cutter-testing-framework-1.1.7/cppcutter/cppcut-message.cpp0000644000175000017500000000247011273715503022316 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include "cppcut-message.h" cut::Message::Message() : buffer_() { } void cut::Message::printf(const char *format, ...) { gchar *formatted_message; va_list args; if (!format) return; va_start(args, format); formatted_message = g_strdup_vprintf(format, args); va_end(args); buffer_ << formatted_message; g_free(formatted_message); } cut::Message::~Message() { cut_message("%s", this->string()); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/cppcutter/cppcut-assertions-helper.cpp0000644000175000017500000000523011346170735024341 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include "cppcut-assertions-helper.h" CPPCUT_DECL void cut::assert_equal(int expected, int actual, const char *expression_expected, const char *expression_actual) { cut::assert_equal_reference(expected, actual, expression_expected, expression_actual); } CPPCUT_DECL void cut::assert_equal(unsigned int expected, unsigned int actual, const char *expression_expected, const char *expression_actual) { cut::assert_equal_reference(expected, actual, expression_expected, expression_actual); } CPPCUT_DECL void cut::assert_equal(long expected, long actual, const char *expression_expected, const char *expression_actual) { cut::assert_equal_reference(expected, actual, expression_expected, expression_actual); } CPPCUT_DECL void cut::assert_equal(unsigned long expected, unsigned long actual, const char *expression_expected, const char *expression_actual) { cut::assert_equal_reference(expected, actual, expression_expected, expression_actual); } CPPCUT_DECL void cut::assert_equal(long long expected, long long actual, const char *expression_expected, const char *expression_actual) { cut::assert_equal_reference(expected, actual, expression_expected, expression_actual); } CPPCUT_DECL void cut::assert_equal(unsigned long long expected, unsigned long long actual, const char *expression_expected, const char *expression_actual) { cut::assert_equal_reference(expected, actual, expression_expected, expression_actual); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/config.h.in0000644000175000017500000000743011525654677016723 0ustar koukou/* config.h.in. Generated from configure.ac by autoheader. */ /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* Gettext package */ #undef GETTEXT_PACKAGE /* Define to 1 if you have the header file. */ #undef HAVE_BFD_H /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have or */ #undef HAVE_C99_STDINT_TYPES /* Define to 1 if you have cairo installed */ #undef HAVE_CAIRO /* Define to 1 if you have cairo PDF backend installed */ #undef HAVE_CAIRO_PDF /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_ELF_H /* Define to 1 if you have gdk-pixbuf installed */ #undef HAVE_GDK_PIXBUF /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have goffice installed */ #undef HAVE_GOFFICE /* Define to 1 if you have gstreamer installed */ #undef HAVE_GSTREAMER /* Define to 1 if you have GTK+ installed */ #undef HAVE_GTK /* Define to 1 if you have GTK+ installed and built with debug mode */ #undef HAVE_GTK_ENABLE_DEBUG /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_IO_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the BFD library. */ #undef HAVE_LIBBFD /* Define to 1 if you have libsoup installed */ #undef HAVE_LIBSOUP /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MACH_O_LOADER_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have Pango cairo supprot installed */ #undef HAVE_PANGO_CAIRO /* 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_SOCKET_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_SYS_UN_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK2_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 if your system needs environ variable declaration. */ #undef NEED_ENVIRON_DECLARATION /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION cutter-testing-framework-1.1.7/gdkcutter-pixbuf.pc.in0000644000175000017500000000041611205747031021073 0ustar koukouprefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ libdir=@libdir@ includedir=@includedir@ Name: GdkCutter Pixbuf Description: Cutter with gdk-pixbuf support. Version: @VERSION@ Requires: gcutter >= @VERSION@, gdk-pixbuf-2.0 Libs: -L${libdir} -lgdkcutter-pixbuf cutter-testing-framework-1.1.7/configure.ac0000644000175000017500000006630411525654564017166 0ustar koukou# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) m4_define([cutter_version_major], [1]) m4_define([cutter_version_minor], [1]) m4_define([cutter_version_micro], [7]) m4_define([cutter_version], [cutter_version_major.cutter_version_minor.cutter_version_micro]) AC_INIT(cutter, [cutter_version], kou@clear-code.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_MACRO_DIR([acmacros]) AC_CONFIG_SRCDIR([cutter/cut-main.c]) AM_CONFIG_HEADER([config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) PACKAGE_TITLE=Cutter AC_SUBST(PACKAGE_TITLE) CUTTER_VERSION_MAJOR=cutter_version_major CUTTER_VERSION_MINOR=cutter_version_minor CUTTER_VERSION_MICRO=cutter_version_micro CUTTER_VERSION=cutter_version AC_SUBST(CUTTER_VERSION_MAJOR) AC_SUBST(CUTTER_VERSION_MINOR) AC_SUBST(CUTTER_VERSION_MICRO) AC_SUBST(CUTTER_VERSION) AC_CANONICAL_HOST AC_MSG_CHECKING([for native Win32]) case "$host" in *-*-mingw*) os_win32=yes ;; *) os_win32=no ;; esac AC_MSG_RESULT([$os_win32]) AC_MSG_CHECKING([for some Win32 platform]) case "$host" in *-*-mingw*|*-*-cygwin*) platform_win32=yes ;; *) platform_win32=no ;; esac AC_MSG_RESULT([$platform_win32]) AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes") AC_ENABLE_SHARED(yes) AC_ENABLE_STATIC(no) AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL LT_CURRENT=1 LT_REVISION=0 LT_AGE=1 LT_VERSION_INFO="$LT_CURRENT:$LT_REVISION:$LT_AGE" AC_SUBST(LT_CURRENT) AC_SUBST(LT_REVISION) AC_SUBST(LT_AGE) AC_SUBST(LT_VERSION_INFO) LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` AC_SUBST(LT_CURRENT_MINUS_AGE) LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[[^_]].*"' AC_SUBST(LIBTOOL_EXPORT_OPTIONS) # Checks for programs. AC_PROG_CC AC_PROG_CXX AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET if test "x$GCC" = "xyes"; then case " $CFLAGS " in *[\ \ ]-Wall[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac case " $CFLAGS " in *[\ \ ]-Wmissing-declarations[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wmissing-declarations" ;; esac case " $CFLAGS " in *[\ \ ]-Wmissing-prototypes[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;; esac case " $CFLAGS " in *[\ \ ]-Wpointer-arith[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wpointer-arith" ;; esac case " $CFLAGS " in *[\ \ ]-Wcast-align[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wcast-align" ;; esac fi NO_STRICT_ALIASING_CFLAGS= if test "x$GCC" = "xyes"; then NO_STRICT_ALIASING_CFLAGS=-fno-strict-aliasing fi AC_SUBST(NO_STRICT_ALIASING_CFLAGS) # Checks for headers AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(io.h) AC_CHECK_HEADERS(windows.h) AC_CHECK_HEADERS(mach-o/loader.h) AC_CHECK_HEADERS(elf.h) AC_CHECK_HEADERS(stdint.h, [have_stdint_h=yes], [have_stdint_h=no]) AC_CHECK_HEADERS(inttypes.h, [have_inttypes_h=yes], [have_inttypes_h=no]) AC_CHECK_HEADERS(winsock2.h, [have_winsock2_h=yes], [have_winsock2_h=no]) AC_CHECK_HEADERS(sys/socket.h, [have_sys_socket_h=yes], [have_sys_socket_h=no]) AC_CHECK_HEADERS(sys/un.h, [have_sys_un_h=yes], [have_sys_un_h=no]) if test "$have_stdint_h" = "yes" -o "$have_inttypes_h" = "yes"; then have_c99_stdint_types=yes AC_DEFINE(HAVE_C99_STDINT_TYPES, 1, [Define to 1 if you have or ]) else have_c99_stdint_types=no fi dnl ************************************************************** dnl Check for MinGW dnl ************************************************************** AC_ARG_ENABLE([mingw-debug], AS_HELP_STRING([--enable-mingw-debug], [Enable MinGW debug])) case $host_os in mingw*) AC_CHECK_TOOL(WINDRES, windres) ;; esac AM_CONDITIONAL([HAVE_WINDRES], [test x"$WINDRES" != x]) WINDOWS_LIBS= if test "$have_winsock2_h" = "yes"; then WINDOWS_LIBS="-lws2_32" fi AC_SUBST(WINDOWS_LIBS) dnl ************************************************************** dnl Check for GLib. dnl ************************************************************** GLIB_REQUIRED=2.12.3 AC_SUBST(GLIB_REQUIRED) AM_PATH_GLIB_2_0($GLIB_REQUIRED, [], [AC_MSG_ERROR([GLib >= $GLIB_REQUIRED required.])], [gmodule gobject gthread]) if test "$glib_config_major_version.$glib_config_minor_version" = "2.12"; then glib_2_12=yes else glib_2_12=no fi AM_CONDITIONAL([GLIB_2_12], [test "$glib_2_12" = "yes"]) dnl ************************************************************** dnl Check for GIO dnl ************************************************************** GIO_REQUIRED=2.16.0 if test "$os_win32" = "no"; then GIO_PACKAGE=gio-unix-2.0 else GIO_PACKAGE=gio-2.0 fi PKG_CHECK_MODULES(GIO, $GIO_PACKAGE >= $GIO_REQUIRED, [gio_exists=yes], [gio_exists=no]) AM_CONDITIONAL([HAVE_GIO], [test "$gio_exists" = "yes"]) dnl ************************************************************** dnl Check for GdkPixbuf dnl ************************************************************** PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0, [gdk_pixbuf_exists=yes], [gdk_pixbuf_exists=no]) AC_SUBST(GDK_PIXBUF_CFLAGS) AC_SUBST(GDK_PIXBUF_LIBS) if test "$gdk_pixbuf_exists" = "yes"; then AC_DEFINE(HAVE_GDK_PIXBUF, 1, [Define to 1 if you have gdk-pixbuf installed]) fi AM_CONDITIONAL([HAVE_GDK_PIXBUF], [test "$gdk_pixbuf_exists" = "yes"]) # Checks for libraries. AC_MSG_CHECKING([whether to try to use BFD]) AC_ARG_ENABLE([bfd], AS_HELP_STRING([--enable-bfd], [Enable BFD detection]), [enable_bfd=$enableval], [enable_bfd=no]) AC_MSG_RESULT([$enable_bfd]) bfd_available=no need_environ_declaration=no BFD_LIBS= if test x"$enable_bfd" = "xyes"; then AC_CHECK_HEADERS([bfd.h], [have_bfd_h=yes], [have_bfd_h=no]) if test "$have_bfd_h" = "yes"; then AC_CHECK_LIB(bfd, xstrerror, [have_libbfd_so=yes], [have_libbfd_so=no]) if test "$have_libbfd_so" = "yes"; then BFD_LIBS="-lbfd" else original_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared" AC_CHECK_LIB(bfd, bfd_init, [have_libbfd=yes], [have_libbfd=no]) AC_CHECK_LIB(iberty, xstrerror, [have_libiberty=yes], [have_libiberty=no]) if test "$have_libbfd" = "yes" -a "$have_libiberty" = "yes"; then BFD_LIBS="-lbfd -liberty" AC_CHECK_DECL(environ, [], [need_environ_declaration=yes]) fi LDFLAGS="$original_LDFLAGS" fi fi AC_MSG_CHECKING([whether BFD available]) if test "$BFD_LIBS" != ""; then bfd_available=yes AC_DEFINE(HAVE_LIBBFD, 1, [Define to 1 if you have the BFD library.]) if test "$need_environ_declaration" = "yes"; then AC_DEFINE(NEED_ENVIRON_DECLARATION, 1, [Define to 1 if your system needs environ variable declaration.]) fi fi AC_MSG_RESULT([$bfd_available]) fi AC_SUBST(BFD_LIBS) AM_CONDITIONAL([HAVE_LIBBFD], [test "$bfd_available" = "yes"]) dnl ************************************************************** dnl for coverage dnl ************************************************************** AC_CHECK_COVERAGE dnl ************************************************************** dnl Configure for maintainer mode. dnl ************************************************************** AM_MAINTAINER_MODE AM_CONDITIONAL([MAINTAINER_MODE], [test "x$USE_MAINTAINER_MODE" = "xyes"]) dnl ************************************************************** dnl Configure for modules. dnl ************************************************************** moduledir="\${libdir}/\$(PACKAGE)/module" AC_SUBST(moduledir) dnl ************************************************************** dnl Configure for factory modules. dnl ************************************************************** factory_moduledir="\${moduledir}/factory" AC_SUBST(factory_moduledir) dnl ************************************************************** dnl Configure for UI modules. dnl ************************************************************** ui_moduledir="\${moduledir}/ui" AC_SUBST(ui_moduledir) dnl ************************************************************** dnl Configure for ui factory modules. dnl ************************************************************** ui_factory_moduledir="\${factory_moduledir}/ui" AC_SUBST(ui_factory_moduledir) dnl ************************************************************** dnl Configure for Report modules. dnl ************************************************************** report_moduledir="\${moduledir}/report" AC_SUBST(report_moduledir) report_factory_moduledir="\${factory_moduledir}/report" AC_SUBST(report_factory_moduledir) dnl ************************************************************** dnl Configure for Stream modules. dnl ************************************************************** stream_moduledir="\${moduledir}/stream" AC_SUBST(stream_moduledir) stream_factory_moduledir="\${factory_moduledir}/stream" AC_SUBST(stream_factory_moduledir) dnl ************************************************************** dnl Check for GTK+ dnl ************************************************************** m4_ifdef([AM_PATH_GTK_2_0], [AM_PATH_GTK_2_0(2.12.0, [gtk_exists="yes"], [gtk_exists="no"], [])], [gtk_exists="no"]) if test "$gtk_exists" != "no"; then AC_DEFINE(HAVE_GTK, 1, [Define to 1 if you have GTK+ installed]) AC_MSG_CHECKING(for GTK+ is built with debug mode) ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$CFLAGS $GTK_LIBS" AC_RUN_IFELSE([ #include #include int main (int argc, char **argv) { GOptionGroup *option_group; GOptionContext *option_context; gchar *help; gboolean debug_mode = FALSE; option_group = gtk_get_option_group(FALSE); option_context = g_option_context_new(NULL); help = g_option_context_get_help(option_context, FALSE, option_group); if (help && g_regex_match_simple("--gtk-debug", help, 0, 0)) { debug_mode = TRUE; } g_option_context_free(option_context); return debug_mode ? EXIT_SUCCESS : EXIT_FAILURE; } ], [AC_DEFINE(HAVE_GTK_ENABLE_DEBUG, 1, [Define to 1 if you have GTK+ installed and built with debug mode]) AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi AM_CONDITIONAL([HAVE_GTK], [test "$gtk_exists" = "yes"]) dnl ************************************************************** dnl Check for GOffice dnl ************************************************************** AC_MSG_CHECKING([whether to try to use GOffice]) AC_ARG_ENABLE([goffice], AS_HELP_STRING([--disable-goffice], [Disable GOffice support]), [enable_goffice=$enableval], [enable_goffice=yes]) AC_MSG_RESULT([$enable_goffice]) goffice_exists=no if test "$enable_goffice" = "yes"; then PKG_CHECK_MODULES(GOFFICE, libgoffice-0.8, [goffice_exists=yes], [goffice_exists=no]) AC_SUBST(GOFFICE_CFLAGS) AC_SUBST(GOFFICE_LIBS) fi if test "$goffice_exists" = "yes"; then AC_DEFINE(HAVE_GOFFICE, 1, [Define to 1 if you have goffice installed]) fi AM_CONDITIONAL([HAVE_GOFFICE], [test "$goffice_exists" = "yes"]) dnl ************************************************************** dnl Check for GStreamer dnl ************************************************************** AC_MSG_CHECKING([whether to try to use GStreamer]) AC_ARG_ENABLE([gstreamer], AS_HELP_STRING([--disable-gstreamer], [Disable GStreamer support]), [enable_gstreamer=$enableval], [enable_gstreamer=yes]) AC_MSG_RESULT([$enable_gstreamer]) gstreamer_exists=no if test "x$enable_gstreamer" = "xyes"; then PKG_CHECK_MODULES(GSTREAMER, gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.0, [gstreamer_exists=yes], [gstreamer_exists=no]) AC_SUBST([GSTREAMER_CFLAGS]) AC_SUBST([GSTREAMER_LIBS]) if test x"$gstreamer_exists" = "xyes"; then AC_DEFINE(HAVE_GSTREAMER, 1, [Define to 1 if you have gstreamer installed]) AC_MSG_CHECKING([where is GStreamer plugin dir]) AC_ARG_WITH([gst-pluginsdir], AS_HELP_STRING([--with-gst-pluginsdir=DIR], [Use DIR for GStreamer plugin directory (default: auto)]), [gst_pluginsdir="$withval"], [gst_pluginsdir="auto"]) if test "$gst_pluginsdir" = "auto"; then gst_pluginsdir=`pkg-config --variable=pluginsdir gstreamer-0.10` fi AC_MSG_RESULT([$gst_pluginsdir]) AC_SUBST(gst_pluginsdir) fi fi AM_CONDITIONAL([HAVE_GSTREAMER], [test $gstreamer_exists = "yes"]) dnl ************************************************************** dnl Check for libsoup dnl ************************************************************** AC_MSG_CHECKING([whether to try to use libsoup]) AC_ARG_ENABLE([libsoup], AS_HELP_STRING([--disable-libsoup], [Disable libsoup support]), [enable_libsoup=$enableval], [enable_libsoup=yes]) AC_MSG_RESULT([$enable_libsoup]) libsoup_exists=no if test "x$enable_libsoup" = "xyes"; then PKG_CHECK_MODULES(LIBSOUP, libsoup-2.4, [libsoup_exists=yes], [libsoup_exists=no]) AC_SUBST([LIBSOUP_CFLAGS]) AC_SUBST([LIBSOUP_LIBS]) if test "$libsoup_exists" = "yes"; then AC_DEFINE(HAVE_LIBSOUP, 1, [Define to 1 if you have libsoup installed]) fi fi AM_CONDITIONAL([HAVE_LIBSOUP], [test $libsoup_exists = "yes"]) dnl ************************************************************** dnl Check for Cairo dnl ************************************************************** cairo_exists=no PKG_CHECK_MODULES(CAIRO, cairo >= 1.4, [cairo_exists=yes], [cairo_exists=no]) AC_SUBST([CAIRO_CFLAGS]) AC_SUBST([CAIRO_LIBS]) if test x"$cairo_exists" = "xyes"; then AC_DEFINE(HAVE_CAIRO, 1, [Define to 1 if you have cairo installed]) fi AM_CONDITIONAL([HAVE_CAIRO], [test $cairo_exists = "yes"]) dnl ************************************************************** dnl Check for Cairo PDF backend dnl ************************************************************** cairo_pdf_exists=no PKG_CHECK_MODULES(CAIRO_PDF, cairo-pdf, [cairo_pdf_exists=yes], [cairo_pdf_exists=no]) AC_SUBST([CAIRO_PDF_CFLAGS]) AC_SUBST([CAIRO_PDF_LIBS]) if test x"$cairo_pdf_exists" = "xyes"; then AC_DEFINE(HAVE_CAIRO_PDF, 1, [Define to 1 if you have cairo PDF backend installed]) fi AM_CONDITIONAL([HAVE_CAIRO_PDF], [test $cairo_pdf_exists = "yes"]) dnl ************************************************************** dnl Check for Pango cairo support dnl ************************************************************** pango_cairo_exists=no PKG_CHECK_MODULES(PANGO_CAIRO, pangocairo, [pango_cairo_exists=yes], [pango_cairo_exists=no]) AC_SUBST([PANGO_CAIRO_CFLAGS]) AC_SUBST([PANGO_CAIRO_LIBS]) if test x"$pango_cairo_exists" = "xyes"; then AC_DEFINE(HAVE_PANGO_CAIRO, 1, [Define to 1 if you have Pango cairo supprot installed]) fi AM_CONDITIONAL([HAVE_PANGO_CAIRO], [test $pango_cairo_exists = "yes"]) dnl ************************************************************** dnl Check for PDF report dnl ************************************************************** AM_CONDITIONAL([PDF_REPORT_AVAILABLE], [test $pango_cairo_exists = "yes" -a $cairo_pdf_exists = "yes"]) dnl ************************************************************** dnl Checks for gtk-doc dnl ************************************************************** GTK_DOC_CHECK([1.8]) dnl ************************************************************** dnl Checks for RD2 dnl ************************************************************** AC_PATH_PROG(RUBY, ruby, ruby-not-found) AC_PATH_PROG(RD2, rd2, rd2-not-found) AM_CONDITIONAL([HAVE_RD2], [test "$RD2" != "rd2-not-found"]) dnl ************************************************************** dnl Check for gettext. dnl ************************************************************** AC_PROG_INTLTOOL([0.35.0]) AM_GLIB_GNU_GETTEXT GETTEXT_PACKAGE=cutter AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [Gettext package]) dnl ************************************************************** dnl Check for SF.net. dnl ************************************************************** SF_PROJECT_ID=cutter AC_SUBST(SF_PROJECT_ID) SF_PROJECT_NAME=Cutter AC_SUBST(SF_PROJECT_NAME) AC_ARG_WITH([sf-user], AS_HELP_STRING([--with-sf-user=NAME], [Use NAME to access sf.net]), [SF_USER="$withval"]) AC_SUBST(SF_USER) SF_USER_OPTION="" if test -n "$SF_USER"; then SF_USER_OPTION="--username $SF_USER" fi AC_SUBST(SF_USER_OPTION) SF_HOST="web.sourceforge.net" if test -n "$SF_USER"; then SF_HOST="$SF_USER,cutter@$SF_HOST" else SF_HOST="$USER,cutter@$SF_HOST" fi AC_SUBST(SF_HOST) SF_HTDOCS_PATH="/home/groups/c/cu/cutter/htdocs" AC_SUBST(SF_HTDOCS_PATH) SF_HTDOCS="$SF_HOST:$SF_HTDOCS_PATH" AC_SUBST(SF_HTDOCS) SF_REPOS="https://cutter.svn.sourceforge.net/svnroot/cutter/cutter" AC_SUBST(SF_REPOS) dnl ************************************************************** dnl Cutter related variables. dnl ************************************************************** icons_dir="\$(pkgdatadir)/icons" AC_SUBST(icons_dir) CUTTER="\$(top_builddir)/cutter/cutter\$(EXEEXT)" AC_SUBST(CUTTER) CUTTER_CFLAGS="$GLIB_CFLAGS -DG_DISABLE_DEPRECATED -DUI_MODULEDIR=\\\"\"\$(ui_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS $GIO_CFLAGS" CUTTER_CFLAGS="$CUTTER_CFLAGS -DUI_FACTORY_MODULEDIR=\\\"\"\$(ui_factory_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DREPORT_MODULEDIR=\\\"\"\$(report_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DREPORT_FACTORY_MODULEDIR=\\\"\"\$(report_factory_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DSTREAM_MODULEDIR=\\\"\"\$(stream_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DSTREAM_FACTORY_MODULEDIR=\\\"\"\$(stream_factory_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DFACTORY_MODULEDIR=\\\"\"\$(factory_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DICONSDIR=\\\"\"\$(iconsdir)\"\\\"" AC_SUBST(CUTTER_CFLAGS) dnl ************************************************************** dnl cutter/cut-config.h dnl ************************************************************** AC_CONFIG_COMMANDS([cutter/cut-config.h-start], [ cat > cutter/cut-config.h <<\_______EOF /* cut-config.h * * This is a generated file. Please modify 'configure.ac' */ #ifndef __CUT_CONFIG_H__ #define __CUT_CONFIG_H__ _______EOF ]) if test "$have_stdint_h" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-config.h-have-stdint.h], [ echo "#define CUT_HAVE_STDINT_H 1" >> cutter/cut-config.h ]) else AC_CONFIG_COMMANDS([cutter/cut-config.h-not-have-stdint.h], [ echo "/* #undef CUT_HAVE_STDINT_H */" >> cutter/cut-config.h ]) fi if test "$have_inttypes_h" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-config.h-have-inttypes.h], [ echo "#define CUT_HAVE_INTTYPES_H 1" >> cutter/cut-config.h ]) else AC_CONFIG_COMMANDS([cutter/cut-config.h-not-have-inttypes.h], [ echo "/* #undef CUT_HAVE_INTTYPES_H */" >> cutter/cut-config.h ]) fi if test "$have_winsock2_h" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-config.h-have-winsock2.h], [ echo "#define CUT_HAVE_WINSOCK2_H 1" >> cutter/cut-config.h ]) else AC_CONFIG_COMMANDS([cutter/cut-config.h-not-have-winsock2.h], [ echo "/* #undef CUT_HAVE_WINSOCK2_H */" >> cutter/cut-config.h ]) fi if test "$have_sys_socket_h" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-config.h-have-sys-socket.h], [ echo "#define CUT_HAVE_SYS_SOCKET_H 1" >> cutter/cut-config.h ]) else AC_CONFIG_COMMANDS([cutter/cut-config.h-not-have-sys-socket.h], [ echo "/* #socketdef CUT_HAVE_SYS_SOCKET_H */" >> cutter/cut-config.h ]) fi if test "$have_sys_un_h" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-config.h-have-sys-un.h], [ echo "#define CUT_HAVE_SYS_UN_H 1" >> cutter/cut-config.h ]) else AC_CONFIG_COMMANDS([cutter/cut-config.h-not-have-sys-un.h], [ echo "/* #undef CUT_HAVE_SYS_UN_H */" >> cutter/cut-config.h ]) fi AC_CONFIG_COMMANDS([cutter/cut-config.h-end], [ cat >> cutter/cut-config.h <<\_______EOF #endif _______EOF ]) dnl ************************************************************** dnl cutter/cut-features.h dnl ************************************************************** AC_CONFIG_COMMANDS([cutter/cut-features.h-start], [ cat > cutter/cut-features.h <<\_______EOF /* cut-features.h * * This is a generated file. Please modify 'configure.ac' */ #ifndef __CUT_FEATURES_H__ #define __CUT_FEATURES_H__ /** * SECTION: cut-features * @title: Available features * @short_description: Available features in the installed Cutter. * * There are some macros to check a feature is available in the * installed Cutter. */ /** * CUT_SUPPORT_GLIB: * * Shows GLib support is available. That is, we can use <gcutter.h>. * It is always defined. */ #define CUT_SUPPORT_GLIB 1 _______EOF ]) AC_CONFIG_COMMANDS([cutter/cut-features.h-gdk-pixbuf-header], [ cat <<\_______EOF >> cutter/cut-features.h /** * CUT_SUPPORT_GDK_PIXBUF: * * Shows GdkPixbuf support is available. * That is, we can use <gdkcutter-pixbuf.h>. */ _______EOF ]) if test "$gdk_pixbuf_exists" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-features.h-gdk-pixbuf-enable], [ echo "#define CUT_SUPPORT_GDK_PIXBUF 1" >> cutter/cut-features.h ]) else AC_CONFIG_COMMANDS([cutter/cut-features.h-gdk-pixbuf-disable], [ echo "/* #undef CUT_SUPPORT_GDK_PIXBUF */" >> cutter/cut-features.h ]) fi AC_CONFIG_COMMANDS([cutter/cut-features.h-gio-header], [ cat <<\_______EOF >> cutter/cut-features.h /** * CUT_SUPPORT_GIO: * * Shows GIO support is available. */ _______EOF ]) if test "$gio_exists" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-features.h-gio-enable], [ echo "#define CUT_SUPPORT_GIO 1" >> cutter/cut-features.h ]) else AC_CONFIG_COMMANDS([cutter/cut-features.h-gio-disable], [ echo "/* #undef CUT_SUPPORT_GIO */" >> cutter/cut-features.h ]) fi AC_CONFIG_COMMANDS([cutter/cut-features.h-libsoup-header], [ cat <<\_______EOF >> cutter/cut-features.h /** * CUT_SUPPORT_LIBSOUP: * * Shows LibSoup support is available. */ _______EOF ]) if test "$libsoup_exists" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-features.h-libsoup-enable], [ echo "#define CUT_SUPPORT_LIBSOUP 1" >> cutter/cut-features.h ]) else AC_CONFIG_COMMANDS([cutter/cut-features.h-libsoup-disable], [ echo "/* #undef CUT_SUPPORT_LIBSOUP */" >> cutter/cut-features.h ]) fi AC_CONFIG_COMMANDS([cutter/cut-features.h-have-c99-stdint-types-header], [ cat <<\_______EOF >> cutter/cut-features.h /** * CUT_SUPPORT_C99_STDINT_TYPES: * * Shows C99 stdint types support is available. * That is, we can use assertions that use C99 stdint types. * e.g. cut_assert_equal_int_least8(). */ _______EOF ]) if test "$have_c99_stdint_types" = "yes"; then AC_CONFIG_COMMANDS([cutter/cut-features.h-have-c99-stdint-types], [ echo "#define CUT_SUPPORT_C99_STDINT_TYPES 1" >> cutter/cut-features.h ]) else AC_CONFIG_COMMANDS([cutter/cut-features.h-not-have-c99-stdint-types], [ echo "/* #undef CUT_SUPPORT_C99_STDINT_TYPES */" >> cutter/cut-features.h ]) fi AC_CONFIG_COMMANDS([cutter/cut-features.h-end], [ cat >> cutter/cut-features.h <<\_______EOF #endif _______EOF ]) AC_CONFIG_FILES([Makefile cutter.pc gcutter.pc cppcutter.pc libcutter.pc gdkcutter-pixbuf.pc soupcutter.pc rpm/centos/cutter.spec rpm/fedora/cutter.spec m4macros/Makefile glib-compatible/Makefile glib-compatible/pcre/Makefile gcutter/Makefile gdkcutter-pixbuf/Makefile soupcutter/Makefile cutter/cut-version.h cutter/Makefile cppcutter/Makefile module/Makefile module/ui/Makefile module/report/Makefile module/stream/Makefile gst-plugins/Makefile gst-plugins/test/Makefile data/Makefile data/icons/Makefile data/icons/kinotan/Makefile sample/Makefile sample/glib/Makefile sample/gtk+/Makefile test/Makefile test/fixtures/Makefile test/fixtures/assertions/Makefile test/fixtures/assertions/sub/Makefile test/fixtures/data/Makefile test/fixtures/factory/Makefile test/fixtures/factory/type1/Makefile test/fixtures/factory/type2/Makefile test/fixtures/loader/Makefile test/fixtures/loader/attribute/Makefile test/fixtures/loader/fixture/Makefile test/fixtures/loader/iterator/Makefile test/fixtures/loader/module/Makefile test/fixtures/loader/suite/Makefile test/fixtures/loader/test/Makefile test/fixtures/loader/cpp/Makefile test/fixtures/loader/cpp-fixture/Makefile test/fixtures/pipeline/Makefile test/fixtures/pipeline/error/Makefile test/fixtures/pipeline/failure/Makefile test/fixtures/pipeline/omission/Makefile test/fixtures/pipeline/pending/Makefile test/fixtures/pipeline/success/Makefile test/fixtures/pipeline/setup-error/Makefile test/fixtures/sub-process/Makefile test/fixtures/sub-process/fixtures/Makefile test/fixtures/sub-process/fixtures/normal/Makefile test/fixtures/sub-process-group/Makefile test/fixtures/sub-process-group/fixtures/Makefile test/fixtures/sub-process-group/fixtures/normal/Makefile test/fixtures/repository/Makefile test/fixtures/xml-stream/Makefile test/fixtures/file-stream-reader/Makefile test/fixtures/pixbuf/Makefile test/fixtures/path/Makefile test/fixtures/path/parent/Makefile test/fixtures/path/parent/sub/Makefile test/fixtures/test-context/Makefile test/fixtures/test-directory/Makefile test/lib/Makefile test/lib/cuttest-echo/Makefile test/cutter/Makefile test/gcutter/Makefile test/cppcutter/Makefile test/gdkcutter-pixbuf/Makefile test/soupcutter/Makefile po/Makefile.in misc/Makefile license/Makefile doc/Makefile doc/reference/version.xml doc/reference/Makefile html/Makefile vcc/Makefile apt/Makefile yum/Makefile]) AC_OUTPUT echo echo "Configure Result:" echo echo " Options:" echo " coverage : $cutter_enable_coverage" echo echo " Libraries:" echo " GLib <= 2.12 : $glib_2_12" echo " GIO : $gio_exists" echo " GdkPixbuf : $gdk_pixbuf_exists" echo " GTK+ : $gtk_exists" echo " GOffice : $goffice_exists" echo " GStreamer : $gstreamer_exists" echo " libsoup : $libsoup_exists" echo " cairo : $cairo_exists" echo " cairo-pdf : $cairo_pdf_exists" echo " pango-cairo : $pango_cairo_exists" echo " BFD : $bfd_available" echo echo " Paths:" echo " modules directory : $moduledir" echo " UI modules directory : $ui_moduledir" echo " UI factory modules directory : $ui_factory_moduledir" echo " report modules directory : $report_moduledir" echo " report factory modules directory : $report_factory_moduledir" echo " stream modules directory : $stream_moduledir" echo " stream factory modules directory : $stream_factory_moduledir" echo echo " GStreamer plugins directory : $gst_pluginsdir" echo echo " Tools:" echo " GTK-Doc : $enable_gtk_doc" echo " Ruby : $RUBY" echo " rd2 : $RD2" if test "$cutter_enable_coverage" = "yes"; then echo " lcov : $LCOV" echo " genhtml : $GENHTML" fi cutter-testing-framework-1.1.7/configure0000755000175000017500000253361711525654640016612 0ustar koukou#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.67 for cutter 1.1.7. # # 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 kou@clear-code.com $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'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi 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='cutter' PACKAGE_TARNAME='cutter' PACKAGE_VERSION='1.1.7' PACKAGE_STRING='cutter 1.1.7' PACKAGE_BUGREPORT='kou@clear-code.com' PACKAGE_URL='' ac_unique_file="cutter/cut-main.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS CUTTER_CFLAGS CUTTER icons_dir SF_REPOS SF_HTDOCS SF_HTDOCS_PATH SF_HOST SF_USER_OPTION SF_USER SF_PROJECT_NAME SF_PROJECT_ID GETTEXT_PACKAGE MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES CATOBJEXT CATALOGS MSGFMT_OPTS DATADIRNAME ALL_LINGUAS INTLTOOL_PERL GMSGFMT MSGFMT MSGMERGE XGETTEXT INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE USE_NLS HAVE_RD2_FALSE HAVE_RD2_TRUE RD2 RUBY GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE GTK_DOC_BUILD_PDF_TRUE GTK_DOC_BUILD_HTML_FALSE GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK PDF_REPORT_AVAILABLE_FALSE PDF_REPORT_AVAILABLE_TRUE HAVE_PANGO_CAIRO_FALSE HAVE_PANGO_CAIRO_TRUE PANGO_CAIRO_LIBS PANGO_CAIRO_CFLAGS HAVE_CAIRO_PDF_FALSE HAVE_CAIRO_PDF_TRUE CAIRO_PDF_LIBS CAIRO_PDF_CFLAGS HAVE_CAIRO_FALSE HAVE_CAIRO_TRUE CAIRO_LIBS CAIRO_CFLAGS HAVE_LIBSOUP_FALSE HAVE_LIBSOUP_TRUE LIBSOUP_LIBS LIBSOUP_CFLAGS HAVE_GSTREAMER_FALSE HAVE_GSTREAMER_TRUE gst_pluginsdir GSTREAMER_LIBS GSTREAMER_CFLAGS HAVE_GOFFICE_FALSE HAVE_GOFFICE_TRUE GOFFICE_LIBS GOFFICE_CFLAGS HAVE_GTK_FALSE HAVE_GTK_TRUE GTK_LIBS GTK_CFLAGS stream_factory_moduledir stream_moduledir report_factory_moduledir report_moduledir ui_factory_moduledir ui_moduledir factory_moduledir moduledir MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE GENHTML_OPTIONS COVERAGE_REPORT_DIR COVERAGE_INFO_FILE ENABLE_COVERAGE_FALSE ENABLE_COVERAGE_TRUE COVERAGE_CFLAGS GENHTML LCOV ac_check_coverage_makefile HAVE_LIBBFD_FALSE HAVE_LIBBFD_TRUE BFD_LIBS HAVE_GDK_PIXBUF_FALSE HAVE_GDK_PIXBUF_TRUE GDK_PIXBUF_LIBS GDK_PIXBUF_CFLAGS HAVE_GIO_FALSE HAVE_GIO_TRUE GIO_LIBS GIO_CFLAGS GLIB_2_12_FALSE GLIB_2_12_TRUE GLIB_MKENUMS GOBJECT_QUERY GLIB_GENMARSHAL GLIB_LIBS GLIB_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG GLIB_REQUIRED WINDOWS_LIBS HAVE_WINDRES_FALSE HAVE_WINDRES_TRUE WINDRES NO_STRICT_ALIASING_CFLAGS CXXCPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX LIBTOOL_EXPORT_OPTIONS LT_CURRENT_MINUS_AGE LT_VERSION_INFO LT_AGE LT_REVISION LT_CURRENT CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED 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 LIBTOOL OBJDUMP DLLTOOL AS PLATFORM_WIN32_FALSE PLATFORM_WIN32_TRUE OS_WIN32_FALSE OS_WIN32_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build CUTTER_VERSION CUTTER_VERSION_MICRO CUTTER_VERSION_MINOR CUTTER_VERSION_MAJOR PACKAGE_TITLE AM_BACKSLASH AM_DEFAULT_VERBOSITY am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_shared enable_static with_pic enable_fast_install enable_dependency_tracking with_gnu_ld enable_libtool_lock enable_mingw_debug enable_glibtest enable_bfd enable_coverage enable_maintainer_mode enable_gtktest enable_goffice enable_gstreamer with_gst_pluginsdir enable_libsoup with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf enable_nls with_sf_user ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC CXXCPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GIO_CFLAGS GIO_LIBS GDK_PIXBUF_CFLAGS GDK_PIXBUF_LIBS GOFFICE_CFLAGS GOFFICE_LIBS GSTREAMER_CFLAGS GSTREAMER_LIBS LIBSOUP_CFLAGS LIBSOUP_LIBS CAIRO_CFLAGS CAIRO_LIBS CAIRO_PDF_CFLAGS CAIRO_PDF_LIBS PANGO_CAIRO_CFLAGS PANGO_CAIRO_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 cutter 1.1.7 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/cutter] --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 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 cutter 1.1.7:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=no] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-libtool-lock avoid locking (might break parallel builds) --enable-mingw-debug Enable MinGW debug --disable-glibtest do not try to compile and run a test GLIB program --enable-bfd Enable BFD detection --enable-coverage Enable coverage --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-gtktest do not try to compile and run a test GTK+ program --disable-goffice Disable GOffice support --disable-gstreamer Disable GStreamer support --disable-libsoup Disable libsoup support --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] --disable-nls do not use Native Language Support Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-gst-pluginsdir=DIR Use DIR for GStreamer plugin directory (default: auto) --with-html-dir=PATH path to installed docs --with-sf-user=NAME Use NAME to access sf.net 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 CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP 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 GIO_CFLAGS C compiler flags for GIO, overriding pkg-config GIO_LIBS linker flags for GIO, 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 GOFFICE_CFLAGS C compiler flags for GOFFICE, overriding pkg-config GOFFICE_LIBS linker flags for GOFFICE, overriding pkg-config GSTREAMER_CFLAGS C compiler flags for GSTREAMER, overriding pkg-config GSTREAMER_LIBS linker flags for GSTREAMER, overriding pkg-config LIBSOUP_CFLAGS C compiler flags for LIBSOUP, overriding pkg-config LIBSOUP_LIBS linker flags for LIBSOUP, overriding pkg-config CAIRO_CFLAGS C compiler flags for CAIRO, overriding pkg-config CAIRO_LIBS linker flags for CAIRO, overriding pkg-config CAIRO_PDF_CFLAGS C compiler flags for CAIRO_PDF, overriding pkg-config CAIRO_PDF_LIBS linker flags for CAIRO_PDF, overriding pkg-config PANGO_CAIRO_CFLAGS C compiler flags for PANGO_CAIRO, overriding pkg-config PANGO_CAIRO_LIBS linker flags for PANGO_CAIRO, 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 . _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 cutter configure 1.1.7 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_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_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 # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_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_cxx_preproc_warn_flag$ac_cxx_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_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_header_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 kou@clear-code.com ## ## --------------------------------- ##" ) | 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_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&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 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _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_decl 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 cutter $as_me 1.1.7, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5 ; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in config "$srcdir"/config; 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 config \"$srcdir\"/config" "$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=$PACKAGE_NAME VERSION=$PACKAGE_VERSION 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 -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac AM_BACKSLASH='\' PACKAGE_TITLE=Cutter CUTTER_VERSION_MAJOR=1 CUTTER_VERSION_MINOR=1 CUTTER_VERSION_MICRO=7 CUTTER_VERSION=1.1.7 # 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5 $as_echo_n "checking for native Win32... " >&6; } case "$host" in *-*-mingw*) os_win32=yes ;; *) os_win32=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $os_win32" >&5 $as_echo "$os_win32" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for some Win32 platform" >&5 $as_echo_n "checking for some Win32 platform... " >&6; } case "$host" in *-*-mingw*|*-*-cygwin*) platform_win32=yes ;; *) platform_win32=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $platform_win32" >&5 $as_echo "$platform_win32" >&6; } if test "$os_win32" = "yes"; then OS_WIN32_TRUE= OS_WIN32_FALSE='#' else OS_WIN32_TRUE='#' OS_WIN32_FALSE= fi if test "$platform_win32" = "yes"; then PLATFORM_WIN32_TRUE= PLATFORM_WIN32_FALSE='#' else PLATFORM_WIN32_TRUE='#' PLATFORM_WIN32_FALSE= fi # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; 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_AS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # 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_AS="${ac_tool_prefix}as" $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 AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; 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_AS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # 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_AS="as" $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_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" 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 AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; 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_DLLTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ac_tool_prefix}dlltool" $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 DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; 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_DLLTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_DLLTOOL="dlltool" $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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" 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 DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump" $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 OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; 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_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump" $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" 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 OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if test "${ac_cv_path_SED+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $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 fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_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 fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # 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 ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test "${lt_cv_path_NM+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$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 DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" 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 DUMPBIN=$ac_ct_DUMPBIN fi fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if test "${lt_cv_nm_interface+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:5350: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:5353: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:5356: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; 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, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump" $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 OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; 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_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump" $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" 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 OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; 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_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # 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_AR="${ac_tool_prefix}ar" $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 AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; 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_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="ar" $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_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" 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 AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru 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 test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 6559 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil" $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 DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; 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_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil" $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" 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 DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit" $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 NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; 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_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit" $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" 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 NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; 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_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo" $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 LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; 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_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo" $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_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" 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 LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; 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_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool" $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 OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; 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_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool" $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_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" 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 OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; 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_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64" $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 OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; 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_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64" $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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" 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 OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac 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 ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if test "${lt_cv_objdir+set}" = set; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" 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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8026: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8030: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8365: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8369: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8470: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8474: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8525: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8529: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= 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 ;; linux* | k*bsd*-gnu) link_all_deplibs=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # 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. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. 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 cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' 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 cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; 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 exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi 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 exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ 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 # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; 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=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi 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 export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # 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 "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi 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_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # 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*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void) {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' 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 allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=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_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 10909 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11005 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $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; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } 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 CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: LT_CURRENT=1 LT_REVISION=0 LT_AGE=1 LT_VERSION_INFO="$LT_CURRENT:$LT_REVISION:$LT_AGE" LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[^_].*"' # Checks for programs. 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 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 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 if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; 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 { $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; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_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_cxx_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_cxx_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_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_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_cxx_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_cxx_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;} _lt_caught_CXX_error=yes; } 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 else _lt_caught_CXX_error=yes fi 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 archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # 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 ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; 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 exp_sym_flag='-Bexport' no_entry_flag="" 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 case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ 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_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5]* | *pgcpp\ [1-5]*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 $as_echo "$lt_prog_compiler_pic_CXX" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14576: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14580: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14675: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14679: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14727: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14731: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 $as_echo "$archive_cmds_need_lc_CXX" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes 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 ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; 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, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $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 if test "x$GCC" = "xyes"; then case " $CFLAGS " in *\ \ -Wall\ \ *) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac case " $CFLAGS " in *\ \ -Wmissing-declarations\ \ *) ;; *) CFLAGS="$CFLAGS -Wmissing-declarations" ;; esac case " $CFLAGS " in *\ \ -Wmissing-prototypes\ \ *) ;; *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;; esac case " $CFLAGS " in *\ \ -Wpointer-arith\ \ *) ;; *) CFLAGS="$CFLAGS -Wpointer-arith" ;; esac case " $CFLAGS " in *\ \ -Wcast-align\ \ *) ;; *) CFLAGS="$CFLAGS -Wcast-align" ;; esac fi NO_STRICT_ALIASING_CFLAGS= if test "x$GCC" = "xyes"; then NO_STRICT_ALIASING_CFLAGS=-fno-strict-aliasing fi # Checks for headers { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if test "${ac_cv_header_sys_wait_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi for ac_header in io.h do : ac_fn_c_check_header_mongrel "$LINENO" "io.h" "ac_cv_header_io_h" "$ac_includes_default" if test "x$ac_cv_header_io_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IO_H 1 _ACEOF fi done 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 for ac_header in mach-o/loader.h do : ac_fn_c_check_header_mongrel "$LINENO" "mach-o/loader.h" "ac_cv_header_mach_o_loader_h" "$ac_includes_default" if test "x$ac_cv_header_mach_o_loader_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MACH_O_LOADER_H 1 _ACEOF fi done for ac_header in elf.h do : ac_fn_c_check_header_mongrel "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default" if test "x$ac_cv_header_elf_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ELF_H 1 _ACEOF fi done for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF have_stdint_h=yes else have_stdint_h=no fi done for ac_header in inttypes.h do : ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF have_inttypes_h=yes else have_inttypes_h=no fi done for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF have_winsock2_h=yes else have_winsock2_h=no fi done for ac_header in sys/socket.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" if test "x$ac_cv_header_sys_socket_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SOCKET_H 1 _ACEOF have_sys_socket_h=yes else have_sys_socket_h=no fi done for ac_header in sys/un.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/un.h" "ac_cv_header_sys_un_h" "$ac_includes_default" if test "x$ac_cv_header_sys_un_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_UN_H 1 _ACEOF have_sys_un_h=yes else have_sys_un_h=no fi done if test "$have_stdint_h" = "yes" -o "$have_inttypes_h" = "yes"; then have_c99_stdint_types=yes $as_echo "#define HAVE_C99_STDINT_TYPES 1" >>confdefs.h else have_c99_stdint_types=no fi # Check whether --enable-mingw-debug was given. if test "${enable_mingw_debug+set}" = set; then : enableval=$enable_mingw_debug; fi case $host_os in mingw*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_WINDRES+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_WINDRES="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi ;; esac if test x"$WINDRES" != x; then HAVE_WINDRES_TRUE= HAVE_WINDRES_FALSE='#' else HAVE_WINDRES_TRUE='#' HAVE_WINDRES_FALSE= fi WINDOWS_LIBS= if test "$have_winsock2_h" = "yes"; then WINDOWS_LIBS="-lws2_32" fi GLIB_REQUIRED=2.12.3 # Check whether --enable-glibtest was given. if test "${enable_glibtest+set}" = set; then : enableval=$enable_glibtest; else enable_glibtest=yes fi pkg_config_args=glib-2.0 for module in . gmodule gobject gthread do case "$module" in gmodule) pkg_config_args="$pkg_config_args gmodule-2.0" ;; gmodule-no-export) pkg_config_args="$pkg_config_args gmodule-no-export-2.0" ;; gobject) pkg_config_args="$pkg_config_args gobject-2.0" ;; gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; gio*) pkg_config_args="$pkg_config_args $module-2.0" ;; esac done 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.16 { $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 no_glib="" if test "x$PKG_CONFIG" = x ; then no_glib=yes PKG_CONFIG=no fi min_glib_version=$GLIB_REQUIRED { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB - version >= $min_glib_version" >&5 $as_echo_n "checking for GLIB - version >= $min_glib_version... " >&6; } if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" enable_glibtest=no fi if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then : else no_glib=yes fi fi if test x"$no_glib" = x ; then GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_glibtest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$GLIB_LIBS $LIBS" rm -f conf.glibtest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; fclose (fopen ("conf.glibtest", "w")); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_glib_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_glib_version"); exit(1); } if ((glib_major_version != $glib_config_major_version) || (glib_minor_version != $glib_config_minor_version) || (glib_micro_version != $glib_config_micro_version)) { printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, glib_major_version, glib_minor_version, glib_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((glib_major_version != GLIB_MAJOR_VERSION) || (glib_minor_version != GLIB_MINOR_VERSION) || (glib_micro_version != GLIB_MICRO_VERSION)) { printf("*** GLIB header files (version %d.%d.%d) do not match\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", glib_major_version, glib_minor_version, glib_micro_version); } else { if ((glib_major_version > major) || ((glib_major_version == major) && (glib_minor_version > minor)) || ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", glib_major_version, glib_minor_version, glib_micro_version); printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_glib=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_glib" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&5 $as_echo "yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://www.freedesktop.org/software/pkgconfig/" else if test -f conf.glibtest ; then : else echo "*** Could not run GLIB test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GLIB or finding the wrong" echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GLIB is incorrectly installed." fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GLIB_CFLAGS="" GLIB_LIBS="" GLIB_GENMARSHAL="" GOBJECT_QUERY="" GLIB_MKENUMS="" as_fn_error $? "GLib >= $GLIB_REQUIRED required." "$LINENO" 5 fi rm -f conf.glibtest if test "$glib_config_major_version.$glib_config_minor_version" = "2.12"; then glib_2_12=yes else glib_2_12=no fi if test "$glib_2_12" = "yes"; then GLIB_2_12_TRUE= GLIB_2_12_FALSE='#' else GLIB_2_12_TRUE='#' GLIB_2_12_FALSE= fi GIO_REQUIRED=2.16.0 if test "$os_win32" = "no"; then GIO_PACKAGE=gio-unix-2.0 else GIO_PACKAGE=gio-2.0 fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIO" >&5 $as_echo_n "checking for GIO... " >&6; } if test -n "$GIO_CFLAGS"; then pkg_cv_GIO_CFLAGS="$GIO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GIO_PACKAGE >= \$GIO_REQUIRED\""; } >&5 ($PKG_CONFIG --exists --print-errors "$GIO_PACKAGE >= $GIO_REQUIRED") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GIO_CFLAGS=`$PKG_CONFIG --cflags "$GIO_PACKAGE >= $GIO_REQUIRED" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GIO_LIBS"; then pkg_cv_GIO_LIBS="$GIO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GIO_PACKAGE >= \$GIO_REQUIRED\""; } >&5 ($PKG_CONFIG --exists --print-errors "$GIO_PACKAGE >= $GIO_REQUIRED") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GIO_LIBS=`$PKG_CONFIG --libs "$GIO_PACKAGE >= $GIO_REQUIRED" 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 GIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$GIO_PACKAGE >= $GIO_REQUIRED" 2>&1` else GIO_PKG_ERRORS=`$PKG_CONFIG --print-errors "$GIO_PACKAGE >= $GIO_REQUIRED" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GIO_PKG_ERRORS" >&5 gio_exists=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } gio_exists=no else GIO_CFLAGS=$pkg_cv_GIO_CFLAGS GIO_LIBS=$pkg_cv_GIO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } gio_exists=yes fi if test "$gio_exists" = "yes"; then HAVE_GIO_TRUE= HAVE_GIO_FALSE='#' else HAVE_GIO_TRUE='#' HAVE_GIO_FALSE= 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 gdk_pixbuf_exists=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } gdk_pixbuf_exists=no 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; } gdk_pixbuf_exists=yes fi if test "$gdk_pixbuf_exists" = "yes"; then $as_echo "#define HAVE_GDK_PIXBUF 1" >>confdefs.h fi if test "$gdk_pixbuf_exists" = "yes"; then HAVE_GDK_PIXBUF_TRUE= HAVE_GDK_PIXBUF_FALSE='#' else HAVE_GDK_PIXBUF_TRUE='#' HAVE_GDK_PIXBUF_FALSE= fi # Checks for libraries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to try to use BFD" >&5 $as_echo_n "checking whether to try to use BFD... " >&6; } # Check whether --enable-bfd was given. if test "${enable_bfd+set}" = set; then : enableval=$enable_bfd; enable_bfd=$enableval else enable_bfd=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_bfd" >&5 $as_echo "$enable_bfd" >&6; } bfd_available=no need_environ_declaration=no BFD_LIBS= if test x"$enable_bfd" = "xyes"; then for ac_header in bfd.h do : ac_fn_c_check_header_mongrel "$LINENO" "bfd.h" "ac_cv_header_bfd_h" "$ac_includes_default" if test "x$ac_cv_header_bfd_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BFD_H 1 _ACEOF have_bfd_h=yes else have_bfd_h=no fi done if test "$have_bfd_h" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xstrerror in -lbfd" >&5 $as_echo_n "checking for xstrerror in -lbfd... " >&6; } if test "${ac_cv_lib_bfd_xstrerror+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbfd $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 xstrerror (); int main () { return xstrerror (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bfd_xstrerror=yes else ac_cv_lib_bfd_xstrerror=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_bfd_xstrerror" >&5 $as_echo "$ac_cv_lib_bfd_xstrerror" >&6; } if test "x$ac_cv_lib_bfd_xstrerror" = x""yes; then : have_libbfd_so=yes else have_libbfd_so=no fi if test "$have_libbfd_so" = "yes"; then BFD_LIBS="-lbfd" else original_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bfd_init in -lbfd" >&5 $as_echo_n "checking for bfd_init in -lbfd... " >&6; } if test "${ac_cv_lib_bfd_bfd_init+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbfd $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 bfd_init (); int main () { return bfd_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bfd_bfd_init=yes else ac_cv_lib_bfd_bfd_init=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_bfd_bfd_init" >&5 $as_echo "$ac_cv_lib_bfd_bfd_init" >&6; } if test "x$ac_cv_lib_bfd_bfd_init" = x""yes; then : have_libbfd=yes else have_libbfd=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xstrerror in -liberty" >&5 $as_echo_n "checking for xstrerror in -liberty... " >&6; } if test "${ac_cv_lib_iberty_xstrerror+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-liberty $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 xstrerror (); int main () { return xstrerror (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_iberty_xstrerror=yes else ac_cv_lib_iberty_xstrerror=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_iberty_xstrerror" >&5 $as_echo "$ac_cv_lib_iberty_xstrerror" >&6; } if test "x$ac_cv_lib_iberty_xstrerror" = x""yes; then : have_libiberty=yes else have_libiberty=no fi if test "$have_libbfd" = "yes" -a "$have_libiberty" = "yes"; then BFD_LIBS="-lbfd -liberty" ac_fn_c_check_decl "$LINENO" "environ" "ac_cv_have_decl_environ" "$ac_includes_default" if test "x$ac_cv_have_decl_environ" = x""yes; then : else need_environ_declaration=yes fi fi LDFLAGS="$original_LDFLAGS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether BFD available" >&5 $as_echo_n "checking whether BFD available... " >&6; } if test "$BFD_LIBS" != ""; then bfd_available=yes $as_echo "#define HAVE_LIBBFD 1" >>confdefs.h if test "$need_environ_declaration" = "yes"; then $as_echo "#define NEED_ENVIRON_DECLARATION 1" >>confdefs.h fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_available" >&5 $as_echo "$bfd_available" >&6; } fi if test "$bfd_available" = "yes"; then HAVE_LIBBFD_TRUE= HAVE_LIBBFD_FALSE='#' else HAVE_LIBBFD_TRUE='#' HAVE_LIBBFD_FALSE= fi ac_check_coverage_makefile= if test -z "$ac_check_coverage_makefile"; then ac_check_coverage_makefile=Makefile fi # Check whether --enable-coverage was given. if test "${enable_coverage+set}" = set; then : enableval=$enable_coverage; cutter_enable_coverage=$enableval else cutter_enable_coverage=no fi if test "x$cutter_enable_coverage" != "xno"; then ltp_version_list="1.6 1.7 1.8 1.9" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lcov", so it can be a program name with args. set dummy ${ac_tool_prefix}lcov; 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_LCOV+set}" = set; then : $as_echo_n "(cached) " >&6 else case $LCOV in [\\/]* | ?:[\\/]*) ac_cv_path_LCOV="$LCOV" # 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_LCOV="$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 LCOV=$ac_cv_path_LCOV if test -n "$LCOV"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5 $as_echo "$LCOV" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_LCOV"; then ac_pt_LCOV=$LCOV # Extract the first word of "lcov", so it can be a program name with args. set dummy lcov; 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_LCOV+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_LCOV in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_LCOV="$ac_pt_LCOV" # 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_LCOV="$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_LCOV=$ac_cv_path_ac_pt_LCOV if test -n "$ac_pt_LCOV"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LCOV" >&5 $as_echo "$ac_pt_LCOV" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_LCOV" = x; then LCOV="" 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 LCOV=$ac_pt_LCOV fi else LCOV="$ac_cv_path_LCOV" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}genhtml", so it can be a program name with args. set dummy ${ac_tool_prefix}genhtml; 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_GENHTML+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GENHTML in [\\/]* | ?:[\\/]*) ac_cv_path_GENHTML="$GENHTML" # 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_GENHTML="$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 GENHTML=$ac_cv_path_GENHTML if test -n "$GENHTML"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5 $as_echo "$GENHTML" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_GENHTML"; then ac_pt_GENHTML=$GENHTML # Extract the first word of "genhtml", so it can be a program name with args. set dummy genhtml; 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_GENHTML+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_GENHTML in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_GENHTML="$ac_pt_GENHTML" # 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_GENHTML="$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_GENHTML=$ac_cv_path_ac_pt_GENHTML if test -n "$ac_pt_GENHTML"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GENHTML" >&5 $as_echo "$ac_pt_GENHTML" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_GENHTML" = x; then GENHTML="" 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 GENHTML=$ac_pt_GENHTML fi else GENHTML="$ac_cv_path_GENHTML" fi if test -x "$LCOV"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ltp version" >&5 $as_echo_n "checking for ltp version... " >&6; } if test "${cutter_cv_ltp_version+set}" = set; then : $as_echo_n "(cached) " >&6 else ltp_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'` cutter_cv_ltp_version="$ltp_version (NG)" for ltp_check_version in $ltp_version_list; do if test "$ltp_version" = "$ltp_check_version"; then cutter_cv_ltp_version="$ltp_check_version (ok)" fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cutter_cv_ltp_version" >&5 $as_echo "$cutter_cv_ltp_version" >&6; } fi case "$cutter_cv_ltp_version" in *\(ok\)*) cutter_enable_coverage=yes ;; *) cutter_enable_coverage=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for enabling coverage" >&5 $as_echo_n "checking for enabling coverage... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cutter_enable_coverage" >&5 $as_echo "$cutter_enable_coverage" >&6; } COVERAGE_CFLAGS= if test "$cutter_enable_coverage" = "yes"; then COVERAGE_CFLAGS="--coverage" fi if test "$cutter_enable_coverage" = "yes"; then ENABLE_COVERAGE_TRUE= ENABLE_COVERAGE_FALSE='#' else ENABLE_COVERAGE_TRUE='#' ENABLE_COVERAGE_FALSE= fi COVERAGE_INFO_FILE="coverage.info" COVERAGE_REPORT_DIR="coverage" if test "$GENHTML_OPTIONS" = ""; then GENHTML_OPTIONS="" fi if test "$cutter_enable_coverage" = "yes"; then ac_config_commands="$ac_config_commands coverage" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE if test "x$USE_MAINTAINER_MODE" = "xyes"; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi moduledir="\${libdir}/\$(PACKAGE)/module" factory_moduledir="\${moduledir}/factory" ui_moduledir="\${moduledir}/ui" ui_factory_moduledir="\${factory_moduledir}/ui" report_moduledir="\${moduledir}/report" report_factory_moduledir="\${factory_moduledir}/report" stream_moduledir="\${moduledir}/stream" stream_factory_moduledir="\${factory_moduledir}/stream" # Check whether --enable-gtktest was given. if test "${enable_gtktest+set}" = set; then : enableval=$enable_gtktest; else enable_gtktest=yes fi pkg_config_args=gtk+-2.0 for module in . do case "$module" in gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; esac done no_gtk="" # 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_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 test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; 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 if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version 0.7 ; then : else echo "*** pkg-config too old; version 0.7 or better required." no_gtk=yes PKG_CONFIG=no fi else no_gtk=yes fi min_gtk_version=2.12.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK+ - version >= $min_gtk_version" >&5 $as_echo_n "checking for GTK+ - version >= $min_gtk_version... " >&6; } if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" enable_gtktest=no fi if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then : else no_gtk=yes fi fi if test x"$no_gtk" = x ; then GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; fclose (fopen ("conf.gtktest", "w")); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_gtk=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&5 $as_echo "yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&6; } gtk_exists="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://pkgconfig.sourceforge.net" else if test -f conf.gtktest ; then : else echo "*** Could not run GTK+ test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK+ or finding the wrong" echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK+ is incorrectly installed." fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" gtk_exists="no" fi rm -f conf.gtktest if test "$gtk_exists" != "no"; then $as_echo "#define HAVE_GTK 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK+ is built with debug mode" >&5 $as_echo_n "checking for GTK+ is built with debug mode... " >&6; } ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$CFLAGS $GTK_LIBS" if test "$cross_compiling" = yes; then : { { $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 test program while cross compiling See \`config.log' for more details" "$LINENO" 5 ; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (int argc, char **argv) { GOptionGroup *option_group; GOptionContext *option_context; gchar *help; gboolean debug_mode = FALSE; option_group = gtk_get_option_group(FALSE); option_context = g_option_context_new(NULL); help = g_option_context_get_help(option_context, FALSE, option_group); if (help && g_regex_match_simple("--gtk-debug", help, 0, 0)) { debug_mode = TRUE; } g_option_context_free(option_context); return debug_mode ? EXIT_SUCCESS : EXIT_FAILURE; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : $as_echo "#define HAVE_GTK_ENABLE_DEBUG 1" >>confdefs.h { $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; } fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi if test "$gtk_exists" = "yes"; then HAVE_GTK_TRUE= HAVE_GTK_FALSE='#' else HAVE_GTK_TRUE='#' HAVE_GTK_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to try to use GOffice" >&5 $as_echo_n "checking whether to try to use GOffice... " >&6; } # Check whether --enable-goffice was given. if test "${enable_goffice+set}" = set; then : enableval=$enable_goffice; enable_goffice=$enableval else enable_goffice=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_goffice" >&5 $as_echo "$enable_goffice" >&6; } goffice_exists=no if test "$enable_goffice" = "yes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOFFICE" >&5 $as_echo_n "checking for GOFFICE... " >&6; } if test -n "$GOFFICE_CFLAGS"; then pkg_cv_GOFFICE_CFLAGS="$GOFFICE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgoffice-0.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgoffice-0.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOFFICE_CFLAGS=`$PKG_CONFIG --cflags "libgoffice-0.8" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GOFFICE_LIBS"; then pkg_cv_GOFFICE_LIBS="$GOFFICE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgoffice-0.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgoffice-0.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOFFICE_LIBS=`$PKG_CONFIG --libs "libgoffice-0.8" 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 GOFFICE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libgoffice-0.8" 2>&1` else GOFFICE_PKG_ERRORS=`$PKG_CONFIG --print-errors "libgoffice-0.8" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GOFFICE_PKG_ERRORS" >&5 goffice_exists=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } goffice_exists=no else GOFFICE_CFLAGS=$pkg_cv_GOFFICE_CFLAGS GOFFICE_LIBS=$pkg_cv_GOFFICE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } goffice_exists=yes fi fi if test "$goffice_exists" = "yes"; then $as_echo "#define HAVE_GOFFICE 1" >>confdefs.h fi if test "$goffice_exists" = "yes"; then HAVE_GOFFICE_TRUE= HAVE_GOFFICE_FALSE='#' else HAVE_GOFFICE_TRUE='#' HAVE_GOFFICE_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to try to use GStreamer" >&5 $as_echo_n "checking whether to try to use GStreamer... " >&6; } # Check whether --enable-gstreamer was given. if test "${enable_gstreamer+set}" = set; then : enableval=$enable_gstreamer; enable_gstreamer=$enableval else enable_gstreamer=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gstreamer" >&5 $as_echo "$enable_gstreamer" >&6; } gstreamer_exists=no if test "x$enable_gstreamer" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSTREAMER" >&5 $as_echo_n "checking for GSTREAMER... " >&6; } if test -n "$GSTREAMER_CFLAGS"; then pkg_cv_GSTREAMER_CFLAGS="$GSTREAMER_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GSTREAMER_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GSTREAMER_LIBS"; then pkg_cv_GSTREAMER_LIBS="$GSTREAMER_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GSTREAMER_LIBS=`$PKG_CONFIG --libs "gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.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 GSTREAMER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.0" 2>&1` else GSTREAMER_PKG_ERRORS=`$PKG_CONFIG --print-errors "gstreamer-0.10 >= 0.10.0 gstreamer-base-0.10 >= 0.10.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GSTREAMER_PKG_ERRORS" >&5 gstreamer_exists=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } gstreamer_exists=no else GSTREAMER_CFLAGS=$pkg_cv_GSTREAMER_CFLAGS GSTREAMER_LIBS=$pkg_cv_GSTREAMER_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } gstreamer_exists=yes fi if test x"$gstreamer_exists" = "xyes"; then $as_echo "#define HAVE_GSTREAMER 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking where is GStreamer plugin dir" >&5 $as_echo_n "checking where is GStreamer plugin dir... " >&6; } # Check whether --with-gst-pluginsdir was given. if test "${with_gst_pluginsdir+set}" = set; then : withval=$with_gst_pluginsdir; gst_pluginsdir="$withval" else gst_pluginsdir="auto" fi if test "$gst_pluginsdir" = "auto"; then gst_pluginsdir=`pkg-config --variable=pluginsdir gstreamer-0.10` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gst_pluginsdir" >&5 $as_echo "$gst_pluginsdir" >&6; } fi fi if test $gstreamer_exists = "yes"; then HAVE_GSTREAMER_TRUE= HAVE_GSTREAMER_FALSE='#' else HAVE_GSTREAMER_TRUE='#' HAVE_GSTREAMER_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to try to use libsoup" >&5 $as_echo_n "checking whether to try to use libsoup... " >&6; } # Check whether --enable-libsoup was given. if test "${enable_libsoup+set}" = set; then : enableval=$enable_libsoup; enable_libsoup=$enableval else enable_libsoup=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_libsoup" >&5 $as_echo "$enable_libsoup" >&6; } libsoup_exists=no if test "x$enable_libsoup" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBSOUP" >&5 $as_echo_n "checking for LIBSOUP... " >&6; } if test -n "$LIBSOUP_CFLAGS"; then pkg_cv_LIBSOUP_CFLAGS="$LIBSOUP_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "libsoup-2.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBSOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBSOUP_LIBS"; then pkg_cv_LIBSOUP_LIBS="$LIBSOUP_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "libsoup-2.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBSOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4" 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 LIBSOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libsoup-2.4" 2>&1` else LIBSOUP_PKG_ERRORS=`$PKG_CONFIG --print-errors "libsoup-2.4" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBSOUP_PKG_ERRORS" >&5 libsoup_exists=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } libsoup_exists=no else LIBSOUP_CFLAGS=$pkg_cv_LIBSOUP_CFLAGS LIBSOUP_LIBS=$pkg_cv_LIBSOUP_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } libsoup_exists=yes fi if test "$libsoup_exists" = "yes"; then $as_echo "#define HAVE_LIBSOUP 1" >>confdefs.h fi fi if test $libsoup_exists = "yes"; then HAVE_LIBSOUP_TRUE= HAVE_LIBSOUP_FALSE='#' else HAVE_LIBSOUP_TRUE='#' HAVE_LIBSOUP_FALSE= fi cairo_exists=no pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 $as_echo_n "checking for CAIRO... " >&6; } if test -n "$CAIRO_CFLAGS"; then pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo >= 1.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 1.4" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CAIRO_LIBS"; then pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo >= 1.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 1.4" 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 CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "cairo >= 1.4" 2>&1` else CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors "cairo >= 1.4" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CAIRO_PKG_ERRORS" >&5 cairo_exists=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } cairo_exists=no else CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS CAIRO_LIBS=$pkg_cv_CAIRO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } cairo_exists=yes fi if test x"$cairo_exists" = "xyes"; then $as_echo "#define HAVE_CAIRO 1" >>confdefs.h fi if test $cairo_exists = "yes"; then HAVE_CAIRO_TRUE= HAVE_CAIRO_FALSE='#' else HAVE_CAIRO_TRUE='#' HAVE_CAIRO_FALSE= fi cairo_pdf_exists=no pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO_PDF" >&5 $as_echo_n "checking for CAIRO_PDF... " >&6; } if test -n "$CAIRO_PDF_CFLAGS"; then pkg_cv_CAIRO_PDF_CFLAGS="$CAIRO_PDF_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-pdf\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo-pdf") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_PDF_CFLAGS=`$PKG_CONFIG --cflags "cairo-pdf" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CAIRO_PDF_LIBS"; then pkg_cv_CAIRO_PDF_LIBS="$CAIRO_PDF_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-pdf\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo-pdf") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_PDF_LIBS=`$PKG_CONFIG --libs "cairo-pdf" 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 CAIRO_PDF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "cairo-pdf" 2>&1` else CAIRO_PDF_PKG_ERRORS=`$PKG_CONFIG --print-errors "cairo-pdf" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CAIRO_PDF_PKG_ERRORS" >&5 cairo_pdf_exists=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } cairo_pdf_exists=no else CAIRO_PDF_CFLAGS=$pkg_cv_CAIRO_PDF_CFLAGS CAIRO_PDF_LIBS=$pkg_cv_CAIRO_PDF_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } cairo_pdf_exists=yes fi if test x"$cairo_pdf_exists" = "xyes"; then $as_echo "#define HAVE_CAIRO_PDF 1" >>confdefs.h fi if test $cairo_pdf_exists = "yes"; then HAVE_CAIRO_PDF_TRUE= HAVE_CAIRO_PDF_FALSE='#' else HAVE_CAIRO_PDF_TRUE='#' HAVE_CAIRO_PDF_FALSE= fi pango_cairo_exists=no pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PANGO_CAIRO" >&5 $as_echo_n "checking for PANGO_CAIRO... " >&6; } if test -n "$PANGO_CAIRO_CFLAGS"; then pkg_cv_PANGO_CAIRO_CFLAGS="$PANGO_CAIRO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangocairo\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangocairo") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGO_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "pangocairo" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGO_CAIRO_LIBS"; then pkg_cv_PANGO_CAIRO_LIBS="$PANGO_CAIRO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangocairo\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangocairo") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGO_CAIRO_LIBS=`$PKG_CONFIG --libs "pangocairo" 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 PANGO_CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "pangocairo" 2>&1` else PANGO_CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors "pangocairo" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGO_CAIRO_PKG_ERRORS" >&5 pango_cairo_exists=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } pango_cairo_exists=no else PANGO_CAIRO_CFLAGS=$pkg_cv_PANGO_CAIRO_CFLAGS PANGO_CAIRO_LIBS=$pkg_cv_PANGO_CAIRO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } pango_cairo_exists=yes fi if test x"$pango_cairo_exists" = "xyes"; then $as_echo "#define HAVE_PANGO_CAIRO 1" >>confdefs.h fi if test $pango_cairo_exists = "yes"; then HAVE_PANGO_CAIRO_TRUE= HAVE_PANGO_CAIRO_FALSE='#' else HAVE_PANGO_CAIRO_TRUE='#' HAVE_PANGO_CAIRO_FALSE= fi if test $pango_cairo_exists = "yes" -a $cairo_pdf_exists = "yes"; then PDF_REPORT_AVAILABLE_TRUE= PDF_REPORT_AVAILABLE_FALSE='#' else PDF_REPORT_AVAILABLE_TRUE='#' PDF_REPORT_AVAILABLE_FALSE= fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; 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_GTKDOC_CHECK+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_CHECK in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # 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_GTKDOC_CHECK="$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 GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 $as_echo "$GTKDOC_CHECK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_prog in gtkdoc-rebase do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GTKDOC_REBASE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # 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_GTKDOC_REBASE="$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 GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 $as_echo "$GTKDOC_REBASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GTKDOC_REBASE" && break done test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; 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_GTKDOC_MKPDF+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # 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_GTKDOC_MKPDF="$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 GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 $as_echo "$GTKDOC_MKPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-html-dir was given. if test "${with_html_dir+set}" = set; then : withval=$with_html_dir; else with_html_dir='${datadir}/gtk-doc/html' fi HTML_DIR="$with_html_dir" # Check whether --enable-gtk-doc was given. if test "${enable_gtk_doc+set}" = set; then : enableval=$enable_gtk_doc; else enable_gtk_doc=no fi if test x$enable_gtk_doc = xyes; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : else as_fn_error $? "You need to have gtk-doc >= 1.8 installed to build $PACKAGE_NAME" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 $as_echo_n "checking whether to build gtk-doc documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 $as_echo "$enable_gtk_doc" >&6; } # Check whether --enable-gtk-doc-html was given. if test "${enable_gtk_doc_html+set}" = set; then : enableval=$enable_gtk_doc_html; else enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. if test "${enable_gtk_doc_pdf+set}" = set; then : enableval=$enable_gtk_doc_pdf; else enable_gtk_doc_pdf=no fi if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test x$enable_gtk_doc = xyes; then ENABLE_GTK_DOC_TRUE= ENABLE_GTK_DOC_FALSE='#' else ENABLE_GTK_DOC_TRUE='#' ENABLE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc_html = xyes; then GTK_DOC_BUILD_HTML_TRUE= GTK_DOC_BUILD_HTML_FALSE='#' else GTK_DOC_BUILD_HTML_TRUE='#' GTK_DOC_BUILD_HTML_FALSE= fi if test x$enable_gtk_doc_pdf = xyes; then GTK_DOC_BUILD_PDF_TRUE= GTK_DOC_BUILD_PDF_FALSE='#' else GTK_DOC_BUILD_PDF_TRUE='#' GTK_DOC_BUILD_PDF_FALSE= fi if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' else GTK_DOC_USE_LIBTOOL_TRUE='#' GTK_DOC_USE_LIBTOOL_FALSE= fi if test -n "$GTKDOC_REBASE"; then GTK_DOC_USE_REBASE_TRUE= GTK_DOC_USE_REBASE_FALSE='#' else GTK_DOC_USE_REBASE_TRUE='#' GTK_DOC_USE_REBASE_FALSE= fi # Extract the first word of "ruby", so it can be a program name with args. set dummy ruby; 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_RUBY+set}" = set; then : $as_echo_n "(cached) " >&6 else case $RUBY in [\\/]* | ?:[\\/]*) ac_cv_path_RUBY="$RUBY" # 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_RUBY="$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_RUBY" && ac_cv_path_RUBY="ruby-not-found" ;; esac fi RUBY=$ac_cv_path_RUBY if test -n "$RUBY"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY" >&5 $as_echo "$RUBY" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "rd2", so it can be a program name with args. set dummy rd2; 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_RD2+set}" = set; then : $as_echo_n "(cached) " >&6 else case $RD2 in [\\/]* | ?:[\\/]*) ac_cv_path_RD2="$RD2" # 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_RD2="$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_RD2" && ac_cv_path_RD2="rd2-not-found" ;; esac fi RD2=$ac_cv_path_RD2 if test -n "$RD2"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RD2" >&5 $as_echo "$RD2" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$RD2" != "rd2-not-found"; then HAVE_RD2_TRUE= HAVE_RD2_FALSE='#' else HAVE_RD2_TRUE='#' HAVE_RD2_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; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac if test -n "0.35.0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.35.0" >&5 $as_echo_n "checking for intltool >= 0.35.0... " >&6; } INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.35.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool 0.35.0 or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; 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_INTLTOOL_UPDATE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # 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_INTLTOOL_UPDATE="$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 INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; 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_INTLTOOL_MERGE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # 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_INTLTOOL_MERGE="$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 INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; 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_INTLTOOL_EXTRACT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # 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_INTLTOOL_EXTRACT="$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 INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # 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. ;; *) 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_XGETTEXT="$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 XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$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 # 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. ;; *) 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_MSGMERGE="$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 MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$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 # 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. ;; *) 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_MSGFMT="$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 MSGFMT=$ac_cv_path_MSGFMT if test -n "$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 if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; 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_INTLTOOL_PERL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # 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_INTLTOOL_PERL="$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 INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if test "${am_cv_val_LC_MESSAGES+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = x""yes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if test "${gt_cv_func_ngettext_libc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if test "${gt_cv_func_dgettext_libc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $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 bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=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_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if test "${ac_cv_lib_intl_ngettext+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $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 ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=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_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if test "${ac_cv_lib_intl_dgettext+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $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 dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=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_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = x""yes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if test "${ac_cv_lib_intl_ngettext+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $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 ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=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_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if test "${ac_cv_lib_intl_dcgettext+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $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 dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=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_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = x""yes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # 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. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; 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 if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $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; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 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 # 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. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; 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 NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES GETTEXT_PACKAGE=cutter cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF SF_PROJECT_ID=cutter SF_PROJECT_NAME=Cutter # Check whether --with-sf-user was given. if test "${with_sf_user+set}" = set; then : withval=$with_sf_user; SF_USER="$withval" fi SF_USER_OPTION="" if test -n "$SF_USER"; then SF_USER_OPTION="--username $SF_USER" fi SF_HOST="web.sourceforge.net" if test -n "$SF_USER"; then SF_HOST="$SF_USER,cutter@$SF_HOST" else SF_HOST="$USER,cutter@$SF_HOST" fi SF_HTDOCS_PATH="/home/groups/c/cu/cutter/htdocs" SF_HTDOCS="$SF_HOST:$SF_HTDOCS_PATH" SF_REPOS="https://cutter.svn.sourceforge.net/svnroot/cutter/cutter" icons_dir="\$(pkgdatadir)/icons" CUTTER="\$(top_builddir)/cutter/cutter\$(EXEEXT)" CUTTER_CFLAGS="$GLIB_CFLAGS -DG_DISABLE_DEPRECATED -DUI_MODULEDIR=\\\"\"\$(ui_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS $GIO_CFLAGS" CUTTER_CFLAGS="$CUTTER_CFLAGS -DUI_FACTORY_MODULEDIR=\\\"\"\$(ui_factory_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DREPORT_MODULEDIR=\\\"\"\$(report_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DREPORT_FACTORY_MODULEDIR=\\\"\"\$(report_factory_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DSTREAM_MODULEDIR=\\\"\"\$(stream_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DSTREAM_FACTORY_MODULEDIR=\\\"\"\$(stream_factory_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DFACTORY_MODULEDIR=\\\"\"\$(factory_moduledir)\"\\\"" CUTTER_CFLAGS="$CUTTER_CFLAGS -DICONSDIR=\\\"\"\$(iconsdir)\"\\\"" ac_config_commands="$ac_config_commands cutter/cut-config.h-start" if test "$have_stdint_h" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-config.h-have-stdint.h" else ac_config_commands="$ac_config_commands cutter/cut-config.h-not-have-stdint.h" fi if test "$have_inttypes_h" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-config.h-have-inttypes.h" else ac_config_commands="$ac_config_commands cutter/cut-config.h-not-have-inttypes.h" fi if test "$have_winsock2_h" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-config.h-have-winsock2.h" else ac_config_commands="$ac_config_commands cutter/cut-config.h-not-have-winsock2.h" fi if test "$have_sys_socket_h" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-config.h-have-sys-socket.h" else ac_config_commands="$ac_config_commands cutter/cut-config.h-not-have-sys-socket.h" fi if test "$have_sys_un_h" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-config.h-have-sys-un.h" else ac_config_commands="$ac_config_commands cutter/cut-config.h-not-have-sys-un.h" fi ac_config_commands="$ac_config_commands cutter/cut-config.h-end" ac_config_commands="$ac_config_commands cutter/cut-features.h-start" ac_config_commands="$ac_config_commands cutter/cut-features.h-gdk-pixbuf-header" if test "$gdk_pixbuf_exists" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-features.h-gdk-pixbuf-enable" else ac_config_commands="$ac_config_commands cutter/cut-features.h-gdk-pixbuf-disable" fi ac_config_commands="$ac_config_commands cutter/cut-features.h-gio-header" if test "$gio_exists" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-features.h-gio-enable" else ac_config_commands="$ac_config_commands cutter/cut-features.h-gio-disable" fi ac_config_commands="$ac_config_commands cutter/cut-features.h-libsoup-header" if test "$libsoup_exists" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-features.h-libsoup-enable" else ac_config_commands="$ac_config_commands cutter/cut-features.h-libsoup-disable" fi ac_config_commands="$ac_config_commands cutter/cut-features.h-have-c99-stdint-types-header" if test "$have_c99_stdint_types" = "yes"; then ac_config_commands="$ac_config_commands cutter/cut-features.h-have-c99-stdint-types" else ac_config_commands="$ac_config_commands cutter/cut-features.h-not-have-c99-stdint-types" fi ac_config_commands="$ac_config_commands cutter/cut-features.h-end" ac_config_files="$ac_config_files Makefile cutter.pc gcutter.pc cppcutter.pc libcutter.pc gdkcutter-pixbuf.pc soupcutter.pc rpm/centos/cutter.spec rpm/fedora/cutter.spec m4macros/Makefile glib-compatible/Makefile glib-compatible/pcre/Makefile gcutter/Makefile gdkcutter-pixbuf/Makefile soupcutter/Makefile cutter/cut-version.h cutter/Makefile cppcutter/Makefile module/Makefile module/ui/Makefile module/report/Makefile module/stream/Makefile gst-plugins/Makefile gst-plugins/test/Makefile data/Makefile data/icons/Makefile data/icons/kinotan/Makefile sample/Makefile sample/glib/Makefile sample/gtk+/Makefile test/Makefile test/fixtures/Makefile test/fixtures/assertions/Makefile test/fixtures/assertions/sub/Makefile test/fixtures/data/Makefile test/fixtures/factory/Makefile test/fixtures/factory/type1/Makefile test/fixtures/factory/type2/Makefile test/fixtures/loader/Makefile test/fixtures/loader/attribute/Makefile test/fixtures/loader/fixture/Makefile test/fixtures/loader/iterator/Makefile test/fixtures/loader/module/Makefile test/fixtures/loader/suite/Makefile test/fixtures/loader/test/Makefile test/fixtures/loader/cpp/Makefile test/fixtures/loader/cpp-fixture/Makefile test/fixtures/pipeline/Makefile test/fixtures/pipeline/error/Makefile test/fixtures/pipeline/failure/Makefile test/fixtures/pipeline/omission/Makefile test/fixtures/pipeline/pending/Makefile test/fixtures/pipeline/success/Makefile test/fixtures/pipeline/setup-error/Makefile test/fixtures/sub-process/Makefile test/fixtures/sub-process/fixtures/Makefile test/fixtures/sub-process/fixtures/normal/Makefile test/fixtures/sub-process-group/Makefile test/fixtures/sub-process-group/fixtures/Makefile test/fixtures/sub-process-group/fixtures/normal/Makefile test/fixtures/repository/Makefile test/fixtures/xml-stream/Makefile test/fixtures/file-stream-reader/Makefile test/fixtures/pixbuf/Makefile test/fixtures/path/Makefile test/fixtures/path/parent/Makefile test/fixtures/path/parent/sub/Makefile test/fixtures/test-context/Makefile test/fixtures/test-directory/Makefile test/lib/Makefile test/lib/cuttest-echo/Makefile test/cutter/Makefile test/gcutter/Makefile test/cppcutter/Makefile test/gdkcutter-pixbuf/Makefile test/soupcutter/Makefile po/Makefile.in misc/Makefile license/Makefile doc/Makefile doc/reference/version.xml doc/reference/Makefile html/Makefile vcc/Makefile apt/Makefile yum/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 "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then as_fn_error $? "conditional \"OS_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then as_fn_error $? "conditional \"PLATFORM_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 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 "${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 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 if test -z "${HAVE_WINDRES_TRUE}" && test -z "${HAVE_WINDRES_FALSE}"; then as_fn_error $? "conditional \"HAVE_WINDRES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GLIB_2_12_TRUE}" && test -z "${GLIB_2_12_FALSE}"; then as_fn_error $? "conditional \"GLIB_2_12\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GIO_TRUE}" && test -z "${HAVE_GIO_FALSE}"; then as_fn_error $? "conditional \"HAVE_GIO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GDK_PIXBUF_TRUE}" && test -z "${HAVE_GDK_PIXBUF_FALSE}"; then as_fn_error $? "conditional \"HAVE_GDK_PIXBUF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBBFD_TRUE}" && test -z "${HAVE_LIBBFD_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBBFD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_COVERAGE_TRUE}" && test -z "${ENABLE_COVERAGE_FALSE}"; then as_fn_error $? "conditional \"ENABLE_COVERAGE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GTK_TRUE}" && test -z "${HAVE_GTK_FALSE}"; then as_fn_error $? "conditional \"HAVE_GTK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GOFFICE_TRUE}" && test -z "${HAVE_GOFFICE_FALSE}"; then as_fn_error $? "conditional \"HAVE_GOFFICE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GSTREAMER_TRUE}" && test -z "${HAVE_GSTREAMER_FALSE}"; then as_fn_error $? "conditional \"HAVE_GSTREAMER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBSOUP_TRUE}" && test -z "${HAVE_LIBSOUP_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBSOUP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_CAIRO_TRUE}" && test -z "${HAVE_CAIRO_FALSE}"; then as_fn_error $? "conditional \"HAVE_CAIRO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_CAIRO_PDF_TRUE}" && test -z "${HAVE_CAIRO_PDF_FALSE}"; then as_fn_error $? "conditional \"HAVE_CAIRO_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PANGO_CAIRO_TRUE}" && test -z "${HAVE_PANGO_CAIRO_FALSE}"; then as_fn_error $? "conditional \"HAVE_PANGO_CAIRO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PDF_REPORT_AVAILABLE_TRUE}" && test -z "${PDF_REPORT_AVAILABLE_FALSE}"; then as_fn_error $? "conditional \"PDF_REPORT_AVAILABLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_RD2_TRUE}" && test -z "${HAVE_RD2_FALSE}"; then as_fn_error $? "conditional \"HAVE_RD2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" : ${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 cutter $as_me 1.1.7, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ cutter config.status 1.1.7 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" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ fix_srcfile_path_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' ac_check_coverage_makefile="$ac_check_coverage_makefile" _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" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "coverage") CONFIG_COMMANDS="$CONFIG_COMMANDS coverage" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "cutter/cut-config.h-start") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-start" ;; "cutter/cut-config.h-have-stdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-have-stdint.h" ;; "cutter/cut-config.h-not-have-stdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-not-have-stdint.h" ;; "cutter/cut-config.h-have-inttypes.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-have-inttypes.h" ;; "cutter/cut-config.h-not-have-inttypes.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-not-have-inttypes.h" ;; "cutter/cut-config.h-have-winsock2.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-have-winsock2.h" ;; "cutter/cut-config.h-not-have-winsock2.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-not-have-winsock2.h" ;; "cutter/cut-config.h-have-sys-socket.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-have-sys-socket.h" ;; "cutter/cut-config.h-not-have-sys-socket.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-not-have-sys-socket.h" ;; "cutter/cut-config.h-have-sys-un.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-have-sys-un.h" ;; "cutter/cut-config.h-not-have-sys-un.h") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-not-have-sys-un.h" ;; "cutter/cut-config.h-end") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-config.h-end" ;; "cutter/cut-features.h-start") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-start" ;; "cutter/cut-features.h-gdk-pixbuf-header") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-gdk-pixbuf-header" ;; "cutter/cut-features.h-gdk-pixbuf-enable") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-gdk-pixbuf-enable" ;; "cutter/cut-features.h-gdk-pixbuf-disable") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-gdk-pixbuf-disable" ;; "cutter/cut-features.h-gio-header") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-gio-header" ;; "cutter/cut-features.h-gio-enable") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-gio-enable" ;; "cutter/cut-features.h-gio-disable") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-gio-disable" ;; "cutter/cut-features.h-libsoup-header") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-libsoup-header" ;; "cutter/cut-features.h-libsoup-enable") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-libsoup-enable" ;; "cutter/cut-features.h-libsoup-disable") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-libsoup-disable" ;; "cutter/cut-features.h-have-c99-stdint-types-header") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-have-c99-stdint-types-header" ;; "cutter/cut-features.h-have-c99-stdint-types") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-have-c99-stdint-types" ;; "cutter/cut-features.h-not-have-c99-stdint-types") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-not-have-c99-stdint-types" ;; "cutter/cut-features.h-end") CONFIG_COMMANDS="$CONFIG_COMMANDS cutter/cut-features.h-end" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "cutter.pc") CONFIG_FILES="$CONFIG_FILES cutter.pc" ;; "gcutter.pc") CONFIG_FILES="$CONFIG_FILES gcutter.pc" ;; "cppcutter.pc") CONFIG_FILES="$CONFIG_FILES cppcutter.pc" ;; "libcutter.pc") CONFIG_FILES="$CONFIG_FILES libcutter.pc" ;; "gdkcutter-pixbuf.pc") CONFIG_FILES="$CONFIG_FILES gdkcutter-pixbuf.pc" ;; "soupcutter.pc") CONFIG_FILES="$CONFIG_FILES soupcutter.pc" ;; "rpm/centos/cutter.spec") CONFIG_FILES="$CONFIG_FILES rpm/centos/cutter.spec" ;; "rpm/fedora/cutter.spec") CONFIG_FILES="$CONFIG_FILES rpm/fedora/cutter.spec" ;; "m4macros/Makefile") CONFIG_FILES="$CONFIG_FILES m4macros/Makefile" ;; "glib-compatible/Makefile") CONFIG_FILES="$CONFIG_FILES glib-compatible/Makefile" ;; "glib-compatible/pcre/Makefile") CONFIG_FILES="$CONFIG_FILES glib-compatible/pcre/Makefile" ;; "gcutter/Makefile") CONFIG_FILES="$CONFIG_FILES gcutter/Makefile" ;; "gdkcutter-pixbuf/Makefile") CONFIG_FILES="$CONFIG_FILES gdkcutter-pixbuf/Makefile" ;; "soupcutter/Makefile") CONFIG_FILES="$CONFIG_FILES soupcutter/Makefile" ;; "cutter/cut-version.h") CONFIG_FILES="$CONFIG_FILES cutter/cut-version.h" ;; "cutter/Makefile") CONFIG_FILES="$CONFIG_FILES cutter/Makefile" ;; "cppcutter/Makefile") CONFIG_FILES="$CONFIG_FILES cppcutter/Makefile" ;; "module/Makefile") CONFIG_FILES="$CONFIG_FILES module/Makefile" ;; "module/ui/Makefile") CONFIG_FILES="$CONFIG_FILES module/ui/Makefile" ;; "module/report/Makefile") CONFIG_FILES="$CONFIG_FILES module/report/Makefile" ;; "module/stream/Makefile") CONFIG_FILES="$CONFIG_FILES module/stream/Makefile" ;; "gst-plugins/Makefile") CONFIG_FILES="$CONFIG_FILES gst-plugins/Makefile" ;; "gst-plugins/test/Makefile") CONFIG_FILES="$CONFIG_FILES gst-plugins/test/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "data/icons/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/Makefile" ;; "data/icons/kinotan/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/kinotan/Makefile" ;; "sample/Makefile") CONFIG_FILES="$CONFIG_FILES sample/Makefile" ;; "sample/glib/Makefile") CONFIG_FILES="$CONFIG_FILES sample/glib/Makefile" ;; "sample/gtk+/Makefile") CONFIG_FILES="$CONFIG_FILES sample/gtk+/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "test/fixtures/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/Makefile" ;; "test/fixtures/assertions/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/assertions/Makefile" ;; "test/fixtures/assertions/sub/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/assertions/sub/Makefile" ;; "test/fixtures/data/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/data/Makefile" ;; "test/fixtures/factory/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/factory/Makefile" ;; "test/fixtures/factory/type1/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/factory/type1/Makefile" ;; "test/fixtures/factory/type2/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/factory/type2/Makefile" ;; "test/fixtures/loader/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/Makefile" ;; "test/fixtures/loader/attribute/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/attribute/Makefile" ;; "test/fixtures/loader/fixture/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/fixture/Makefile" ;; "test/fixtures/loader/iterator/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/iterator/Makefile" ;; "test/fixtures/loader/module/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/module/Makefile" ;; "test/fixtures/loader/suite/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/suite/Makefile" ;; "test/fixtures/loader/test/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/test/Makefile" ;; "test/fixtures/loader/cpp/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/cpp/Makefile" ;; "test/fixtures/loader/cpp-fixture/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/loader/cpp-fixture/Makefile" ;; "test/fixtures/pipeline/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/pipeline/Makefile" ;; "test/fixtures/pipeline/error/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/pipeline/error/Makefile" ;; "test/fixtures/pipeline/failure/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/pipeline/failure/Makefile" ;; "test/fixtures/pipeline/omission/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/pipeline/omission/Makefile" ;; "test/fixtures/pipeline/pending/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/pipeline/pending/Makefile" ;; "test/fixtures/pipeline/success/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/pipeline/success/Makefile" ;; "test/fixtures/pipeline/setup-error/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/pipeline/setup-error/Makefile" ;; "test/fixtures/sub-process/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/sub-process/Makefile" ;; "test/fixtures/sub-process/fixtures/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/sub-process/fixtures/Makefile" ;; "test/fixtures/sub-process/fixtures/normal/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/sub-process/fixtures/normal/Makefile" ;; "test/fixtures/sub-process-group/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/sub-process-group/Makefile" ;; "test/fixtures/sub-process-group/fixtures/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/sub-process-group/fixtures/Makefile" ;; "test/fixtures/sub-process-group/fixtures/normal/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/sub-process-group/fixtures/normal/Makefile" ;; "test/fixtures/repository/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/repository/Makefile" ;; "test/fixtures/xml-stream/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/xml-stream/Makefile" ;; "test/fixtures/file-stream-reader/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/file-stream-reader/Makefile" ;; "test/fixtures/pixbuf/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/pixbuf/Makefile" ;; "test/fixtures/path/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/path/Makefile" ;; "test/fixtures/path/parent/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/path/parent/Makefile" ;; "test/fixtures/path/parent/sub/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/path/parent/sub/Makefile" ;; "test/fixtures/test-context/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/test-context/Makefile" ;; "test/fixtures/test-directory/Makefile") CONFIG_FILES="$CONFIG_FILES test/fixtures/test-directory/Makefile" ;; "test/lib/Makefile") CONFIG_FILES="$CONFIG_FILES test/lib/Makefile" ;; "test/lib/cuttest-echo/Makefile") CONFIG_FILES="$CONFIG_FILES test/lib/cuttest-echo/Makefile" ;; "test/cutter/Makefile") CONFIG_FILES="$CONFIG_FILES test/cutter/Makefile" ;; "test/gcutter/Makefile") CONFIG_FILES="$CONFIG_FILES test/gcutter/Makefile" ;; "test/cppcutter/Makefile") CONFIG_FILES="$CONFIG_FILES test/cppcutter/Makefile" ;; "test/gdkcutter-pixbuf/Makefile") CONFIG_FILES="$CONFIG_FILES test/gdkcutter-pixbuf/Makefile" ;; "test/soupcutter/Makefile") CONFIG_FILES="$CONFIG_FILES test/soupcutter/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "misc/Makefile") CONFIG_FILES="$CONFIG_FILES misc/Makefile" ;; "license/Makefile") CONFIG_FILES="$CONFIG_FILES license/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/reference/version.xml") CONFIG_FILES="$CONFIG_FILES doc/reference/version.xml" ;; "doc/reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/Makefile" ;; "html/Makefile") CONFIG_FILES="$CONFIG_FILES html/Makefile" ;; "vcc/Makefile") CONFIG_FILES="$CONFIG_FILES vcc/Makefile" ;; "apt/Makefile") CONFIG_FILES="$CONFIG_FILES apt/Makefile" ;; "yum/Makefile") CONFIG_FILES="$CONFIG_FILES yum/Makefile" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) 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 } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Assembler program. AS=$AS # DLL creation program. DLLTOOL=$DLLTOOL # Object dumper program. OBJDUMP=$OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == "file_magic". file_magic_cmd=$lt_file_magic_cmd # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; "coverage":C) if test -e "$ac_check_coverage_makefile" && \ grep -q '^coverage:' $ac_check_coverage_makefile; then : # do nothing else sed -e 's/^ / /g' <>$ac_check_coverage_makefile .PHONY: coverage-clean coverage-report coverage coverage-force coverage-clean: \$(LCOV) --compat-libtool --zerocounters --directory . \\ --output-file \$(COVERAGE_INFO_FILE) coverage-report: \$(LCOV) --compat-libtool --directory . \\ --capture --output-file \$(COVERAGE_INFO_FILE) \$(LCOV) --compat-libtool --directory . \\ --extract \$(COVERAGE_INFO_FILE) "\`(cd '\$(top_srcdir)'; pwd)\`/*" \\ --output-file \$(COVERAGE_INFO_FILE) \$(GENHTML) --highlight --legend \\ --output-directory \$(COVERAGE_REPORT_DIR) \\ --prefix "\`(cd '\$(top_srcdir)'; pwd)\`" \\ \$(GENHTML_OPTIONS) \$(COVERAGE_INFO_FILE) coverage: coverage-clean check coverage-report coverage-force: \$(MAKE) \$(AM_MAKEFLAGS) coverage-clean \$(MAKE) \$(AM_MAKEFLAGS) check || : \$(MAKE) \$(AM_MAKEFLAGS) coverage-report EOS fi ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "cutter/cut-config.h-start":C) cat > cutter/cut-config.h <<\_______EOF /* cut-config.h * * This is a generated file. Please modify 'configure.ac' */ #ifndef __CUT_CONFIG_H__ #define __CUT_CONFIG_H__ _______EOF ;; "cutter/cut-config.h-have-stdint.h":C) echo "#define CUT_HAVE_STDINT_H 1" >> cutter/cut-config.h ;; "cutter/cut-config.h-not-have-stdint.h":C) echo "/* #undef CUT_HAVE_STDINT_H */" >> cutter/cut-config.h ;; "cutter/cut-config.h-have-inttypes.h":C) echo "#define CUT_HAVE_INTTYPES_H 1" >> cutter/cut-config.h ;; "cutter/cut-config.h-not-have-inttypes.h":C) echo "/* #undef CUT_HAVE_INTTYPES_H */" >> cutter/cut-config.h ;; "cutter/cut-config.h-have-winsock2.h":C) echo "#define CUT_HAVE_WINSOCK2_H 1" >> cutter/cut-config.h ;; "cutter/cut-config.h-not-have-winsock2.h":C) echo "/* #undef CUT_HAVE_WINSOCK2_H */" >> cutter/cut-config.h ;; "cutter/cut-config.h-have-sys-socket.h":C) echo "#define CUT_HAVE_SYS_SOCKET_H 1" >> cutter/cut-config.h ;; "cutter/cut-config.h-not-have-sys-socket.h":C) echo "/* #socketdef CUT_HAVE_SYS_SOCKET_H */" >> cutter/cut-config.h ;; "cutter/cut-config.h-have-sys-un.h":C) echo "#define CUT_HAVE_SYS_UN_H 1" >> cutter/cut-config.h ;; "cutter/cut-config.h-not-have-sys-un.h":C) echo "/* #undef CUT_HAVE_SYS_UN_H */" >> cutter/cut-config.h ;; "cutter/cut-config.h-end":C) cat >> cutter/cut-config.h <<\_______EOF #endif _______EOF ;; "cutter/cut-features.h-start":C) cat > cutter/cut-features.h <<\_______EOF /* cut-features.h * * This is a generated file. Please modify 'configure.ac' */ #ifndef __CUT_FEATURES_H__ #define __CUT_FEATURES_H__ /** * SECTION: cut-features * @title: Available features * @short_description: Available features in the installed Cutter. * * There are some macros to check a feature is available in the * installed Cutter. */ /** * CUT_SUPPORT_GLIB: * * Shows GLib support is available. That is, we can use <gcutter.h>. * It is always defined. */ #define CUT_SUPPORT_GLIB 1 _______EOF ;; "cutter/cut-features.h-gdk-pixbuf-header":C) cat <<\_______EOF >> cutter/cut-features.h /** * CUT_SUPPORT_GDK_PIXBUF: * * Shows GdkPixbuf support is available. * That is, we can use <gdkcutter-pixbuf.h>. */ _______EOF ;; "cutter/cut-features.h-gdk-pixbuf-enable":C) echo "#define CUT_SUPPORT_GDK_PIXBUF 1" >> cutter/cut-features.h ;; "cutter/cut-features.h-gdk-pixbuf-disable":C) echo "/* #undef CUT_SUPPORT_GDK_PIXBUF */" >> cutter/cut-features.h ;; "cutter/cut-features.h-gio-header":C) cat <<\_______EOF >> cutter/cut-features.h /** * CUT_SUPPORT_GIO: * * Shows GIO support is available. */ _______EOF ;; "cutter/cut-features.h-gio-enable":C) echo "#define CUT_SUPPORT_GIO 1" >> cutter/cut-features.h ;; "cutter/cut-features.h-gio-disable":C) echo "/* #undef CUT_SUPPORT_GIO */" >> cutter/cut-features.h ;; "cutter/cut-features.h-libsoup-header":C) cat <<\_______EOF >> cutter/cut-features.h /** * CUT_SUPPORT_LIBSOUP: * * Shows LibSoup support is available. */ _______EOF ;; "cutter/cut-features.h-libsoup-enable":C) echo "#define CUT_SUPPORT_LIBSOUP 1" >> cutter/cut-features.h ;; "cutter/cut-features.h-libsoup-disable":C) echo "/* #undef CUT_SUPPORT_LIBSOUP */" >> cutter/cut-features.h ;; "cutter/cut-features.h-have-c99-stdint-types-header":C) cat <<\_______EOF >> cutter/cut-features.h /** * CUT_SUPPORT_C99_STDINT_TYPES: * * Shows C99 stdint types support is available. * That is, we can use assertions that use C99 stdint types. * e.g. cut_assert_equal_int_least8(). */ _______EOF ;; "cutter/cut-features.h-have-c99-stdint-types":C) echo "#define CUT_SUPPORT_C99_STDINT_TYPES 1" >> cutter/cut-features.h ;; "cutter/cut-features.h-not-have-c99-stdint-types":C) echo "/* #undef CUT_SUPPORT_C99_STDINT_TYPES */" >> cutter/cut-features.h ;; "cutter/cut-features.h-end":C) cat >> cutter/cut-features.h <<\_______EOF #endif _______EOF ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; 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 echo echo "Configure Result:" echo echo " Options:" echo " coverage : $cutter_enable_coverage" echo echo " Libraries:" echo " GLib <= 2.12 : $glib_2_12" echo " GIO : $gio_exists" echo " GdkPixbuf : $gdk_pixbuf_exists" echo " GTK+ : $gtk_exists" echo " GOffice : $goffice_exists" echo " GStreamer : $gstreamer_exists" echo " libsoup : $libsoup_exists" echo " cairo : $cairo_exists" echo " cairo-pdf : $cairo_pdf_exists" echo " pango-cairo : $pango_cairo_exists" echo " BFD : $bfd_available" echo echo " Paths:" echo " modules directory : $moduledir" echo " UI modules directory : $ui_moduledir" echo " UI factory modules directory : $ui_factory_moduledir" echo " report modules directory : $report_moduledir" echo " report factory modules directory : $report_factory_moduledir" echo " stream modules directory : $stream_moduledir" echo " stream factory modules directory : $stream_factory_moduledir" echo echo " GStreamer plugins directory : $gst_pluginsdir" echo echo " Tools:" echo " GTK-Doc : $enable_gtk_doc" echo " Ruby : $RUBY" echo " rd2 : $RD2" if test "$cutter_enable_coverage" = "yes"; then echo " lcov : $LCOV" echo " genhtml : $GENHTML" fi cutter-testing-framework-1.1.7/cppcutter.pc.in0000644000175000017500000000035011271044523017611 0ustar koukouprefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ libdir=@libdir@ includedir=@includedir@ Name: CppCutter Description: Cutter with C++ support. Version: @VERSION@ Requires: cutter >= @VERSION@ Libs: -L${libdir} -lcppcutter cutter-testing-framework-1.1.7/ChangeLog0000644000175000017500000111044211525702710016427 0ustar koukou2011-02-13 Kouhei Sutou * doc/install-to-debian.rd*, NEWS*: drop lenny support. * debian/control: fix typos. * apt/, debian/: remove lenny support. * doc/reference/ja.po: update. * */Makefile.am: don't install needless header files. * configure.ac: don't use needless _cv_ variable name. * doc/reference/cutter-docs.sgml: add 1.1.7 entry. * html/index.html*: add growlnotify note. * ./: update the latest release date. * NEWS*: add 1.1.7 entry. * README*: add Hiroaki Nakamura to thanks list. Thanks!!! * TUTORIAL.ja: fix a typo. Reported by Hiroaki Nakamura. Thanks!!! * module/ui/cut-console-ui.c: don't use g_ptr_array_new_with_fre_func() because GLib 2.12 on CentOS 5.5 doesn't have the function. Reported by Hiroaki Nakamura. Thanks!!! 2011-02-10 Kouhei Sutou * test/run-test.sh: use absolute path for icons dir. * module/ui/cut-console-ui.c, test/run-test.sh: use uninstalled icons in self test. * test/gdkcutter-pixbuf/test-gdkcut-pixbuf.c, test/gdkcutter-pixbuf/test-gdkcut-pixbuf-assertions.c: add missing include . * test/cutter/test-cut-test-utils.c: add missing include . * test/cutter/test-cut-file-stream-reader.c: add missing include . * module/ui/cut-console-ui.c, module/ui/cut-console-ui-factory.c: support growlnotify for Mac OS X. * module/ui/cut-console-ui-factory.c (guess_term_width): support COLUMNS environment variable. 2011-02-10 Kenji Okimoto * html/index.html.ja: fix typo. 2011-02-09 Kouhei Sutou * module/ui/cut-console-ui.c (notify): escape summary. 2011-02-08 Kouhei Sutou * yum/sign-rpm.sh: sign RPM at a time. * yum/build-in-chroot.sh: support build in parallel. * apt/build-in-chroot.sh: support build in parallel. * html/index.html*: Ubuntu Linux -> Ubuntu. * doc/install-to-ubuntu.rd*: Hardy -> Maverick. 2011-02-08 Kouhei Sutou * configure.ac: 1.1.6 -> 1.1.7. * debian/control, debian/rules: support --notify. * NEWS*: add Ubuntu Maveric and Fedora 14 support. * rpm/centos/cutter.spec.in, rpm/fedora/cutter.spec.in: require libnotify. * apt/Makefile.am: drop Hardy suppot and add Maverick. 2011-02-07 Kouhei Sutou * yum/build-in-chroot.sh: Fedora 13 -> 14. * ./: update the latest release date. * html/index.html*, html/notify-on-gnome.png: add screenshot of --notify. * NEWS*: add 1.1.6 entry. * module/ui/cut-console-ui.c, module/ui/cut-console-ui-factory.c: add --notify option to notify test result by notify-send. * data/icons/kinotan/: add kinotan icons. * README*, Makefile.am, configure.ac, test/cutter/test-cutter.c, cutter/cut-pipeline.c: follow the above changes. * doc/reference/ja.po: update. * doc/reference/cutter-overrides.txt: add new symbols. * doc/reference/cutter-docs.sgml: remove duplicated entry. * gcutter/gcut-glib-event-loop.h: fix a typo. * doc/reference/ja.po: update. * gcutter/gcut-event-loop.h: fix a typo. * doc/reference/ja.po: resolve fuzzy items. 2011-02-07 Kouhei Sutou * doc/reference/ja.po: update partially. * gcutter/gcut-event-loop.h: fix typos. * doc/reference/ja.po: update partially. * gcutter/gcut-test-utils.h: fix markup. * gcutter/gcut-event-loop.h: unify documents. * doc/reference/cutter-docs.sgml: add GCutGLibEventLoop. * gcutter/gcut-event-loop.h: fix variable names in document. * cutter/cut-test-utils.h (cut_build_fixture_data_path): add missing deprecated guard. * doc/reference/cutter-docs.sgml, doc/reference/cutter.types: add GCutProcess and GCutEventLoop. * gcutter/gcut-event-loop.h: fix function names. * m4macros/cutter.m4: support --config-cache. * gcutter/gcut-event-loop.h: add missing "Since: 1.1.6". * m4macros/cutter.m4: remove needless AC_CACHEK_CHECK. 2011-02-06 Kouhei Sutou * gcutter/gcut-process.c (gcut_process_wait): use GCutEventLoop. 2011-02-01 Kouhei Sutou * gcutter/gcut-process.[ch]: support GCutEventLoop. * gcutter/gcut-glib-event-loop.[ch], gcutter/gcutter.h, gcutter/Makefile.am: add GLib implementation of GCutEventLoop. * gcutter/gcut-event-loop.[ch], gcutter/gcutter.h, gcutter/Makefile.am: add abstracted event loop GCutEventLoop. 2011-01-24 Kouhei Sutou * cutter/cut-diff.c, doc/cut-diff.rd*: add --label option. 2011-01-19 Kouhei Sutou * misc/rd2refentry-lib.rb: add '[' and ',' to separator list. 2011-01-16 Kouhei Sutou * gcutter/gcut-assertions-helper.c (gcut_assert_error_helper): use g_error_free() instead of g_clear_error(). 2011-01-15 Kouhei Sutou * gcutter/gcut-string-io-channel.[ch] (gcut_string_io_channel_get_main_context) (gcut_string_io_channel_set_main_context): make main context used in string IO channel customizable. * test/gcutter/test-gcut-string-io-channel.c: add tests for the above. 2011-01-12 Kouhei Sutou * doc/install-to-fedora.rd*, doc/install-to-centos.rd*: update cutter-repository RPM path. * yum/gpg-uid.sh: always use 1c837f31 GPG key. * yum/cutter-repository.spec: don't install GPG key for RPM by hand. 2011-01-10 Kouhei Sutou * test/cutter/test-cut-utils.c (test_compare_string): don't assume that strcmp() returns 1 and -1. It may return 1 or greater and -1 or less. #3153801 Reported by Ilya Barygin. Thanks!!! 2010-11-25 Kouhei Sutou * misc/update-latest-release.rb: add missing the last ".". 2010-11-24 Kouhei Sutou * misc/update-latest-release.rb: append version number at the sign line in RPM %changelog. 2010-11-23 Kouhei Sutou * m4macros/cutter.m4: use -q instead of /dev/null. * m4macros/cutter.m4: remove needless cat. * Makefile.am, misc/update-latest-release.rb: parameterize package name. 2010-11-22 Kouhei Sutou * yum/build-repository-rpm.sh, yum/Makefile.am: parameterize. 2010-11-07 Kouhei Sutou * cutter/cut-test-context.c, cutter/cut-test-context.h, cutter/cut-utils.c, gcutter/gcut-public.h, gcutter/gcut-test-utils.h, gcutter/gcut-utils.c, test/gcutter/test-gcut-test-utils.c: add gcut_get_fixture_data() that returns GString. 2010-11-06 Kouhei Sutou * cutter/cut-test-utils.h: fix version number. * cutter/cut-test-utils.h, cutter/cut-assertions-helper.c, cutter/cut-public.h, cutter/cut-test-context.c, cutter/cut-test-context.h, cutter/cut-utils.c, test/cutter/test-cut-test-utils.c: - make cut_build_fixture_data_path() deprecated. - add cut_build_fixture_path() that returns Cutter owened path. - add cut_get_fixture_data() that also returns data size. 2010-10-31 Kouhei Sutou * doc/cutter.rd, doc/cut-diff.rd: capitalize section title. 2010-10-26 Yuto Hayamizu * test/gcutter/test-gcut-test-utils.c (test_take_new_string): add test of gcut_take_new_string. * gcutter/gcut-test-utils.h: add new take function. * test/gcutter/test-gcut-test-utils.c: add test of gcut_take_string. * gcutter/gcut-test-utils.h (gcut_take_string): add. * gcutter/gcut-public.h (cut_test_context_take_g_string): add. * cutter/cut-test-context.c (cut_test_context_take_g_string) (cut_test_context_g_string_free): add new take function. 2010-09-26 Kouhei Sutou * cutter/cut-contractor.c: remove unused codes. 2010-09-15 Kouhei Sutou * m4macros/cutter.m4 (AC_CHECK_COVERAGE): support Makefile filename customize. 2010-09-10 Kouhei Sutou * doc/install-to-debian.rd*: add an apt-line for squeeze. Suggested by Romuald Conty. Thanks!!! * apt/: support squeeze. 2010-09-09 Kouhei Sutou * apt/Makefile.am (CODE_NAMES): add squeeze. 2010-09-06 Kouhei Sutou * doc/reference/header.html*: add install link. * configure.ac: 1.1.5 -> 1.1.6. * test/fixtures/loader/: link missing GIO libraries. * gcutter/gcut-process.c: ensure undefing ERROR macro. * gcutter/gcut-process.c: add missing GIO check. * doc/reference/Makefile.am, doc/reference/cutter.types: include GCutProcess. * doc/cut-diff.rd*: fix typos. * ./: 1.1.4 -> 1.1.5. * debian/changelog: 1.1.4-1 -> 1.1.5-1. * NEWS*: add 1.1.5 entry. * doc/cut-diff.rd*: add documents for --context-lines. * cutter/cut-test-utils.h, doc/reference/ja.po, doc/reference/cutter-overrides.txt, doc/reference/overrides.txt: update cut_build_path_array(). * doc/reference/ja.po: update translations. * gcutter/gcut-data.h, gcutter/gcut-egg.h, gcutter/gcut-process.h: fix documents. * doc/reference/overrides.txt: add newly added symbols. 2010-08-31 Kouhei Sutou * m4macros/cutter.m4: support lcov 1.9. #3056684 Patch by Romain Tartière. Thanks!!! 2010-08-18 Kouhei Sutou * module/ui/cut-console-ui.c: support multi width spaces. 2010-07-28 Kouhei Sutou * module/report/cut-xml-report-factory.c: add missing parent dispose call. * module/report/cut-xml-report-factory.c: add missing static. * doc/reference/cutter-docs.sgml: add gcut-process and gcut-string entries. * gcutter/gcut-egg.h: mark deprecated. * gcutter/gcut-process.h: add missing document. * doc/reference/ja.po: update. * gcutter/gcut-string.h: fix document. * gcutter/gcut-data.h: fix a typo. * doc/reference/cutter-docs.sgml: add 1.1.5 entry. * soupcutter/soupcutter.h: fix link destination. * doc/install-to-freebsd.rd*: fix format. 2010-07-26 Kouhei Sutou * doc/install-to-freebsd.rd*: use pkg_add and 'make install' instead of portupgrade for installing Cutter on FreeBSD. Suggested by Romain Tartière. Thanks!!! 2010-07-25 Kouhei Sutou * doc/install-to-freebsd.rd*: use ports to install Cutter. Suggested by Romain Tartière. Thanks!!! 2010-07-20 Kouhei Sutou * configure.ac, module/report/cut-pdf-report.c, module/report/cut-pdf-report-factory.c: use libgoffice-0.8 instead of libgoffice-0.6. Suggested by Romain Tartière. Thanks!!! * configure.ac: show lcov related paths only when coverage is enabled. Suggested by Romain Tartière. Thanks!!! 2010-07-17 Kouhei Sutou * sample/cairo/: remove because we can't maintain it. * sample/gtk+/builder.c (test_domain): follow GTK+'s behavior changes. * sample/gtk+/builder.c (test_widget): remove behavior changed test. * sample/glib/regex.c (test_partial_match): follow GLib's behavior changes. * cutter/cut-pipeline.c: work sub-cutter without full-path. Patch by Romain Tartière. Thanks!!! * README*: update Romain Tartière to thanks entry. Thanks!!! * configure.ac: show configure result at the end of configure. Suggested by Romain Tartière. Thanks!!! * README*: add Romain Tartière to thanks list. Thanks!!! * test/run-test.sh: clear LC_ALL for avoiding locale independent test failures. Suggested by Romain Tartière. Thanks!!! 2010-07-14 Kouhei Sutou * configure.ac, test/fixtures/, test/lib/, test/gcutter/test-gcut-process.c: cut-test-echo -> cuttest-echo. * test/gcutter/test-gcut-process.c: remove unsupported operation operation test. * gcutter/gcut-process.[ch]: add gcut_process_flush(). * cutter/cut-test-utils.h, cutter/cut-public.h, cutter/cut-utils.c: cut_build_pathv -> cut_build_path_array. 2010-07-07 Kouhei Sutou * gcutter/gcut-list.c, gcutter/gcut-test-utils.h, test/gcutter/test-gcut-list.c: add gcut_list_int_new(), gcut_list_uint_new(), gcut_take_new_list_int() and gcut_take_new_list_uint(). * test/run-test.sh, sample/cairo/run-test.sh, sample/glib/run-test.sh, sample/gtk+/run-test.sh: use 'make check' for implicit test programs building. 2010-07-06 Kouhei Sutou * cutter/cut-assertions.h: fix typos. 2010-07-02 Kouhei Sutou * test/gcutter/Makefile.am: fix a typo. 2010-06-25 Kouhei Sutou * TODO: - add gcut_egg_incubate() that returns GCutProcess. - rename cut_process_* to cut_child_cutter_*. 2010-06-24 Kouhei Sutou * TODO: support filter tests by attribute value. e.g. cutter --filter-by-attribute 'target_version <= 1.0.0'. * gcutter/gcut-data.h (gcut_data_has_field): add. * gcutter/gcut-dynamic-data.[ch], test/gcutter/test-gcut-dynamic-data.c: add gcut_dynamic_data_has_field(). 2010-06-21 Kouhei Sutou * cutter/cut-assertions.h: make cut_assert_path_exist() and cut_assert_path_not_exist() deprecated. Use cut_assert_exist_path() and cut_assert_not_exist_path() instead. * doc/install-to-ubuntu.rd*: karmic -> lucid. * cutter/cut-differ.[ch], cutter/cut-readable-differ.c, cutter/cut-unified-differ.c: start supporting context size in readable differ. * cutter/cut-sequence-matcher.c, test/cutter/test-cut-sequence-matcher.c: avoid overflow. * cutter/cut-diff.c: make context lines customizable. * cutter/cut-differ.[ch], cutter/cut-unified-differ.[ch], cutter/cut-readable-differ.c: share context size accessor. * cutter/cut-unified-differ.c: move no difference check utility to ... * cutter/cut-differ.[ch]: ... here. * cutter/cut-sequence-matcher.[ch], test/cutter/test-cut-sequence-matcher.c: make context size customizable. 2010-06-11 Kouhei Sutou * TODO: report errors in data setup function. 2010-06-10 Kouhei Sutou * Makefile.am, po/POTFILES.in: update po. 2010-06-10 Kouhei Sutou * NEWS: translate Japanese. * html/index.html*: add missing installation on CentOS links. * configure.ac: 1.1.4 -> 1.1.5. * license/Makefile.am (dist_license_DATA): add missing fdl-1.3.txt. * apt/Makefile.am, apt/sign-repository.sh: remove needless release status support. * apt/update-repository.sh: work. * ./: update the latest release date. * doc/reference/: add missing variable arguments. * cutter/cut-assertions.h, gcutter/gcut-assertions.h, doc/: fix typos. * configure.ac, doc/reference/cutter-docs.sgml: document cut-features. * NEWS*: add cut_get_test_directory(). * apt/build-in-chroot.sh: remove .svn directory. * doc/reference/ja.po: update translations. * NEWS*: add 1.1.4 entry. * debian/changelog: add a new entry. * apt/: remove auto-generatable files. * doc/install-to-centos.rd*, doc/reference/, html/index.html*: add an install document for CentOS. * yum/Makefile.am, yum/build-repository-rpm.sh, yum/cutter.repo: create repository RPM for each distribution. * yum/: support multi distribution packaging. * yum/build-rpm.sh: support multi distributions. * cutter/Makefile.am: cutter and cut-diff links to GLib related libraries. * yum/centos/: add a directory for CentOS. * configure.ac: add missing CentOS spec file generation. * rpm/centos/, yum/: start supporting RPM package and Yum repository for CentOS. 2010-06-10 Kouhei Sutou * README*: add bundled GLib and PCRE licenses. 2010-06-09 Kouhei Sutou * glib-compatible/pcre/Makefile.am: use bcopy(). * glib-compatible/: remove needless files. * sample/glib/Makefile.am: don't test GRegex on GLib 2.12 because GLib 2.12 doesn't have GRegex. * cutter/cut-assertions-helper.[ch], cutter/cut-assertions.h, test/cutter/test-cut-assertions.c: add cut_assert_not_equal_file_raw(). * cutter/cut-assertions-helper.[ch], cutter/cut-assertions.h: cut_assert_equal_file_raw() reports correct expression. * test/cutter/test-cut-assertions.c: use cut_build_path(). 2010-06-09 Kouhei Sutou * glib-compatible/COPYING: add. * glib-compatible/: make PCRE buildable. * glib-compatible/pcre/: import PCRE for GLib 2.12 support. * cutter/cut-main.c: use g_option_context_get_help() if available. * test/cutter/test-cut-xml-stream.c: fix argument order. 2010-06-09 Kouhei Sutou * test/cutter/test-cut-xml-stream.c: use cut_take_replace(). * cutter/cut-run-context.c: use GLib compatibility layer. * cutter/cut-main.c, cutter/cut-diff.c: don't use g_option_context_get_help(). 2010-06-08 Kouhei Sutou * glib-compatible/gstring.c: backport g_string_append_vasprintf(). * gcutter/gcut-value-equal.c: don't use g_strcmp0(). * cutter/Makefile.am: link to Glib compatibility layer. * cutter/cut-loader.c: use GLib compatibility layer. * cutter/cut-*.c: use GLib compatibility layer. * cutter/cut-stream-parser.c: don't use g_markup_parse_context_get_element_stack(). * cutter/cut-sequence-matcher.[ch]: don't use GHashTableIter. * gcutter/gcut-string-io-channel.c: use GLib compatibility layer. * glib-compatible/gstring.[ch]: add GString compatibility layer. * glib-compatible/: make compatibility GSequence buildable. * configure.ac, glib-compatible/: make compatibility GRegex buildable. * configure.ac, Makefile.am, glib-compatible/, gcutter/guct-hash-table.c: add GLib 2.12 compatibility layer. * gcutter/gcut-hash-table.c: add g_hash_table_get_keys() for GLib 2.12. * configure.ac: accept GLib >= 2.12.3 and intltool >= 0.35.0 for CentOS 5. 2010-06-07 Kouhei Sutou * cutter/cut-colorize-differ.c: use tab instead of 8 spaces. * cutter/cut-diff-writer.[ch], cutter/cut-colorize-differ.c: use tab instead of 8 spaces. * cutter/cut-readable-differ.c, test/cutter/test-cut-readable-differ.c: use tab instead of 8 spaces. * cutter/cut-differ.c (cut_differ_util_compute_width): use 8 width for tab. 2010-06-03 Kouhei Sutou * Makefile.am: release archive as cutter-testing-framework-X.X.X.tar.gz into http://cutter.sourceforge.net/archives/debian/. 2010-05-29 Kouhei Sutou * configure.ac, doc/reference/Makefile.am: add cut-features. 2010-05-29 Kouhei Sutou * configure.ac, Makefile.am, apt/Makefile.am, yum/Makefile.am: use configure. 2010-05-28 Kouhei Sutou * gcutter/gcut-assertions-helper.[ch], gcutter/gcut-assertions.h, test/gcutter/test-gcut-assertions.c: add gcut_assert_not_equal_int64(). * gcutter/gcut-assertions-helper.[ch], gcutter/gcut-assertions.h, test/gcutter/test-gcut-assertions.c: add gcut_assert_not_equal_uint64(). 2010-05-28 Kouhei Sutou * misc/rd2refentry-lib.rb: support '# note'. * README*: fix markup. 2010-05-27 Kouhei Sutou * cutter/cut-assertions-helper.h, cutter/cut-public.h, cutter/cut-test-context.c, test/cutter/test-cut-assertions.c: fix nested user message is ignored. 2010-05-25 Kouhei Sutou * test/cutter/test-cut-assertions.c: add a test for cut_assert_equal_string("XXX", NULL) case. * cutter/cut-assertions-helper.c, soupcutter/soupcut-assertions-helper.c, test/cutter/test-cut-assertions.c, test/soupcutter/test-soupcut-assertions.c: use cut_take_inspect_string(). * cutter/cut-test-utils.h (cut_take_inspect_string): add. * cutter/cut-utils.c, cutter/cut-public.h, test/cutter/test-cut-utils.c: cut_utils_inspect_string() really inspects string and const is removed from return value type. 2010-05-18 Nobuyoshi Nakada * autogen.sh: fix of setting default values. 2010-05-15 Kouhei Sutou * README*, TUTORIAL*: use CC-BY-SA 3.0 not 2.1. 2010-05-11 Kouhei Sutou * README*, TUTORIAL*, license/: - mention licenses. - make document LGPL/GFDL/CC-BY-SA triple license. 2010-04-24 Kouhei Sutou * gtk-doc.make: work 'make install' on no gtkdoc-rebase environment. 2010-04-21 Kouhei Sutou * NEWS*, README: add Romuald Conty to thanks list. Thanks!!! * doc/install-to-ubuntu.rd, doc/install-to-debian.rd: fix typos. Reported by Romuald Conty. Thanks!!! 2010-04-20 Kouhei Sutou * misc/release.rb: follow the recent SF.net HTML changes. :< 2010-04-19 Kouhei Sutou * misc/rd2refentry-lib.rb: add a syntax to disable term index by ': [] term'. 2010-04-16 Kouhei Sutou * cutter/cut-crash-backtrace.[ch], test/cutter/test-cut-test-case.c, test/cutter/test-cut-test.c: reduce memory allocation and lock conditions on crash. 2010-04-14 Kouhei Sutou * gcutter/gcut-data.h: add G_TYPE_CHAR example. 2010-04-14 Kouhei Sutou * autogen.sh: use suitable default value for each environment. * apt/Makefile, yum/Makefile: don't remove svn related files. * apt/Makefile (remove-existing-packages): remove all files in pool/. * doc/reference/ja.po: update. * apt/Makefile, yum/Makefile: remove existing packages before all tasks. * apt/build-deb.sh: libgoffice-0.8 -> libgoffice-0.8-8. * debian/control: specify the same version to dependencies. * misc/release.rb: remove WWW module from mechanize. * configure.ac: 1.1.3 -> 1.1.4. * cppcutter/cppcut-message.h: add missing CUT_EXPORT for Windows. * soupcutter/soupcut-*.h, doc/reference/ja.po: remove 'based of libsoup' to shorten generated document's file name. 2010-04-13 Kouhei Sutou * NEWS*: adapt to GTK-Doc 1.14 behavior. * misc/rd2refentry-lib.rb: adapt to GTK-Doc 1.14 behavior. * */*.h: follow gtk-doc link change: use title for linkend target instead of ID. * doc/reference/ja.po: update. * soupcutter/soupcut-assertions.h: use 'and' instead of '/'. * rpm/fedora/cutter.spec.in: fix a typo. * apt/build-deb.sh: use libgoffice-0.8-dev instead of libgoffice-0-8-dev if it's available. * gtk-doc.make (dist-hook): add -rp to cp for directory. * ./: 1.1.2 -> 1.1.3. * m4macros/cutter.m4: add 'coverage-force' target. * NEWS*: add 1.1.3 entry. * doc/reference/ja.po: update. * doc/reference/Makefile.am (IGNORE_HFILES): update. * doc/reference/ja.po: update. * doc/reference/cutter-docs.sgml: add an index page for new symbols in 1.1.3. * doc/reference/cutter-overrides.txt: add newly added macros. * cutter/cut-test-utils.h, cutter/cut-test-utils-helper.[ch], test/cutter/test-cut-test-utils.c: add cut_take_convert(). * gcutter/gcut-data.h, gcutter/gcut-data-helper.[ch]: add gcut_data_get_int64() and gcut_data_get_uint64(). * test/gcutter/test-gcut-inspect.c: use border value for int related tests. * gcutter/gcut-dynamic-data.[ch], test/gcutter/test-gcut-dynamic-data.c: GCutDyminicData supports gint64 and guint64. * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_int64() and gcut_inspect_uint64(). 2010-04-12 Kouhei Sutou * test/gcutter/test-gcut-dynamic-data.c: fix a typo. * gcutter/gcut-data.h, gcutter/gcut-data-helper.[ch]: add gcut_data_get_double(). * gcutter/gcut-dynamic-data.[ch], test/gcutter/test-gcut-dynamic-data.c: GCutDyminicData supports gdouble. * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_double(). * test/gcutter/test-gcut-inspect.c: use gcut_data_get_char(). * test/gcutter/test-gcut-inspect.c: use gcut_data_get_boolean(). * gcutter/gcut-data.h, gcutter/gcut-data-helper.[ch]: add gcut_data_get_boolean(). * gcutter/gcut-dynamic-data.[ch], test/gcutter/test-gcut-dynamic-data.c: GCutDyminicData supports gboolean. * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_boolean(). * gcutter/gcut-data.h, gcutter/gcut-data-helper.[ch]: add gcut_data_get_char(). * gcutter/gcut-dynamic-data.[ch], test/gcutter/test-gcut-dynamic-data.c: GCutDyminicData supports gchar. * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], test/cutter/test-cut-assertions.c: add cut_assert_equal_char(). * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_char(). * doc/install-to-cygwin.rd*: update dependencies packages for Cygwin 1.7. 2010-04-09 Kouhei Sutou * m4macros/cutter.m4: ensure using TAB. * m4macros/cutter.m4: use TAB for indent not 8 spaces. * gcutter/gcut-data.h, gcutter/gcut-data-helper.[ch]: add gcut_data_get_size(). * gcutter/gcut-dynamic-data.[ch], test/gcutter/test-gcut-dynamic-data.c: GCutDyminicData supports gsize. * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_size(). * gcutter/gcut-types.[ch], test/gcutter/test-gcut-types.c: add GCUT_TYPE_SIZE. 2010-04-08 Kouhei Sutou * m4macros/cutter.m4: split coverage report generation target. * README*: add Zed Shaw to Thanks list. Thanks!!! * cutter/cut-utils.c (cut_utils_get_fixture_data_string_va_list): don't free fixture_data_path that is not needed to free. Reported by Zed Shaw. Thanks!!! * gcuttter/gcut-list.c: don't pass enum/flags type to iterator function by GUINT_TO_POINTER because GType may be guint64 not guint. (e.g. MacOSX) * TUTORIAL*, sample/stack/test/run-test.sh: - add missing top_dir variable. - add DYLD_LIBRARY_PATH for MacOSX and LD_LIBRARY_PATH for *BSD. 2010-04-04 Kouhei Sutou * USERS*: add nfc-tools. 2010-04-03 Kouhei Sutou * Makefile.am, yum/makefile: update. * configure.ac: 1.1.2 -> 1.1.3. * NEWS*: add 1.1.2 entry. * po/ja.po, doc/reference/ja.po: update translations. * doc/reference/cutter-overrides.txt: add CUT_EXPORT entry. (but it is ignored!) * doc/reference/cutter-docs.sgml: add new simples in 1.1.2. * Makefile.am, misc/update-latest-release.rb: support Debian package auto update. * cppcutter/Makefile.am: add missing link flags. * cutter/cut-loader.c: don't normalize anonymous namespace name. * test/fixtures/loader/cpp/stub-namespace.cpp: use CUT_EXPORT. * cutter/cut-loader.c: fix buffer reset bug. * test/cutter/test-cut-loader.c: add Visual C++ mangler. * cutter/cut-loader.c: go to signature information offset. * cutter/cut-loader.c: (maybe) support setup detection with Visual C++. * cutter/cut-loader.c: (maybe) support Visual C++ demangle. 2010-04-02 Kouhei Sutou * test/fixtures/loader/cpp-fixture/*.cpp: use CUT_EXPORT. * vcc/include/config.h: define HAVE_GTK_ENABLE_DEBUG on Windows. * cutter/cutter.h: add CUT_EXPORT for Windows. * test/cutter/test-cutter.c: fix style. * module/report/Makefile.win32: add missing cut-cairo.obj. * vcc/Makefile.build, module/report/Makefile.win32: add pango-cairo. * vcc/Makefile.build: define CAIRO_CFLAGS and CAIRO_LIBS. * module/report/Makefile.win32: build PDF report. 2010-04-02 Kouhei Sutou * test/fixtures/test-context/Makefile.win32: define missing CUT_RELATIVE_PATH. * test/cutter/test-cut-test-utils.c: consider path separator. * test/fixtures/loader/iterator/success-iterated-test.c (data_translate): add missing NULL. * misc/generate-test-defs.rb: ignore /u?int_(fast|least)/ test functions. * misc/generate-test-makefile.rb: DLL depends on def. * vcc/: sync. * misc/generate-test-defs.rb: add missing upper cases and numbers. * test/cutter/test-cut-utils.c: use system inet_pton() on Windows Vista or later. * test/cutter/test-cut-utils.c: use G_OS_WIN32 instead of HAVE_WINSOCK2_H. * loader/cpp-fixture/Makefile.win32: LOCAL_CFLAGS -> LOCAL_CPPFLAGS. * vcc/: sync. * test/cutter/Makefile.win32: link missing ws2_32.lib. * test/cutter/test-cut-assertions.c: use more suitable macros. * test/fixtures/loader/cpp/Makefile.win32: LOCAL_CFLAGS -> LOCAL_CPPFLAGS. * cutter/Makefile.win32: link missing ws2_32.lib. * cutter/cut-test-context.c, cutter/cut-utils.c: use winsock2.h instead of windows.h because windows.h includes winsock.h on Visual C++. * cutter/cut-utils.c: use native inet_ntop() on Windows Vista or later. * cutter/cut-utils.c: fix a typo. * cutter/cut-process.c: don't use G_OS_WIN32 before including GLib. * cutter/cut-pipeline.c: don't use G_OS_WIN32 before including GLib. * vcc/include/cutter/cut-config.h: add. * m4macros/cutter.m4: work with --enable-coverage=SOMETHING. Suggested by gunyarakun. Thanks!!! 2010-03-28 Kouhei Sutou * misc/rd2refentry-lib.rb: support custom ID in sub section. * misc/rd2refentry-lib.rb: add filename into custom ID. (re-revert) 2010-03-27 Kouhei Sutou * misc/rd2refentry-lib.rb: accept gettext RubyGem. 2010-03-26 Kouhei Sutou * misc/rd2refentry-lib.rb: escape "!" and "?" in term ID. * misc/rd2refentry-lib.rb: don't add filename into custom ID. (revert) * cutter/cut-test-case.c, cutter/cut-test-context.[ch], test/cutter/test-cut-test-case.c: support cut_omit() in setup(). #2976775 Reported by Romain Tartière. Thanks!!! 2010-03-17 Kouhei Sutou * cutter/cut-pipeline.c, cutter/cut-process.c: use G_OS_WIN32 instead of HAVE_IO_H to work with Cygwin 1.7. 2010-03-12 Kouhei Sutou * doc/install-to-ubuntu.rd*: Jaunty -> Karmic. * m4macros/cutter.m4: support lcov 1.8. 2010-03-11 Kouhei Sutou * html/index.html*: fix fragment. * configure.ac: 1.1.1 -> 1.1.2. * cppcutter/Makefile.am: fix wrong macro name. * test/cutter/test-cut-utils.c: use WSAStringToAddress() instead of inet_pton(). * cppcutter/Makefile.am, cppcutter/cppcut-assertions-helper.cpp: support dllimport/dllexport. * cutter/cut-utils.c: use WSAAddressToString() instead of inet_ntop(). * cutter/cut-main.c, configure.ac, cutter/Makefile.am, test/cutter/Makefile.am: use Winsock2 on Windows. * cutter/cut-run-context.c, cutter/cut-test.c: undef existing ERROR macro for Windows/MinGW. * cutter/cut-public.h: add missing CUT_ prefix. * Makefile.am: remove *.rpm. * doc/reference/ja.po: update. * doc/install-to*.rd*: update to 1.1.1. * NEWS*, html/index.html*: update release date. * doc/install-to-fedora.rd*: use yum. * yum: make more abstract. * cutter/Makefile.am: don't use variable in _SOURCES... 2010-03-10 Kouhei Sutou * yum/: add. * rpm/fedora/cutter.spec.in: add %{?dist}. * rpm/fedora/cutter.spec.in: add 1.1.1 entry. * apt/update-repository.sh: fix a wrong number of arguments check. 2010-03-09 Kouhei Sutou * doc/install-to-*.rd: 1.1.0 -> 1.1.1. * apt/: split to shell scripts. * NEWS*: fix typos. * doc/reference/cutter-overrides.txt: add missing entries. * test/lib/Makefile.am: add missing test/lib/cuttest-event-receiver.h. * debian/changelog: add 1.1.1 entry. * doc/reference/header*.html, html/index.html*: 1.1.0 -> 1.1.1. * doc/reference/cutter-overrides.txt: add entries for defined in 1.1.1. * doc/reference/ja.po: remove garbages. * NEWS*: add missing new functions. * gcutter/gcut-data.h: markup type. * doc/reference/ja.po: update. 2010-03-08 Kouhei Sutou * cutter/cut-assertions.h, cppcutter/cppcut-assertions.h, doc/reference/cutter-overrides.txt: fix parameter documents. * NEWS*: add missing cut_make_directory(). * NEWS*: add a 1.1.1 entry. * TODO: remove: cut_assert_equal_sockaddr(). 2010-03-06 Kouhei Sutou * misc/rd2refentry-lib.rb: add missing filename into custom ID. * misc/rd2refentry-lib.rb: also treat '=' as term sentence separator. 2010-03-04 Kouhei Sutou * misc/rd2refentry-lib.rb: work with Ruby-GetText-Package 1.93.0. 2010-03-02 Kouhei Sutou * misc/rd2refentry-lib.rb: use gettext/tools instead of gettext/poparser directly. 2010-02-17 Kouhei Sutou * misc/rd2refentry-lib.rb: ignore parameter list from ID. 2010-02-16 Kouhei Sutou * misc/rd2man-lib.rb, misc/rd2refentry-lib.rb: support keybord markup. 2010-01-30 Kouhei Sutou * html/cutter.css: fix menu bar spaces. 2010-01-23 Kouhei Sutou * gcutter/gcut-data.h, test/gcutter/test-gcut-dynamic-data.c: add gcut_data_get_object(). GObject as a dynamic data value is supported. * gcutter/gcut-data-helper.[ch] (gcut_data_get_object_helper): add. * gcutter/gcut-dynamic-data.[ch] (gcut_dynamic_data_get_object): add. * gcutter/gcut-list.c, gcutter/gcut-test-utils.h, test/gcutter/test-gcut-test-utils.c: add gcut_list_new(), gcut_take_new_list_object() and gcut_list_object_free(). 2010-01-19 Kouhei Sutou * test/cutter/test-cut-utils.c: use <256 value for unknown family value. * test/cutter/test-cut-utils.c: include missing . * cutter/cut-utils.c: include missing . 2010-01-18 Kouhei Sutou * apt/: remove apt/{debian,ubuntu}/TARGETS. 2010-01-16 Kouhei Sutou * cutter/cut-assertions-helper.[ch], cutter/cut-assertions.h, cutter/cut-helper.h, test/cutter/test-cut-assertions.c: add cut_assert_equal_sockaddr(), cut_equal_sockaddr() and cut_inspect_sockaddr(). * cutter/cut-public.h, cutter/cut-utils.c: add missing const. * cutter/cut-public.h, cutter/cut-utils.c, test/cutter/test-cut-utils.c: add cut_utils_inspect_sockaddr(). * cutter/cut-public.h, cutter/cut-utils.c, test/cutter/test-cut-utils.c, test/fixtures/loader/fixture/all.c, test/fixtures/loader/fixture/without-prefix.c: add cut_utils_equal_sockaddr(). * configure.ac: generate cutter/cut-config.h for installation. 2009-12-08 Kouhei Sutou * doc/reference/ja.po: fix a typo. 2009-11-27 Kouhei Sutou * apt/: jaunty -> karmic. 2009-11-15 Kouhei Sutou * vcc/Makefile.build: link msvcrt.lib explicitly. * cppcutter/cppcut-macros.h (CPPCUT_DECL): define as empty on non-Windows. * cutter/cut-test-utils.h, cutter/cut-utils.c, cutter/cut-public.h, test/cutter/test-cut-test-utils.c: add cut_make_directory(). * vcc/Makefile.build, **/Makefile.win32: use /libpath. * vcc/Makefile.build, vcc/Makefile.am: CFLAGS -> CPPFLAGS. * cppcutter/cppcut-assertions-helper.h: include cppcut-macros.h. * test/cutter/: don't add ".libs" on Windows. * test/run-test.bat: add cppcutter/ to PATH. * test/fixtures/loader/cpp{,-fixture}/Makefile.win32: use cppcutter.lib. * vcc/Makefile.build: use /Zi option for debugging. * cppcutter/cppcut-macros.h, cpcutter/cppcut-assertions-helper.h, cppcutter/Makfile.am, vcc/Makefile.am: export CppCutter symbols by declaration instead of .def. * cppcutter/Makefile.am, vcc/Makefile.am, misc/generate-makefile-objects.rb: support CppCutter build. * Makefile.win32, cppcutter/Makefile.win32, vcc/Makefile.am: support CppCutter build. 2009-11-14 Kouhei Sutou * test/run-test.bat: support command line argument. * vcc/Makefile.build: support .cpp build. * test/cutter/test-cut-loader.c: don't add ".libs" on Windows. 2009-11-14 Kouhei Sutou * misc/generate-test-defs.rb, misc/generate-test-makefile.rb, vcc/Makefile.am, test/fixture/**/Makefile.win32: start supporting test fixture build. 2009-11-14 Kouhei Sutou * test/cutter/test-cut-assertions.c: don't call close() on Windows beause it causes crash but why??? * test/cutter/test-cut-loader.c: add missing NULL. * test/cutter/test-cut-pipeline.c: add missing NULL. * module/report/Makefile.win32: add. * test/cutter/test-cut-test-iterator.c: add missing NULL. * module/ui/Makefile.win32, module/report/Makefile.win32: fix paths. * vcc/Makefile.build: support debug build. * test/cutter/test-cut-xml-stream.c: add missing NULL. * module/stream/cut-xml-stream-factory.c (STDOUT_FILENO): define by hand if not defined by system. 2009-11-14 Kouhei Sutou * module/stream/cut-xml-stream-factory.c: add missing HAVE_UNISTD_H guard. * module/stream/Makefile.win32: add. * vcc/Makefile.sub: add. * **/Makefile.win32: use vcc/Makefile.sub. 2009-11-14 Kouhei Sutou * cutter/Makefile.win32: cutter.dll includes all symbols. * test/cutter/Makefile.win32: use generated sources. 2009-11-14 Kouhei Sutou * vcc/Makefile.am: cutter.def provides all symbols. * test/lib/cuttest-assertions.h, test/cutter/test-cut-test-iterator.c: don't use '## __VA_ARGS__'. * test/cutter/test-cut-test-suite.c: fix path. 2009-11-14 Kouhei Sutou * test/cutter/test-cut-test-data.c: make buildable with VC++. * test/cutter/test-cut-fork.c, test/cutter/test-cut-readable-differ.c, test/cutter/test-cut-utils.c, test/cutter/test-cutter.c: make buildable with VC++. * cutter/cut-test-utils.h: add missing ts=4. * test/cutter/test-cut-unified-differ.c: remove nonexistent declarations. 2009-11-14 Kouhei Sutou * misc/generate-def.rb: support 'char **'. * test/cutter/test-cut-test.c: remove a nonexistent declaration. * cutter/Makefile.am, cutter/Makefile.win32, vcc/Makefile.am: generate cutter-all.dll for testing. * vcc/Makefile.am: fix a path. * misc/generate-test-makefile.rb: remove needless expression expand. * misc/generate-test-defs.rb, misc/generate-test-makefile.rb, test/cutter/Makefile.am, vcc/Makefile.am: add test build files generator. 2009-11-12 Kouhei Sutou * cutter/cut-pe-loader.c: support DLL generated by VC++. 2009-11-10 Kouhei Sutou * misc/generate-def.rb, test/lib/Makefile.am, vcc/Makefile.am: generate .def for test libraries. * cutter/cut-test-utils-helper.h: fix format. * misc/generate-def.rb: also collect new line separated functions. * module/ui/Makefile.win32, vcc/Makefile.build: support GTK UI build. * test/run-test.bat: add. * module/ui/Makefile.win32: add. * misc/generate-def.rb: ignore intmax/intptr/uintmax/uintptr. * cutter/Makefile.win32: create cutter.exe. * misc/generate-makefile-objects.rb: use '\' instead of '/' for path separator. * vcc/source/cutter/Makefile.win32: remove a needless file. * vcc/source/Makefile.win32, vcc/Makefile.build: fix a typo. 2009-11-09 Kouhei Sutou * vcc/Makefile.build: add -MD. * **/Makefile.win32: add clean target. * misc/generate-makefile-objects.rb: support marshalers. * cutter/Makefile.am, gcutter/Makefile.am: add missing source files. * vcc/**/Makefile.win32: add. * cutter/Makefile.am: remove duplicated file. * misc/generate-makefile-objects.rb: specialize enum-types C source. * vcc/Makefile.am: fix regexp. * gcutter/Makefile.win32: split to. * cutter/Makefile.win32, vcc/Makefile.build: ... them. * Makefile.win32: gcutter -> cutter. * vcc/: sync. * cutter/Makefile.am, gcutter/Makefile.am, vcc/Makefile.am: generate object files for Win32. * misc/generate-makefile-object.rb: add. * cutter/Makefile.am: reorder. * gcutter/Makefile.am: reorder. * Makefile.win32, gcutter/Makefile.win32: add but not worked yet. 2009-11-03 Kouhei Sutou * configure.ac: 1.1.0 -> 1.1.1. * debian/changelog: add 1.1.0 entry. * Makefile.am, apt/: update versions under apt/. * Makefile.am: add update-latest-release target. * doc/, html/: 1.0.9 -> 1.1.0. * rpm/fedora/cutter.spec.in: add 1.1.0 entry. * NEWS*: add 1.1.0 entry. * README*: add Yuto Hayamizu to authors. * gcutter/gcut-data.h: fix a typo. * debian/rules (install/libcutter-cpp-dev): install libcppcutter.so. * debian/control: C -> C and C++. * ./: C -> C and C++. * cppcutter/cppcutter.h, doc/reference/: update document. * cutter/cut-assertions.h, gcutter/gcut-assertions.h, gdkcutter-pixbuf/gdkcut-pixbuf-assertions.h, soupcutter/soupcut-assertions.h, doc/reference/: update document. * cppcutter/, test/cppcutter/: support optional assertion message by cppcut_message(). * cutter/cutter.h: fix document format. * test/cutter/test-cut-assertions.c (test_assert_message): rewrite with cut_assert_test_result(). 2009-11-01 Kouhei Sutou * cutter/cut-helper.h: use cut_test_with_user_message() instead of cut_set_message_backward_compatibility(). * cutter/cut-assertions-helper.h (cut_set_message_backward_compatibility): remove. * test/cutter/test-cut-sequence-matcher.c: rewrite as function from macro. * test/cutter/test-cut-loader.c: C++ test case can use startup/shutdown without cut_ prefix. * cutter/, gcutter/gcut-assertions.h, gdkcutter-pixbuf/gdkcut-pixbuf-assertions.h, soupcutter/soupcut-assertions.h: [API CHANGED] re-enable optional assertion user message but API is changed. cut_message() is required: before: cut_assert_equal_string("a", "b", "message"); after: cut_assert_equal_string("a", "b", cut_message("message")); * test/, sample/: follow the above changes. * cutter/cut-assertions-helper.h: fix indentation. 2009-11-01 Kouhei Sutou * cutter/cut-loader.[ch], cutter/cut-repository.c, test/cutter/test-cut-loader.c, test/fixtures/loader/cpp-fixture/: support fixture functions detection defined in C++ namespace. 2009-10-31 Kouhei Sutou * cutter/cut-loader.c, test/cutter/test-cut-loader.c, test/fixtures/loader/cpp/: support test detection defined in C++ namespace. 2009-10-30 Kouhei Sutou * test/cutter/test-cut-loader.c, test/fixtures/loader/test/Makefile.am: fix file name. 2009-10-30 Yuto Hayamizu * TUTORIAL, html/index.html: fix "an unit" -> "a unit" 2009-10-28 Kouhei Sutou * misc/update-latest-release.rb: support X-X-X version variant replacing. * misc/Makefile.am (dist_noinst_SCRIPTS): add update-latest-release.rb. 2009-10-28 Kouhei Sutou * misc/update-latest-release.rb: add for automating latest release version/date updating. * TODO: add: - add CUTTER_DEBUG technique in test/run-test.sh to tutorial as a debugging technique. - use real data instead of dummy data (e.g. a, b, c, ...) for demo screenshot. (It's more realistic) - add 'what merit we will get' instead of 'what features we will get' to introduction document. - add 'how to become a test junkie from a test amateur' to document. 2009-10-28 Kouhei Sutou * cutter/cut-utils.c, test/test-cut-utils.c: add shorten mark (...) to inspected memory. * cutter/cut-utils.c: don't inspect all data for huge data. (>= 1024 bytes) 2009-10-27 Kouhei Sutou * gcutter/gcut-string-io-channel.c: check only requested conditions' availability. * cutter/cut-public.h: move fallback PR* to ... * cutter/cut-assertions-helper.c: ... here to use GLib macros. * cutter/cut-assertions.h: - fix document - remove optional user message argument. * configure.ac, cutter/cut-assertions.h: put C99 stdint availability to cut-features.h and use it because Cutter users doesn't include config.h. They only use cut-features.h. 2009-10-27 Yuto Hayamizu * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch] : add cut_assert_equal_int*, cut_assert_not_equal_int* * configure.ac: check existence of inttypes.h for format specifiers of various int types. * cutter/cut-public.h : include inttypes.h or stdint.h. * configure.ac: check existence of stdint.h. * test/cutter/test-cut-assertions.c : add tests for cut_assert_equal_int* and cut_assert_not_equal_int*. 2009-10-25 Kouhei Sutou * test/cppcutter/test-cppcut-assertions.cpp: use format macro for environment dependent type. * cppcutter/cppcut-assertions-helper.{cpp,h}, test/cppcutter/test-cppcut-assertions.cpp: support long long. * test/cppcutter/test-cppcut-assertions.cpp: work on 32bit environment. * cutter/cut-helper.h, cppcutter/cppcut-assertions.h: use # instead of CUT_STRINGIFY because CUT_STRINGIFY expands macro unexpectedly. * cppcutter/cppcut-assertions-helper.cpp: remove needless variables. * gst-plugins/Makefile.am: $(no_undefined) -> -no-undefined. * gst-plugins/Makefile.am: remove needless variables. * doc/Makefile.am (SUFFIXES): SUFFIXES is a variable not target. 2009-10-23 Kouhei Sutou * test/cppcutter/test-cppcut-assertions.cpp: pend cut::assert_equal(float expected, float actual, float error) because it doesn't match cppcut_assert_equal() signature. Need better API idea. * cppcutter/cppcut-assertions-helper.[cpp,h], test/cppcutter/test-cppcut-assertions.cpp (cut::assert_equal()): support long and unsigned long literal. * cppcutter/cppcut-assertions-helper.[cpp,h], test/cppcutter/test-cppcut-assertions.cpp (cut::assert_equal()): support int, unsigned int and char * literal. 2009-10-20 Kouhei Sutou * test/cppcutter/Makefile.am (noinst_LTLIBRARIES): add missing GLib dependency. * doc/install-*: update. * Makefile.am (release): add .zip. * misc/release.rb: follow the recent SF.net changes. * configure.ac: 1.0.9 -> 1.1.0. * m4macros/cutter.m4: guard duplicated cutter check. * NEWS*/, html/index.html*, debian/changelog, rpm/fedora/cutter.spec.in: 10-19 -> 10-20. * m4macros/cutter.m4: cutterpp -> cppcutter. 2009-10-19 Kouhei Sutou * apt/Makefile: parameterize architectures and code names. * rpm/fedora/cutter.spec.in (BuildRequires): add g++. * Makefile.am: add rpms to release files. * debian/rules (DEB_INSTALL_DIRS_libcutter-cpp-dev): add. * debian/control, debian/rules: include CppCutter. * apt/build-deb.sh, apt/Makefile: 1.0.8 -> 1.0.9. * cutter/cut-mach-o-loader.c: support 64bit environment. * sample/glib/keyfile.c (test_locale_string): dup returned string by setlocale(). * cutter/cut-mach-o-loader.c: initialize variables as NULL. * debian/changelog, rpm/fedora/cutter.spec.in, html/index.html*, doc/reference/header*.html: 1.0.8 -> 1.0.9. * NEWS*: add 1.0.9 entry. * doc/reference/: update. * cutter/cut-helper.h, cppcutter/cppcutter.h, cppcutter/cppcut-assertions.h: fix documents. * doc/cut-diff.rd*: add documents for cut-diff. * cutter/cut-diff.c: fix a typo. * cutter/cut-differ.[ch], cutter/cut-readable-differ.c, cutter/cut-colorize-differ.c: show more difference in colorized mode. * ./: Cutter++ -> CppCutter. 2009-10-18 Kouhei Sutou * doc/reference/: add Cutter++. * cutter++/cutter++.h, test/cutter++/test-cut++-assertions.cpp: add CUTPP_BEGIN_TEST_DECLS and CUTPP_END_TEST_DECLS. * m4macros/cutter.m4: add AC_CHECK_CUTTERPP. * cutter++/, test/cutter++/, test/lib/: support C++: Cutter++. 2009-10-17 Kouhei Sutou * cutter/cut-differ.c (cut_differ_need_diff): check line's replaced ratio. 2009-10-13 Kouhei Sutou * misc/release.rb: force go to my page. * misc/release.rb: fix login success keyword. 2009-10-12 Kouhei Sutou * cutter/cut-diff-writer.h: improve diff writer tag names. * cutter/cut-*diff*.[ch], module/ui/cut-console-ui.c: follow the above change. * cutter/cut-diff.c: support unified diff by -u option. * cutter/cut-public.h, cutter/cut-unified-differ.[ch], test/cutter/test-cut-unified-differ.c: support label customize. * cutter/cut-unified-differ.[ch], test/cutter/test-cut-unified-differ.c, cutter/cut-public.h: support unified diff. * cutter/cut-diff-writer.[ch]: cut_diff_writer_mark_*() doesn't put " " but get separator parameter. * cutter/cut-*-differ.[ch], cutter/cut-*-diff-writer.c: follow the above change. * cutter/cut-sequence-matcher.[ch], test/cutter/test-cut-sequence-matcher.c: implement cut_sequence_matcher_get_grouped_operations(). 2009-10-11 Kouhei Sutou * cutter/cut-diff-writer.[ch] (cut_diff_writer_mark_line): add. * cutter/cut-diff.c: add. * cutter/cut-main.[ch]: split environment init/quit functions. * cutter/cut-console-diff-writer.[ch]: make color customizable. * module/ui/cut-console-ui.c: invert default diff colors. * cutter/cut-console-color-diff-writer.[ch]: rename to ... * cutter/cut-console-diff-writer.[ch]: ... them and use-color is parameterized. * cutter/cut-console-colors.h, module/ui/cut-console-ui-factory.c: move color related functions to ... * cutter/cut-console.[ch]: ... here. * module/ui/cut-console-ui.c: move console color diff writer to ... * cutter/cut-console-color-diff-writer.[ch]: ... here. * cutter/cut-diff.[ch]: rename to ... * cutter/cut-differ.[ch]: ... them. * module/ui/cut-console-ui.c: create a console colorized diff writer. * cutter/cut-colorize-differ.c: add missing write commands. * cutter/cut-diff.[ch]: cache sequence matcher. * cutter/cut-readable-differ.c: use cached sequence matcher. * cutter/cut-string-diff-writer.h: fix typos. * cutter/cut-diff.[ch], cutter/cut-readable-differ.c: make non-common function static. * cutter/cut-differ-*: rename to ... * cutter/cut-*-differ: ... them. * cutter/, modules/, test/: follow the above change. * test/cutter/test-cutter.c: follow --stop-before-test option change. * cutter/cut-diff.[ch], cutter/cut-differ-*: split write operations to ... * cutter/cut-diff-writer.[ch], cutter/cut-string-diff-writer.[ch]: ... writer object. * doc/cutter.rd*: add --stop-before-test. * README*: update Yoshinori K. Okuji entry for suggesting --stop-before-test feature. * cutter/cut-main.c: update messages. * cutter/cut-main.c: add --stop-before-test option that sets breakpoints before invoking each test. * cutter/cut-test.c, cutter/cut-iterated-test.c: set breakpoint before invoking test. * cutter/cut-run-context.c: keep stop-before-test option value. 2009-10-02 Kouhei Sutou * cutter/cut-test-context.c, cutter/cut-public.h (cut_test_context_check_optional_assertion_message): remove needless message argument. * cutter/cut-assertions-helper.h (cut_set_message_backward_compatibility): remove invalid __VA_ARGS__. * cutter/cut-repository.c (compute_relative_path): add length check. 2009-10-01 Hiroyuki Ikezoe * Use AM_SILENT_RULES instead of shave. By default, --enable-silent-rules is enabled, if you want to disable this temporarily, use make V=1. 2009-10-01 Kouhei Sutou * vcc/cutter.vcproj: add cut-differ-readable.[ch] and cut-differ-colorize.[ch]. * gcutter/gcut-string-io-channel.c: add explicit gsize cast. * vcc/: sync. * test/cutter/test-cut-differ-readable.c: remove needless prototype declaration. * gcutter/gcut-string-io-channel.c: use gint64 for offset. * cutter/cut-utils.c: use _close() instead of close() on Windows. * cutter/cut-ui-factory-builder.c: remove needless const. * cutter/cut-stream-factory-builder.c: remove needless const. * cutter/cut-diff.c (cut_differ_util_append_with_tag): fix wrong type. 2009-09-28 Kouhei Sutou * module/ui/cut-console-ui.c (print_result_detail): don't colorize user and system messages. * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c, test/cutter/test-cut-test-iterator.c: cut_assert_equal_int(), cut_assert_not_equal_int(), cut_assert_equal_uint(), cut_assert_not_equal_uint(), cut_assert_equal_size() and cut_assert_not_equal_size() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c: cut_assert_null_string() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/cut-test-result.c (cut_test_result_set_expected) (cut_test_result_set_actual): accept empty string. * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c: cut_assert_equal_boolean() and cut_assert_not_equal_boolean() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/cut-differ-colorize.c (diff_line): show in one line if any replaced character exists. 2009-09-27 Kouhei Sutou * cutter/cut-diff.h, cutter-cut-public.h, cut-differ-readable.[ch]: add 'readable' to readable diff related functions. * cutter/cut-test-result.c, cutter/cut-utils.c, test/lib/cuttest-assertions.c, test/cutter/test-cut-diff.c, test/cutter/test-cut-differ-readable.c: follow the above change. * cutter/cut-differ-colorize.c: swap colors of inserted and deleted. * cutter/cut-differ-colorize.c, module/ui/cut-console-ui.c: move color definitions to ... * cutter/cut-console-colors.h: ... here. * module/ui/cut-console-ui.c: use CutDifferColorize. * module/ui/cut-console-ui.c: move colorized diff features to ... * cutter/cut-differ-colorize.[ch]: ... here. * cutter/cut-diff.c: move CutDifferReadable to ... * cutter/cut-differ-readable.[ch]: ... here. * doc/reference/ja.po: fix a typo. * doc/reference/cutter-overrides.txt: add cut_set_expected() and cut_set_actual(). * cutter/cut-test-utils.h: move helper functions for writing assertions to ... * cutter/cut-helper.h: ... here. * gcutter/gcut-assertions.h: remove needless descriptions. * doc/reference/cutter-docs.sgml: add symbol index added at 1.0.9. * doc/reference/ja.po: update messages. * module/ui/cut-console-ui.c: don't show folded diff with colorization. * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_pid() and gcut_assert_not_equal_pid() use cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_object() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_flags() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_enum() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_error() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list_hash_table_string_string() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list_hash_table() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list_object() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list_flags() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list_enum() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list_uint() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list_int() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_type() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_value() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c: cut_assert_equal_memory() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c: cut_assert_equal_string_array() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * module/ui/cut-console-ui.c: add "colorize" instruction modifier. 2009-09-24 Kouhei Sutou * cutter/cut-test-result.c: add max diff size limit. * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c: cut_assert_equal_memory() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c: cut_assert_equal_not_substring() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * test/lib/cuttest-assertions.c (cuttest_result_string_list_new_va_list): support diff. * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c: cut_assert_equal_substring() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * cutter/cut-assertions-helper.c, test/cutter/test-cut-assertions.c: cut_assert_not_equal_string() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * gcutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: gcut_assert_equal_list_string() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * module/ui/cut-console-ui.c: don't show folded diff on colorize mode. 2009-09-23 Kouhei Sutou * test/cutter/test-cut-test-context.c: follow cut_assert_test_result_with_message() signature change. * module/ui/cut-console-ui.c: fix diff colorization. dirty... * module/ui/cut-console-ui.c: colorize diff. * module/ui/cut-console-ui.c: colorize more finely. * test/lib/cuttest-assertions.c: support message generation with expected and actual. * cutter/cut-assertions-helper.c, cutter/cut-assertions-helper.c: cut_assert_equal_string() uses cut_set_expected() and cut_set_actual() instead of cut_append_diff(). * test/lib/cuttest-assertions.[ch]: support expected and actual. * test/: follow the above changes. * cutter/cut-test-context.c, cutter/cut-public.h, cutter/cut-test-utils.h: test context has expected and actual and pass them to test result. cut_append_diff() is deprecated. use cut_set_expected() and cut_set_actual() instead. * cutter/cut-test-result.c, test/cutter/test-cut-test-result.c: generated message includes expected, actual and diff. * cutter/cut-macros.h: add CUT_STRINGIFY. * cutter/cut-helper.h: use CUT_STRINGIFY. * cutter/cut-test-result.[ch], test/cutter/test-cut-test-result.c: add fields that hold expected, actual and diff information. * soupcutter/soupcut-assertions-helper.c, test/soupcutter/test-soupcut-assertions.c: add missing new line of soupcut_client_assert_response(). * test/soupcutter/test-soupcut-client.c: cleanup. * doc/Makefile.am (install-data-local): use jman instead of cutter.jman. * misc/release.rb: require project ID (project user name). * Makefile.am, configure.ac: follow the misc/release.rb change. 2009-09-01 Kouhei Sutou * test/cutter/test-cut-utils.c (test_compare_direct): fix a strange test. * test/cutter/test-cutter.c (test_help_all): check whether --pdf-report is available or not. * gcutter/gcut-assertions-helper.c, test/gcutter/test-gcut-assertions.c: sort direct and string key automatically. * gcutter/gcut-hash-table.c: use cut_utils_compare_string(). * cutter/cut-utils.[ch], test/cutter/test-cut-utils.c: add cut_utils_compare_string() and cut_utils_compare_direct(). * gcutter/gcut-hash-table.[ch] (gcut_hash_table_inspect_sorted): add and use it in gcut_hash_table_string_string_inspect(). * README*, cutter/cut-test-result.c, cutter/cut-test.c, cutter/cut-utils.[ch]: use '.' not ',' for string elapsed format to work with locale independent. Reported by Yoshinori K. Okuji. Thanks!!! * test/cutter/test-cut-assertions.c: use %g for double value to avoid locale depended error. Reported by Yoshinori K. Okuji. Thanks!!! 2009-08-29 Yuto Hayamizu * doc/Makefile.am (install-data-local): use mkdir_p instead of MKDIR_P. It seems that MKDIR_P is not defined with autoconf 2.61 and automake 1.9.6 2009-08-28 Yuto Hayamizu * html/index.html: fixed typo "a Unit" -> "an Unit" 2009-08-28 Kouhei Sutou * configure.ac: add --disable-goffice for Win32. * autogen.sh, configure.ac, Makefile.am: put generated .m4 into different directory. 2009-08-27 Kouhei Sutou * rpm/fedora/cutter.spec.in: add libsoup dependency. * debian/control (Depends): add missing libcutter-soup-dev dependency to cutter-testing-framework. * autogen.sh: add missing "-I m4macros" aclocal args. * apt/: use separated pool directory for each code name. * apt/Makefile (build): collect built packages. * NEWS*: add release-1-0-8 anchor. * html/: improve sidebar style. * html/index.html.ja: fix a typo. 2009-08-26 Kouhei Sutou * debian/control, apt/build-deb.sh: add a missing dependency. * apt/Makefile (build): add. * apt/debian/: add lenny support. * apt/build-deb.sh: consider libgoffice-0-6. * apt/build-deb.sh: add a script to build .deb. * autogen.sh: fix order. 2009-08-26 Yuto Hayamizu * configure.ac: 1.0.8 -> 1.0.9 2009-08-25 Yuto Hayamizu * NEWS*: add soupcut_server_take * doc/reference/ja.po: docs of soupcut_server_take * soupcutter/soupcut-server.[ch] (soupcut_server_take): add 2009-08-24 Yuto Hayamizu * NEWS.ja: fixed typo * NEWS: translated 2009-08-24 Kouhei Sutou * Makefile.am (release): follow the misc/release.rb changes. * test/soupcutter/Makefile.am: remove a needless dependency. 2009-08-24 Yuto Hayamizu * NEWS.ja: wrote news for 1.0.8 * html/index.html*, doc/install-to-*, README*: changed version number 1.0.7 -> 1.0.8 * doc/reference/ja.po, soupcutter/soupcut-client.h: fix docs of soupcut-client * debian/control, debian/rules: add libcutter-soup-dev * doc/reference/ja.po: wrote docs for soupcut-client * soupcutter/soupcut-client.h: wrote docs * doc/reference/ja.po: wrote docs for soupcut-server * soupcutter/soupcut-server.h: fix docs * doc/reference/cutter-docs.sgml: add soupcut-server * soupcutter/soupcut-server.h: wrote docs * soupcutter/soupcut-assertions.h: fix type in docs * test/soupcutter/test-soupcut-assertions.c, test/soupcutter/test-soupcut-client.c: use soupcut-server instead of cuttest-soup * test/soupcutter/test-soupcut-server.c: add for soupcut-server * soupcutter/soupcut-server.[ch]: renamed from test/lib/cuttest-soup.[ch] 2009-08-23 Kouhei Sutou * test/cutter/test-cutter.c: GLib >= 2.21 shows '-h' as short name of '--help' not '-?' when '-h' doesn't exist in other short name. * doc/reference/ja.po: update. * doc/reference/overrides.txt: show SoupCutter assertions as function. 2009-08-22 Kouhei Sutou * doc/reference/cutter-docs.sgml: add SoupCutClient. * soupcutter/soupcut-assertions-helper.[ch], test/soupcutter/test-soupcut-assertions.c: cleanup. * soupcutter/soupcut-client.[ch]: - cleanup - fix memory leaks. * doc/reference/ja.po: update. * soupcutter/*.h, gcutter/gcut-hash-table.h: fix documentations. * doc/reference/cutter-docs.sgml: add an index of new symbols in 1.0.8. * doc/reference/Makefile.am: support build in different directory. * doc/reference/Makefile.am: update file names. 2009-08-21 Yuto Hayamizu * test/soupcutter/test-soupcut-assertions.c (test_client_match_body): add an test for soupcut_client_assert_match_body. * soupcutter/soupcut-assertions.h (soupcut_client_assert_match_body): add. * soupcutter/soupcut-assertions-helper.[ch] (soupcut_client_assert_match_body_helper): add for soupcut_client_assert_match_body. * test/soupcutter/test-soupcut-client.c (test_get_query): add. * test/gcutter/test-gcut-hash-table.c: add an test for gcut_hash_table_string_string_copy * gcutter/gcut-hash-table.[ch] (gcut_hash_table_string_string_copy): add. * test/soupcutter/test-soupcut-client.c (test_set_base): add some test. 2009-08-21 Kouhei Sutou * doc/reference/Makefile.am: fix a typo. * soupcutter/soupcut-client.h: add description. * Makefile.am (update-po): add soupcutter. 2009-08-21 Yuto Hayamizu * test/soupcutter/test-soupcut-client.c: add tests for set_base. * soupcutter/soupcut-client.c (soupcut_client_set_base): add. * m4macros/cutter.m4 (AC_CHECK_SOUPCUTTER): add. 2009-08-21 Kouhei Sutou * doc/reference/: add SoupCutter to document. * soupcutter/soupcutter.h: fix document. 2009-08-21 Yuto Hayamizu * Makefile.am: install soupcutter.pc. * configure.ac, soupcutter.pc.in: SoupCutter support .pc. * soupcutter/soupcut-assertions-helper.c (soupcut_message_get_content_type): replaced soup_..._get_content_type 2009-08-2 Kouhei Sutou * test/soupcutter/test-soupcut-assertions.c: cleanup. * test/soupcutter/test-soupcut-client.c: cleanup. * test/soupcutter/suite-soupcut-test.c: initialize SOUP_URI_SCHEME_HTTP*. * autogen.sh: fix command order. * cutter/cut-loader.c, gst-plugins/test/dummy-test-functions.c, test/cutter/test-cut-loader.c, test/fixtures/loader/fixture/all.c, test/fixtures/loader/fixture/without-prefix.c: follow the startup/shutdown removing. 2009-08-20 Yuto Hayamizu * test/soupcutter/test-soupcut-client.c (test_send_message): rename (test_get): add * soupcutter/soupcut-client.[ch] (soupcut_client_get): add * soupcutter/soupcut-assertions-helper.c (soupcut_test_fail_null_message): add * test/soupcutter/test-soupcut-assertions.c (test_client_equal_content_type_null, test_client_equal_body_null): add * test/soupcutter/test-soupcut-assertions.c: add * soupcutter/soupcut-assertions.h (soupcut_client_assert_equal_body): add * soupcutter/soupcut-assertions-helper.[ch] (soupcut_client_assert_equal_body_helper): add * test/soupcutter/test-soupcut-assertions.c (test_client_response): add * soupcutter/soupcut-assertions.h (soupcut_client_assert_response): add * soupcutter/soupcut-assertions-helper.[ch] (soupcut_client_assert_response_helper): add 2009-08-20 Kouhei Sutou * cutter/cutter.h (startup, shutdown): remove [INCOMPATIBLE]. * test/lib/cuttest-soup.[ch]: add. * test/soupcutter/test-soupcut-assertions.c, test/soupcutter/test-soupcut-client.c: use convenient functions. * test/soupcutter/test-soupcut-assertions.c, test/soupcutter/test-soupcut-client.c: don't use thread. * soupcutter/soupcut-client.[ch]: export GMainContext. * test/soupcutter/test-soupcut-assertions.c, test/soupcutter/test-soupcut-client.c: use SoupAddress. * soupcutter/soupcut-client.c: cleanup. 2009-08-20 Kouhei Sutou * gcutter/gcut-inspect.h: fix a typo. 2009-08-20 Yuto Hayamizu * test/soupcutter/test-soupcut-client.c (test_request): unref server * test/soupcutter/test-soupcut-assertions.c: add * soupcutter/soupcut-assertions-helper.[ch] (soupcut_client_assert_equal_content_type_helper): add * soupcutter/soupcut-assertions.h (soupcut_client_assert_equal_content_type): add * test/soupcutter/test-soupcut-assertions.c, soupcutter/soupcut-assertions-helper.h, soupcutter/soupcut-assertions-helper.c, soupcutter/soupcut-assertions.h: renamed soupcut_assert_equal_content_type -> soupcut_message_assert_equal_content_type * test/soupcutter/test-soupcut-client.c (test_request): work with mock server * soupcutter/soupcut-client.c (soupcut_client_send_message): now that it actually send messages 2009-08-19 Yuto Hayamizu * soupcutter/soupcut-client.c (soupcut_client_send_message) (soupcut_client_get_n_messages) (soupcut_client_get_latest_message): implemented. * test/soupcutter/test-soupcut-client.c: add * soupcutter/soupcutter.h: add include * soupcutter/soupcut-client.h: add * soupcutter/soupcut-client.c: add * soupcutter/Makefile.am: add new files * soupcutter/soupcut-assertions-helper.c: add an include file * soupcutter/soupcut-assertions.h, soupcutter/soupcut-assertions-helper.h: extracted from ... * soupcutter/soupcutter.h: ... here. * test/soupcutter/: add * soupcutter/: add * configure.ac: add libsoup. 2009-08-18 Kouhei Sutou * configure.ac: fix a typo. 2009-08-14 Kouhei Sutou * misc/rd2refentry-lib.rb: accept local anchor. * cutter/cut-process.c (cut_process_init): suppress a warning. * cutter/cut-pe-loader.c: check symbol is function or not by .text. * configure.ac, cutter/cut-pe-loader.c, vcc/include/config.h: check windows.h not winnt.h. * cutter/cut-pe-loader.c: use e_lfanew not e_lfarlc. 2009-08-12 Kouhei Sutou * m4macros/cutter.m4: support lcov 1.7. * misc/release.rb: 'Project Name' -> 'project-name' for SF.net project UNIX name. 2009-07-26 Kouhei Sutou * misc/release.rb: follow the recent SF.net change. 2009-07-07 Kouhei Sutou * configure.ac: don't require GTK+ for autogen.sh. 2009-07-03 Kouhei Sutou * misc/release.rb: follow the recent SF.net changes. 2009-07-02 Kouhei Sutou * misc/rd-visitor-util.rb: remove needless spaces after newline. * USERS*: add mroonga. * misc/rd2refentry-lib.rb: support naming term and referencing to term. 2009-06-26 Kouhei Sutou * cutter/cut-mach-o-loader.c: cleanup. * cutter/cut-mach-o-loader.c: use defined section to detect symbols for public function in Mach-O. 2009-06-24 Kouhei Sutou * cutter/cut-mach-o-loader.c: cleanup. 2009-06-19 Kouhei Sutou * gcutter/gcut-string-io-channel.c: add error check. 2009-06-09 Kouhei Sutou * cutter/cut-test-context.c: don't call destroy function for NULL. * test/gcutter/test-gcut-list.c: add tests for gcut_list_*_string(). 2009-06-07 Kouhei Sutou * apt/ubuntu: universe -> main. * apt/Makefile (download): add. * configure.ac, doc/Makefile.am, doc/reference/Makefile.am: use detected Ruby. * misc/rd2refentry-lib.rb, misc/rd-visitor-util.rb: share remove_newline. * misc/misc/rd2man-lib.rb: use remove_newline. * misc/rd-visitor-util.rb: fix removable newline detection. 2009-06-05 Kouhei Sutou * misc/rd2refentry-lib.rb: support RT. * misc/rd2refentry-lib.rb: remomve needless newline. * misc/rd2refentry-lib.rb: support anchor on headline. 2009-06-04 Kouhei Sutou * apt/ubuntu/: support hardy i386. 2009-06-03 Kouhei Sutou * html/index.html*: fix description. 2009-06-02 Kouhei Sutou * doc/install-to-{debian,ubuntu}.rd: fix typos. * misc/prepare-gtk-doc-html-for-publishing.rb: support --suffix. 2009-05-25 Kouhei Sutou * doc/reference/cutter-docs.sgml, doc/reference/Makefile.am: include install document for Solaris. * doc/install-to-solaris.rd: add. * doc/install-to-solaris.rd.ja: complete. Assisted by UNNO Hideyuki. Thanks!!! 2009-05-24 Kouhei Sutou * misc/rd2refentry-lib.rb: support variable markup. * configure.ac: use AC_PATH_PROG instead of AC_CHECK_PROG. * doc/Makefile.am (install-data-local): don't install cutter.jman on unavailable environment. 2009-05-23 Kouhei Sutou * misc/generate-def.rb: collect missing function names. * cutter/Makefile.am: add cut-enum-types.h to public headers. * cutter/cut-module-impl.h: add missing G_MODULE_EXPORT. * cutter/main.c: use return instead of exit. * cutter/cut-test-context.h, cutter/cut-module-factory.h: remove needless declarations. * misc/generate-def.rb: add. * vcc/resource/: add. * vcc/: add auto-generated files. * configure.ac, doc/Makefile.am, doc/reference/Makefile.am, gtk-doc.make: work with different build directory. * cutter/cutter.h (shutdown): guard shutdown() on Windows. * cutter/cut-test.c: remove needless return. * cutter/cut-pipeline.c: use g_ functions. * cutter/cut-process.c: pid_t isn't available on Windows. * cutter/cut-iterated-test.c: remove needless return. * doc/install-to-mac-os-x.rd*: add. * doc/install-to-others.rd*, doc/reference/Makefile.am, doc/reference/cutter-docs.sgml, html/index.html*: add install document for Mac OS X. * doc/install-to-fedora.rd*: add. * doc/install-to-others.rd*, doc/reference/Makefile.am, doc/reference/cutter-docs.sgml, html/index.html*: add install document for Fedora. * doc/install-to-freebsd.rd*: add. * doc/install-to-others.rd*, doc/reference/Makefile.am, doc/reference/cutter-docs.sgml, html/index.html*: add install document for FreeBSD. * test/run-test.sh: work with *BSD. * doc/install-to-solaris.rd.ja: add but not completed yet. * doc/reference/Makefile.am: add missing ubuntu rules. * test/run-test.sh: work with standard /bin/sh. * doc/install-to-ubuntu.rd*: add. * doc/reference/cutter-docs.sgml: add installation for Ubuntu. * html/index.html*: add more Cutter information. * html/cutter.css: add a style for command line. * cutter/cut-elf-loader.c (cut_elf_loader_collect_symbols): use ELF32_ST_BIND() for ELF32. 2009-05-21 Kouhei Sutou * Makefile.am (SUBDIRS): add missing license/. 2009-05-21 Kouhei Sutou * license/lgpl.txt: add. * README*: LGPL v3+. * rpm/fedora/cutter.spec.in: add. * apt/debian/: support sid/i386. * test/cutter/test-cut-test-case.c: add missing "#include ". * cutter/cut-test-iterator.c, cutter/cut-test-case.c: add missing "#include ". * debian/control (Section): fix documentation section. * debian/changelog: 1.0.7-0 -> 1.0.7-1. * debian/compat: 7 -> 6. * html/index.html*: add a link to change log. * debian/control: remove a dependency to binutils-dev. * debian/rules (install/cutter-bin): fix a typo. 2009-05-20 Kouhei Sutou * html/index.html*: fill 1.0.7 release date. * configure.ac: 1.0.7 -> 1.0.8. * debian/changelog: add an entry for 1.0.7. * cutter/cut-process.c, cutter/cut-pipeline.c: check HAVE_IO_H before HAVE_UNISTD_H. * NEWS.*: - update shared object parsing. - add install document. - add tutorial notes. - add --disable-signal-handling. 2009-05-15 Kouhei Sutou * cutter/cut-pipeline.c: support RunContext::handle-signals property. * doc/cutter.rd*: add a description about --disable-signal-handling option. * cutter/cut-main.c, test/cutter/test-cutter.c: add --disable-signal-handling option. * cutter/cut-test-case.c, cutter/cut-test-iterator.c, cutter/cut-test-suite.c, cutter/cut-test.c: support dynamic signal handling disable. * cutter/cut-run-context.[ch], cutter/cut-run-context.ctest/cutter/test-cut-run-context.c: add signal handling configuration. * test/run-test.sh: set DYLD_LIBRARY_PATH on MacOS X. * README*, doc/, html/: add install documents. 2009-05-14 Kouhei Sutou * apt/{debian,ubuntu}/dists/.htaccess: enable indexes. * sample/stack/test/run-test.sh: add src/.libs to PATH on Cygwin. * TUTORIAL*: add notes for Cygwin environment. * README*: add Yamakawa Hiroshi to Thanks list. Thanks!!! * TUTORIAL*, sample/stack/Makefile.am (ACLOCAL_AMFLAGS): use ACLOCAL_ARGS environment variable with aclocal invoked via make. * Makefile.am (ACLOCAL_AMFLAGS): use ACLOCAL_OPTIONS environment variable. * test/run-test.sh: add PATH on Cygwin. * configure.ac: disable BFD detection by default. 2009-05-14 Kouhei Sutou * cutter/cut-pipeline.c, cutter/cut-process.c: use _pipe() in io.h only when unistd.h doesn't exist. 2009-05-14 Kouhei Sutou * TODO: remove: use imagehlp.h on Windows. * configure.ac, cutter/Makefile.am, cutter/cut-image-hlp-loader.[ch], cutter/cut-pe-loader.[ch]: image-hlp -> pe. 2009-05-13 Kouhei Sutou * configure.ac, cutter/Makefile.am, cutter/cut-image-hlp-loader.c: support PE COFF parsing without imagehlp. 2009-05-12 Kouhei Sutou * configure.ac, cutter/Makefile.am: libelf.h isn't needed. * configure.ac, cutter/Makefile.am: detect libelf.h. (just only detect) * configure.ac: use AC_CHECK_HEADERS instead of AC_CHECK_HEADER. * cutter/cutter.h: fix inverted condition. 2009-05-12 Kouhei Sutou * cutter/cut-elf-loader.c, cutter/cut-mach-o-loader.c: don't report magic mismatch. * configure.ac, cutter/cut-loader.c, cutter/cut-elf-loader.[ch]: support ELF parsing with elf.h. 2009-05-12 Kouhei Sutou * cutter/cut-mach-o-loader.c: buildable! 2009-05-11 Kouhei Sutou * TODO: remove: use mach-o/loader.h on Mac OS X. * cutter/cut-mach-o-loader.c: support Mach-O parsing on 64bit. (maybe work) * cutter/cut-mach-o-loader.c: support Mach-O parsing on 32bit. 2009-05-10 Kouhei Sutou * cutter/cut-mach-o-loader.c: just make buildable. not work. * NEWS*: add an entry for 1.0.7. * doc/reference/cutter-overrides.txt: add declaration for macros. * doc/reference/ja.po: update translations. * configure.ac, cutter/Makefile.am, cutter/cut-image-hlp-loader.[ch], cutter/cut-loader.c: add ImageHlp support. maybe work. need to check on Windows. Wine doesn't support ImageHlp (DebugHlp) yet. 2009-05-09 Kouhei Sutou * TODO: remove: cut_assert_equal_not_{int,string,...}(). * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], test/cutter/test-cut-assertions.c: add cut_assert_not_equal_string(), cut_assert_not_equal_substring() and cut_assert_not_equal_memory(). * cutter/cut-assertions.h: add examples for cut_assert_equal_boolean() and cut_assert_not_equal_boolean(). * test/gcutter/test-gcut-assertions.c (test_equal_pid): add missing "(GPid)". * TODO: remove: cut_assert_equal_boolean(). * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], test/cutter/test-cut-assertions.c: add cut_assert_equal_boolean() and cut_assert_not_equal_boolean(). 2009-05-05 Kouhei Sutou * USERS*: use sourceforge.net instead of sf.net. * html/index.html*, doc/reference/header*.html: use reference/ for Reference link instead of reference/reference.html. * html/cutter.css: improve spaces. * misc/prepare-gtk-doc-html-for-publishing.rb: support site title injection. * misc/Makefile.am (dist_noinst_SCRIPTS): update. * html/logo.*: update. * html/cutter.css: follow the logo size change. 2009-05-04 Kouhei Sutou * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], test/cutter/test-cut-assertions.c: add cut_assert_not_equal_double(). * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], test/cutter/test-cut-assertions.c: add cut_assert_not_equal_size(). * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], test/cutter/test-cut-assertions.c: add cut_assert_not_equal_uint(). * test/gcutter/test-gcut-assertions.c: cast to GPid. * test/cutter/test-cut-test-case.c: add missing ifdef G_OS_WIN32. * test/gcutter/test-gcut-egg.c (test_hatch): use gcut_assert_not_equal_pid(). * test/cutter/test-cut-assertions.c (test_equal_int): test failure case. * gcutter/gcut-assertions.h, gcutter/gcut-assertions-helper.[ch], test/gcutter/test-gcut-assertions.c: add gcut_assert_not_equal_pid(). * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], test/cutter/test-cut-assertions.c: add cut_assert_not_equal_int(). * test/cutter/test-cut-test.c: add missing ifdef G_OS_WIN32. * cutter/cut-crash-backtrace.c, cutter/cut-test.c, cutter/cut-test-case.c, cutter/cut-test-suite.c, test/cutter/test-cut-test-case.c: treat SIGTERM as crash signal too. * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], cutter/cut-public.h, cutter/cut-utils.c, test/cutter/test-cut-assertions.c, test/cutter/test-cut-utils.c: add cut_assert_equal_substring(). * misc/rd2man-lib.rb: markup variable as italic. 2009-05-03 Kouhei Sutou * cutter/cut-crash-backtrace.c (read_backtrace): don't use regexp. * cutter/cut-test.c, cutter/cut-test-case.c: disable crash report for each test and test case on multi thread mode. * TODO: add: cut_assert_equal_not_{int,string,...}(). * TODO: remove: more intelligent crashed reporting. - get the latest unfinished test and bundle it into crashed reporting. - CutRunContext should have multiple crashed information. * TODO: remove: CUT_RELATIVE_PATH for resoving path of helper shared library like test/lib/cuttest-assertions.c. * TODO: remove: show test name on crash. [1.0.7] MUST for Poppler. * cutter/cut-utils.[ch], test/cutter/test-cut-utils.c: add GDB backtrace parser. * cutter/cut-crash-backtrace.c: use GDB backtrace parser. * doc/cutter.rd*: use " instead of '. * ./: make 'crash' a test result. TODO: need to handle SIGSEGV each test, test iterator and test case. 2009-04-28 Kouhei Sutou * html/index.html*: add a link to ML. 2009-04-21 Kouhei Sutou * doc/reference/cutter-overrides.txt: add types for gcut_assert_equal_enum() and gcut_assert_equal_flags(). 2009-04-20 Kouhei Sutou * USERS.ja: add UNNO-san. 2009-04-19 Kouhei Sutou * cutter/cut-helper.h: pop backtrace of the current test context when it is called not at the time. * test/: use cut_test_context_current_{push,pop}() instead of cut_{set,get}_current_test_context(). * cutter/cut-test-case.c: consider about cut_shutdown() result status too. * cutter/cut-test-case.c, test/cutter/test-cut-test-case.c: emit test case result signal even is cut_startup() stops running test. * cutter/cut-test-case.c, test/cutter/test-cut-test-case.c: support omission in cut_startup(). * test/cutter/test-cut-test-case.c: add tests for {failure,error,pending,notification,omission}-in signal. 2009-04-18 Kouhei Sutou * cutter/cut-run-context.[ch], cutter/cut-test-case.[ch], cutter/cut-test.[ch], cutter/cut-test-runner.c: test context is also available in cut_startup()/cut_shutdown() context. * cutter/cut-test-context.c, cutter/cut-public.h: the current test context is managed as stack. * cutter/cutter.h, cutter/cut-loader.c, cutter/cut-test-iterator.c: follow the above API change. * cutter/cut-test-utils.h, test/cutter/test-cut-test-utils.c: add cut_build_path(). * TODO: add: cut_thread_create(): it pushes the current test context. tests written by user will not case the current test context. 2009-04-16 Kouhei Sutou * cutter/cutter.h: make setup() and teardown() deprecated, use cut_setup() and cut_teardown() instead. Suggested by gunyarakun. Thanks!!! * ./: follow the above changes. 2009-04-12 Kouhei Sutou * cutter/cut-test-result.c, test/cutter/test-cut-test-result.c: treat empty string as NULL. * TODO: add note to "show test name on crash". 2009-04-11 Kouhei Sutou * cutter/cutter.h: deprecate startup() and shutdown(). 2009-04-10 Kouhei Sutou * cutter/cut-loader.c, cutter/cut-main.c: use HAVE_LIBBFD instead of HAVE_BFD_H. * doc/cutter-*.svg: fix size. * cutter/cut-test-suite.c (collect_backtrace): close dupped file descriptor. 2009-04-09 Kouhei Sutou * doc/: add figures that show Cutter's important two features. * debian/rules: add jman. * doc/Makefile.am (install-data-local): support jman installation. 2009-04-09 Kouhei Sutou * cutter/cut-test-suite.c (collect_backtrace): invert. 2009-04-08 Kouhei Sutou * cutter/cut-test-suite.c (collect_backtrace): use dup2(). Reported by UNNO Hideyuki. Thanks!!! 2009-04-07 Kouhei Sutou * README: add UNNO Hideyuki. Thanks!!! * TUTORIAL*: fix a typo. Reported by UNNO Hideyuki. Thanks!!! * html/cutter.css: more space. * html/cutter.css: set overflow to pre. 2009-04-06 Kouhei Sutou * USERS*: add groonga. * doc/reference/header*.html: fix path. * html/cutter.css: remove garbages. * doc/, html/: apply HTML design. * misc/misc/prepare-gtk-doc-html-for-publishing.rb: add. 2009-03-30 Kouhei Sutou * TODO: add: - cut_assert_equal_boolean(). - show test name on crash. 2009-03-24 Kouhei Sutou * apt/*/generate-*.conf: generate Sources too. * apt/**/source/Release: fix Architecture. 2009-03-22 Kouhei Sutou * apt/Makefile (upload): exclude .svn. * debian/dirs: remove a needless file. * README.ja: use direct download URL. 2009-03-22 Hiroyuki Ikezoe * cutter/Makefile.am: Fix parallel make issue. 2009-03-21 Kouhei Sutou * debian/rules: add missing libgdkcutter-pixbuf.*. * doc/Makefile.am (EXTRA_DIST): add missing cutter.rd*. * debian/rules: use DEB_INSTALL_DIRS. * cutter/, test/: don't use '## __VA_ARGS__' to work with non-GCC compilers. * cutter/cut-test-utils.h (cut_remove_path): remove needless argument. * debian/rules: install cutter command documents. * doc/reference/: include cutter command manual page. * README*: move cutter command documents to ... * doc/cutter.rd*: ... here. * doc/Makefile.am: generate man from RD. * cutter/cut-stream-factory-builder.c, test/cutter/test-cutter.c: re-enable --stream-log-directory but it's obsoleted. * cutter/cut-stream-factory-builder.c, module/stream/cut-xml-stream-factory.c, test/cutter/test-cutter.c, test/run-test.sh: --stream-log-directory -> --stream-directory. * apt/: add apt-line provide utilities. * debian/control: fix a typo. 2009-03-19 Kouhei Sutou * misc/rd2refentry-lib.rb: support purpose extraction from man style RD. * misc/rd2man-lib.rb: support language suffix. * misc/rd2refentry-lib.rb: support code markup. * misc/rd2man-lib.rb: fix a too much markup bug. * misc/rd2man-lib.rb: support reference to other file. 2009-03-18 Kouhei Sutou * misc/rd2man-lib.rb: add. 2009-03-16 Kouhei Sutou * html/index.html*: improve description. 2009-03-15 Kouhei Sutou * debian/control: add cutter-testing-framework meta package. * doc/reference/ja.po: fix typos. * debian/rules: remove needless configuration. * debian/control: add missing dependencies. 2009-03-14 Kouhei Sutou * html/index.html*: add more description. 2009-03-10 Kouhei Sutou * misc/release.rb (#extract_sections): support '===' header in section. * misc/release.rb (#go_file_releases_page): follow the recent SF.net change. * html/index.html, html/index.html.ja, doc/reference/sf-logo.html: use new SF.net logo and Piwik. 2009-03-09 Kouhei Sutou * debian/: use cdbs. 2009-03-08 Kouhei Sutou * cutter/cut-version.h.in (CUTTER_CHECK_VERSION): fix typos. * gcutter/gcut-data-helper.[ch], gcutter/gcut-data.h, test/gcutter/test-gcut-test-utils.c: support GBoxed. * gcutter/gcut-dynamic-data.[ch], test/gcutter/test-gcut-dynamic-data.c: support GBoxed. * gcutter/gcut-types.[ch], test/gcutter/test-gcut-types.c: add GCUT_TYPE_ERROR. * cutter/cut-version.h.in (CUTTER_CHECK_VERSION): add. 2009-03-06 Hiroyuki Ikezoe * cutter/cut-assertions-helper.c: FALSE/NULL -> neither FALSE nor NULL. 2009-03-06 Kouhei Sutou * debian/: add. * module/report/Makefile.am (pdf_la_LIBADD): add -lm for cairo. 2009-03-02 Kouhei Sutou * cutter/cut-test-utils.h, doc/reference/cutter-overrides.txt, doc/reference/ja.po: update document. 2009-03-01 Kouhei Sutou * misc/release.rb: email release notify is optional. * configure.ac, **/ja.po: 1.0.6 -> 1.0.7. * configure.ac, html/Makefile.am, doc/reference/Makefile.am: use web.sf.net. * NEWS*: add entries for 1.0.6. * gcutter/gcut-assertions.h: remove needless backward compatibility. * doc/reference/: update document. * USERS*: add Kazehakase and GtkIEEmbed. * gcutter/gcutter.h, gdkcutter-pixbuf/, doc/reference/: add GdkCutter documents. * cutter/, gcutter/, doc/reference/: add missing document. * cutter/cut-assertions.h, gcutter/gcut-data.h, gcutter/gcut-inspect.h, doc/reference/ja.po, doc/reference/cutter-overrides.txt: update document. * gcutter/gcut-egg.[ch], doc/reference/ja.po: update document. 2009-02-28 Kouhei Sutou * gcutter/gcut-egg.h, gcutter/gcut-inspect.h, doc/reference/ja.po: update messages. * gcutter/gcut-egg.h, gcutter/gcut-enum.h, doc/reference/cutter-overrides.txt, doc/reference/ja.po: update messages. * gcutter/gcut-enum.c (gcut_flags_inspect): flags -> flags_value. * gcutter/gcut-assertions.h, gcutter/gcut-assertions-helper.[ch], test/gcutter/test-gcut-assertions.c: g_pid -> pid. 2009-02-27 Kouhei Sutou * gcutter/gcut-assertions.h, gcutter/gcut-enum.[ch], doc/reference/cutter-overrides.txt: fix type declarations. * cutter/cut-helper.h, cutter/cutter.h, doc/reference/cutter-overrides.txt: add missing type declarations. 2009-02-27 Kouhei Sutou * gcutter/gcut-assertions-helper.h: use G_GNUC_NULL_TERMINATED instead of CUT_GNUC_NULL_TERMINATED. 2009-02-26 Hiroyuki Ikezoe * gcutter/gcut-assertions-helper.c: Use g_clear_error instead of g_error_free since to allow NULL check of error for user. 2009-02-25 Kouhei Sutou * gcutter/gcut-egg.[ch]: - add document. - improve API. 2009-02-24 Kouhei Sutou * gcutter/gcut-egg.h: add document. * gcutter/gcut-egg.[ch], test/gcutter/test-gcut-egg.c: add gcut_egg_wait. 2009-02-21 Kouhei Sutou * gcutter/gcut-inspect.h: update document. 2009-02-20 Kouhei Sutou * gcutter/gcut-inspect.h: add document. * gcutter/gcut-data.h, gcutter/gcut-test-utils.h, doc/reference/cutter-docs.sgml: add document for gcut_data_*. 2009-02-20 Kouhei Sutou * gcutter/gcut-data.h: update document. * gcutter/gcutter.h, gcutter/gcut-dynamic-data.[ch], gcutter/gcut-assertions-helper.h: move data related codes to ... * gcutter/gcut-data.[ch], gcutter/gcut-data-helper.h: ... here. 2009-02-19 Kouhei Sutou * gcutter/gcutter.h: add document. * gcutter/, test/gcutter/: gcut_data_get_data_type -> gcut_data_get_type. * gcutter/, test/gcutter/: GCutData -> GCutDynamicData. * gcutter/gcut-list.c (gcut_list_inspect): use GCutInspectFunction. 2009-02-18 Kouhei Sutou * cutter/, gcutter/, doc/reference/: improve document. 2009-02-17 Kouhei Sutou * misc/release.rb (notify_release): support release notice. 2009-02-16 Hiroyuki Ikezoe * cutter/cut-test-case.c (cut_test_case_run_with_filter): Do not invoke cut_test_case_run_tests if no test is available to avoid invoking startup. 2009-02-10 Kouhei Sutou * gcutter/gcut-assertions-helper.h: remove duplicated declaration. 2009-02-06 Kouhei Sutou * misc/release.rb (go_submit_news_page): improve submit news link detection. 2009-02-01 Kouhei Sutou * misc/rd2refentry-lib.rb: use InlineMediaObject instead of InlineGraphic for alt text. 2009-01-26 Kouhei Sutou * test/gcutter/test-gcut-egg.c: include config.h for HAVE_SYS_WAIT_H. 2009-01-26 Hiroyuki Ikezoe * test/cutter/test-cut-value-equal.c -> test/gcutter/test-gcut-value-equal.c: Moved. * gcutter/gcut-value-equal.c: Use g_strcmp0 instead g_str_equal to handle NULL. * test/cutter/test-cut-path.c, test/fixtures/path/parent/sub/test-deep.c: Use G_DIR_SEPARATOR_S. * cutter/cut-test-context.c (cut_test_context_push_backtrace): Convert directory separator in relative_path. 2009-01-23 Hiroyuki Ikezoe * cutter/cutter.h: Declare shutdown if WINSOCK_API_LINKAGE is not defined too. * cutter/cut-utils.c: Include for TerminateProcess. * cutter/cut-utils.c: Use g_win32_get_package_installation_directory_of_module instead of g_win32_get_package_installation_directory since g_win32_get_package_installation_directory is deprecated. * cutter/cutter.h: && not ||. * cutter/cut-utils.c: Include instead of after including . * cutter/cut-utils.c (cut_win32_kill_process): return TRUE or FALSE. * cutter/Makefile.am: Append -mwindows to LDFLASG on win32 environment. * test/gcutter/test-gcut-egg.c: Use HAVE_SYS_WAIT_H. * cutter/Makefile.am: Use top_builddir. * gcutter/gcut-assertions.h, gcutter/gcut-assertions-helper.[ch]: Added gcut_assert_equal_g_pid. * test/gcutter/test-gcut-egg.c: Define WEXITSTATUS and SIGKILL on win32 environment. Use gcut_assert_equal_g_pid instead of cut_assert_equal_int. 2009-01-22 Hiroyuki Ikezoe * cutter/cut-utils.[ch]: Added cut_win32_kill_process(). * gcutter/gcut-egg.c: Use cut_win32_kill_process instead of kill. 2009-01-16 Kouhei Sutou * misc/release.rb: don't use CSS selector. 2009-01-15 Kouhei Sutou * html/index.html{,.ja}: use sourceforge.net not sf.net. 2009-01-07 Kouhei Sutou * cutter/cut-test-utils.h: cut_take_printf() accepts 1 argument. 2009-01-05 Kouhei Sutou * misc/rd2refentry-lib.rb: - don't set footnote ID explicitly. - surround footnote contents by . * misc/Makefile.am: add missing expand-rd2-snippet.rb. * misc/rd2refentry-lib.rb: more generic. * doc/reference/Makefile.am: use --name option. * misc/rd2refentry-lib.rb: show more information on error. 2008-12-30 Kouhei Sutou * test/run-test.sh: improve default make detection. * test/gcutter/test-gcut-egg.c: include missing . 2008-12-29 Kouhei Sutou * gcutter/gcut-enum.[ch], test/gcutter/test-gcut-enum.c: add gcut_flags_get_all(). * gcutter/gcut-test-utils.h, test/gcutter/test-gcut-test-utils.c: add gcut_data_get_pointer(). * gcutter/gcut-data.[ch], test/gcutter/test-gcut-data.c: add gcut_data_get_pointer_with_error(), gcut_data_get_pointer_helper(). * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_pointer(). 2008-12-26 Kouhei Sutou * gcutter/gcut-data.[ch], test/gcutter/test-gcut-data.c, gcutter/gcut-test-utils.h, test/gcut-test-utils.c: GCutData supports int and uint values. * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_uint(). 2008-12-26 Hiroyuki Ikezoe * module/ui/cut-ui-gtk.c: Remove needless cast. 2008-12-25 Kouhei Sutou * misc/release.rb: follow the recent Mechanize changes. 2008-12-22 Kouhei Sutou * module/ui/cut-console-ui-factory.c (guess_color_usability): TERM=linux is color available. 2008-12-19 Kouhei Sutou * cutter/cut-utils.c, test/cutter/test-cut-utils.c: cut_utils_inspect_memory() shows printable characters if needed. 2008-12-18 Kouhei Sutou * misc/expand-rd2-snippet.rb: improve section handling. * misc/expand-rd2-snippet.rb: add. 2008-12-17 Kouhei Sutou * cutter/cutter.h: fix a typo. 2008-12-16 Kouhei Sutou * doc/reference/Makefile.am (MKDB_OPTIONS): remove needless argument. * misc/rd2refentry-lib.rb: support emphasis and footnote. 2008-12-11 Kouhei Sutou * configure.ac (LIBTOOL_EXPORT_OPTIONS), sample/glib/Makefile.am: add -fno-strict-aliasing option to the GThread test because G_TRYLOCK (g_static_mutex_trylock) has strict aliasing problem. * sample/glib/thread.c: use more meaningful assertions. 2008-12-09 Kouhei Sutou * Makefile.am (update-po): remove cut-marshalers.c. * test/cutter/test-cut-assertions.c: cut_assert_g_error() -> gcut_assert_error(). * gcutter/gcut-hash-table.[ch], gcutter/gcut-list.h, gcutter/gcut-object.[ch]: GCutInspectFunc -> GCutInspectFunction. * cutter/cutter.h, cutter/cut-assertions-helper.h: disable ## __VA_ARGS__ codes on CUTTER_DISABLE_DEPRECATED. * gcutter/gcut-test-utils.h (gcut_take_new_list_string): don't use ## __VA__ARGS__. 2008-12-05 Kouhei Sutou * gcutter/gcut-egg.c (gcut_egg_hatch): plug a memory leak. 2008-12-02 Kouhei Sutou * test/cutter/test-cut-process.c: fix include path. * test/lib/Makefile.am (AM_CFLAGS): add missing '\'. * cutter/cut-utils.[ch] (cut_utils_regex_replace): add. * cutter/cut-test-utils.[ch], test/cutter/test-cut-test-utils.c: add cut_take_replace(). * cutter/cut-types.h (CutCallbackFunction): add. * gcutter/gcut-data.[ch]: use CutCallbackFunction. * gcutter/gcut-data.[ch] (gcut_pop_backtrace): move to ... * cutter/cut-helper.[ch] (cut_pop_backtrace): ... here. * gcutter/gcut-test-utils.h: use cut_pop_backtrace() instead of gcut_pop_backtrace(). 2008-12-01 Kouhei Sutou * gcutter/, test/gcutter/: gtype -> type. * gcutter/gcutter.h: move gcut_data_get_XXX() to ... * gcutter/gcut-test-utils.h: ... here. * test/gcutter/test-gcut-test-utils.c (test_data_get): add a test for gcut_data_get_XXX(). * test/gcutter/test-gcut-data.c: cleanup. * gcutter/gcutter.h (gcut_data_get_enum): add. * gcutter/gcut-data.[ch], test/gcutter/test-gcut-data.c: add gcut_data_get_enum_helper(), gcut_data_get_enum_with_error(). * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_enum(). * test/: CUTTEST_FLAGS -> CUTTEST_TYPE_FLAGS. * gcutter/gcutter.h (gcut_data_get_flags): add. * gcutter/gcut-data.[ch], test/gcutter/test-gcut-data.c: add gcut_data_get_flags_helper(), gcut_data_get_flags_with_error(). * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add gcut_inspect_flags(). * gcutter/gcutter.h (gcut_data_get_gtype): add. * gcutter/gcut-data.[ch], test/gcutter/test-gcut-data.c: add gcut_data_get_gtype_helper(), gcut_data_get_gtype_with_error(). 2008-11-28 Kouhei Sutou * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: support GType. * gcutter/, test/gcutter/: gcut_XXX_inspect() -> gcut_inspect_XXX(). * gcutter/gcut-data.c: Field -> FieldValue. * gcutter/gcut-data.[ch], gcutter/gcutter.h: add gcut_data_get_string(). * cutter/cut-helper.h (cut_push_backtrace, cut_pop_backtrace): extract. * gcutter/gcutter.h (gcut_add_datum): add. * gcutter/gcut-data.[ch], test/gcutter/test-gcut-data.c: add GCutData. * gcutter/gcut-inspect.h: add FIXME. * cutter/cutter.h: remove ## __VA_ARGS__. 2008-11-27 Kouhei Sutou * gcutter/gcut-assertions.h, gcutter/gcut-assertions-helper.[ch], test/gcutter/test-gcut-assertions.c: add gcut_assert_equal_hash_table(). * gcutter/gcut-hash-table.c: use gcut_string_inspect(). * gcutter/gcut-inspect.[ch], test/gcutter/test-gcut-inspect.c: add. * doc/reference/Makefile.am, doc/reference/cutter-docs.sgml: add gcut-inspect.h. * gcutter/gcut-types.h: document GCutInspectFunction. 2008-11-23 Kouhei Sutou * gcutter/gcut-string-io-channel.c (gcut_string_io_channel_free): add NULL check. * cutter/cut-assertions.h (cut_assert_false): don't use ', ## __VA_ARGS__'. 2008-11-21 Kouhei Sutou * test/test-cut*.c: move to ... * test/cutter/: ... here. * gcutter/gcut-io-channel-string.[ch], test/gcutter/test-gcut-io-channel-string.c: rename to ... * gcutter/gcut-string-io-channel.[ch], test/gcutter/test-gcut-string-io-channel.c: ... them. * cutter/cut-utils.c, test/test-cut-utils.c: cleanup. * cutter/cut-assertions.h (cut_assert_equal_string_array_with_free): fix type. * gcutter/gcut-egg.[ch], test/gcutter/test-gcut-egg.c: support env customize. 2008-11-20 Kouhei Sutou * cutter/cut-utils.c (cut_utils_remove_path_recursive): ensure close directory. * cutter/cut-test-utils.h (cut_remove_path): don't use ', ## __VA_ARGS__'. required terminated NULL from users. * sample/cairo/nil-surface.c, test/gdkcutter-pixbuf/test-gdkcut-pixbuf-assertions.c, test/test-cut-utils.c: follow the above change. 2008-11-18 Kouhei Sutou * cutter/cut-loader.c, cutter/cutter.h, test/test-cut-loader.c, test/fixtures/loader/fixture/: support cut_setup(), cut_teardown(), cut_startup() and cut_shutdown() as fixture functions because shutdown() is conflicted with shutdown(2). 2008-11-16 Kouhei Sutou * cutter/cut-helper.h: mark cut_test_fail_va_list as deprecated. * cutter/, gcutter/, gdkcutter-pixbuf/, test/test-cut-assertions.c, test/test-cut-sequence-matcher.c: assertion's optional user message is deprecated. use cut_set_message() instead. 2008-11-14 Kouhei Sutou * gcutter/gcut-io-channel-string.c, test/gcutter/test-gcut-io-channel-string.c: support write block. 2008-11-08 Kouhei Sutou * test/gcutter/test-gcut-egg.c, test/gcutter/test-gcut-key-file.c: avoid locale independent test. * cutter/cut-macros.h (CUT_FUNCTION): add. * cutter/cut-helper.h: use CUT_FUNCTION to use __FUNCTION__ if __PRETTY_FUNCTION__ isn't available. 2008-11-06 Kouhei Sutou * doc/reference/cutter-docs.sgml: add a new section: new symbols in 1.0.6. * cutter/cut-assertions.h (cut_return): add. * gcutter/gcut-test-utils.h, doc/reference/cutter-overrides.txt: update gcut_take_list(). * gcutter/gcut-test-utils.h, doc/reference/cutter-overrides.txt: update gcut_take_new_hash_table_string_string(). * gcutter/gcut-assertions.h, doc/reference/cutter-overrides.txt: update gcut_assert_equal_hash_table_string_string(). * gcutter/gcut-list.c, gcutter/gcut-test-utils.h, test/gcutter/test-gcut-test-utils.c: add gcut_list_string_new_array() and gcut_take_new_list_string_array(). * gcutter/gcut-test-utils.h, doc/reference/cutter-overrides.txt: update gcut_take_new_list_string(). 2008-11-05 Kouhei Sutou * cutter/cut-test-utils.h, doc/reference/cutter-overrides.txt: update cut_take_string_array(). * doc/reference/cutter-overrides.txt: update. * cutter/cut-macros.h (CUT_TRUE, CUT_FALSE): move to ... * cutter/cut-types.h: ... here. * doc/reference/cutter-overrides.txt: add some override declarations. * cutter/cut-test-utils.h: update document. * gcutter/gcut-key-file.[ch], test/gcutter/test-gcut-key-file.c: add GKeyFile integration. * gcutter/gcut-assertions.c, gcutter/gcut-assertions-helper.[ch], test/gcutter/test-gcut-assertions.c: add gcut_assert_equal_list(). * test/lib/cuttest-enum.[ch], test/gcutter/test-gcut-enum.c: add flags type for test and use it. * gcutter/gcut-enum.[ch], test/gcutter/test-gcut-enum.c: format -> value. 2008-11-04 Kouhei Sutou * cutter/cut-helper.h, cutter/cut-public.h, cutter/cut-test-context.c, test/test-cut-test-context.c, test/fixtures/test-context/: support CUT_RELATIVE_PATH. * cutter/cut-stream-parser.c: improve function name detection. * test/lib/cuttest-assertions.c (cuttest_result_string_list_new_from_result): fix wrong variable bug. * test/gcutter/test-gcut-enum.c: fix a memory leak. * gcutter/gcut-enum.c, test/gcutter/test-gcut-enum.c: add gcut_parse_enum() and gcut_parse_flags(). * gcutter/gcut-io-channel-string.[ch], test/gcutter/test-gcut-io-channel-string.c: add pipe mode. * ./: use not "config.h". 2008-10-31 Kouhei Sutou * configure.ac, doc/html/Makefile.am, doc/reference/Makefile.am: follow SF.net shell server change. 2008-10-30 Kouhei Sutou * gcutter/gcut-egg.[ch] (gcut_egg_new_array): add. * gcutter/gcut-io-channel-string.c, test/gcutter/test-gcut-io-channel-string.c: make readable 1 time after all data read. 2008-10-30 Hiroyuki Ikezoe * cutter/cut-repository.c: Fix memory leak. 2008-10-29 Kouhei Sutou * gcutter/gcut-egg.c (reap_child): use exit status from child watch callback. 2008-10-29 Hiroyuki Ikezoe * tets/gcutter/test-gcut-egg.c: Use WEXITSTATUS. Still fails yet. * gcutter/gcut-io-channel-string.c (gcut_io_channel_string_write): Initialize bytes_written with 0 at the head of the function. 2008-10-28 Kouhei Sutou * gcutter/, test/gcutter/test-gcut-egg.c: spawn -> egg. 2008-10-23 Kouhei Sutou * gcutter/gcut-spawn.c: ensure kill spawned process. * TODO: - remove: GCutIOChannelString. - add: cut_get_test_name(). - add: cut_{get,set}_current_test_context() -> cut_{get,set}_test_context() - add: CUT_RELATIVE_PATH for resoving path of helper shared library like test/lib/cuttest-assertions.c. 2008-10-22 Kouhei Sutou * gcutter/gcut-spawn.c: cleanup. * gcutter/gcut-spawn.c (dispose): interrupt. * gcutter/gcut-io-channel-string.[ch], test/gcutter/test-gcut-io-channel-string.c: - gcut_string_io_channel_{get,set}_limit() -> gcut_string_io_channel_{get,set}_buffer_limit() . - gcut_string_io_channel_{get,set}_limit() means max content size limit. - add gcut_string_io_channel_{get,set}_read_fail(). * gcutter/gcut-io-channel-string.[ch], test/gcutter/test-gcut-io-channel-string.c: add gcut_string_io_channel_{get,set}_limit(). * cutter/cut-assertions-helper.[ch], cutter/cut-assertions.h, test/test-cut-assertions.c: add cut_assert_equal_size() and cut_assert_operator_size(). * gtk-doc.make: fix build error on same source and build directory case. 2008-10-21 Kouhei Sutou * doc/reference/Makefile.am, gtk-doc.make: support build directory. * ./: fix build dependencies. * gcutter/gcut-io.[ch], gcutter/gcut-spawn.[ch], test/gcutter/test-gcut-io.c, test/gcutter/test-gcut-spawn.c: add. * cutter/cut-stream-reader.c: use gcut_io_inspect_condition(). * cutter/cut-marshalers.list: add new marshalers. 2008-10-17 Kouhei Sutou * gcutter/gcut-io-channel-string.[ch], test/gcutter/test-gcut-io-channel-string.c: add gcut_string_io_channel_clear(). * cutter/cut-assertions-helper.c (cut_assert_equal_memory_helper): set limit. * gcutter/gcut-io-channel-string.c (source_is_available): fix a typo. * test/gcutter/test-gcut-io-channel-string.c (test_source): add. 2008-10-16 Kouhei Sutou * test/test-gcut-*.c: move to ... * test/gcutter/: ... here. * html/index.html*: add a link to users. * USERS*, Makefile.am, doc/reference/Makefile.am, doc/reference/cutter-docs.sgml: add. * test/test-gdkcutter-pixbuf*: move to ... * test/gdkcutter-pixbuf/: ... here. * gcutter/gcut-io-channel-string.[ch], test/test-gcut-io-channel-string.c: gcut_string_io_channel_get_string() returns GString * not gchar *. * gcutter/gcut-io-channel-string.[ch], gcutter/gcut-test-utils.h, test/test-gcut-io-channel-string.c: add gcut_io_channel_string_new(). * gcutter/gcut-list.[ch], gcutter/gcut-assertions.c, gcutter/gcut-assertions-helper.h, test/test-gcut-list.c: - gcut_list_XXX_{equal,inspect}() -> gcut_list_{equal,inspect}_XXX(). - gcut_list_{enum,flags}_inspect(list, type) -> gcut_list_{enum,flags}_inspect(type, list). 2008-10-15 Kouhei Sutou * configure.ac: 1.0.5 -> 1.0.6. * Makefile.am, misc/release.rb: use PACKAGE_NAME not PACKAGE_TITLE. * html/Makefile.am, doc/reference/Makefile.am: follow the recent SF.net change. * cutter/cut-test-context.c: use variable. * cutter/cut-assertions-helper.h: improve variable name. * test/test-cut-assertions.c: fix indent. * NEWS*, doc/reference/ja.po: add cut_assert_operator_uint(). * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], test/test-cut-assertions.c: add cut_assert_operator_uint(). 2008-10-14 Kouhei Sutou * NEWS*: 14 -> 15. give up. * configure.ac (SF_HOST): shell.sourceforge.net -> web.sourceforge.net. * test/fixtures/pixbuf/Makefile.am (EXTRA_DIST): add missing files. * FEATURES*: add image diff. * NEWS*, doc/reference/, misc/rd2refentry-lib.rb: use . * gcutter/gcut-hash-table.c, gcutter/gcut-test-utils.h, test/test-gcut-hash-table.c: gcut_hash_table_string_string_newv() -> gcut_hash_table_string_string_new_va_list(). * NEWS*: add an entry for 1.0.5. * cutter/cut-helper.h: support shared library. * cutter/, gcutter/, gdkcutter-pixbuf/: use cut_get_current_test_context(). * test/: follow the above change. * cutter/cut-test-context.c: cut_test_context_current_get() and cut_test_context_current_set() doesn't require key. So we can introduce hidden get_current_test_context() and set_current_test_context(). * cutter/, gcutter/, gdkcutter-pixbuf/, test/: follow the above change. * gdkcutter-pixbuf/gdkcut-pixbuf.c: fix an index bug. * test/test-gdkcut-pixbuf.c: remove needless code. * sample/glib/iochannel.c, sample/glib/keyfile.c: use gcut_assert_error(). * TODO: add an entry: GCutIOChannelString. * cutter/cut-test-utils.h (cut_take_strdup): add missing (). 2008-10-13 Kouhei Sutou * doc/reference/ja.po: update. * gcutter/: fix typos. * sample/glib/option.c: suppress warnings. * doc/reference/: update. * sample/glib/option.c: pass "" not NULL. * gcutter/gcut-enum.c: use G_GSIZE_FORMAT for formatting GType. * sample/glib/: use gcutter. * gcutter/gcut-assertions.h, gcutter/gcut-assertions-helper.[ch]: add gcut_assert_equal_int64() and gcut_assert_equal_uint64(). * sample/glib/option.c: use gcut_assert_equal_int64(). * gcutter/: document. * gcutter/Makefile.am: add missing gcut-main.[ch]. * cutter/cut-main.c: use gcut-main.h not gcut-value-equal.h. * cutter/cut-assertions-helper.c (cut_assert_equal_memory_helper): use G_GSIZE_FORMAT. * gcutter/gcut-main.[ch]: add. * gcutter/gcut-value-equal.h: split init function to gcut-main.h. * cutter/cut-main.c: call gcut_init() not gcut_value_equal_init(). * doc/reference/ja.po: update. * cutter/, gcutter/: fix typos. * doc/reference/ja.po: update. * cutter/cut-test-utils.h: move *_helper() to ... * cutter/cut-test-utils-helper.h: ... here. * Makefile.am: add gdkcutter-pixbuf package to po target. * cutter/cut-helper.h: introduce for original function base assertion writer. * cutter/, doc/reference/, test/lib/cuttest-assertions.c: follow the above change. * test/run-test.sh: cleanup. 2008-10-12 Kouhei Sutou * cutter/cut-assertions-helper.c, gcutter/gcut-assertions-helper.c, gdkcutter-pixbuf/gdkcut-pixbuf-assertions-helper.c, test/: 'but was' -> 'actual'. * cutter/cut-assertions.h, cutter/cut-assertions-helper.[ch], gcutter/gcut-assertions-helper.c, gdkcutter-pixbuf/gdkcut-pixbuf-assertions-helper.c, test/test-cut-sequence-matcher.c: export cut_test_pass(), cut_test_fail() and cut_test_fail_va_list(). cut_test_fail()'s API changed. cut_test_terminate() has old API. * TUTORIAL*, test/sample/stack/autogen.sh: add description about when Cutter is installed with non-system prefix. * TODO: remove an entry: add description about -I$PREFIX/share/aclocal and PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig to TUTORIAL. * gcutter/gcut-assertions.h, gcutter/assertions-helper.[ch], test/test-gcut-assertions.c: add gcut_assert_equal_list_enum() and gcut_assert_equal_list_flags(). * gcutter/gcut-list.[ch], test/test-gcut-list.c (gcut_list_enum_inspect, gcut_list_flags_inspect): add. * gdkcutter-pixbuf/gdkcut-pixbuf.c, test/test-gdkcut-pixbuf.c, test/fixtures/pixbuf/: fix non-alpha image diff. * gdkcutter-pixbuf/Makefile.am (gdkcutter_pixbuf_includedir): fix install directory. * cutter/Makefile.am (cutter_public_headers): install cutter/cut-features.h. * configure.ac, cutter/cutter.h: create cut-features.h and use it. * m4macros/cutter.m4: add AC_CHECK_GDKCUTTER_PIXBUF. * cutter/cut-assertions-helper.c: use cut_utils_equal_double(). * cutter/cut-test-utils.h (cut_equal_string): add. * cutter/cut-utils.c, cutter/cut-public.h, test/test-cut-utils.c: add cut_utils_equal_string(). * cutter/cut-assertions-helper.c: use cut_utils_equal_string(). * cutter/cut-assertions.h: move to needless headers to ... * test/, sample/cairo/, cutter/cut-assertions-helper.c: ... here. * cutter/cut-utils.c, cutter/cut-public.h (cut_utils_equal_string): add const. * cutter/cut-test-utils.h (cut_equal_string): add. * cutter/cut-utils.c, cutter/cut-public.h, test/test-cut-utils.c: add cut_utils_equal_string(). * cutter/cut-public.h: use cut_boolean. 2008-10-11 Kouhei Sutou * test/test-gdkcut-pixbuf-assertions.c: add tests for gdkcut_pixbuf_assert_equal(). * test/test-gdkcut-pixbuf.c, test/fixtures/pixbuf/diff-dark-and-nested-circle.png: add tests for image diff. * gdkcutter-pixbuf/gdkcut-pixbuf.c (gdkcut_pixbuf_diff): implement. * gdkcutter-pixbuf/gdkcut-pixbuf.[ch] (gdkcut_pixbuf_save_diff): receive GError. * gdkcutter-pixbuf/gdkcut-pixbuf-assertions.h (gdkcut_pixbuf_assert_equal): fix. * gdkcutter-pixbuf/gdkcut-pixbuf-assertions-helper.[ch]: add. * cutter/cut-public.h, cutter/cut-test-context.c (cut_test_context_get_last_backtrace): add. * cutter/cut-assertions-helper.h (cut_test_register_result_helper): improve API. * TODO: remove an entry: image diff. * test/test-gdkcut-pixbuf.c (test_diff_between_equal_images): add. * test/test-gcut-assertions.c, test/test-gcut-assertions.c: fix a crash bug. * cutter/cut-test-utils.h (cut_take_strdup_helper): add. * test/test-gcut-assertions.c (test_equal_object): add. * gcutter/gcut-assertions.h (gcut_assert_equal_object) (gcut_assert_equal_object_custom): add. * gcutter/gcut-assertions-helper.[ch] (gcut_assert_equal_object_helper): add. * gdkcutter-pixbuf/gdkcut-pixbuf.[ch]: remove gdkcut_pixbuf_inspect_property(). * test/test-gdkcut-pixbuf.c: use gcut_object_inspect() instead of gdkcut_pixbuf_inspect_property(). * cutter/cut-assertions.h (cut_assert_equal_string_with_free): improve backtrace. * gcutter/gcut-object.c, test/test-gcut-object.c: improve inspected result. * gcutter/gcut-object.[ch], test/test-gcut-object.c: add. * gcutter/gcut-list.c: use gcut_object_*(). * gcutter/gcut-list.h: move GCutInspectFunc() to ... * gcutter/gcut-types.h: ... here. * cutter/, test/, README*: add --enable-convenience-attribute-definition option and convenience but dangerous attribute set function is disabled by default. * test/lib/Makefile.am, test/lib/cuttest-assertions.[ch]: define assertion as function not macro. * TODO: remove an entry: resolve circular reference between CutStreamReader and CutStreamParser. * cutter/cut-stream-parser.c: use weak_ref. * test/test-cut-stream-parser.c (teardown): fix memory leak. * TODO: remove an entry: [CutRepository/CutLoader] source directory supports nested directory. * cutter/, test/: source path resolution supports nested directory. * test/test-cut-assertions.c, test/test-cut-test-iterator.c, test/test-gcut-assertions.c, test/lib/cuttest-utils.[ch], test/lib/cuttest-assertions.h: check backtrace of test result too. 2008-10-10 Hiroyuki Ikezoe * cutter/cut-test-utils.h (cut_take_memory): Fix typo. string -> memory. * cutter/cut-stream-parser.c: "run-context" property is "CONSTRUCT_ONLY" so is is not needed to unref previous value. 2008-10-09 Kouhei Sutou * TODO: add an entry: add description about -I$PREFIX/share/aclocal and PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig to TUTORIAL. 2008-10-08 Kouhei Sutou * gcutter/gcut-assertions.h, gcutter/gcut-assertions-helper.[ch], test/test-gcut-assertions.c: add gcut_assert_equal_list_object() and gcut_assert_equal_list_object_custom(). * gcutter/gcut-list.[ch], test/test-cut-sequence-matcher.c: gcut_list_object_inspect(). 2008-10-07 Kouhei Sutou * cutter/cut-public.h, cutter/cut-test-context.c (cut_test_context_take) (cut_test_context_take_memory, cut_test_context_take_strndup) (cut_test_context_take_memdup): add. * cutter/cut-test-utils.h (cut_take, cut_take_memory) (cut_take_strndup, cut_take_memdup): add. 2008-10-06 Kouhei Sutou * cutter/cut-backtrace-entry.[ch]: define format function. * module/ui/: use backtrace entry format function. * test/test-cut-report-xml.c: follow the above change. * cutter/cut-hidden-definitions.h: add CUT_HELPER guard. * module/ui/cut-gtk-ui.c: suppress warnings. * TODO: add an entry: GTK+ UI supports test iterator. * test/test-cut-test-suite.c: keep the current test context. 2008-10-05 Kouhei Sutou * cutter/, gcutter/, test/, module/, sample/: implement cut_trace(). * TODO: remove an entry: cut_trace() that stacks backtrace. e.g. cut_trace(my_assert_xxx(ZZZ)); * cutter/cut-test-context.c: take_XXX() doesn't dup target object. * cutter/, test/: function name, file name, line -> file name, line, function name. * cutter/, module/, test/: pass 'gboolean success' to complete signal. * cutter/cut-test-iterator.[ch], cutter/cut-test-runner.c: {start,complete}-test -> {start,complete}-iterated-test. * cutter/cut-test-runner.c: cleanup. * cutter/, test/: fix a bug that any test result in setup() is ignored. * TODO: remove an entry: [BUG] test result (error, omission, ...) signal in setup() isn't connected to CutRunner because setup() is invoked before CutTest's prepare(). 2008-10-04 Kouhei Sutou * cutter/cut-utils.h (cut_utils_report_error): define. * cutter/: use cut_utils_report_error(). * cutter/cut-test-iterator.c: cleanup. 2008-10-03 Kouhei Sutou * cutter/, test/: support iterated test filtering by -n option. * TODO: add a new entry: cut_trace() that stacks backtrace. * cutter/cut-utils.c (cut_utils_filter_to_regexs): - don't use extended mode. - show regexp error. * cutter/, test/: CutIteratedTest has test data. * cutter/, test/: cut_test_case_get_n_tests() receives CutRunContext * not gchar **. * cutter/cut-test-suite.c: handle SIGABRT action like SIGSEGV. * cutter/cut-loader.[ch], cutter/cut-main.c, cutter/cut-pipeline.c, cutter/cut-repository.[ch], cutter/cut-run-context.[ch], test/run-test.sh, test/test-cutter.c: add --keep-opening-modules option to resolve symbols for debugging. * TODO: remove a entry: add a new command line option that switch whether unload opened module or not to resolve symbols in opened module. --keep-module? * cutter/cut-main.c (cut_set_cutter_command_path): add NULL check. 2008-10-02 Kouhei Sutou * TODO: add a new entry: add a new command line option that switch whether unload opened module or not to resolve symbols in opened module. --keep-module? * test/lib/cuttest-assertions.h (cut_assert_test_result): fix memory leaks. * cutter/cut-pipeline.c (unref_child_out_channel): unref child out not only shutdown. * test/test-cut-main.c: fix invalid memory access. * cutter/cut-assertions.h (cut_assert_equal_fixture_data_string): fix a memory leak. * test/test-cut-utils.c (test_strv_concat): fix a memory leak. 2008-10-01 Kouhei Sutou * misc/release.rb: fix package detection. 2008-09-30 Kouhei Sutou * misc/release.rb: make target section customizable. * TODO: add a new feature entry: cut_assert_equal_sockaddr(). * cutter/cut-test-utils.h (cut_take_strdup): add. * cutter/cut-test-context.c, cutter/cut-public.h (cut_test_context_take_strdup): add. 2008-09-28 Kouhei Sutou * TODO: add a bug fix task: [BUG] test result (error, omission, ...) signal in setup() isn't connected to CutRunner because setup() is invoked before CutTest's prepare(). 2008-09-18 Kouhei Sutou * cutter/cut-utils.c, test/test-cut-utils.c: improve inspected result. * cutter/cut-utils.c, cutter/cut-assertion.h, cutter/cut-public.h, test/test-cut-assertions.h: show hex string dump in cut_assert_equal_memory(). * cutter/cut-utils.c, cutter/cut-assertions.h, cutter/cut-public.h, test/test-cut-utils.c: cut_utils_compare_string_array() -> cut_utils_equal_string_array(). 2008-09-17 Kouhei Sutou * gcutter/gcut-assertions.h (gcut_assert_equal_enum) (gcut_assert_equal_flags): add examples. * gcutter/gcut-assertions.h, test/test-gcut-assertions.c: add gcut_assert_equal_enum() and gcut_assert_equal_flags(). * gcutter/gcut-enum.[ch], test/test-gcut-enum.c: add gcut_enum_inspect() and gcut_flags_inspect(). * test/test-gcut-hash-table.c (test_inspect_null): fix memory leak. 2008-09-16 Kouhei Sutou * cutter/cut-utils.c (cut_utils_get_fixture_data_string_and_path): fix a memory leak. * cutter/cut-utils.c (cut_utils_fold): fix a memory leak. * test/run-test.sh: add -v to valgrind option. * test/test-cut-assertions.c (path_exist_test): use gcut_error_inspect(). * cutter/cut-utils.c (cut_utils_fold): fix a memory leak. * test/run-test.sh: support CUTTER_CHECK_LEAK environment variable to run on valgrind. * cutter/cut-utils.c (cut_utils_remove_path_recursive): fix a memory leak bug. Reported by Daijiro MORI. Thanks!!! * test/Makefile.am: add gdk-pixbuf's include path if needed. * test/Makefile.am: $(builddir) isn't available on old automake... * Makefile.am (SUBDIRS): build gdkcutter-pixbuf/ after cutter/. 2008-09-15 Kouhei Sutou * gdkcutter-pixbuf/gdkcut-pixbuf.c (gdkcut_pixbuf_inspect_property), test/test-gdkcut-pixbuf.c (test_inspect_property): implement gdkcut_pixbuf_inspect_property(). * test/test-gdkcut-pixbuf.c (test_equal_content_threshold), test/fixtures/pixbuf/max-3-pixel-value-different-dark-circle.png, gdkcutter-pixbuf/gdkcut-pixbuf-assertions.h: implement gdkcut_pixbuf_equal_content() with threshold support. * gdkcutter-pixbuf/gdkcut-pixbuf.c (pixels_equal), test/test-gdkcut-pixbuf.c (test_equal_content): implement gdkcut_pixbuf_equal_content() without threshold support. * configure.ac, Makefile.am, gdkcutter-pixbuf/, gdkcutter-pixbuf.pc.in, test/fixtures/pixbuf/, test/test-gdkcut-pixbuf.c: start GdkPixbuf support. * cutter/Makefile.am, gcutter/Makefile.am: cleanup. 2008-09-14 Kouhei Sutou * cutter/cut-sequence-matcher.c, cutter/cut-diff.c, test/test-cut-diff.c: support double width character. 2008-09-12 Kouhei Sutou * test/test-gcut-test-utils.c (test_take_new_list_string): add. * test/test-cut-test-attribute.c (test_multi_attributes): use gcut_take_new_hash_table_string_string(). * gcutter/gcut-test-utils.h (gcut_take_new_list_string) (gcut_take_new_hash_table_string_string): add. 2008-09-11 Kouhei Sutou * cutter/cut-test-utils.h (cut_build_fixture_data_path): add memory ownership document. * m4macros/cutter.m4: support version check. * gcutter/gcut-hash-table.c, gcutter/gcut-test-utils.h (gcut_hash_table_string_string_newv): add. * test/test-gcut-hash-table.c (test_new): add a test for gcut_hash_table_string_string_newv(). * gcutter/gcut-hash-table.c (gcut_hash_table_inspect): support NULL. * test/Makefile.am: add test/test-gcut-hash-table.c. * test/test-gcut-hash-table.c: add. * gcutter/gcut-hash-table.c (gcut_hash_table_equal): add NULL check. 2008-09-10 Kouhei Sutou * test/test-cut-xml-stream.c (attributes_stream): don't use multi thread mode. * test/test-cut-pipeline.c: work with multi thread mode. * cutter/cut-main.[ch] (cut_run_iteration): add for replacing g_main_context_iteration() but it doesn't do any other work now. It may lock in the feature. * cutter/cut-runner.c, cutter/cut-sub-process.c, cutter/cut-sub-process-group.c: use cut_run_iteration() instead of g_main_context_iteration(). * cutter/cut-test-iterator.c: fix attribute target. * cutter/cut-test-iterator.c, cutter/cut-test-suite.c: use GThreadPool to limit number of max threads. * test/run-test.sh (CUTTER_WRAPPER): don't override CUTTER for sub process. * cutter/cut-loader.c, cutter/cut-module-factory-utils.c: support '-' as shared object file name separator. * test/: use '-' not '_' for shared object file name separator. * cutter/cut-pipeline.c (create_command_line_args_from_parameters): add --max-threads option. * cutter/cut-multi-process.[ch] (cut_sub_process_{set,get}_max_threads): add. * cutter/cut-pipeline.c (cut_pipeline_new_from_run_context): pass max-threads parameter. * cutter/cut-main.c: add --max-threads option. * test/test-cutter.c: follow the above change. * test/test-gcut-assertions-helper.c: fix typos. * cutter/cut-run-context.[ch] (cut_run_context_{set,get}_max_threads): add. * test/Makefile.am: add test-cut-run-context.c. * test/test-cut-run-context.c (test_max_threads): add. 2008-09-09 Kouhei Sutou * cutter/cut-main.c: fix help message encoding on non UTF-8 locale. Reported by Daijiro MORI. Thanks!!! * README*: add an entry for Daijiro MORI. Thanks!!! 2008-09-08 Kouhei Sutou * gcutter/gcut-assertions.h, gcutter/gcut-error.[ch]: add const. * cutter/, gcutter/: follow the below change. * gcutter/gcut-error.[ch] (gcut_error_inspect): renamed from cut_utils_inspect_g_error(). * cutter/cut-assertions.h (cut_assert_operator_double): add. * test/test-cut-assertions.c (test_operator_double) (test_operator_int): add. 2008-09-05 Kouhei Sutou * cutter/cut-repository.c (is_test_suite_so_path_name): accept suite-XXX.so as suite file not only suite_XXX.so. * gcutter/gcut-assertions.h (gcut_assert_equal_error): add. * gcutter/gcut-error.[ch]: add. * test/test-gcut-assertions.c (test_equal_error): add. 2008-08-27 Kouhei Sutou * TODO: add: introduce easy sub process debugging mechanism. * cutter/cut-mach-o-loader.[ch]: add but not implemented yet. * cutter/cut-loader.c: use CutMachOLoader if available. * misc/release.rb: add fallback. * configure.ac: 1.0.4 -> 1.0.5. * NEWS*: add an entry for 1.0.4. * sample/Makefile.am (stack_src_DATA), sample/stack/config/keep-me: add sample/stack/config/keep-me just for dist sample/stack/config/ empty directory. * Makefile.am (EXTRA_DIST): add missing FEATURES*. * configure.ac: add AM_GLIB_GNU_GETTEXT. * sample/cairo/Makefile.am, sample/glib/Makefile.am, sample/gtk+/Makefile.am: add missing -no-undefined. * test/test-cut-assertions.c (path_not_exist_test): fix wrong test. * cutter/cut-assertions.h (cut_assert_path_not_exist): add NULL check. * test/test-cut-main.c (test_cutter_command_path): use notepad.exe as exist command. * test/lib/Makefile.am (AM_LDFLAGS): add -no-undefined. * test/Makefile.am (AM_LDFLAGS): use `pwd`/.libs not $(libs). * TODO: add: - use mach-o/loader.h on Mac OS X. - update option descriptions in README. * test/test-cut-main.c (test_cutter_command_path): use exist command on the test environment. >>>>>>> .r2367 * test/test-cut-sub-process-group.c, test/fixtures/sub-process-group/test-invoker.c: : use CUTTEST_TEST_DIR_KEY. * test/lib/cuttest-utils.h (CUTTEST_TEST_DIR_KEY): move from test/test-cut-sub-process.c. * test/test-cut-sub-process.c, test/fixtures/sub-process/test-invoker.c: : use CUTTEST_TEST_DIR_KEY. * test/test-cut-pipeline.c: remove needless set environment. * cutter/cut-repository.c (is_ignore_directory): skip shared object search in metadata directory. * cutter/cut-loader.c (cut_loader_load_test_suite) (cut_loader_load_test_case): show warning messages on g_module_open failure. * test/lib/Makefile.am (AM_LDFLAGS): use `pwd`/.libs for -rpath not $(libdir). 2008-08-26 Kouhei Sutou * TODO: add: use imagehlp.h on Windows. * cutter/cut-sub-process.c, cutter/cut-multi-process.h (cut_sub_process_get_backtrace): remove. * TODO: remove: stress test. (N processes and N threads). * doc/reference/ja.po, po/ja.po, po/POTFILES.in: update. * autogen.sh, configure.ac: don't use glib-gettextize. use only intltoolize. * cutter/cutter.h, cutter/cut-multi-process.h: fix typos. * doc/reference/ja.po: update. * cutter/cut-pipeline.c (create_command_line_args_from_parameters): support --fatal-failures. * cutter/cut-sub-process.c, cutter/cut-multi-process.h (cut_sub_process_get_fatal_failures) (cut_sub_process_set_fatal_failures): add. * module/ui/cut-console-ui.c: fix error signal handling. * cutter/cut-run-context.[ch]: add fatal failures mode. * cutter/cut-test-context.[ch]: abort() or G_BREAKPOINT() on failure in fatal failures mode. * cutter/cut-main.c: add --fatal-failures option. * cutter/cut-pipeline.c (cut_pipeline_new_from_run_context), test/test-cutter.c: follow the above change. * doc/reference/ja.po: update. * cutter/cut-sub-process.c (cut_sub_process_is_multi_thread): remove. * cutter/cut-multi-process.h: document. * module/ui/cut-console-ui-factory.c: move guessing progress row max value to ... * module/ui/cut-console-ui.c: ... here. * module/ui/cut-console-ui.c: fold progress marks. * test/test-cut-file-stream-reader.c, test/fixtures/file-stream-reader/, test/fixtures/Makefile.am: add tests for file stream reader. * test/Makefile.am: add test_cut_file_stream_reader.so. * configure.ac: add test/fixtures/file-stream-reader/Makefile. * module/stream/cut-xml-stream-factory.c: tm_mon is 0-11!!! * test/lib/Makefile.am: add cuttest-event-receiver.[ch]. * test/Makefile.am: test_cut_stream_parser.so use cuttest_event_receiver.so. * test/test-cut-stream-parser.c: move CuttestEventReceiver to ... * test/lib/cuttest-event-receiver.[ch]: ... here. * cutter/cut-file-stream-reader.c, cutter/cut-pipeline.c: use cut_stream_reader_watch_io_channel(). * cutter/cut-stream-reader.[ch] (cut_stream_reader_watch_io_channel): add. * module/ui/cut-console-ui.c (cb_error, cb_crashed): check verbose level. 2008-08-25 Kouhei Sutou * autogen.sh: add -I m4macros. * doc/reference/cutter-docs.sgml: add cut-multi-process. * doc/reference/Makefile.am: follow the below changes. * cutter/cut-test-utils.h, cutter/cut-public.h: move CutSubProcess and CutSubProcessGroup to ... * cutter/cut-multi-process.h: ... here. (new file) * cutter/cut-public.h: move m4 macros to ... * cutter/cut-macros.h: ... here. (new file) * cutter/cut-public.h: move cut_boolean to ... * cutter/cut-types.h: ... here. * TODO: remove: cut_sub_process_new() and cut_sub_process_group() should be changed. * cutter/, test/: - cut_sub_process_new() -> cut_take_new_sub_process(). - cut_sub_process_group_new() -> cut_take_new_sub_process_group(). * cutter/cut-test-utils.h (cut_take_new_sub_process): * TODO: remove: CutSubProcessGroup for multi process test. * test/test-cut-sub-process-group.c, test/fixtures/sub-process-group/test-invoker.c: add a test for cut_sub_process_group_run_async() and cut_sub_process_group_wait(). * doc/tutorial/senna.rd.ja: fix a typo and add some information. 2008-08-22 Kouhei Sutou * test/test-cut-sub-process.c, test/fixtures/sub-process/test-invoker.c: abstract. * TODO: add: cut_sub_process_new() and cut_sub_process_group() should be changed. * test/test-cut-process.c: add ifdef check. * cutter/cut-sub-process.c: - add ran check. - add missing NULL. * cutter/cut-pipeline.c (create_command_line_args): add NULL check. * cutter/cut-utils.c (cut_utils_create_taken_sub_process_group): add. * cutter/cut-public.h: add CutSubProcessGroup. * cutter/cut-test-utils.h (cut_sub_process_group_new): add. * cutter/cut-sub-process-group.[ch]: add. * test/test-cut-sub-process-group.c: add. * cutter/Makefile.am: add test-cut-sub-process-group.c. * configure.ac, test/fixtures/Makefile.am: add test/fixtures/sub-process-group/. 2008-08-21 Kouhei Sutou * cutter/cut-pipeline.c (child_out_watch_func): check all stream is read or not. * cutter/cut-run-context.[ch] (cut_run_context_is_completed): add. * TODO: add: CutSubProcessGroup for multi process test. * TODO: remove: CutSubProcess for multi process test. * TODO: remove: CutTestIterator supports multi thread. * cutter/cut-test-iterator.c: support multi thread. * cutter/cut-test-suite.c (run_with_thread_support): add missing type conversion. * cutter/cut-pipeline.[ch]: fix a block bug on child process is died unexpectedly. * sample/glib/thread.c: use cut_get_current_test_context() and cut_set_current_test_context(). * cutter/cutter.h (cut_get_current_test_context), (cut_set_current_test_context): add and documented. * cutter/: use cut_test_context_current as prefix: cut_test_context_XXX_current() -> cut_test_context_current_XXX(). * cutter/cut-test-context.c (cut_test_context_set_current): remove needless ref. * cutter/cut-test-suite.c: use more descriptive name: run_with_thread() -> run_with_thread_support(). * sample/glib/thread.c: follow the below changes: set the current test explicitly if new thread is created in test. * cutter/cut-main.c, cutter/cut-public.h, cutter/cut-hidden-definitions.h, cutter/cut-test-context.[ch]: make {get,set}_current_test_context() thread safe. 2008-08-20 Kouhei Sutou * TODO: add: more intelligent crashed reporting. * cutter/cut-pipeline.c (create_command_line_args_from_parameters): use cut_run_context_get_multi_thread() instead of cut_run_context_is_multi_thread() because spawned process may be able to use multi thread. * TODO: add: CutTestIterator supports multi thread. * test/fixtures/sub-process/test-invoker.c: test-delegate -> test-invoker. * cutter/, test/: gchar ** -> const gchar **. * test/test-cut-pipeline.c: move delegate test to ... * test/test-cut-sub-process.c: ... here as sub process test. * cutter/cut-sub-process.[ch], cutter/cut-public.h, cutter/cut-utils.c, cutter/cut-test-utils.h: add a convenience object for users who want to run sub cutter process. * test/test-cut-pipeline.c (test_delegate): add a test for cut_run_context_delegate_signals(). * test/fixtures/pipeline/delegate/: add a test data for cut_run_context_delegate_signals(). * configure.ac, test/fixtures/pipeline/Makefile.am: add test/fixtures/pipeline/delegate/. * cutter/cut-run-context.[ch] (cut_run_context_delegate_signals): add test result delegation mechanism. * cutter/cut-pipeline.c, cutter/cut-stream-parser.c, cutter/cut-stream-reader.c, cutter/cut-test-runner.c: use cut_run_context_emit_complete_run(). * cutter/cut-run-context.[ch] (cut_run_context_emit_complete_run): add a convenience function for considering delegated test results. * cutter/cut-stream-parser.c (start_result): parse test data in . * test/test-cut-stream-parser.c (test_result_iterated_test), test/fixtures/xml-stream/iterated-test.xml: follow the below change. * cutter/cut-test-result.c (cut_test_result_to_xml_string): output test data to XML. * cutter/cut-test-runner.c (runner_run): consider delegated test results. * module/ui/cut-console-ui.c (print_summary): use cut_run_context_get_status(). * cutter/cut-run-context.[ch] (cut_run_context_get_status): add. * cutter/cut-test-context.c (cut_test_context_register_result): filename in test result is expanded by its run context on creating. * module/ui/cut-console-ui.c: don't expand filename in test result. 2008-08-19 Kouhei Sutou * cutter/cut-test-context.c, cutter/cut-test-context.h: CutTestContext has CutRunContext. * cutter/, test/: follow the above changes. * TODO: add CutSubProcess. * cutter/cut-pipeline.c (create_command_line_args_from_parameters): add terminate NULL check. * cutter/cut-pipeline.c: create child cutter's arguments from CutPipeline's parameter if original arguments aren't set. * cutter/cut-run-context.c: fix memory leak. * test/test-cut-pipeline.c: report error on pipeline running. 2008-08-05 Hiroyuki Ikezoe * autogen.sh, configure.ac: Use AC_CONFIG_MACRO_DIR instead of -I option of aclocal. * po/LINGUAS, configure.ac: Requre intltool >= 0.35.5. * cutter/cut-main.c, cutter/cut-loader.c: Fix memory leak. 2008-08-02 Kouhei Sutou * TODO: add: failmalloc like memory test. * cutter/cut-diff.c (cut_differ_readable_new): add. (cut_diff_readable): use cut_differ_readable_new(). 2008-08-01 Kouhei Sutou * test/test-cut-test-attribute.c (test_multi_attributes): use gcut_hash_table_string_string_new() and gcut_assert_equal_hash_table_string_string(). * gcutter/gcut-test-utils.h (gcut_take_hash_table): add. * gcutter/gcut-test-utils.h, gcutter/gcut-hash-table.c (gcut_hash_table_string_string_new): add. * cutter/cut-test-context.c, gcutter/gcut-public.h (cut_test_context_take_g_hash_table): add. * gcutter/gcut-hash.[ch]: rename to ... * gcutter/gcut-hash-table.[ch]: ... them. * gcutter/, test/test-gcut-assertions.c: gcut_hash_XXX -> gcut_hash_table_XXX. * test/test-gcut-assertions.c (test_equal_hash_string_string): add a test for gcut_assert_equal_hash_string_string(). * gcutter/gcut-assertions.h (gcut_assert_equal_hash_string_string): add. * gcutter/gcut-hash.[ch]: add. * gcutter/Makefile.am: add gcut-hash.[ch]. * cutter/cut-analyzer.c (BUFFER_SIZE): remove needless definition. * TODO: remove: change test attribute register API like data register API. 2008-07-31 Kouhei Sutou * test/test-cut-test-attribute.c (test_multi_attributes): fix a test. * test/fixtures/loader/attribute/stub-test-functions.c: use cut_set_attributes(). * cutter/cut-test.h (CutAttributesSetupFunction): add. * cutter/cut-test.h (cut_test_get_data_setup_function): remove needless function. * cutter/cut-test.h (CutDataSetupFunction): move to ... * cutter/cut-test-iterator.h: ... here. * cutter/cut-public.h (CutTestAttribute): remove. * cutter/cut-public.h, cutter/cut-test-context.c (cut_test_context_set_attributes): add. * cutter/cut-loader.c: get attributes from cut_set_attributes(). * cuter.h (cut_set_attributes): add. * test/test-cut-test-attribute.c, test/fixtures/loader/attribute/stub-test-functions.c: cleanup. * cutter/cut-analyzer.c: handle error. * cutter/cut-run-context.[ch] (cut_run_context_emit_error): emit error with GError * not gchar *name and gchar *detail. * cutter/cut-file-stream-reader.[ch], cutter/cut-pipeline.[ch], cutter/cut-stream-reader.[ch]: follow the above change. * cutter/cut-main.c: CutAnalyzer isn't CutRunContext now. * cutter/Makefile.am: add cut-file-stream-reader.[ch]. * cutter/cut-file-stream-reader.[ch]: add. * cutter/cut-analyzer.[ch]: use CutFileStreamReader. * cutter/Makefile.am: add cut-stream-reader.[ch]. * cutter/cut-stream-reader.[ch]: add. * cutter/cut-pipeline.[ch], gst-plugins/gst-cutter-console-output.c: use CutStreamReader. * gst-plugins/Makefile.am: remove cut-gst-run-context.[ch]. * gst-plugins/cut-gst-run-context.[ch]: remove. * **/.gitignore: add. * TODO: - update. - add: - stress test. (N processes and N threads) - elapsed time assert. - test history chart. - coordinattion with TestLink. - image diff. - change test attribute register API like data register API. 2008-07-30 Kouhei Sutou * cutter/cut-run-context.[ch] (cut_run_context_get_total_elapsed): add. * module/ui/cut-console-ui.c (cb_complete_run): show pure elapsed time and total elapsed time that is sum of elapsed time of all tests. * test/test-cut-test.c (test_start_time): don't compare usec. * test/run-test.sh (CUTTER_ARGS): don't log on analyze mode. * cutter/cut-analyzer.c (run_async): ensure emit complete-run signal. * module/ui/cut-console-ui.c (print_summary): check n_tests == 0 case. * cutter/cut-analyzer.c (run_async): remove needless emit signal. * test/lib/cuttest-utils.h: add ISO8601_PATTERN. * test/test-cut-report-xml.c, test/test-cut-xml-stream.c: use ISO8601_PATTERN. * module/ui/cut-console-ui.c: use complete-run not complete-test-suite to show summary. * module/stream/cut-xml-stream.c: stream start-iterated-test and complete-iterated-test. * test/fixtures/xml-stream: add expected data for test/test-cut-xml-stream.c. * test/test-cut-xml-stream.c: use data driven test style. * html/: add a index page in Japanese. * cutter/cut-test-iterator.c, cutter/cut-test-case.c: cleanup. * cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: support test-iterator-result parsing. * cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: support iterated-test and test-iterator parsing. * test/test-cut-stream-parser.c (test_result_of_iterated_test): * test/test-cutter.c: follow the below changes. * cutter/cut-main.c: - use CutAnalyzer. - add --mode option. * cutter/Makefile.am: add cut-analyzer.[ch]. * cutter/cut-analyzer.[ch]: add. * cutter/cut-run-context.[ch] (cut_run_context_get_log_directory) (cut_run_context_set_log_directory): add. * test/test-cutter.c, test/run-test.sh: follow the below changes. * cutter/cut-main.c, cutter/cut-stream-factory-builder.c: dir -> directory. * test/run-test.sh: log test result. * cutter/cut-main.c: just show analyze mode. not implemented yet. 2008-07-29 Kouhei Sutou * module/stream/cut-xml-stream-factory.c: output to both FD and file. * module/report/cut-pdf-report-factory.c (dispose): fix a minor bug. * test/test-cutter.c (test_help_all): follow the below changes. * module/stream/cut-xml-stream-factory.c: move --stream-fd option to ... * cutter/cut-stream-factory-builder.c: ... here. * cutter/cut-stream-factory-builder.c: add --stream-log-dir option. * ./: streamer -> stream. * module/streamer/cut-xml-streamer.c: support test iterator. * cutter/cut-test.[ch] (cut_test_emit_result_signal): add. * cutter/cut-test-*.c: use cut_test_emit_result_signal(). * test/: follow the below changes. * cutter/cut-stream-parser.c: support start-time parsing. * cutter/cut-test-result.[ch]: add start-time to test result. * cutter/cut-test-context.c (cut_test_context_emit_signal): cleanup. * cutter/cut-test.[ch] (cut_stop_timer): remove needless codes. * test/: follow the below changes. * cutter/cut-stream-parser.c: support start-time parsing. * cutter/cut-test.c (cut_test_to_xml_string): add start-time to XML. * gcutter/gcut-assertions.h (gcut_assert_equal_time_val): add. * cutter/cut-test.[ch], test/test-cut-test.c: add start time to test. * module/report/cut-xml-report.c (cb_test_signal): indent test result. * cutter/cut-diff.[ch], cut-utils.c, cutter/cut-public.h, test/test-cut-assertions.c, test/test-cut-diff.c, test/test-cut-utils.c: support folded diff. 2008-07-25 Kouhei Sutou * doc/tutorial/senna.rd.ja: don't make cutter-senna. use suite-senna-test.c. 2008-07-21 Kouhei Sutou * README*: fix RD syntax errors. 2008-07-18 Kouhei Sutou * README*: improve sub title. 2008-07-16 Kouhei Sutou * module/report/Makefile.am: fix a build bug on non PDF report available environment. * README*: add Kazumasa Matsunaga to thanks list. Thanks!!! * module/report/cut-pdf-report-factory.c (create): add missing static. * test/test-gcut-assertions.c: fix tests. * html/index.html: add a link to features page. 2008-07-15 Kouhei Sutou * misc/release.rb: remove RD link markup from announce text. * configure.ac: 1.0.3 -> 1.0.4. * test/: don't use deprecated symbols. * NEWS*: add entries for 1.0.3. * FEATURES*: update. * misc/rd2refentry-lib.rb: support easy link to reference manual. * gcutter/gcut-test-utils.h, doc/reference/ja.po: update document. * gcutter/gcut-public.h: add missing #include. * gcutter/gcut-list.[ch] (gcut_list_string_new, gcut_list_string_free): add. * test/test-gcut-test-utils.c: add. * test/Makefile.am: add test/test-gcut-test-utils.c. * FEATURES*: cut-gassertions -> gcut-assertions. * cutter/cut-assertions.h, gcutter/gcut-assertions.h: fix indent. * doc/reference/ja.po: update. * test/: cleanup #include. * test/test-cut-assertions.c: remove needless #include. * doc/reference/Makefile.am (DOC_SOURCE_DIR): use top directory. * doc/reference/cutter-docs.sgml: remove a duplicated line. * gcutter/gcut-test-utils.h: fix a typo. * cutter/Makefile.am (libcutter_la_LIBADD): use $(top_builddir) not $(builddir). * Makefile.am (update-po): include gcutter/. * Makefile.am, configure.ac, cutter/, gcutter/, test/: cut-g* -> gcut-*. * configure.ac, test/test-cutter.c: check GTK+ is built with debug mode on configure not runtime. * test/Makefile.am (test_cutter_la_LIBADD): don't link GTK+. * test/lib/Makefile.am (AM_LDFLAGS): don't add version. * module/report/cut-xml-report.c (output_to_file): check return value of fwrite() and retry at most 3 times. * test/lib/Makefile.am (AM_LDFLAGS): use $(libdir) not $(abs_builddir) because $(abs_builddir) isn't supported automake < 1.10. :< * test/test-cutter.c (test_help_all): use G_ENABLE_DEBUG not GTK_NOTE. * test/lib/Makefile.am: add -rpath to make .so. 2008-07-15 Hiroyuki Ikezoe * test/test-cutter.c: added --gtk-debug, --gtk-no-debug, etc. etc. if GTK_NOTE is defined. The macro is defined in gtk/gtkdebug.h if G_ENABLE_DEBUG is defined so it can be used for check whether GTK+ is compiled with DEBUG flag. * test/test-cutter.c: Check GTK+ help string has "gtk-debug". 2008-07-14 Kouhei Sutou * FEATURES*: update. * doc/reference/ja.po: remove obsoleted messages. * misc/rd2refentry-lib.rb, doc/reference/Makefile.am: support po. * cutter/cutter.h (cut_add_data), doc/reference/: add a link to CutDestroyFunction. * doc/reference/: support cut-gtest-utils.h and cut-types.h. * cutter/cut-public.h, cutter/cut-gassertions.h, cutter/cut-gassertions-helper.h: move some definitions to ... * cutter/cut-gtest-utils.h, cutter/cut-types.h: ... here to be documented. * cutter/cut-test-context.c (cut_test_context_take_g_list): copy and free passed list. * cutter/cut-gassertions.h: improve document. * doc/reference/ja.po: update. * cutter/cut-gassertions.h (cut_assert_g_error): g_error -> error. * doc/reference/cutter-docs.sgml: don't use capital form for id. * FEATURES*, README*: update. * doc/reference/: support FEATURES*. * misc/rd2refentry-lib.rb: support local reference. * cutter/cut-assertions.h: reorder. assertions are above, others are below. * FEATURES.ja: add. * FEATURES, README*: update. * doc/reference/: update document. * cutter/cutter.h: use "data driven test". * cutter/cut-experimental.h (cut_add_data): move to ... * cutter/cutter.h: ... here. * test/test-cut-loader.c (test_load_test_iterator): run loaded test iterator. 2008-07-13 Kouhei Sutou * test/test-cut-stream-parser.c (test_pass_assertion): add. * cutter/cut-iterated-test.c: implement prepare. * cutter/cut-test.[ch]: virtualize prepare. * cutter/cut-test-runner.c: support iterated test. * module/ui/cut-console-ui.c: support test iterator and iterated test. * test/test-cut-stream-parser.c (test_complete_test_iterator): add. * cutter/cut-run-context.[ch] (cut_run_context_prepare_iterated_test): add. * cutter/cut-test-runner.c: support prepare_iterated_test. * cutter/cut-stream-parser.c: support iterated test. * test/test-cut-stream-parser.c (test_start_iterated_test) (test_complete_iterated_test): add. * cutter/, test/: CutTestContext and CutRunContext have CutTestIterator. * test/: test_object -> test. * cutter/cut-stream-parser.c: support test iterator. * cutter/cut-test-context.[ch] (cut_test_context_get_test_iterator) (cut_test_context_set_test_iterator): add. * cutter/cut-test-iterator.h, cutter/cut-iterated-test.h: move typedef to ... * cutter/cut-private.h: ... here. * test/test-cut-stream-parser.c (test_ready_test_iterator) (test_start_test_iterator): add. * test/test-cut-test-context.c (test_xml_with_test_iterator): add. * test/test-cut-test-iterator.c: add test for cut_test_iterator_get_n_tests(). * configure.ac, test/fixtures/loader/Makefile.am: add test/fixtures/loader/iterator/. * test/fixtures/loader/iterator/: add. * test/test-cut-loader.c (test_load_test_iterator): add. * test/test-cut-test-iterator.c (test_pending, test_notification) (test_omission): add. * test/test-cut-test-iterator.c (test_error_in_data_setup): add. * test/test-cut-test-iterator.c (test_error): add. * test/test-cut-test-iterator.c: add. * test/Makefile.am: add test-cut-test-iterator.c. * test/test-cut-gassertions.c (test_equal_g_list_int), test/test-cut-report-xml.c (test_plural_reports): follow the following changes. * test/lib/cuttest-utils.[ch] (cuttest_result_string_list_new) (cuttest_result_string_list_new_from_result): add. * test/lib/cuttest-assertions.h: function -> macro. * module/ui/cut-console-ui.c (print_results): don't reverse each. * cutter/cut-run-context.c (cut_run_context_get_results): return collect order results. * cutter/cut-gassertions.h: use cut_append_diff(). * cutter/cut-test-utils.h (cut_append_diff): add. * cutter/cut-public.h, cutter/cut-utils.c (cut_utils_append_diff): add. * cutter/cut-assertions.h: use cut_append_diff(). * cutter/cut-test-iterator.c (run): pass test_context to signal. * cutter/cut-test-case.c: remove needless #include. 2008-07-12 Kouhei Sutou * test/lib/cuttest-utils.c (cuttest_result_summary_list_new_from_run_context), test/lib/cuttest-assertions.h (cut_assert_test_result_summary): support n_successes. * test/test-cut-iterated-test.c, test/test-cut-gassertions.c, test/test-cut-assertions.c: follow the above changes. * cutter/cut-report.c: expand macro. * test/test-cut-pipeline.c: use iterated test. * test/loader/fixtures/pipeline: split each result to each test file to get correct test success result. * configure.ac, test/: dummy -> stub. * configure.ac, test/fixtures/pipeline/: remove _test. * configure.ac, test/: move test/*_dir to test/fixtures/. * test/: dummy -> stub. * cutter/cut-list.c (inspect_string): format NULL as NULL not "(null)". * test/test-cut-gassertions.c (test_equal_g_list_string_both_null) (test_equal_g_list_string_other_null): add. * test/test-cut-iterated-test.c: fix test. * test/lib/cuttest-assertions.h (cut_assert_test_result_summary): use cut_assert_equal_g_list_uint(). * test/lib/cuttest-utils.[ch] (cuttest_result_summary_list_new) (cuttest_result_summary_list_new_from_run_context): add. * cutter/cut-list.[ch] (cut_list_equal_uint) (cut_list_inspect_uint): add. * cutter/cut-test.h (CutIteratedTestFunction): move to ... * cutter/cut-iterated-test.h: ... here. * cutter/cut-gassertions.h (cut_assert_equal_g_list_uint): add. * test/test-cut-gassertions.c (test_equal_g_list_uint): add. * cutter/cut-test-context.c, cutter/cut-gpublic.h (cut_test_context_take_g_list): add. * cutter/cut-gassertions-helper.h (cut_take_g_list): add. * test/test-cut-gassertions-helper.c (test_take_g_list): add. * cutter/cut-test-iterator.c (run): fix memory leak. * test/test-cut-stream-parser.c (test_start_test_with_data): add. * cutter/cut-stream-parser.c: support test-data parsing. * test/test-cut-test-context.c (test_xml_with_test_data): add. * cutter/cut-test-context.c (cut_test_context_to_xml_string): support test data XML serialization. * cutter/cut-test-data.c (cut_test_data_to_xml) (cut_test_data_to_xml_string): implement. * test/test-cut-test-data.c: add tests for to_xml family. * test/test-cut-test-data.c: add. * test/Makefile.am: add test-cut-test-data.c. 2008-07-11 Kouhei Sutou * test/test-cut-test-context.c (test_set_data): add. * cutter/cut-test-iterator.c: fix setup/teardown bug. * cutter/cut-test-case.[ch] (cut_test_case_run_setup) (cut_test_case_run_teardown): export. * sample/cairo/: use iterated test. * cutter/cut-test-context.[ch] (cut_test_context_set_data): add. * cutter/cut-iterated-test.[ch]: add. * cutter/Makefile.am: add cut-iterated-test.[ch]. * cutter/cut-test.c: virtualize run method. * cutter/cut-test-case.c: use virtual run method. * cutter/cut-test-iterator.[ch]: use virtual run method and CutIteratedTest. * cutter/cut-test-result.c (cut_test_result_get_test_name): support test data name. * module/ui/cut-console-ui.c: suppress a warning. * cutter/cut-test-result.c, module/ui/cut-console-ui.c: improve output. * cutter/cut-test-iterator.c: don't unbind data. * cutter/cut-test-iterator.c (cut_test_iterator_run): call test_run_context_prepare_test_iterator(). * cutter/cut-test-runner.c: connect test iterator related signals. * cutter/cut-run-context.[ch]: add test iterator related signals. 2008-07-10 Kouhei Sutou * cutter/: add CutTestData and CutTestIterator. need to implement CutIteratedTest. still too buggy. * test/test-cut-test-result.c: follow the above changes. * cutter/: add experimental iterated test support. (just work for now) * test/Makefile.am, test/test-cut-iterated-test.c: add a sample test. THIS TEST FAILS FOR NOW!!! 2008-07-03 Kouhei Sutou * module/ui/cut-gtk-ui.c: use default: for switch (status). * module/report/cut-pdf-report.c: draw chart by GOffice. * module/report/cut-pdf-report-factory.c: initialize and shutdown GOffice. * module/report/Makefile.am: add GOFFICE_{CFLAGS,LIBS}. * cutter/cut-public.h (CUT_TEST_RESULT_LAST): add. * configure.ac: detect GOffice. 2008-06-27 Kouhei Sutou * configure.ac: 1.0.2 -> 1.0.3. * NEWS*: update. * cutter/, doc/: fixture_path -> fixture_data_path. * doc/reference/ja.po: update. * cutter/cut-test-utils.h: fix typos. * m4macros/cutter.m4: don't add 'coverage' rule one more times. * cutter/cut-assertions.h: include cut-test-utils.h. * cutter/cut-test-utils.h: split from ... * cutter/cut-assertions-helper.h: ... here. * cutter/Makefile.am, doc/reference/Makefile.am, doc/reference/cutter-docs.sgml: add cut-test-utils.h. * configure.ac: support cutter/cut-version.h. * cutter/cut-version.h.in: add. * cutter/cut-main.h, cutter/cutter.h: include cut-version.h. * doc/reference/cutter-docs.sgml: add new symbols in 1.0.2 link. * doc/reference/ja.po: update. * cutter/cut-assertions.h: fix typos. 2008-06-24 Kouhei Sutou * test/test-cut-assertions.c (test_path_not_exist): add. * test/test-cut-assertions.c (test_error_errno): add. * test/test-cut-assertions.c: file_exist -> path_exist. * cutter/cut-gassertions.h (cut_assert_remove_path): add. * cutter/cut-assertions.h (cut_error_errno, cut_assert_path_not_exist): add. (cut_assert_path_exist): add and deprecate ... (cut_assert_file_exist): ... this. * cutter/cut-utils.[ch] (cut_utils_remove_path) (cut_utils_remove_path_recursive): add. * cutter/cut-public.h, cutter/cut-utils.c (cut_utils_build_path) (cut_utils_remove_path_recursive_force): add. * cutter/cut-assertions-helper.h (cut_remove_path): add. * test/test-cut-utils.c (test_remove_path_recursive): add. * cutter/cut-test-context.h (cut_test_context_build_fixture_path): move to ... * cutter/cut-public.h: ... here. * cutter/cut-assertions-helper.h (cut_build_fixture_path): add. * configure.ac, test/fixtures/**/Makefile.am: add Makefile.am. 2008-06-23 Kouhei Sutou * cutter/cut-assertions.h, cutter/cut-public.h, cutter/cut-test-context.[ch], cutter/cut-utils.c: show a file name of fixture data. 2008-06-22 Kouhei Sutou * test/test-cut-assertions.c, cutter/cut-public.h, cutter/cut-assertions.h, cutter/cut-assertions-helper.h: base_dir -> dir. * cutter/cut-assertions.h (cut_assert_equal_fixture_data_string), test/test-cut-assertions.c, test/fixtures/assertions/: add a assertion for fixture data. 2008-06-20 Kouhei Sutou * cutter/cut-utils.[ch], cutter/cut-test-context.[ch], cutter/cut-public.h, cutter/cut-assertions-helper.h: add fixture date implementation prototype. TOO DIRTY! Need cut_assert_equal_fixture_data_string(). * test/test-cut-fixture-data.c: add. * test/fixtures/data/1.txt: add. Need Makefile.am! * cutter/cut-pipeline.c (run_async): check PID isn't 0. * ./: an Unit -> a Unit. 2008-06-20 Hiroyuki Ikezoe * FEATURES: Added. 2008-06-19 Kouhei Sutou * cutter/cut-loader.c: enable attribute support for MS Windows DLL.x * cutter/cut-module.c (_cut_module_show_error): remove a needless variable. * test/test-cutter.c: strict. * cutter/cut-main.c: use EXIT_FAILURE. * cutter/cut-gpublic.h, cutter/cut-utils.c (cut_assert_g_error): define. * cutter/cut-gassertions.h (cut_assert_g_error): use cut_utils_inspect_g_error(). * test/test-cutter.c: reset LANG in teardown. 2008-06-19 Hiroyuki Ikezoe * test/test-cutter.c: Inherit all environment values from parent process to child process except LANG value. * test/test-cutter.c: Use "\r\n" for line feed code on Windows. * test/test-cutter.c: Quote cutter command since g_shell_parse_argv() cannot handle backslash. * test/test-cutter.c: Also quote cutter command without option. * cutter/cut-main.c, test/test-cutter.c: Use EXIT_FAILURE. * cutter/cut-module.c: Show g_module_error() message directly. * cutter/cut-pipeline.c: Quote cutter command and test target directory. * test/test-cutter.c: Added some description for Gtk+ for Windows. * test/test-cut-module.c: Unload modules in shutdown(). 2008-06-18 Kouhei Sutou * cutter/cut-main.[ch] (cut_set_cutter_command_path): export for testing. * test/test-cut-main.c: add a test for cut_get_cutter_command_path(). * configure.ac: don't add $(EXEEXT) to CUTTER. * cutter/cut-loader.[ch]: CutLoader has binary type. * test/test-cut-test-attribute.c: follow the above change. * cutter/cut-loader.[ch] (cut_loader_support_attribute): require CutLoader *. * test/test-cut-test-attribute.c: omit attribute loading test on no attribute loading support environment. * cutter/cut-loader.h (cut_loader_support_attribute): add. * cutter/cut-loader.c: disable attribute collection on non-BFD build. * cutter/cut-test-suite.c: use cut_get_cutter_command_path() not cut_utils_get_cutter_command_path(). * cutter/cut-test-suite.c, cutter/cut-pipeline.c: use cut_utils_get_cutter_command_path(). * cutter/cut-utils.[ch] (cut_utils_get_cutter_command_path): add. * cutter/cut-main.[ch] (cut_get_cutter_command_path): add. * cutter/cut-process.c (cut_process_fork): set ENOSYS on Windows. * test/test-cut-process.c (test_fork): check ENOSYS. * cutter/cut-utils.c, cutter/cut-public.h (cut_utils_inspect_string): add missing const. 2008-06-18 Hiroyuki Ikezoe * test/test-cut-process.c: Pass cut_process_fork() test on Windows. * cutter/cut-pipeline.c: NULL check barrier in create_child_out_channel(). * module/streamer/cut-xml-streamer-factory.c: NULL check barrier in create_channel(). * cutter/cut-pipeline.c: Do not set GSpawnChildSetupFunc. GLib document says setting the function is dangerous. * test/test-cutter.c: Use cut_utils_get_cutter_command_path() instead of getting CUTTER environment value. * test/test-cutter.c: NULL check barrier for SETENV macro. 2008-06-17 Kouhei Sutou * test/test-cut-test-suite.c: remove needless SEGV handler. * cutter/cut-utils.c, cutter/cut-public.h (cut_utils_inspect_string): add. * cutter/cut-assertions.h (cut_assert_equal_string): add NULL guard. * cutter/cut-utils.[ch] (cut_win32_build_module_dir_name): add. * cutter/cut-listener-utils.h: use cut_win32_build_module_dir_name(). * cutter/cut-listener-utils.h: use relative path on Windows. 2008-06-17 Hiroyuki Ikezoe * configure.ac: Remove -mwindows option. The options is not needed for console program. 2008-06-16 Kouhei Sutou * cutter/cut-loader.c: don't collect attributes for Mac binaries. * cutter/cut-loader.c (collect_symbols): remove leading chars. * configure.ac: declare fallback environ variable. * test/Makefile.am (LIBS): use top_builddir not builddir for old system. * configure.ac, cutter/Makefile.am, cutter/cut-main.c: improve BFD detection. * test/cuttest*: move to ... * test/lib/: ... here. 2008-06-16 Hiroyuki Ikezoe * test/test-cut-loader-suite.c, test/test-cut-test-suite.c, test/test-cut-loader.c, test/test-cut-test-attribute.c: Use G_MODULE_SUFFIX insted of "so". * test/*/Makefile.am: Append -no-undefined option. * test/tets-cut-test-suite.c: test_crashed_signal() is only available on Unix. * cutter/cut-test-context.c: cut_omit() instead of cut_error() if cut_test_context_fork() is invoked on Windows. * test/test-cut-fork.c: Do not run test_fail_in_forked_process() on Windows. 2008-06-16 Kouhei Sutou * **/Makefile.am: use AM_LDFLAGS not LDFLAGS. * test/Makefile.am: cuttest-utils isn't a module. * libcutter.pc.in (Libs): move to ... * cutter.pc.in (Libs): ... here. 2008-06-15 Kouhei Sutou * TUTORIAL*: update. * sample/stack/configure.ac: use m4_ifdef. * sample/stack/test/Makefile.am: do nothing on no Cutter environment. * sample/stack/test/Makefile.am (LDFLAGS), sample/stack/src/Makefile.am (LDFLAGS): add -no-undefined option. * sample/stack/test/run-test.sh: remove needless --color=auto option. * test/Makefile.am: make DLL. * cutter/cut-utils.[ch] (cut_win32_build_factory_module_dir_name): add. * cutter/cut-ui-factory-builder.c, cutter/cut-streamer-factory-builder.c, cutter/cut-report-factory-builder.c, cutter/cut-module-factory-utils.c: use relative path on Windows. * cutter/cut-module.c (cut_module_load_modules_unique): duplicate read entries. * cutter/cut-main.c (cut_init): use relative path for LOCALEDIR. * cutter/cut-utils.[ch] (cut_win32_base_path): define. 2008-06-13 Kouhei Sutou * cutter/Makefile.am: add -no-undefined. * module/ui/Makefile.am, module/streamer/Makefile.am, module/report/Makefile.am: link to libcutter. * configure.ac: detect Windows related configurations. * test/factory_test_dir/type1/Makefile.am: don't link. * configure.ac: add --disable-gstreamer option. * sample/glib/uri.c: remove needless test. * cutter/cut-test-context.c: fork()/waitpid() doesn't work on Windows. * cutter/cut-assertions.h (cut_assert_errno): use current_errno variable name instead of _errno. * cutter/cut-utils.c: add ifdef check. * cutter/cut-pipeline.c: define fallbacks on Windows. * cutter/cut-process.c: CutPipeline do nothing on Windows. * gst-plugins/gst-cutter-test-runner.c: include missing . * cutter/cut-test-suite.c: backtrace isn't supported on Windows. * configure.ac: add check. * cutter/cut-pipeline.c: include . * cutter/cut-test.h, cutter/cut-test-result.h: don't include . * cutter/cut-run-context.c: include . * cutter/cut-test-context.c: add ifdef check. * configure.ac: add check. * configure.ac: 1.0.1 -> 1.0.2. * configure.ac (SF_REPOS): fix a path. * cutter/cut-report-factory-builder.c (create_option_entries): mark translable. * doc/reference/cutter-docs.sgml: add index of new symbols in 1.0.1 section. * doc/reference/ja.po: update. * Makefile.am (update-po): include module/. 2008-06-13 Hiroyuki Ikezoe * configure.ac: Added -DG_DISABLE_DEPRECATED to CFLAGS. * cutter/cut-run-context.c: break! break! 2008-06-13 Kouhei Sutou * m4macros/cutter.m4 (coverage): don't use abs_top_srcdir. * NEWS*: update. * m4macros/cutter.m4 (coverage): only report project related files. 2008-06-04 Kouhei Sutou * gtk-doc.make: use " not '. * gtk-doc.make: add missing '/'. 2008-06-03 Kouhei Sutou * cutter/cut-loader.c: include if libbfd is unavailable. 2008-05-30 Kouhei Sutou * README*: change repository path: https://cutter.svn.sourceforge.net/svnroot/cutter/trunk -> https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk If you have a working copy, do switch: % cd ../cutter % svn switch https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk * cutter/cut-run-context.c: cleanup. 2008-05-28 Kouhei Sutou * gst-plugins/gst-cutter-test-runner.c: use stream-function. * test/test-cut-xml-streamer.c: don't fork. * module/streamer/cut-xml-streamer.c: abstract stream method. * module/streamer/cut-xml-streamer-factory.c: use file descriptor based stream method. * cutter/cut-streamer.h (CutStreamFunction): add. * cutter/cut-module.c (_cut_module_show_error): remove needless g_strdup(). 2008-05-27 Kouhei Sutou * gst-plugins/run-test.sh: cleanup. 2008-05-27 Hiroyuki Ikezoe * cutter/module -> module: Moved modules directory. * */run-test.sh: Follow the above change. 2008-05-27 Kouhei Sutou * gst-plugins/test/Makefile.am: surrounded with if HAVE_GSTREAMER ... endif. * configure.ac: add missing gst-plugins/test/Makefile. 2008-05-26 Kouhei Sutou * README*, configure.ac: require GLib >= 2.16. 2008-05-26 Hiroyuki Ikezoe * cutter/cut-report-factory-builder.c: Plugged memory leak. * cutter/cut-module-factory-utils.c: Plugged memory leak. * cutter/cut-loader.c: Plugged memory leak. * cutter/cut-main.c: Plugged memory leak. * cutter/module/streamer/Makefile.am: Fix typo. report -> streamer. CutXMLStreamer module was installed in report module directory! * cutter/module/*/Makefile.am: Added $(top_builddir)/cutter/libcutter.la to LIBADD since symbols in libcutter.so can not be resolved if the module is loaded from other modules(ex. GStreamer modules). 2008-05-23 Hiroyuki Ikezoe * cutter/cut-run-context.c: Plugged memory leak. * cutter/cut-pipeline.c, cutter/cut-process.c, cutter/module/streamer/cut-xml-streamer.c: Use g_io_channel_win32_new_fd() for Windows environment. 2008-05-22 Kouhei Sutou * test/test-cut-loader-suite.c, test/loader_suite_test_dir/, configure.ac, test/Makefile.am: add tests for cut_loader_load_test_suite(). * sample/gtk+/: use warmup() mechanism. * cutter/cut-repository.c: use cut_loader_load_test_suite(). * cutter/cut-loader.c (cut_loader_load_test_suite): add. * cutter/cut-test-suite.[ch]: - cut_test_suite_new() requires some arguments. - add cut_test_suite_new_empty(). * cutter/, test/: use cut_test_suite_new_empty() instead of cut_test_suite_new(). * configure.ac: don't use temporary variable. * configure.ac: add missing 's'. * configure.ac: use AC_MSG_CHECKING and AC_MSG_RESULT instead of AC_CACHE_CHECK. * gst-plugins/Makefile.am: add missing 's'. * configure.ac: add --with-gst-pluginsdir option. 2008-05-21 Kouhei Sutou * doc/tutorial/senna.rd.ja: add. 2008-05-21 Hiroyuki Ikezoe * gst-plugins: Added. 2008-05-20 Kouhei Sutou * misc/release.rb: maybe support the current SF.net upload mechanism. * configure.ac: 1.0.0 -> 1.0.1. * NEWS*: update. * cutter/cut-stream-parser.c (end_test_context): fix memory leak. * cutter/cut-stream-parser.[ch] (cut_stream_parser_end_parse): add. * cutter/cut-pipeline.c: call cut_stream_parser_end_parse(). * doc/reference/ja.po: update. * NEWS*: update. * cutter/module/ui/cut-gtk-ui.c: use cut_run_context_get_elapsed(). * cutter/cut-run-context.[ch] (cut_run_context_get_elapsed): add. * cutter/cut-stream-parser.c: support elapsed in test object. * cutter/cut-test.c: add elapsed into XML format. * test/test-cut-xml-streamer.c, test/test-cut-test-context.c, test/test-cut-report-xml.c, test/test-cut-pipeline.c: follow the above change. * cutter/cut-assertions.h (cut_assert_match_with_free): add. * cutter/cut-test.[ch], cutter/cut-test-container.[ch], test/test-cut-test.c: add cut_test_set_elapsed(). * cutter/cut-pipeline.c (read_stream): don't read all data at once. * cutter/cut-test-runner.c (runner_run): emit start-run and complete-run. * cutter/cut-runner.c (cut_runner_run): don't emit complete-run. * cutter/cut-run-context.c (cut_run_context_start): don't emit start-run. * sample/glib/run-test.sh: set CUT_STREAMER_*_DIR environment variable. * cutter/cut-stream-parser.c: call prepare_*. * cutter/cut-test-runner.c: use virtual prepare_*. * cutter/module/streamer/cut-xml-streamer.c: support omission. * cutter/cut-run-context.[ch]: increment n_tests++ before test case setup() not test run. * test/test-cut-assertions.c, test/test-cut-gassertions.c: follow the above change. * test/cuttest-assertions.h (cut_assert_test_result_summary): use macro. * cutter/cut-run-context.[ch] - make prepare_* virtual functions. - (cut_run_context_crash, cut_run_context_set_backtrace): add. * cutter/cut-test-result.c (result_status_to_name): support omission. 2008-05-20 Hiroyuki Ikezoe * cutter/cut-run-context.c: Increment each test status count in virtual function instead of callback functions of receiving CutTest signals since CutPipeline does not receive any signals of CutTest object. * cutter/cut-run-context.c: backtrace string is stored in crashed virtual function instead of callback function of "crashed-test-suite" signal. * test/test-cut-pipeline.c, test/pipeline_test_dir/error-test/error-test.c: Added omission signal test and get_n_XX() tests. * cutter/module/ui/cut-gtk-ui.c: Plugged memory leak. * cutter/module/ui/cut-gtk-ui.c: Do not use g_idle_add() for update button state. * cutter/module/ui/cut-gtk-ui.c: Do not use g_idle_add() for "start-test-suite" and "complete-test-suite" message. * cutter/module/ui/cut-gtk-ui.c: Remove CutTestSuite object from CutGtkUI private. * cutter/module/streamer/cut-xml-streamer.c: Add mutex lock when write XML string to io channel since the strings is jammed with multi thread. * cutter/cut-pipeline.c: Reduce read buffer size. 2008-05-19 Kouhei Sutou * cutter/module/streamer/cut-xml-streamer.c (cb_pass_assertion): use stream(). * cutter/module/ui/cut-gtk-ui.c (idle_cb_update_summary): invert title order. * test/test-cutter.c (test_help_all): add --stream-fd option. * cutter/cut-process.c: use cut_utils_close_pipe(). * cutter/cut-utils.[ch] (cut_utils_close_pipe): add. * cutter/cut-pipeline.c: use a FD only for cutter to communicate streamer. * cutter/module/streamer/cut-xml-streamer.c: stream specified FD. * cutter/module/streamer/cut-xml-streamer-factory.c: add --stream-fd option. * cutter/cut-stream-parser.c: invert. * NEWS*: update. * cutter/cut-stream-parser.c: support . * cutter/module/ui/cut-gtk-ui.c: handle error. * doc/reference/: update. * TODO: add auto-cutter. * cutter/module/ui/cut-console-ui-factory.c: add *term-color TERM to automatically colorized targets. * cutter/cut-pipeline.c: not . * test/test-cut-test-suite.c (run_test_with_filter): add const. * cutter/cut-stream-parser.c: cleanup. * test/test-cut-test-result.c, test/test-cut-stream-parser.c: follow the above change. * cutter/cut-stream-parser.c, test/test-cut-test-result.c: improve option parsing. * cutter/cut-pipeline.c: improve stream reader. * cutter/module/ui/cut-console-ui.c: support system error. * cutter/cut-xml-parser.[ch], test/test-cut-xml-parser.c: remove. * cutter/Makefile.am, test/Makefile.am, cutter/cut-test-result.c: remove CutXMLParser. * cutter/cut-stream-parser.[ch]: support top level . * cutter/cut-test-result.[ch]: use CutStreamParser not CutXMLParser. * cutter/cut-run-context.[ch]: add error signal. * cutter/cut-marshalers.list (VOID:STRING,STRING): add. * cutter/cut-pipeline.c: support error signal. * cutter/cut-pipeline.c: use g_io_channel_read_to_end() instead of g_io_channel_read_line(). * cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: support . 2008-05-19 Hiroyuki Ikezoe * cutter/cut-test-runner.c, cutter/cut-pipeline.c: Nullify unused interface function to fix seg fault. * cutter/cut-run-context.[c|h] (cut_run_context_set_command_line_args): Added. * cutter/cut-main.c, cutter/cut-pipeline.c: Pass original command line args to child cutter. cutter/cut-pipeline.[c|h]: Now cut_pipeline_new() needs no argument. test directory is obtain cut_run_context_get_test_directory(). * cutter/cut-utils.[c|h]: Added cut_utils_strv_concat(). * cutter/cut-pipeline.c: Pass original command line args. * cutter/cut-repository.[c|h]: cut_repository_set_dirs() -> cut_repository_set_directories() and const cast. * cutter/cut-run-context.[c|h]: cut_run_context_set_dirs() -> cut_run_context_set_directories() and const cast. * cutter/cut-main.c: Use cut_run_context_set_directories() and cast. * cutter/cut-pipeline.[c|h]: Added cut_pipeline_new_from_run_context(). * cutter/cut-test-case.[c|h], cutter/cut-utils.[c|h], cut-test-container.[c|h], cutter/cut-test-suite.[c|h], cutter/cut-repository: const cast. * cutter/module/ui/cut-gtk-ui.c: Use CutPipeline. * cutter/module/ui/cut-gtk-ui.c: Connect to "complete-run" signal instead of "complete-test-suite". * cutter/module/ui/cut-gtk-ui.c: "complete-run" signal accompany with gboolean value. instead of "complete-test-suite". * cutter/cut-run-context.c, cutter/cut-pipeline.c (cut_pipeline_new_from_run_context): Obtain command line arguments from CutRunContext. 2008-05-19 Kouhei Sutou * cutter/: stack trace -> backtrace. * cutter/cut-test-result.c: add into . * test/test-cut-test-result.c, cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: follow the above change. 2008-05-18 Kouhei Sutou * cutter/cut-stream-parser.c, cutter/cut-pipeline.c: fix circular reference problem. * cutter/cut-test-result.c, test/test-cut-test-result.c: don't output empty information. * cutter/cut-pipeline.c: use CutStreamParser. * cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: support and . * cutter/module/streamer/cut-xml-streamer.c, test/test-cut-xml-streamer.c: stream and . * cutter/cut-test-result.[ch] (cut_test_result_new_empty): add. * cutter/cut-run-context.[ch]: remove CutTestContext * from *_test_case signal. * cutter/cut-test-result.[ch] (cut_test_result_to_xml): add. * cutter/module/report/cut-xml-report.c, cutter/module/streamer/cut-xml-streamer.c: use cut_test_result_to_xml(). * cutter/module/streamer/cut-xml-streamer.c: cb_test_signal -> cb_test_result. * cutter/module/streamer/cut-xml-streamer.c: stream . * cutter/cut-run-context.[ch]: pass_test -> pass_assertion. * cutter/cut-stream-parser.c, test/cut-test-stream-parser.c: add multiple option name check. * cutter/cut-gassertions-helper.h (cut_take_g_error): add. * cutter/cut-test-context.c, cutter/cut-gpublic.h (cut_test_context_take_g_error): add. * cutter/cut-stream-parser.c, test/cut-test-stream-parser.c: support and . * cutter/cut-stream-parser.c, test/cut-test-stream-parser.c: support . * cutter/cut-stream-parser.c, test/cut-test-stream-parser.c: support . * cutter/cut-test.[ch] (cut_test_new_empty): add. * cutter/cut-test-context.[ch] (cut_test_context_new_empty): add. * cutter/cut-stream-parser.c, test/cut-test-stream-parser.c: support . * cutter/cut-test-case.[ch] (cut_test_case_new_empty): add. * cutter/cut-stream-parser.c, test/cut-test-stream-parser.c: support . * cutter/module/streamer/cut-xml-streamer.c, test/test-cut-xml-streamer.c: stream . * cutter/cut-stream-parser.c, test/cut-test-stream-parser.c: support . * test/test-cut-stream-parser.c: cleanup. * cutter/cut-gassertions.h, test/test-cut-gassertions.c: add cut_assert_g_error(). * TODO: remove cut_assert_g_error(). * test/test-cut-stream-parser.c: more strict. 2008-05-17 Kouhei Sutou * TODO: add cut_assert_g_error(). * cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: support ready-test-suite. * cutter/cut-xml-parser.c: add NULL check. * cutter/module/streamer/cut-xml-streamer.c: stream all events. * test/test-cut-xml-streamer.c: follow the above changes. * cutter/cut-test-context.[ch] (cut_test_context_to_xml, cut_test_context_to_xml_string): add. * cutter/cut-utils.[ch] (cut_utils_append_xml_element_with_boolean_value): add. * test/test-cut-test-context.c: add tests for XML serialization. * cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: add . * cutter/module/streamer/cut-xml-streamer.c: print . * cutter/cut-test.[ch], cutter/module/ui/cut-console-ui.c: remove const. * cutter/module/streamer/cut-xml-streamer.c, test/test-cut-xml-streamer.c: output . * cutter/cut-utils.[ch] (cut_utils_append_xml_element_with_value): add. * cutter/cut-test.c, cutter/cut-test-result.c: use cut_utils_append_xml_element_with_value(). * cutter/cut-utils.[ch] (cut_utils_append_indent): add. * cutter/cut-test.c, cutter/cut-test-result.c: use cut_utils_append_indent(). * cutter/cut-utils.[ch] (cut_utils_filter_match): add _utils. * cutter/cut-test-container.c (cut_test_container_filter_children): follow the above change. * cutter/cut-repository.c (cut_repository_collect_loader): ditto. * cutter/cut-test.[ch] (cut_test_to_xml, cut_test_to_xml_string): add. * cutter/cut-test-case.c, cutter/cut-test-suite.c: follow the above changes. * cutter/cut-test-result.c: use cut_test_to_xml_string(). * cutter/module/streamer/cut-xml-streamer.c: -> . * cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: emit complete-run signal on end. * cutter/cut-pipeline.c: suppress warnings. * cutter/cut-stream-parser.c, test/test-cut-stream-parser.c: emit start-run signal on start. * cutter/Makefile.am, cutter/cut-stream-parser.[ch]: add CutStreamParser. * test/Makefile.am, test/test-cut-stream-parser.c: add. 2008-05-16 Kouhei Sutou * test/test-cut-pipeline.c, test/Makefile.am: use cuttest_get_base_dir(). * cutter/cut-pipeline.c: add signals. * test/test-cut-pipeline.c: fix increment. * test/test-cut-pipeline.c: format. * cutter/cut-pipeline.c (read_line): emit result signal. * test/test-cut-test-result.c (test_get_test_suite): use cut_assert_equal_pointer(). * cutter/cut-assertions.h (cut_assert_equal_pointer): add. * test/test-cut-assertions.c (test_equal_pointer): add. * cutter/cut-test-result.[ch] (cut_test_result_get_test_suite): add. * test/test-cut-test-result.c (test_get_test_suite): add. * test/test-cut-test-result.c: fix strange tests. * cutter/cut-test-context.[ch] (cut_test_context_set_failed): add. * test/test-cut-test-context.c: add a test for the above change. * cutter/cut-pipeline.c (child_watch_func): use EXIT_SUCCESS. * cutter/cut-runner.c (cut_runner_run): use run_async as default implementation. * cutter/cut-pipeline.c: remove run. * test/test-cut-pipeline.c: use cut_assert_{true,false}(). * Makefile.am (ACLOCAL_AMFLAGS): add. * cutter/cut-pipeline.[ch]: use CutRunContext as parent. * test/test-cut-pipeline.c: follow the above change. * cutter/cut-run-context.[ch]: add start-run and complete-run signals. * cutter/cut-runner.[ch]: add run_async. * cutter/, test/, sample/cairo/: add CutRunner interface. * cutter/, test/, sample/cairo/: CutRunner -> CutTestRunner. 2008-05-16 Hiroyuki Ikezoe * cutter/cut-listener-utils.h: Added utility macro. * test/Makefile.am, cutter/Makefile.am: cleanup files related to gcov. * cutter/cut-main.c, cutter/cut-run-context.[c|h]: Added --exclude option. * cutter/cut-main.c, cutter/cut-run-context.[c|h]: Separate --exclude option --exclude-file and --exclude-dir options. * cutter/cut-utils.[c|h], cutter/cut-container.c: filter_to_regexs() -> cut_utils_filter_to_regex() to use --exclude-XX options. * cutter/cut-repository.[c|h], cutter/cut-run-context.c: Set exclude-dir and exclude-file before create test suite. * cutter/cut-utils.[c|h], cutter/cut-test-container.c: match() -> cut_filter_match(). * cutter/cut-repository.c: Filter exclude files and directories. * test/pipiline_test_dir/: Added. * test/run-test.sh: Added --exclude-dir=pipeline_test_dir. * cutter/cut-pipeline.c: Use WIFEXITED() and WEXITSTATUS(). * cutter/cut-pipeline.c: Obtain source id of g_io_watch_add(). * cutter/cut-pipeline.c: Create io channel before invoke g_child_watch_add(). * cutter/cut-streamer-factory-builder.c: Create CutStreamer correctly. * cutter/cut-pipe.c: Do not return FALSE even if read_line() fails. Why? * cutter/cut-pipe.c: Read rest characters from pipe when exit child process. There are some GLib-CRITICAL errors, but all tests are passed now. 2008-05-15 Kouhei Sutou * cutter/cut-streamer-factory-builder.c (set_option_context): use 0 not NULL for char. * cutter/, test/: create CutRunContext. * test/test-cut-xml-streamer.c (test_streamer_success): use cut_assert_match(). * cutter/cut-assertions.h (cut_assert_match): fix a typo. * cutter/cut-assertions.h (cut_assert_match): add. * test/test-cut-assertions.c (test_match): add test for cut_assert_match(). * cutter/cut-utils.c, cutter/cut-public.h (cut_utils_regex_match): add. * sample/glib/regex.c (cut_assert_match_full): renamed from cut_assert_match(). * cutter/cut-loader.c: detect Mach-O bundle. * cutter/cut-loader.c (is_valid_symbol_name): add. * test/test-cut-test-attribute.c: remove needless casts. 2008-05-15 Hiroyuki Ikezoe * cutter/cut-stream.[c|h]: Added. It has no method yet. * cutter/module/ui/*.c. cutter/module/report/*.c: Rename filename. cut-(ui|report)-XX.c -> cut-XX-(ui|report).c, cut-(ui|report)-factory-XX.c -> cut-XX-(ui|report)-factory.c. * cutter/module/ui/*.c. cutter/module/report/*.c: Rename object name correspond to filename. * cutter/module/streamer/, cutter/cut-streamer-factory-builder.[c|h], cuttter/cut-contractory.c: Added CutXMLStreamer module. * test/run-test.sh, test/test-cutter.c: modify test data adapt to new streamer module. * test/test-cut-xml-streamer.c: Added. * cutter/cut-pipeline.[c|h]: Added. * cutter/cut-pipeline.[c|h]: Added cut_pipeline_run() and emit "complete" signal. * cutter/cut-pipeline.c: Create CutTestResult object from child process stdout text. 2008-05-14 Kouhei Sutou * gtk-doc.make: suppress warnings. * m4macros/cutter.m4: remove temporary function. * m4macros/cutter.m4: add --without-cutter. 2008-05-13 Kouhei Sutou * test/Makefile.am, test/test-cutter.c: include gtk.h if available. * test/test-cutter.c: add X11 backend check. * test/test-cutter.c: use g_get_prgname() not lt-cutter. * cutter/cut-utils.c, test/test-cut-utils.c: improve trivial check. * cutter/cut-test-suite.c: use sigaction() instead of signal(). * cutter/cut-test-context.c: assign cut_process_wait() result to a variable for BSD system. * autogen.sh: make customizable. 2008-05-13 Hiroyuki Ikezoe * m4macros/cutter.m4: Check "coverage" target existence before adding the target. * m4macros/cutter.m4: Remove AC_PROVIDE. 2008-05-12 Kouhei Sutou * configure.ac: 0.9.0 -> 1.0.0. * Makefile.am (release): depend dist. * README*: update. * NEWS*: update. * doc/reference/ja.po: update. * test/test-cut-assertions.c (test_file_exist): add. * cutter/cut-utils.c, cutter/cut-public.h (cut_utils_file_exist): add. * cutter/cut-assertions.h (cut_assert_file_exist): add. * m4macros/cutter.m4: - add AC_CHECK_GCUTTER. - don't require CUTTER/GCUTTER package. - add _AC_CHECK_CUTTER and _AC_CHECK_GCUTTER for AC_REQUIRE. 2008-05-11 Kouhei Sutou * test/test-cut-assertions.c (test_equal_string_with_diff): add. * cutter/cut-assertions.h (cut_assert_true, cut_assert_false): add. * cutter/cut-assertions.h (cut_assert_equal_string): ignore trivial diff. * cutter/cut-utils.c, cutter/cut-public.h (cut_utils_is_interested_diff): add. * test/test-cut-utils.c (test_is_interested_diff): add. 2008-05-09 Kouhei Sutou * doc/reference/: update. * cutter/cut-gassertions.h, cutter/cut-gpublic.h, cutter/cut-gassertions-helper.h, test/test-cut-gassertions-helper.c: add. * cutter/cut-test-context.c, cutter/cut-test-context.h, cutter/cut-gassertions.h: add cut_take_g_object(). * cutter/Makefile.am, test/Makefile.am: follow the above changes. * sample/gtk+/builder.c: remove gtkprintjob.h. 2008-05-09 Hiroyuki Ikezoe * cutter/cut-public.h, cutter/cut-test-context.c: Added cut_test_context_taken_string_array(). * cutter/cut-test-context.c: taken_strings_list -> taken_string_arrays. Use g_strfreev(). * cutter/cut-assertions.c: Added cut_assert_equal_string_array_with_free(). * cutter/cut-assersions-helper.h: Added cut_take_string_array(). * cutter/cut-assersions.h: Remove "do {". 2008-05-08 Kouhei Sutou * configure.ac: don't require gtk+-unix-print-2.0. * configure.ac: export HAVE_GTK. * test/test-cut-assertions.c (test_assert_message_with_format_string): add missing newline. 2008-05-08 Hiroyuki Ikezoe * m4macros/cutter.m4: AC_PROVIDE(AC_CHECK_CUTTER) for check whether cutter.m4 is installed or not. To check cutter.m4 installation, use AC_PROVIDE_IFELSE([AC_CHECK_CUTTER], [AC_CHECK_CUTTER]) in your configure.ac. 2008-05-07 Kouhei Sutou * cutter/cut-assertions.h (cut_assert_equal_string): more new line. 2008-05-07 Hiroyuki Ikezoe * m4macros/cutter.m4: Added "coverage-clean" target. 2008-05-07 Kouhei Sutou * test/test-cutter.c (test_help_all): support non-GTK+ environment. * configure.ac: 0.8.0 -> 0.9.0. * misc/release.rb: follow the recent SF.net HTML changes. * NEWS*: update. * cutter/cutter.h: mark 'Since: 0.8'. * cutter/cut-assertions.h, doc/reference/ja.po: add documents for cut_omit(). * cutter/cut-experimental.h: move CutTestAttribute to ... * cutter/cut-public.h: ... here. * doc/reference/ja.po: update. * doc/reference/Makefile.am, doc/reference/cutter-docs.sgml: add cut-experimental.h. * cutter/cut-experimental.h: add document. * configure.ac: 0.7.0 -> 0.8.0. * Makefile.am: move coverage target to ... * m4macros/cutter.m4: ... here. * configure.ac: use AM_MAINTAINER_MODE. * cutter/cut-sequence-matcher.c, test/test-cut-sequence-matcher.c: use g_slice. 2008-05-07 Hiroyuki Ikezoe * cutter/cut-sequence-matcher.c: Use properties. * am/coverage.am: Added to do "make coverage" * configure.ac, am/Makefile.am: Define automakedir. 2008-05-06 Kouhei Sutou * cutter/, test/: remove const from gchar ** and some gchar *. * cutter/cut-diff.c: make from and to property. * cutter/cut-diff.[ch]: - make CutDiffer public. - create CutDifferReadable. * test/test-cut-diff.c: add tests for readable diff. * cutter/cut-diff.c, test/test-cut-diff.c: add a test for readable diff. * cutter/cut-sequence-matcher.c, test/test-cut-sequence-matcher.c: sort matched info. * test/test-cut-sequence-matcher.c: add a test for to_indexes with junk filter. * cutter/cut-diff.c, test/test-cut-diff.c, test/test-cut-assertions.c: support replaced. * cutter/cut-sequence-matcher.c: set compare func. * test/test-cut-sequence-matcher.c: remove const. * cutter/cut-diff.c, test/test-cut-diff.c: support inserted. * cutter/, test/: remove const from gchar **. * cutter/cut-public.h, cutter/cut-diff.h (cut_diff_readable): make public. * cutter/cut-assertions.h (cut_assert_equal_string): support diff. * cutter/cut-assertions-helper.h (cut_take_diff): add. * test/test-cut-assertions.c (test_assert_message_with_format_string): follow the above changes. * cutter/cut-diff.c, test/test-cut-diff.c: support deleted. * cutter/Makefile.am cutter/cut-diff.[ch], test/Makefile.am, test/test-cut-diff.c: add. * cutter/cut-sequence-matcher.[ch]: remove const. 2008-05-05 Kouhei Sutou * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: begin -> from_index, end -> to_index. * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: support junk filter. * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: add cut_sequence_matcher_get_ratio(). * cutter/cut-assertions.h (cut_assert_equal_double): fix evaluation order. * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: add cut_sequence_matcher_get_operations(). * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: add cut_sequence_matcher_get_blocks(). 2008-05-04 Kouhei Sutou * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: cache matched. * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: add cut_sequence_matcher_get_matches(). * cutter/cut-list.[ch]: make cut_list_equal() and cut_list_inspect() public. * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: add 'get_' prefix. * cutter/cut-sequence-matcher.[ch]: add cut_sequence_matcher_char_new() and cut_sequence_matcher_string_new(). * test/test-cut-sequence-matcher.c: use cut_sequence_matcher_char_new() and cut_sequence_matcher_string_new(). * cutter/cut-sequence-matcher.[ch], test/test-cut-sequence-matcher.c: implement cut_sequence_matcher_longest_match(). * cutter/cut-assertions.h, cutter/cut-gassertions.h: add 'Since: 0.8' markup. * cutter/cut-public.h, cutter/cut-utils.c, cutter/cut-test-context.c: - remove cut_test_context_inspect_string_array(). - add cut_utils_inspect_string_array(). * cutter/cut-assertions-helper.h, test/test-cut-test-context.c, test/test-cut-utils.c: follow the above changes. * test/test-cut-sequence-matcher.c: cut_assert_equal_to_index() -> cut_assert_to_index(). * cutter/Makefile.am, cutter/cut-sequence-matcher.[ch], test/Makefile.am, test/test-cut-sequence-matcher.c: add CutSequenceMatcher. * cutter/cut-gassertions.h: add const. * cutter/cut-gassertions.h, test/text-cut-gassertions.c: - cut_assert_equal_int_g_list() -> cut_assert_equal_g_list_int(). - cut_assert_equal_string_g_list() -> cut_assert_equal_g_list_string(). * cutter/Makefile.am: public cut-list.h. 2008-05-02 Kouhei Sutou * cutter/cut-gassertions.h (cut_assert_equal_string_g_type): add. * test/test-cut-gassertions.c: add a test for cut_assert_equal_string_g_type(). * cutter/cut-list.[ch] (cut_list_equal_string, cut_list_inspect_string): add. * cutter/cut-gassertions.h: add missing include. * cutter/cut-gassertions.h (cut_assert_equal_int_g_type): add. * test/test-cut-gassertions.c: add a test for cut_assert_equal_int_g_type(). * cutter/cut-list.[ch]: add. * cutter/Makefile.am: add cut-list.[ch]. * cutter/cut-module-factory-utils.c, cutter/cut-ui-factory-builder.c, cutter/cut-module.c: sort modules by name. * test/test-cutter.c: follow the above changes. * test/test-cutter.c: set environment for internal cutter run. 2008-05-02 Hiroyuki Ikezoe * test/test-cutter.c: Added tests for cutter command. * cutter/cut-report.[c|h], cutter/module/cut-report-xml.c, cutter/module/cut-report-pdf.c: Remove result_to_file(). It is not used yet. * m4macros/cutter.m4: Added m4 macro file. * cutter/*, test/*: Remove get_log_domains() function. 2008-05-01 Hiroyuki Ikezoe * cutter/module/report/cut-report-xml.c: Implement get_all_results(). Stupid code! * cutter/cut-test-case.c: Handle "omission" signal. * cutter/cut-module-factory-utils.[c|h]: New files from cut-module-factory.[c|h]. * cutter/cut-module.c (cut_module_load_modules_unique): concatenate exist_modules and new loaded modules. 2008-05-01 Kouhei Sutou * configure.ac: remove needless variable. * cutter/cut-test-suite.c, cutter/cut-test-case.c: don't use filter for NULL input. * test/test-cut-test-suite.c, test/test-cut-test-case.c : follow the above changes. * test/test-cut-test-suite.c: add prototype declaration. 2008-04-30 Kouhei Sutou * cutter/module/ui/cut-ui-gtk.c: handle CUT_TEST_RESULT_INVALID. * configure.ac: use --coverage instead of -fprofile-arcs and -ftest-coverage. * Makefile.am (coverage): - change output directory to ./coverage/ from cutter/html/. - add some options. * configure.ac, **/Makefile.am (COVERAGE_CFLAGS): use coverage related options only for cutter itself. * cutter/**/Makefile.am: clean CFLAGS. * configure.ac: add --enable-maintainer-mode. * sample/*/Makefile.am: run only --enable-maintainer-mode environment. * Makefile.am (coverage): enable only --enable-coverage environment. * configure.ac: add --enable-coverage. 2008-04-30 Hiroyuki Ikezoe * cutter/cut-verbose-level.[c|h]: Added CUT_VERBOSE_LEVEL_INVALID. * cutter/cut-public.h: CUT_TEST_RESULT_INVALID. 2008-04-25 Kouhei Sutou * gtk-doc.make: fix make uninstall. * configure.ac: require cairo >= 1.4 for cairo test. 2008-04-25 Hiroyuki Ikezoe * cutter/cut-report-factory-builder.c: NULL check barrier of GOptionEntry. 2008-04-21 Kouhei Sutou * configure.ac: report error if required GLib version isn't found. * autogen.sh: accept ACLOCAL_OPTIONS environment variable. 2008-04-10 Kouhei Sutou * cutter/module/report/cut-report-pdf.c: show test case result. 2008-04-10 Hiroyuki Ikezoe * cutter/module/report/cut-cairo-pie-chart.c: Added some functions to get chart size. * cutter/module/report/cut-cairo-pie-chart.c: Calculate pie radius from chart height. * cutter/module/report/cut-cairo-pie-chart.c: Calculate chart circle center from chart width and height. * cutter/module/report/cut-cairo-pie-chart.c: Draw percentage text on the edge of pie circle. * cutter/module/report/cut-cairo-pie-chart.c: Draw each parts(chart, legend and ratio text) from data series. * cutter/module/report/cut-cairo-pie-chart.c: Show data label instead of percentage value. * cutter/module/report/cut-cair-chart-data.[c|h]: Added. 2008-04-09 Kouhei Sutou * cutter/module/report/cut-cairo.[ch] (cut_cairo_set_source_result_color): add. * cutter/module/report/cut-cairo-pie-chart.c: use cut_cairo_set_source_result_color(). * cutter/module/report/: use CutCairoPieChart to render a pie chart. * cutter/module/report/cut-report-pdf.c: show all results in pie chart. * cutter/module/ui/cut-ui-console.c: show percentage of passed tests. * cutter/cut-runner.[ch], cutter/cut-test-suite.c, cutter/cut-test.c, cutter/cut-test-case.c: start -> prepare. 2008-04-09 Hiroyuki Ikezoe * test/test-cut-runner.c: Added test for cut_runner_get_n_(). * cutter/module/report/cut-report-pdf.c: Show percentage on pie chart. * cutter/module/report/cut-report-pdf.c: Show percentage text outside of pie chart. * cutter/module/report/cut-report-pdf.c: Do not draw pie piece if the number of result correspond to CutTestStatus is zero. * cutter/module/report/cut-report-pdf.c: Show legend. * cutter/module/report/cut-cairo-pie-chart.[c|h]: Added. 2008-04-09 Kouhei Sutou * cutter/module/report/cut-report-pdf.c: show a pie chart. * cutter/cut-runner.[ch] (cut_runner_get_n_successes): add. 2008-04-08 Kouhei Sutou * cutter/module/report/cut-report-pdf.c: set font family. * cutter/module/report/cut-report-pdf.c: indent tests. * configure.ac, cutter/module/report/cut-report-pdf.c, cutter/module/report/Makefile.am: use pangocairo. * configure.ac, cutter/module/report/cut-report-pdf.c, cutter/module/report/Makefile.am: require cairo PDF backend. * cutter/cut-report-factory-builder.c: support multiple report type. * cutter/module/report/cut-report-pdf.c: fix typos. 2008-04-08 Hiroyuki Ikezoe * cutter/cut-runner.[c|h]: Added cut_runner_is_multi_thread() to obtain the situation that the current test is runnering with multi thread or not. * cutter/cut-test-context.[c|h]: cut_test_context_get_multi_thread() -> cut_test_context_is_multi_thread(). * cutter/cut-test-case.c, test/test-cut-fork.c: Use cut_test_context_is_multi_thread() instead of cut_text_context_get_multi_thread(). * cuttter/module/ui/cut-ui-gtk.c: Set "is-multi-thread" property of CutRunner TRUE with g_object_set(). cut_runner_set_is_multi_thread() does not exist yet. I think the function does not needed since the name is confused cut_runner_set_multi_thread(). * configure.ac: Define HAVE_CAIRO. * cutter/cut-report-factory-builder.c: Create GOptionEntry at runtime. * cutter/cut-report-factory-builder.c: Handle filename. 2008-04-07 Hiroyuki Ikezoe * cutter/cut-process.c: Do not use g_io_add_watch() since the function causes crash with GTK+. * cutter/ui/cut-ui-gtk.c: Set multi thread mode. 2008-04-04 Kouhei Sutou * cutter/cut-test-context.c (cut_test_context_register_result): use cut_test_result_status_is_critical(). * cutter/cut-test-result.[ch]: add cut_test_result_status_is_critical(). * test/test-cut-test-result.c (test_status_to_signal_name) (test_status_is_critical): add. * cutter/cut-test.c: use cut_test_context_is_failed(). * cutter/cut-test-context.c: improve fail detection. * test/test-cut-fork.c: - set multi thread mode. - improve assertions. * test/test-cut-assertions.c: fix a test. * cutter/cut-test-result.c: remove needless codes. * cutter/cut-test-context.c: - split result XML. - fix wrong result receive place. - return WEXITSTATUS-ed status. * test/test-cut-fork.c: follow the above changes. 2008-04-04 Hiroyuki Ikezoe * cutter/cut-process.c: Set some conditions to GIOChannel. * cutter/cut-process.c: Use GIOChannel. * test/test-cut-work.c: Workaround for nonpersistence of CutTestContext. * cutter/cut-process.c: Read from stdout and stderr pipes when cut_process_get_stdout/stderr_message() is invoked instead of cut_process_wait(). 2008-04-03 Kouhei Sutou * test/run-test.sh: run only non --multi-thread mode is passed. * cutter/cut-test-context.c, cutter/cut-public.h, cutter/cut-experimental.h (cut_fork): don't fork() when --multi-thread mode. * cutter/, test/: added cut_omit(). * cutter/cut-process.c (close_pipe): *. (ensure_collect_result): fixed a typo. * cutter/cut-process.[ch]: added cut_process_wait(). * test/test-cut-fork.c: used cut_wait_process(). * cutter/cut-test-context.c, cutter/cut-experimental.h, cutter/cut-public.h: added cut_wait_process(). * cutter/cut-process.c (prepare_pipes): kept errno from fork(). * test/test-cut-fork.c: used cut_assert_errno(). * cutter/cut-main.c (cut_init): loaded all modules if --help-XXX is specified. Bug #1932062. Reported by makeinu. Thanks!!! * cutter/cut-assertions.h, test/test-cut-assertions.c: added cut_assert_errno(). * cutter/cut-process.c (prepare_pipes): closed finished pipe. 2008-04-03 Hiroyuki Ikezoe * cutter/cut-test-context.c: _exit(0) if cut_test_register_result() is invoked from cut_test_fail() in child process. * test/test-cut-fork.c: The test that cut_notify() and cut_fail() are invoked in child process is run in its own test context. cut_fail() does not work yet. * cutter/cut-test-context.c, cutter/cut-process.c, cutter/cut-process.h: Added cut_process_exit(); * cutter/cut-process.c: Use GIOChannel for child process. * cutter/cut-test-context.[c|h]: Added cut_test_context_set/get_multi_thread() for cut_omit. 2008-04-02 Kouhei Sutou * cutter/cut-main.c (option_entries): --version and --help-all doesn't require any argument. Bug #1931954. Reported by makeinu. Thanks!!! * doc/reference/ja.po: updated. * test/test-cut-module-factory.c, test/test-cut-loader.c, test/loader_test_dir/dummy-test-functions.c, test/test-cut-module.c, cutter/cutter.h, cutter/cut-test-case.c, cutter/cut-test-case.h, cutter/cut-loader.c: - initialize/finalize -> startup/shutdown. - TearDown -> Teardown. 2008-04-02 Hiroyuki Ikezoe * test/test-cut-xml-parser.c: Added. * cutter/cut-xml-parser.xml: Handle test case name. * cutter/cut-test.[c|h]: Added cut_test_set_name(). * cutter/cut-xml-parser.c: Use cut_test_set_name() instead of g_object_set(). * cutter/cut-xml-parser.c: Handle element. * cutter/cut-test-result.[c|h]: Added cut_test_result_set_message(). * test/test-cut-xml-parser.c: element test. * cutter/cut-xml-parser.c: Use g_ascii_strcasecmp() instead of strcmp. * cutter/cut-xml-parser.c: Set GError. * cutter/cut-xml-parser.c: Handle \n"; cut_assert_new_from_xml_error("Error on line 2 char 1: " "/gresult: " "invalid element", xml); } void test_new_from_xml_with_invalid_line (void) { const gchar xml[] = "\n" " pending\n" " \n" " \n" " XXX\n" " \n" " \n" "\n"; cut_assert_new_from_xml_error("Error on line 5 char 17: " "/result/backtrace/entry/line: " "invalid line number: XXX", xml); } void test_new_from_xml_with_unexpected_name_tag (void) { const gchar xml[] = "\n" " success\n" " test name\n" "\n"; cut_assert_new_from_xml_error("Error on line 3 char 10: " "/result/name: " "invalid element", xml); } void test_new_from_xml_with_unexpected_value_tag (void) { const gchar xml[] = "\n" " value\n" "\n"; cut_assert_new_from_xml_error("Error on line 2 char 11: " "/result/value: " "invalid element", xml); } void test_new_from_xml_without_option_name (void) { const gchar xml[] = "\n" " \n" " \n" " \n" "\n"; cut_assert_new_from_xml_error("Error on line 6 char 1: " "/result/test/option: " "option name is not set", xml); } void test_new_from_xml_without_option_value (void) { const gchar xml[] = "\n" " \n" " \n" " \n" "\n"; cut_assert_new_from_xml_error("Error on line 6 char 1: " "/result/test/option: " "option value is not set", xml); } void test_new_from_xml_with_multiple_option_names (void) { const gchar xml[] = "\n" " \n" " \n" " \n" "\n"; cut_assert_new_from_xml_error("Error on line 5 char 26: " "/result/test/option/name: " "multiple option name: option name2", xml); } void test_new_from_xml_with_invalid_status (void) { const gchar xml[] = "\n" " XXXXXX\n" "\n"; cut_assert_new_from_xml_error("Error on line 2 char 18: " "/result/status: " "invalid status: XXXXXX", xml); } void test_new_from_xml_with_invalid_elapsed (void) { const gchar xml[] = "\n" " XXXXXX\n" "\n"; cut_assert_new_from_xml_error("Error on line 2 char 19: " "/result/elapsed: " "invalid elapsed value: XXXXXX", xml); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-test-suite.c0000644000175000017500000002302111277551020023155 0ustar koukou#ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "../lib/cuttest-utils.h" void test_run (void); void test_run_test_case (void); void test_run_test_case_with_regex (void); void test_run_test (void); void test_run_test_with_regex (void); void test_run_test_in_test_case (void); void test_run_test_with_regex_in_test_case (void); void test_run_test_in_test_case_with_regex (void); void test_run_test_with_regex_in_test_case_with_regex (void); void test_run_test_in_test_case_with_null (void); void test_run_test_with_filter_with_null (void); static CutRunContext *run_context; static CutTestSuite *test_object; static CutLoader *loader; static gint n_run_stub_run_test_function = 0; static gint n_run_stub_test_function1 = 0; static gint n_run_stub_test_function2 = 0; static gint n_run_stock_run_test_function = 0; static gint n_run_stock_test_function1 = 0; static gint n_run_stock_test_function2 = 0; static void stub_test_function1 (void) { cut_assert_equal_int(1, 1); cut_assert_equal_int(1, 1); cut_assert_equal_int(1, 1); cut_assert_equal_int(1, 1); n_run_stub_test_function1++; } static void stub_test_function2 (void) { n_run_stub_test_function2++; } static void stub_run_test_function (void) { n_run_stub_run_test_function++; } static void stock_test_function1 (void) { n_run_stock_test_function1++; } static void stock_test_function2 (void) { n_run_stock_test_function2++; } static void stock_run_test_function (void) { n_run_stock_run_test_function++; } void cut_setup (void) { CutTestCase *test_case; gchar *test_path; n_run_stub_test_function1 = 0; n_run_stub_test_function2 = 0; n_run_stub_run_test_function = 0; n_run_stock_test_function1 = 0; n_run_stock_test_function2 = 0; n_run_stock_run_test_function = 0; run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); test_object = cut_test_suite_new_empty(); test_path = g_build_filename(cuttest_get_base_dir(), "fixtures", "loader", "test", #ifndef G_OS_WIN32 ".libs", #endif "stub-test-functions." G_MODULE_SUFFIX, NULL); loader = cut_loader_new(test_path); g_free(test_path); test_case = cut_loader_load_test_case(loader); cut_test_suite_add_test_case(test_object, test_case); g_object_unref(test_case); test_case = cut_test_case_new("stub-test-case", NULL, NULL, NULL, NULL); cuttest_add_test(test_case, "stub_test_1", stub_test_function1); cuttest_add_test(test_case, "stub_test_2", stub_test_function2); cuttest_add_test(test_case, "run_test_function", stub_run_test_function); cut_test_suite_add_test_case(test_object, test_case); g_object_unref(test_case); test_case = cut_test_case_new("stock-test-case", NULL, NULL, NULL, NULL); cuttest_add_test(test_case, "stock_test_1", stock_test_function1); cuttest_add_test(test_case, "stock_test_2", stock_test_function2); cuttest_add_test(test_case, "stock_run_test_function", stock_run_test_function); cut_test_suite_add_test_case(test_object, test_case); g_object_unref(test_case); } void cut_teardown (void) { g_object_unref(loader); g_object_unref(test_object); g_object_unref(run_context); } static gboolean run_test_case (gchar *test_case_name) { return cut_test_suite_run_test_in_test_case(test_object, run_context, "/.*/", test_case_name); } static gboolean run_test (gchar *test_name) { return cut_test_suite_run_test(test_object, run_context, test_name); } static gboolean run_test_in_test_case (gchar *test_name, gchar *test_case_name) { return cut_test_suite_run_test_in_test_case(test_object, run_context, test_name, test_case_name); } static gboolean run_test_with_filter (const gchar **test_case_names, const gchar **test_names) { return cut_test_suite_run_with_filter(test_object, run_context, test_case_names, test_names); } void test_run (void) { cut_assert(cut_test_suite_run(test_object, run_context)); cut_assert_equal_int(1, n_run_stub_test_function1); cut_assert_equal_int(1, n_run_stub_test_function2); cut_assert_equal_int(1, n_run_stub_run_test_function); cut_assert_equal_int(1, n_run_stock_test_function1); cut_assert_equal_int(1, n_run_stock_test_function2); cut_assert_equal_int(1, n_run_stock_run_test_function); } void test_run_test_case (void) { cut_assert(cut_test_suite_run_test_case(test_object, run_context, "stub-test-case")); cut_assert_equal_int(1, n_run_stub_test_function1); cut_assert_equal_int(1, n_run_stub_test_function2); cut_assert_equal_int(1, n_run_stub_run_test_function); cut_assert_equal_int(0, n_run_stock_test_function1); cut_assert_equal_int(0, n_run_stock_test_function2); cut_assert_equal_int(0, n_run_stock_run_test_function); } void test_run_test_case_with_regex (void) { cut_assert(run_test_case("/stub/")); cut_assert_equal_int(1, n_run_stub_test_function1); cut_assert_equal_int(1, n_run_stub_test_function2); cut_assert_equal_int(1, n_run_stub_run_test_function); cut_assert_equal_int(0, n_run_stock_test_function1); cut_assert_equal_int(0, n_run_stock_test_function2); cut_assert_equal_int(0, n_run_stock_run_test_function); } void test_run_test (void) { cut_assert(run_test("run_test_function")); cut_assert_equal_int(0, n_run_stub_test_function1); cut_assert_equal_int(0, n_run_stub_test_function2); cut_assert_equal_int(1, n_run_stub_run_test_function); cut_assert_equal_int(0, n_run_stock_test_function1); cut_assert_equal_int(0, n_run_stock_test_function2); cut_assert_equal_int(0, n_run_stock_run_test_function); } void test_run_test_with_regex (void) { cut_assert(run_test("/stub/")); cut_assert_equal_int(1, n_run_stub_test_function1); cut_assert_equal_int(1, n_run_stub_test_function2); cut_assert_equal_int(0, n_run_stub_run_test_function); cut_assert_equal_int(0, n_run_stock_test_function1); cut_assert_equal_int(0, n_run_stock_test_function2); cut_assert_equal_int(0, n_run_stock_run_test_function); } void test_run_test_in_test_case (void) { cut_assert(run_test_in_test_case("run_test_function", "stub-test-case")); cut_assert_equal_int(0, n_run_stub_test_function1); cut_assert_equal_int(0, n_run_stub_test_function2); cut_assert_equal_int(1, n_run_stub_run_test_function); cut_assert_equal_int(0, n_run_stock_test_function1); cut_assert_equal_int(0, n_run_stock_test_function2); cut_assert_equal_int(0, n_run_stock_run_test_function); } void test_run_test_with_regex_in_test_case (void) { cut_assert(run_test_in_test_case("/stub/", "stub-test-case")); cut_assert_equal_int(1, n_run_stub_test_function1); cut_assert_equal_int(1, n_run_stub_test_function2); cut_assert_equal_int(0, n_run_stub_run_test_function); cut_assert_equal_int(0, n_run_stock_test_function1); cut_assert_equal_int(0, n_run_stock_test_function2); cut_assert_equal_int(0, n_run_stock_run_test_function); } void test_run_test_in_test_case_with_regex (void) { cut_assert(run_test_in_test_case("run_test_function", "/stub/")); cut_assert_equal_int(0, n_run_stub_test_function1); cut_assert_equal_int(0, n_run_stub_test_function2); cut_assert_equal_int(1, n_run_stub_run_test_function); cut_assert_equal_int(0, n_run_stock_test_function1); cut_assert_equal_int(0, n_run_stock_test_function2); cut_assert_equal_int(0, n_run_stock_run_test_function); } void test_run_test_with_regex_in_test_case_with_regex (void) { cut_assert(run_test_in_test_case("/stub/", "/stub/")); cut_assert_equal_int(1, n_run_stub_test_function1); cut_assert_equal_int(1, n_run_stub_test_function2); cut_assert_equal_int(0, n_run_stub_run_test_function); cut_assert_equal_int(0, n_run_stock_test_function1); cut_assert_equal_int(0, n_run_stock_test_function2); cut_assert_equal_int(0, n_run_stock_run_test_function); } void test_run_test_in_test_case_with_null (void) { cut_assert(run_test(NULL)); cut_assert_equal_int(1, n_run_stub_test_function1); cut_assert_equal_int(1, n_run_stub_test_function2); cut_assert_equal_int(1, n_run_stub_run_test_function); cut_assert_equal_int(1, n_run_stock_test_function1); cut_assert_equal_int(1, n_run_stock_test_function2); cut_assert_equal_int(1, n_run_stock_run_test_function); } void test_run_test_with_filter_with_null (void) { cut_assert(run_test_with_filter(NULL, NULL)); cut_assert_equal_int(1, n_run_stub_test_function1); cut_assert_equal_int(1, n_run_stub_test_function2); cut_assert_equal_int(1, n_run_stub_run_test_function); cut_assert_equal_int(1, n_run_stock_test_function1); cut_assert_equal_int(1, n_run_stock_test_function2); cut_assert_equal_int(1, n_run_stock_run_test_function); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-verbose-level.c0000644000175000017500000000231611271045142023622 0ustar koukou#include "cutter.h" #include void test_parse (void); void test_parse (void) { GError *error = NULL; cut_assert_equal_int(CUT_VERBOSE_LEVEL_NORMAL, cut_verbose_level_parse(NULL, NULL)); cut_assert_equal_int(CUT_VERBOSE_LEVEL_NORMAL, cut_verbose_level_parse("n", NULL)); cut_assert_equal_int(CUT_VERBOSE_LEVEL_NORMAL, cut_verbose_level_parse("normal", NULL)); cut_assert_equal_int(CUT_VERBOSE_LEVEL_SILENT, cut_verbose_level_parse("s", NULL)); cut_assert_equal_int(CUT_VERBOSE_LEVEL_SILENT, cut_verbose_level_parse("silent", NULL)); cut_assert_equal_int(CUT_VERBOSE_LEVEL_VERBOSE, cut_verbose_level_parse("v", NULL)); cut_assert_equal_int(CUT_VERBOSE_LEVEL_VERBOSE, cut_verbose_level_parse("verbose", NULL)); cut_assert_equal_int(CUT_VERBOSE_LEVEL_INVALID, cut_verbose_level_parse("XXXXXX", &error)); cut_assert(error); cut_assert_equal_int(CUT_VERBOSE_LEVEL_ERROR_BAD_VALUE, error->code); g_error_free(error); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-xml-stream.c0000644000175000017500000001424411407320457023152 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include #include #include "../lib/cuttest-utils.h" #include #ifdef HAVE_UNISTD_H # include #endif void attributes_stream (void); void data_stream (void); void test_stream (gconstpointer data); static CutStream *stream; static CutRunContext *run_context; static CutTest *test; static CutIteratedTest *iterated_test; static CutTestIterator *test_iterator; static CutTestCase *test_case; static CutTestSuite *test_suite; static CutTestContext *test_context; static GString *xml; static void stub_success_test (void) { } static void stub_iterated_data (void) { cut_add_data("first data", NULL, NULL, "second data", NULL, NULL, NULL); } static void stub_iterated_test (gconstpointer data) { } void cut_setup (void) { const gchar *test_names[] = {"/.*/", NULL}; cut_set_fixture_data_dir(cuttest_get_base_dir(), "fixtures", "xml-stream", NULL); test = NULL; iterated_test = NULL; test_iterator = NULL; test_context = NULL; stream = NULL; xml = NULL; run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); cut_run_context_set_target_test_names(run_context, test_names); test_case = cut_test_case_new("stub test case", NULL, NULL, NULL, NULL); test_suite = cut_test_suite_new_empty(); cut_test_suite_add_test_case(test_suite, test_case); } void cut_teardown (void) { if (test) g_object_unref(test); if (iterated_test) g_object_unref(iterated_test); if (test_iterator) g_object_unref(test_iterator); if (test_context) g_object_unref(test_context); if (stream) g_object_unref(stream); if (test_case) g_object_unref(test_case); if (test_suite) g_object_unref(test_suite); g_object_unref(run_context); if (xml) g_string_free(xml, TRUE); } static const gchar * normalize_xml (const gchar *xml) { const gchar *elapsed_normalized_xml, *start_time_normalized_xml; elapsed_normalized_xml = cut_take_replace(xml, "(.*?)", "0.000001"); start_time_normalized_xml = cut_take_replace(elapsed_normalized_xml, "" "20\\d{2}-" ISO8601_PATTERN_WITHOUT_YEAR "", "2008-07-30T04:55:42Z"); return start_time_normalized_xml; } static gboolean run (void) { gboolean success; test_context = cut_test_context_new(run_context, NULL, test_case, NULL, test); cut_test_context_current_push(test_context); success = cut_test_runner_run_test_suite(CUT_TEST_RUNNER(run_context), test_suite); cut_test_context_current_pop(); g_object_unref(test_context); test_context = NULL; return success; } static gboolean stream_to_string (const gchar *message, GError **error, gpointer user_data) { GString *string = user_data; g_string_append(string, message); return TRUE; } typedef void (*TestSetupFunction) (void); typedef struct _StreamTestData { gchar *data_file_name; TestSetupFunction test_setup; } StreamTestData; static StreamTestData * stream_test_data_new (const gchar *data_file_name, TestSetupFunction test_setup) { StreamTestData *data; data = g_new(StreamTestData, 1); data->data_file_name = g_strdup(data_file_name); data->test_setup = test_setup; return data; } static void stream_test_data_free (StreamTestData *data) { g_free(data->data_file_name); g_free(data); } static void setup_success_test (void) { test = cut_test_new("stub-success-test", stub_success_test); cut_test_case_add_test(test_case, test); } static void setup_iterated_test (void) { test_iterator = cut_test_iterator_new("stub-iterated-test", stub_iterated_test, stub_iterated_data); cut_test_case_add_test(test_case, CUT_TEST(test_iterator)); } void attributes_stream (void) { cut_set_attributes("multi-thread", "false", NULL); } void data_stream (void) { cut_add_data("test", stream_test_data_new("test.xml", setup_success_test), stream_test_data_free, "iterated test", stream_test_data_new("iterated-test.xml", setup_iterated_test), stream_test_data_free, NULL); } void test_stream (gconstpointer data) { const StreamTestData *test_data = data; const gchar *expected; test_data->test_setup(); xml = g_string_new(NULL); stream = cut_stream_new("xml", "stream-function", stream_to_string, "stream-function-user-data", xml, NULL); cut_listener_attach_to_run_context(CUT_LISTENER(stream), run_context); cut_assert(run()); cut_listener_detach_from_run_context(CUT_LISTENER(stream), run_context); expected = cut_get_fixture_data_string(test_data->data_file_name, NULL); cut_assert_equal_string(expected, normalize_xml(xml->str)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-test-utils.c0000644000175000017500000000762411525642526023207 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include #include "../lib/cuttest-utils.h" void test_take_replace (void); void test_take_convert (void); void test_remove_path (void); void test_build_path (void); void test_make_directory (void); void test_build_fixture_path (void); void test_fixture_data (void); static gchar *tmp_dir; void cut_setup (void) { tmp_dir = g_build_filename(cuttest_get_base_dir(), "tmp", NULL); cut_remove_path(tmp_dir, NULL); if (g_mkdir_with_parents(tmp_dir, 0700) == -1) cut_error_errno(); } void cut_teardown (void) { if (tmp_dir) { cut_remove_path(tmp_dir, NULL); g_free(tmp_dir); } } void test_take_replace (void) { cut_assert_equal_string("aaa BBB ccc", cut_take_replace("aaa bbb ccc", "bbb", "BBB")); cut_assert_equal_string("Xaa\nXbb\nXcc", cut_take_replace("aaa\nbbb\nccc", "^.", "X")); } void test_take_convert (void) { const gchar *nihongo_in_eucjp = "\306\374\313\334\270\354"; const gchar *nihongo_in_utf8 = "\346\227\245\346\234\254\350\252\236"; cut_assert_equal_string(nihongo_in_eucjp, cut_take_convert(nihongo_in_utf8, "eucJP", "UTF-8")); } void test_remove_path (void) { const gchar *sub_dir; const gchar *sub_sub_dir; sub_dir = cut_build_path(tmp_dir, "sub", NULL); sub_sub_dir = cut_build_path(sub_dir, "sub-sub", NULL); cut_make_directory(tmp_dir, "sub", "sub-sub", NULL); cut_assert_true(g_file_test(sub_sub_dir, G_FILE_TEST_IS_DIR)); cut_remove_path(tmp_dir, "sub", NULL); cut_assert_false(g_file_test(sub_sub_dir, G_FILE_TEST_IS_DIR)); cut_assert_false(g_file_test(sub_dir, G_FILE_TEST_IS_DIR)); cut_assert_true(g_file_test(tmp_dir, G_FILE_TEST_IS_DIR)); } void test_build_path (void) { const gchar *expected; cut_assert_equal_string("a", cut_build_path("a", NULL)); #ifdef G_OS_WIN32 expected = "a\\b\\c"; #else expected = "a/b/c"; #endif cut_assert_equal_string(expected, cut_build_path("a", "b", "c", NULL)); } void test_make_directory (void) { const gchar *new_dir; new_dir = cut_build_path(tmp_dir, "sub", "sub-sub", NULL); cut_assert_false(g_file_test(new_dir, G_FILE_TEST_IS_DIR)); cut_make_directory(tmp_dir, "sub", "sub-sub", NULL); cut_assert_true(g_file_test(new_dir, G_FILE_TEST_IS_DIR)); } void test_build_fixture_path (void) { cut_set_fixture_data_dir(cuttest_get_base_dir(), "a", "b", NULL); cut_assert_equal_string( cut_build_path(cut_take_string(g_get_current_dir()), cuttest_get_base_dir(), "a", "b", "c", NULL), cut_build_fixture_path("c", NULL)); } void test_fixture_data (void) { const gchar *expected, *data; gsize size; cut_set_fixture_data_dir(cuttest_get_base_dir(), "fixtures", "data", NULL); data = cut_get_fixture_data(&size, "1.txt", NULL); expected = "file1\n"; cut_assert_equal_memory(expected, strlen(expected), data, size); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-report-xml.c0000644000175000017500000003111611271045142023161 0ustar koukou#include #include #include #include #include "../lib/cuttest-utils.h" void test_report_success (void); void test_report_failure (void); void test_report_error (void); void test_report_pending (void); void test_report_notification (void); void test_plural_reports (void); static CutRunContext *run_context; static CutReport *report; static CutTest *test; static CutTestCase *test_case; static CutTestContext *test_context; static void stub_success_test (void) { } static void stub_failure_test (void) { cut_fail("This test should fail"); } static void stub_error_test (void) { cut_error("This test should error"); } static void stub_pending_test (void) { cut_pend("This test has been pending ever!"); } static void stub_notification_test (void) { cut_notify("This test has been notifable ever!"); } void cut_setup (void) { const gchar *test_names[] = {"/.*/", NULL}; test = NULL; test_context = NULL; run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); cut_run_context_set_target_test_names(run_context, test_names); report = cut_report_new("xml", NULL); cut_listener_attach_to_run_context(CUT_LISTENER(report), run_context); test_case = cut_test_case_new("stub test case", NULL, NULL, NULL, NULL); } void cut_teardown (void) { if (test) g_object_unref(test); if (test_context) g_object_unref(test_context); cut_listener_detach_from_run_context(CUT_LISTENER(report), run_context); g_object_unref(report); g_object_unref(run_context); } static void cb_test_signal (CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { g_object_set(G_OBJECT(result), "elapsed", 0.0001, NULL); } static gboolean run (void) { gboolean success; test_context = cut_test_context_new(run_context, NULL, test_case, NULL, test); cut_test_context_current_push(test_context); success = cut_test_runner_run_test(CUT_TEST_RUNNER(run_context), test, test_context); cut_test_context_current_pop(); g_object_unref(test_context); test_context = NULL; return success; } void test_report_success (void) { gchar expected[] = " \n" " \n" " stub test case\n" " 1970-01-01T00:00:00Z\n" " .+?\n" " \n" " \n" " stub-success-test\n" " A success test\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " \n" " \n" " success\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n"; test = cut_test_new("stub-success-test", stub_success_test); cut_test_set_attribute(test, "description", "A success test"); cut_test_set_attribute(test, "bug", "1234"); cut_test_set_attribute(test, "price", "$199"); g_signal_connect_after(test, "success", G_CALLBACK(cb_test_signal), NULL); cut_test_case_add_test(test_case, test); cut_assert_true(run()); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_test_signal), NULL); cut_assert_match_with_free(expected, cut_report_get_success_results(report)); } void test_report_failure (void) { gchar expected[] = " \n" " \n" " stub test case\n" " 1970-01-01T00:00:00Z\n" " .+?\n" " \n" " \n" " stub-failure-test\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " failure\n" " This test should fail\n" " \n" " \n" " test-cut-report-xml\\.c\n" " 28\n" " stub_failure_test\\(\\): " "cut_fail\\("This test should fail"\\)\n" " \n" " \n" " " ISO8601_PATTERN "\n" " .+?\n" " \n"; test = cut_test_new("stub-failure-test", stub_failure_test); g_signal_connect_after(test, "failure", G_CALLBACK(cb_test_signal), NULL); cut_test_case_add_test(test_case, test); cut_assert_false(run()); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_test_signal), NULL); cut_assert_match_with_free(expected, cut_report_get_failure_results(report)); } void test_report_pending (void) { gchar expected[] = " \n" " \n" " stub test case\n" " 1970-01-01T00:00:00Z\n" " .+?\n" " \n" " \n" " stub-pending-test\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " pending\n" " This test has been pending ever!\n" " \n" " \n" " test-cut-report-xml\\.c\n" " 40\n" " stub_pending_test\\(\\): " "cut_pend\\("This test has been pending ever!"\\)" "\n" " \n" " \n" " " ISO8601_PATTERN "\n" " .+?\n" " \n"; test = cut_test_new("stub-pending-test", stub_pending_test); g_signal_connect_after(test, "pending", G_CALLBACK(cb_test_signal), NULL); cut_test_case_add_test(test_case, test); cut_assert_false(run()); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_test_signal), NULL); cut_assert_match_with_free(expected, cut_report_get_pending_results(report)); } void test_report_notification (void) { gchar expected[] = " \n" " \n" " stub test case\n" " 1970-01-01T00:00:00Z\n" " .+?\n" " \n" " \n" " stub-notification-test\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " notification\n" " This test has been notifable ever!\n" " \n" " \n" " test-cut-report-xml\\.c\n" " 46\n" " stub_notification_test\\(\\): " "cut_notify\\("This test has been " "notifable ever!"\\)" "\n" " \n" " \n" " " ISO8601_PATTERN "\n" " .+?\n" " \n"; test = cut_test_new("stub-notification-test", stub_notification_test); g_signal_connect_after(test, "notification", G_CALLBACK(cb_test_signal), NULL); cut_test_case_add_test(test_case, test); cut_assert_true(run()); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_test_signal), NULL); cut_assert_match_with_free(expected, cut_report_get_notification_results(report)); } void test_report_error (void) { gchar expected[] = " \n" " \n" " stub test case\n" " 1970-01-01T00:00:00Z\n" " .+?\n" " \n" " \n" " stub-error-test\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " error\n" " This test should error\n" " \n" " \n" " test-cut-report-xml\\.c\n" " 34\n" " stub_error_test\\(\\): " "cut_error\\("This test should error"\\)" "\n" " \n" " \n" " " ISO8601_PATTERN "\n" " .+?\n" " \n"; test = cut_test_new("stub-error-test", stub_error_test); g_signal_connect_after(test, "error", G_CALLBACK(cb_test_signal), NULL); cut_test_case_add_test(test_case, test); cut_assert_false(run()); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_test_signal), NULL); cut_assert_match_with_free(expected, cut_report_get_error_results(report)); } void test_plural_reports (void) { gchar expected[] = " \n" " \n" " stub test case\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " \n" " stub-success-test\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " success\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " \n" " \n" " stub test case\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " \n" " stub-error-test\n" " " ISO8601_PATTERN "\n" " .+?\n" " \n" " error\n" " This test should error\n" " \n" " \n" " test-cut-report-xml\\.c\n" " 34\n" " stub_error_test\\(\\): " "cut_error\\("This test should error"\\)" "\n" " \n" " \n" " " ISO8601_PATTERN "\n" " .+?\n" " \n"; test = cut_test_new("stub-success-test", stub_success_test); g_signal_connect_after(test, "success", G_CALLBACK(cb_test_signal), NULL); cut_test_case_add_test(test_case, test); test = cut_test_new("stub-error-test", stub_error_test); g_signal_connect_after(test, "error", G_CALLBACK(cb_test_signal), NULL); cut_test_case_add_test(test_case, test); cut_assert_false(cut_test_runner_run_test_case(CUT_TEST_RUNNER(run_context), test_case)); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_test_signal), NULL); cut_assert_match_with_free(expected, cut_report_get_all_results(report)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-run-context.c0000644000175000017500000000430511271045142023336 0ustar koukou#include #include void test_max_threads(void); void test_handle_signals(void); #define CUT_TYPE_RUN_CONTEXT_STUB (cut_run_context_stub_get_type ()) #define CUT_RUN_CONTEXT_STUB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_RUN_CONTEXT_STUB, CutRunContextStub)) #define CUT_RUN_CONTEXT_STUB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_RUN_CONTEXT_STUB, CutRunContextStubClass)) #define CUT_IS_RUN_CONTEXT_STUB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_RUN_CONTEXT_STUB)) #define CUT_IS_RUN_CONTEXT_STUB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_RUN_CONTEXT_STUB)) #define CUT_RUN_CONTEXT_STUB_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_RUN_CONTEXT_STUB, CutRunContextStubClass)) typedef struct _CutRunContextStub CutRunContextStub; typedef struct _CutRunContextStubClass CutRunContextStubClass; struct _CutRunContextStub { CutRunContext object; }; struct _CutRunContextStubClass { CutRunContextClass parent_class; }; GType cut_run_context_stub_get_type (void) G_GNUC_CONST; G_DEFINE_TYPE(CutRunContextStub, cut_run_context_stub, CUT_TYPE_RUN_CONTEXT) static void cut_run_context_stub_class_init (CutRunContextStubClass *klass) { } static void cut_run_context_stub_init (CutRunContextStub *object) { } static CutRunContext *run_context; void cut_setup (void) { run_context = NULL; } void cut_teardown (void) { if (run_context) g_object_unref(run_context); } void test_max_threads (void) { run_context = g_object_new(CUT_TYPE_RUN_CONTEXT_STUB, NULL); cut_assert(run_context); cut_assert_equal_int(10, cut_run_context_get_max_threads(run_context)); cut_run_context_set_max_threads(run_context, 100); cut_assert_equal_int(100, cut_run_context_get_max_threads(run_context)); } void test_handle_signals (void) { run_context = g_object_new(CUT_TYPE_RUN_CONTEXT_STUB, NULL); cut_assert_not_null(run_context); cut_assert_true(cut_run_context_get_handle_signals(run_context)); cut_run_context_set_handle_signals(run_context, FALSE); cut_assert_false(cut_run_context_get_handle_signals(run_context)); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cutter.c0000644000175000017500000003506311523777376021617 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ #include #include #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #ifdef HAVE_GTK # include #endif #ifdef HAVE_SYS_WAIT_H # include # include #else # define WIFEXITED(status) TRUE # define WEXITSTATUS(status) (status) #endif #ifdef G_OS_WIN32 # define LINE_FEED_CODE "\r\n" #else # define LINE_FEED_CODE "\n" #endif #include "../lib/cuttest-utils.h" void test_help (void); void test_help_all (void); void test_version (void); void test_invalid_option (void); void test_invalid_color_option (void); void test_invalid_order_option (void); void test_invalid_verbose_option (void); void test_no_option (void); void test_get_test_directory (void); static gchar *stdout_string = NULL; static gchar *stderr_string = NULL; static gint exit_status = 0; static gchar *lang = NULL; static const gchar *help_message; #define cut_assert_exit_status(status) do \ { \ cut_assert_true(WIFEXITED(exit_status)); \ cut_assert_equal_int(status, WEXITSTATUS(exit_status)); \ } while (0) #define cut_assert_exit_success() \ cut_assert_exit_status(EXIT_SUCCESS) #define cut_assert_exit_failure() \ cut_assert_exit_status(EXIT_FAILURE) void cut_setup (void) { const gchar *format; stdout_string = NULL; stderr_string = NULL; exit_status = 0; lang = g_strdup(g_getenv("LANG")); format = "Usage:" LINE_FEED_CODE " %s [OPTION...] TEST_DIRECTORY" LINE_FEED_CODE " %s --mode=analyze [OPTION...] LOG_DIRECTORY" LINE_FEED_CODE "" LINE_FEED_CODE "Help Options:" LINE_FEED_CODE #if GLIB_CHECK_VERSION(2, 21, 0) " -h, --help Show help options" LINE_FEED_CODE #else " -?, --help Show help options" LINE_FEED_CODE #endif " --help-all Show all help options" LINE_FEED_CODE " --help-stream Show stream options" LINE_FEED_CODE " --help-report Show report options" LINE_FEED_CODE " --help-ui Show UI options" LINE_FEED_CODE " --help-console-ui Show console UI options" LINE_FEED_CODE "" LINE_FEED_CODE "Application Options:" LINE_FEED_CODE " --version Show version" LINE_FEED_CODE " --mode=[test|analyze] Set run mode (default: test)" LINE_FEED_CODE " -s, --source-directory=DIRECTORY Set directory of source code" LINE_FEED_CODE " -n, --name=TEST_NAME Specify tests" LINE_FEED_CODE " -t, --test-case=TEST_CASE_NAME Specify test cases" LINE_FEED_CODE " -m, --multi-thread Run test cases and iterated tests with multi-thread" LINE_FEED_CODE " --max-threads=MAX_THREADS Run test cases and iterated tests with MAX_THREADS threads concurrently at a maximum (default: 10; -1 is no limit)" LINE_FEED_CODE " --disable-signal-handling Disable signal handling" LINE_FEED_CODE " --test-case-order=[none|name|name-desc] Sort test case by. Default is 'none'." LINE_FEED_CODE " --exclude-file=FILE Skip files" LINE_FEED_CODE " --exclude-directory=DIRECTORY Skip directories" LINE_FEED_CODE " --fatal-failures Treat failures as fatal problem" LINE_FEED_CODE " --keep-opening-modules Keep opening loaded modules to resolve symbols for debugging" LINE_FEED_CODE " --enable-convenience-attribute-definition Enable convenience but danger '#{ATTRIBUTE_NAME}_#{TEST_NAME - 'test_' PREFIX}' attribute set function" LINE_FEED_CODE " --stop-before-test Set breakpoints at each line which invokes test. You can step into a test function with your debugger easily." LINE_FEED_CODE "" LINE_FEED_CODE; help_message = cut_take_printf(format, g_get_prgname(), g_get_prgname()); } void cut_teardown (void) { if (stdout_string) g_free(stdout_string); if (stderr_string) g_free(stderr_string); if (lang) { g_setenv("LANG", lang, TRUE); g_free(lang); } else { g_unsetenv("LANG"); } } static gboolean run_cutter (const gchar *options) { const gchar *cutter_command; gchar *command; gint argc; gchar **argv; gboolean ret; cutter_command = cut_utils_get_cutter_command_path(); cut_assert(cutter_command); g_setenv("LANG", "C", TRUE); if (options) command = g_strdup_printf("\"%s\" %s", cutter_command, options); else command = g_strdup_printf("\"%s\"", cutter_command); g_shell_parse_argv(command, &argc, &argv, NULL); g_free(command); ret = g_spawn_sync(NULL, argv, NULL, 0, NULL, NULL, &stdout_string, &stderr_string, &exit_status, NULL); g_strfreev(argv); return ret; } void test_version (void) { cut_assert(run_cutter("--version")); cut_assert_exit_success(); cut_assert_equal_string(VERSION LINE_FEED_CODE, stdout_string); } void test_help (void) { cut_assert(run_cutter("--help")); cut_assert_exit_success(); cut_assert_equal_string(help_message, stdout_string); } void test_no_option (void) { cut_assert(run_cutter(NULL)); cut_assert_exit_failure(); cut_assert_equal_string(help_message, stdout_string); } void test_help_all (void) { const gchar *format; const gchar *help_all_message; format = "Usage:" LINE_FEED_CODE " %s [OPTION...] TEST_DIRECTORY" LINE_FEED_CODE " %s --mode=analyze [OPTION...] LOG_DIRECTORY" LINE_FEED_CODE "" LINE_FEED_CODE "Help Options:" LINE_FEED_CODE #if GLIB_CHECK_VERSION(2, 21, 0) " -h, --help Show help options" LINE_FEED_CODE #else " -?, --help Show help options" LINE_FEED_CODE #endif " --help-all Show all help options" LINE_FEED_CODE " --help-stream Show stream options" LINE_FEED_CODE " --help-report Show report options" LINE_FEED_CODE " --help-ui Show UI options" LINE_FEED_CODE " --help-console-ui Show console UI options" LINE_FEED_CODE #ifdef HAVE_GTK " --help-gtk Show GTK+ Options" LINE_FEED_CODE #endif "" LINE_FEED_CODE "Stream Options" LINE_FEED_CODE " --stream=[xml] Specify stream" LINE_FEED_CODE " --stream-fd=FILE_DESCRIPTOR Stream to FILE_DESCRIPTOR (default: stdout)" LINE_FEED_CODE " --stream-directory=DIRECTORY Stream to a file under DIRECTORY (default: none)" LINE_FEED_CODE " --stream-log-directory=DIRECTORY Obsoleted. Use --stream-directory instead" LINE_FEED_CODE "" LINE_FEED_CODE "Report Options" LINE_FEED_CODE #if defined(HAVE_PANGO_CAIRO) && defined(HAVE_CAIRO_PDF) " --pdf-report=FILE Set filename of pdf report" LINE_FEED_CODE #endif " --xml-report=FILE Set filename of xml report" LINE_FEED_CODE "" LINE_FEED_CODE "UI Options" LINE_FEED_CODE #ifdef HAVE_GTK " -u, --ui=[console|gtk] Specify UI" LINE_FEED_CODE #else " -u, --ui=[console] Specify UI" LINE_FEED_CODE #endif "" LINE_FEED_CODE "Console UI Options" LINE_FEED_CODE " -v, --verbose=[s|silent|n|normal|v|verbose] Set verbose level" LINE_FEED_CODE " -c, --color=[yes|true|no|false|auto] Output log with colors" LINE_FEED_CODE " --notify=[yes|true|no|false|auto] Notify test result" LINE_FEED_CODE "" LINE_FEED_CODE #ifdef HAVE_GTK "GTK+ Options" LINE_FEED_CODE " --class=CLASS Program class as used by the window manager" LINE_FEED_CODE " --gtk-name=NAME Program name as used by the window manager" LINE_FEED_CODE " --screen=SCREEN X screen to use" LINE_FEED_CODE # ifdef HAVE_GTK_ENABLE_DEBUG " --gdk-debug=FLAGS Gdk debugging flags to set" LINE_FEED_CODE " --gdk-no-debug=FLAGS Gdk debugging flags to unset" LINE_FEED_CODE # endif # ifdef GDK_WINDOWING_X11 " --sync Make X calls synchronous" LINE_FEED_CODE # elif defined(GDK_WINDOWING_WIN32) " --sync Don't batch GDI requests" LINE_FEED_CODE " --no-wintab Don't use the Wintab API for tablet support" LINE_FEED_CODE " --ignore-wintab Same as --no-wintab" LINE_FEED_CODE " --use-wintab Do use the Wintab API [default]" LINE_FEED_CODE " --max-colors=COLORS Size of the palette in 8 bit mode" LINE_FEED_CODE # endif " --gtk-module=MODULES Load additional GTK+ modules" LINE_FEED_CODE " --g-fatal-warnings Make all warnings fatal" LINE_FEED_CODE # ifdef HAVE_GTK_ENABLE_DEBUG " --gtk-debug=FLAGS GTK+ debugging flags to set" LINE_FEED_CODE " --gtk-no-debug=FLAGS GTK+ debugging flags to unset" LINE_FEED_CODE # endif "" LINE_FEED_CODE #endif "Application Options:" LINE_FEED_CODE " --version Show version" LINE_FEED_CODE " --mode=[test|analyze] Set run mode (default: test)" LINE_FEED_CODE " -s, --source-directory=DIRECTORY Set directory of source code" LINE_FEED_CODE " -n, --name=TEST_NAME Specify tests" LINE_FEED_CODE " -t, --test-case=TEST_CASE_NAME Specify test cases" LINE_FEED_CODE " -m, --multi-thread Run test cases and iterated tests with multi-thread" LINE_FEED_CODE " --max-threads=MAX_THREADS Run test cases and iterated tests with MAX_THREADS threads concurrently at a maximum (default: 10; -1 is no limit)" LINE_FEED_CODE " --disable-signal-handling Disable signal handling" LINE_FEED_CODE " --test-case-order=[none|name|name-desc] Sort test case by. Default is 'none'." LINE_FEED_CODE " --exclude-file=FILE Skip files" LINE_FEED_CODE " --exclude-directory=DIRECTORY Skip directories" LINE_FEED_CODE " --fatal-failures Treat failures as fatal problem" LINE_FEED_CODE " --keep-opening-modules Keep opening loaded modules to resolve symbols for debugging" LINE_FEED_CODE " --enable-convenience-attribute-definition Enable convenience but danger '#{ATTRIBUTE_NAME}_#{TEST_NAME - 'test_' PREFIX}' attribute set function" LINE_FEED_CODE " --stop-before-test Set breakpoints at each line which invokes test. You can step into a test function with your debugger easily." LINE_FEED_CODE #ifdef HAVE_GTK " --display=DISPLAY X display to use" LINE_FEED_CODE #endif "" LINE_FEED_CODE; help_all_message = cut_take_printf(format, g_get_prgname(), g_get_prgname()); cut_assert(run_cutter("--help-all")); cut_assert_exit_success(); cut_assert_equal_string(help_all_message, stdout_string); } void test_invalid_option (void) { cut_assert(run_cutter("--XXXX")); cut_assert_exit_failure(); cut_assert_equal_string("Unknown option --XXXX" LINE_FEED_CODE, stdout_string); } void test_invalid_color_option (void) { cut_assert(run_cutter("--color=XXX")); cut_assert_exit_failure(); cut_assert_equal_string("Invalid color value: XXX" LINE_FEED_CODE, stdout_string); } void test_invalid_order_option (void) { cut_assert(run_cutter("--test-case-order=XXX")); cut_assert_exit_failure(); cut_assert_equal_string("Invalid test case order value: XXX" LINE_FEED_CODE, stdout_string); } void test_invalid_verbose_option (void) { cut_assert(run_cutter("--verbose=XXX")); cut_assert_exit_failure(); cut_assert_equal_string("Invalid verbose level name: XXX" LINE_FEED_CODE, stdout_string); } void test_get_test_directory (void) { const gchar *test_dir; test_dir = cut_build_path(cuttest_get_base_dir(), "fixtures", "test-directory", NULL); cut_assert(run_cutter(cut_take_printf("--notify=no %s", test_dir))); cut_assert_exit_success(); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-factory-builder.c0000644000175000017500000000155111271045142024143 0ustar koukou#include "cutter.h" #include "cut-factory-builder.h" #include "cut-ui-factory-builder.h" #include "cut-report-factory-builder.h" void test_type_name (void); static GObject *builder; void cut_setup (void) { builder = NULL; } void cut_teardown (void) { if (builder) g_object_unref(builder); } void test_type_name (void) { builder = g_object_new(CUT_TYPE_UI_FACTORY_BUILDER, NULL); cut_assert(builder); cut_assert_equal_string("ui", cut_factory_builder_get_type_name(CUT_FACTORY_BUILDER(builder))); g_object_unref(builder); builder = NULL; builder = g_object_new(CUT_TYPE_REPORT_FACTORY_BUILDER, NULL); cut_assert(builder); cut_assert_equal_string("report", cut_factory_builder_get_type_name(CUT_FACTORY_BUILDER(builder))); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-test-runner.c0000644000175000017500000002040511271045142023335 0ustar koukou#include #include #include "../lib/cuttest-utils.h" void test_sort_test_cases (void); void test_n_ (void); void test_get_test_directory (void); void test_get_source_directory (void); void test_build_source_filename (void); void test_order (void); void test_ready_signal (void); static CutRunContext *run_context; static CutTestCase *test_case; static GList *test_cases; static gchar **expected_names, **actual_names; static gint n_ready_test_suite_signals = 0; static gint n_ready_test_case_signals = 0; void cut_setup (void) { run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); test_case = NULL; test_cases = NULL; expected_names = NULL; actual_names = NULL; n_ready_test_suite_signals = 0; n_ready_test_case_signals = 0; } void cut_teardown (void) { g_object_unref(run_context); if (test_case) g_object_unref(test_case); g_list_foreach(test_cases, (GFunc)g_object_unref, NULL); g_list_free(test_cases); g_strfreev(expected_names); g_strfreev(actual_names); } static void stub_success_function (void) { cut_assert(1); } static void stub_failure_function (void) { cut_fail("This test should fail"); } static void stub_omit_function (void) { cut_omit("This test should be omitted."); } static void stub_pending_function (void) { cut_pend("This test has been pending ever!"); } static void stub_notification_function (void) { cut_notify("This test has been notifying ever!"); } static void stub_error_function (void) { cut_error("This test should error"); } static gchar ** collect_test_case_names (GList *test_cases) { gint i; GList *node; gchar **names; names = g_new0(gchar *, g_list_length(test_cases) + 1); for (i = 0, node = test_cases; node; i++, node = g_list_next(node)) { CutTestCase *test_case; test_case = CUT_TEST_CASE(node->data); names[i] = g_strdup(cut_test_get_name(CUT_TEST(test_case))); } names[i] = NULL; return names; } void test_order (void) { cut_run_context_set_test_case_order(run_context, CUT_ORDER_NAME_ASCENDING); cut_assert_equal_int(CUT_ORDER_NAME_ASCENDING, cut_run_context_get_test_case_order(run_context)); cut_run_context_set_test_case_order(run_context, CUT_ORDER_NAME_DESCENDING); cut_assert_equal_int(CUT_ORDER_NAME_DESCENDING, cut_run_context_get_test_case_order(run_context)); } void test_sort_test_cases (void) { test_cases = g_list_append(test_cases, cut_test_case_new("abc", NULL, NULL, NULL, NULL)); test_cases = g_list_append(test_cases, cut_test_case_new("xyz", NULL, NULL, NULL, NULL)); test_cases = g_list_append(test_cases, cut_test_case_new("123", NULL, NULL, NULL, NULL)); test_cases = g_list_append(test_cases, cut_test_case_new("XYZ", NULL, NULL, NULL, NULL)); expected_names = g_strsplit("abc xyz 123 XYZ", " ", -1); actual_names = collect_test_case_names(test_cases); cut_assert_equal_string_array(expected_names, actual_names); g_strfreev(actual_names); test_cases = cut_run_context_sort_test_cases(run_context, test_cases); actual_names = collect_test_case_names(test_cases); cut_assert_equal_string_array(expected_names, actual_names); g_strfreev(expected_names); g_strfreev(actual_names); cut_run_context_set_test_case_order(run_context, CUT_ORDER_NAME_ASCENDING); test_cases = cut_run_context_sort_test_cases(run_context, test_cases); expected_names = g_strsplit("123 XYZ abc xyz", " ", -1); actual_names = collect_test_case_names(test_cases); cut_assert_equal_string_array(expected_names, actual_names); g_strfreev(expected_names); g_strfreev(actual_names); cut_run_context_set_test_case_order(run_context, CUT_ORDER_NAME_DESCENDING); test_cases = cut_run_context_sort_test_cases(run_context, test_cases); expected_names = g_strsplit("xyz abc XYZ 123", " ", -1); actual_names = collect_test_case_names(test_cases); cut_assert_equal_string_array(expected_names, actual_names); } void test_n_ (void) { test_case = cut_test_case_new("stub test case", NULL, NULL, NULL, NULL); cuttest_add_test(test_case, "test_1", stub_success_function); cuttest_add_test(test_case, "test_2", stub_failure_function); cuttest_add_test(test_case, "test_3", stub_omit_function); cuttest_add_test(test_case, "test_4", stub_pending_function); cuttest_add_test(test_case, "test_5", stub_notification_function); cuttest_add_test(test_case, "test_6", stub_error_function); cut_assert(!cut_test_runner_run_test_case(CUT_TEST_RUNNER(run_context), test_case)); cut_assert_equal_int(3, cut_run_context_get_n_successes(run_context)); cut_assert_equal_int(1, cut_run_context_get_n_failures(run_context)); cut_assert_equal_int(1, cut_run_context_get_n_errors(run_context)); cut_assert_equal_int(1, cut_run_context_get_n_pendings(run_context)); cut_assert_equal_int(1, cut_run_context_get_n_notifications(run_context)); cut_assert_equal_int(1, cut_run_context_get_n_omissions(run_context)); cut_assert_equal_int(6, cut_run_context_get_n_tests(run_context)); cut_assert_equal_int(1, cut_run_context_get_n_assertions(run_context)); g_object_unref(test_case); test_case = NULL; } void test_get_test_directory (void) { cut_run_context_set_test_directory(run_context, "."); cut_assert_equal_string(".", cut_run_context_get_test_directory(run_context)); } void test_get_source_directory (void) { cut_run_context_set_source_directory(run_context, "."); cut_assert_equal_string(".", cut_run_context_get_source_directory(run_context)); } void test_build_source_filename (void) { gchar *filename; filename = cut_run_context_build_source_filename(run_context, "source1.c"); cut_assert_equal_string_with_free("source1.c", filename); cut_run_context_set_source_directory(run_context, "base_directory"); filename = cut_run_context_build_source_filename(run_context, "source2.c"); cut_assert_equal_string_with_free("base_directory" G_DIR_SEPARATOR_S "source2.c", filename); } static void cb_ready_test_suite_signal (CutRunContext *run_context, CutTestSuite *suite, guint n_test_cases, guint n_tests, gpointer data) { n_ready_test_suite_signals++; } static void cb_ready_test_case_signal (CutRunContext *run_context, CutTestCase *test_case, guint n_tests, gpointer data) { n_ready_test_case_signals++; } void test_ready_signal (void) { CutTestSuite *suite; CutTestCase *test_case; suite = cut_test_suite_new_empty(); test_case = cut_test_case_new("stub test case", NULL, NULL, NULL, NULL); cuttest_add_test(test_case, "test_1", stub_success_function); cut_test_suite_add_test_case(suite, test_case); g_object_unref(test_case); test_case = NULL; cut_run_context_set_test_suite(run_context, suite); g_signal_connect(run_context, "ready-test-suite", G_CALLBACK(cb_ready_test_suite_signal), NULL); g_signal_connect(run_context, "ready-test-case", G_CALLBACK(cb_ready_test_case_signal), NULL); cut_assert(cut_test_runner_run_test_suite(CUT_TEST_RUNNER(run_context), suite)); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_ready_test_suite_signal), NULL); g_signal_handlers_disconnect_by_func(run_context, G_CALLBACK(cb_ready_test_case_signal), NULL); cut_assert_equal_int(1, n_ready_test_suite_signals); g_object_unref(suite); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-unified-differ.c0000644000175000017500000000736311277421253023746 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include void test_same_contents_unified_diff(void); void test_inserted_unified_diff(void); void test_deleted_unified_diff(void); void test_replace_unified_diff(void); void test_empty_unified_diff(void); #define cut_assert_unified_diff(expected, from, to, from_label, to_label) \ cut_assert_equal_string_with_free(expected, \ cut_diff_unified(from, to, \ from_label, \ to_label)) void test_same_contents_unified_diff (void) { cut_assert_unified_diff("", "aaa", "aaa", "from", "to"); cut_assert_unified_diff("", "aaa\n" "bbb", "aaa\n" "bbb", "from", "to"); } void test_inserted_unified_diff(void) { cut_assert_unified_diff("--- from\n" "+++ to\n" "@@ -1 +1,4 @@\n" " aaa\n" "+bbb\n" "+ccc\n" "+ddd", "aaa", "aaa\n" "bbb\n" "ccc\n" "ddd", "from", "to"); } void test_deleted_unified_diff(void) { cut_assert_unified_diff("--- from\n" "+++ to\n" "@@ -1,4 +1 @@\n" " aaa\n" "-bbb\n" "-ccc\n" "-ddd", "aaa\n" "bbb\n" "ccc\n" "ddd", "aaa", "from", "to"); } void test_replace_unified_diff (void) { cut_assert_unified_diff("--- from\n" "+++ to\n" "@@ -1,4 +1,4 @@\n" "+zero\n" " one\n" "-two\n" "-three\n" "+thre\n" " four", "one\n" "two\n" "three\n" "four", "zero\n" "one\n" "thre\n" "four", "from", "to"); } void test_empty_unified_diff (void) { cut_assert_unified_diff("", "", "", "from", "to"); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-path.c0000644000175000017500000000315711271045142022010 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "../lib/cuttest-assertions.h" void test_run (void); static CutRunContext *pipeline; static gchar *test_dir; void cut_setup (void) { pipeline = cut_pipeline_new(); test_dir = g_build_filename(cuttest_get_base_dir(), "fixtures", "path", NULL); } void cut_teardown (void) { if (pipeline) g_object_unref(pipeline); if (test_dir) g_free(test_dir); } static gboolean run (void) { const gchar *exclude_directories[] = {NULL}; cut_run_context_set_exclude_directories(pipeline, exclude_directories); cut_run_context_set_test_directory(pipeline, test_dir); cut_run_context_set_source_directory(pipeline, test_dir); return cut_run_context_start(pipeline); } void test_run (void) { cut_assert_false(run()); cut_assert_test_result_summary(pipeline, 1, 0, 0, 1, 0, 0, 0, 0); cut_assert_test_result_with_message( pipeline, 0, CUT_TEST_RESULT_FAILURE, "test_fail_in_deep_path", NULL, NULL, "fail in parent" G_DIR_SEPARATOR_S "sub" G_DIR_SEPARATOR_S "test-deep.c", NULL, NULL, cut_take_printf("%s" G_DIR_SEPARATOR_S "parent" G_DIR_SEPARATOR_S "sub" G_DIR_SEPARATOR_S "test-deep.c:%d", test_dir, 12), "test_fail_in_deep_path", NULL); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-loader-suite.c0000644000175000017500000000507111277551034023456 0ustar koukou#include #include #include "../lib/cuttest-utils.h" void test_load_valid (void); void test_load_invalid (void); void test_load_none (void); static CutLoader *loader; static CutTestSuite *test_suite; void cut_setup (void) { loader = NULL; test_suite = NULL; } void cut_teardown (void) { if (loader) g_object_unref(loader); if (test_suite) g_object_unref(test_suite); } static CutLoader * create_loader (const gchar *so_filename) { CutLoader *new_loader; gchar *so_path; so_path = g_build_filename(cuttest_get_base_dir(), "fixtures", "loader", "suite", #ifndef G_OS_WIN32 ".libs", #endif so_filename, NULL); new_loader = cut_loader_new(so_path); g_free(so_path); return new_loader; } void test_load_valid (void) { CutWarmupFunction warmup_function = NULL; CutCooldownFunction cooldown_function = NULL; loader = create_loader("suite-cuttest-loader-valid." G_MODULE_SUFFIX); test_suite = cut_loader_load_test_suite(loader); cut_assert(test_suite); g_object_get(G_OBJECT(test_suite), "warmup-function", &warmup_function, "cooldown-function", &cooldown_function, NULL); cut_assert(warmup_function); cut_assert(cooldown_function); } void test_load_invalid (void) { CutWarmupFunction warmup_function = NULL; CutCooldownFunction cooldown_function = NULL; loader = create_loader("suite-cuttest-loader-invalid." G_MODULE_SUFFIX); test_suite = cut_loader_load_test_suite(loader); cut_assert(test_suite); g_object_get(G_OBJECT(test_suite), "warmup-function", &warmup_function, "cooldown-function", &cooldown_function, NULL); cut_assert_null(warmup_function); cut_assert_null(cooldown_function); } void test_load_none (void) { CutWarmupFunction warmup_function = NULL; CutCooldownFunction cooldown_function = NULL; loader = create_loader("suite-cuttest-loader-none." G_MODULE_SUFFIX); test_suite = cut_loader_load_test_suite(loader); cut_assert(test_suite); g_object_get(G_OBJECT(test_suite), "warmup-function", &warmup_function, "cooldown-function", &cooldown_function, NULL); cut_assert_null(warmup_function); cut_assert_null(cooldown_function); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-test-iterator.c0000644000175000017500000005113511277455712023677 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include #include "../lib/cuttest-assertions.h" void test_success(void); void test_failure(void); void test_error(void); void test_pending(void); void test_notification(void); void test_omission(void); void test_error_in_data_setup(void); static CutRunContext *run_context; static CutTestCase *test_case; static CutTestIterator *test_iterator; static gboolean run_test_flag = FALSE; static guint n_setup_calls = 0; static guint n_teardown_calls = 0; static guint n_tests = 0; static guint n_start_signals = 0; static guint n_complete_signals = 0; static guint n_success_signals = 0; static guint n_failure_signals = 0; static guint n_error_signals = 0; static guint n_pending_signals = 0; static guint n_pass_assertion_signals = 0; static guint n_notification_signals = 0; static guint n_omission_signals = 0; static gint fail_line; #define MARK_FAIL(assertion) do \ { \ fail_line = __LINE__; \ assertion; \ } while (0) #define FAIL_LOCATION (cut_take_printf("%s:%d", __FILE__, fail_line)) static void cut_assert_n_signals_helper(guint expected_n_start_signals, guint expected_n_complete_signals, guint expected_n_setup_calls, guint expected_n_teardown_calls, guint expected_n_tests, guint expected_n_assertions, guint expected_n_successes, guint expected_n_failures, guint expected_n_errors, guint expected_n_pendings, guint expected_n_notifications, guint expected_n_omissions) { GList *result_summary; const GList *expected_result_summary; const GList *actual_result_summary; #define APPEND(value) \ result_summary = g_list_append(result_summary, GUINT_TO_POINTER(value)) result_summary = NULL; APPEND(expected_n_start_signals); APPEND(expected_n_complete_signals); APPEND(expected_n_setup_calls); APPEND(expected_n_teardown_calls); APPEND(expected_n_tests); APPEND(expected_n_assertions); APPEND(expected_n_successes); APPEND(expected_n_failures); APPEND(expected_n_errors); APPEND(expected_n_pendings); APPEND(expected_n_notifications); APPEND(expected_n_omissions); expected_result_summary = gcut_take_list(result_summary, NULL); result_summary = NULL; APPEND(n_start_signals); APPEND(n_complete_signals); APPEND(n_setup_calls); APPEND(n_teardown_calls); APPEND(n_tests); APPEND(n_pass_assertion_signals); APPEND(n_success_signals); APPEND(n_failure_signals); APPEND(n_error_signals); APPEND(n_pending_signals); APPEND(n_notification_signals); APPEND(n_omission_signals); actual_result_summary = gcut_take_list(result_summary, NULL); #undef APPEND gcut_assert_equal_list_uint(expected_result_summary, actual_result_summary); } #define cut_assert_n_signals(n_start_signals, n_complete_signals, \ n_setup_calls, n_teardown_calls, \ n_tests, \ n_assertions, n_successes, \ n_failures, n_errors, n_pendings, \ n_notifications, n_omissions) \ cut_trace_with_info_expression( \ cut_assert_n_signals_helper(n_start_signals, \ n_complete_signals, \ n_setup_calls, n_teardown_calls, \ n_tests, n_assertions, \ n_successes, n_failures, \ n_errors, n_pendings, \ n_notifications, n_omissions), \ cut_assert_n_signals(n_start_signals, \ n_complete_signals, \ n_setup_calls, n_teardown_calls, \ n_tests, n_assertions, \ n_successes, n_failures, \ n_errors, n_pendings, \ n_notifications, n_omissions)) static void stub_setup (void) { n_setup_calls++; } static void stub_teardown (void) { n_teardown_calls++; } void cut_setup (void) { run_test_flag = FALSE; n_setup_calls = 0; n_teardown_calls = 0; n_tests = 0; n_start_signals = 0; n_complete_signals = 0; n_success_signals = 0; n_failure_signals = 0; n_error_signals = 0; n_pending_signals = 0; n_notification_signals = 0; n_pass_assertion_signals = 0; n_omission_signals = 0; run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); test_case = cut_test_case_new("driver test case", stub_setup, stub_teardown, NULL, NULL); test_iterator = NULL; fail_line = 0; } void cut_teardown (void) { if (test_iterator) g_object_unref(test_iterator); g_object_unref(test_case); g_object_unref(run_context); } static void cb_ready_signal (CutTestIterator *test_iteartor, guint n_iterated_tests, gpointer data) { n_tests += n_iterated_tests; } static void cb_start_signal (CutTest *test, gpointer data) { n_start_signals++; } static void cb_complete_signal (CutTest *test, gpointer data) { n_complete_signals++; } static void cb_success_signal (CutTest *test, gpointer data) { n_success_signals++; } static void cb_failure_signal (CutTest *test, gpointer data) { n_failure_signals++; } static void cb_error_signal (CutTest *test, gpointer data) { n_error_signals++; } static void cb_pending_signal (CutTest *test, gpointer data) { n_pending_signals++; } static void cb_notification_signal (CutTest *test, gpointer data) { n_notification_signals++; } static void cb_pass_assertion_signal (CutTest *test, gpointer data) { n_pass_assertion_signals++; } static void cb_omission_signal (CutTest *test, gpointer data) { n_omission_signals++; } static void connect_signals (CutTest *test) { #define CONNECT(name) \ g_signal_connect(test, #name, G_CALLBACK(cb_ ## name ## _signal), NULL) CONNECT(ready); CONNECT(start); CONNECT(complete); CONNECT(success); CONNECT(failure); CONNECT(error); CONNECT(pending); CONNECT(notification); CONNECT(pass_assertion); CONNECT(omission); #undef CONNECT } static void disconnect_signals (CutTest *test) { #define DISCONNECT(name) \ g_signal_handlers_disconnect_by_func(test, \ G_CALLBACK(cb_ ## name ## _signal), \ NULL) DISCONNECT(ready); DISCONNECT(start); DISCONNECT(complete); DISCONNECT(success); DISCONNECT(failure); DISCONNECT(error); DISCONNECT(pending); DISCONNECT(notification); DISCONNECT(pass_assertion); DISCONNECT(omission); #undef DISCONNECT } static gboolean run (void) { gboolean success; CutTestContext *test_context; CutTest *test; test = CUT_TEST(test_iterator); connect_signals(test); test_context = cut_test_context_new(run_context, NULL, test_case, NULL, NULL); cut_test_context_current_push(test_context); success = cut_test_runner_run_test_iterator(CUT_TEST_RUNNER(run_context), test_iterator, test_context); cut_test_context_current_pop(); disconnect_signals(test); g_object_unref(test_context); return success; } static void stub_iterated_data (void) { cut_add_data("First", GINT_TO_POINTER(1), NULL, "Second", GINT_TO_POINTER(2), NULL, "Third", GINT_TO_POINTER(3), NULL, NULL); } static void stub_success_iterated_test (gconstpointer data) { static int i = 0; i++; cut_assert_true(TRUE, cut_message("always pass")); cut_assert_equal_int(i, GPOINTER_TO_INT(data)); } void test_success (void) { CutTestContainer *container; test_iterator = cut_test_iterator_new("success test iterator", stub_success_iterated_test, stub_iterated_data); container = CUT_TEST_CONTAINER(test_iterator); cut_assert_equal_uint(0, cut_test_container_get_n_tests(container, NULL)); cut_assert_true(run()); cut_assert_equal_uint(3, cut_test_container_get_n_tests(container, NULL)); cut_assert_n_signals(1, 1, 3, 3, 3, 0, 1, 0, 0, 0, 0, 0); cut_assert_test_result_summary(run_context, 3, 6, 3, 0, 0, 0, 0, 0); } static void stub_failure_iterated_test (gconstpointer data) { cut_assert_true(TRUE, cut_message("always pass")); MARK_FAIL(cut_assert_equal_int(2, GPOINTER_TO_INT(data))); cut_assert_true(TRUE, cut_message("always pass if come here")); } void test_failure (void) { CutTestContainer *container; test_iterator = cut_test_iterator_new("failure test iterator", stub_failure_iterated_test, stub_iterated_data); container = CUT_TEST_CONTAINER(test_iterator); cut_assert_equal_uint(0, cut_test_container_get_n_tests(container, NULL)); cut_assert_false(run()); cut_assert_equal_uint(3, cut_test_container_get_n_tests(container, NULL)); cut_assert_n_signals(1, 1, 3, 3, 3, 0, 0, 1, 0, 0, 0, 0); cut_assert_test_result_summary(run_context, 3, 5, 1, 2, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "failure test iterator (First)", NULL, "<2 == GPOINTER_TO_INT(data)>", "2", "1", FAIL_LOCATION, "stub_failure_iterated_test", NULL); cut_assert_test_result(run_context, 1, CUT_TEST_RESULT_SUCCESS, "failure test iterator (Second)", NULL, NULL, NULL, NULL, NULL, NULL); cut_assert_test_result(run_context, 2, CUT_TEST_RESULT_FAILURE, "failure test iterator (Third)", NULL, "<2 == GPOINTER_TO_INT(data)>", "2", "3", FAIL_LOCATION, "stub_failure_iterated_test", NULL); } static void stub_error_iterated_test (gconstpointer data) { cut_assert_true(TRUE, cut_message("always pass")); if (GPOINTER_TO_INT(data) == 2) MARK_FAIL(cut_error("ERROR!")); cut_assert_true(TRUE, cut_message("always pass if come here")); } void test_error (void) { CutTestContainer *container; test_iterator = cut_test_iterator_new("error test iterator", stub_error_iterated_test, stub_iterated_data); container = CUT_TEST_CONTAINER(test_iterator); cut_assert_equal_uint(0, cut_test_container_get_n_tests(container, NULL)); cut_assert_false(run()); cut_assert_equal_uint(3, cut_test_container_get_n_tests(container, NULL)); cut_assert_n_signals(1, 1, 3, 3, 3, 0, 0, 0, 1, 0, 0, 0); cut_assert_test_result_summary(run_context, 3, 5, 2, 0, 1, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_SUCCESS, "error test iterator (First)", NULL, NULL, NULL, NULL, NULL, NULL); cut_assert_test_result(run_context, 1, CUT_TEST_RESULT_ERROR, "error test iterator (Second)", "ERROR!", NULL, NULL, NULL, FAIL_LOCATION, "stub_error_iterated_test", NULL); cut_assert_test_result(run_context, 2, CUT_TEST_RESULT_SUCCESS, "error test iterator (Third)", NULL, NULL, NULL, NULL, NULL, NULL); } static void stub_pending_iterated_test (gconstpointer data) { cut_assert_true(TRUE, cut_message("always pass")); if (GPOINTER_TO_INT(data) == 2) MARK_FAIL(cut_pend("PENDING!")); cut_assert_true(TRUE, cut_message("always pass if come here")); } void test_pending (void) { CutTestContainer *container; test_iterator = cut_test_iterator_new("pending test iterator", stub_pending_iterated_test, stub_iterated_data); container = CUT_TEST_CONTAINER(test_iterator); cut_assert_equal_uint(0, cut_test_container_get_n_tests(container, NULL)); cut_assert_false(run()); cut_assert_equal_uint(3, cut_test_container_get_n_tests(container, NULL)); cut_assert_n_signals(1, 1, 3, 3, 3, 0, 0, 0, 0, 1, 0, 0); cut_assert_test_result_summary(run_context, 3, 5, 2, 0, 0, 1, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_SUCCESS, "pending test iterator (First)", NULL, NULL, NULL, NULL, NULL, NULL); cut_assert_test_result(run_context, 1, CUT_TEST_RESULT_PENDING, "pending test iterator (Second)", "PENDING!", NULL, NULL, NULL, FAIL_LOCATION, "stub_pending_iterated_test", NULL); cut_assert_test_result(run_context, 2, CUT_TEST_RESULT_SUCCESS, "pending test iterator (Third)", NULL, NULL, NULL, NULL, NULL, NULL); } static void stub_notification_iterated_test (gconstpointer data) { cut_assert_true(TRUE, cut_message("always pass")); if (GPOINTER_TO_INT(data) == 2) MARK_FAIL(cut_notify("NOTIFICATION!")); cut_assert_true(TRUE, cut_message("always pass if come here")); } void test_notification (void) { CutTestContainer *container; test_iterator = cut_test_iterator_new("notification test iterator", stub_notification_iterated_test, stub_iterated_data); container = CUT_TEST_CONTAINER(test_iterator); cut_assert_equal_uint(0, cut_test_container_get_n_tests(container, NULL)); cut_assert_true(run()); cut_assert_equal_uint(3, cut_test_container_get_n_tests(container, NULL)); cut_assert_n_signals(1, 1, 3, 3, 3, 0, 0, 0, 0, 0, 1, 0); cut_assert_test_result_summary(run_context, 3, 6, 3, 0, 0, 0, 1, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_SUCCESS, "notification test iterator (First)", NULL, NULL, NULL, NULL, NULL, NULL); cut_assert_test_result(run_context, 1, CUT_TEST_RESULT_NOTIFICATION, "notification test iterator (Second)", "NOTIFICATION!", NULL, NULL, NULL, FAIL_LOCATION, "stub_notification_iterated_test", NULL); cut_assert_test_result(run_context, 2, CUT_TEST_RESULT_SUCCESS, "notification test iterator (Second)", NULL, NULL, NULL, NULL, NULL, NULL); cut_assert_test_result(run_context, 3, CUT_TEST_RESULT_SUCCESS, "notification test iterator (Third)", NULL, NULL, NULL, NULL, NULL, NULL); } static void stub_omission_iterated_test (gconstpointer data) { cut_assert_true(TRUE, cut_message("always pass")); if (GPOINTER_TO_INT(data) == 2) MARK_FAIL(cut_omit("OMISSION!")); cut_assert_true(TRUE, cut_message("always pass if come here")); } void test_omission (void) { CutTestContainer *container; test_iterator = cut_test_iterator_new("omission test iterator", stub_omission_iterated_test, stub_iterated_data); container = CUT_TEST_CONTAINER(test_iterator); cut_assert_equal_uint(0, cut_test_container_get_n_tests(container, NULL)); cut_assert_true(run()); cut_assert_equal_uint(3, cut_test_container_get_n_tests(container, NULL)); cut_assert_n_signals(1, 1, 3, 3, 3, 0, 0, 0, 0, 0, 0, 1); cut_assert_test_result_summary(run_context, 3, 5, 3, 0, 0, 0, 0, 1); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_SUCCESS, "omission test iterator (First)", NULL, NULL, NULL, NULL, NULL, NULL); cut_assert_test_result(run_context, 1, CUT_TEST_RESULT_OMISSION, "omission test iterator (Second)", "OMISSION!", NULL, NULL, NULL, FAIL_LOCATION, "stub_omission_iterated_test", NULL); cut_assert_test_result(run_context, 2, CUT_TEST_RESULT_SUCCESS, "omission test iterator (Second)", NULL, NULL, NULL, NULL, NULL, NULL); cut_assert_test_result(run_context, 3, CUT_TEST_RESULT_SUCCESS, "omission test iterator (Third)", NULL, NULL, NULL, NULL, NULL, NULL); } static void stub_error_in_data_setup_iterated_data (void) { cut_add_data("First", GINT_TO_POINTER(1), NULL, NULL); cut_add_data("Second", GINT_TO_POINTER(2), NULL, NULL); cut_error("error in data setup"); cut_add_data("Third", GINT_TO_POINTER(3), NULL, NULL); } static void stub_error_in_data_setup_iterated_test (gconstpointer data) { cut_assert_true(TRUE, cut_message("always pass")); } void test_error_in_data_setup (void) { CutTestContainer *container; test_iterator = cut_test_iterator_new("error in data setup test iterator", stub_error_in_data_setup_iterated_test, stub_error_in_data_setup_iterated_data); container = CUT_TEST_CONTAINER(test_iterator); cut_assert_equal_uint(0, cut_test_container_get_n_tests(container, NULL)); cut_assert_false(run()); cut_assert_equal_uint(0, cut_test_container_get_n_tests(container, NULL)); cut_assert_n_signals(0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0); cut_assert_test_result_summary(run_context, 0, 0, 0, 0, 0, 0, 0, 0); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-main.c0000644000175000017500000000335111271045142021774 0ustar koukou#include #include "../lib/cuttest-utils.h" void cut_set_cutter_command_path (const char *argv0); const char *cut_get_cutter_command_path (void); void test_cutter_command_path (void); static gchar *original_cutter_command_path; void cut_setup (void) { original_cutter_command_path = g_strdup(cut_get_cutter_command_path()); } void cut_teardown (void) { if (original_cutter_command_path) { cut_set_cutter_command_path(original_cutter_command_path); g_free(original_cutter_command_path); } } void test_cutter_command_path (void) { const gchar *exist_command; const gchar *absolute_path, *relative_cutter, *absolute_cutter; cut_assert_not_null(cut_get_cutter_command_path()); #ifdef G_OS_WIN32 exist_command = "notepad"; #else exist_command = "ls"; #endif cut_set_cutter_command_path(exist_command); cut_assert_equal_string(cut_take_string(g_find_program_in_path(exist_command)), cut_get_cutter_command_path()); absolute_path = cut_take_string(g_build_filename(G_DIR_SEPARATOR_S, "usr", "bin", "cutter", NULL)); cut_set_cutter_command_path(absolute_path); cut_assert_equal_string(absolute_path, cut_get_cutter_command_path()); relative_cutter = cut_take_string(g_build_filename("build", "cutter", NULL)); cut_set_cutter_command_path(relative_cutter); absolute_cutter = cut_take_string(g_build_filename(cut_take_string(g_get_current_dir()), relative_cutter, NULL)); cut_assert_equal_string(absolute_cutter, cut_get_cutter_command_path()); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-fork.c0000644000175000017500000001224111277421253022016 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ #include #include #include #include #include #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #ifdef HAVE_UNISTD_H # include #endif #include #include void test_message_from_forked_process (void); void test_fail_in_forked_process (void); static CutRunContext *run_context; static CutTest *test; static CutTestContext *test_context; void setup (void) { run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); test = NULL; test_context = NULL; } void teardown (void) { if (test) g_object_unref(test); if (test_context) g_object_unref(test_context); g_object_unref(run_context); } void test_message_from_forked_process (void) { int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { g_print("Walk in child process"); g_printerr("An error was occured"); _exit(EXIT_SUCCESS); } cut_assert_equal_string("Walk in child process", cut_fork_get_stdout_message(pid)); cut_assert_equal_string("An error was occured", cut_fork_get_stderr_message(pid)); cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); } #ifndef G_OS_WIN32 static gboolean run (void) { gboolean success, is_multi_thread; CutTestContext *current_test_context; test_context = cut_test_context_new(run_context, NULL, NULL, NULL, test); current_test_context = cut_test_context_current_peek(); is_multi_thread = cut_test_context_is_multi_thread(current_test_context); cut_run_context_set_multi_thread(run_context, is_multi_thread); cut_test_context_set_multi_thread(test_context, is_multi_thread); cut_test_context_current_push(test_context); success = cut_test_run(test, test_context, run_context); cut_test_context_current_pop(); return success; } static void cut_fail_in_forked_process (void) { int pid; pid = cut_fork(); cut_assert_errno(); if (pid == 0) { cut_notify("Notification in child process"); cut_fail("Failure in child process"); _exit(EXIT_SUCCESS); } cut_assert_equal_int(EXIT_SUCCESS, cut_wait_process(pid, 100)); } static void cb_collect_message (CutTest *test, CutTestContext *context, CutTestResult *result, gpointer data) { const gchar **message = data; *message = cut_take_string(g_strdup(cut_test_result_get_message(result))); } #endif void test_fail_in_forked_process (void) { #ifdef G_OS_WIN32 cut_omit("fork() isn't available on Windows."); #else const gchar *failure_message = NULL; const gchar *notification_message = NULL; const gchar *omission_message = NULL; test = cut_test_new("failure", cut_fail_in_forked_process); g_signal_connect(test, "notification", G_CALLBACK(cb_collect_message), ¬ification_message); g_signal_connect(test, "failure", G_CALLBACK(cb_collect_message), &failure_message); g_signal_connect(test, "omission", G_CALLBACK(cb_collect_message), &omission_message); cut_assert_true(run()); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_collect_message), ¬ification_message); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_collect_message), &failure_message); g_signal_handlers_disconnect_by_func(test, G_CALLBACK(cb_collect_message), &omission_message); if (cut_test_context_is_multi_thread(cut_get_current_test_context())) { cut_assert_equal_string(NULL, failure_message); cut_assert_equal_string(NULL, notification_message); cut_assert_equal_string("can't use cut_fork() in multi thread mode", omission_message); } else { cut_assert_equal_string("Failure in child process", failure_message); cut_assert_equal_string("Notification in child process", notification_message); cut_assert_equal_string(NULL, omission_message); } #endif } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-readable-differ.c0000644000175000017500000002435011407320457024054 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include void test_same_contents_readable_diff(void); void test_inserted_readable_diff(void); void test_deleted_readable_diff(void); void test_replace_readable_diff(void); void test_difference_readable_diff(void); void test_complex_readable_diff(void); void test_double_width_readable_diff(void); void test_empty_readable_diff(void); void test_tab_readable_diff(void); void test_is_interested (void); void test_need_fold (void); #define cut_assert_readable_diff(expected, from, to) \ cut_assert_equal_string_with_free(expected, cut_diff_readable(from, to)) void test_same_contents_readable_diff (void) { cut_assert_readable_diff(" aaa", "aaa", "aaa"); cut_assert_readable_diff(" aaa\n" " bbb", "aaa\n" "bbb", "aaa\n" "bbb"); } void test_inserted_readable_diff(void) { cut_assert_readable_diff(" aaa\n" "+ bbb\n" "+ ccc\n" "+ ddd", "aaa", "aaa\n" "bbb\n" "ccc\n" "ddd"); } void test_deleted_readable_diff(void) { cut_assert_readable_diff(" aaa\n" "- bbb", "aaa\n" "bbb", "aaa"); cut_assert_readable_diff(" aaa\n" "- bbb\n" "- ccc\n" "- ddd", "aaa\n" "bbb\n" "ccc\n" "ddd", "aaa"); } void test_replace_readable_diff (void) { cut_assert_readable_diff(" aaa\n" "- bbb\n" "+ BbB\n" " ccc\n" "- ddd\n" "- efg\n" "? -\n" "+ eg", "aaa\n" "bbb\n" "ccc\n" "ddd\n" "efg", "aaa\n" "BbB\n" "ccc\n" "eg"); cut_assert_readable_diff("- abcd xyz abc\n" "? -\n" "+ abcd abcd xyz abc\n" "? +++++", " abcd xyz abc", "abcd abcd xyz abc"); } void test_difference_readable_diff (void) { cut_assert_readable_diff("- 1 tests, 0 assertions, 1 failures, 0 pendings\n" "? ^ ^\n" "+ 1 tests, 0 assertions, 0 failures, 1 pendings\n" "? ^ ^", "1 tests, 0 assertions, 1 failures, 0 pendings", "1 tests, 0 assertions, 0 failures, 1 pendings"); } void test_complex_readable_diff (void) { cut_assert_readable_diff(" aaa\n" "- bbb\n" "- ccc\n" "+ \n" "+ # \n" " ddd", "aaa\n" "bbb\n" "ccc\n" "ddd", "aaa\n" "\n" " # \n" "ddd"); cut_assert_readable_diff("- one1\n" "? ^\n" "+ ore1\n" "? ^\n" "- two2\n" "- three3\n" "? - -\n" "+ tree\n" "+ emu", "one1\n" "two2\n" "three3", "ore1\n" "tree\n" "emu"); } void test_double_width_readable_diff (void) { #ifdef G_OS_WIN32 cut_omit("need to put BOF at the head of the file to use multi-byte literal " "but BOF can't handle with GCC. :<"); #else cut_assert_readable_diff("- あいうえおかきくけこ\n" "? ^^^^\n" "+ あいうえおカキくけこ\n" "? ^^^^", "あいうえおかきくけこ", "あいうえおカキくけこ"); #endif } void test_empty_readable_diff (void) { cut_assert_readable_diff("", "", ""); } void test_tab_readable_diff (void) { cut_assert_readable_diff( "- GNU LESSER GENERAL PUBLIC LICENSE\n" "? ^^^^^^^^ -------\n" "+ GNU GENERAL PUBLIC LICENSE\n" "? ^^^^^^^^^^\n" "- Version 2.1, February 1999\n" "? -- ^ ------ ^\n" "+ Version 2, June 1991\n" "? ^^^ ^", " GNU LESSER GENERAL PUBLIC LICENSE\n" " Version 2.1, February 1999", " GNU GENERAL PUBLIC LICENSE\n" " Version 2, June 1991"); } #define cut_assert_readable_diff_is_interested(diff) \ cut_assert_true(cut_diff_readable_is_interested(diff)) #define cut_assert_readable_diff_is_not_interested(diff) \ cut_assert_false(cut_diff_readable_is_interested(diff)) void test_is_interested (void) { cut_assert_readable_diff_is_not_interested(NULL); cut_assert_readable_diff_is_not_interested(""); cut_assert_readable_diff_is_not_interested(" a\n" " b\n" " c"); cut_assert_readable_diff_is_not_interested("- abc\n" "+ abc"); cut_assert_readable_diff_is_interested("- a\n" "+ b\n" "+ c"); cut_assert_readable_diff_is_interested("- abc\n" "+ abc\n" " xyz"); cut_assert_readable_diff_is_interested("- abc def ghi xyz\n" "? ^^^\n" "+ abc DEF ghi xyz\n" "? ^^^"); cut_assert_readable_diff_is_interested(" a\n" "- abc def ghi xyz\n" "? ^^^\n" "+ abc DEF ghi xyz\n" "? ^^^"); } #define cut_assert_readable_diff_need_fold(diff) \ cut_assert_true(cut_diff_readable_need_fold(diff)) #define cut_assert_readable_diff_not_need_fold(diff) \ cut_assert_false(cut_diff_readable_need_fold(diff)) void test_need_fold (void) { cut_assert_readable_diff_not_need_fold(NULL); cut_assert_readable_diff_not_need_fold(""); cut_assert_readable_diff_not_need_fold("0123456789" "1123456789" "2123456789" "3123456789" "4123456789" "5123456789" "6123456789" "7123456789"); cut_assert_readable_diff_not_need_fold("- 23456789" "1123456789" "2123456789" "3123456789" "4123456789" "5123456789" "6123456789" "712345678"); cut_assert_readable_diff_not_need_fold("+ 23456789" "1123456789" "2123456789" "3123456789" "4123456789" "5123456789" "6123456789" "712345678"); cut_assert_readable_diff_need_fold("- 23456789" "1123456789" "2123456789" "3123456789" "4123456789" "5123456789" "6123456789" "7123456789"); cut_assert_readable_diff_need_fold("+ 23456789" "1123456789" "2123456789" "3123456789" "4123456789" "5123456789" "6123456789" "7123456789"); cut_assert_readable_diff_need_fold("\n" "+ 23456789" "1123456789" "2123456789" "3123456789" "4123456789" "5123456789" "6123456789" "7123456789" "\n"); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/Makefile.in0000644000175000017500000012067611525654635021234 0ustar koukou# 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@ 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@ subdir = test/cutter DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_cut_assertions_la_LIBADD = am_test_cut_assertions_la_OBJECTS = test-cut-assertions.lo test_cut_assertions_la_OBJECTS = $(am_test_cut_assertions_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent test_cut_contractor_la_LIBADD = am_test_cut_contractor_la_OBJECTS = test-cut-contractor.lo test_cut_contractor_la_OBJECTS = $(am_test_cut_contractor_la_OBJECTS) test_cut_factory_builder_la_LIBADD = am_test_cut_factory_builder_la_OBJECTS = test-cut-factory-builder.lo test_cut_factory_builder_la_OBJECTS = \ $(am_test_cut_factory_builder_la_OBJECTS) test_cut_file_stream_reader_la_LIBADD = am_test_cut_file_stream_reader_la_OBJECTS = \ test-cut-file-stream-reader.lo test_cut_file_stream_reader_la_OBJECTS = \ $(am_test_cut_file_stream_reader_la_OBJECTS) test_cut_fixture_data_la_LIBADD = am_test_cut_fixture_data_la_OBJECTS = test-cut-fixture-data.lo test_cut_fixture_data_la_OBJECTS = \ $(am_test_cut_fixture_data_la_OBJECTS) test_cut_fork_la_LIBADD = am_test_cut_fork_la_OBJECTS = test-cut-fork.lo test_cut_fork_la_OBJECTS = $(am_test_cut_fork_la_OBJECTS) test_cut_iterated_test_la_LIBADD = am_test_cut_iterated_test_la_OBJECTS = test-cut-iterated-test.lo test_cut_iterated_test_la_OBJECTS = \ $(am_test_cut_iterated_test_la_OBJECTS) test_cut_loader_suite_la_LIBADD = am_test_cut_loader_suite_la_OBJECTS = test-cut-loader-suite.lo test_cut_loader_suite_la_OBJECTS = \ $(am_test_cut_loader_suite_la_OBJECTS) test_cut_loader_la_LIBADD = am_test_cut_loader_la_OBJECTS = test-cut-loader.lo test_cut_loader_la_OBJECTS = $(am_test_cut_loader_la_OBJECTS) test_cut_main_la_LIBADD = am_test_cut_main_la_OBJECTS = test-cut-main.lo test_cut_main_la_OBJECTS = $(am_test_cut_main_la_OBJECTS) test_cut_module_factory_la_LIBADD = am_test_cut_module_factory_la_OBJECTS = test-cut-module-factory.lo test_cut_module_factory_la_OBJECTS = \ $(am_test_cut_module_factory_la_OBJECTS) test_cut_module_la_LIBADD = am_test_cut_module_la_OBJECTS = test-cut-module.lo test_cut_module_la_OBJECTS = $(am_test_cut_module_la_OBJECTS) test_cut_path_la_LIBADD = am_test_cut_path_la_OBJECTS = test-cut-path.lo test_cut_path_la_OBJECTS = $(am_test_cut_path_la_OBJECTS) test_cut_pipeline_la_LIBADD = am_test_cut_pipeline_la_OBJECTS = test-cut-pipeline.lo test_cut_pipeline_la_OBJECTS = $(am_test_cut_pipeline_la_OBJECTS) test_cut_process_la_LIBADD = am_test_cut_process_la_OBJECTS = test-cut-process.lo test_cut_process_la_OBJECTS = $(am_test_cut_process_la_OBJECTS) test_cut_readable_differ_la_LIBADD = am_test_cut_readable_differ_la_OBJECTS = test-cut-readable-differ.lo test_cut_readable_differ_la_OBJECTS = \ $(am_test_cut_readable_differ_la_OBJECTS) test_cut_report_xml_la_LIBADD = am_test_cut_report_xml_la_OBJECTS = test-cut-report-xml.lo test_cut_report_xml_la_OBJECTS = $(am_test_cut_report_xml_la_OBJECTS) test_cut_repository_la_LIBADD = am_test_cut_repository_la_OBJECTS = test-cut-repository.lo test_cut_repository_la_OBJECTS = $(am_test_cut_repository_la_OBJECTS) test_cut_run_context_la_LIBADD = am_test_cut_run_context_la_OBJECTS = test-cut-run-context.lo test_cut_run_context_la_OBJECTS = \ $(am_test_cut_run_context_la_OBJECTS) test_cut_sequence_matcher_la_LIBADD = am_test_cut_sequence_matcher_la_OBJECTS = \ test-cut-sequence-matcher.lo test_cut_sequence_matcher_la_OBJECTS = \ $(am_test_cut_sequence_matcher_la_OBJECTS) test_cut_stream_parser_la_DEPENDENCIES = $(EVENT_RECEIVER_LIBS) am_test_cut_stream_parser_la_OBJECTS = test-cut-stream-parser.lo test_cut_stream_parser_la_OBJECTS = \ $(am_test_cut_stream_parser_la_OBJECTS) test_cut_sub_process_group_la_LIBADD = am_test_cut_sub_process_group_la_OBJECTS = \ test-cut-sub-process-group.lo test_cut_sub_process_group_la_OBJECTS = \ $(am_test_cut_sub_process_group_la_OBJECTS) test_cut_sub_process_la_LIBADD = am_test_cut_sub_process_la_OBJECTS = test-cut-sub-process.lo test_cut_sub_process_la_OBJECTS = \ $(am_test_cut_sub_process_la_OBJECTS) test_cut_test_attribute_la_LIBADD = am_test_cut_test_attribute_la_OBJECTS = test-cut-test-attribute.lo test_cut_test_attribute_la_OBJECTS = \ $(am_test_cut_test_attribute_la_OBJECTS) test_cut_test_case_la_LIBADD = am_test_cut_test_case_la_OBJECTS = test-cut-test-case.lo test_cut_test_case_la_OBJECTS = $(am_test_cut_test_case_la_OBJECTS) test_cut_test_context_la_LIBADD = am_test_cut_test_context_la_OBJECTS = test-cut-test-context.lo test_cut_test_context_la_OBJECTS = \ $(am_test_cut_test_context_la_OBJECTS) test_cut_test_data_la_LIBADD = am_test_cut_test_data_la_OBJECTS = test-cut-test-data.lo test_cut_test_data_la_OBJECTS = $(am_test_cut_test_data_la_OBJECTS) test_cut_test_iterator_la_LIBADD = am_test_cut_test_iterator_la_OBJECTS = test-cut-test-iterator.lo test_cut_test_iterator_la_OBJECTS = \ $(am_test_cut_test_iterator_la_OBJECTS) test_cut_test_result_la_LIBADD = am_test_cut_test_result_la_OBJECTS = test-cut-test-result.lo test_cut_test_result_la_OBJECTS = \ $(am_test_cut_test_result_la_OBJECTS) test_cut_test_runner_la_LIBADD = am_test_cut_test_runner_la_OBJECTS = test-cut-test-runner.lo test_cut_test_runner_la_OBJECTS = \ $(am_test_cut_test_runner_la_OBJECTS) test_cut_test_suite_la_LIBADD = am_test_cut_test_suite_la_OBJECTS = test-cut-test-suite.lo test_cut_test_suite_la_OBJECTS = $(am_test_cut_test_suite_la_OBJECTS) test_cut_test_utils_la_LIBADD = am_test_cut_test_utils_la_OBJECTS = test-cut-test-utils.lo test_cut_test_utils_la_OBJECTS = $(am_test_cut_test_utils_la_OBJECTS) test_cut_test_la_LIBADD = am_test_cut_test_la_OBJECTS = test-cut-test.lo test_cut_test_la_OBJECTS = $(am_test_cut_test_la_OBJECTS) test_cut_unified_differ_la_LIBADD = am_test_cut_unified_differ_la_OBJECTS = test-cut-unified-differ.lo test_cut_unified_differ_la_OBJECTS = \ $(am_test_cut_unified_differ_la_OBJECTS) test_cut_utils_la_LIBADD = am_test_cut_utils_la_OBJECTS = test-cut-utils.lo test_cut_utils_la_OBJECTS = $(am_test_cut_utils_la_OBJECTS) test_cut_verbose_level_la_LIBADD = am_test_cut_verbose_level_la_OBJECTS = test-cut-verbose-level.lo test_cut_verbose_level_la_OBJECTS = \ $(am_test_cut_verbose_level_la_OBJECTS) test_cut_xml_stream_la_LIBADD = am_test_cut_xml_stream_la_OBJECTS = test-cut-xml-stream.lo test_cut_xml_stream_la_OBJECTS = $(am_test_cut_xml_stream_la_OBJECTS) test_cutter_la_LIBADD = am_test_cutter_la_OBJECTS = test-cutter.lo test_cutter_la_OBJECTS = $(am_test_cutter_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_cut_assertions_la_SOURCES) \ $(test_cut_contractor_la_SOURCES) \ $(test_cut_factory_builder_la_SOURCES) \ $(test_cut_file_stream_reader_la_SOURCES) \ $(test_cut_fixture_data_la_SOURCES) \ $(test_cut_fork_la_SOURCES) \ $(test_cut_iterated_test_la_SOURCES) \ $(test_cut_loader_suite_la_SOURCES) \ $(test_cut_loader_la_SOURCES) $(test_cut_main_la_SOURCES) \ $(test_cut_module_factory_la_SOURCES) \ $(test_cut_module_la_SOURCES) $(test_cut_path_la_SOURCES) \ $(test_cut_pipeline_la_SOURCES) $(test_cut_process_la_SOURCES) \ $(test_cut_readable_differ_la_SOURCES) \ $(test_cut_report_xml_la_SOURCES) \ $(test_cut_repository_la_SOURCES) \ $(test_cut_run_context_la_SOURCES) \ $(test_cut_sequence_matcher_la_SOURCES) \ $(test_cut_stream_parser_la_SOURCES) \ $(test_cut_sub_process_group_la_SOURCES) \ $(test_cut_sub_process_la_SOURCES) \ $(test_cut_test_attribute_la_SOURCES) \ $(test_cut_test_case_la_SOURCES) \ $(test_cut_test_context_la_SOURCES) \ $(test_cut_test_data_la_SOURCES) \ $(test_cut_test_iterator_la_SOURCES) \ $(test_cut_test_result_la_SOURCES) \ $(test_cut_test_runner_la_SOURCES) \ $(test_cut_test_suite_la_SOURCES) \ $(test_cut_test_utils_la_SOURCES) $(test_cut_test_la_SOURCES) \ $(test_cut_unified_differ_la_SOURCES) \ $(test_cut_utils_la_SOURCES) \ $(test_cut_verbose_level_la_SOURCES) \ $(test_cut_xml_stream_la_SOURCES) $(test_cutter_la_SOURCES) DIST_SOURCES = $(test_cut_assertions_la_SOURCES) \ $(test_cut_contractor_la_SOURCES) \ $(test_cut_factory_builder_la_SOURCES) \ $(test_cut_file_stream_reader_la_SOURCES) \ $(test_cut_fixture_data_la_SOURCES) \ $(test_cut_fork_la_SOURCES) \ $(test_cut_iterated_test_la_SOURCES) \ $(test_cut_loader_suite_la_SOURCES) \ $(test_cut_loader_la_SOURCES) $(test_cut_main_la_SOURCES) \ $(test_cut_module_factory_la_SOURCES) \ $(test_cut_module_la_SOURCES) $(test_cut_path_la_SOURCES) \ $(test_cut_pipeline_la_SOURCES) $(test_cut_process_la_SOURCES) \ $(test_cut_readable_differ_la_SOURCES) \ $(test_cut_report_xml_la_SOURCES) \ $(test_cut_repository_la_SOURCES) \ $(test_cut_run_context_la_SOURCES) \ $(test_cut_sequence_matcher_la_SOURCES) \ $(test_cut_stream_parser_la_SOURCES) \ $(test_cut_sub_process_group_la_SOURCES) \ $(test_cut_sub_process_la_SOURCES) \ $(test_cut_test_attribute_la_SOURCES) \ $(test_cut_test_case_la_SOURCES) \ $(test_cut_test_context_la_SOURCES) \ $(test_cut_test_data_la_SOURCES) \ $(test_cut_test_iterator_la_SOURCES) \ $(test_cut_test_result_la_SOURCES) \ $(test_cut_test_runner_la_SOURCES) \ $(test_cut_test_suite_la_SOURCES) \ $(test_cut_test_utils_la_SOURCES) $(test_cut_test_la_SOURCES) \ $(test_cut_unified_differ_la_SOURCES) \ $(test_cut_utils_la_SOURCES) \ $(test_cut_verbose_level_la_SOURCES) \ $(test_cut_xml_stream_la_SOURCES) $(test_cutter_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/test/lib/libcuttest-utils.la \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(WINDOWS_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(GTK_CFLAGS) CLEANFILES = *.gcno *.gcda check_LTLIBRARIES = \ test-cutter.la \ test-cut-assertions.la \ test-cut-test-attribute.la \ test-cut-test.la \ test-cut-iterated-test.la \ test-cut-test-result.la \ test-cut-test-case.la \ test-cut-test-suite.la \ test-cut-test-context.la \ test-cut-loader.la \ test-cut-loader-suite.la \ test-cut-repository.la \ test-cut-run-context.la \ test-cut-test-runner.la \ test-cut-module.la \ test-cut-module-factory.la \ test-cut-factory-builder.la \ test-cut-contractor.la \ test-cut-fork.la \ test-cut-process.la \ test-cut-pipeline.la \ test-cut-stream-parser.la \ test-cut-report-xml.la \ test-cut-xml-stream.la \ test-cut-verbose-level.la \ test-cut-utils.la \ test-cut-sequence-matcher.la \ test-cut-readable-differ.la \ test-cut-unified-differ.la \ test-cut-main.la \ test-cut-fixture-data.la \ test-cut-test-data.la \ test-cut-test-iterator.la \ test-cut-sub-process.la \ test-cut-sub-process-group.la \ test-cut-file-stream-reader.la \ test-cut-path.la \ test-cut-test-utils.la AM_LDFLAGS = \ -module \ -rpath `pwd`/.libs \ -avoid-version \ -no-undefined EVENT_RECEIVER_LIBS = $(top_builddir)/test/lib/libcuttest-event-receiver.la test_cutter_la_SOURCES = test-cutter.c test_cut_assertions_la_SOURCES = test-cut-assertions.c test_cut_test_la_SOURCES = test-cut-test.c test_cut_iterated_test_la_SOURCES = test-cut-iterated-test.c test_cut_test_result_la_SOURCES = test-cut-test-result.c test_cut_test_case_la_SOURCES = test-cut-test-case.c test_cut_test_suite_la_SOURCES = test-cut-test-suite.c test_cut_loader_la_SOURCES = test-cut-loader.c test_cut_loader_suite_la_SOURCES = test-cut-loader-suite.c test_cut_repository_la_SOURCES = test-cut-repository.c test_cut_run_context_la_SOURCES = test-cut-run-context.c test_cut_test_runner_la_SOURCES = test-cut-test-runner.c test_cut_report_xml_la_SOURCES = test-cut-report-xml.c test_cut_xml_stream_la_SOURCES = test-cut-xml-stream.c test_cut_module_la_SOURCES = test-cut-module.c test_cut_module_factory_la_SOURCES = test-cut-module-factory.c test_cut_test_attribute_la_SOURCES = test-cut-test-attribute.c test_cut_factory_builder_la_SOURCES = test-cut-factory-builder.c test_cut_contractor_la_SOURCES = test-cut-contractor.c test_cut_fork_la_SOURCES = test-cut-fork.c test_cut_process_la_SOURCES = test-cut-process.c test_cut_pipeline_la_SOURCES = test-cut-pipeline.c test_cut_stream_parser_la_SOURCES = test-cut-stream-parser.c test_cut_stream_parser_la_LIBADD = $(EVENT_RECEIVER_LIBS) test_cut_verbose_level_la_SOURCES = test-cut-verbose-level.c test_cut_test_context_la_SOURCES = test-cut-test-context.c test_cut_utils_la_SOURCES = test-cut-utils.c test_cut_sequence_matcher_la_SOURCES = test-cut-sequence-matcher.c test_cut_readable_differ_la_SOURCES = test-cut-readable-differ.c test_cut_unified_differ_la_SOURCES = test-cut-unified-differ.c test_cut_main_la_SOURCES = test-cut-main.c test_cut_fixture_data_la_SOURCES = test-cut-fixture-data.c test_cut_test_data_la_SOURCES = test-cut-test-data.c test_cut_test_iterator_la_SOURCES = test-cut-test-iterator.c test_cut_sub_process_la_SOURCES = test-cut-sub-process.c test_cut_sub_process_group_la_SOURCES = test-cut-sub-process-group.c test_cut_file_stream_reader_la_SOURCES = test-cut-file-stream-reader.c test_cut_path_la_SOURCES = test-cut-path.c test_cut_test_utils_la_SOURCES = test-cut-test-utils.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/cutter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/cutter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-cut-assertions.la: $(test_cut_assertions_la_OBJECTS) $(test_cut_assertions_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_assertions_la_OBJECTS) $(test_cut_assertions_la_LIBADD) $(LIBS) test-cut-contractor.la: $(test_cut_contractor_la_OBJECTS) $(test_cut_contractor_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_contractor_la_OBJECTS) $(test_cut_contractor_la_LIBADD) $(LIBS) test-cut-factory-builder.la: $(test_cut_factory_builder_la_OBJECTS) $(test_cut_factory_builder_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_factory_builder_la_OBJECTS) $(test_cut_factory_builder_la_LIBADD) $(LIBS) test-cut-file-stream-reader.la: $(test_cut_file_stream_reader_la_OBJECTS) $(test_cut_file_stream_reader_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_file_stream_reader_la_OBJECTS) $(test_cut_file_stream_reader_la_LIBADD) $(LIBS) test-cut-fixture-data.la: $(test_cut_fixture_data_la_OBJECTS) $(test_cut_fixture_data_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_fixture_data_la_OBJECTS) $(test_cut_fixture_data_la_LIBADD) $(LIBS) test-cut-fork.la: $(test_cut_fork_la_OBJECTS) $(test_cut_fork_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_fork_la_OBJECTS) $(test_cut_fork_la_LIBADD) $(LIBS) test-cut-iterated-test.la: $(test_cut_iterated_test_la_OBJECTS) $(test_cut_iterated_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_iterated_test_la_OBJECTS) $(test_cut_iterated_test_la_LIBADD) $(LIBS) test-cut-loader-suite.la: $(test_cut_loader_suite_la_OBJECTS) $(test_cut_loader_suite_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_loader_suite_la_OBJECTS) $(test_cut_loader_suite_la_LIBADD) $(LIBS) test-cut-loader.la: $(test_cut_loader_la_OBJECTS) $(test_cut_loader_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_loader_la_OBJECTS) $(test_cut_loader_la_LIBADD) $(LIBS) test-cut-main.la: $(test_cut_main_la_OBJECTS) $(test_cut_main_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_main_la_OBJECTS) $(test_cut_main_la_LIBADD) $(LIBS) test-cut-module-factory.la: $(test_cut_module_factory_la_OBJECTS) $(test_cut_module_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_module_factory_la_OBJECTS) $(test_cut_module_factory_la_LIBADD) $(LIBS) test-cut-module.la: $(test_cut_module_la_OBJECTS) $(test_cut_module_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_module_la_OBJECTS) $(test_cut_module_la_LIBADD) $(LIBS) test-cut-path.la: $(test_cut_path_la_OBJECTS) $(test_cut_path_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_path_la_OBJECTS) $(test_cut_path_la_LIBADD) $(LIBS) test-cut-pipeline.la: $(test_cut_pipeline_la_OBJECTS) $(test_cut_pipeline_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_pipeline_la_OBJECTS) $(test_cut_pipeline_la_LIBADD) $(LIBS) test-cut-process.la: $(test_cut_process_la_OBJECTS) $(test_cut_process_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_process_la_OBJECTS) $(test_cut_process_la_LIBADD) $(LIBS) test-cut-readable-differ.la: $(test_cut_readable_differ_la_OBJECTS) $(test_cut_readable_differ_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_readable_differ_la_OBJECTS) $(test_cut_readable_differ_la_LIBADD) $(LIBS) test-cut-report-xml.la: $(test_cut_report_xml_la_OBJECTS) $(test_cut_report_xml_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_report_xml_la_OBJECTS) $(test_cut_report_xml_la_LIBADD) $(LIBS) test-cut-repository.la: $(test_cut_repository_la_OBJECTS) $(test_cut_repository_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_repository_la_OBJECTS) $(test_cut_repository_la_LIBADD) $(LIBS) test-cut-run-context.la: $(test_cut_run_context_la_OBJECTS) $(test_cut_run_context_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_run_context_la_OBJECTS) $(test_cut_run_context_la_LIBADD) $(LIBS) test-cut-sequence-matcher.la: $(test_cut_sequence_matcher_la_OBJECTS) $(test_cut_sequence_matcher_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_sequence_matcher_la_OBJECTS) $(test_cut_sequence_matcher_la_LIBADD) $(LIBS) test-cut-stream-parser.la: $(test_cut_stream_parser_la_OBJECTS) $(test_cut_stream_parser_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_stream_parser_la_OBJECTS) $(test_cut_stream_parser_la_LIBADD) $(LIBS) test-cut-sub-process-group.la: $(test_cut_sub_process_group_la_OBJECTS) $(test_cut_sub_process_group_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_sub_process_group_la_OBJECTS) $(test_cut_sub_process_group_la_LIBADD) $(LIBS) test-cut-sub-process.la: $(test_cut_sub_process_la_OBJECTS) $(test_cut_sub_process_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_sub_process_la_OBJECTS) $(test_cut_sub_process_la_LIBADD) $(LIBS) test-cut-test-attribute.la: $(test_cut_test_attribute_la_OBJECTS) $(test_cut_test_attribute_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_attribute_la_OBJECTS) $(test_cut_test_attribute_la_LIBADD) $(LIBS) test-cut-test-case.la: $(test_cut_test_case_la_OBJECTS) $(test_cut_test_case_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_case_la_OBJECTS) $(test_cut_test_case_la_LIBADD) $(LIBS) test-cut-test-context.la: $(test_cut_test_context_la_OBJECTS) $(test_cut_test_context_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_context_la_OBJECTS) $(test_cut_test_context_la_LIBADD) $(LIBS) test-cut-test-data.la: $(test_cut_test_data_la_OBJECTS) $(test_cut_test_data_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_data_la_OBJECTS) $(test_cut_test_data_la_LIBADD) $(LIBS) test-cut-test-iterator.la: $(test_cut_test_iterator_la_OBJECTS) $(test_cut_test_iterator_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_iterator_la_OBJECTS) $(test_cut_test_iterator_la_LIBADD) $(LIBS) test-cut-test-result.la: $(test_cut_test_result_la_OBJECTS) $(test_cut_test_result_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_result_la_OBJECTS) $(test_cut_test_result_la_LIBADD) $(LIBS) test-cut-test-runner.la: $(test_cut_test_runner_la_OBJECTS) $(test_cut_test_runner_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_runner_la_OBJECTS) $(test_cut_test_runner_la_LIBADD) $(LIBS) test-cut-test-suite.la: $(test_cut_test_suite_la_OBJECTS) $(test_cut_test_suite_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_suite_la_OBJECTS) $(test_cut_test_suite_la_LIBADD) $(LIBS) test-cut-test-utils.la: $(test_cut_test_utils_la_OBJECTS) $(test_cut_test_utils_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_utils_la_OBJECTS) $(test_cut_test_utils_la_LIBADD) $(LIBS) test-cut-test.la: $(test_cut_test_la_OBJECTS) $(test_cut_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_test_la_OBJECTS) $(test_cut_test_la_LIBADD) $(LIBS) test-cut-unified-differ.la: $(test_cut_unified_differ_la_OBJECTS) $(test_cut_unified_differ_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_unified_differ_la_OBJECTS) $(test_cut_unified_differ_la_LIBADD) $(LIBS) test-cut-utils.la: $(test_cut_utils_la_OBJECTS) $(test_cut_utils_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_utils_la_OBJECTS) $(test_cut_utils_la_LIBADD) $(LIBS) test-cut-verbose-level.la: $(test_cut_verbose_level_la_OBJECTS) $(test_cut_verbose_level_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_verbose_level_la_OBJECTS) $(test_cut_verbose_level_la_LIBADD) $(LIBS) test-cut-xml-stream.la: $(test_cut_xml_stream_la_OBJECTS) $(test_cut_xml_stream_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cut_xml_stream_la_OBJECTS) $(test_cut_xml_stream_la_LIBADD) $(LIBS) test-cutter.la: $(test_cutter_la_OBJECTS) $(test_cutter_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_cutter_la_OBJECTS) $(test_cutter_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-assertions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-contractor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-factory-builder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-file-stream-reader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-fixture-data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-fork.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-iterated-test.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-loader-suite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-loader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-main.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-module-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-module.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-path.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-pipeline.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-readable-differ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-report-xml.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-repository.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-run-context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-sequence-matcher.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-stream-parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-sub-process-group.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-sub-process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-attribute.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-case.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-iterator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-result.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-runner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-suite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-test.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-unified-differ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-verbose-level.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cut-xml-stream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cutter.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) 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-am clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkLTLIBRARIES clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/cutter/Makefile.am0000644000175000017500000000734111424022512021171 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(GTK_CFLAGS) CLEANFILES = *.gcno *.gcda check_LTLIBRARIES = \ test-cutter.la \ test-cut-assertions.la \ test-cut-test-attribute.la \ test-cut-test.la \ test-cut-iterated-test.la \ test-cut-test-result.la \ test-cut-test-case.la \ test-cut-test-suite.la \ test-cut-test-context.la \ test-cut-loader.la \ test-cut-loader-suite.la \ test-cut-repository.la \ test-cut-run-context.la \ test-cut-test-runner.la \ test-cut-module.la \ test-cut-module-factory.la \ test-cut-factory-builder.la \ test-cut-contractor.la \ test-cut-fork.la \ test-cut-process.la \ test-cut-pipeline.la \ test-cut-stream-parser.la \ test-cut-report-xml.la \ test-cut-xml-stream.la \ test-cut-verbose-level.la \ test-cut-utils.la \ test-cut-sequence-matcher.la \ test-cut-readable-differ.la \ test-cut-unified-differ.la \ test-cut-main.la \ test-cut-fixture-data.la \ test-cut-test-data.la \ test-cut-test-iterator.la \ test-cut-sub-process.la \ test-cut-sub-process-group.la \ test-cut-file-stream-reader.la \ test-cut-path.la \ test-cut-test-utils.la AM_LDFLAGS = \ -module \ -rpath `pwd`/.libs \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/test/lib/libcuttest-utils.la \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(WINDOWS_LIBS) EVENT_RECEIVER_LIBS = $(top_builddir)/test/lib/libcuttest-event-receiver.la test_cutter_la_SOURCES = test-cutter.c test_cut_assertions_la_SOURCES = test-cut-assertions.c test_cut_test_la_SOURCES = test-cut-test.c test_cut_iterated_test_la_SOURCES = test-cut-iterated-test.c test_cut_test_result_la_SOURCES = test-cut-test-result.c test_cut_test_case_la_SOURCES = test-cut-test-case.c test_cut_test_suite_la_SOURCES = test-cut-test-suite.c test_cut_loader_la_SOURCES = test-cut-loader.c test_cut_loader_suite_la_SOURCES = test-cut-loader-suite.c test_cut_repository_la_SOURCES = test-cut-repository.c test_cut_run_context_la_SOURCES = test-cut-run-context.c test_cut_test_runner_la_SOURCES = test-cut-test-runner.c test_cut_report_xml_la_SOURCES = test-cut-report-xml.c test_cut_xml_stream_la_SOURCES = test-cut-xml-stream.c test_cut_module_la_SOURCES = test-cut-module.c test_cut_module_factory_la_SOURCES = test-cut-module-factory.c test_cut_test_attribute_la_SOURCES = test-cut-test-attribute.c test_cut_factory_builder_la_SOURCES = test-cut-factory-builder.c test_cut_contractor_la_SOURCES = test-cut-contractor.c test_cut_fork_la_SOURCES = test-cut-fork.c test_cut_process_la_SOURCES = test-cut-process.c test_cut_pipeline_la_SOURCES = test-cut-pipeline.c test_cut_stream_parser_la_SOURCES = test-cut-stream-parser.c test_cut_stream_parser_la_LIBADD = $(EVENT_RECEIVER_LIBS) test_cut_verbose_level_la_SOURCES = test-cut-verbose-level.c test_cut_test_context_la_SOURCES = test-cut-test-context.c test_cut_utils_la_SOURCES = test-cut-utils.c test_cut_sequence_matcher_la_SOURCES = test-cut-sequence-matcher.c test_cut_readable_differ_la_SOURCES = test-cut-readable-differ.c test_cut_unified_differ_la_SOURCES = test-cut-unified-differ.c test_cut_main_la_SOURCES = test-cut-main.c test_cut_fixture_data_la_SOURCES = test-cut-fixture-data.c test_cut_test_data_la_SOURCES = test-cut-test-data.c test_cut_test_iterator_la_SOURCES = test-cut-test-iterator.c test_cut_sub_process_la_SOURCES = test-cut-sub-process.c test_cut_sub_process_group_la_SOURCES = test-cut-sub-process-group.c test_cut_file_stream_reader_la_SOURCES = test-cut-file-stream-reader.c test_cut_path_la_SOURCES = test-cut-path.c test_cut_test_utils_la_SOURCES = test-cut-test-utils.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/cutter/test-cut-stream-parser.c0000644000175000017500000017217711271045142023652 0ustar koukou#include #include #include #include "../lib/cuttest-event-receiver.h" void test_start_run (void); void test_ready_test_suite (void); void test_start_test_suite (void); void test_ready_test_case (void); void test_start_test_case (void); void test_ready_test_iterator (void); void test_start_test_iterator (void); void test_start_test (void); void test_start_test_with_multiple_option_names (void); void test_start_iterated_test (void); void test_result_error (void); void test_result_iterated_test (void); void test_result_test_iterator (void); void test_result_test_case (void); void test_pass_assertion_test (void); void test_pass_assertion_iterated_test (void); void test_complete_iterated_test (void); void test_complete_test (void); void test_complete_test_iterator (void); void test_complete_test_case (void); void test_complete_test_suite (void); void test_complete_run_without_success_tag (void); void test_complete_run_with_success_true (void); void test_complete_run_with_success_false (void); void test_crash_test (void); static CutStreamParser *parser; static CutTestResult *result; static CutRunContext *run_context; static CuttestEventReceiver *receiver; void cut_setup (void) { run_context = cuttest_event_receiver_new(); receiver = CUTTEST_EVENT_RECEIVER(run_context); parser = cut_stream_parser_new(run_context); result = NULL; } void cut_teardown (void) { g_object_unref(receiver); g_object_unref(parser); if (result) g_object_unref(result); } #define cut_assert_parse(string) do \ { \ GError *error = NULL; \ cut_stream_parser_parse(parser, (string), -1, &error); \ gcut_assert_error(error); \ } while (0) #define cut_assert_parse_error(expected_message, string) do \ { \ GError *error = NULL; \ const GError *taken_error = NULL; \ cut_stream_parser_parse(parser, (string), -1, &error); \ cut_assert_not_null(error); \ taken_error = gcut_take_error(error); \ cut_assert_equal_string((expected_message), \ taken_error->message); \ } while (0) static void collect_result (CutStreamParser *parser, CutTestResult *test_result, gpointer user_data) { CutTestResult **data = (CutTestResult **)user_data; g_object_ref(test_result); *data = test_result; } void test_start_run (void) { cut_assert_equal_int(0, receiver->n_start_runs); cut_assert_true(cut_stream_parser_parse(parser, "n_start_runs); cut_assert_true(cut_stream_parser_parse(parser, ">", -1, NULL)); cut_assert_equal_int(1, receiver->n_start_runs); } void test_ready_test_suite (void) { CuttestReadyTestSuiteInfo *info; GTimeVal expected, actual; cut_assert_parse("\n"); cut_assert_parse(" \n"); cut_assert_parse(" \n"); cut_assert_parse(" 1970-01-01T00:00:00Z\n"); cut_assert_parse(" \n"); cut_assert_parse(" 3\n"); cut_assert_parse(" 7\n"); cut_assert_null(receiver->ready_test_suites); cut_assert_parse(" "); cut_assert_equal_int(1, g_list_length(receiver->ready_test_suites)); info = receiver->ready_test_suites->data; cut_assert_not_null(info->test_suite); cut_assert_equal_string(NULL, cut_test_get_name(CUT_TEST(info->test_suite))); expected.tv_sec = 0; expected.tv_usec = 0; cut_test_get_start_time(CUT_TEST(info->test_suite), &actual); gcut_assert_equal_time_val(&expected, &actual); cut_assert_equal_int(3, info->n_test_cases); cut_assert_equal_int(7, info->n_tests); } void test_start_test_suite (void) { CutTestSuite *test_suite; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n"; gchar start_test_suite[] = " \n" " \n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->start_test_suites); cut_assert_parse(start_test_suite); cut_assert_equal_int(1, g_list_length(receiver->start_test_suites)); test_suite = receiver->start_test_suites->data; cut_assert_not_null(test_suite); cut_assert_equal_string(NULL, cut_test_get_name(CUT_TEST(test_suite))); } void test_ready_test_case (void) { CuttestReadyTestCaseInfo *info; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n"; gchar ready_test_case[] = " \n" " \n" " my test case\n" " \n" " 2\n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->ready_test_cases); cut_assert_parse(ready_test_case); cut_assert_equal_int(1, g_list_length(receiver->ready_test_cases)); info = receiver->ready_test_cases->data; cut_assert_not_null(info->test_case); cut_assert_equal_string("my test case", cut_test_get_name(CUT_TEST(info->test_case))); cut_assert_equal_int(2, info->n_tests); } void test_start_test_case (void) { CutTestCase *test_case; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n"; gchar start_test_case[] = " \n" " \n" " my test case\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->start_test_cases); cut_assert_parse(start_test_case); cut_assert_equal_int(1, g_list_length(receiver->start_test_cases)); test_case = receiver->start_test_cases->data; cut_assert_not_null(test_case); cut_assert_equal_string("my test case", cut_test_get_name(CUT_TEST(test_case))); } void test_ready_test_iterator (void) { CuttestReadyTestIteratorInfo *info; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n"; gchar ready_test_iterator[] = " \n" " \n" " my test iterator\n" " \n" " 5\n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->ready_test_iterators); cut_assert_parse(ready_test_iterator); cut_assert_equal_int(1, g_list_length(receiver->ready_test_iterators)); info = receiver->ready_test_iterators->data; cut_assert_not_null(info->test_iterator); cut_assert_equal_string("my test iterator", cut_test_get_name(CUT_TEST(info->test_iterator))); cut_assert_equal_uint(5, info->n_tests); } void test_start_test_iterator (void) { CutTestIterator *test_iterator; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " \n" " \n" " my test iterator\n" " \n" " 5\n" " \n"; gchar start_test_iterator[] = " \n" " \n" " my test iterator\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->start_test_iterators); cut_assert_parse(start_test_iterator); cut_assert_equal_int(1, g_list_length(receiver->start_test_iterators)); test_iterator = receiver->start_test_iterators->data; cut_assert_not_null(test_iterator); cut_assert_equal_string("my test iterator", cut_test_get_name(CUT_TEST(test_iterator))); } void test_start_test (void) { CuttestStartTestInfo *info; CutTestContext *context; CutTestSuite *test_suite; CutTestCase *test_case; CutTest *test; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n"; gchar start_test[] = " \n" " \n" " my test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test\n" " \n" " FALSE\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->start_tests); cut_assert_parse(start_test); cut_assert_equal_int(1, g_list_length(receiver->start_tests)); info = receiver->start_tests->data; cut_assert_not_null(info); cut_assert_not_null(info->test); cut_assert_equal_string("my test", cut_test_get_name(CUT_TEST(info->test))); context = info->test_context; cut_assert_not_null(context); cut_assert_false(cut_test_context_is_failed(context)); test_suite = cut_test_context_get_test_suite(context); cut_assert_not_null(test_suite); cut_assert_equal_string(NULL, cut_test_get_name(CUT_TEST(test_suite))); test_case = cut_test_context_get_test_case(context); cut_assert_not_null(test_case); cut_assert_equal_string("my test case", cut_test_get_name(CUT_TEST(test_case))); test = cut_test_context_get_test(context); cut_assert_not_null(test); cut_assert_equal_string("my test", cut_test_get_name(test)); cut_assert_false(cut_test_context_have_data(context)); } void test_start_test_with_multiple_option_names (void) { gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n"; gchar start_test[] = " \n" " \n" " my test\n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test\n" " \n" " FALSE\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->start_tests); cut_assert_parse_error("Error on line 28 char 21: " "/stream/start-test/test/option/name: " "multiple option name: name2", start_test); } void test_start_iterated_test (void) { CuttestStartIteratedTestInfo *info; CutTestData *test_data; CutTestContext *context; CutTestSuite *test_suite; CutTestCase *test_case; CutTestIterator *test_iterator; CutIteratedTest *iterated_test; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " \n" " \n" " my test iterator\n" " \n" " 5\n" " \n" " \n" " \n" " my test iterator\n" " \n" " \n"; gchar start_iterated_test[] = " \n" " \n" " my iterated test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test iterator\n" " \n" " \n" " my iterated test\n" " \n" " \n" " the first test data\n" " \n" " FALSE\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->start_iterated_tests); cut_assert_parse(start_iterated_test); cut_assert_equal_int(1, g_list_length(receiver->start_iterated_tests)); info = receiver->start_iterated_tests->data; cut_assert_not_null(info); cut_assert_not_null(info->iterated_test); cut_assert_equal_string("my iterated test", cut_test_get_name(CUT_TEST(info->iterated_test))); context = info->test_context; cut_assert_not_null(context); test_suite = cut_test_context_get_test_suite(context); cut_assert_not_null(test_suite); cut_assert_equal_string(NULL, cut_test_get_name(CUT_TEST(test_suite))); test_case = cut_test_context_get_test_case(context); cut_assert_not_null(test_case); cut_assert_equal_string("my test case", cut_test_get_name(CUT_TEST(test_case))); test_iterator = cut_test_context_get_test_iterator(context); cut_assert_not_null(test_iterator); cut_assert_equal_string("my test iterator", cut_test_get_name(CUT_TEST(test_iterator))); iterated_test = CUT_ITERATED_TEST(cut_test_context_get_test(context)); cut_assert_not_null(iterated_test); cut_assert_equal_string("my iterated test", cut_test_get_name(CUT_TEST(iterated_test))); cut_assert_false(cut_test_context_is_failed(context)); cut_assert_true(cut_test_context_have_data(context)); test_data = cut_test_context_get_current_data(context); cut_assert_not_null(test_data); cut_assert_equal_string("the first test data", cut_test_data_get_name(test_data)); } void test_result_error (void) { GTimeVal expected_start_time, actual_start_time; CutTest *test; const GList *actual_backtrace; CutBacktraceEntry *entry; const gchar xml[] = "\n" " \n" " \n" " stub-error-test\n" " Error Test\n" " \n" " \n" " \n" " \n" " stub test case\n" " \n" " \n" " stub-error-test\n" " Error Test\n" " \n" " \n" " TRUE\n" " \n" " \n" " \n" " stub test case\n" " \n" " \n" " stub-error-test\n" " Error Test\n" " \n" " \n" " error\n" " This test should error\n" " \n" " \n" " test-cut-report-xml.c\n" " 31\n" " stub_error_test()\n" " \n" " \n" " 2008-07-29T05:16:40Z\n" " 0.000100\n" " \n" " \n" "\n"; g_signal_connect(parser, "result", G_CALLBACK(collect_result), (gpointer)&result); cut_assert_parse(xml); cut_assert_not_null(result); test = cut_test_result_get_test(result); cut_assert(test); cut_assert_equal_string("stub test case", cut_test_result_get_test_case_name(result)); cut_assert_equal_string("stub-error-test", cut_test_result_get_test_name(result)); cut_assert_equal_int(CUT_TEST_RESULT_ERROR, cut_test_result_get_status(result)); expected_start_time.tv_sec = 1217308600; expected_start_time.tv_usec = 0; cut_test_result_get_start_time(result, &actual_start_time); gcut_assert_equal_time_val(&expected_start_time, &actual_start_time); cut_assert_equal_double(0.0001, 0.0, cut_test_result_get_elapsed(result)); actual_backtrace = cut_test_result_get_backtrace(result); cut_assert_not_null(actual_backtrace); entry = actual_backtrace->data; cut_assert_equal_string("test-cut-report-xml.c", cut_backtrace_entry_get_file(entry)); cut_assert_equal_uint(31, cut_backtrace_entry_get_line(entry)); cut_assert_equal_string("stub_error_test", cut_backtrace_entry_get_function(entry)); cut_assert_equal_string("This test should error", cut_test_result_get_message(result)); cut_assert_equal_string("1234", cut_test_get_attribute(test, "bug")); cut_assert_equal_string("Error Test", cut_test_get_description(test)); } void test_result_iterated_test (void) { GTimeVal expected_start_time, actual_start_time; CutTest *test; CutTestData *test_data; const gchar xml[] = "\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.028738\n" " \n" " \n" " \n" " test_cut_pipeline\n" " 2008-07-29T23:22:29Z\n" " 0.028738\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.028738\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.028738\n" " \n" " \n" " success\n" " \n" " FALSE\n" " \n" " \n" " \n" " test_cut_pipeline\n" " 2008-07-29T23:22:29Z\n" " 0.028738\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.028738\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.028738\n" " \n" " \n" " first data\n" " \n" " success\n" " 2008-07-29T23:22:29Z\n" " 0.028738\n" " \n" " \n" "\n"; g_signal_connect(parser, "result", G_CALLBACK(collect_result), (gpointer)&result); cut_assert_parse(xml); cut_assert_not_null(result); test = cut_test_result_get_test(result); cut_assert(test); cut_assert_equal_string("test_cut_pipeline", cut_test_result_get_test_case_name(result)); cut_assert_equal_string("test_count", cut_test_result_get_test_iterator_name(result)); test_data = cut_test_result_get_test_data(result); cut_assert_not_null(test_data); cut_assert_equal_string("first data", cut_test_data_get_name(test_data)); cut_assert_equal_int(CUT_TEST_RESULT_SUCCESS, cut_test_result_get_status(result)); expected_start_time.tv_sec = 1217373749; expected_start_time.tv_usec = 0; cut_test_result_get_start_time(result, &actual_start_time); gcut_assert_equal_time_val(&expected_start_time, &actual_start_time); cut_assert_equal_double(0.028, 0.001, cut_test_result_get_elapsed(result)); } void test_result_test_iterator (void) { GTimeVal expected_start_time, actual_start_time; CutTestIterator *test_iterator; const gchar xml[] = "\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.152822\n" " \n" " \n" " \n" " test_cut_pipeline\n" " 2008-07-29T23:22:29Z\n" " 0.152822\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.152822\n" " \n" " success\n" " 2008-07-29T23:22:29Z\n" " 0.152822\n" " \n" " \n" "\n"; g_signal_connect(parser, "result", G_CALLBACK(collect_result), (gpointer)&result); cut_assert_parse(xml); cut_assert_not_null(result); test_iterator = cut_test_result_get_test_iterator(result); cut_assert_not_null(test_iterator); cut_assert_equal_string("test_count", cut_test_get_name(CUT_TEST(test_iterator))); cut_assert_equal_string("test_count", cut_test_result_get_test_iterator_name(result)); cut_assert_equal_string("test_cut_pipeline", cut_test_result_get_test_case_name(result)); cut_assert_equal_int(CUT_TEST_RESULT_SUCCESS, cut_test_result_get_status(result)); expected_start_time.tv_sec = 1217373749; expected_start_time.tv_usec = 0; cut_test_result_get_start_time(result, &actual_start_time); gcut_assert_equal_time_val(&expected_start_time, &actual_start_time); cut_assert_equal_double(0.15, 0.01, cut_test_result_get_elapsed(result)); } void test_result_test_case (void) { GTimeVal expected_start_time, actual_start_time; CutTestCase *test_case; const gchar xml[] = "\n" " \n" " \n" " test_cut_test_iterator\n" " 2008-07-29T23:22:28Z\n" " 0.010663\n" " \n" " \n" " \n" " test_cut_test_iterator\n" " 2008-07-29T23:22:28Z\n" " 0.010663\n" " \n" " success\n" " 2008-07-29T23:22:28Z\n" " 0.010663\n" " \n" " \n" "\n"; g_signal_connect(parser, "result", G_CALLBACK(collect_result), (gpointer)&result); cut_assert_parse(xml); cut_assert_not_null(result); test_case = cut_test_result_get_test_case(result); cut_assert_not_null(test_case); cut_assert_equal_string("test_cut_test_iterator", cut_test_get_name(CUT_TEST(test_case))); cut_assert_equal_string("test_cut_test_iterator", cut_test_result_get_test_case_name(result)); cut_assert_equal_int(CUT_TEST_RESULT_SUCCESS, cut_test_result_get_status(result)); expected_start_time.tv_sec = 1217373748; expected_start_time.tv_usec = 0; cut_test_result_get_start_time(result, &actual_start_time); gcut_assert_equal_time_val(&expected_start_time, &actual_start_time); cut_assert_equal_double(0.01, 0.001, cut_test_result_get_elapsed(result)); } void test_pass_assertion_test (void) { CuttestPassAssertionInfo *info; CutTest *test; CutTestCase *test_case; CutTestContext *test_context; const gchar xml[] = "\n" " \n" " \n" " 0.000000\n" " \n" " 34\n" " 236\n" " \n" " \n" " \n" " 0.000000\n" " \n" " \n" " \n" " \n" " test_cut_test\n" " 0.000000\n" " \n" " 13\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000000\n" " \n" " \n" " \n" " \n" " test_error_signal\n" " 0.000000\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000000\n" " \n" " FALSE\n" " \n" " \n" " \n" " \n" " test_error_signal\n" " 0.000039\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000062\n" " \n" " \n" " test_error_signal\n" " 0.000077\n" " \n" " FALSE\n" " \n" " \n" " \n" " \n" " test_error_signal\n" " 0.000895\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000895\n" " \n" " \n" " test_error_signal\n" " 0.000895\n" " \n" " FALSE\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000895\n" " \n" " \n" " test_error_signal\n" " 0.000895\n" " \n" " success\n" " 0.000895\n" " \n" " \n" " \n" " \n" " test_error_signal\n" " 0.000895\n" " \n" " \n" " \n" " \n" " test_cut_test\n" " 0.003745\n" " \n" " \n" " \n" " \n" " 139.666143\n" " \n" " \n" " false\n" "\n"; cut_assert_null(receiver->pass_assertions); cut_assert_parse(xml); cut_assert_not_null(receiver->pass_assertions); cut_assert_equal_uint(1, g_list_length(receiver->pass_assertions)); info = receiver->pass_assertions->data; test = info->test; cut_assert_not_null(test); cut_assert_equal_string("test_error_signal", cut_test_get_name(test)); test_context = info->test_context; cut_assert_not_null(test_context); test_case = cut_test_context_get_test_case(test_context); cut_assert_not_null(test_case); cut_assert_equal_string("test_cut_test", cut_test_get_name(CUT_TEST(test_case))); test = cut_test_context_get_test(test_context); cut_assert_not_null(test); cut_assert_equal_string("test_error_signal", cut_test_get_name(test)); } void test_pass_assertion_iterated_test (void) { CuttestPassAssertionInfo *info; CutTestData *test_data; CutTest *test; CutTestIterator *test_iterator; CutTestCase *test_case; CutTestContext *test_context; const gchar xml[] = "\n" " \n" " \n" " 0.000000\n" " \n" " 34\n" " 236\n" " \n" " \n" " \n" " 0.000000\n" " \n" " \n" " \n" " \n" " test_cut_test\n" " 0.000000\n" " \n" " 13\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000000\n" " \n" " \n" " \n" " \n" " test_error_signal\n" " 0.000000\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000000\n" " \n" " FALSE\n" " \n" " \n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.039929\n" " \n" " \n" " \n" " test_cut_pipeline\n" " 2008-07-29T23:22:29Z\n" " 0.068691\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.068712\n" " \n" " \n" " test_count\n" " 2008-07-29T23:22:29Z\n" " 0.039995\n" " \n" " \n" " failure\n" " \n" " FALSE\n" " \n" " \n" " \n" " \n" " test_error_signal\n" " 0.000895\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000895\n" " \n" " \n" " test_error_signal\n" " 0.000895\n" " \n" " FALSE\n" " \n" " \n" " \n" " test_cut_test\n" " 0.000895\n" " \n" " \n" " test_error_signal\n" " 0.000895\n" " \n" " success\n" " 0.000895\n" " \n" " \n" " \n" " \n" " test_error_signal\n" " 0.000895\n" " \n" " \n" " \n" " \n" " test_cut_test\n" " 0.003745\n" " \n" " \n" " \n" " \n" " 139.666143\n" " \n" " \n" " false\n" "\n"; cut_assert_null(receiver->pass_assertions); cut_assert_parse(xml); cut_assert_not_null(receiver->pass_assertions); cut_assert_equal_uint(1, g_list_length(receiver->pass_assertions)); info = receiver->pass_assertions->data; test = info->test; cut_assert_not_null(test); cut_assert_equal_string("test_count", cut_test_get_name(test)); test_context = info->test_context; cut_assert_not_null(test_context); test_case = cut_test_context_get_test_case(test_context); cut_assert_not_null(test_case); cut_assert_equal_string("test_cut_pipeline", cut_test_get_name(CUT_TEST(test_case))); test_iterator = cut_test_context_get_test_iterator(test_context); cut_assert_not_null(test_iterator); cut_assert_equal_string("test_count", cut_test_get_name(CUT_TEST(test_iterator))); test_data = cut_test_context_get_current_data(test_context); cut_assert_not_null(test_data); cut_assert_equal_string("failure", cut_test_data_get_name(test_data)); cut_assert_false(cut_test_context_is_failed(test_context)); } void test_complete_iterated_test (void) { CuttestCompleteIteratedTestInfo *info; CutTestContext *context; CutTestSuite *test_suite; CutTestCase *test_case; CutTestIterator *test_iterator; CutIteratedTest *iterated_test; CutTestData *test_data; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " \n" " \n" " my test iterator\n" " \n" " 5\n" " \n" " \n" " \n" " my test iterator\n" " \n" " \n" " \n" " \n" " my iterated test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test iterator\n" " \n" " \n" " my iterated test\n" " \n" " \n" " the first test data\n" " \n" " FALSE\n" " \n" " \n"; gchar complete_iterated_test[] = " \n" " \n" " my iterated test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test iterator\n" " \n" " \n" " my iterated test\n" " \n" " \n" " the first test data\n" " \n" " TRUE\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->complete_iterated_tests); cut_assert_parse(complete_iterated_test); cut_assert_equal_uint(1, g_list_length(receiver->complete_iterated_tests)); info = receiver->complete_iterated_tests->data; cut_assert_not_null(info); cut_assert_not_null(info->iterated_test); cut_assert_equal_string("my iterated test", cut_test_get_name(CUT_TEST(info->iterated_test))); context = info->test_context; cut_assert_not_null(context); cut_assert_true(cut_test_context_is_failed(context)); test_suite = cut_test_context_get_test_suite(context); cut_assert_not_null(test_suite); cut_assert_equal_string(NULL, cut_test_get_name(CUT_TEST(test_suite))); test_case = cut_test_context_get_test_case(context); cut_assert_not_null(test_case); cut_assert_equal_string("my test case", cut_test_get_name(CUT_TEST(test_case))); test_iterator = cut_test_context_get_test_iterator(context); cut_assert_not_null(test_iterator); cut_assert_equal_string("my test iterator", cut_test_get_name(CUT_TEST(test_iterator))); iterated_test = CUT_ITERATED_TEST(cut_test_context_get_test(context)); cut_assert_not_null(iterated_test); cut_assert_equal_string("my iterated test", cut_test_get_name(CUT_TEST(iterated_test))); cut_assert_true(cut_test_context_have_data(context)); test_data = cut_test_context_get_current_data(context); cut_assert_not_null(test_data); cut_assert_equal_string("the first test data", cut_test_data_get_name(test_data)); } void test_complete_test (void) { CuttestCompleteTestInfo *info; CutTestContext *context; CutTestSuite *test_suite; CutTestCase *test_case; CutTest *test; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " \n" " \n" " my test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test\n" " \n" " FALSE\n" " \n" " \n"; gchar complete_test[] = " \n" " \n" " my test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test\n" " \n" " TRUE\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->complete_tests); cut_assert_parse(complete_test); cut_assert_equal_int(1, g_list_length(receiver->complete_tests)); info = receiver->complete_tests->data; cut_assert_not_null(info); cut_assert_not_null(info->test); cut_assert_equal_string("my test", cut_test_get_name(CUT_TEST(info->test))); context = info->test_context; cut_assert_not_null(context); cut_assert_true(cut_test_context_is_failed(context)); test_suite = cut_test_context_get_test_suite(context); cut_assert_not_null(test_suite); cut_assert_equal_string(NULL, cut_test_get_name(CUT_TEST(test_suite))); test_case = cut_test_context_get_test_case(context); cut_assert_not_null(test_case); cut_assert_equal_string("my test case", cut_test_get_name(CUT_TEST(test_case))); test = cut_test_context_get_test(context); cut_assert_not_null(test); cut_assert_equal_string("my test", cut_test_get_name(test)); } void test_complete_test_iterator (void) { CutTestIterator *test_iterator; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " \n" " \n" " my test iterator\n" " \n" " 5\n" " \n" " \n" " \n" " my test iterator\n" " \n" " \n" " \n" " \n" " my iterated test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test iterator\n" " \n" " \n" " my iterated test\n" " \n" " \n" " the first test data\n" " \n" " FALSE\n" " \n" " \n" " \n" " \n" " my iterated test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test iterator\n" " \n" " \n" " my iterated test\n" " \n" " \n" " the first test data\n" " \n" " TRUE\n" " \n" " \n"; gchar complete_test_iterator[] = " \n" " \n" " my test iterator\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->complete_test_iterators); cut_assert_parse(complete_test_iterator); cut_assert_equal_uint(1, g_list_length(receiver->complete_test_iterators)); test_iterator = receiver->complete_test_iterators->data; cut_assert_not_null(test_iterator); cut_assert_equal_string("my test iterator", cut_test_get_name(CUT_TEST(test_iterator))); } void test_complete_test_case (void) { CutTestCase *test_case; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " \n" " \n" " my test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test\n" " \n" " FALSE\n" " \n" " \n" " \n" " \n" " my test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test\n" " \n" " TRUE\n" " \n" " \n"; gchar complete_test_case[] = " \n" " \n" " my test case\n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->complete_test_cases); cut_assert_parse(complete_test_case); cut_assert_equal_int(1, g_list_length(receiver->complete_test_cases)); test_case = receiver->complete_test_cases->data; cut_assert_not_null(test_case); cut_assert_equal_string("my test case", cut_test_get_name(CUT_TEST(test_case))); } void test_complete_test_suite (void) { CutTestSuite *test_suite; gchar header[] = "\n" " \n" " \n" " \n" " 3\n" " 7\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " 2\n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " \n" " \n" " my test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test\n" " \n" " FALSE\n" " \n" " \n" " \n" " \n" " my test\n" " \n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n" " my test\n" " \n" " TRUE\n" " \n" " \n" " \n" " \n" " my test case\n" " \n" " \n"; gchar complete_test_suite[] = " \n" " \n" " \n" " \n"; cut_assert_parse(header); cut_assert_null(receiver->complete_test_suites); cut_assert_parse(complete_test_suite); cut_assert_equal_int(1, g_list_length(receiver->complete_test_suites)); test_suite = receiver->complete_test_suites->data; cut_assert_not_null(test_suite); cut_assert_equal_string(NULL, cut_test_get_name(CUT_TEST(test_suite))); } void test_complete_run_without_success_tag (void) { cut_assert_parse("\n"); cut_assert_equal_int(1, receiver->n_start_runs); cut_assert_null(receiver->complete_runs); cut_assert_parse("\n"); cut_assert_equal_int(1, g_list_length(receiver->complete_runs)); cut_assert_true(GPOINTER_TO_INT(receiver->complete_runs->data)); } void test_complete_run_with_success_true (void) { cut_assert_parse("\n"); cut_assert_equal_int(1, receiver->n_start_runs); cut_assert_null(receiver->complete_runs); cut_assert_parse(" TRUE\n"); cut_assert_null(receiver->complete_runs); cut_assert_parse("\n"); cut_assert_equal_int(1, g_list_length(receiver->complete_runs)); cut_assert_true(GPOINTER_TO_INT(receiver->complete_runs->data)); } void test_complete_run_with_success_false (void) { cut_assert_parse("\n"); cut_assert_equal_int(1, receiver->n_start_runs); cut_assert_null(receiver->complete_runs); cut_assert_parse(" FALSE\n"); cut_assert_null(receiver->complete_runs); cut_assert_parse(""); cut_assert_equal_int(1, g_list_length(receiver->complete_runs)); cut_assert_false(GPOINTER_TO_INT(receiver->complete_runs->data)); } void test_crash_test (void) { gchar xml[] = "\n" " \n" " \n" " stub-crash-test\n" " Crash Test\n" " \n" " \n" " \n" " \n" " stub test case\n" " \n" " \n" " stub-crash-test\n" " Crash Test\n" " \n" " \n" " TRUE\n" " \n" " \n" " \n" " stub test case\n" " \n" " \n" " stub-crash-test\n" " Crash Test\n" " \n" " \n" " crash\n" " This test should crash\n" " \n" " \n" " test-cut-stream-parser.c\n" " 1099\n" " test_crash_test()\n" " \n" " \n" " cut_test_run()\n" " \n" " \n" " run()\n" " \n" " \n" " cut_test_case_run_with_filter()\n" " \n" " \n" " cut-test-suite.c\n" " 129\n" " run()\n" " \n" " \n" " cut_test_suite_run_test_cases()\n" " \n" " \n" " cut_test_suite_run_with_filter()\n" " \n" " \n" " cut-runner.c\n" " 67\n" " cut_runner_run()\n" " \n" " \n" " cut_run_context_start()\n" " \n" " \n" " cut_start_run_context()\n" " \n" " \n" " cut-main.c\n" " 317\n" " cut_run()\n" " \n" " \n" " 2008-07-29T05:16:40Z\n" " 0.000100\n" " \n" " \n" "\n"; /* gchar crashed_backtrace[] = "#4 0x00007fd67b4fbfc5 in test_crash_test () at test-cut-stream-parser.c:1099\n" "#5 0x00007fd68285ea77 in cut_test_run (test=0xfc0e30, test_context=0xf90840, \n" "#6 0x00007fd682860cc4 in run (test_case=0xfb3400, test=0xfc0e30, \n" "#7 0x00007fd682860e9d in cut_test_case_run_with_filter (test_case=0xfb3400, \n" "#8 0x00007fd682862c66 in run (data=0xfc3560) at cut-test-suite.c:129\n" "#9 0x00007fd68286313e in cut_test_suite_run_test_cases (test_suite=0xf88c60, \n" "#10 0x00007fd6828631e0 in cut_test_suite_run_with_filter (test_suite=0xf88c60, \n" "#11 0x00007fd68285dbe8 in cut_runner_run (runner=0xf8d840) at cut-runner.c:67\n" "#12 0x00007fd68285bc7f in cut_run_context_start (context=0xf8d840)\n" "#13 0x00007fd68285e072 in cut_start_run_context (run_context=0xf8d840)\n" "#14 0x00007fd68285e1be in cut_run () at cut-main.c:317\n"; */ g_signal_connect(parser, "result", G_CALLBACK(collect_result), (gpointer)&result); cut_assert_parse(xml); cut_assert_equal_int(CUT_TEST_RESULT_CRASH, cut_test_result_get_status(result)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-module.c0000644000175000017500000000521011277551064022344 0ustar koukou#include #include #include "../lib/cuttest-utils.h" void test_load_module (void); void test_collect_names (void); void test_collect_registered_types (void); void test_load_modules_unique (void); void test_fail_to_load_module (void); static GList *modules = NULL; static gchar *modules_dir = NULL; static GLogFunc original_log_func = NULL; static void log_func (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { } void cut_startup (void) { original_log_func = g_log_set_default_handler(log_func, NULL); modules_dir = g_build_filename(cuttest_get_base_dir(), "fixtures", "loader", "module", #ifndef G_OS_WIN32 ".libs", #endif NULL); modules = cut_module_load_modules(modules_dir); } void cut_shutdown (void) { g_list_foreach(modules, (GFunc) cut_module_unload, NULL); g_list_free(modules); modules = NULL; g_free(modules_dir); g_log_set_default_handler(original_log_func, NULL); } void test_load_module (void) { cut_assert(modules); cut_assert(cut_module_find(modules, "test1")); } void test_fail_to_load_module (void) { cut_assert(modules); cut_assert(!cut_module_find(modules, "XXX")); } void test_collect_names (void) { GList *names; cut_assert(modules); names = cut_module_collect_names(modules); cut_assert(names); cut_assert_equal_int(3, g_list_length(names)); cut_assert_equal_string("cannot-load-module", names->data); cut_assert_equal_string("test1", g_list_nth_data(names, 1)); cut_assert_equal_string("test2", g_list_nth_data(names, 2)); g_list_free(names); } void test_collect_registered_types (void) { GList *registered_types; cut_assert(modules); registered_types = cut_module_collect_registered_types(modules); cut_assert(registered_types); cut_assert_equal_int(2, g_list_length(registered_types)); cut_assert_equal_string("CutModuleTest1", registered_types->data); cut_assert_equal_string("CutModuleTest2", g_list_next(registered_types)->data); g_list_free(registered_types); } void test_load_modules_unique (void) { GList *reloaded_modules; cut_assert(modules); cut_assert_equal_int(3, g_list_length(modules)); reloaded_modules = cut_module_load_modules_unique(modules_dir, modules); cut_assert(reloaded_modules); cut_assert_equal_int(3, g_list_length(reloaded_modules)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-sub-process.c0000644000175000017500000000643611273303401023321 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "../lib/cuttest-assertions.h" void test_run (void); static CutRunContext *pipeline; static gchar *env_test_dir; #define build_test_dir(dir, ...) \ g_build_filename(cuttest_get_base_dir(), \ "fixtures", \ "sub-process", \ "fixtures", \ dir, \ ## __VA_ARGS__, \ NULL) void cut_setup (void) { pipeline = cut_pipeline_new(); env_test_dir = g_strdup(g_getenv(CUTTEST_TEST_DIR_KEY)); } void cut_teardown (void) { if (pipeline) g_object_unref(pipeline); if (env_test_dir) { g_setenv(CUTTEST_TEST_DIR_KEY, env_test_dir, TRUE); g_free(env_test_dir); } else { g_unsetenv(CUTTEST_TEST_DIR_KEY); } } static void report_error (CutRunContext *context, GError *error, gpointer user_data) { gcut_assert_error(error, cut_message("Pipeline Error")); } static gboolean run (const gchar *test_dir) { const gchar *exclude_directories[] = {"fixtures", NULL}; gchar *test_invoker_dir; cut_run_context_set_exclude_directories(pipeline, exclude_directories); test_invoker_dir = g_build_filename(cuttest_get_base_dir(), "fixtures", "sub-process", NULL); cut_run_context_set_test_directory(pipeline, test_invoker_dir); cut_run_context_set_source_directory(pipeline, test_invoker_dir); g_free(test_invoker_dir); g_setenv(CUTTEST_TEST_DIR_KEY, test_dir, TRUE); g_signal_connect(pipeline, "error", G_CALLBACK(report_error), NULL); return cut_run_context_start(pipeline); } void test_run (void) { const gchar *test_dir; gint n_normal_tests, n_iterated_tests, n_spike_tests; gint n_spike_test_assertions; gint n_results, n_non_critical_results; test_dir = cut_take_string(build_test_dir("normal")); cut_assert_false(run(test_dir)); n_normal_tests = 1; n_iterated_tests = 2; n_spike_tests = 1; n_spike_test_assertions = 1; n_results = 6; n_non_critical_results = 3; cut_assert_test_result_summary(pipeline, (n_normal_tests + n_iterated_tests) * n_results + n_spike_tests, (n_normal_tests + n_iterated_tests) + (n_spike_test_assertions * n_spike_tests), (n_normal_tests + n_iterated_tests) * n_non_critical_results + n_spike_tests, (n_normal_tests + n_iterated_tests), (n_normal_tests + n_iterated_tests), (n_normal_tests + n_iterated_tests), (n_normal_tests + n_iterated_tests), (n_normal_tests + n_iterated_tests)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cutter/test-cut-contractor.c0000644000175000017500000000110711271045142023223 0ustar koukou#include "cutter.h" #include "cut-contractor.h" void test_has_builder (void); static CutContractor *contractor; void cut_setup (void) { contractor = NULL; } void cut_teardown (void) { if (contractor) g_object_unref(contractor); } void test_has_builder (void) { contractor = cut_contractor_new(); cut_assert(contractor); cut_assert(cut_contractor_has_builder(contractor, "ui")); cut_assert(cut_contractor_has_builder(contractor, "report")); cut_assert(!cut_contractor_has_builder(contractor, "XXX")); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/lib/0000755000175000017500000000000011525707413016404 5ustar koukoucutter-testing-framework-1.1.7/test/lib/cuttest-enum.c0000644000175000017500000000252211205747027021206 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include "cuttest-enum.h" GType cuttest_flags_get_type (void) { static GType flags_type = 0; if (flags_type == 0) { static const GFlagsValue values[] = { {CUTTEST_FLAG_FIRST, "CUTTEST_FLAG_FIRST", "first"}, {CUTTEST_FLAG_SECOND, "CUTTEST_FLAG_SECOND", "second"}, {CUTTEST_FLAG_THIRD, "CUTTEST_FLAG_THIRD", "third"}, {0, NULL, NULL} }; flags_type = g_flags_register_static("CuttestFlags", values); } return flags_type; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/lib/cuttest-utils.h0000644000175000017500000000304611266601365021412 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUTTEST_UTILS_H__ #define __CUTTEST_UTILS_H__ #include #include #include #include #include "cuttest-enum.h" G_BEGIN_DECLS #define ISO8601_PATTERN_WITHOUT_YEAR \ "\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z" #define ISO8601_PATTERN "\\d{4}-" ISO8601_PATTERN_WITHOUT_YEAR #define CUTTEST_TEST_DIR_KEY "CUTTEST_TEST_DIR" const gchar *cuttest_get_base_dir (void); void cuttest_add_test (CutTestCase *test_case, const gchar *test_name, CutTestFunction test_function); G_END_DECLS #endif /* __CUTTEST_UTILS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/lib/cuttest-assertions.c0000644000175000017500000002455111273306321022433 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include "cuttest-assertions.h" #include #include static GList * cuttest_result_summary_list_new (guint n_tests, guint n_assertions, guint n_successes, guint n_failures, guint n_errors, guint n_pendings, guint n_notifications, guint n_omissions) { GList *list = NULL; #define APPEND(uint_value) \ list = g_list_append(list, GUINT_TO_POINTER(uint_value)); \ APPEND(n_tests); APPEND(n_assertions); APPEND(n_successes); APPEND(n_failures); APPEND(n_errors); APPEND(n_pendings); APPEND(n_notifications); APPEND(n_omissions); #undef APPEND return list; } static GList * cuttest_result_summary_list_new_from_run_context (CutRunContext *run_context) { return cuttest_result_summary_list_new( cut_run_context_get_n_tests(run_context), cut_run_context_get_n_assertions(run_context), cut_run_context_get_n_successes(run_context), cut_run_context_get_n_failures(run_context), cut_run_context_get_n_errors(run_context), cut_run_context_get_n_pendings(run_context), cut_run_context_get_n_notifications(run_context), cut_run_context_get_n_omissions(run_context)); } static GList * cuttest_result_string_list_new_va_list (const gchar *test_name, const gchar *user_message, const gchar *system_message, const gchar *message, const gchar *expected, const gchar *actual, const gchar *backtrace, va_list args) { GList *strings = NULL; const gchar *file_line, *function; #define APPEND(value) \ strings = g_list_append(strings, g_strdup(value)) APPEND(test_name); APPEND(user_message); APPEND(system_message); if (message) { APPEND(message); } else { GString *computed_message; computed_message = g_string_new(NULL); if (user_message) g_string_append(computed_message, user_message); if (system_message) { if (computed_message->len > 0) g_string_append(computed_message, "\n"); g_string_append(computed_message, system_message); } if (expected) { if (computed_message->len > 0) g_string_append(computed_message, "\n"); g_string_append_printf(computed_message, "expected: <%s>", expected); } if (actual) { if (computed_message->len > 0) g_string_append(computed_message, "\n"); g_string_append_printf(computed_message, " actual: <%s>", actual); } if (expected && actual) { const gchar *diff; diff = cut_take_diff(expected, actual); if (diff && cut_diff_readable_is_interested(diff)) { g_string_append_printf(computed_message, "\n\ndiff:\n%s", diff); if (cut_diff_readable_need_fold(diff)) { const gchar *folded_diff; folded_diff = cut_diff_readable_folded(expected, actual); g_string_append_printf(computed_message, "\n\nfolded diff:\n%s", folded_diff); } } } if (computed_message->len > 0) APPEND(computed_message->str); else APPEND(NULL); g_string_free(computed_message, TRUE); } APPEND(expected); APPEND(actual); file_line = backtrace; while (file_line) { function = va_arg(args, const gchar *); APPEND(file_line); APPEND(function); file_line = va_arg(args, const gchar *); } #undef APPEND return strings; } static GList * cuttest_result_string_list_new (const gchar *test_name, const gchar *user_message, const gchar *system_message, const gchar *message, const gchar *expected, const gchar *actual, const gchar *backtrace, ...) { GList *result_list; va_list args; va_start(args, backtrace); result_list = cuttest_result_string_list_new_va_list(test_name, user_message, system_message, message, expected, actual, backtrace, args); va_end(args); return result_list; } static GList * cuttest_result_string_list_new_from_result (CutTestResult *result) { GList *result_list; const GList *backtrace, *node; result_list = cuttest_result_string_list_new( cut_test_result_get_test_name(result), cut_test_result_get_user_message(result), cut_test_result_get_system_message(result), cut_test_result_get_message(result), cut_test_result_get_expected(result), cut_test_result_get_actual(result), NULL); backtrace = cut_test_result_get_backtrace(result); for (node = backtrace; node; node = g_list_next(node)) { CutBacktraceEntry *entry = node->data; const gchar *file, *function_name; guint line; file = cut_backtrace_entry_get_file(entry); line = cut_backtrace_entry_get_line(entry); function_name = cut_backtrace_entry_get_function(entry); result_list = g_list_append(result_list, g_strdup_printf("%s:%u", file, line)); result_list = g_list_append(result_list, g_strdup(function_name)); } return result_list; } void cut_assert_test_result_summary_helper(CutRunContext *run_context, guint n_tests, guint n_assertions, guint n_successes, guint n_failures, guint n_errors, guint n_pendings, guint n_notifications, guint n_omissions) { GList *result_summary; const GList *expected_result_summary; const GList *actual_result_summary; result_summary = cuttest_result_summary_list_new(n_tests, n_assertions, n_successes, n_failures, n_errors, n_pendings, n_notifications, n_omissions); expected_result_summary = cut_take_result_summary_list(result_summary); result_summary = cuttest_result_summary_list_new_from_run_context(run_context); actual_result_summary = cut_take_result_summary_list(result_summary); gcut_assert_equal_list_uint(expected_result_summary, actual_result_summary); } void cut_assert_test_result_helper(CutRunContext *run_context, guint i, CutTestResultStatus status, const gchar *test_name, const gchar *user_message, const gchar *system_message, const gchar *message, const gchar *expected, const gchar *actual, const gchar *backtrace, ...) { const GList *results; CutTestResult *result; GList *strings = NULL; const GList *expected_strings, *actual_strings; va_list args; results = cut_run_context_get_results(run_context); cut_assert_operator_int(i, <, g_list_length((GList *)results)); result = g_list_nth_data((GList *)results, i); cut_assert(result); cut_assert_equal_int(status, cut_test_result_get_status(result)); va_start(args, backtrace); strings = cuttest_result_string_list_new_va_list(test_name, user_message, system_message, message, expected, actual, backtrace, args); va_end(args); expected_strings = cut_take_result_string_list(strings); strings = cuttest_result_string_list_new_from_result(result); actual_strings = cut_take_result_string_list(strings); gcut_assert_equal_list_string(expected_strings, actual_strings); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/lib/cuttest-echo/0000755000175000017500000000000011525707414021014 5ustar koukoucutter-testing-framework-1.1.7/test/lib/cuttest-echo/cuttest-echo.c0000644000175000017500000000363011424022517023561 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007, 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include static gboolean output_to_stderr = FALSE; static const gchar parameter_string[] = "STRING"; static const GOptionEntry option_entries[] = { {"stderr", 'e', 0, G_OPTION_ARG_NONE, &output_to_stderr, ("Output string to stderr"), NULL}, {NULL} }; int main (int argc, char *argv[]) { GError *error = NULL; gboolean success = FALSE; GOptionContext *option_context; option_context = g_option_context_new(parameter_string); g_option_context_add_main_entries(option_context, option_entries, NULL); if (!g_option_context_parse(option_context, &argc, &argv, &error)) { g_print("%s\n", error->message); g_error_free(error); g_option_context_free(option_context); exit(EXIT_FAILURE); } if (argc == 2) { if (output_to_stderr) g_printerr("%s\n", argv[1]); else g_print("%s\n", argv[1]); success = TRUE; } return success ? EXIT_SUCCESS : EXIT_FAILURE; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/lib/cuttest-echo/Makefile.in0000644000175000017500000004412711525654637023101 0ustar koukou# 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@ 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@ noinst_PROGRAMS = cuttest-echo$(EXEEXT) subdir = test/lib/cuttest-echo DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_cuttest_echo_OBJECTS = cuttest-echo.$(OBJEXT) cuttest_echo_OBJECTS = $(am_cuttest_echo_OBJECTS) am__DEPENDENCIES_1 = cuttest_echo_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(cuttest_echo_SOURCES) DIST_SOURCES = $(cuttest_echo_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CFLAGS = $(CUTTER_CFLAGS) cuttest_echo_LDADD = $(GLIB_LIBS) cuttest_echo_SOURCES = cuttest-echo.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/lib/cuttest-echo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/lib/cuttest-echo/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list cuttest-echo$(EXEEXT): $(cuttest_echo_OBJECTS) $(cuttest_echo_DEPENDENCIES) @rm -f cuttest-echo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cuttest_echo_OBJECTS) $(cuttest_echo_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cuttest-echo.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/lib/cuttest-echo/Makefile.am0000644000175000017500000000034611424022517023043 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CFLAGS = $(CUTTER_CFLAGS) noinst_PROGRAMS = cuttest-echo cuttest_echo_LDADD = $(GLIB_LIBS) cuttest_echo_SOURCES = cuttest-echo.c cutter-testing-framework-1.1.7/test/lib/cuttest-assertions.h0000644000175000017500000001375411277441337022456 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUTTEST_ASSERTIONS_H__ #define __CUTTEST_ASSERTIONS_H__ #include #include #include #include #include "cuttest-utils.h" G_BEGIN_DECLS #define cut_take_result_summary_list(list) \ gcut_take_list(list, NULL) #define cut_take_result_string_list(list) \ gcut_take_list(list, g_free) #define cut_assert_test_result_summary(run_context, n_tests, \ n_assertions, n_successes, \ n_failures, n_errors, \ n_pendings, n_notifications, \ n_omissions) \ cut_trace_with_info_expression( \ cut_assert_test_result_summary_helper(run_context, n_tests, \ n_assertions, \ n_successes, \ n_failures, n_errors, \ n_pendings, \ n_notifications, \ n_omissions), \ cut_assert_test_result_summary(run_context, n_tests, \ n_assertions, n_successes, \ n_failures, n_errors, \ n_pendings, n_notifications, \ n_omissions)) #define cut_assert_test_result_with_message(run_context, i, status, \ test_name, user_message, \ system_message, message, \ expected, actual, \ backtrace, ...) \ cut_trace_with_info_expression( \ cut_assert_test_result_helper(run_context, i, status, \ test_name, user_message, \ system_message, message, \ expected, actual, \ backtrace, __VA_ARGS__), \ cut_assert_test_result_with_message(run_context, i, status, \ test_name, user_message, \ system_message, message, \ expected, actual, \ backtrace, __VA_ARGS__)) #define cut_assert_test_result(run_context, i, status, test_name, \ user_message, system_message, \ expected, actual, \ backtrace, ...) \ cut_trace_with_info_expression( \ cut_assert_test_result_helper(run_context, i, status, \ test_name, user_message, \ system_message, NULL, \ expected, actual, \ backtrace, __VA_ARGS__), \ cut_assert_test_result(run_context, i, status, test_name, \ user_message, system_message, \ expected, actual, \ backtrace, __VA_ARGS__)) void cut_assert_test_result_summary_helper (CutRunContext *run_context, guint n_tests, guint n_assertions, guint n_successes, guint n_failures, guint n_errors, guint n_pendings, guint n_notifications, guint n_omissions); void cut_assert_test_result_helper (CutRunContext *run_context, guint i, CutTestResultStatus status, const gchar *test_name, const gchar *user_message, const gchar *system_message, const gchar *message, const gchar *expected, const gchar *actual, const gchar *backtrace, ...); G_END_DECLS #endif /* __CUTTEST_ASSERTIONS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/lib/cuttest-enum.h0000644000175000017500000000225411205747027021215 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUTTEST_ENUM_H__ #define __CUTTEST_ENUM_H__ #include G_BEGIN_DECLS typedef enum { CUTTEST_FLAG_FIRST = (1 << 0), CUTTEST_FLAG_SECOND = (1 << 1), CUTTEST_FLAG_THIRD = (1 << 2) } CuttestFlags; GType cuttest_flags_get_type (void); #define CUTTEST_TYPE_FLAGS (cuttest_flags_get_type()) G_END_DECLS #endif /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/lib/cuttest-event-receiver.h0000644000175000017500000000732211205747027023175 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __CUTTEST_EVENT_RECEIVER_H__ #define __CUTTEST_EVENT_RECEIVER_H__ #include #include G_BEGIN_DECLS #define CUTTEST_TYPE_EVENT_RECEIVER (cuttest_event_receiver_get_type ()) #define CUTTEST_EVENT_RECEIVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUTTEST_TYPE_EVENT_RECEIVER, CuttestEventReceiver)) #define CUTTEST_EVENT_RECEIVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUTTEST_TYPE_EVENT_RECEIVER, CuttestEventReceiverClass)) #define CUTTEST_IS_EVENT_RECEIVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUTTEST_TYPE_EVENT_RECEIVER)) #define CUTTEST_IS_EVENT_RECEIVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUTTEST_TYPE_EVENT_RECEIVER)) #define CUTTEST_EVENT_RECEIVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUTTEST_TYPE_EVENT_RECEIVER, CuttestEventReceiverClass)) typedef struct _CuttestEventReceiver CuttestEventReceiver; typedef struct _CuttestEventReceiverClass CuttestEventReceiverClass; struct _CuttestEventReceiver { CutRunContext object; guint n_start_runs; GList *ready_test_suites; GList *start_test_suites; GList *ready_test_cases; GList *start_test_cases; GList *ready_test_iterators; GList *start_test_iterators; GList *start_tests; GList *start_iterated_tests; GList *pass_assertions; GList *complete_iterated_tests; GList *complete_tests; GList *complete_test_iterators; GList *complete_test_cases; GList *complete_test_suites; GList *complete_runs; }; struct _CuttestEventReceiverClass { CutRunContextClass parent_class; }; typedef struct _CuttestReadyTestSuiteInfo { CutTestSuite *test_suite; guint n_test_cases; guint n_tests; } CuttestReadyTestSuiteInfo; typedef struct _CuttestReadyTestCaseInfo { CutTestCase *test_case; guint n_tests; } CuttestReadyTestCaseInfo; typedef struct _CuttestReadyTestIteratorInfo { CutTestIterator *test_iterator; guint n_tests; } CuttestReadyTestIteratorInfo; typedef struct _CuttestStartTestInfo { CutTest *test; CutTestContext *test_context; } CuttestStartTestInfo; typedef struct _CuttestStartIteratedTestInfo { CutIteratedTest *iterated_test; CutTestContext *test_context; } CuttestStartIteratedTestInfo; typedef struct _CuttestPassAssertionInfo { CutTest *test; CutTestContext *test_context; } CuttestPassAssertionInfo; typedef struct _CuttestCompleteIteratedTestInfo { CutIteratedTest *iterated_test; CutTestContext *test_context; gboolean success; } CuttestCompleteIteratedTestInfo; typedef struct _CuttestCompleteTestInfo { CutTest *test; CutTestContext *test_context; gboolean success; } CuttestCompleteTestInfo; GType cuttest_event_receiver_get_type (void) G_GNUC_CONST; CutRunContext *cuttest_event_receiver_new (void); G_END_DECLS #endif /* __CUTTEST_EVENT_RECEIVER_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/lib/Makefile.in0000644000175000017500000006233411525654637020472 0ustar koukou# 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@ 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@ @HAVE_GTK_TRUE@am__append_1 = $(GTK_CFLAGS) subdir = test/lib DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = libcuttest_event_receiver_la_LIBADD = am__objects_1 = am_libcuttest_event_receiver_la_OBJECTS = $(am__objects_1) \ cuttest-event-receiver.lo libcuttest_event_receiver_la_OBJECTS = \ $(am_libcuttest_event_receiver_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libcuttest_utils_la_LIBADD = am_libcuttest_utils_la_OBJECTS = $(am__objects_1) cuttest-utils.lo \ cuttest-assertions.lo cuttest-enum.lo libcuttest_utils_la_OBJECTS = $(am_libcuttest_utils_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libcuttest_event_receiver_la_SOURCES) \ $(libcuttest_utils_la_SOURCES) DIST_SOURCES = $(libcuttest_event_receiver_la_SOURCES) \ $(libcuttest_utils_la_SOURCES) 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = \ cuttest-echo INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = -DCUT_RELATIVE_PATH="\"lib\"" $(CUTTER_CFLAGS) \ $(am__append_1) EXTRA_DIST = cuttest-assertions.h check_LTLIBRARIES = \ libcuttest-utils.la \ libcuttest-event-receiver.la AM_LDFLAGS = \ -rpath `pwd`/.libs \ -avoid-version \ -no-undefined libcuttest_utils_public_headers = \ cuttest-utils.h \ cuttest-assertions.h \ cuttest-enum.h libcuttest_utils_la_SOURCES = \ $(libcuttest_utils_public_headers) \ cuttest-utils.c \ cuttest-assertions.c \ cuttest-enum.c libcuttest_event_receiver_public_headers = \ cuttest-event-receiver.h libcuttest_event_receiver_la_SOURCES = \ $(libcuttest_event_receiver_public_headers) \ cuttest-event-receiver.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/lib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libcuttest-event-receiver.la: $(libcuttest_event_receiver_la_OBJECTS) $(libcuttest_event_receiver_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcuttest_event_receiver_la_OBJECTS) $(libcuttest_event_receiver_la_LIBADD) $(LIBS) libcuttest-utils.la: $(libcuttest_utils_la_OBJECTS) $(libcuttest_utils_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcuttest_utils_la_OBJECTS) $(libcuttest_utils_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cuttest-assertions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cuttest-enum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cuttest-event-receiver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cuttest-utils.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-checkLTLIBRARIES \ clean-generic clean-libtool ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am echo-cuttest-utils-public-headers: @for header in $(libcuttest_utils_public_headers); do \ echo $(abs_srcdir)/$${header}; \ done echo-cuttest-event-receiver-public-headers: @for header in $(libcuttest_event_receiver_public_headers); do \ echo $(abs_srcdir)/$${header}; \ done # 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: cutter-testing-framework-1.1.7/test/lib/Makefile.am0000644000175000017500000000240311424022520020422 0ustar koukouSUBDIRS = \ cuttest-echo INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = \ -DCUT_RELATIVE_PATH="\"lib\"" \ $(CUTTER_CFLAGS) if HAVE_GTK AM_CFLAGS += $(GTK_CFLAGS) endif EXTRA_DIST = cuttest-assertions.h check_LTLIBRARIES = \ libcuttest-utils.la \ libcuttest-event-receiver.la LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) AM_LDFLAGS = \ -rpath `pwd`/.libs \ -avoid-version \ -no-undefined libcuttest_utils_public_headers = \ cuttest-utils.h \ cuttest-assertions.h \ cuttest-enum.h libcuttest_utils_la_SOURCES = \ $(libcuttest_utils_public_headers) \ cuttest-utils.c \ cuttest-assertions.c \ cuttest-enum.c libcuttest_event_receiver_public_headers = \ cuttest-event-receiver.h libcuttest_event_receiver_la_SOURCES = \ $(libcuttest_event_receiver_public_headers) \ cuttest-event-receiver.c echo-cuttest-utils-public-headers: @for header in $(libcuttest_utils_public_headers); do \ echo $(abs_srcdir)/$${header}; \ done echo-cuttest-event-receiver-public-headers: @for header in $(libcuttest_event_receiver_public_headers); do \ echo $(abs_srcdir)/$${header}; \ done cutter-testing-framework-1.1.7/test/lib/cuttest-utils.c0000644000175000017500000000065011205747027021402 0ustar koukou#include "cuttest-utils.h" const gchar * cuttest_get_base_dir(void) { const gchar *dir; dir = g_getenv("BASE_DIR"); return dir ? dir : "."; } void cuttest_add_test (CutTestCase *test_case, const gchar *test_name, CutTestFunction test_function) { CutTest *test; test = cut_test_new(test_name, test_function); cut_test_case_add_test(test_case, test); g_object_unref(test); } cutter-testing-framework-1.1.7/test/lib/cuttest-event-receiver.c0000644000175000017500000004323411205747027023172 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "cuttest-event-receiver.h" G_DEFINE_TYPE(CuttestEventReceiver, cuttest_event_receiver, CUT_TYPE_RUN_CONTEXT) static CuttestReadyTestSuiteInfo * ready_test_suite_info_new (CutTestSuite *test_suite, guint n_test_cases, guint n_tests) { CuttestReadyTestSuiteInfo *info; info = g_slice_new(CuttestReadyTestSuiteInfo); info->test_suite = test_suite; if (info->test_suite) g_object_ref(info->test_suite); info->n_test_cases = n_test_cases; info->n_tests = n_tests; return info; } static void ready_test_suite_info_free (CuttestReadyTestSuiteInfo *info) { if (info->test_suite) g_object_unref(info->test_suite); g_slice_free(CuttestReadyTestSuiteInfo, info); } static CuttestReadyTestCaseInfo * ready_test_case_info_new (CutTestCase *test_case, guint n_tests) { CuttestReadyTestCaseInfo *info; info = g_slice_new(CuttestReadyTestCaseInfo); info->test_case = test_case; if (info->test_case) g_object_ref(info->test_case); info->n_tests = n_tests; return info; } static void ready_test_case_info_free (CuttestReadyTestCaseInfo *info) { if (info->test_case) g_object_unref(info->test_case); g_slice_free(CuttestReadyTestCaseInfo, info); } static CuttestReadyTestIteratorInfo * ready_test_iterator_info_new (CutTestIterator *test_iterator, guint n_tests) { CuttestReadyTestIteratorInfo *info; info = g_slice_new(CuttestReadyTestIteratorInfo); info->test_iterator = test_iterator; if (info->test_iterator) g_object_ref(info->test_iterator); info->n_tests = n_tests; return info; } static void ready_test_iterator_info_free (CuttestReadyTestIteratorInfo *info) { if (info->test_iterator) g_object_unref(info->test_iterator); g_slice_free(CuttestReadyTestIteratorInfo, info); } static CuttestStartTestInfo * start_test_info_new (CutTest *test, CutTestContext *test_context) { CuttestStartTestInfo *info; info = g_slice_new(CuttestStartTestInfo); info->test = test; if (info->test) g_object_ref(info->test); info->test_context = test_context; if (info->test_context) g_object_ref(info->test_context); return info; } static void start_test_info_free (CuttestStartTestInfo *info) { if (info->test) g_object_unref(info->test); if (info->test_context) g_object_unref(info->test_context); g_slice_free(CuttestStartTestInfo, info); } static CuttestStartIteratedTestInfo * start_iterated_test_info_new (CutIteratedTest *iterated_test, CutTestContext *test_context) { CuttestStartIteratedTestInfo *info; info = g_slice_new(CuttestStartIteratedTestInfo); info->iterated_test = iterated_test; if (info->iterated_test) g_object_ref(info->iterated_test); info->test_context = test_context; if (info->test_context) g_object_ref(info->test_context); return info; } static void start_iterated_test_info_free (CuttestStartIteratedTestInfo *info) { if (info->iterated_test) g_object_unref(info->iterated_test); if (info->test_context) g_object_unref(info->test_context); g_slice_free(CuttestStartIteratedTestInfo, info); } static CuttestPassAssertionInfo * pass_assertion_info_new (CutTest *test, CutTestContext *test_context) { CuttestPassAssertionInfo *info; info = g_slice_new(CuttestPassAssertionInfo); info->test = test; if (info->test) g_object_ref(info->test); info->test_context = test_context; if (info->test_context) g_object_ref(info->test_context); return info; } static void pass_assertion_info_free (CuttestPassAssertionInfo *info) { if (info->test) g_object_unref(info->test); if (info->test_context) g_object_unref(info->test_context); g_slice_free(CuttestPassAssertionInfo, info); } static CuttestCompleteIteratedTestInfo * complete_iterated_test_info_new (CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success) { CuttestCompleteIteratedTestInfo *info; info = g_slice_new(CuttestCompleteIteratedTestInfo); info->iterated_test = iterated_test; if (info->iterated_test) g_object_ref(info->iterated_test); info->test_context = test_context; if (info->test_context) g_object_ref(info->test_context); info->success = success; return info; } static void complete_iterated_test_info_free (CuttestCompleteIteratedTestInfo *info) { if (info->iterated_test) g_object_unref(info->iterated_test); if (info->test_context) g_object_unref(info->test_context); g_slice_free(CuttestCompleteIteratedTestInfo, info); } static CuttestCompleteTestInfo * complete_test_info_new (CutTest *test, CutTestContext *test_context, gboolean success) { CuttestCompleteTestInfo *info; info = g_slice_new(CuttestCompleteTestInfo); info->test = test; if (info->test) g_object_ref(info->test); info->test_context = test_context; if (info->test_context) g_object_ref(info->test_context); info->success = success; return info; } static void complete_test_info_free (CuttestCompleteTestInfo *info) { if (info->test) g_object_unref(info->test); if (info->test_context) g_object_unref(info->test_context); g_slice_free(CuttestCompleteTestInfo, info); } static void dispose (GObject *object) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(object); if (receiver->ready_test_suites) { g_list_foreach(receiver->ready_test_suites, (GFunc)ready_test_suite_info_free, NULL); g_list_free(receiver->ready_test_suites); receiver->ready_test_suites = NULL; } if (receiver->start_test_suites) { g_list_foreach(receiver->start_test_suites, (GFunc)g_object_unref, NULL); g_list_free(receiver->start_test_suites); receiver->start_test_suites = NULL; } if (receiver->ready_test_cases) { g_list_foreach(receiver->ready_test_cases, (GFunc)ready_test_case_info_free, NULL); g_list_free(receiver->ready_test_cases); receiver->ready_test_cases = NULL; } if (receiver->start_test_cases) { g_list_foreach(receiver->start_test_cases, (GFunc)g_object_unref, NULL); g_list_free(receiver->start_test_cases); receiver->start_test_cases = NULL; } if (receiver->ready_test_iterators) { g_list_foreach(receiver->ready_test_iterators, (GFunc)ready_test_iterator_info_free, NULL); g_list_free(receiver->ready_test_iterators); receiver->ready_test_iterators = NULL; } if (receiver->start_test_iterators) { g_list_foreach(receiver->start_test_iterators, (GFunc)g_object_unref, NULL); g_list_free(receiver->start_test_iterators); receiver->start_test_iterators = NULL; } if (receiver->start_tests) { g_list_foreach(receiver->start_tests, (GFunc)start_test_info_free, NULL); g_list_free(receiver->start_tests); receiver->start_tests = NULL; } if (receiver->start_iterated_tests) { g_list_foreach(receiver->start_iterated_tests, (GFunc)start_iterated_test_info_free, NULL); g_list_free(receiver->start_iterated_tests); receiver->start_iterated_tests = NULL; } if (receiver->pass_assertions) { g_list_foreach(receiver->pass_assertions, (GFunc)pass_assertion_info_free, NULL); g_list_free(receiver->pass_assertions); receiver->pass_assertions = NULL; } if (receiver->complete_iterated_tests) { g_list_foreach(receiver->complete_iterated_tests, (GFunc)complete_iterated_test_info_free, NULL); g_list_free(receiver->complete_iterated_tests); receiver->complete_iterated_tests = NULL; } if (receiver->complete_tests) { g_list_foreach(receiver->complete_tests, (GFunc)complete_test_info_free, NULL); g_list_free(receiver->complete_tests); receiver->complete_tests = NULL; } if (receiver->complete_test_iterators) { g_list_foreach(receiver->complete_test_iterators, (GFunc)g_object_unref, NULL); g_list_free(receiver->complete_test_iterators); receiver->complete_test_iterators = NULL; } if (receiver->complete_test_cases) { g_list_foreach(receiver->complete_test_cases, (GFunc)g_object_unref, NULL); g_list_free(receiver->complete_test_cases); receiver->complete_test_cases = NULL; } if (receiver->complete_test_suites) { g_list_foreach(receiver->complete_test_suites, (GFunc)g_object_unref, NULL); g_list_free(receiver->complete_test_suites); receiver->complete_test_suites = NULL; } if (receiver->complete_runs) { g_list_free(receiver->complete_runs); receiver->complete_runs = NULL; } G_OBJECT_CLASS(cuttest_event_receiver_parent_class)->dispose(object); } static void start_run (CutRunContext *context) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(context); receiver->n_start_runs++; } static void ready_test_suite (CutRunContext *context, CutTestSuite *test_suite, guint n_test_cases, guint n_tests) { CuttestEventReceiver *receiver; CuttestReadyTestSuiteInfo *info; receiver = CUTTEST_EVENT_RECEIVER(context); info = ready_test_suite_info_new(test_suite, n_test_cases, n_tests); receiver->ready_test_suites = g_list_append(receiver->ready_test_suites, info); } static void start_test_suite (CutRunContext *context, CutTestSuite *test_suite) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(context); receiver->start_test_suites = g_list_append(receiver->start_test_suites, g_object_ref(test_suite)); } static void ready_test_case (CutRunContext *context, CutTestCase *test_case, guint n_tests) { CuttestEventReceiver *receiver; CuttestReadyTestCaseInfo *info; receiver = CUTTEST_EVENT_RECEIVER(context); info = ready_test_case_info_new(test_case, n_tests); receiver->ready_test_cases = g_list_append(receiver->ready_test_cases, info); } static void start_test_case (CutRunContext *context, CutTestCase *test_case) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(context); receiver->start_test_cases = g_list_append(receiver->start_test_cases, g_object_ref(test_case)); } static void ready_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, guint n_tests) { CuttestEventReceiver *receiver; CuttestReadyTestIteratorInfo *info; receiver = CUTTEST_EVENT_RECEIVER(context); info = ready_test_iterator_info_new(test_iterator, n_tests); receiver->ready_test_iterators = g_list_append(receiver->ready_test_iterators, info); } static void start_test_iterator (CutRunContext *context, CutTestIterator *test_iterator) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(context); receiver->start_test_iterators = g_list_append(receiver->start_test_iterators, g_object_ref(test_iterator)); } static void start_test (CutRunContext *context, CutTest *test, CutTestContext *test_context) { CuttestEventReceiver *receiver; CuttestStartTestInfo *info; receiver = CUTTEST_EVENT_RECEIVER(context); info = start_test_info_new(test, test_context); receiver->start_tests = g_list_append(receiver->start_tests, info); } static void start_iterated_test (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context) { CuttestEventReceiver *receiver; CuttestStartIteratedTestInfo *info; receiver = CUTTEST_EVENT_RECEIVER(context); info = start_iterated_test_info_new(iterated_test, test_context); receiver->start_iterated_tests = g_list_append(receiver->start_iterated_tests, info); } static void pass_assertion (CutRunContext *context, CutTest *test, CutTestContext *test_context) { CuttestEventReceiver *receiver; CuttestPassAssertionInfo *info; receiver = CUTTEST_EVENT_RECEIVER(context); info = pass_assertion_info_new(test, test_context); receiver->pass_assertions = g_list_append(receiver->pass_assertions, info); } static void complete_iterated_test (CutRunContext *context, CutIteratedTest *iterated_test, CutTestContext *test_context, gboolean success) { CuttestEventReceiver *receiver; CuttestCompleteIteratedTestInfo *info; receiver = CUTTEST_EVENT_RECEIVER(context); info = complete_iterated_test_info_new(iterated_test, test_context, success); receiver->complete_iterated_tests = g_list_append(receiver->complete_iterated_tests, info); } static void complete_test (CutRunContext *context, CutTest *test, CutTestContext *test_context, gboolean success) { CuttestEventReceiver *receiver; CuttestCompleteTestInfo *info; receiver = CUTTEST_EVENT_RECEIVER(context); info = complete_test_info_new(test, test_context, success); receiver->complete_tests = g_list_append(receiver->complete_tests, info); } static void complete_test_iterator (CutRunContext *context, CutTestIterator *test_iterator, gboolean success) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(context); receiver->complete_test_iterators = g_list_append(receiver->complete_test_iterators, g_object_ref(test_iterator)); /* FIXME: use success */ } static void complete_test_case (CutRunContext *context, CutTestCase *test_case, gboolean success) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(context); receiver->complete_test_cases = g_list_append(receiver->complete_test_cases, g_object_ref(test_case)); /* FIXME: use success */ } static void complete_test_suite (CutRunContext *context, CutTestSuite *test_suite, gboolean success) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(context); receiver->complete_test_suites = g_list_append(receiver->complete_test_suites, g_object_ref(test_suite)); /* FIXME: use success */ } static void complete_run (CutRunContext *context, gboolean success) { CuttestEventReceiver *receiver; receiver = CUTTEST_EVENT_RECEIVER(context); receiver->complete_runs = g_list_append(receiver->complete_runs, GINT_TO_POINTER(success)); } static void cuttest_event_receiver_class_init (CuttestEventReceiverClass *klass) { GObjectClass *gobject_class; CutRunContextClass *run_context_class; gobject_class = G_OBJECT_CLASS(klass); run_context_class = CUT_RUN_CONTEXT_CLASS(klass); gobject_class->dispose = dispose; run_context_class->start_run = start_run; run_context_class->ready_test_suite = ready_test_suite; run_context_class->start_test_suite = start_test_suite; run_context_class->ready_test_case = ready_test_case; run_context_class->start_test_case = start_test_case; run_context_class->ready_test_iterator = ready_test_iterator; run_context_class->start_test_iterator = start_test_iterator; run_context_class->start_test = start_test; run_context_class->start_iterated_test = start_iterated_test; run_context_class->pass_assertion = pass_assertion; run_context_class->complete_iterated_test = complete_iterated_test; run_context_class->complete_test = complete_test; run_context_class->complete_test_iterator = complete_test_iterator; run_context_class->complete_test_case = complete_test_case; run_context_class->complete_test_suite = complete_test_suite; run_context_class->complete_run = complete_run; } static void cuttest_event_receiver_init (CuttestEventReceiver *receiver) { receiver->n_start_runs = 0; receiver->ready_test_suites = NULL; receiver->start_test_suites = NULL; receiver->ready_test_cases = NULL; receiver->start_test_cases = NULL; receiver->ready_test_iterators = NULL; receiver->start_test_iterators = NULL; receiver->start_tests = NULL; receiver->start_iterated_tests = NULL; receiver->complete_iterated_tests = NULL; receiver->complete_tests = NULL; receiver->complete_test_iterators = NULL; receiver->complete_test_cases = NULL; receiver->complete_test_suites = NULL; receiver->complete_runs = NULL; } CutRunContext * cuttest_event_receiver_new (void) { return g_object_new(CUTTEST_TYPE_EVENT_RECEIVER, NULL); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/cppcutter/0000755000175000017500000000000011525707417017653 5ustar koukoucutter-testing-framework-1.1.7/test/cppcutter/test-cppcut-assertions.cpp0000644000175000017500000003532511273715465025034 0ustar koukou/* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include #include #include #include #include #include #include "../lib/cuttest-assertions.h" #define MARK_FAIL(assertion) do \ { \ fail_line = __LINE__; \ assertion; \ } while (0) #define FAIL_LOCATION (cut_take_printf("%s:%d", __FILE__, fail_line)) namespace assertions { CutTest *test; CutRunContext *run_context; CutTestContext *test_context; CutTestResult *test_result; GError *error; GError *error1, *error2; gboolean need_to_free_error; GType flags_type = 0; gint fail_line; static gboolean run (void) { gboolean success; run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); test_context = cut_test_context_new(run_context, NULL, NULL, NULL, test); cut_test_context_current_push(test_context); success = cut_test_runner_run_test(CUT_TEST_RUNNER(run_context), test, test_context); cut_test_context_current_pop(); return success; } void cut_setup (void) { test = NULL; run_context = NULL; test_context = NULL; test_result = NULL; fail_line = 0; } void cut_teardown (void) { if (test) g_object_unref(test); if (run_context) g_object_unref(run_context); if (test_context) g_object_unref(test_context); if (test_result) g_object_unref(test_result); } static void stub_equal_int (void) { cppcut_assert_equal(100, 100); MARK_FAIL(cppcut_assert_equal(100, 1 - 2)); } void test_equal_int (void) { test = cut_test_new("equal_int test", stub_equal_int); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_int test", NULL, "<100 == 1 - 2>", "100", "-1", FAIL_LOCATION, "void assertions::stub_equal_int()", NULL); } static void stub_equal_int_reference (void) { int expected = 100; int actual = -100; cppcut_assert_equal(expected, expected); MARK_FAIL(cppcut_assert_equal(expected, actual)); } void test_equal_int_reference (void) { test = cut_test_new("equal_int_reference test", stub_equal_int_reference); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_int_reference test", NULL, "", "100", "-100", FAIL_LOCATION, "void assertions::stub_equal_int_reference()", NULL); } static void stub_equal_unsigned_int (void) { cppcut_assert_equal(100, 100); MARK_FAIL(cppcut_assert_equal(100, 2 - 1)); } void test_equal_unsigned_int (void) { test = cut_test_new("equal_unsigned_int test", stub_equal_unsigned_int); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_unsigned_int test", NULL, "<100 == 2 - 1>", "100", "1", FAIL_LOCATION, "void assertions::stub_equal_unsigned_int()", NULL); } static void stub_equal_long (void) { #if GLIB_SIZEOF_LONG == 8 cppcut_assert_equal(G_MAXINT64, G_MAXINT64); MARK_FAIL(cppcut_assert_equal(G_MAXINT64, G_MAXINT64 - 1)); #else cppcut_assert_equal(G_MAXINT32, G_MAXINT32); MARK_FAIL(cppcut_assert_equal(G_MAXINT32, G_MAXINT32 - 1)); #endif } void test_equal_long (void) { test = cut_test_new("equal_long test", stub_equal_long); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_long test", NULL, #if GLIB_SIZEOF_LONG == 8 "", cut_take_printf("%" G_GINT64_FORMAT, G_MAXINT64), cut_take_printf("%" G_GINT64_FORMAT, G_MAXINT64 - 1), #else "", cut_take_printf("%" G_GINT32_FORMAT, G_MAXINT32), cut_take_printf("%" G_GINT32_FORMAT, G_MAXINT32 - 1), #endif FAIL_LOCATION, "void assertions::stub_equal_long()", NULL); } static void stub_equal_unsigned_long (void) { #if GLIB_SIZEOF_LONG == 8 cppcut_assert_equal(G_MAXUINT64, G_MAXUINT64); MARK_FAIL(cppcut_assert_equal(G_MAXUINT64, G_MAXUINT64 - 1)); #else cppcut_assert_equal(G_MAXUINT32, G_MAXUINT32); MARK_FAIL(cppcut_assert_equal(G_MAXUINT32, G_MAXUINT32 - 1)); #endif } void test_equal_unsigned_long (void) { test = cut_test_new("equal_unsigned_long test", stub_equal_unsigned_long); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_unsigned_long test", NULL, #if GLIB_SIZEOF_LONG == 8 "", cut_take_printf("%" G_GUINT64_FORMAT, G_MAXUINT64), cut_take_printf("%" G_GUINT64_FORMAT, G_MAXUINT64 - 1), #else "", cut_take_printf("%" G_GUINT32_FORMAT, G_MAXUINT32), cut_take_printf("%" G_GUINT32_FORMAT, G_MAXUINT32 - 1), #endif FAIL_LOCATION, "void assertions::stub_equal_unsigned_long()", NULL); } static void stub_equal_long_long (void) { cppcut_assert_equal(G_MAXINT64, G_MAXINT64); MARK_FAIL(cppcut_assert_equal(G_MAXINT64, G_MAXINT64 - 1)); } void test_equal_long_long (void) { test = cut_test_new("equal_long_long test", stub_equal_long_long); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_long_long test", NULL, "", cut_take_printf("%" G_GINT64_FORMAT, G_MAXINT64), cut_take_printf("%" G_GINT64_FORMAT, G_MAXINT64 - 1), FAIL_LOCATION, "void assertions::stub_equal_long_long()", NULL); } static void stub_equal_unsigned_long_long (void) { cppcut_assert_equal(G_MAXUINT64, G_MAXUINT64); MARK_FAIL(cppcut_assert_equal(G_MAXUINT64, G_MAXUINT64 - 1)); } void test_equal_unsigned_long_long (void) { test = cut_test_new("equal_unsigned_long_long test", stub_equal_unsigned_long_long); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_unsigned_long_long test", NULL, "", cut_take_printf("%" G_GUINT64_FORMAT, G_MAXUINT64), cut_take_printf("%" G_GUINT64_FORMAT, G_MAXUINT64 - 1U), FAIL_LOCATION, "void assertions::stub_equal_unsigned_long_long()", NULL); } static void stub_equal_c_string (void) { cppcut_assert_equal("abcde", "abcde"); MARK_FAIL(cppcut_assert_equal("abcde", "ABcDE")); } void test_equal_c_string (void) { test = cut_test_new("equal_c_string test", stub_equal_c_string); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_c_string test", NULL, "<\"abcde\" == \"ABcDE\">", "abcde", "ABcDE", FAIL_LOCATION, "void assertions::stub_equal_c_string()", NULL); } static void stub_equal_c_string_reference (void) { char expected[] = "abcde"; char actual[] = "ABcDE"; cppcut_assert_equal(expected, expected); MARK_FAIL(cppcut_assert_equal(expected, actual)); } void test_equal_c_string_reference (void) { test = cut_test_new("equal_c_string_reference test", stub_equal_c_string_reference); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_c_string_reference test", NULL, "", "abcde", "ABcDE", FAIL_LOCATION, "void assertions::stub_equal_c_string_reference()", NULL); } static void stub_equal_string (void) { std::string expected("abcde"); std::string actual("ABcDE"); cppcut_assert_equal(expected, expected); MARK_FAIL(cppcut_assert_equal(expected, actual)); } void test_equal_string (void) { test = cut_test_new("equal_string test", stub_equal_string); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_string test", NULL, "", "abcde", "ABcDE", FAIL_LOCATION, "void assertions::stub_equal_string()", NULL); } static void stub_message (void) { MARK_FAIL(cppcut_assert_equal( "abcde", "ABCDE", cppcut_message("The message of %s", "assertion"))); } void test_message (void) { test = cut_test_new("optional message test", stub_message); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 0, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "optional message test", "The message of assertion", "<\"abcde\" == \"ABCDE\">", "abcde", "ABCDE", FAIL_LOCATION, "void assertions::stub_message()", NULL); } static void stub_message_shift (void) { MARK_FAIL(cppcut_assert_equal( "abcde", "ABCDE", cppcut_message() << "The message of " << "assertion")); } void test_message_shift (void) { test = cut_test_new("optional message test", stub_message_shift); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 0, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "optional message test", "The message of assertion", "<\"abcde\" == \"ABCDE\">", "abcde", "ABCDE", FAIL_LOCATION, "void assertions::stub_message_shift()", NULL); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/cppcutter/Makefile.in0000644000175000017500000004524711525654635021737 0ustar koukou# 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@ 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@ subdir = test/cppcutter DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_cppcut_assertions_la_LIBADD = am_test_cppcut_assertions_la_OBJECTS = test-cppcut-assertions.lo test_cppcut_assertions_la_OBJECTS = \ $(am_test_cppcut_assertions_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_cppcut_assertions_la_SOURCES) DIST_SOURCES = $(test_cppcut_assertions_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/cppcutter/libcppcutter.la \ $(top_builddir)/test/lib/libcuttest-utils.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/cppcutter \ -I$(top_srcdir)/test/lib AM_CXXFLAGS = $(CUTTER_CFLAGS) CLEANFILES = *.gcno *.gcda check_LTLIBRARIES = \ test-cppcut-assertions.la AM_LDFLAGS = \ -module \ -rpath `pwd`/.libs \ -avoid-version \ -no-undefined test_cppcut_assertions_la_SOURCES = test-cppcut-assertions.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/cppcutter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/cppcutter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-cppcut-assertions.la: $(test_cppcut_assertions_la_OBJECTS) $(test_cppcut_assertions_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(test_cppcut_assertions_la_OBJECTS) $(test_cppcut_assertions_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cppcut-assertions.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) 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-am clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkLTLIBRARIES clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/cppcutter/Makefile.am0000644000175000017500000000113311424022520021664 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/cppcutter \ -I$(top_srcdir)/test/lib AM_CXXFLAGS = $(CUTTER_CFLAGS) CLEANFILES = *.gcno *.gcda check_LTLIBRARIES = \ test-cppcut-assertions.la AM_LDFLAGS = \ -module \ -rpath `pwd`/.libs \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/cppcutter/libcppcutter.la \ $(top_builddir)/test/lib/libcuttest-utils.la \ $(GLIB_LIBS) test_cppcut_assertions_la_SOURCES = test-cppcut-assertions.cpp cutter-testing-framework-1.1.7/test/run-test.sh0000755000175000017500000000515711525642526017771 0ustar koukou#!/bin/sh BASE_DIR="`dirname $0`" export BASE_DIR top_dir="$BASE_DIR/.." if test x"$RUNNING_TEST" = x"yes"; then exit 0 fi if test x"$NO_MAKE" != x"yes"; then if test -z "$MAKE"; then if which gmake 2>&1 > /dev/null; then MAKE=gmake else MAKE=make fi fi RUNNING_TEST=yes export RUNNING_TEST $MAKE -C $top_dir/ check INTLTOOL_UPDATE=: > /dev/null || exit 1 fi if test -z "$CUTTER"; then CUTTER="$BASE_DIR/`make -s -C $BASE_DIR echo-cutter`" fi CUTTER_ARGS= CUTTER_WRAPPER= if test x"$CUTTER_DEBUG" = x"yes"; then CUTTER_WRAPPER="$top_dir/libtool --mode=execute gdb --args" CUTTER_ARGS="--keep-opening-modules" elif test x"$CUTTER_CHECK_LEAK" = x"yes"; then CUTTER_WRAPPER="$top_dir/libtool --mode=execute valgrind " CUTTER_WRAPPER="$CUTTER_WRAPPER --leak-check=full --show-reachable=yes -v" CUTTER_ARGS="--keep-opening-modules" fi CUT_ICONS_DIR=$(cd $top_dir/data/icons; pwd) CUT_UI_MODULE_DIR=$top_dir/module/ui/.libs CUT_UI_FACTORY_MODULE_DIR=$top_dir/module/ui/.libs CUT_REPORT_MODULE_DIR=$top_dir/module/report/.libs CUT_REPORT_FACTORY_MODULE_DIR=$top_dir/module/report/.libs CUT_STREAM_MODULE_DIR=$top_dir/module/stream/.libs CUT_STREAM_FACTORY_MODULE_DIR=$top_dir/module/stream/.libs export CUTTER export CUT_ICONS_DIR export CUT_UI_MODULE_DIR export CUT_UI_FACTORY_MODULE_DIR export CUT_REPORT_MODULE_DIR export CUT_REPORT_FACTORY_MODULE_DIR export CUT_STREAM_MODULE_DIR export CUT_STREAM_FACTORY_MODULE_DIR CUTTER_ARGS="$CUTTER_ARGS -s $BASE_DIR --exclude-directory fixtures" CUTTER_ARGS="$CUTTER_ARGS --exclude-directory lib" if echo "$@" | grep -- --mode=analyze > /dev/null; then : else CUTTER_ARGS="$CUTTER_ARGS --stream=xml --stream-directory $top_dir/log" fi if test x"$USE_GTK" = x"yes"; then CUTTER_ARGS="-u gtk $CUTTER_ARGS" fi case `uname` in CYGWIN*) PATH="$top_dir/cutter/.libs:$PATH" PATH="$top_dir/gcutter/.libs:$PATH" PATH="$top_dir/cppcutter/.libs:$PATH" PATH="$top_dir/gdkcutter-pixbuf/.libs:$PATH" PATH="$top_dir/soupcutter/.libs:$PATH" PATH="$top_dir/test/lib/.libs:$PATH" ;; Darwin) DYLD_LIBRARY_PATH="$top_dir/cppcutter/.libs:$DYLD_LIBRARY_PATH" DYLD_LIBRARY_PATH="$top_dir/gdkcutter-pixbuf/.libs:$DYLD_LIBRARY_PATH" DYLD_LIBRARY_PATH="$top_dir/soupcutter/.libs:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH ;; *BSD) LD_LIBRARY_PATH="$top_dir/cppcutter/.libs:$LD_LIBRARY_PATH" LD_LIBRARY_PATH="$top_dir/gdkcutter-pixbuf/.libs:$LD_LIBRARY_PATH" LD_LIBRARY_PATH="$top_dir/soupcutter/.libs:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH ;; *) : ;; esac LC_ALL=C export LC_ALL $CUTTER_WRAPPER $CUTTER $CUTTER_ARGS "$@" $BASE_DIR cutter-testing-framework-1.1.7/test/fixtures/0000755000175000017500000000000011525707414017510 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pipeline/0000755000175000017500000000000011525707416021317 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pipeline/setup-error/0000755000175000017500000000000011525707416023606 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pipeline/setup-error/setup-error-test.c0000644000175000017500000000027511205747027027217 0ustar koukou#include void test_do_nothing (void); void cut_setup (void) { cut_error("Error in cut_setup()"); } void test_do_nothing (void) { } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/pipeline/setup-error/Makefile.in0000644000175000017500000004445111525654636025670 0ustar koukou# 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@ 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@ subdir = test/fixtures/pipeline/setup-error DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) setup_error_test_la_LIBADD = am_setup_error_test_la_OBJECTS = setup-error-test.lo setup_error_test_la_OBJECTS = $(am_setup_error_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(setup_error_test_la_SOURCES) DIST_SOURCES = $(setup_error_test_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ setup-error-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined setup_error_test_la_SOURCES = setup-error-test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/pipeline/setup-error/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/pipeline/setup-error/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done setup-error-test.la: $(setup_error_test_la_OBJECTS) $(setup_error_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(setup_error_test_la_OBJECTS) $(setup_error_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setup-error-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/pipeline/setup-error/Makefile.am0000644000175000017500000000061011277467273025647 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ setup-error-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) setup_error_test_la_SOURCES = setup-error-test.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/pipeline/pending/0000755000175000017500000000000011525707416022743 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pipeline/pending/pending-test.c0000644000175000017500000000022111205747027025500 0ustar koukou#include void test_pending (void); void test_pending (void) { cut_pend("Pending..."); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/pipeline/pending/Makefile.in0000644000175000017500000004433511525654636025026 0ustar koukou# 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@ 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@ subdir = test/fixtures/pipeline/pending DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) pending_test_la_LIBADD = am_pending_test_la_OBJECTS = pending-test.lo pending_test_la_OBJECTS = $(am_pending_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(pending_test_la_SOURCES) DIST_SOURCES = $(pending_test_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ pending-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined pending_test_la_SOURCES = pending-test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/pipeline/pending/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/pipeline/pending/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done pending-test.la: $(pending_test_la_OBJECTS) $(pending_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(pending_test_la_OBJECTS) $(pending_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pending-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/pipeline/pending/Makefile.am0000644000175000017500000000057411277467273025015 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ pending-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) pending_test_la_SOURCES = pending-test.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/pipeline/success/0000755000175000017500000000000011525707416022767 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pipeline/success/Makefile.in0000644000175000017500000004433211525654636025047 0ustar koukou# 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@ 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@ subdir = test/fixtures/pipeline/success DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) success_test_la_LIBADD = am_success_test_la_OBJECTS = success-test.lo success_test_la_OBJECTS = $(am_success_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(success_test_la_SOURCES) DIST_SOURCES = $(success_test_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ success-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined success_test_la_SOURCES = success-test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/pipeline/success/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/pipeline/success/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done success-test.la: $(success_test_la_OBJECTS) $(success_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(success_test_la_OBJECTS) $(success_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/success-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/pipeline/success/Makefile.am0000644000175000017500000000056711277467273025043 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ success-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) success_test_la_SOURCES = success-test.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/pipeline/success/success-test.c0000644000175000017500000000016511205747027025557 0ustar koukou#include void test_success (void); void test_success (void) { } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/pipeline/error/0000755000175000017500000000000011525707416022450 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pipeline/error/Makefile.in0000644000175000017500000004426711525654636024537 0ustar koukou# 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@ 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@ subdir = test/fixtures/pipeline/error DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) error_test_la_LIBADD = am_error_test_la_OBJECTS = error-test.lo error_test_la_OBJECTS = $(am_error_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(error_test_la_SOURCES) DIST_SOURCES = $(error_test_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ error-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined error_test_la_SOURCES = error-test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/pipeline/error/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/pipeline/error/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done error-test.la: $(error_test_la_OBJECTS) $(error_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(error_test_la_OBJECTS) $(error_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/pipeline/error/Makefile.am0000644000175000017500000000056611277467273024523 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ error-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) error_test_la_SOURCES = error-test.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/pipeline/error/error-test.c0000644000175000017500000000021111205747027024711 0ustar koukou#include void test_error (void); void test_error (void) { cut_error("Error"); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/pipeline/Makefile.in0000644000175000017500000004774711525654636023414 0ustar koukou# 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@ 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@ subdir = test/fixtures/pipeline DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = \ error \ failure \ omission \ pending \ success \ setup-error all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/pipeline/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/pipeline/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/pipeline/failure/0000755000175000017500000000000011525707416022746 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pipeline/failure/failure-test.c0000644000175000017500000000021611205747027025512 0ustar koukou#include void test_failure (void); void test_failure (void) { cut_fail("Failed."); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/pipeline/failure/Makefile.in0000644000175000017500000004433511525654636025031 0ustar koukou# 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@ 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@ subdir = test/fixtures/pipeline/failure DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) failure_test_la_LIBADD = am_failure_test_la_OBJECTS = failure-test.lo failure_test_la_OBJECTS = $(am_failure_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(failure_test_la_SOURCES) DIST_SOURCES = $(failure_test_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ failure-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined failure_test_la_SOURCES = failure-test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/pipeline/failure/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/pipeline/failure/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done failure-test.la: $(failure_test_la_OBJECTS) $(failure_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(failure_test_la_OBJECTS) $(failure_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/failure-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/pipeline/failure/Makefile.am0000644000175000017500000000057411277467273025020 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ failure-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) failure_test_la_SOURCES = failure-test.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/pipeline/omission/0000755000175000017500000000000011525707416023157 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pipeline/omission/omission-test.c0000644000175000017500000000021611205747027026134 0ustar koukou#include void test_omission (void); void test_omission (void) { cut_omit("Omit!"); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/pipeline/omission/Makefile.in0000644000175000017500000004436011525654636025240 0ustar koukou# 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@ 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@ subdir = test/fixtures/pipeline/omission DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) omission_test_la_LIBADD = am_omission_test_la_OBJECTS = omission-test.lo omission_test_la_OBJECTS = $(am_omission_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(omission_test_la_SOURCES) DIST_SOURCES = $(omission_test_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ omission-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined omission_test_la_SOURCES = omission-test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/pipeline/omission/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/pipeline/omission/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done omission-test.la: $(omission_test_la_OBJECTS) $(omission_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(omission_test_la_OBJECTS) $(omission_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omission-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/pipeline/omission/Makefile.am0000644000175000017500000000057711277467273025234 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ omission-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) omission_test_la_SOURCES = omission-test.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/pipeline/Makefile.am0000644000175000017500000000012411205747027023345 0ustar koukouSUBDIRS = \ error \ failure \ omission \ pending \ success \ setup-error cutter-testing-framework-1.1.7/test/fixtures/path/0000755000175000017500000000000011525707417020447 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/path/parent/0000755000175000017500000000000011525707417021740 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/path/parent/sub/0000755000175000017500000000000011525707417022531 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/path/parent/sub/Makefile.in0000644000175000017500000004424611525654636024614 0ustar koukou# 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@ 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@ subdir = test/fixtures/path/parent/sub DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_deep_la_LIBADD = am_test_deep_la_OBJECTS = test-deep.lo test_deep_la_OBJECTS = $(am_test_deep_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_deep_la_SOURCES) DIST_SOURCES = $(test_deep_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter check_LTLIBRARIES = \ test-deep.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined test_deep_la_SOURCES = test-deep.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/path/parent/sub/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/path/parent/sub/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-deep.la: $(test_deep_la_OBJECTS) $(test_deep_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_deep_la_OBJECTS) $(test_deep_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-deep.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkLTLIBRARIES clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/path/parent/sub/test-deep.c0000644000175000017500000000050111205747030024551 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include void test_fail_in_deep_path(void); void test_fail_in_deep_path (void) { cut_fail("fail in parent" G_DIR_SEPARATOR_S "sub" G_DIR_SEPARATOR_S "%s", __FILE__); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/path/parent/sub/Makefile.am0000644000175000017500000000055511424022520024551 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter check_LTLIBRARIES = \ test-deep.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) test_deep_la_SOURCES = test-deep.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/path/parent/Makefile.in0000644000175000017500000004765211525654636024027 0ustar koukou# 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@ 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@ subdir = test/fixtures/path/parent DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = sub all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/path/parent/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/path/parent/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/path/parent/Makefile.am0000644000175000017500000000001611205747030023757 0ustar koukouSUBDIRS = sub cutter-testing-framework-1.1.7/test/fixtures/path/Makefile.in0000644000175000017500000004763011525654636022532 0ustar koukou# 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@ 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@ subdir = test/fixtures/path DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = parent all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/path/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/path/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/path/Makefile.am0000644000175000017500000000002111205747030022462 0ustar koukouSUBDIRS = parent cutter-testing-framework-1.1.7/test/fixtures/test-directory/0000755000175000017500000000000011525707417022474 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/test-directory/test-directory.c0000644000175000017500000000074711407320457025623 0ustar koukou#include #include "cuttest-utils.h" void test_directory (void); void test_directory (void) { const char *this_directory; this_directory = cut_build_path(cuttest_get_base_dir(), "fixtures", "test-directory", NULL); cut_assert_equal_string(this_directory, cut_get_test_directory()); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/test-directory/Makefile.in0000644000175000017500000004455311525654636024560 0ustar koukou# 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@ 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@ subdir = test/fixtures/test-directory DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_directory_la_LIBADD = am_test_directory_la_OBJECTS = test-directory.lo test_directory_la_OBJECTS = $(am_test_directory_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_directory_la_SOURCES) DIST_SOURCES = $(test_directory_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/test/lib/libcuttest-utils.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/test/lib AM_CFLAGS = \ $(CUTTER_CFLAGS) check_LTLIBRARIES = \ test-directory.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined test_directory_la_SOURCES = test-directory.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/test-directory/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/test-directory/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-directory.la: $(test_directory_la_OBJECTS) $(test_directory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_directory_la_OBJECTS) $(test_directory_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-directory.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkLTLIBRARIES clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/test-directory/Makefile.am0000644000175000017500000000077511424022520024520 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/test/lib AM_CFLAGS = \ $(CUTTER_CFLAGS) check_LTLIBRARIES = \ test-directory.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/test/lib/libcuttest-utils.la \ $(GLIB_LIBS) test_directory_la_SOURCES = test-directory.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/pixbuf/0000755000175000017500000000000011525707417021010 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/pixbuf/diff-dark-and-nested-circle.png0000644000175000017500000001254311205747030026617 0ustar koukouPNG  IHDRg3sBIT|dIDATxkLWo?4`c܆  !~I$Mb[)niv7#3&SX&U,$e;q0`C& pMtWSU%DZqG=ݺu2RX5p;)hY @/Y@ `fY@ `޿>5UGmv{ma+8aeY6'(+2)d8dgY_H&13X|0}x?mb2Q &Z6.ZvAd o$zpߙb4)M'>Q?v/ADm2_38_Ok0&Dunm]z oWj%@<:ܫ+hAMT5>_%thA;kF.Ïw h4Q,o?P7rs(qb.|9J)&MЎ桒֕' ǧ+'{ٳC&wAMMgopJ$ѣMA-M{*+qMЛGU &Xrx[SuyiUf`i@Hj,|쉮j=zEQ 6 yg` &X[=u,Ju̇B&"!fyocO|ꏌ*Jp{웋Oa&f9ߍ@mn2h"(:K_^ڙ) ДCvr&ʡY^;w(OXpx{N&ʢYzV?C_Ey[<ުv(lU/(hnV;@4Jk",C%m v&iDY~z!,#·uH@&_I kv|-TM$gw5CSjMRH2KF[J֭61AQBIfʶS-v:Wc$c&ˣ&;XR]NLt@{#FΓ_ϤRzw:X0j",RejGNDukm``5>}Dr45p9̰p\΃C+"hT1{'C4DŊ6pypJtp-pMDUy&ǽKlLgf̢&^G;.m\Eè(FM_A/ },\NVVv2xA}bd:k&/G-E{ބ!Z3cۚቋxjmI~,}BQn=C (0j",Q)ઝ"7}m|nFfoڈFJ%l׊mXW䕯ϡhX6am^H`D2iM_hwC&̲LG|Õ @Ȇ+}g:8cÅXۢX3[XB{r4xLਔ@ZÅ~WK].oS+S*J!LbxfI<\7더wB7RDҊS^fU㓧ISCVV]r5dՁ^w4/Mw4Ư&7.t&4#%4T}g:5#625#po4Y%44fIWX:OY1J{]cDADV]3r 5Q;Q&zz}SJ HFl<>{E 4( VO>3ÕϩBI5mN=跃+y_:uy QZٷai^;wRtGЛGU)$h"(f?Ud7lk?ǟn4.MےIĊAfdly,hO/6  G ʼpkރkR&ʡ҈O~I7YpkfO~ڹ4QE,Ǟ說8nE 08Q@YZtyiQ'kFƶMBRfIcGE.h"ҚYcU-_}gD|E!h""=KC;J?˺ ǧ+'Saf4 jjB,i~zסu|\(Q3rȯr%RMnC b4oQ?v/AH W&kfG_c &Dh,iZ6.l BHFXw44Tٞ ,vgԖeehڜħ㐝eyg|!f+̸bQ79񏴾@d 3) F@, 0 @, 0 @kSf DcXBd5{Z"J={(㰐fY@ `fY@ x_snb)NX,yI9;ad%-kl1qf7))BOYy.e$?Oqܬ&K<Vo R֪Zˢ+IJL7[L d1!B!T5׼cJ$щ䠯H,],*wf04mfhڍrTE諾c?0x0Yh73Yt]a/bbZlBl31fʾj?a>+LX-M[qVSInwgns f]t9}\&Ӎ\wQxoOy"QjfpF:VP^M\#NQ橼X14u2|{Uo^cдQn%tخzwo$̒ \mp< o6iOoBo ɸpaus]Φ+[/z)Iۅ']&#z A GSLdBoB4`2|{cvD\n'.,dcōy͍hW ^Ǚy&vkjb0.tinBNROwmY FP&`1S(6e ;lgyh`.|&S{+IX-&& "s:rkf1#_tUfҒ04mRP`ˢ}j ̢sT;r8RV,ˤF񲔵J Bw܃3&R*Ѐcue)M鄇¾v9Ęc2RDE7arsmdDzlbK1KEj4߳(y<6{Q$Wahv$X`lgx[MZ9Xc5ݳ܊ݨFAx*&D'm;7 I=^=˭Hel[qǘ)W+Q뵭3%x]%M@ Jr/RWN {jUGIUǀt?peG|S=Kac][apίǙ~3B9?I fh*6_XZh,:0ۡ6,YZrROwM)JP["{"QR"fBBC=lgZ;.oJr)|tZ(r?nsduaiUz;3e_`{pT 0 3N2EB%q3B9XԱ弅``YN!GU *Eg+Yw,Y5:J/r', N⁥4yY, %/i1g'bM-&l6f2 lRVKRInZ8n:.YI,䚻U‰&@, 0 @, 0 @, S*&lPyEIENDB`cutter-testing-framework-1.1.7/test/fixtures/pixbuf/dark-circle-no-alpha.png0000644000175000017500000000263111205747030025363 0ustar koukouPNG  IHDRddsRGBbKGD pHYs  tIME ܅tEXtCommentCreated with GIMPWIDATxOHY1 ɤIiKxċCUi7* *ƋH"-J4)V`4&2{(,3o&̛={o0BX a!,c?essl0^q75TLgfY+:*V#qfz}kwՠ䤔cd<}V hoy N؛8[,}cD"{(m5_skwpHVCjʛmReX{X ?};oQrGڃ'Ouڛ_Z|l=#乣j(u$%lyJB kҋ?Յˤ#s.*sNVNk73en1w{ߡ׉c9띿m!NjB ðc˹Df;Y\&=ׄ/x.VdnRש>iM*5VO0.Sa6f6icfZ ^:4(utګ9ҢV3UMK\ YƼmm.' H(ky @|OtR4t,_s+XJي%lRwpHf,#AIz̤"/`zaB,2%#";4$#<RټA0roú$[$[>Z]Ch0_?.tx`Psk 'EXv{(hEQ8W:Dv}&~6ij Hj %.٘6v$j).vRjD-q*Ztha!, BX a!,H/[#cǷ 9xIENDB`cutter-testing-framework-1.1.7/test/fixtures/pixbuf/diff-dark-and-nested-circle-no-alpha.png0000644000175000017500000001162311205747030030312 0ustar koukouPNG  IHDRg3sBIT|dJIDATx_lSW\IIIiŴ:ΪUy@Q5}jv-hJ?˶>ڪBd )${ν׿skOX,2/ B b(,Da! !QX1/{F$/!_kIT$^ Mã/4ԩF_Fu9:XHrרĞxx8wFa8\eT]^k;M lPOl#=GUM4EOxhr wlXNF=TzG}Z+J?Dܜ԰|˦p-X-k 7Xac0߿]Tܚ|{hxkkDmH$'=a'K=ǻuBQC5<,WT,C=1NXXv,IM^ >'{*QO#$,oo{ Uw:wI4Ұ$/`oUCu?NF=agYX«v*T= m=QO̱$,_/y?5!ޛd;ƪAT BÇ\HԄ1xB=kX{]ݔDM~ 2' ?\ò\}x.:x-Әnay{K9Rx{KqS8qwdO=1K=ǰ+5c.+5K=dOwOL像w;r +h|[4POJxTX=\' ŇIF<{b*, pȮWM;l{Lkk;M=9^=a KAU/2=[˦PPUcROƣ'LalכԎٮ7I=0eA+QOgFeȧ{* V:t'ƘIa(`FT'ƙUYa)*b|USe>Ϡ㪘;v7NYU;Q=IV#r<K/P4j''õ!vòl؂UՓ^7ivòչ+UՓ5 Gx,3:]XU;Q=Ik|+}Km9b)1TX*moɁk\3kO:euDol[mV yk ;dVLdOv9 l? 5++,6m=dǺM-CtOv+\}HPv+ۼ3=)+,@MN1 T/`=Ik빭0~za3ӓ:~k-@HTD$~mz`jBPiVbX,EOۿ3Kѿdd'Rތ'R k˶Qx2zҷh -qijie)*~[XῷnLԓ ӝ@aAnc0,4(d> e"n5<3R@=Ϟ~So>3[dOwOLei׽ Nv5K= ԓ=ܰ >tǦ;Æg=POѰ^|_p|Qej o񟲧qK~>r/T bT۟~A4D=kX"mcܬ-E'3xM :n{`v>D'3H7\ \Yf<|~uW'Ri&e&9{lk.vm/aN?ɞ7ԓ xJAS>d,EckxΣ@=)c~!Mypz|m[zbа|{hx7MLX"EOJXJ>yceSoa60~vSzrkRLٮ7|T!X*Fzp#ILG>݃/{⫚*w:-&pZ;kdԓ*,%Uš{p4ztۧ[,FW;nf|b9Ħa-9x}|.^Kb""PUhNu4X0:GLJ#Bpb(,Da! !QX1BAB b(,#{db7ʞa߾}b(,Da! !QX1BAz"4 5xl9MTQuy(xнxXCu,(U/`QB!(,Đ#1G2F :_*>=Aс@P:DcxeB4>$}н[UVQ0{ #oi6/E]ǥQW`,XvUf ~f~,((?s1ۥͥBM">~_|>˧zZ]ƕbHK%qqjSAߏ^m NG.2VX@n+Ppu"V%CشTl^>0׃y}':.¨ ;q#}KX(>|w8LFx O|5d@A>dEaW~o<YE1qKǡTxFpG̺؈+ LG]~?N [Caq3\V3,6N~窝yŒ<ìF.]a(,.K%ѯ^= \/йAGMzpnh(,.3zn OD@.ۢL<7){ ë&֗˒1PX\.ha[ E]7 K\?;}+0)åAaquJll(,.0>KZXeCqSX\I;ZQX}};흼P"b֚2,od7"uuƲ,*5mX1X+:p1ʫ\- x^4 Ƴ_ԪҐ/xTzctSHfZ`,;!lMZ-G_ke&ot[Z3F+e&U!9Pc%,Ƕ6LQa)c?sRگ|طJo7 | #sxZ[ tގ|^4l:GKUNku)PX\qe;*]/VU54l- li>[mFu8U!ݪT8 9ť;Ь?bZM\Iaq;F_";] ˭^QQ75 W]QJ(,.pGs *˂|w4ǘ4RBQY,fI3B>R!j㮦eJ4մ -RABQtpNDеRaWVn {,GR:<Ջ\y? ᣩT8aeK3FQX*\u85F DoϷDu>4v6{V׸zpAvlJOA˚.StގRYSJzRPշÑ ׋e2CqJkz #b S}K+[ZѩH ǑLm j"RWh6PX! ? &d3i:{ESU`_QXPŭjEA(Bm}T9(,I B}(zȾk!6Ca! !QX1BAB b(,Da! !yŢn&DL]IENDB`cutter-testing-framework-1.1.7/test/fixtures/pixbuf/max-3-pixel-value-different-dark-circle.png0000644000175000017500000000346111205747030031010 0ustar koukouPNG  IHDRddpTsRGBbKGD pHYs  tIME  FtEXtCommentCreated with GIMPWIDATx_hSWM4$5ijPv yIK*#ej-T60AOZm9iUj-S]{K%j4V16!M̟{u97}!O9\.=s~; $) @_RʨZ+lWE4FT*ERYG4$6:ŢX@7ņCW#U[b}ϴhѠ⺥Pxq4lD[n;ԱxptyيR܎LPGec] O^bn'eY0B;򺰶H }t{׾krzwSZ|aR1|ˇe Ϗ[l{V;?8(; lsXg; `-y[dVsa3~ז@k*֕A? =7`-oS#}/ 3[k~x $I; \<[l\a̅.1z`@k*>j`B)en[BM *u-+V'+Zڳ͕yF&^k8gK@:l<׍uG΁[m9D %hb>S w7uBa64ZnYrzwSg΀孀AxOh/\bY⪭Vu`[{IZ5 O^lJQamЛ5  Uǎ4z U[]^KܱuvɲN.@ l&g@|Eb2xfWtJD]`/Hh6;wX@"EU`-H1@ȼ YZ:diU/zP' HLvJz8UPR;x%&, 48E)Rﰀh wX@)NabQNa`-H!7d !kXp x܍yx.=ǡL?# ȡCcPB08!C|! C o3uK}y7_ۑ3l e9)x8|x +)2BH]4 -7U'ɌhO>PG[^Wr_-#_f( ?~{"W#b ˂!>:#xF ,rf H͸&LRWr}×>!## 7=}y %PVBO>z9ߪʭ? !)؛vMrzp ȡCcى%_s, GىbT#}/9 eXխ8aʻR㳂b")q6ݽ;#=+)Twg'[0CfGI ȬP0'1 2WpĀ5p8wr*(@@ @@o՟\DIENDB`cutter-testing-framework-1.1.7/test/fixtures/pixbuf/small-circle.png0000644000175000017500000000215511205747030024056 0ustar koukouPNG  IHDR22?sRGBbKGD pHYs  tIME  ,etEXtCommentCreated with GIMPWIDAThoHaﶻۿjږ -z!Qj$R,W(zSYA+|FHD`ˍj柙nssnynS~s=s=RJ)-'8V,/ וr|3„Ģ Z$BF+,{Ô]@<رM`ՑqbU> sfYhk_IQw 6ռ~'kjkn\ۯ楝kIׅ{$ cG]nlڪX \ߦO; Rjg^XE3Mr V W*+6N+A~L+TVl ĞŽsԗx4-%qM!{KryXCX_`^{ U n՗Ҳk짜"O9ev''A6N/'AsqzO(8 e2 m@hzdÑ#]^A" q/ DEQ=XaA N ojDj  D|ph phH1m5Xm2ʀ1*(ðߦ.GuԽݖl$zQ-*Jp|7Lohp!* AP]g`|(d@H`|XZ)vO_eSN/  ;p!?8r~['xNePfۣκqYYH,ȰSwM\5[?[^Z,@Uqm6n6=ӎWa6r4]Jb:#WMO̼~/ޖ꿸 ]ɾN)R 2̀IENDB`cutter-testing-framework-1.1.7/test/fixtures/pixbuf/nested-circle.png0000644000175000017500000000414111205747030024225 0ustar koukouPNG  IHDRddpTsRGBbKGD pHYs  tIME  E\tEXtCommentCreated with GIMPWIDATx{LSW }TByhiFXIy5 d&j_{h2eh( \$\`"RZTK>pHuޖ9OwL{-`1Gӱ`a Jf 6<&[qy\{83}l +p8&$<. }.qx2iaSI!g +-y#reg@n}"}j=uWn1~CaaVfvEoeC<|֫Ai엿Nh M<yzSXK^@ŀ l63,hUA8-&3zXbpCH?W`3C pN{G1XU GnFcCVH϶KUp8b`씔xe]:PzG-D d (-Sq7F$#E=fP2Rj w}•ME;fS揽@wD,>* wH"Tq* d#f#Yn_zGCIhN!QG;Fm4e ]e@a$/#{~xn 0 v8zGS$(#! Bσ 'zG볣0hX=zG) o$wD.MB E}d#8/0h'nDP]dgQm*Hzdgo GrF@:t |3@]s`Jg Ɣ"Ev!=u H0RZ_F`$nOm@/22B-e-Ŕ"cZd"PGj78rZ:Q)phE%ғzE:ç_}&g⇦8(s8|H%X;F$Ӡ_g{kGϒ2zXj'\t WHG*IZ}_m{6 I7q6լW-OE5Np#ޓeS=9;-3Mhˉj`ηXޙ*V0v*ʊ 5=dM˔KܼꜾ\gcS-s~SY&e4 &$s8j*˥ Ȯ +}[.w8a]JcV:\S%D2H88n*RO'gD%g[{=ѳ!iFI a@&/c k_,8 ^eɭ_N`뻱b*@0, @0, @>ήZIENDB`cutter-testing-framework-1.1.7/test/fixtures/pixbuf/nested-circle-no-alpha.png0000644000175000017500000000347711205747030025735 0ustar koukouPNG  IHDRddsRGBbKGD pHYs  tIME / tEXtCommentCreated with GIMPWIDATx]LYǖ6PҖhC!J QQ@Fv%OjtYB4dCU&4<`4+V@}mPbiNهMDGqss=Y]]%$0, °0, #@WA~quyoCAC%\hYj(hZMd(/VWTmkҚ+2kI)CQA+WרyX0:zSS[T.OXcw]#BZ3et9a7y>ǒkEҞQgN"¯,z:3+q0>:`0qglSyzذNg/^4]Ń5tJSP ]"wIHl;פnȆLe7n k]!YiÛuk G*;VSjAkPԽ8IIaݷSY!E}[0,ǒSqr-5[pZݵz ZJRea~Q"s.BʮGՁES$]˙%-*UiᅱܯP ;!]Xӯ!UֹF2X,ny{|X>TY;34WҟY$MBzydkj 1WN7f=nxS"jԡG&Q`ͤ]c*g` SGc9Pec(U)U٢8/>:7Pe{",OtFzg`e,T Xu~[&]0E9a'Mڕ8m8KAӀə8,@(βRS()|&l$cB8,@(β2J!,̫8(βZ_޴;@(β,X &l NRAyQe5W0{CiDQʧ$a\bj\f X ՛`@Y4j\ VS[μm,m#Mmryst_լvϵ9x 6uaO]'߯Pi5vZwDs@܎Y@;&2|P+(YJ0q!` 3:C:XJ#,9Jv]BT)"_}t`,[9¡д!w8K c)ģݝ:z%txuuCoz%,e1x޾?u\̺9@u;GNE w9 XGc:Y󶦞o*""p- 7&ƎpD­7 7u#.DÍyy>  °0, °0, S4S,IENDB`cutter-testing-framework-1.1.7/test/fixtures/pixbuf/Makefile.in0000644000175000017500000003216011525654636023063 0ustar koukou# 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@ 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@ subdir = test/fixtures/pixbuf DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ EXTRA_DIST = \ dark-circle.png \ dark-circle-no-alpha.png \ nested-circle.png \ nested-circle-no-alpha.png \ small-circle.png \ small-circle-no-alpha.png \ max-3-pixel-value-different-dark-circle.png \ diff-dark-and-nested-circle.png \ diff-dark-and-nested-circle-no-alpha.png all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/pixbuf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/pixbuf/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/pixbuf/small-circle-no-alpha.png0000644000175000017500000000153611205747030025555 0ustar koukouPNG  IHDR22]sRGB pHYs  tIME  )9tEXtCommentCreated with GIMPWIDATXKP|4qT'si8VܠԯAM}٧{V7DA'_E-Z22&(*iӛl'Gnn *;JNNAe| Tv]@TvoÀ/( ^@Tv}~ *;B-4vTY@=e.D ZE%!f3 EKD "J]xe!m F 3Bdjx0!xM ix(XXRӡnoyP3 ÇՏ_C46}@#d!YNQwU^ne։uuwtHbw2v|_;Gln}7$~YׯnA7Uۋsf׉譓||kE$T<9B. yqCwO_z.^׉UgyM\YW !VYW .mB,'3ο'rM뻽WG'K\HjqVf,¥-q4`!4eⱢDhɈy2!CX&d?pl˄,:!GLQ8p|7$ B@!B Q`7aIENDB`cutter-testing-framework-1.1.7/test/fixtures/assertions/0000755000175000017500000000000011525707414021702 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/assertions/data.txt0000644000175000017500000000001711205747030023343 0ustar koukoutop level data cutter-testing-framework-1.1.7/test/fixtures/assertions/sub/0000755000175000017500000000000011525707414022473 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/assertions/sub/data.txt0000644000175000017500000000001711205747030024134 0ustar koukousub level data cutter-testing-framework-1.1.7/test/fixtures/assertions/sub/Makefile.in0000644000175000017500000003155511525654635024557 0ustar koukou# 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@ 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@ subdir = test/fixtures/assertions/sub DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ EXTRA_DIST = data.txt all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/assertions/sub/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/assertions/sub/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/assertions/sub/Makefile.am0000644000175000017500000000002611205747030024516 0ustar koukouEXTRA_DIST = data.txt cutter-testing-framework-1.1.7/test/fixtures/assertions/Makefile.in0000644000175000017500000004770111525654635023766 0ustar koukou# 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@ 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@ subdir = test/fixtures/assertions DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = \ sub EXTRA_DIST = data.txt all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/assertions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/assertions/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/assertions/Makefile.am0000644000175000017500000000005111205747030023723 0ustar koukouSUBDIRS = \ sub EXTRA_DIST = data.txt cutter-testing-framework-1.1.7/test/fixtures/data/0000755000175000017500000000000011525707414020421 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/data/Makefile.in0000644000175000017500000003151411525654635022500 0ustar koukou# 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@ 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@ subdir = test/fixtures/data DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ EXTRA_DIST = 1.txt all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/data/Makefile.am0000644000175000017500000000002311205747030022441 0ustar koukouEXTRA_DIST = 1.txt cutter-testing-framework-1.1.7/test/fixtures/data/1.txt0000644000175000017500000000000611205747030021307 0ustar koukoufile1 cutter-testing-framework-1.1.7/test/fixtures/repository/0000755000175000017500000000000011525707416021731 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/repository/repository-test-case2.c0000644000175000017500000000041211277467273026271 0ustar koukou#include void test_stub_function1 (void); void test_stub_function2 (void); void test_stub_function3 (void); void test_stub_function1 (void) { } void test_stub_function2 (void) { } void test_stub_function3 (void) { } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/repository/Makefile.in0000644000175000017500000004711311525654636024011 0ustar koukou# 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@ 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@ subdir = test/fixtures/repository DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = repository_test_case1_la_LIBADD = am_repository_test_case1_la_OBJECTS = repository-test-case1.lo repository_test_case1_la_OBJECTS = \ $(am_repository_test_case1_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent repository_test_case2_la_LIBADD = am_repository_test_case2_la_OBJECTS = repository-test-case2.lo repository_test_case2_la_OBJECTS = \ $(am_repository_test_case2_la_OBJECTS) repository_test_case3_la_LIBADD = am_repository_test_case3_la_OBJECTS = repository-test-case3.lo repository_test_case3_la_OBJECTS = \ $(am_repository_test_case3_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(repository_test_case1_la_SOURCES) \ $(repository_test_case2_la_SOURCES) \ $(repository_test_case3_la_SOURCES) DIST_SOURCES = $(repository_test_case1_la_SOURCES) \ $(repository_test_case2_la_SOURCES) \ $(repository_test_case3_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter check_LTLIBRARIES = \ repository-test-case1.la \ repository-test-case2.la \ repository-test-case3.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined repository_test_case1_la_SOURCES = repository-test-case1.c repository_test_case2_la_SOURCES = repository-test-case2.c repository_test_case3_la_SOURCES = repository-test-case3.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/repository/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/repository/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done repository-test-case1.la: $(repository_test_case1_la_OBJECTS) $(repository_test_case1_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(repository_test_case1_la_OBJECTS) $(repository_test_case1_la_LIBADD) $(LIBS) repository-test-case2.la: $(repository_test_case2_la_OBJECTS) $(repository_test_case2_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(repository_test_case2_la_OBJECTS) $(repository_test_case2_la_LIBADD) $(LIBS) repository-test-case3.la: $(repository_test_case3_la_OBJECTS) $(repository_test_case3_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(repository_test_case3_la_OBJECTS) $(repository_test_case3_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repository-test-case1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repository-test-case2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repository-test-case3.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkLTLIBRARIES clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/repository/Makefile.am0000644000175000017500000000110311424022520023740 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter check_LTLIBRARIES = \ repository-test-case1.la \ repository-test-case2.la \ repository-test-case3.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) repository_test_case1_la_SOURCES = repository-test-case1.c repository_test_case2_la_SOURCES = repository-test-case2.c repository_test_case3_la_SOURCES = repository-test-case3.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/repository/repository-test-case1.c0000644000175000017500000000041211277467273026270 0ustar koukou#include void test_stub_function1 (void); void test_stub_function2 (void); void test_stub_function3 (void); void test_stub_function1 (void) { } void test_stub_function2 (void) { } void test_stub_function3 (void) { } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/repository/repository-test-case3.c0000644000175000017500000000041211277467273026272 0ustar koukou#include void test_stub_function1 (void); void test_stub_function2 (void); void test_stub_function3 (void); void test_stub_function1 (void) { } void test_stub_function2 (void) { } void test_stub_function3 (void) { } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/xml-stream/0000755000175000017500000000000011525707417021604 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/xml-stream/iterated-test.xml0000644000175000017500000002311511205747030025074 0ustar koukou 1970-01-01T00:00:00Z 0.000001 1 1 2008-07-30T04:55:42Z 0.000001 stub test case 1970-01-01T00:00:00Z 0.000001 1 stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 1970-01-01T00:00:00Z 0.000001 2 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 first data false stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 first data false stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 first data success 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 first data false true stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 second data false stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 second data false stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 second data success 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 second data false true stub-iterated-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 success 2008-07-30T04:55:42Z 0.000001 stub-iterated-test 2008-07-30T04:55:42Z 0.000001 true stub test case 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 success 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 true 2008-07-30T04:55:42Z 0.000001 true cutter-testing-framework-1.1.7/test/fixtures/xml-stream/test.xml0000644000175000017500000000752111205747030023300 0ustar koukou 1970-01-01T00:00:00Z 0.000001 1 1 2008-07-30T04:55:42Z 0.000001 stub test case 1970-01-01T00:00:00Z 0.000001 1 stub test case 2008-07-30T04:55:42Z 0.000001 stub-success-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-success-test 2008-07-30T04:55:42Z 0.000001 false stub-success-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-success-test 2008-07-30T04:55:42Z 0.000001 false stub test case 2008-07-30T04:55:42Z 0.000001 stub-success-test 2008-07-30T04:55:42Z 0.000001 success 2008-07-30T04:55:42Z 0.000001 stub-success-test 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 stub-success-test 2008-07-30T04:55:42Z 0.000001 false true stub test case 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 success 2008-07-30T04:55:42Z 0.000001 stub test case 2008-07-30T04:55:42Z 0.000001 true 2008-07-30T04:55:42Z 0.000001 true cutter-testing-framework-1.1.7/test/fixtures/xml-stream/Makefile.in0000644000175000017500000003157311525654637023667 0ustar koukou# 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@ 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@ subdir = test/fixtures/xml-stream DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ EXTRA_DIST = \ test.xml \ iterated-test.xml all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/xml-stream/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/xml-stream/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/xml-stream/Makefile.am0000644000175000017500000000006111205747030023623 0ustar koukouEXTRA_DIST = \ test.xml \ iterated-test.xml cutter-testing-framework-1.1.7/test/fixtures/sub-process-group/0000755000175000017500000000000011525707416023111 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/sub-process-group/fixtures/0000755000175000017500000000000011525707416024762 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/sub-process-group/fixtures/Makefile.in0000644000175000017500000004773211525654636027051 0ustar koukou# 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@ 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@ subdir = test/fixtures/sub-process-group/fixtures DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = normal all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/sub-process-group/fixtures/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/sub-process-group/fixtures/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/sub-process-group/fixtures/Makefile.am0000644000175000017500000000002111205747027027004 0ustar koukouSUBDIRS = normal cutter-testing-framework-1.1.7/test/fixtures/sub-process-group/fixtures/normal/0000755000175000017500000000000011525707416026252 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/sub-process-group/fixtures/normal/test-normal.c0000644000175000017500000000466211205747027030670 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include void test_success(void); void test_failure(void); void test_error(void); void test_pending(void); void test_notification(void); void test_omission(void); void data_success_iterator(void); void test_success_iterator(const void *data); void data_failure_iterator(void); void test_failure_iterator(const void *data); void data_error_iterator(void); void test_error_iterator(const void *data); void data_pending_iterator(void); void test_pending_iterator(const void *data); void data_notification_iterator(void); void test_notification_iterator(const void *data); void data_omission_iterator(void); void test_omission_iterator(const void *data); void test_success (void) { cut_assert_equal_string("xxx", "xxx"); } void test_failure (void) { cut_fail("Failure!"); } void test_error (void) { cut_error("Error!"); } void test_pending (void) { cut_pend("Pending!"); } void test_notification (void) { cut_notify("Notification!"); } void test_omission (void) { cut_omit("Omission!"); } void data_success_iterator (void) { cut_add_data("success data1", NULL, NULL, "success data2", NULL, NULL); } void test_success_iterator (const void *data) { cut_assert_equal_string("abc", "abc"); } void data_failure_iterator (void) { cut_add_data("failure data1", NULL, NULL, "failure data2", NULL, NULL); } void test_failure_iterator (const void *data) { cut_fail("Failure! - iterator"); } void data_error_iterator (void) { cut_add_data("error data1", NULL, NULL, "error data2", NULL, NULL); } void test_error_iterator (const void *data) { cut_error("Error! - iterator"); } void data_pending_iterator (void) { cut_add_data("pending data1", NULL, NULL, "pending data2", NULL, NULL); } void test_pending_iterator (const void *data) { cut_pend("Pending! - iterator"); } void data_notification_iterator (void) { cut_add_data("notification data1", NULL, NULL, "notification data2", NULL, NULL); } void test_notification_iterator (const void *data) { cut_notify("Notification! - iterator"); } void data_omission_iterator (void) { cut_add_data("omission data1", NULL, NULL, "omission data2", NULL, NULL); } void test_omission_iterator (const void *data) { cut_omit("Omission! - iterator"); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/sub-process-group/fixtures/normal/Makefile.in0000644000175000017500000004437511525654636030341 0ustar koukou# 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@ 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@ subdir = test/fixtures/sub-process-group/fixtures/normal DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) test_normal_la_LIBADD = am_test_normal_la_OBJECTS = test-normal.lo test_normal_la_OBJECTS = $(am_test_normal_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_normal_la_SOURCES) DIST_SOURCES = $(test_normal_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ test-normal.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined test_normal_la_SOURCES = test-normal.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/sub-process-group/fixtures/normal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/sub-process-group/fixtures/normal/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-normal.la: $(test_normal_la_OBJECTS) $(test_normal_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_normal_la_OBJECTS) $(test_normal_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-normal.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/sub-process-group/fixtures/normal/Makefile.am0000644000175000017500000000056411277467273030323 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ test-normal.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) test_normal_la_SOURCES = test-normal.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/sub-process-group/Makefile.in0000644000175000017500000005713511525654636025176 0ustar koukou# 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@ 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@ subdir = test/fixtures/sub-process-group DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_invoker_la_LIBADD = am_test_invoker_la_OBJECTS = test-invoker.lo test_invoker_la_OBJECTS = $(am_test_invoker_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_invoker_la_SOURCES) DIST_SOURCES = $(test_invoker_la_SOURCES) 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = fixtures INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter check_LTLIBRARIES = \ test-invoker.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined test_invoker_la_SOURCES = test-invoker.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/sub-process-group/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/sub-process-group/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-invoker.la: $(test_invoker_la_OBJECTS) $(test_invoker_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_invoker_la_OBJECTS) $(test_invoker_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-invoker.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-checkLTLIBRARIES \ clean-generic clean-libtool ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/sub-process-group/Makefile.am0000644000175000017500000000064511424022520025132 0ustar koukouSUBDIRS = fixtures INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter check_LTLIBRARIES = \ test-invoker.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) test_invoker_la_SOURCES = test-invoker.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/sub-process-group/test-invoker.c0000644000175000017500000000164711205747027025714 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include #include "../../lib/cuttest-utils.h" void test_run(void); void test_run_async(void); static CutSubProcessGroup * create_group (void) { int i; int n_processes = 3; CutSubProcessGroup *group; group = cut_take_new_sub_process_group(); for (i = 0; i < n_processes; i++) { CutSubProcess *sub_process; sub_process = cut_take_new_sub_process(g_getenv(CUTTEST_TEST_DIR_KEY)); cut_sub_process_group_add(group, sub_process); } return group; } void test_run (void) { CutSubProcessGroup *group; group = create_group(); cut_sub_process_group_run(group); } void test_run_async (void) { CutSubProcessGroup *group; group = create_group(); cut_sub_process_group_run_async(group); cut_sub_process_group_wait(group); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/factory/0000755000175000017500000000000011525707415021160 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/factory/type1/0000755000175000017500000000000011525707415022222 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/factory/type1/module1-factory.c0000644000175000017500000001007611277467340025411 0ustar koukou#include #include #include #include #include static gchar *function_name = NULL; #define CUT_TYPE_MODULE_FACTORY_TYPE1_TEST1 cut_type_module_factory_type1_test1 #define CUT_MODULE_FACTORY_TYPE1_TEST1(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST1, CutModuleFactoryType1Test1)) #define CUT_MODULE_FACTORY_TYPE1_TEST1_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST1, CutModuleFactoryType1Test1Class)) #define CUT_IS_MODULE_FACTORY_TYPE1_TEST1(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST1)) #define CUT_IS_MODULE_FACTORY_TYPE1_TEST1_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST1)) #define CUT_MODULE_FACTORY_TYPE1_TEST1_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST1, CutModuleFactoryType1Test1Class)) typedef struct _CutModuleFactoryType1Test1 CutModuleFactoryType1Test1; typedef struct _CutModuleFactoryType1Test1Class CutModuleFactoryType1Test1Class; struct _CutModuleFactoryType1Test1 { CutModuleFactory object; }; struct _CutModuleFactoryType1Test1Class { CutModuleFactoryClass parent_class; }; static GType cut_type_module_factory_type1_test1 = 0; static CutModuleFactoryClass *parent_class; static void set_option_group (CutModuleFactory *factory, GOptionContext *context); static GObject *create (CutModuleFactory *factory); static void class_init (CutModuleFactoryClass *klass) { CutModuleFactoryClass *factory_class; parent_class = g_type_class_peek_parent(klass); factory_class = CUT_MODULE_FACTORY_CLASS(klass); factory_class->set_option_group = set_option_group; factory_class->create = create; } static void init (CutModuleFactoryType1Test1 *type1_test1) { } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutModuleFactoryType1Test1Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutModuleFactoryType1Test1), 0, (GInstanceInitFunc) init, }; cut_type_module_factory_type1_test1 = g_type_module_register_type(type_module, CUT_TYPE_MODULE_FACTORY, "CutModuleFactoryType1Test1", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_module_factory_type1_test1) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_module_factory_type1_test1)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_MODULE_FACTORY_TYPE1_TEST1, first_property, var_args); } static void set_option_group (CutModuleFactory *factory, GOptionContext *context) { GOptionGroup *group; GOptionEntry entries[] = { {"function", 'f', 0, G_OPTION_ARG_STRING, &function_name, "Set function name", "FUNCTION_NAME"}, {NULL} }; group = g_option_group_new(("type1-module"), ("Type1 Module Options"), ("TYpe1 Module Options"), factory, NULL); g_option_group_add_entries(group, entries); g_option_context_add_group(context, group); } GObject * create (CutModuleFactory *factory) { return g_object_new(CUT_TYPE_TEST, "name", function_name, NULL); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/factory/type1/Makefile.in0000644000175000017500000004644111525654635024305 0ustar koukou# 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@ 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@ subdir = test/fixtures/factory/type1 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) module1_factory_la_LIBADD = am_module1_factory_la_OBJECTS = module1-factory.lo module1_factory_la_OBJECTS = $(am_module1_factory_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent module2_factory_la_LIBADD = am_module2_factory_la_OBJECTS = module2-factory.lo module2_factory_la_OBJECTS = $(am_module2_factory_la_OBJECTS) module3_factory_la_LIBADD = am_module3_factory_la_OBJECTS = module3-factory.lo module3_factory_la_OBJECTS = $(am_module3_factory_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(module1_factory_la_SOURCES) $(module2_factory_la_SOURCES) \ $(module3_factory_la_SOURCES) DIST_SOURCES = $(module1_factory_la_SOURCES) \ $(module2_factory_la_SOURCES) $(module3_factory_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ module1-factory.la \ module2-factory.la \ module3-factory.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined module1_factory_la_SOURCES = module1-factory.c module2_factory_la_SOURCES = module2-factory.c module3_factory_la_SOURCES = module3-factory.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/factory/type1/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/factory/type1/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done module1-factory.la: $(module1_factory_la_OBJECTS) $(module1_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(module1_factory_la_OBJECTS) $(module1_factory_la_LIBADD) $(LIBS) module2-factory.la: $(module2_factory_la_OBJECTS) $(module2_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(module2_factory_la_OBJECTS) $(module2_factory_la_LIBADD) $(LIBS) module3-factory.la: $(module3_factory_la_OBJECTS) $(module3_factory_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(module3_factory_la_OBJECTS) $(module3_factory_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module1-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module2-factory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module3-factory.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/factory/type1/module3-factory.c0000644000175000017500000000751711277467340025421 0ustar koukou#include #include #include #include #define CUT_TYPE_MODULE_FACTORY_TYPE1_TEST3 cut_type_module_factory_type1_test3 #define CUT_MODULE_FACTORY_TYPE1_TEST3(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST3, CutModuleFactoryType1Test3)) #define CUT_MODULE_FACTORY_TYPE1_TEST3_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST3, CutModuleFactoryType1Test3Class)) #define CUT_IS_MODULE_FACTORY_TYPE1_TEST3(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST3)) #define CUT_IS_MODULE_FACTORY_TYPE1_TEST3_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST3)) #define CUT_MODULE_FACTORY_TYPE1_TEST3_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST3, CutModuleFactoryType1Test3Class)) typedef struct _CutModuleFactoryType1Test3 CutModuleFactoryType1Test3; typedef struct _CutModuleFactoryType1Test3Class CutModuleFactoryType1Test3Class; struct _CutModuleFactoryType1Test3 { CutModuleFactory object; }; struct _CutModuleFactoryType1Test3Class { CutModuleFactoryClass parent_class; }; static GType cut_type_module_factory_type1_test3 = 0; static CutModuleFactoryClass *parent_class; static void set_option_group (CutModuleFactory *factory, GOptionContext *context); static GObject *create (CutModuleFactory *factory); static void class_init (CutModuleFactoryClass *klass) { CutModuleFactoryClass *factory_class; parent_class = g_type_class_peek_parent(klass); factory_class = CUT_MODULE_FACTORY_CLASS(klass); factory_class->set_option_group = set_option_group; factory_class->create = create; } static void init (CutModuleFactoryType1Test3 *type1_test3) { } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutModuleFactoryType1Test3Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutModuleFactoryType1Test3), 0, (GInstanceInitFunc) init, }; cut_type_module_factory_type1_test3 = g_type_module_register_type(type_module, CUT_TYPE_MODULE_FACTORY, "CutModuleFactoryType1Test3", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_module_factory_type1_test3) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_module_factory_type1_test3)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_MODULE_FACTORY_TYPE1_TEST3, first_property, var_args); } static void set_option_group (CutModuleFactory *factory, GOptionContext *context) { GOptionGroup *group; GOptionEntry entries[] = { {NULL} }; CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group(factory, context); group = g_option_group_new(("type1-module"), ("Type1 Module Options"), ("TYpe1 Module Options"), factory, NULL); g_option_group_add_entries(group, entries); g_option_context_add_group(context, group); } GObject * create (CutModuleFactory *factory) { return NULL; } cutter-testing-framework-1.1.7/test/fixtures/factory/type1/Makefile.am0000644000175000017500000000101211277467340024254 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ module1-factory.la \ module2-factory.la \ module3-factory.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) module1_factory_la_SOURCES = module1-factory.c module2_factory_la_SOURCES = module2-factory.c module3_factory_la_SOURCES = module3-factory.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/factory/type1/module2-factory.c0000644000175000017500000000751711277467340025420 0ustar koukou#include #include #include #include #define CUT_TYPE_MODULE_FACTORY_TYPE1_TEST2 cut_type_module_factory_type1_test2 #define CUT_MODULE_FACTORY_TYPE1_TEST2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST2, CutModuleFactoryType1Test2)) #define CUT_MODULE_FACTORY_TYPE1_TEST2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST2, CutModuleFactoryType1Test2Class)) #define CUT_IS_MODULE_FACTORY_TYPE1_TEST2(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST2)) #define CUT_IS_MODULE_FACTORY_TYPE1_TEST2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST2)) #define CUT_MODULE_FACTORY_TYPE1_TEST2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_MODULE_FACTORY_TYPE1_TEST2, CutModuleFactoryType1Test2Class)) typedef struct _CutModuleFactoryType1Test2 CutModuleFactoryType1Test2; typedef struct _CutModuleFactoryType1Test2Class CutModuleFactoryType1Test2Class; struct _CutModuleFactoryType1Test2 { CutModuleFactory object; }; struct _CutModuleFactoryType1Test2Class { CutModuleFactoryClass parent_class; }; static GType cut_type_module_factory_type1_test2 = 0; static CutModuleFactoryClass *parent_class; static void set_option_group (CutModuleFactory *factory, GOptionContext *context); static GObject *create (CutModuleFactory *factory); static void class_init (CutModuleFactoryClass *klass) { CutModuleFactoryClass *factory_class; parent_class = g_type_class_peek_parent(klass); factory_class = CUT_MODULE_FACTORY_CLASS(klass); factory_class->set_option_group = set_option_group; factory_class->create = create; } static void init (CutModuleFactoryType1Test2 *type1_test2) { } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutModuleFactoryType1Test2Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutModuleFactoryType1Test2), 0, (GInstanceInitFunc) init, }; cut_type_module_factory_type1_test2 = g_type_module_register_type(type_module, CUT_TYPE_MODULE_FACTORY, "CutModuleFactoryType1Test2", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_module_factory_type1_test2) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_module_factory_type1_test2)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_MODULE_FACTORY_TYPE1_TEST2, first_property, var_args); } static void set_option_group (CutModuleFactory *factory, GOptionContext *context) { GOptionGroup *group; GOptionEntry entries[] = { {NULL} }; CUT_MODULE_FACTORY_CLASS(parent_class)->set_option_group(factory, context); group = g_option_group_new(("type1-module"), ("Type1 Module Options"), ("TYpe1 Module Options"), factory, NULL); g_option_group_add_entries(group, entries); g_option_context_add_group(context, group); } GObject * create (CutModuleFactory *factory) { return NULL; } cutter-testing-framework-1.1.7/test/fixtures/factory/type2/0000755000175000017500000000000011525707415022223 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/factory/type2/factory-module1.c0000644000175000017500000000004711205747027025401 0ustar koukou#include cutter-testing-framework-1.1.7/test/fixtures/factory/type2/factory-module2.c0000644000175000017500000000004711205747027025402 0ustar koukou#include cutter-testing-framework-1.1.7/test/fixtures/factory/type2/Makefile.in0000644000175000017500000004632411525654635024306 0ustar koukou# 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@ 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@ subdir = test/fixtures/factory/type2 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) factory_module1_la_LIBADD = am_factory_module1_la_OBJECTS = factory-module1.lo factory_module1_la_OBJECTS = $(am_factory_module1_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent factory_module2_la_LIBADD = am_factory_module2_la_OBJECTS = factory-module2.lo factory_module2_la_OBJECTS = $(am_factory_module2_la_OBJECTS) factory_module3_la_LIBADD = am_factory_module3_la_OBJECTS = factory-module2.lo factory_module3_la_OBJECTS = $(am_factory_module3_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(factory_module1_la_SOURCES) $(factory_module2_la_SOURCES) \ $(factory_module3_la_SOURCES) DIST_SOURCES = $(factory_module1_la_SOURCES) \ $(factory_module2_la_SOURCES) $(factory_module3_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ factory-module1.la \ factory-module2.la \ factory-module3.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined factory_module1_la_SOURCES = factory-module1.c factory_module2_la_SOURCES = factory-module2.c factory_module3_la_SOURCES = factory-module2.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/factory/type2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/factory/type2/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done factory-module1.la: $(factory_module1_la_OBJECTS) $(factory_module1_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(factory_module1_la_OBJECTS) $(factory_module1_la_LIBADD) $(LIBS) factory-module2.la: $(factory_module2_la_OBJECTS) $(factory_module2_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(factory_module2_la_OBJECTS) $(factory_module2_la_LIBADD) $(LIBS) factory-module3.la: $(factory_module3_la_OBJECTS) $(factory_module3_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(factory_module3_la_OBJECTS) $(factory_module3_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/factory-module1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/factory-module2.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/factory/type2/Makefile.am0000644000175000017500000000101611277467340024261 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ factory-module1.la \ factory-module2.la \ factory-module3.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) factory_module1_la_SOURCES = factory-module1.c factory_module2_la_SOURCES = factory-module2.c factory_module3_la_SOURCES = factory-module2.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/factory/Makefile.in0000644000175000017500000004764611525654635023253 0ustar koukou# 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@ 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@ subdir = test/fixtures/factory DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = type1 type2 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/factory/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/factory/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/factory/Makefile.am0000644000175000017500000000002611205747027023210 0ustar koukouSUBDIRS = type1 type2 cutter-testing-framework-1.1.7/test/fixtures/Makefile.in0000644000175000017500000005012411525654635021565 0ustar koukou# 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@ 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@ subdir = test/fixtures DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = \ assertions \ data \ factory \ loader \ pipeline \ repository \ sub-process \ sub-process-group \ xml-stream \ file-stream-reader \ pixbuf \ path \ test-context \ test-directory all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/Makefile.am0000644000175000017500000000033511424022520021527 0ustar koukouSUBDIRS = \ assertions \ data \ factory \ loader \ pipeline \ repository \ sub-process \ sub-process-group \ xml-stream \ file-stream-reader \ pixbuf \ path \ test-context \ test-directory cutter-testing-framework-1.1.7/test/fixtures/test-context/0000755000175000017500000000000011525707417022154 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/test-context/test-relative-path.c0000644000175000017500000000044411205747027026040 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include void test_fail(void); static void cut_assert_always_fail (void) { cut_fail("always fail"); } void test_fail (void) { cut_trace(cut_assert_always_fail()); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/test-context/Makefile.in0000644000175000017500000004461311525654636024235 0ustar koukou# 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@ 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@ subdir = test/fixtures/test-context DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_relative_path_la_LIBADD = am_test_relative_path_la_OBJECTS = test-relative-path.lo test_relative_path_la_OBJECTS = $(am_test_relative_path_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_relative_path_la_SOURCES) DIST_SOURCES = $(test_relative_path_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = \ -DCUT_RELATIVE_PATH="\"fixtures/test-context\"" \ $(CUTTER_CFLAGS) check_LTLIBRARIES = \ test-relative-path.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined test_relative_path_la_SOURCES = test-relative-path.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/test-context/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/test-context/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-relative-path.la: $(test_relative_path_la_OBJECTS) $(test_relative_path_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_relative_path_la_OBJECTS) $(test_relative_path_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-relative-path.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkLTLIBRARIES clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/test-context/Makefile.am0000644000175000017500000000075511424022520024176 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter AM_CFLAGS = \ -DCUT_RELATIVE_PATH="\"fixtures/test-context\"" \ $(CUTTER_CFLAGS) check_LTLIBRARIES = \ test-relative-path.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) test_relative_path_la_SOURCES = test-relative-path.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/sub-process/0000755000175000017500000000000011525707416021757 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/sub-process/fixtures/0000755000175000017500000000000011525707416023630 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/sub-process/fixtures/Makefile.in0000644000175000017500000004771011525654636025713 0ustar koukou# 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@ 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@ subdir = test/fixtures/sub-process/fixtures DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = normal all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/sub-process/fixtures/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/sub-process/fixtures/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/sub-process/fixtures/Makefile.am0000644000175000017500000000002111205747027025652 0ustar koukouSUBDIRS = normal cutter-testing-framework-1.1.7/test/fixtures/sub-process/fixtures/normal/0000755000175000017500000000000011525707416025120 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/sub-process/fixtures/normal/test-normal.c0000644000175000017500000000466211205747027027536 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include void test_success(void); void test_failure(void); void test_error(void); void test_pending(void); void test_notification(void); void test_omission(void); void data_success_iterator(void); void test_success_iterator(const void *data); void data_failure_iterator(void); void test_failure_iterator(const void *data); void data_error_iterator(void); void test_error_iterator(const void *data); void data_pending_iterator(void); void test_pending_iterator(const void *data); void data_notification_iterator(void); void test_notification_iterator(const void *data); void data_omission_iterator(void); void test_omission_iterator(const void *data); void test_success (void) { cut_assert_equal_string("xxx", "xxx"); } void test_failure (void) { cut_fail("Failure!"); } void test_error (void) { cut_error("Error!"); } void test_pending (void) { cut_pend("Pending!"); } void test_notification (void) { cut_notify("Notification!"); } void test_omission (void) { cut_omit("Omission!"); } void data_success_iterator (void) { cut_add_data("success data1", NULL, NULL, "success data2", NULL, NULL); } void test_success_iterator (const void *data) { cut_assert_equal_string("abc", "abc"); } void data_failure_iterator (void) { cut_add_data("failure data1", NULL, NULL, "failure data2", NULL, NULL); } void test_failure_iterator (const void *data) { cut_fail("Failure! - iterator"); } void data_error_iterator (void) { cut_add_data("error data1", NULL, NULL, "error data2", NULL, NULL); } void test_error_iterator (const void *data) { cut_error("Error! - iterator"); } void data_pending_iterator (void) { cut_add_data("pending data1", NULL, NULL, "pending data2", NULL, NULL); } void test_pending_iterator (const void *data) { cut_pend("Pending! - iterator"); } void data_notification_iterator (void) { cut_add_data("notification data1", NULL, NULL, "notification data2", NULL, NULL); } void test_notification_iterator (const void *data) { cut_notify("Notification! - iterator"); } void data_omission_iterator (void) { cut_add_data("omission data1", NULL, NULL, "omission data2", NULL, NULL); } void test_omission_iterator (const void *data) { cut_omit("Omission! - iterator"); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/sub-process/fixtures/normal/Makefile.in0000644000175000017500000004435311525654636027203 0ustar koukou# 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@ 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@ subdir = test/fixtures/sub-process/fixtures/normal DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) test_normal_la_LIBADD = am_test_normal_la_OBJECTS = test-normal.lo test_normal_la_OBJECTS = $(am_test_normal_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_normal_la_SOURCES) DIST_SOURCES = $(test_normal_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ test-normal.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined test_normal_la_SOURCES = test-normal.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/sub-process/fixtures/normal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/sub-process/fixtures/normal/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-normal.la: $(test_normal_la_OBJECTS) $(test_normal_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_normal_la_OBJECTS) $(test_normal_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-normal.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/sub-process/fixtures/normal/Makefile.am0000644000175000017500000000056411277467273027171 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ test-normal.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) test_normal_la_SOURCES = test-normal.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/sub-process/Makefile.in0000644000175000017500000005711311525654636024040 0ustar koukou# 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@ 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@ subdir = test/fixtures/sub-process DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_invoker_la_LIBADD = am_test_invoker_la_OBJECTS = test-invoker.lo test_invoker_la_OBJECTS = $(am_test_invoker_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_invoker_la_SOURCES) DIST_SOURCES = $(test_invoker_la_SOURCES) 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = fixtures INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter check_LTLIBRARIES = \ test-invoker.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined test_invoker_la_SOURCES = test-invoker.c all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/sub-process/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/sub-process/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-invoker.la: $(test_invoker_la_OBJECTS) $(test_invoker_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_invoker_la_OBJECTS) $(test_invoker_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-invoker.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-checkLTLIBRARIES \ clean-generic clean-libtool ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/sub-process/Makefile.am0000644000175000017500000000064511424022520024000 0ustar koukouSUBDIRS = fixtures INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter check_LTLIBRARIES = \ test-invoker.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) test_invoker_la_SOURCES = test-invoker.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/sub-process/test-invoker.c0000644000175000017500000000100611273277633024555 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include #include "../../lib/cuttest-utils.h" void test_invoke(void); void test_invoke (void) { CutSubProcess *sub_process; const gchar *test_dir; test_dir = g_getenv(CUTTEST_TEST_DIR_KEY); cut_assert_not_null(test_dir, cut_message("ENV[%s]", CUTTEST_TEST_DIR_KEY)); sub_process = cut_take_new_sub_process(test_dir); cut_sub_process_run(sub_process); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/file-stream-reader/0000755000175000017500000000000011525707417023163 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/file-stream-reader/error-test.xml0000644000175000017500000020125111205747030026002 0ustar koukou 1970-01-01T00:00:00Z 0.000000 38 6 2008-08-26T01:18:42Z 0.000000 test_cut_test_iterator 1970-01-01T00:00:00Z 0.000000 0 test_cut_test_iterator 2008-08-26T01:18:42Z 0.000000 test_cut_test_iterator 2008-08-26T01:18:42Z 0.000000 test_cut_test_iterator 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_test_iterator 2008-08-26T01:18:42Z 0.000000 test_cut_stream_parser 1970-01-01T00:00:00Z 0.000000 0 test_cut_stream_parser 2008-08-26T01:18:42Z 0.000000 test_cut_stream_parser 2008-08-26T01:18:42Z 0.000000 test_cut_stream_parser 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_stream_parser 2008-08-26T01:18:42Z 0.000000 test_cut_factory_builder 1970-01-01T00:00:00Z 0.000000 0 test_cut_factory_builder 2008-08-26T01:18:42Z 0.000000 test_cut_factory_builder 2008-08-26T01:18:42Z 0.000000 test_cut_factory_builder 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_factory_builder 2008-08-26T01:18:42Z 0.000000 test_cut_process 1970-01-01T00:00:00Z 0.000000 0 test_cut_process 2008-08-26T01:18:42Z 0.000000 test_cut_process 2008-08-26T01:18:42Z 0.000000 test_cut_process 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_process 2008-08-26T01:18:42Z 0.000000 test_cut_pipeline 1970-01-01T00:00:00Z 0.000000 0 test_cut_pipeline 2008-08-26T01:18:42Z 0.000000 test_cut_pipeline 2008-08-26T01:18:42Z 0.000000 test_cut_pipeline 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_pipeline 2008-08-26T01:18:42Z 0.000000 test_cut_sequence_matcher 1970-01-01T00:00:00Z 0.000000 0 test_cut_sequence_matcher 2008-08-26T01:18:42Z 0.000000 test_cut_sequence_matcher 2008-08-26T01:18:42Z 0.000000 test_cut_sequence_matcher 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_sequence_matcher 2008-08-26T01:18:42Z 0.000000 test_cut_value_equal 1970-01-01T00:00:00Z 0.000000 0 test_cut_value_equal 2008-08-26T01:18:42Z 0.000000 test_cut_value_equal 2008-08-26T01:18:42Z 0.000000 test_cut_value_equal 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_value_equal 2008-08-26T01:18:42Z 0.000000 test_cut_test_case 1970-01-01T00:00:00Z 0.000000 1 test_cut_test_case 2008-08-26T01:18:42Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:18:42Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 FALSE test_run 2008-08-26T01:18:42Z 0.000373 test_cut_test_case 2008-08-26T01:18:42Z 0.000399 test_run 2008-08-26T01:18:42Z 0.000417 FALSE test_run 2008-08-26T01:18:42Z 0.000456 test_cut_test_case 2008-08-26T01:18:42Z 0.000476 test_run 2008-08-26T01:18:42Z 0.000493 FALSE test_run 2008-08-26T01:18:42Z 0.000652 test_cut_test_case 2008-08-26T01:18:42Z 0.000672 test_run 2008-08-26T01:18:42Z 0.000689 TRUE test_cut_test_case 2008-08-26T01:18:42Z 0.000713 test_run 2008-08-26T01:18:42Z 0.000730 failure <9 == n_run_stub_test_function2> expected: <9> actual: <1> test/test-cut-test-case.c 187 test_run() 2008-08-26T01:18:42Z 0.000546 test_run 2008-08-26T01:18:42Z 0.000789 test_cut_test_case 2008-08-26T01:18:42Z 0.000789 test_run 2008-08-26T01:18:42Z 0.000789 TRUE test_cut_test_case 2008-08-26T01:18:42Z 0.000789 test_cut_test_case 2008-08-26T01:18:42Z 0.000789 failure 2008-08-26T01:18:42Z 0.000789 test_cut_test_case 2008-08-26T01:18:42Z 0.000789 test_cut_test_result 1970-01-01T00:00:00Z 0.000000 0 test_cut_test_result 2008-08-26T01:18:42Z 0.000000 test_cut_test_result 2008-08-26T01:18:42Z 0.000000 test_cut_test_result 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_test_result 2008-08-26T01:18:42Z 0.000000 test_cut_fixture_data 1970-01-01T00:00:00Z 0.000000 0 test_cut_fixture_data 2008-08-26T01:18:42Z 0.000000 test_cut_fixture_data 2008-08-26T01:18:42Z 0.000000 test_cut_fixture_data 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_fixture_data 2008-08-26T01:18:42Z 0.000000 test_cut_module_factory 1970-01-01T00:00:00Z 0.000000 0 test_cut_module_factory 2008-08-26T01:18:42Z 0.000000 test_cut_module_factory 2008-08-26T01:18:42Z 0.000000 test_cut_module_factory 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_module_factory 2008-08-26T01:18:42Z 0.000000 test_cut_iterated_test 1970-01-01T00:00:00Z 0.000000 1 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 FALSE test_run 2008-08-26T01:18:42Z 0.000159 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000179 test_run 2008-08-26T01:18:42Z 0.000196 FALSE test_run 2008-08-26T01:18:42Z 0.000242 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000260 test_run 2008-08-26T01:18:42Z 0.000277 FALSE test_run 2008-08-26T01:18:42Z 0.000321 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000339 test_run 2008-08-26T01:18:42Z 0.000356 FALSE test_run 2008-08-26T01:18:42Z 0.000376 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000376 test_run 2008-08-26T01:18:42Z 0.000376 FALSE test_cut_iterated_test 2008-08-26T01:18:42Z 0.000376 test_run 2008-08-26T01:18:42Z 0.000376 success 2008-08-26T01:18:42Z 0.000376 test_run 2008-08-26T01:18:42Z 0.000376 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000376 test_run 2008-08-26T01:18:42Z 0.000376 FALSE test_cut_iterated_test 2008-08-26T01:18:42Z 0.000376 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000376 success 2008-08-26T01:18:42Z 0.000376 test_cut_iterated_test 2008-08-26T01:18:42Z 0.000376 test_cut_test_data 1970-01-01T00:00:00Z 0.000000 0 test_cut_test_data 2008-08-26T01:18:42Z 0.000000 test_cut_test_data 2008-08-26T01:18:42Z 0.000000 test_cut_test_data 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_test_data 2008-08-26T01:18:42Z 0.000000 test_cut_diff 1970-01-01T00:00:00Z 0.000000 0 test_cut_diff 2008-08-26T01:18:42Z 0.000000 test_cut_diff 2008-08-26T01:18:42Z 0.000000 test_cut_diff 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_diff 2008-08-26T01:18:42Z 0.000000 test_cut_test_context 1970-01-01T00:00:00Z 0.000000 0 test_cut_test_context 2008-08-26T01:18:42Z 0.000000 test_cut_test_context 2008-08-26T01:18:42Z 0.000000 test_cut_test_context 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_test_context 2008-08-26T01:18:42Z 0.000000 test_cut_report_xml 1970-01-01T00:00:00Z 0.000000 0 test_cut_report_xml 2008-08-26T01:18:42Z 0.000000 test_cut_report_xml 2008-08-26T01:18:42Z 0.000000 test_cut_report_xml 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_report_xml 2008-08-26T01:18:42Z 0.000000 test_cut_module 1970-01-01T00:00:00Z 0.000000 0 test_cut_module 2008-08-26T01:18:42Z 0.000000 test_cut_module 2008-08-26T01:18:42Z 0.000000 test_cut_module 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_module 2008-08-26T01:18:42Z 0.000000 test_gcut_test_utils 1970-01-01T00:00:00Z 0.000000 0 test_gcut_test_utils 2008-08-26T01:18:42Z 0.000000 test_gcut_test_utils 2008-08-26T01:18:42Z 0.000000 test_gcut_test_utils 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_gcut_test_utils 2008-08-26T01:18:42Z 0.000000 test_cut_test_runner 1970-01-01T00:00:00Z 0.000000 0 test_cut_test_runner 2008-08-26T01:18:42Z 0.000000 test_cut_test_runner 2008-08-26T01:18:42Z 0.000000 test_cut_test_runner 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_test_runner 2008-08-26T01:18:42Z 0.000000 test_cut_fork 1970-01-01T00:00:00Z 0.000000 0 test_cut_fork 2008-08-26T01:18:42Z 0.000000 test_cut_fork 2008-08-26T01:18:42Z 0.000000 test_cut_fork 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_fork 2008-08-26T01:18:42Z 0.000000 test_cut_test_attribute 1970-01-01T00:00:00Z 0.000000 0 test_cut_test_attribute 2008-08-26T01:18:42Z 0.000000 test_cut_test_attribute 2008-08-26T01:18:42Z 0.000000 test_cut_test_attribute 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_test_attribute 2008-08-26T01:18:42Z 0.000000 test_cut_utils 1970-01-01T00:00:00Z 0.000000 0 test_cut_utils 2008-08-26T01:18:42Z 0.000000 test_cut_utils 2008-08-26T01:18:42Z 0.000000 test_cut_utils 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_utils 2008-08-26T01:18:42Z 0.000000 test_cutter 1970-01-01T00:00:00Z 0.000000 0 test_cutter 2008-08-26T01:18:42Z 0.000000 test_cutter 2008-08-26T01:18:42Z 0.000000 test_cutter 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cutter 2008-08-26T01:18:42Z 0.000000 test_gcut_assertions 1970-01-01T00:00:00Z 0.000000 0 test_gcut_assertions 2008-08-26T01:18:42Z 0.000000 test_gcut_assertions 2008-08-26T01:18:42Z 0.000000 test_gcut_assertions 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_gcut_assertions 2008-08-26T01:18:42Z 0.000000 test_cut_verbose_level 1970-01-01T00:00:00Z 0.000000 0 test_cut_verbose_level 2008-08-26T01:18:42Z 0.000000 test_cut_verbose_level 2008-08-26T01:18:42Z 0.000000 test_cut_verbose_level 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_verbose_level 2008-08-26T01:18:42Z 0.000000 test_cut_loader_suite 1970-01-01T00:00:00Z 0.000000 0 test_cut_loader_suite 2008-08-26T01:18:42Z 0.000000 test_cut_loader_suite 2008-08-26T01:18:42Z 0.000000 test_cut_loader_suite 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_loader_suite 2008-08-26T01:18:42Z 0.000000 test_cut_repository 1970-01-01T00:00:00Z 0.000000 0 test_cut_repository 2008-08-26T01:18:42Z 0.000000 test_cut_repository 2008-08-26T01:18:42Z 0.000000 test_cut_repository 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_repository 2008-08-26T01:18:42Z 0.000000 test_cut_contractor 1970-01-01T00:00:00Z 0.000000 0 test_cut_contractor 2008-08-26T01:18:42Z 0.000000 test_cut_contractor 2008-08-26T01:18:42Z 0.000000 test_cut_contractor 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_contractor 2008-08-26T01:18:42Z 0.000000 test_gcut_assertions_helper 1970-01-01T00:00:00Z 0.000000 0 test_gcut_assertions_helper 2008-08-26T01:18:42Z 0.000000 test_gcut_assertions_helper 2008-08-26T01:18:42Z 0.000000 test_gcut_assertions_helper 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_gcut_assertions_helper 2008-08-26T01:18:42Z 0.000000 test_cut_assertions 1970-01-01T00:00:00Z 0.000000 0 test_cut_assertions 2008-08-26T01:18:42Z 0.000000 test_cut_assertions 2008-08-26T01:18:42Z 0.000000 test_cut_assertions 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_assertions 2008-08-26T01:18:42Z 0.000000 test_cut_loader 1970-01-01T00:00:00Z 0.000000 0 test_cut_loader 2008-08-26T01:18:42Z 0.000000 test_cut_loader 2008-08-26T01:18:42Z 0.000000 test_cut_loader 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_loader 2008-08-26T01:18:42Z 0.000000 test_cut_xml_stream 1970-01-01T00:00:00Z 0.000000 0 test_cut_xml_stream 2008-08-26T01:18:42Z 0.000000 test_cut_xml_stream 2008-08-26T01:18:42Z 0.000000 test_cut_xml_stream 2008-08-26T01:18:42Z 0.000000 success 2008-08-26T01:18:42Z 0.000000 test_cut_xml_stream 2008-08-26T01:18:42Z 0.000000 test_cut_sub_process_group 1970-01-01T00:00:00Z 0.000000 1 test_cut_sub_process_group 2008-08-26T01:18:42Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 test_cut_sub_process_group 2008-08-26T01:18:42Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 FALSE test_run 2008-08-26T01:18:42Z 0.239896 test_cut_sub_process_group 2008-08-26T01:18:42Z 0.239921 test_run 2008-08-26T01:18:42Z 0.239941 FALSE test_run 2008-08-26T01:18:42Z 0.240008 test_cut_sub_process_group 2008-08-26T01:18:42Z 0.240030 test_run 2008-08-26T01:18:42Z 0.240049 FALSE test_run 2008-08-26T01:18:42Z 0.240070 test_cut_sub_process_group 2008-08-26T01:18:42Z 0.240070 test_run 2008-08-26T01:18:42Z 0.240070 FALSE test_cut_sub_process_group 2008-08-26T01:18:42Z 0.240070 test_run 2008-08-26T01:18:42Z 0.240070 success 2008-08-26T01:18:42Z 0.240070 test_run 2008-08-26T01:18:42Z 0.240070 test_cut_sub_process_group 2008-08-26T01:18:42Z 0.240070 test_run 2008-08-26T01:18:42Z 0.240070 FALSE test_cut_sub_process_group 2008-08-26T01:18:42Z 0.240070 test_cut_sub_process_group 2008-08-26T01:18:42Z 0.240070 success 2008-08-26T01:18:42Z 0.240070 test_cut_sub_process_group 2008-08-26T01:18:42Z 0.240070 test_cut_sub_process 1970-01-01T00:00:00Z 0.000000 1 test_cut_sub_process 2008-08-26T01:18:42Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 test_cut_sub_process 2008-08-26T01:18:42Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 FALSE test_run 2008-08-26T01:18:42Z 0.142091 test_cut_sub_process 2008-08-26T01:18:42Z 0.142115 test_run 2008-08-26T01:18:42Z 0.142135 FALSE test_run 2008-08-26T01:18:42Z 0.142208 test_cut_sub_process 2008-08-26T01:18:42Z 0.142229 test_run 2008-08-26T01:18:42Z 0.142248 FALSE test_run 2008-08-26T01:18:42Z 0.142271 test_cut_sub_process 2008-08-26T01:18:42Z 0.142271 test_run 2008-08-26T01:18:42Z 0.142271 FALSE test_cut_sub_process 2008-08-26T01:18:42Z 0.142271 test_run 2008-08-26T01:18:42Z 0.142271 success 2008-08-26T01:18:42Z 0.142271 test_run 2008-08-26T01:18:42Z 0.142271 test_cut_sub_process 2008-08-26T01:18:42Z 0.142271 test_run 2008-08-26T01:18:42Z 0.142271 FALSE test_cut_sub_process 2008-08-26T01:18:42Z 0.142271 test_cut_sub_process 2008-08-26T01:18:42Z 0.142271 success 2008-08-26T01:18:42Z 0.142271 test_cut_sub_process 2008-08-26T01:18:42Z 0.142271 test_cut_test_suite 1970-01-01T00:00:00Z 0.000000 1 test_cut_test_suite 2008-08-26T01:18:43Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 test_cut_test_suite 2008-08-26T01:18:43Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 FALSE test_run 2008-08-26T01:18:43Z 0.001129 test_cut_test_suite 2008-08-26T01:18:43Z 0.001154 test_run 2008-08-26T01:18:43Z 0.001175 FALSE test_run 2008-08-26T01:18:43Z 0.001219 test_cut_test_suite 2008-08-26T01:18:43Z 0.001241 test_run 2008-08-26T01:18:43Z 0.001260 FALSE test_run 2008-08-26T01:18:43Z 0.001300 test_cut_test_suite 2008-08-26T01:18:43Z 0.001322 test_run 2008-08-26T01:18:43Z 0.001341 FALSE test_run 2008-08-26T01:18:43Z 0.001380 test_cut_test_suite 2008-08-26T01:18:43Z 0.001402 test_run 2008-08-26T01:18:43Z 0.001421 FALSE test_run 2008-08-26T01:18:43Z 0.001460 test_cut_test_suite 2008-08-26T01:18:43Z 0.001481 test_run 2008-08-26T01:18:43Z 0.001501 FALSE test_run 2008-08-26T01:18:43Z 0.001540 test_cut_test_suite 2008-08-26T01:18:43Z 0.001561 test_run 2008-08-26T01:18:43Z 0.001580 FALSE test_run 2008-08-26T01:18:43Z 0.001628 test_cut_test_suite 2008-08-26T01:18:43Z 0.001649 test_run 2008-08-26T01:18:43Z 0.001669 FALSE test_run 2008-08-26T01:18:43Z 0.001689 test_cut_test_suite 2008-08-26T01:18:43Z 0.001689 test_run 2008-08-26T01:18:43Z 0.001689 FALSE test_cut_test_suite 2008-08-26T01:18:43Z 0.001689 test_run 2008-08-26T01:18:43Z 0.001689 success 2008-08-26T01:18:43Z 0.001689 test_run 2008-08-26T01:18:43Z 0.001689 test_cut_test_suite 2008-08-26T01:18:43Z 0.001689 test_run 2008-08-26T01:18:43Z 0.001689 FALSE test_cut_test_suite 2008-08-26T01:18:43Z 0.001689 test_cut_test_suite 2008-08-26T01:18:43Z 0.001689 success 2008-08-26T01:18:43Z 0.001689 test_cut_test_suite 2008-08-26T01:18:43Z 0.001689 test_cut_main 1970-01-01T00:00:00Z 0.000000 0 test_cut_main 2008-08-26T01:18:43Z 0.000000 test_cut_main 2008-08-26T01:18:43Z 0.000000 test_cut_main 2008-08-26T01:18:43Z 0.000000 success 2008-08-26T01:18:43Z 0.000000 test_cut_main 2008-08-26T01:18:43Z 0.000000 test_cut_test 1970-01-01T00:00:00Z 0.000000 1 test_cut_test 2008-08-26T01:18:43Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 test_cut_test 2008-08-26T01:18:43Z 0.000000 test_run 1970-01-01T00:00:00Z 0.000000 FALSE test_run 2008-08-26T01:18:43Z 0.000070 test_cut_test 2008-08-26T01:18:43Z 0.000092 test_run 2008-08-26T01:18:43Z 0.000112 TRUE test_cut_test 2008-08-26T01:18:43Z 0.000137 test_run 2008-08-26T01:18:43Z 0.000157 error Error!!! test/test-cut-test.c 203 test_run() 2008-08-26T01:18:43Z 0.000041 test_run 2008-08-26T01:18:43Z 0.000217 test_cut_test 2008-08-26T01:18:43Z 0.000217 test_run 2008-08-26T01:18:43Z 0.000217 TRUE test_cut_test 2008-08-26T01:18:43Z 0.000217 test_cut_test 2008-08-26T01:18:43Z 0.000217 error 2008-08-26T01:18:43Z 0.000217 test_cut_test 2008-08-26T01:18:43Z 0.000217 test_cut_file_stream_reader 1970-01-01T00:00:00Z 0.000000 0 test_cut_file_stream_reader 2008-08-26T01:18:43Z 0.000000 test_cut_file_stream_reader 2008-08-26T01:18:43Z 0.000000 test_cut_file_stream_reader 2008-08-26T01:18:43Z 0.000000 success 2008-08-26T01:18:43Z 0.000000 test_cut_file_stream_reader 2008-08-26T01:18:43Z 0.000000 2008-08-26T01:18:42Z 0.385412 false cutter-testing-framework-1.1.7/test/fixtures/file-stream-reader/all-success.xml0000644000175000017500000021470211205747030026117 0ustar koukou 1970-01-01T00:00:00Z 0.000000 1 19 2008-08-26T01:20:47Z 0.000000 test_cut_test_case 1970-01-01T00:00:00Z 0.000000 19 test_cut_test_case 2008-08-26T01:20:47Z 0.000000 test_error_signal 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.000000 test_error_signal 1970-01-01T00:00:00Z 0.000000 FALSE test_error_signal 2008-08-26T01:20:47Z 0.000531 test_cut_test_case 2008-08-26T01:20:47Z 0.000556 test_error_signal 2008-08-26T01:20:47Z 0.000575 FALSE test_error_signal 2008-08-26T01:20:47Z 0.000617 test_cut_test_case 2008-08-26T01:20:47Z 0.000636 test_error_signal 2008-08-26T01:20:47Z 0.000654 FALSE test_error_signal 2008-08-26T01:20:47Z 0.000674 test_cut_test_case 2008-08-26T01:20:47Z 0.000674 test_error_signal 2008-08-26T01:20:47Z 0.000674 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.000674 test_error_signal 2008-08-26T01:20:47Z 0.000674 success 2008-08-26T01:20:47Z 0.000674 test_error_signal 2008-08-26T01:20:47Z 0.000674 test_cut_test_case 2008-08-26T01:20:47Z 0.000674 test_error_signal 2008-08-26T01:20:47Z 0.000674 FALSE test_test_case_count 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.000674 test_test_case_count 1970-01-01T00:00:00Z 0.000000 FALSE test_test_case_count 2008-08-26T01:20:47Z 0.000021 test_cut_test_case 2008-08-26T01:20:47Z 0.000715 test_test_case_count 2008-08-26T01:20:47Z 0.000059 FALSE test_test_case_count 2008-08-26T01:20:47Z 0.000106 test_cut_test_case 2008-08-26T01:20:47Z 0.000799 test_test_case_count 2008-08-26T01:20:47Z 0.000143 FALSE test_test_case_count 2008-08-26T01:20:47Z 0.000163 test_cut_test_case 2008-08-26T01:20:47Z 0.000836 test_test_case_count 2008-08-26T01:20:47Z 0.000163 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.000836 test_test_case_count 2008-08-26T01:20:47Z 0.000163 success 2008-08-26T01:20:47Z 0.000163 test_test_case_count 2008-08-26T01:20:47Z 0.000163 test_cut_test_case 2008-08-26T01:20:47Z 0.000836 test_test_case_count 2008-08-26T01:20:47Z 0.000163 FALSE test_omission_signal 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.000836 test_omission_signal 1970-01-01T00:00:00Z 0.000000 FALSE test_omission_signal 2008-08-26T01:20:47Z 0.000477 test_cut_test_case 2008-08-26T01:20:47Z 0.001334 test_omission_signal 2008-08-26T01:20:47Z 0.000517 FALSE test_omission_signal 2008-08-26T01:20:47Z 0.000569 test_cut_test_case 2008-08-26T01:20:47Z 0.001425 test_omission_signal 2008-08-26T01:20:47Z 0.000608 FALSE test_omission_signal 2008-08-26T01:20:47Z 0.000628 test_cut_test_case 2008-08-26T01:20:47Z 0.001464 test_omission_signal 2008-08-26T01:20:47Z 0.000628 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.001464 test_omission_signal 2008-08-26T01:20:47Z 0.000628 success 2008-08-26T01:20:47Z 0.000628 test_omission_signal 2008-08-26T01:20:47Z 0.000628 test_cut_test_case 2008-08-26T01:20:47Z 0.001464 test_omission_signal 2008-08-26T01:20:47Z 0.000628 FALSE test_pending_signal 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.001464 test_pending_signal 1970-01-01T00:00:00Z 0.000000 FALSE test_pending_signal 2008-08-26T01:20:47Z 0.000452 test_cut_test_case 2008-08-26T01:20:47Z 0.001938 test_pending_signal 2008-08-26T01:20:47Z 0.000493 FALSE test_pending_signal 2008-08-26T01:20:47Z 0.000533 test_cut_test_case 2008-08-26T01:20:47Z 0.002017 test_pending_signal 2008-08-26T01:20:47Z 0.000571 FALSE test_pending_signal 2008-08-26T01:20:47Z 0.000599 test_cut_test_case 2008-08-26T01:20:47Z 0.002063 test_pending_signal 2008-08-26T01:20:47Z 0.000599 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.002063 test_pending_signal 2008-08-26T01:20:47Z 0.000599 success 2008-08-26T01:20:47Z 0.000599 test_pending_signal 2008-08-26T01:20:47Z 0.000599 test_cut_test_case 2008-08-26T01:20:47Z 0.002063 test_pending_signal 2008-08-26T01:20:47Z 0.000599 FALSE test_teardown 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.002063 test_teardown 1970-01-01T00:00:00Z 0.000000 FALSE test_teardown 2008-08-26T01:20:47Z 0.000354 test_cut_test_case 2008-08-26T01:20:47Z 0.002439 test_teardown 2008-08-26T01:20:47Z 0.000394 FALSE test_teardown 2008-08-26T01:20:47Z 0.000433 test_cut_test_case 2008-08-26T01:20:47Z 0.002516 test_teardown 2008-08-26T01:20:47Z 0.000471 FALSE test_teardown 2008-08-26T01:20:47Z 0.000490 test_cut_test_case 2008-08-26T01:20:47Z 0.002553 test_teardown 2008-08-26T01:20:47Z 0.000490 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.002553 test_teardown 2008-08-26T01:20:47Z 0.000490 success 2008-08-26T01:20:47Z 0.000490 test_teardown 2008-08-26T01:20:47Z 0.000490 test_cut_test_case 2008-08-26T01:20:47Z 0.002553 test_teardown 2008-08-26T01:20:47Z 0.000490 FALSE test_success_signal 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.002553 test_success_signal 1970-01-01T00:00:00Z 0.000000 FALSE test_success_signal 2008-08-26T01:20:47Z 0.000360 test_cut_test_case 2008-08-26T01:20:47Z 0.002934 test_success_signal 2008-08-26T01:20:47Z 0.000401 FALSE test_success_signal 2008-08-26T01:20:47Z 0.000441 test_cut_test_case 2008-08-26T01:20:47Z 0.003014 test_success_signal 2008-08-26T01:20:47Z 0.000479 FALSE test_success_signal 2008-08-26T01:20:47Z 0.000498 test_cut_test_case 2008-08-26T01:20:47Z 0.003050 test_success_signal 2008-08-26T01:20:47Z 0.000498 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.003050 test_success_signal 2008-08-26T01:20:47Z 0.000498 success 2008-08-26T01:20:47Z 0.000498 test_success_signal 2008-08-26T01:20:47Z 0.000498 test_cut_test_case 2008-08-26T01:20:47Z 0.003050 test_success_signal 2008-08-26T01:20:47Z 0.000498 FALSE test_run_tests_with_regex 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.003050 test_run_tests_with_regex 1970-01-01T00:00:00Z 0.000000 FALSE test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000272 test_cut_test_case 2008-08-26T01:20:47Z 0.003344 test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000312 FALSE test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000351 test_cut_test_case 2008-08-26T01:20:47Z 0.003420 test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000388 FALSE test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000424 test_cut_test_case 2008-08-26T01:20:47Z 0.003494 test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000462 FALSE test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000497 test_cut_test_case 2008-08-26T01:20:47Z 0.003566 test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000534 FALSE test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000552 test_cut_test_case 2008-08-26T01:20:47Z 0.003603 test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000552 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.003603 test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000552 success 2008-08-26T01:20:47Z 0.000552 test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000552 test_cut_test_case 2008-08-26T01:20:47Z 0.003603 test_run_tests_with_regex 2008-08-26T01:20:47Z 0.000552 FALSE test_start_signal 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.003603 test_start_signal 1970-01-01T00:00:00Z 0.000000 FALSE test_start_signal 2008-08-26T01:20:47Z 0.000359 test_cut_test_case 2008-08-26T01:20:47Z 0.003983 test_start_signal 2008-08-26T01:20:47Z 0.000399 FALSE test_start_signal 2008-08-26T01:20:47Z 0.000438 test_cut_test_case 2008-08-26T01:20:47Z 0.004060 test_start_signal 2008-08-26T01:20:47Z 0.000476 FALSE test_start_signal 2008-08-26T01:20:47Z 0.000494 test_cut_test_case 2008-08-26T01:20:47Z 0.004097 test_start_signal 2008-08-26T01:20:47Z 0.000494 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.004097 test_start_signal 2008-08-26T01:20:47Z 0.000494 success 2008-08-26T01:20:47Z 0.000494 test_start_signal 2008-08-26T01:20:47Z 0.000494 test_cut_test_case 2008-08-26T01:20:47Z 0.004097 test_start_signal 2008-08-26T01:20:47Z 0.000494 FALSE test_complete_signal 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.004097 test_complete_signal 1970-01-01T00:00:00Z 0.000000 FALSE test_complete_signal 2008-08-26T01:20:47Z 0.000357 test_cut_test_case 2008-08-26T01:20:47Z 0.004475 test_complete_signal 2008-08-26T01:20:47Z 0.000397 FALSE test_complete_signal 2008-08-26T01:20:47Z 0.000439 test_cut_test_case 2008-08-26T01:20:47Z 0.004555 test_complete_signal 2008-08-26T01:20:47Z 0.000477 FALSE test_complete_signal 2008-08-26T01:20:47Z 0.000497 test_cut_test_case 2008-08-26T01:20:47Z 0.004593 test_complete_signal 2008-08-26T01:20:47Z 0.000497 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.004593 test_complete_signal 2008-08-26T01:20:47Z 0.000497 success 2008-08-26T01:20:47Z 0.000497 test_complete_signal 2008-08-26T01:20:47Z 0.000497 test_cut_test_case 2008-08-26T01:20:47Z 0.004593 test_complete_signal 2008-08-26T01:20:47Z 0.000497 FALSE test_notification_signal 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.004593 test_notification_signal 1970-01-01T00:00:00Z 0.000000 FALSE test_notification_signal 2008-08-26T01:20:47Z 0.000487 test_cut_test_case 2008-08-26T01:20:47Z 0.005101 test_notification_signal 2008-08-26T01:20:47Z 0.000527 FALSE test_notification_signal 2008-08-26T01:20:47Z 0.000578 test_cut_test_case 2008-08-26T01:20:47Z 0.005192 test_notification_signal 2008-08-26T01:20:47Z 0.000616 FALSE test_notification_signal 2008-08-26T01:20:47Z 0.000636 test_cut_test_case 2008-08-26T01:20:47Z 0.005230 test_notification_signal 2008-08-26T01:20:47Z 0.000636 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.005230 test_notification_signal 2008-08-26T01:20:47Z 0.000636 success 2008-08-26T01:20:47Z 0.000636 test_notification_signal 2008-08-26T01:20:47Z 0.000636 test_cut_test_case 2008-08-26T01:20:47Z 0.005230 test_notification_signal 2008-08-26T01:20:47Z 0.000636 FALSE test_run_this_function 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.005230 test_run_this_function 1970-01-01T00:00:00Z 0.000000 FALSE test_run_this_function 2008-08-26T01:20:47Z 0.000176 test_cut_test_case 2008-08-26T01:20:47Z 0.005428 test_run_this_function 2008-08-26T01:20:47Z 0.000217 FALSE test_run_this_function 2008-08-26T01:20:47Z 0.000255 test_cut_test_case 2008-08-26T01:20:47Z 0.005505 test_run_this_function 2008-08-26T01:20:47Z 0.000293 FALSE test_run_this_function 2008-08-26T01:20:47Z 0.000340 test_cut_test_case 2008-08-26T01:20:47Z 0.005590 test_run_this_function 2008-08-26T01:20:47Z 0.000377 FALSE test_run_this_function 2008-08-26T01:20:47Z 0.000397 test_cut_test_case 2008-08-26T01:20:47Z 0.005627 test_run_this_function 2008-08-26T01:20:47Z 0.000397 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.005627 test_run_this_function 2008-08-26T01:20:47Z 0.000397 success 2008-08-26T01:20:47Z 0.000397 test_run_this_function 2008-08-26T01:20:47Z 0.000397 test_cut_test_case 2008-08-26T01:20:47Z 0.005627 test_run_this_function 2008-08-26T01:20:47Z 0.000397 FALSE test_run_with_name_filter 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.005627 test_run_with_name_filter 1970-01-01T00:00:00Z 0.000000 FALSE test_run_with_name_filter 2008-08-26T01:20:47Z 0.000280 test_cut_test_case 2008-08-26T01:20:47Z 0.005928 test_run_with_name_filter 2008-08-26T01:20:47Z 0.000319 FALSE test_run_with_name_filter 2008-08-26T01:20:47Z 0.000360 test_cut_test_case 2008-08-26T01:20:47Z 0.006007 test_run_with_name_filter 2008-08-26T01:20:47Z 0.000399 FALSE test_run_with_name_filter 2008-08-26T01:20:47Z 0.000447 test_cut_test_case 2008-08-26T01:20:47Z 0.006094 test_run_with_name_filter 2008-08-26T01:20:47Z 0.000485 FALSE test_run_with_name_filter 2008-08-26T01:20:47Z 0.000523 test_cut_test_case 2008-08-26T01:20:47Z 0.006169 test_run_with_name_filter 2008-08-26T01:20:47Z 0.000560 FALSE test_run_with_name_filter 2008-08-26T01:20:47Z 0.000579 test_cut_test_case 2008-08-26T01:20:47Z 0.006206 test_run_with_name_filter 2008-08-26T01:20:47Z 0.000579 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.006206 test_run_with_name_filter 2008-08-26T01:20:47Z 0.000579 success 2008-08-26T01:20:47Z 0.000579 test_run_with_name_filter 2008-08-26T01:20:47Z 0.000579 test_cut_test_case 2008-08-26T01:20:47Z 0.006206 test_run_with_name_filter 2008-08-26T01:20:47Z 0.000579 FALSE test_failure_signal 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.006206 test_failure_signal 1970-01-01T00:00:00Z 0.000000 FALSE test_failure_signal 2008-08-26T01:20:47Z 0.000454 test_cut_test_case 2008-08-26T01:20:47Z 0.006682 test_failure_signal 2008-08-26T01:20:47Z 0.000494 FALSE test_failure_signal 2008-08-26T01:20:47Z 0.000546 test_cut_test_case 2008-08-26T01:20:47Z 0.006772 test_failure_signal 2008-08-26T01:20:47Z 0.000584 FALSE test_failure_signal 2008-08-26T01:20:47Z 0.000605 test_cut_test_case 2008-08-26T01:20:47Z 0.006811 test_failure_signal 2008-08-26T01:20:47Z 0.000605 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.006811 test_failure_signal 2008-08-26T01:20:47Z 0.000605 success 2008-08-26T01:20:47Z 0.000605 test_failure_signal 2008-08-26T01:20:47Z 0.000605 test_cut_test_case 2008-08-26T01:20:47Z 0.006811 test_failure_signal 2008-08-26T01:20:47Z 0.000605 FALSE test_run 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.006811 test_run 1970-01-01T00:00:00Z 0.000000 FALSE test_run 2008-08-26T01:20:47Z 0.000358 test_cut_test_case 2008-08-26T01:20:47Z 0.007190 test_run 2008-08-26T01:20:47Z 0.000398 FALSE test_run 2008-08-26T01:20:47Z 0.000435 test_cut_test_case 2008-08-26T01:20:47Z 0.007267 test_run 2008-08-26T01:20:47Z 0.000474 FALSE test_run 2008-08-26T01:20:47Z 0.000526 test_cut_test_case 2008-08-26T01:20:47Z 0.007357 test_run 2008-08-26T01:20:47Z 0.000564 FALSE test_run 2008-08-26T01:20:47Z 0.000600 test_cut_test_case 2008-08-26T01:20:47Z 0.007430 test_run 2008-08-26T01:20:47Z 0.000637 FALSE test_run 2008-08-26T01:20:47Z 0.000655 test_cut_test_case 2008-08-26T01:20:47Z 0.007466 test_run 2008-08-26T01:20:47Z 0.000655 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.007466 test_run 2008-08-26T01:20:47Z 0.000655 success 2008-08-26T01:20:47Z 0.000655 test_run 2008-08-26T01:20:47Z 0.000655 test_cut_test_case 2008-08-26T01:20:47Z 0.007466 test_run 2008-08-26T01:20:47Z 0.000655 FALSE test_get_name 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.007466 test_get_name 1970-01-01T00:00:00Z 0.000000 FALSE test_get_name 2008-08-26T01:20:47Z 0.000021 test_cut_test_case 2008-08-26T01:20:47Z 0.007508 test_get_name 2008-08-26T01:20:47Z 0.000060 FALSE test_get_name 2008-08-26T01:20:47Z 0.000079 test_cut_test_case 2008-08-26T01:20:47Z 0.007545 test_get_name 2008-08-26T01:20:47Z 0.000079 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.007545 test_get_name 2008-08-26T01:20:47Z 0.000079 success 2008-08-26T01:20:47Z 0.000079 test_get_name 2008-08-26T01:20:47Z 0.000079 test_cut_test_case 2008-08-26T01:20:47Z 0.007545 test_get_name 2008-08-26T01:20:47Z 0.000079 FALSE test_run_with_setup_error 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.007545 test_run_with_setup_error 1970-01-01T00:00:00Z 0.000000 FALSE test_run_with_setup_error 2008-08-26T01:20:47Z 0.000286 test_cut_test_case 2008-08-26T01:20:47Z 0.007853 test_run_with_setup_error 2008-08-26T01:20:47Z 0.000326 FALSE test_run_with_setup_error 2008-08-26T01:20:47Z 0.000364 test_cut_test_case 2008-08-26T01:20:47Z 0.007929 test_run_with_setup_error 2008-08-26T01:20:47Z 0.000401 FALSE test_run_with_setup_error 2008-08-26T01:20:47Z 0.000437 test_cut_test_case 2008-08-26T01:20:47Z 0.008002 test_run_with_setup_error 2008-08-26T01:20:47Z 0.000474 FALSE test_run_with_setup_error 2008-08-26T01:20:47Z 0.000492 test_cut_test_case 2008-08-26T01:20:47Z 0.008037 test_run_with_setup_error 2008-08-26T01:20:47Z 0.000492 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.008037 test_run_with_setup_error 2008-08-26T01:20:47Z 0.000492 success 2008-08-26T01:20:47Z 0.000492 test_run_with_setup_error 2008-08-26T01:20:47Z 0.000492 test_cut_test_case 2008-08-26T01:20:47Z 0.008037 test_run_with_setup_error 2008-08-26T01:20:47Z 0.000492 FALSE test_setup 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.008037 test_setup 1970-01-01T00:00:00Z 0.000000 FALSE test_setup 2008-08-26T01:20:47Z 0.000354 test_cut_test_case 2008-08-26T01:20:47Z 0.008413 test_setup 2008-08-26T01:20:47Z 0.000394 FALSE test_setup 2008-08-26T01:20:47Z 0.000433 test_cut_test_case 2008-08-26T01:20:47Z 0.008492 test_setup 2008-08-26T01:20:47Z 0.000472 FALSE test_setup 2008-08-26T01:20:47Z 0.000491 test_cut_test_case 2008-08-26T01:20:47Z 0.008528 test_setup 2008-08-26T01:20:47Z 0.000491 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.008528 test_setup 2008-08-26T01:20:47Z 0.000491 success 2008-08-26T01:20:47Z 0.000491 test_setup 2008-08-26T01:20:47Z 0.000491 test_cut_test_case 2008-08-26T01:20:47Z 0.008528 test_setup 2008-08-26T01:20:47Z 0.000491 FALSE test_run_with_name_and_regex_filter 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.008528 test_run_with_name_and_regex_filter 1970-01-01T00:00:00Z 0.000000 FALSE test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000362 test_cut_test_case 2008-08-26T01:20:47Z 0.008912 test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000403 FALSE test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000443 test_cut_test_case 2008-08-26T01:20:47Z 0.008991 test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000481 FALSE test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000519 test_cut_test_case 2008-08-26T01:20:47Z 0.009068 test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000558 FALSE test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000596 test_cut_test_case 2008-08-26T01:20:47Z 0.009144 test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000638 FALSE test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000658 test_cut_test_case 2008-08-26T01:20:47Z 0.009185 test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000658 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.009185 test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000658 success 2008-08-26T01:20:47Z 0.000658 test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000658 test_cut_test_case 2008-08-26T01:20:47Z 0.009185 test_run_with_name_and_regex_filter 2008-08-26T01:20:47Z 0.000658 FALSE test_run_with_regex_filter 1970-01-01T00:00:00Z 0.000000 test_cut_test_case 2008-08-26T01:20:47Z 0.009185 test_run_with_regex_filter 1970-01-01T00:00:00Z 0.000000 FALSE test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000273 test_cut_test_case 2008-08-26T01:20:47Z 0.009480 test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000313 FALSE test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000352 test_cut_test_case 2008-08-26T01:20:47Z 0.009558 test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000390 FALSE test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000427 test_cut_test_case 2008-08-26T01:20:47Z 0.009633 test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000464 FALSE test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000500 test_cut_test_case 2008-08-26T01:20:47Z 0.009706 test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000537 FALSE test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000555 test_cut_test_case 2008-08-26T01:20:47Z 0.009741 test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000555 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.009741 test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000555 success 2008-08-26T01:20:47Z 0.000555 test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000555 test_cut_test_case 2008-08-26T01:20:47Z 0.009741 test_run_with_regex_filter 2008-08-26T01:20:47Z 0.000555 FALSE test_cut_test_case 2008-08-26T01:20:47Z 0.009741 test_cut_test_case 2008-08-26T01:20:47Z 0.009741 success 2008-08-26T01:20:47Z 0.009741 test_cut_test_case 2008-08-26T01:20:47Z 0.009741 2008-08-26T01:20:47Z 0.009741 true cutter-testing-framework-1.1.7/test/fixtures/file-stream-reader/Makefile.in0000644000175000017500000003162611525654635025243 0ustar koukou# 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@ 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@ subdir = test/fixtures/file-stream-reader DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ EXTRA_DIST = \ all-success.xml \ error-test.xml all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/file-stream-reader/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/file-stream-reader/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/file-stream-reader/Makefile.am0000644000175000017500000000006311205747030025204 0ustar koukouEXTRA_DIST = \ all-success.xml \ error-test.xml cutter-testing-framework-1.1.7/test/fixtures/loader/0000755000175000017500000000000011525707415020757 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/module/0000755000175000017500000000000011525707415022244 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/module/test1.c0000644000175000017500000000462511205747027023455 0ustar koukou#include #include #include #include #define CUT_TYPE_MODULE_TEST1 cut_type_module_test1 #define CUT_MODULE_TEST1(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_MODULE_TEST1, CutModuleTest1)) #define CUT_MODULE_TEST1_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_MODULE_TEST1, CutModuleTest1Class)) #define CUT_IS_MODULE_TEST1(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_MODULE_TEST1)) #define CUT_IS_MODULE_TEST1_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_MODULE_TEST1)) #define CUT_MODULE_TEST1_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_MODULE_TEST1, CutModuleTest1Class)) typedef struct _CutModuleTest1 CutModuleTest1; typedef struct _CutModuleTest1Class CutModuleTest1Class; struct _CutModuleTest1 { GObject object; }; struct _CutModuleTest1Class { GObjectClass parent_class; }; static GType cut_type_module_test1 = 0; static GObjectClass *parent_class; static void class_init (GObjectClass *klass) { parent_class = g_type_class_peek_parent(klass); } static void init (CutModuleTest1 *test1) { } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutModuleTest1Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutModuleTest1), 0, (GInstanceInitFunc) init, }; cut_type_module_test1 = g_type_module_register_type(type_module, G_TYPE_OBJECT, "CutModuleTest1", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_module_test1) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_module_test1)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_MODULE_TEST1, first_property, var_args); } cutter-testing-framework-1.1.7/test/fixtures/loader/module/test2.c0000644000175000017500000000462511205747027023456 0ustar koukou#include #include #include #include #define CUT_TYPE_MODULE_TEST2 cut_type_module_test2 #define CUT_MODULE_TEST2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_MODULE_TEST2, CutModuleTest2)) #define CUT_MODULE_TEST2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_MODULE_TEST2, CutModuleTest2Class)) #define CUT_IS_MODULE_TEST2(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_MODULE_TEST2)) #define CUT_IS_MODULE_TEST2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_MODULE_TEST2)) #define CUT_MODULE_TEST2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_MODULE_TEST2, CutModuleTest2Class)) typedef struct _CutModuleTest2 CutModuleTest2; typedef struct _CutModuleTest2Class CutModuleTest2Class; struct _CutModuleTest2 { GObject object; }; struct _CutModuleTest2Class { GObjectClass parent_class; }; static GType cut_type_module_test2 = 0; static GObjectClass *parent_class; static void class_init (GObjectClass *klass) { parent_class = g_type_class_peek_parent(klass); } static void init (CutModuleTest2 *test2) { } static void register_type (GTypeModule *type_module) { static const GTypeInfo info = { sizeof (CutModuleTest2Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(CutModuleTest2), 0, (GInstanceInitFunc) init, }; cut_type_module_test2 = g_type_module_register_type(type_module, G_TYPE_OBJECT, "CutModuleTest2", &info, 0); } G_MODULE_EXPORT GList * CUT_MODULE_IMPL_INIT (GTypeModule *type_module) { GList *registered_types = NULL; register_type(type_module); if (cut_type_module_test2) registered_types = g_list_prepend(registered_types, (gchar *)g_type_name(cut_type_module_test2)); return registered_types; } G_MODULE_EXPORT void CUT_MODULE_IMPL_EXIT (void) { } G_MODULE_EXPORT GObject * CUT_MODULE_IMPL_INSTANTIATE (const gchar *first_property, va_list var_args) { return g_object_new_valist(CUT_TYPE_MODULE_TEST2, first_property, var_args); } cutter-testing-framework-1.1.7/test/fixtures/loader/module/Makefile.in0000644000175000017500000004602411525654635024324 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader/module DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) cannot_load_module_la_LIBADD = am_cannot_load_module_la_OBJECTS = cannot-load-module.lo cannot_load_module_la_OBJECTS = $(am_cannot_load_module_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent test1_la_LIBADD = am_test1_la_OBJECTS = test1.lo test1_la_OBJECTS = $(am_test1_la_OBJECTS) test2_la_LIBADD = am_test2_la_OBJECTS = test2.lo test2_la_OBJECTS = $(am_test2_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(cannot_load_module_la_SOURCES) $(test1_la_SOURCES) \ $(test2_la_SOURCES) DIST_SOURCES = $(cannot_load_module_la_SOURCES) $(test1_la_SOURCES) \ $(test2_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ test1.la \ test2.la \ cannot-load-module.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined test1_la_SOURCES = test1.c test2_la_SOURCES = test2.c cannot_load_module_la_SOURCES = cannot-load-module.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/module/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/module/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done cannot-load-module.la: $(cannot_load_module_la_OBJECTS) $(cannot_load_module_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(cannot_load_module_la_OBJECTS) $(cannot_load_module_la_LIBADD) $(LIBS) test1.la: $(test1_la_OBJECTS) $(test1_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test1_la_OBJECTS) $(test1_la_LIBADD) $(LIBS) test2.la: $(test2_la_OBJECTS) $(test2_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test2_la_OBJECTS) $(test2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cannot-load-module.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test2.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/module/Makefile.am0000644000175000017500000000073211277467306024310 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ test1.la \ test2.la \ cannot-load-module.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) test1_la_SOURCES = test1.c test2_la_SOURCES = test2.c cannot_load_module_la_SOURCES = cannot-load-module.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/loader/module/cannot-load-module.c0000644000175000017500000000005011277467306026073 0ustar koukou#include #include cutter-testing-framework-1.1.7/test/fixtures/loader/cpp/0000755000175000017500000000000011525707416021542 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/cpp/stub-namespace.cpp0000644000175000017500000000224111355531411025143 0ustar koukou/* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include namespace calc { CUT_EXPORT void setup(void) { } CUT_EXPORT void teardown(void) { } CUT_EXPORT void test_add(void) { cppcut_assert_equal(5, 2 + 3); } CUT_EXPORT void test_sub(void) { cppcut_assert_equal(2, 3 - 1); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/cpp/Makefile.in0000644000175000017500000004475011525654635023625 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader/cpp DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) stub_namespace_la_LIBADD = am_stub_namespace_la_OBJECTS = stub-namespace.lo stub_namespace_la_OBJECTS = $(am_stub_namespace_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(stub_namespace_la_SOURCES) DIST_SOURCES = $(stub_namespace_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/gcutter/libgcutter.la \ $(top_builddir)/cppcutter/libcppcutter.la \ $(GLIB_LIBS) \ $(GIO_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/cppcutter noinst_LTLIBRARIES = \ stub-namespace.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined stub_namespace_la_SOURCES = stub-namespace.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/cpp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/cpp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done stub-namespace.la: $(stub_namespace_la_OBJECTS) $(stub_namespace_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(stub_namespace_la_OBJECTS) $(stub_namespace_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stub-namespace.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/cpp/Makefile.am0000644000175000017500000000102711442135233023564 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/cppcutter noinst_LTLIBRARIES = \ stub-namespace.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/gcutter/libgcutter.la \ $(top_builddir)/cppcutter/libcppcutter.la \ $(GLIB_LIBS) \ $(GIO_LIBS) stub_namespace_la_SOURCES = stub-namespace.cpp echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/loader/fixture/0000755000175000017500000000000011525707415022445 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/fixture/all.c0000644000175000017500000000073511326332505023357 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #define CUT_DISABLE_SOCKET_SUPPORT #include void test_nothing (void); void startup (void); void shutdown (void); void cut_startup (void) { } void startup (void) { } void cut_setup (void) { } void setup (void) { } void test_nothing (void) { } void teardown (void) { } void cut_teardown (void) { } void shutdown (void) { } void cut_shutdown (void) { } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/fixture/Makefile.in0000644000175000017500000004603011525654635024522 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader/fixture DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) all_la_LIBADD = am_all_la_OBJECTS = all.lo all_la_OBJECTS = $(am_all_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent with_prefix_la_LIBADD = am_with_prefix_la_OBJECTS = with-prefix.lo with_prefix_la_OBJECTS = $(am_with_prefix_la_OBJECTS) without_prefix_la_LIBADD = am_without_prefix_la_OBJECTS = without-prefix.lo without_prefix_la_OBJECTS = $(am_without_prefix_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(all_la_SOURCES) $(with_prefix_la_SOURCES) \ $(without_prefix_la_SOURCES) DIST_SOURCES = $(all_la_SOURCES) $(with_prefix_la_SOURCES) \ $(without_prefix_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ with-prefix.la \ without-prefix.la \ all.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined with_prefix_la_SOURCES = with-prefix.c without_prefix_la_SOURCES = without-prefix.c all_la_SOURCES = all.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/fixture/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/fixture/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done all.la: $(all_la_OBJECTS) $(all_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(all_la_OBJECTS) $(all_la_LIBADD) $(LIBS) with-prefix.la: $(with_prefix_la_OBJECTS) $(with_prefix_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(with_prefix_la_OBJECTS) $(with_prefix_la_LIBADD) $(LIBS) without-prefix.la: $(without_prefix_la_OBJECTS) $(without_prefix_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(without_prefix_la_OBJECTS) $(without_prefix_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/all.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/with-prefix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/without-prefix.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/fixture/with-prefix.c0000644000175000017500000000045211205747027025056 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include void test_nothing (void); void cut_startup (void) { } void cut_setup (void) { } void test_nothing (void) { } void cut_teardown (void) { } void cut_shutdown (void) { } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/fixture/without-prefix.c0000644000175000017500000000055111326332505025601 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #define CUT_DISABLE_SOCKET_SUPPORT #include void test_nothing (void); void startup (void); void shutdown (void); void startup (void) { } void setup (void) { } void test_nothing (void) { } void teardown (void) { } void shutdown (void) { } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/fixture/Makefile.am0000644000175000017500000000073511277467306024514 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ with-prefix.la \ without-prefix.la \ all.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) with_prefix_la_SOURCES = with-prefix.c without_prefix_la_SOURCES = without-prefix.c all_la_SOURCES = all.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/loader/iterator/0000755000175000017500000000000011525707415022610 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/iterator/success-iterated-test.c0000644000175000017500000000256011355531411027173 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include void data_translate (void); void test_translate (const void *data); static const char* translate (int input) { switch(input) { case 1: return "first"; case 111: return "a hundred eleven"; default: return "unsupported"; } } typedef struct _TranslateTestData { char *translated; int input; } TranslateTestData; static TranslateTestData * translate_test_data_new (char *translated, int input) { TranslateTestData *data; data = malloc(sizeof(TranslateTestData)); data->translated = strdup(translated); data->input = input; return data; } static void translate_test_data_free (TranslateTestData *data) { free(data->translated); free(data); } void data_translate(void) { cut_add_data("simple data", translate_test_data_new("first", 1), translate_test_data_free, "complex data", translate_test_data_new("a hundred eleven", 111), translate_test_data_free, NULL); } void test_translate(const void *data) { const TranslateTestData *test_data = data; cut_assert_equal_string(test_data->translated, translate(test_data->input)); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/iterator/Makefile.in0000644000175000017500000004455611525654635024700 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader/iterator DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) success_iterated_test_la_LIBADD = am_success_iterated_test_la_OBJECTS = success-iterated-test.lo success_iterated_test_la_OBJECTS = \ $(am_success_iterated_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(success_iterated_test_la_SOURCES) DIST_SOURCES = $(success_iterated_test_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ success-iterated-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined success_iterated_test_la_SOURCES = success-iterated-test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/iterator/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/iterator/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done success-iterated-test.la: $(success_iterated_test_la_OBJECTS) $(success_iterated_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(success_iterated_test_la_OBJECTS) $(success_iterated_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/success-iterated-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/iterator/Makefile.am0000644000175000017500000000062711277467306024657 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ success-iterated-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) success_iterated_test_la_SOURCES = success-iterated-test.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/loader/suite/0000755000175000017500000000000011525707415022110 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/suite/suite-cuttest-loader-valid.c0000644000175000017500000000026011205747027027433 0ustar koukouvoid cuttest_loader_valid_warmup (void); void cuttest_loader_valid_cooldown (void); void cuttest_loader_valid_warmup (void) { } void cuttest_loader_valid_cooldown (void) { } cutter-testing-framework-1.1.7/test/fixtures/loader/suite/Makefile.in0000644000175000017500000004753711525654635024202 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader/suite DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) suite_cuttest_loader_invalid_la_LIBADD = am_suite_cuttest_loader_invalid_la_OBJECTS = \ suite-cuttest-loader-invalid.lo suite_cuttest_loader_invalid_la_OBJECTS = \ $(am_suite_cuttest_loader_invalid_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent suite_cuttest_loader_none_la_LIBADD = am_suite_cuttest_loader_none_la_OBJECTS = \ suite-cuttest-loader-none.lo suite_cuttest_loader_none_la_OBJECTS = \ $(am_suite_cuttest_loader_none_la_OBJECTS) suite_cuttest_loader_valid_la_LIBADD = am_suite_cuttest_loader_valid_la_OBJECTS = \ suite-cuttest-loader-valid.lo suite_cuttest_loader_valid_la_OBJECTS = \ $(am_suite_cuttest_loader_valid_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(suite_cuttest_loader_invalid_la_SOURCES) \ $(suite_cuttest_loader_none_la_SOURCES) \ $(suite_cuttest_loader_valid_la_SOURCES) DIST_SOURCES = $(suite_cuttest_loader_invalid_la_SOURCES) \ $(suite_cuttest_loader_none_la_SOURCES) \ $(suite_cuttest_loader_valid_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ suite-cuttest-loader-valid.la \ suite-cuttest-loader-invalid.la \ suite-cuttest-loader-none.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined suite_cuttest_loader_valid_la_SOURCES = suite-cuttest-loader-valid.c suite_cuttest_loader_invalid_la_SOURCES = suite-cuttest-loader-invalid.c suite_cuttest_loader_none_la_SOURCES = suite-cuttest-loader-none.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/suite/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/suite/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done suite-cuttest-loader-invalid.la: $(suite_cuttest_loader_invalid_la_OBJECTS) $(suite_cuttest_loader_invalid_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(suite_cuttest_loader_invalid_la_OBJECTS) $(suite_cuttest_loader_invalid_la_LIBADD) $(LIBS) suite-cuttest-loader-none.la: $(suite_cuttest_loader_none_la_OBJECTS) $(suite_cuttest_loader_none_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(suite_cuttest_loader_none_la_OBJECTS) $(suite_cuttest_loader_none_la_LIBADD) $(LIBS) suite-cuttest-loader-valid.la: $(suite_cuttest_loader_valid_la_OBJECTS) $(suite_cuttest_loader_valid_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(suite_cuttest_loader_valid_la_OBJECTS) $(suite_cuttest_loader_valid_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suite-cuttest-loader-invalid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suite-cuttest-loader-none.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suite-cuttest-loader-valid.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/suite/Makefile.am0000644000175000017500000000116511277467306024155 0ustar koukouINCLUDES = $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ suite-cuttest-loader-valid.la \ suite-cuttest-loader-invalid.la \ suite-cuttest-loader-none.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) suite_cuttest_loader_valid_la_SOURCES = suite-cuttest-loader-valid.c suite_cuttest_loader_invalid_la_SOURCES = suite-cuttest-loader-invalid.c suite_cuttest_loader_none_la_SOURCES = suite-cuttest-loader-none.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/loader/suite/suite-cuttest-loader-invalid.c0000644000175000017500000000031011205747027027756 0ustar koukouvoid cuttest_loader_invalid_XXX_warmup (void); void cuttest_loader_invalid_XXX_cooldown (void); void cuttest_loader_invalid_XXX_warmup (void) { } void cuttest_loader_invalid_XXX_cooldown (void) { } cutter-testing-framework-1.1.7/test/fixtures/loader/suite/suite-cuttest-loader-none.c0000644000175000017500000000000011205747027027263 0ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/Makefile.in0000644000175000017500000004776211525654635023051 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = \ attribute \ fixture \ iterator \ module \ suite \ test \ cpp \ cpp-fixture all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/test/0000755000175000017500000000000011525707416021737 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/test/stub-test-functions.c0000644000175000017500000000162411277543756026057 0ustar koukou#include void test_abcdefghijklmnopqratuvwzyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 (void); void test_stub_function1 (void); void test_stub_function2 (void); void test_stub_function3 (void); /* int test_invalid_return_value_function (void); void test_invalid_argument_type_function (int argument); */ void text_invalid_prefix_function (void); void test_stub_function1 (void) { } void test_stub_function2 (void) { } void test_stub_function3 (void) { } void test_abcdefghijklmnopqratuvwzyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 (void) { } static void test_static_function (void) { cut_error("This function is declared as static, should not be loaded!"); } void text_invalid_prefix_function (void) { cut_error("This test name does not have \"test_\" prefix," "should not be loaded!"); test_static_function(); /* must not called! */ } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/test/Makefile.in0000644000175000017500000004447611525654635024027 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader/test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) stub_test_functions_la_LIBADD = am_stub_test_functions_la_OBJECTS = stub-test-functions.lo stub_test_functions_la_OBJECTS = $(am_stub_test_functions_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(stub_test_functions_la_SOURCES) DIST_SOURCES = $(stub_test_functions_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ stub-test-functions.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined stub_test_functions_la_SOURCES = stub-test-functions.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done stub-test-functions.la: $(stub_test_functions_la_OBJECTS) $(stub_test_functions_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(stub_test_functions_la_OBJECTS) $(stub_test_functions_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stub-test-functions.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/test/Makefile.am0000644000175000017500000000062111277467273024002 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ stub-test-functions.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) stub_test_functions_la_SOURCES = stub-test-functions.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/loader/Makefile.am0000644000175000017500000000014511273042123022777 0ustar koukouSUBDIRS = \ attribute \ fixture \ iterator \ module \ suite \ test \ cpp \ cpp-fixture cutter-testing-framework-1.1.7/test/fixtures/loader/cpp-fixture/0000755000175000017500000000000011525707416023226 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/cpp-fixture/all.cpp0000644000175000017500000000256211355531411024476 0ustar koukou/* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include namespace fixture { CUT_EXPORT void cut_startup (void) { } CUT_EXPORT void startup (void) { } CUT_EXPORT void cut_setup (void) { } CUT_EXPORT void setup (void) { } CUT_EXPORT void test_nothing (void) { } CUT_EXPORT void teardown (void) { } CUT_EXPORT void cut_teardown (void) { } CUT_EXPORT void shutdown (void) { } CUT_EXPORT void cut_shutdown (void) { } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/cpp-fixture/without-prefix.cpp0000644000175000017500000000222211355531411026715 0ustar koukou/* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include namespace fixture { CUT_EXPORT void startup (void) { } CUT_EXPORT void setup (void) { } CUT_EXPORT void test_nothing (void) { } CUT_EXPORT void teardown (void) { } CUT_EXPORT void shutdown (void) { } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/cpp-fixture/with-prefix.cpp0000644000175000017500000000224211355531411026167 0ustar koukou/* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include namespace fixture { CUT_EXPORT void cut_startup (void) { } CUT_EXPORT void cut_setup (void) { } CUT_EXPORT void test_nothing (void) { } CUT_EXPORT void cut_teardown (void) { } CUT_EXPORT void cut_shutdown (void) { } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/cpp-fixture/Makefile.in0000644000175000017500000004651211525654635025307 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader/cpp-fixture DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) all_la_LIBADD = am_all_la_OBJECTS = all.lo all_la_OBJECTS = $(am_all_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent with_prefix_la_LIBADD = am_with_prefix_la_OBJECTS = with-prefix.lo with_prefix_la_OBJECTS = $(am_with_prefix_la_OBJECTS) without_prefix_la_LIBADD = am_without_prefix_la_OBJECTS = without-prefix.lo without_prefix_la_OBJECTS = $(am_without_prefix_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_$(V)) am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_$(V)) am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(all_la_SOURCES) $(with_prefix_la_SOURCES) \ $(without_prefix_la_SOURCES) DIST_SOURCES = $(all_la_SOURCES) $(with_prefix_la_SOURCES) \ $(without_prefix_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/gcutter/libgcutter.la \ $(top_builddir)/cppcutter/libcppcutter.la \ $(GLIB_LIBS) \ $(GIO_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/cppcutter noinst_LTLIBRARIES = \ with-prefix.la \ without-prefix.la \ all.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined with_prefix_la_SOURCES = with-prefix.cpp without_prefix_la_SOURCES = without-prefix.cpp all_la_SOURCES = all.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/cpp-fixture/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/cpp-fixture/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done all.la: $(all_la_OBJECTS) $(all_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(all_la_OBJECTS) $(all_la_LIBADD) $(LIBS) with-prefix.la: $(with_prefix_la_OBJECTS) $(with_prefix_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(with_prefix_la_OBJECTS) $(with_prefix_la_LIBADD) $(LIBS) without-prefix.la: $(without_prefix_la_OBJECTS) $(without_prefix_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(without_prefix_la_OBJECTS) $(without_prefix_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/all.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/with-prefix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/without-prefix.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/cpp-fixture/Makefile.am0000644000175000017500000000122311442135233025246 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/cppcutter noinst_LTLIBRARIES = \ with-prefix.la \ without-prefix.la \ all.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/gcutter/libgcutter.la \ $(top_builddir)/cppcutter/libcppcutter.la \ $(GLIB_LIBS) \ $(GIO_LIBS) with_prefix_la_SOURCES = with-prefix.cpp without_prefix_la_SOURCES = without-prefix.cpp all_la_SOURCES = all.cpp echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/fixtures/loader/attribute/0000755000175000017500000000000011525707415022762 5ustar koukoucutter-testing-framework-1.1.7/test/fixtures/loader/attribute/stub-attribute-test.c0000644000175000017500000000136111277467302027064 0ustar koukou#include /* BUG entries */ const char *bug_bug_id (void); /* attribute */ void attributes_attribute (void); const char *description_description (void); /* tests */ void test_bug_id (void); void test_attribute (void); void test_description (void); const char *bug_bug_id (void) { return "1234567890"; } void test_bug_id (void) { } void attributes_attribute (void) { cut_set_attributes("bug", "1234", "priority", "5678", "bug", "9", NULL); } void test_attribute (void) { } const char * description_description (void) { return "This message is the description of test_description()"; } void test_description (void) { } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/test/fixtures/loader/attribute/Makefile.in0000644000175000017500000004451511525654635025045 0ustar koukou# 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@ 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@ subdir = test/fixtures/loader/attribute DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) stub_attribute_test_la_LIBADD = am_stub_attribute_test_la_OBJECTS = stub-attribute-test.lo stub_attribute_test_la_OBJECTS = $(am_stub_attribute_test_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(stub_attribute_test_la_SOURCES) DIST_SOURCES = $(stub_attribute_test_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ stub-attribute-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined stub_attribute_test_la_SOURCES = stub-attribute-test.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/fixtures/loader/attribute/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/fixtures/loader/attribute/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done stub-attribute-test.la: $(stub_attribute_test_la_OBJECTS) $(stub_attribute_test_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(stub_attribute_test_la_OBJECTS) $(stub_attribute_test_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stub-attribute-test.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am 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 installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am echo-tests: @echo $(noinst_LTLIBRARIES) # 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: cutter-testing-framework-1.1.7/test/fixtures/loader/attribute/Makefile.am0000644000175000017500000000062011277467302025016 0ustar koukouINCLUDES = \ $(CUTTER_CFLAGS) \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter noinst_LTLIBRARIES = \ stub-attribute-test.la AM_LDFLAGS = \ -module \ -rpath $(libdir) \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(GLIB_LIBS) stub_attribute_test_la_SOURCES = stub-attribute-test.c echo-tests: @echo $(noinst_LTLIBRARIES) cutter-testing-framework-1.1.7/test/Makefile.in0000644000175000017500000005555411525654634017727 0ustar koukou# 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@ 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@ subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = 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 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 ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ SUBDIRS = \ lib \ fixtures \ cutter \ gcutter \ cppcutter \ gdkcutter-pixbuf \ soupcutter EXTRA_DIST = run-test.sh TESTS = run-test.sh TESTS_ENVIRONMENT = \ NO_MAKE=yes \ CUTTER="$(CUTTER)" all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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) $(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) $(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) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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 check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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) 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-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-TESTS check-am clean clean-generic \ clean-libtool ctags ctags-recursive distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am echo-cutter: @echo $(CUTTER) # 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: cutter-testing-framework-1.1.7/test/Makefile.am0000644000175000017500000000036711271044476017701 0ustar koukouSUBDIRS = \ lib \ fixtures \ cutter \ gcutter \ cppcutter \ gdkcutter-pixbuf \ soupcutter EXTRA_DIST = run-test.sh TESTS = run-test.sh TESTS_ENVIRONMENT = \ NO_MAKE=yes \ CUTTER="$(CUTTER)" echo-cutter: @echo $(CUTTER) cutter-testing-framework-1.1.7/test/gcutter/0000755000175000017500000000000011525707417017317 5ustar koukoucutter-testing-framework-1.1.7/test/gcutter/test-gcut-value-equal.c0000644000175000017500000000373411205747030023616 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include #include void test_equal_int_string (void); void test_equal_long (void); void test_equal_uninitialized (void); void test_equal_null_string (void); static GValue value1, value2; void cut_setup (void) { memset(&value1, 0, sizeof(GValue)); memset(&value2, 0, sizeof(GValue)); } void cut_teardown (void) { if (G_VALUE_TYPE(&value1)) g_value_unset(&value1); if (G_VALUE_TYPE(&value2)) g_value_unset(&value2); } void test_equal_int_string (void) { g_value_init(&value1, G_TYPE_INT); g_value_set_int(&value1, 100); g_value_init(&value2, G_TYPE_STRING); g_value_set_string(&value2, "string"); cut_assert_true(gcut_value_equal(&value1, &value1)); cut_assert_true(gcut_value_equal(&value2, &value2)); cut_assert_false(gcut_value_equal(&value1, &value2)); } void test_equal_null_string (void) { g_value_init(&value1, G_TYPE_STRING); g_value_set_string(&value1, NULL); g_value_init(&value2, G_TYPE_STRING); g_value_set_string(&value2, NULL); cut_assert_true(gcut_value_equal(&value1, &value2)); } void test_equal_uninitialized (void) { cut_assert_true(gcut_value_equal(&value1, &value1)); cut_assert_true(gcut_value_equal(&value2, &value2)); g_value_init(&value1, G_TYPE_INT); g_value_set_int(&value1, 100); cut_assert_false(gcut_value_equal(&value1, &value2)); } void test_equal_long (void) { g_value_init(&value1, G_TYPE_LONG); g_value_set_long(&value1, 100); g_value_init(&value2, G_TYPE_LONG); g_value_set_long(&value2, 200); cut_assert_true(gcut_value_equal(&value1, &value1)); cut_assert_true(gcut_value_equal(&value2, &value2)); cut_assert_false(gcut_value_equal(&value1, &value2)); g_value_set_long(&value2, 100); cut_assert_true(gcut_value_equal(&value1, &value2)); cut_assert_true(gcut_value_equal(&value2, &value1)); } cutter-testing-framework-1.1.7/test/gcutter/test-gcut-inspect.c0000644000175000017500000001300211400051174023021 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include void test_direct (void); void test_int (void); void test_uint (void); void test_int64 (void); void test_uint64 (void); void test_size (void); void data_char (void); void test_char (gconstpointer data); void test_string (void); void test_type (void); void test_flags (void); void test_enum (void); void test_pointer (void); void data_boolean (void); void test_boolean (gconstpointer data); void test_double (void); static GString *string; void cut_setup (void) { string = g_string_new(NULL); } void cut_teardown (void) { if (string) g_string_free(string, TRUE); } void test_direct (void) { gcut_inspect_direct(string, GUINT_TO_POINTER(100), NULL); cut_assert_equal_string("100", string->str); } void test_int (void) { gint value = G_MININT; gcut_inspect_int(string, &value, NULL); cut_assert_equal_string("-2147483648", string->str); } void test_uint (void) { guint value = G_MAXUINT; gcut_inspect_uint(string, &value, NULL); cut_assert_equal_string("4294967295", string->str); } void test_int64 (void) { gint64 value = G_MININT64; gcut_inspect_int64(string, &value, NULL); cut_assert_equal_string("-9223372036854775808", string->str); } void test_uint64 (void) { guint64 value = G_MAXUINT64; gcut_inspect_uint64(string, &value, NULL); cut_assert_equal_string("18446744073709551615", string->str); } void test_size (void) { gsize value = 29; gcut_inspect_size(string, &value, NULL); cut_assert_equal_string("29", string->str); } void data_char (void) { #define ADD_DATUM(label, expected, character) \ gcut_add_datum(label, \ "expected", G_TYPE_STRING, expected, \ "value", G_TYPE_CHAR, character, \ NULL) ADD_DATUM("normal", "'X'", 'X'); ADD_DATUM("NULL", "'\\0'", '\0'); ADD_DATUM("escaped", "'\\n'", '\n'); ADD_DATUM("backslash", "'\\\\'", '\\'); ADD_DATUM("quote", "'\\''", '\''); #undef ADD_DATUM } void test_char (gconstpointer data) { gchar value; const gchar *expected; expected = gcut_data_get_string(data, "expected"); value = gcut_data_get_char(data, "value"); gcut_inspect_char(string, &value, NULL); cut_assert_equal_string(expected, string->str); } void test_string (void) { gcut_inspect_string(string, "XXX", NULL); cut_assert_equal_string("\"XXX\"", string->str); } void test_type (void) { GType type; type = GCUT_TYPE_DYNAMIC_DATA; gcut_inspect_type(string, &type, NULL); cut_assert_equal_string("", string->str); } void test_flags (void) { CuttestFlags flags; GType flags_type; flags = CUTTEST_FLAG_FIRST | CUTTEST_FLAG_SECOND; flags_type = CUTTEST_TYPE_FLAGS; gcut_inspect_flags(string, &flags, &flags_type); cut_assert_equal_string("#", string->str); } void test_enum (void) { CutTestResultStatus value; GType enum_type; value = CUT_TEST_RESULT_SUCCESS; enum_type = CUT_TYPE_TEST_RESULT_STATUS; gcut_inspect_enum(string, &value, &enum_type); cut_assert_equal_string(cut_take_printf("#", CUT_TEST_RESULT_SUCCESS), string->str); } void test_pointer (void) { gpointer value; value = string; gcut_inspect_pointer(string, value, NULL); cut_assert_equal_string(cut_take_printf("#<%p>", value), string->str); } void data_boolean (void) { #define ADD_DATUM(label, expected, boolean) \ gcut_add_datum(label, \ "expected", G_TYPE_STRING, expected, \ "value", G_TYPE_BOOLEAN, boolean, \ NULL) ADD_DATUM("true", "TRUE", TRUE); ADD_DATUM("false", "FALSE", FALSE); ADD_DATUM("not false", "TRUE", 100); #undef ADD_DATUM } void test_boolean (gconstpointer data) { gboolean value; const gchar *expected; expected = gcut_data_get_string(data, "expected"); value = gcut_data_get_boolean(data, "value"); gcut_inspect_boolean(string, &value, NULL); cut_assert_equal_string(expected, string->str); } void test_double (void) { gdouble value = 2.9; gcut_inspect_double(string, &value, NULL); cut_assert_equal_string("2.9", string->str); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-dynamic-data.c0000644000175000017500000002164711424022520023724 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include void test_has_field (void); void test_char (void); void test_string (void); void test_int (void); void test_uint (void); void test_int64 (void); void test_uint64 (void); void test_size (void); void test_data_type (void); void test_flags (void); void test_enum (void); void test_pointer (void); void test_boxed (void); void test_object (void); void test_boolean (void); void test_double (void); static GCutDynamicData *data; static GError *expected_error; static GError *actual_error; void cut_setup (void) { data = NULL; expected_error = NULL; actual_error = NULL; } void cut_teardown (void) { if (data) g_object_unref(data); if (expected_error) g_error_free(expected_error); if (actual_error) g_error_free(actual_error); } typedef void (*GetValueFunc) (GCutDynamicData *data, const gchar *field_name, GError **error); #define assert_nonexistent_field(get_value_func) \ cut_trace(assert_nonexistent_field_helper((GetValueFunc)get_value_func)) static void assert_nonexistent_field_helper (GetValueFunc get_value_func) { expected_error = g_error_new(GCUT_DYNAMIC_DATA_ERROR, GCUT_DYNAMIC_DATA_ERROR_NOT_EXIST, "requested field doesn't exist: <%s>", "nonexistent"); get_value_func(data, "nonexistent", &actual_error); gcut_assert_equal_error(expected_error, actual_error); } void test_has_field (void) { data = gcut_dynamic_data_new("char", G_TYPE_CHAR, 'X', NULL); cut_assert_true(gcut_dynamic_data_has_field(data, "char")); cut_assert_false(gcut_dynamic_data_has_field(data, "nonexistent")); } void test_char (void) { GError *error = NULL; gchar actual_value; data = gcut_dynamic_data_new("char", G_TYPE_CHAR, 'X', NULL); actual_value = gcut_dynamic_data_get_char(data, "char", &error); gcut_assert_error(error); cut_assert_equal_char('X', actual_value); assert_nonexistent_field(gcut_dynamic_data_get_char); } void test_string (void) { GError *error = NULL; const gchar *actual_value; data = gcut_dynamic_data_new("string", G_TYPE_STRING, "value", NULL); actual_value = gcut_dynamic_data_get_string(data, "string", &error); gcut_assert_error(error); cut_assert_equal_string("value", actual_value); assert_nonexistent_field(gcut_dynamic_data_get_string); } void test_int (void) { GError *error = NULL; gint actual_value; data = gcut_dynamic_data_new("int", G_TYPE_INT, -29, NULL); actual_value = gcut_dynamic_data_get_int(data, "int", &error); gcut_assert_error(error); cut_assert_equal_int(-29, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_int); } void test_uint (void) { GError *error = NULL; guint actual_value; data = gcut_dynamic_data_new("uint", G_TYPE_UINT, 29, NULL); actual_value = gcut_dynamic_data_get_uint(data, "uint", &error); gcut_assert_error(error); cut_assert_equal_uint(29, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_uint); } void test_int64 (void) { GError *error = NULL; gint64 actual_value; data = gcut_dynamic_data_new("int64", G_TYPE_INT64, G_GINT64_CONSTANT(-29), NULL); actual_value = gcut_dynamic_data_get_int64(data, "int64", &error); gcut_assert_error(error); gcut_assert_equal_int64(-29, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_int64); } void test_uint64 (void) { GError *error = NULL; guint64 actual_value; data = gcut_dynamic_data_new("uint64", G_TYPE_UINT64, G_GUINT64_CONSTANT(29), NULL); actual_value = gcut_dynamic_data_get_uint64(data, "uint64", &error); gcut_assert_error(error); gcut_assert_equal_uint64(29, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_uint64); } void test_size (void) { GError *error = NULL; gsize actual_value; data = gcut_dynamic_data_new("size", GCUT_TYPE_SIZE, 29, NULL); actual_value = gcut_dynamic_data_get_size(data, "size", &error); gcut_assert_error(error); cut_assert_equal_size(29, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_size); } void test_data_type (void) { GError *error = NULL; GType actual_value; data = gcut_dynamic_data_new("type", G_TYPE_GTYPE, GCUT_TYPE_DYNAMIC_DATA, NULL); actual_value = gcut_dynamic_data_get_data_type(data, "type", &error); gcut_assert_error(error); gcut_assert_equal_type(GCUT_TYPE_DYNAMIC_DATA, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_data_type); } void test_flags (void) { GError *error = NULL; CuttestFlags value, actual_value; value = CUTTEST_FLAG_FIRST | CUTTEST_FLAG_THIRD; data = gcut_dynamic_data_new("flags", CUTTEST_TYPE_FLAGS, value, NULL); actual_value = gcut_dynamic_data_get_flags(data, "flags", &error); gcut_assert_error(error); gcut_assert_equal_flags(CUTTEST_TYPE_FLAGS, value, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_flags); } void test_enum (void) { GError *error = NULL; CutTestResultStatus value, actual_value; value = CUT_TEST_RESULT_SUCCESS; data = gcut_dynamic_data_new("enum", CUT_TYPE_TEST_RESULT_STATUS, value, NULL); actual_value = gcut_dynamic_data_get_enum(data, "enum", &error); gcut_assert_error(error); gcut_assert_equal_enum(CUT_TYPE_TEST_RESULT_STATUS, value, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_enum); } void test_pointer (void) { GError *error = NULL; gpointer value; gconstpointer actual_value; value = malloc(10); data = gcut_dynamic_data_new("pointer", G_TYPE_POINTER, value, g_free, NULL); actual_value = gcut_dynamic_data_get_pointer(data, "pointer", &error); gcut_assert_error(error); cut_assert_equal_pointer(value, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_pointer); } void test_boxed (void) { GError *error = NULL; GError *value; const GError *actual_value; value = g_error_new(G_FILE_ERROR, G_FILE_ERROR_NOENT, "not found"); data = gcut_dynamic_data_new("error", GCUT_TYPE_ERROR, value, NULL); actual_value = gcut_dynamic_data_get_boxed(data, "error", &error); gcut_assert_error(error); gcut_assert_equal_error(value, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_boxed); } void test_object (void) { GError *error = NULL; GCutEgg *value; const GError *actual_value; value = gcut_egg_new("echo", "Hello", NULL); data = gcut_dynamic_data_new("object", GCUT_TYPE_EGG, value, NULL); actual_value = gcut_dynamic_data_get_object(data, "object", &error); gcut_assert_error(error); gcut_assert_equal_object(value, actual_value); assert_nonexistent_field(gcut_dynamic_data_get_object); } void test_boolean (void) { GError *error = NULL; gboolean actual_value; data = gcut_dynamic_data_new("boolean", G_TYPE_BOOLEAN, TRUE, NULL); actual_value = gcut_dynamic_data_get_boolean(data, "boolean", &error); gcut_assert_error(error); cut_assert_true(actual_value); assert_nonexistent_field(gcut_dynamic_data_get_boolean); } void test_double (void) { GError *error = NULL; gdouble actual_value; data = gcut_dynamic_data_new("double", G_TYPE_DOUBLE, 2.9, NULL); actual_value = gcut_dynamic_data_get_double(data, "double", &error); gcut_assert_error(error); cut_assert_equal_double(2.9, actual_value, 0.1); assert_nonexistent_field(gcut_dynamic_data_get_double); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-list.c0000644000175000017500000000733611424022520022343 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include void test_equal_string_including_null(void); void test_inspect_string_including_null(void); void test_inspect_enum(void); void test_inspect_flags(void); static gchar *inspected; void cut_setup (void) { inspected = NULL; } void cut_teardown (void) { if (inspected) g_free(inspected); } void test_equal_string_including_null (void) { GList *list1 = NULL, *list2 = NULL; list1 = g_list_append(list1, g_strdup("a")); list1 = g_list_append(list1, NULL); list1 = g_list_append(list1, g_strdup("c")); gcut_take_list(list1, g_free); cut_assert_true(gcut_list_equal_string(list1, list1)); list2 = g_list_append(list2, NULL); list2 = g_list_append(list2, g_strdup("b")); list2 = g_list_append(list2, g_strdup("c")); gcut_take_list(list2, g_free); cut_assert_false(gcut_list_equal_string(list1, list2)); } void test_inspect_string_including_null (void) { GList *list = NULL; list = g_list_append(list, g_strdup("a")); list = g_list_append(list, NULL); list = g_list_append(list, g_strdup("c")); gcut_take_list(list, g_free); inspected = gcut_list_inspect_string(list); cut_assert_equal_string("(\"a\", NULL, \"c\")", inspected); } void test_inspect_enum (void) { const GList *list; list = gcut_take_new_list_int(2, CUT_TEST_RESULT_PENDING, CUT_TEST_RESULT_NOTIFICATION); inspected = gcut_list_inspect_enum(CUT_TYPE_TEST_RESULT_STATUS, list); cut_assert_equal_string("(#, " "#)", inspected); } void test_inspect_flags (void) { const GList *list; static GType type = 0; if (type == 0) { static const GFlagsValue values[] = { {1 << 0, "CUTTEST_LIST_STUB_FIRST", "first"}, {1 << 1, "CUTTEST_LIST_STUB_SECOND", "second"}, {1 << 2, "CUTTEST_LIST_STUB_THIRD", "third"}, {0, NULL, NULL} }; type = g_flags_register_static("CuttestListStubFlags", values); } list = gcut_take_new_list_uint(2, 1 << 0 | 1 << 1, 1 << 2); inspected = gcut_list_inspect_flags(type, list); cut_assert_equal_string("(#, " "#)", inspected); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-key-file.c0000644000175000017500000002216311205747030023077 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include #include #include #include void data_get_enum(void); void test_get_enum(gconstpointer data); void data_get_flags(void); void test_get_flags(gconstpointer data); static GKeyFile *key_file; static GError *actual_error; static gchar *current_locale; void cut_setup (void) { key_file = g_key_file_new(); actual_error = NULL; current_locale = g_strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, "C"); } void cut_teardown (void) { if (current_locale) { setlocale(LC_ALL, current_locale); g_free(current_locale); } else { setlocale(LC_ALL, ""); } if (key_file) g_key_file_free(key_file); if (actual_error) g_error_free(actual_error); } typedef struct _EnumTestData { gchar *data; gchar *group_name; gchar *key_name; GType type; gint expected_enum_value; guint expected_flags_value; GError *expected_error; } EnumTestData; static EnumTestData * enum_test_data_new (const gchar *data, const gchar *group_name, const gchar *key_name, GType type, gint expected_enum_value, guint expected_flags_value, GError *expected_error) { EnumTestData *test_data; test_data = g_new(EnumTestData, 1); test_data->data = g_strdup(data); test_data->group_name = g_strdup(group_name); test_data->key_name = g_strdup(key_name); test_data->type = type; test_data->expected_enum_value = expected_enum_value; test_data->expected_flags_value = expected_flags_value; test_data->expected_error = expected_error; return test_data; } static EnumTestData * get_enum_test_data_new (const gchar *data, const gchar *group_name, const gchar *key_name, GType type, gint expected_enum_value, GError *expected_error) { return enum_test_data_new(data, group_name, key_name, type, expected_enum_value, 0, expected_error); } static EnumTestData * get_flags_test_data_new (const gchar *data, const gchar *group_name, const gchar *key_name, GType type, guint expected_flags_value, GError *expected_error) { return enum_test_data_new(data, group_name, key_name, type, 0, expected_flags_value, expected_error); } static void enum_test_data_free (EnumTestData *test_data) { if (test_data->data) g_free(test_data->data); if (test_data->group_name) g_free(test_data->group_name); if (test_data->key_name) g_free(test_data->key_name); if (test_data->expected_error) g_error_free(test_data->expected_error); g_free(test_data); } void data_get_enum (void) { cut_add_data("exist", get_enum_test_data_new( "[group]\n" "status=pending\n", "group", "status", CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_PENDING, NULL), enum_test_data_free, "nonexistent key", get_enum_test_data_new( "[group]\n" "status=pending\n", "group", "unknown-key", CUT_TYPE_TEST_RESULT_STATUS, 0, g_error_new(G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND, "Key file does not have key 'unknown-key'")), enum_test_data_free, "invalid enum value", get_enum_test_data_new( "[group]\n" "status=unknown\n", "group", "status", CUT_TYPE_TEST_RESULT_STATUS, 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "unknown enum value: " "(CutTestResultStatus)")), enum_test_data_free, "invalid enum type", get_enum_test_data_new( "[group]\n" "status=pending\n", "group", "status", GCUT_TYPE_EGG, 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "invalid enum type: " "GCutEgg(%" G_GSIZE_FORMAT ")", GCUT_TYPE_EGG)), enum_test_data_free); } void test_get_enum (gconstpointer data) { const EnumTestData *test_data = data; GError *error = NULL; gint enum_value; g_key_file_load_from_data(key_file, test_data->data, strlen(test_data->data), 0, &error); gcut_assert_error(error); enum_value = gcut_key_file_get_enum(key_file, test_data->group_name, test_data->key_name, test_data->type, &error); if (test_data->expected_error) { actual_error = error; gcut_assert_equal_error(test_data->expected_error, actual_error); } else { gcut_assert_error(error); } gcut_assert_equal_enum(test_data->type, test_data->expected_enum_value, enum_value); } void data_get_flags (void) { cut_add_data("exist", get_flags_test_data_new( "[group]\n" "flags=first|third\n", "group", "flags", CUTTEST_TYPE_FLAGS, CUTTEST_FLAG_FIRST | CUTTEST_FLAG_THIRD, NULL), enum_test_data_free, "nonexistent key", get_flags_test_data_new( "[group]\n" "flags=second\n", "group", "unknown-key", CUTTEST_TYPE_FLAGS, 0, g_error_new(G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND, "Key file does not have key 'unknown-key'")), enum_test_data_free, "invalid flags value", get_flags_test_data_new( "[group]\n" "flags=First|unknown1|CUTTEST_FLAG_THIRD|unknown2\n", "group", "flags", CUTTEST_TYPE_FLAGS, CUTTEST_FLAG_FIRST | CUTTEST_FLAG_THIRD, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "unknown flags: " "(CuttestFlags): " ": " "#")), enum_test_data_free, "invalid flags type", get_flags_test_data_new( "[group]\n" "flags=second\n", "group", "flags", GCUT_TYPE_EGG, 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "invalid flags type: " "GCutEgg(%" G_GSIZE_FORMAT ")", GCUT_TYPE_EGG)), enum_test_data_free); } void test_get_flags (gconstpointer data) { const EnumTestData *test_data = data; GError *error = NULL; guint flags_value; g_key_file_load_from_data(key_file, test_data->data, strlen(test_data->data), 0, &error); gcut_assert_error(error); flags_value = gcut_key_file_get_flags(key_file, test_data->group_name, test_data->key_name, test_data->type, &error); if (test_data->expected_error) { actual_error = error; gcut_assert_equal_error(test_data->expected_error, actual_error); } else { gcut_assert_error(error); } gcut_assert_equal_flags(test_data->type, test_data->expected_flags_value, flags_value); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-egg.c0000644000175000017500000001615411205747030022137 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #ifdef HAVE_SYS_WAIT_H # include #else # define WEXITSTATUS(status) (status) #endif #include #include void test_hatch (void); void test_io (void); void test_flags (void); void test_env (void); void test_kill (void); void test_wait_before_hatch (void); void test_wait_after_reaped (void); void test_wait_timeout (void); static GCutEgg *egg; static GError *expected_error; static GError *actual_error; static GString *output_string; static GString *error_string; static gint exit_status; static gboolean reaped; static gchar *current_locale; void cut_setup (void) { egg = NULL; expected_error = NULL; actual_error = NULL; output_string = g_string_new(NULL); error_string = g_string_new(NULL); exit_status = 0; reaped = FALSE; current_locale = g_strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, "C"); } void cut_teardown (void) { if (current_locale) { setlocale(LC_ALL, current_locale); g_free(current_locale); } else { setlocale(LC_ALL, ""); } if (egg) g_object_unref(egg); if (expected_error) g_error_free(expected_error); if (actual_error) g_error_free(actual_error); if (output_string) g_string_free(output_string, TRUE); if (error_string) g_string_free(error_string, TRUE); } static void cb_output_received (GCutEgg *egg, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(output_string, chunk, size); } static void cb_error_received (GCutEgg *egg, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(error_string, chunk, size); } static void cb_reaped (GCutEgg *egg, gint status, gpointer user_data) { exit_status = status; reaped = TRUE; } static void cb_error (GCutEgg *egg, GError *error, gpointer user_data) { actual_error = g_error_copy(error); } static void setup_egg (GCutEgg *egg) { #define CONNECT(name) \ g_signal_connect(egg, #name, G_CALLBACK(cb_ ## name), NULL) CONNECT(output_received); CONNECT(error_received); CONNECT(reaped); CONNECT(error); #undef CONNECT } static void wait_reaped_helper (void) { GError *error = NULL; gint returned_exit_status; returned_exit_status = gcut_egg_wait(egg, 1000, &error); gcut_assert_error(error); cut_assert_equal_int(returned_exit_status, exit_status); cut_assert_equal_int(EXIT_SUCCESS, WEXITSTATUS(exit_status)); } #define wait_reaped() \ cut_trace(wait_reaped_helper()) void test_hatch (void) { GError *error = NULL; egg = gcut_egg_new("echo", "XXX", NULL); setup_egg(egg); gcut_assert_equal_pid(0, gcut_egg_get_pid(egg)); gcut_egg_hatch(egg, &error); gcut_assert_error(error); gcut_assert_not_equal_pid(0, gcut_egg_get_pid(egg)); wait_reaped(); cut_assert_equal_string("XXX\n", output_string->str); cut_assert_equal_string("", error_string->str); } void test_io (void) { GError *error = NULL; const gchar buffer[] = "XXX\n"; const gchar command[] = #ifdef G_OS_WIN32 "type" #else "cat" #endif ; egg = gcut_egg_new(command, NULL); setup_egg(egg); gcut_egg_hatch(egg, &error); gcut_assert_error(error); gcut_egg_write(egg, buffer, strlen(buffer), &error); gcut_assert_error(error); g_io_channel_shutdown(gcut_egg_get_input(egg), TRUE, &error); gcut_assert_error(error); wait_reaped(); cut_assert_equal_string("XXX\n", output_string->str); cut_assert_equal_string("", error_string->str); } void test_flags (void) { GError *error = NULL; const gchar command[] = "echo"; egg = gcut_egg_new(command, "XXX", NULL); setup_egg(egg); gcut_egg_set_flags(egg, 0); cut_assert_false(gcut_egg_get_flags(egg) & G_SPAWN_SEARCH_PATH); cut_assert_false(gcut_egg_hatch(egg, &actual_error)); expected_error = g_error_new(G_SPAWN_ERROR, G_SPAWN_ERROR_NOENT, "Failed to execute child process \"%s\" (%s)", command, g_strerror(ENOENT)); gcut_assert_equal_error(expected_error, actual_error); gcut_egg_set_flags(egg, G_SPAWN_SEARCH_PATH); gcut_egg_hatch(egg, &error); gcut_assert_error(error); wait_reaped(); cut_assert_equal_string("XXX\n", output_string->str); cut_assert_equal_string("", error_string->str); } void test_env (void) { GError *error = NULL; const gchar command[] = "env"; gchar *env[] = { "name1=value1", "name2=value2", NULL }; egg = gcut_egg_new(command, NULL); setup_egg(egg); gcut_egg_set_env(egg, "name1", "value1", "no-value", NULL, "name2", "value2", NULL); cut_assert_equal_string_array_with_free(env, gcut_egg_get_env(egg)); gcut_egg_set_flags(egg, G_SPAWN_SEARCH_PATH); gcut_egg_hatch(egg, &error); gcut_assert_error(error); wait_reaped(); cut_assert_equal_string("name1=value1\n" "name2=value2\n", output_string->str); cut_assert_equal_string("", error_string->str); } void test_kill (void) { GError *error = NULL; const gchar command[] = "cat"; #ifdef G_OS_WIN32 #define SIGKILL 9 #endif egg = gcut_egg_new(command, NULL); setup_egg(egg); gcut_egg_set_flags(egg, G_SPAWN_SEARCH_PATH); gcut_egg_hatch(egg, &error); gcut_assert_error(error); gcut_egg_kill(egg, SIGKILL); wait_reaped(); } void test_wait_before_hatch (void) { egg = gcut_egg_new("echo", "XXX", NULL); cut_assert_equal_int(-1, gcut_egg_wait(egg, 0, &actual_error)); expected_error = g_error_new(GCUT_EGG_ERROR, GCUT_EGG_ERROR_NOT_RUNNING, "not running: "); gcut_assert_equal_error(expected_error, actual_error); } void test_wait_after_reaped (void) { GError *error = NULL; egg = gcut_egg_new("echo", "XXX", NULL); gcut_egg_hatch(egg, &error); gcut_assert_error(error); wait_reaped(); cut_assert_equal_int(-1, gcut_egg_wait(egg, 0, &actual_error)); expected_error = g_error_new(GCUT_EGG_ERROR, GCUT_EGG_ERROR_NOT_RUNNING, "not running: "); gcut_assert_equal_error(expected_error, actual_error); } void test_wait_timeout (void) { GError *error = NULL; egg = gcut_egg_new("sleep", "1", NULL); gcut_egg_hatch(egg, &error); gcut_assert_error(error); cut_assert_equal_int(-1, gcut_egg_wait(egg, 0, &actual_error)); expected_error = g_error_new(GCUT_EGG_ERROR, GCUT_EGG_ERROR_TIMEOUT, "timeout while waiting reaped: "); gcut_assert_equal_error(expected_error, actual_error); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-process.c0000644000175000017500000002605311424022520023043 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #ifdef HAVE_SYS_WAIT_H # include #else # define WEXITSTATUS(status) (status) #endif #include #include void test_run (void); void test_io (void); void test_flags (void); void test_env (void); void test_kill (void); void test_command_line (void); void test_wait_before_run (void); void test_wait_after_reaped (void); void test_wait_timeout (void); void test_output_string (void); void test_error_string (void); #ifdef CUT_SUPPORT_GIO void test_output_stream (void); void test_error_stream (void); #endif static GCutProcess *process; static GError *expected_error; static GError *actual_error; static GString *output_string; static GString *error_string; static gint exit_status; static gboolean reaped; static gchar *current_locale; static const gchar *cuttest_echo_path; void cut_setup (void) { process = NULL; expected_error = NULL; actual_error = NULL; output_string = g_string_new(NULL); error_string = g_string_new(NULL); exit_status = 0; reaped = FALSE; current_locale = g_strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, "C"); cuttest_echo_path = cut_build_path(cut_get_test_directory(), "..", "lib", "cuttest-echo", "cuttest-echo", NULL); } void cut_teardown (void) { if (current_locale) { setlocale(LC_ALL, current_locale); g_free(current_locale); } else { setlocale(LC_ALL, ""); } if (process) g_object_unref(process); if (expected_error) g_error_free(expected_error); if (actual_error) g_error_free(actual_error); if (output_string) g_string_free(output_string, TRUE); if (error_string) g_string_free(error_string, TRUE); } static void cb_output_received (GCutProcess *process, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(output_string, chunk, size); } static void cb_error_received (GCutProcess *process, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(error_string, chunk, size); } static void cb_reaped (GCutProcess *process, gint status, gpointer user_data) { exit_status = status; reaped = TRUE; } static void cb_error (GCutProcess *process, GError *error, gpointer user_data) { actual_error = g_error_copy(error); } static void setup_process (GCutProcess *process) { #define CONNECT(name) \ g_signal_connect(process, #name, G_CALLBACK(cb_ ## name), NULL) CONNECT(output_received); CONNECT(error_received); CONNECT(reaped); CONNECT(error); #undef CONNECT } static void wait_reaped_helper (gint expected_signal) { GError *error = NULL; gint returned_exit_status; returned_exit_status = gcut_process_wait(process, 1000, &error); gcut_assert_error(error); cut_assert_equal_int(exit_status, returned_exit_status); if (expected_signal) { cut_assert_true(WIFSIGNALED(exit_status)); cut_assert_equal_int(expected_signal, WTERMSIG(exit_status)); } else { cut_assert_true(WIFEXITED(exit_status)); cut_assert_equal_int(EXIT_SUCCESS, WEXITSTATUS(exit_status)); } } #define wait_exited() \ cut_trace(wait_reaped_helper(0)) #define wait_termed_by_signal(signal) \ cut_trace(wait_reaped_helper(signal)) void test_run (void) { GError *error = NULL; process = gcut_process_new(cuttest_echo_path, "XXX", NULL); setup_process(process); gcut_assert_equal_pid(0, gcut_process_get_pid(process)); gcut_process_run(process, &error); gcut_assert_error(error); gcut_assert_not_equal_pid(0, gcut_process_get_pid(process)); wait_exited(); cut_assert_equal_string("XXX\n", output_string->str); cut_assert_equal_string("", error_string->str); } void test_io (void) { GError *error = NULL; const gchar buffer[] = "XXX\n"; const gchar command[] = #ifdef G_OS_WIN32 "type" #else "cat" #endif ; process = gcut_process_new(command, NULL); setup_process(process); gcut_process_run(process, &error); gcut_assert_error(error); gcut_process_write(process, buffer, strlen(buffer), &error); gcut_assert_error(error); g_io_channel_shutdown(gcut_process_get_input_channel(process), TRUE, &error); gcut_assert_error(error); wait_exited(); cut_assert_equal_string("XXX\n", output_string->str); cut_assert_equal_string("", error_string->str); } void test_flags (void) { GError *error = NULL; process = gcut_process_new("echo", "XXX", NULL); setup_process(process); gcut_process_set_flags(process, 0); cut_assert_false(gcut_process_get_flags(process) & G_SPAWN_SEARCH_PATH); cut_assert_false(gcut_process_run(process, &actual_error)); expected_error = g_error_new(G_SPAWN_ERROR, G_SPAWN_ERROR_NOENT, "Failed to execute child process \"%s\" (%s)", "echo", g_strerror(ENOENT)); gcut_assert_equal_error(expected_error, actual_error); gcut_process_set_flags(process, G_SPAWN_SEARCH_PATH); gcut_process_run(process, &error); gcut_assert_error(error); wait_exited(); cut_assert_equal_string("XXX\n", output_string->str); cut_assert_equal_string("", error_string->str); } void test_env (void) { GError *error = NULL; const gchar command[] = "env"; gchar *env[] = { "name1=value1", "name2=value2", NULL }; process = gcut_process_new(command, NULL); setup_process(process); gcut_process_set_env(process, "name1", "value1", "no-value", NULL, "name2", "value2", NULL); cut_assert_equal_string_array_with_free(env, gcut_process_get_env(process)); gcut_process_set_flags(process, G_SPAWN_SEARCH_PATH); gcut_process_run(process, &error); gcut_assert_error(error); wait_exited(); cut_assert_equal_string("name1=value1\n" "name2=value2\n", output_string->str); cut_assert_equal_string("", error_string->str); } void test_kill (void) { GError *error = NULL; const gchar command[] = "cat"; #ifdef G_OS_WIN32 #define SIGKILL 9 #endif process = gcut_process_new(command, NULL); setup_process(process); gcut_process_set_flags(process, G_SPAWN_SEARCH_PATH); gcut_process_run(process, &error); gcut_assert_error(error); gcut_process_kill(process, SIGKILL, &error); gcut_assert_error(error); wait_termed_by_signal(SIGKILL); } void test_command_line (void) { GError *error = NULL; const gchar *command_line; GString expected = { "command_line_arg\n", 17, 0 }; GString *actual; command_line = cut_take_printf("%s command_line_arg", cuttest_echo_path); process = gcut_process_new_command_line(command_line); gcut_process_run(process, &error); gcut_assert_error(error); wait_exited(); actual = gcut_process_get_output_string(process); gcut_assert_equal_string(&expected, actual); } void test_wait_before_run (void) { process = gcut_process_new(cuttest_echo_path, "XXX", NULL); cut_assert_equal_int(-1, gcut_process_wait(process, 0, &actual_error)); expected_error = g_error_new(GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_NOT_RUNNING, "not running: <%s XXX>", cuttest_echo_path); gcut_assert_equal_error(expected_error, actual_error); } void test_wait_after_reaped (void) { GError *error = NULL; process = gcut_process_new(cuttest_echo_path, "XXX", NULL); gcut_process_run(process, &error); gcut_assert_error(error); wait_exited(); cut_assert_equal_int(-1, gcut_process_wait(process, 0, &actual_error)); expected_error = g_error_new(GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_NOT_RUNNING, "not running: <%s XXX>", cuttest_echo_path); gcut_assert_equal_error(expected_error, actual_error); } void test_wait_timeout (void) { GError *error = NULL; process = gcut_process_new("sleep", "1", NULL); gcut_process_run(process, &error); gcut_assert_error(error); cut_assert_equal_int(-1, gcut_process_wait(process, 0, &actual_error)); expected_error = g_error_new(GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_TIMEOUT, "timeout while waiting reaped: "); gcut_assert_equal_error(expected_error, actual_error); } void test_output_string (void) { GError *error = NULL; GString expected = { "XXX\n", 4, 0 }; GString *actual; process = gcut_process_new(cuttest_echo_path, "XXX", NULL); gcut_process_run(process, &error); gcut_assert_error(error); wait_exited(); actual = gcut_process_get_output_string(process); gcut_assert_equal_string(&expected, actual); } void test_error_string (void) { GError *error = NULL; GString expected = { "EEE\n", 4, 0 }; GString *actual; process = gcut_process_new(cuttest_echo_path, "-e", "EEE", NULL); gcut_process_run(process, &error); gcut_assert_error(error); wait_exited(); actual = gcut_process_get_error_string(process); gcut_assert_equal_string(&expected, actual); } #ifdef CUT_SUPPORT_GIO void test_output_stream (void) { GError *error = NULL; GInputStream *stream; char buffer[4096]; gsize bytes_read; process = gcut_process_new(cuttest_echo_path, "XXX", NULL); stream = gcut_process_get_output_stream(process); cut_assert_not_null(stream); gcut_process_run(process, &error); gcut_assert_error(error); wait_exited(); g_input_stream_read_all(stream, buffer, sizeof(buffer), &bytes_read, NULL, &error); gcut_assert_error(error); cut_assert_equal_memory("XXX\n", 4, buffer, bytes_read); } void test_error_stream (void) { GError *error = NULL; GInputStream *stream; char buffer[4096]; gsize bytes_read; process = gcut_process_new(cuttest_echo_path, "-e", "XXX", NULL); stream = gcut_process_get_error_stream(process); cut_assert_not_null(stream); gcut_process_run(process, &error); gcut_assert_error(error); wait_exited(); g_input_stream_read_all(stream, buffer, sizeof(buffer), &bytes_read, NULL, &error); gcut_assert_error(error); cut_assert_equal_memory("XXX\n", 4, buffer, bytes_read); } #endif /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-assertions.c0000644000175000017500000010616711400051174023565 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include #include #include #include #include #include #include "../lib/cuttest-assertions.h" void test_equal_type(void); void test_equal_value(void); void test_equal_list(void); void test_equal_list_int(void); void test_equal_list_uint(void); void test_equal_list_string(void); void test_equal_list_string_both_null(void); void test_equal_list_string_other_null(void); void test_equal_list_enum(void); void test_equal_list_flags(void); void test_equal_list_object(void); void test_equal_hash_table(void); void test_equal_hash_table_string_string(void); void test_error(void); void test_equal_error(void); void test_equal_enum(void); void test_equal_flags(void); void test_equal_object(void); void test_equal_object_null(void); void test_equal_object_custom(void); void test_equal_pid(void); void test_not_equal_pid(void); void test_equal_int64(void); void test_not_equal_int64(void); void test_equal_uint64(void); void test_not_equal_uint64(void); static CutTest *test; static CutRunContext *run_context; static CutTestContext *test_context; static CutTestResult *test_result; static GValue *value1, *value2; static GList *list1, *list2; static gboolean need_to_free_list_contents; static GDestroyNotify list_element_free_function; static GHashTable *hash1, *hash2; static GObject *object1, *object2, *object3; static GError *error; static GError *error1, *error2; static gboolean need_to_free_error; static GType flags_type = 0; static gint fail_line; #define MARK_FAIL(assertion) do \ { \ fail_line = __LINE__; \ assertion; \ } while (0) #define FAIL_LOCATION (cut_take_printf("%s:%d", __FILE__, fail_line)) static gboolean run (void) { gboolean success; run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); test_context = cut_test_context_new(run_context, NULL, NULL, NULL, test); cut_test_context_current_push(test_context); success = cut_test_runner_run_test(CUT_TEST_RUNNER(run_context), test, test_context); cut_test_context_current_pop(); return success; } void cut_setup (void) { test = NULL; run_context = NULL; test_context = NULL; test_result = NULL; value1 = g_new0(GValue, 1); value2 = g_new0(GValue, 1); list1 = NULL; list2 = NULL; need_to_free_list_contents = FALSE; list_element_free_function = g_free; hash1 = NULL; hash2 = NULL; object1 = NULL; object2 = NULL; object3 = NULL; error = NULL; need_to_free_error = FALSE; error1 = NULL; error2 = NULL; flags_type = 0; fail_line = 0; } void cut_teardown (void) { if (test) g_object_unref(test); if (run_context) g_object_unref(run_context); if (test_context) g_object_unref(test_context); if (test_result) g_object_unref(test_result); if (G_IS_VALUE(value1)) g_value_unset(value1); if (G_IS_VALUE(value2)) g_value_unset(value2); g_free(value1); g_free(value2); if (need_to_free_list_contents) { g_list_foreach(list1, (GFunc)list_element_free_function, NULL); g_list_foreach(list2, (GFunc)list_element_free_function, NULL); } g_list_free(list1); g_list_free(list2); if (hash1) g_hash_table_unref(hash1); if (hash2) g_hash_table_unref(hash2); if (object1) g_object_unref(object1); if (object2) g_object_unref(object2); if (object3) g_object_unref(object3); if (error && need_to_free_error) g_error_free(error); if (error1) g_error_free(error1); if (error2) g_error_free(error2); } static void stub_equal_type (void) { gcut_assert_equal_type(G_TYPE_INT, G_TYPE_INT); MARK_FAIL(gcut_assert_equal_type(G_TYPE_INT, G_TYPE_STRING)); } void test_equal_type (void) { test = cut_test_new("equal_type test", stub_equal_type); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_type test", NULL, "", "gint", "gchararray", FAIL_LOCATION, "stub_equal_type", NULL); } static void stub_equal_value (void) { g_value_init(value1, G_TYPE_INT); g_value_set_int(value1, 10); g_value_init(value2, G_TYPE_STRING); g_value_set_string(value2, "String"); gcut_assert_equal_value(value1, value1); gcut_assert_equal_value(value2, value2); MARK_FAIL(gcut_assert_equal_value(value1, value2)); } void test_equal_value (void) { test = cut_test_new("equal_value test", stub_equal_value); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_value test", NULL, "", "10 (gint)", "\"String\" (gchararray)", FAIL_LOCATION, "stub_equal_value", NULL); } static gboolean stub_equal_list_equal_func (gconstpointer a, gconstpointer b) { return GPOINTER_TO_INT(a) == GPOINTER_TO_INT(b); } static void stub_equal_list_inspect_func (GString *string, gconstpointer data, gpointer user_data) { gchar *prefix = user_data; g_string_append_printf(string, "%s: <%d>", prefix, GPOINTER_TO_INT(data)); } static void stub_equal_list (void) { list1 = g_list_append(list1, GINT_TO_POINTER(100)); list1 = g_list_append(list1, GINT_TO_POINTER(-200)); list2 = g_list_append(list2, GINT_TO_POINTER(-1000)); list2 = g_list_append(list2, GINT_TO_POINTER(2000)); gcut_assert_equal_list(list1, list1, stub_equal_list_equal_func, stub_equal_list_inspect_func, "AAA"); gcut_assert_equal_list(list2, list2, stub_equal_list_equal_func, stub_equal_list_inspect_func, "BBB"); MARK_FAIL(gcut_assert_equal_list(list1, list2, stub_equal_list_equal_func, stub_equal_list_inspect_func, "CCC")); } void test_equal_list (void) { test = cut_test_new("equal_list test", stub_equal_list); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result( run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_list test", NULL, "", "(CCC: <100>, CCC: <-200>)", "(CCC: <-1000>, CCC: <2000>)", FAIL_LOCATION, "stub_equal_list", NULL); } static void stub_equal_list_int (void) { list1 = g_list_append(list1, GINT_TO_POINTER(100)); list1 = g_list_append(list1, GINT_TO_POINTER(-200)); list2 = g_list_append(list2, GINT_TO_POINTER(-1000)); list2 = g_list_append(list2, GINT_TO_POINTER(2000)); gcut_assert_equal_list_int(list1, list1); gcut_assert_equal_list_int(list2, list2); MARK_FAIL(gcut_assert_equal_list_int(list1, list2)); } void test_equal_list_int (void) { test = cut_test_new("equal_list_int test", stub_equal_list_int); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_list_int test", NULL, "", "(100, -200)", "(-1000, 2000)", FAIL_LOCATION, "stub_equal_list_int", NULL); } static void stub_equal_list_uint (void) { list1 = g_list_append(list1, GUINT_TO_POINTER(100)); list1 = g_list_append(list1, GUINT_TO_POINTER(200)); list2 = g_list_append(list2, GUINT_TO_POINTER(1000)); list2 = g_list_append(list2, GUINT_TO_POINTER(2000)); gcut_assert_equal_list_uint(list1, list1); gcut_assert_equal_list_uint(list2, list2); MARK_FAIL(gcut_assert_equal_list_uint(list1, list2)); } void test_equal_list_uint (void) { test = cut_test_new("equal_list_uint test", stub_equal_list_uint); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_list_uint test", NULL, "", "(100, 200)", "(1000, 2000)", FAIL_LOCATION, "stub_equal_list_uint", NULL); } static void stub_equal_list_string (void) { need_to_free_list_contents = TRUE; list1 = g_list_append(list1, g_strdup("abc")); list1 = g_list_append(list1, g_strdup("def")); list2 = g_list_append(list2, g_strdup("zyx")); list2 = g_list_append(list2, g_strdup("wvu")); gcut_assert_equal_list_string(list1, list1); gcut_assert_equal_list_string(list2, list2); MARK_FAIL(gcut_assert_equal_list_string(list1, list2)); } void test_equal_list_string (void) { test = cut_test_new("equal_list_string test", stub_equal_list_string); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_list_string test", NULL, "", "(\"abc\", \"def\")", "(\"zyx\", \"wvu\")", FAIL_LOCATION, "stub_equal_list_string", NULL); } static void stub_equal_list_string_both_null (void) { need_to_free_list_contents = TRUE; list1 = g_list_append(list1, g_strdup("abc")); list1 = g_list_append(list1, NULL); list1 = g_list_append(list1, g_strdup("def")); list2 = g_list_append(list2, g_strdup("abc")); list2 = g_list_append(list2, NULL); list2 = g_list_append(list2, g_strdup("def")); gcut_assert_equal_list_string(list1, list1); gcut_assert_equal_list_string(list2, list2); gcut_assert_equal_list_string(list1, list2); } void test_equal_list_string_both_null (void) { test = cut_test_new("equal_list_string test (both NULL)", stub_equal_list_string_both_null); cut_assert_not_null(test); cut_assert_true(run()); cut_assert_test_result_summary(run_context, 1, 3, 1, 0, 0, 0, 0, 0); } static void stub_equal_list_string_other_null (void) { need_to_free_list_contents = TRUE; list1 = g_list_append(list1, g_strdup("abc")); list1 = g_list_append(list1, g_strdup("abc")); list1 = g_list_append(list1, g_strdup("def")); list2 = g_list_append(list2, NULL); list2 = g_list_append(list2, g_strdup("abc")); list2 = g_list_append(list2, g_strdup("def")); gcut_assert_equal_list_string(list1, list1); gcut_assert_equal_list_string(list2, list2); MARK_FAIL(gcut_assert_equal_list_string(list1, list2)); } void test_equal_list_string_other_null (void) { test = cut_test_new("equal_list_string test (other NULL)", stub_equal_list_string_other_null); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_list_string test (other NULL)", NULL, "", "(\"abc\", \"abc\", \"def\")", "(NULL, \"abc\", \"def\")", FAIL_LOCATION, "stub_equal_list_string_other_null", NULL); } static void stub_equal_list_enum (void) { list1 = g_list_append(list1, GINT_TO_POINTER(CUT_TEST_RESULT_PENDING)); list1 = g_list_append(list1, GINT_TO_POINTER(CUT_TEST_RESULT_SUCCESS)); list2 = g_list_append(list2, GINT_TO_POINTER(CUT_TEST_RESULT_FAILURE)); gcut_assert_equal_list_enum(CUT_TYPE_TEST_RESULT_STATUS, list1, list1); gcut_assert_equal_list_enum(CUT_TYPE_TEST_RESULT_STATUS, list2, list2); MARK_FAIL(gcut_assert_equal_list_enum(CUT_TYPE_TEST_RESULT_STATUS, list1, list2)); } void test_equal_list_enum (void) { const gchar inspected_expected[] = "(#, " "#)"; const gchar inspected_actual[] = "(#)"; test = cut_test_new("equal_list_enum test", stub_equal_list_enum); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_list_enum test", NULL, "", inspected_expected, inspected_actual, FAIL_LOCATION, "stub_equal_list_enum", NULL); } static void stub_equal_list_flags (void) { list1 = g_list_append(list1, GUINT_TO_POINTER(1 << 0 | 1 << 1)); list1 = g_list_append(list1, GUINT_TO_POINTER(1 << 2)); list2 = g_list_append(list2, GUINT_TO_POINTER(0)); gcut_assert_equal_list_flags(flags_type, list1, list1); gcut_assert_equal_list_flags(flags_type, list2, list2); MARK_FAIL(gcut_assert_equal_list_flags(flags_type, list1, list2)); } void test_equal_list_flags (void) { const gchar inspected_expected[] = "(#, " "#)"; const gchar inspected_actual[] = "(#)"; static const GFlagsValue values[] = { {1 << 0, "CUTTEST_ASSERT_LIST_STUB_FIRST", "first"}, {1 << 1, "CUTTEST_ASSERT_LIST_STUB_SECOND", "second"}, {1 << 2, "CUTTEST_ASSERT_LIST_STUB_THIRD", "third"}, {0, NULL, NULL} }; flags_type = g_flags_register_static("CuttestAssertListStubFlags", values); test = cut_test_new("equal_list_flags test", stub_equal_list_flags); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_list_flags test", NULL, "", inspected_expected, inspected_actual, FAIL_LOCATION, "stub_equal_list_flags", NULL); } static void g_object_unref_with_null_check (gpointer object) { if (object) g_object_unref(object); } static void stub_equal_list_object (void) { need_to_free_list_contents = TRUE; list_element_free_function = g_object_unref_with_null_check; list1 = g_list_append(list1, cut_repository_new("directory1")); list1 = g_list_append(list1, NULL); list1 = g_list_append(list1, cut_test_new("test1", NULL)); list2 = g_list_append(list2, cut_repository_new("directory2")); list2 = g_list_append(list2, NULL); list2 = g_list_append(list2, cut_test_new("test2", NULL)); gcut_assert_equal_list_object(list1, list1); gcut_assert_equal_list_object(list2, list2); MARK_FAIL(gcut_assert_equal_list_object(list1, list2)); } void test_equal_list_object (void) { const gchar *inspected_expected, *inspected_actual; test = cut_test_new("equal_list_object test", stub_equal_list_object); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); inspected_expected = cut_take_printf( "(#>, " "(null), " "#, element-name=<\"test\">, " "test-function=, base-directory=>)", list1->data, g_list_nth_data(list1, 2)); inspected_actual = cut_take_printf( "(#>, " "(null), " "#, element-name=<\"test\">, " "test-function=, base-directory=>)", list2->data, g_list_nth_data(list2, 2)); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_list_object test", NULL, "", inspected_expected, inspected_actual, FAIL_LOCATION, "stub_equal_list_object", NULL); } static void stub_equal_hash_table (void) { hash1 = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free); hash2 = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free); g_hash_table_insert(hash1, GUINT_TO_POINTER(1), g_strdup("11")); g_hash_table_insert(hash1, GUINT_TO_POINTER(10), g_strdup("22")); g_hash_table_insert(hash2, GUINT_TO_POINTER(2), g_strdup("99")); g_hash_table_insert(hash2, GUINT_TO_POINTER(20), g_strdup("88")); gcut_assert_equal_hash_table(hash1, hash1, g_str_equal, gcut_inspect_direct, gcut_inspect_string, NULL); gcut_assert_equal_hash_table(hash2, hash2, g_str_equal, gcut_inspect_direct, gcut_inspect_string, NULL); MARK_FAIL(gcut_assert_equal_hash_table(hash1, hash2, g_str_equal, gcut_inspect_direct, gcut_inspect_string, NULL)); } void test_equal_hash_table (void) { test = cut_test_new("equal_hash_table test", stub_equal_hash_table); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_hash_table test", NULL, "", "{1 => \"11\", 10 => \"22\"}", "{2 => \"99\", 20 => \"88\"}", FAIL_LOCATION, "stub_equal_hash_table", NULL); } static void stub_equal_hash_table_string_string (void) { hash1 = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); hash2 = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); g_hash_table_insert(hash1, g_strdup("abc"), g_strdup("11")); g_hash_table_insert(hash1, g_strdup("def"), g_strdup("22")); g_hash_table_insert(hash2, g_strdup("zyx"), g_strdup("99")); g_hash_table_insert(hash2, g_strdup("wvu"), g_strdup("88")); gcut_assert_equal_hash_table_string_string(hash1, hash1); gcut_assert_equal_hash_table_string_string(hash2, hash2); MARK_FAIL(gcut_assert_equal_hash_table_string_string(hash1, hash2)); } void test_equal_hash_table_string_string (void) { test = cut_test_new("equal_hash_table_string_string test", stub_equal_hash_table_string_string); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "equal_hash_table_string_string test", NULL, "", "{\"abc\" => \"11\", \"def\" => \"22\"}", "{\"wvu\" => \"88\", \"zyx\" => \"99\"}", FAIL_LOCATION, "stub_equal_hash_table_string_string", NULL); } static void stub_error (void) { gcut_assert_error(error); error = g_error_new(G_FILE_ERROR, G_FILE_ERROR_NOENT, "not found"); MARK_FAIL(gcut_assert_error(error)); } void test_error (void) { test = cut_test_new("gcut_assert_error test", stub_error); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "gcut_assert_error test", NULL, "expected: is NULL\n" " actual: ", NULL, NULL, FAIL_LOCATION, "stub_error", NULL); } static void stub_equal_error (void) { error1 = g_error_new(G_FILE_ERROR, G_FILE_ERROR_NOENT, "not found"); error2 = g_error_new(G_FILE_ERROR, G_FILE_ERROR_NOENT, "not found"); gcut_assert_equal_error(error1, error2); g_error_free(error2); error2 = g_error_new(G_FILE_ERROR, G_FILE_ERROR_NOENT, "no entry"); MARK_FAIL(gcut_assert_equal_error(error1, error2)); } void test_equal_error (void) { test = cut_test_new("gcut_assert_equal_error test", stub_equal_error); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "gcut_assert_equal_error test", NULL, "", "g-file-error-quark:4: not found", "g-file-error-quark:4: no entry", FAIL_LOCATION, "stub_equal_error", NULL); } static void stub_equal_enum (void) { gcut_assert_equal_enum(CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_PENDING, CUT_TEST_RESULT_PENDING); MARK_FAIL(gcut_assert_equal_enum(CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_FAILURE, CUT_TEST_RESULT_PENDING)); } void test_equal_enum (void) { test = cut_test_new("gcut_assert_equal_enum test", stub_equal_enum); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result( run_context, 0, CUT_TEST_RESULT_FAILURE, "gcut_assert_equal_enum test", NULL, "" " (CUT_TYPE_TEST_RESULT_STATUS)", "#", "#", FAIL_LOCATION, "stub_equal_enum", NULL); } static void stub_equal_flags (void) { gcut_assert_equal_flags(flags_type, (1 << 0) | (1 << 2), (1 << 0) | (1 << 2)); MARK_FAIL(gcut_assert_equal_flags(flags_type, (1 << 1) | (1 << 2), (1 << 3))); } void test_equal_flags (void) { static const GFlagsValue values[] = { {1 << 0, "CUTTEST_ASSERT_STUB_FIRST", "first"}, {1 << 1, "CUTTEST_ASSERT_STUB_SECOND", "second"}, {1 << 2, "CUTTEST_ASSERT_STUB_THIRD", "third"}, {0, NULL, NULL} }; flags_type = g_flags_register_static("CuttestAssertStubFlags", values); test = cut_test_new("gcut_assert_equal_flags test", stub_equal_flags); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "gcut_assert_equal_flags test", NULL, "<(1 << 1) | (1 << 2) == (1 << 3)> (flags_type)", "#", "#", FAIL_LOCATION, "stub_equal_flags", NULL); } static void stub_equal_object (void) { object1 = G_OBJECT(cut_loader_new("so-name1")); object2 = G_OBJECT(cut_loader_new("so-name2")); gcut_assert_equal_object(object1, object1); gcut_assert_equal_object(object2, object2); gcut_assert_equal_object(NULL, NULL); MARK_FAIL(gcut_assert_equal_object(object1, object2)); } void test_equal_object (void) { const gchar *inspected_expected, *inspected_actual; test = cut_test_new("gcut_assert_equal_object test", stub_equal_object); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 3, 0, 1, 0, 0, 0, 0); inspected_expected = cut_take_printf("#, " "base-directory=>", object1); inspected_actual = cut_take_printf("#, " "base-directory=>", object2); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "gcut_assert_equal_object test", NULL, "", inspected_expected, inspected_actual, FAIL_LOCATION, "stub_equal_object", NULL); } static void stub_equal_object_null (void) { object1 = G_OBJECT(cut_loader_new("so-name")); MARK_FAIL(gcut_assert_equal_object(object1, NULL)); } void test_equal_object_null (void) { const gchar *inspected_expected; test = cut_test_new("gcut_assert_equal_object_null test", stub_equal_object_null); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 0, 0, 1, 0, 0, 0, 0); inspected_expected = cut_take_printf("#, " "base-directory=>", object1); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "gcut_assert_equal_object_null test", NULL, "", inspected_expected, "(null)", FAIL_LOCATION, "stub_equal_object_null", NULL); } static gboolean equal_name (gconstpointer data1, gconstpointer data2) { return g_str_equal(cut_test_get_name(CUT_TEST(data1)), cut_test_get_name(CUT_TEST(data2))); } static void stub_equal_object_custom (void) { object1 = G_OBJECT(cut_test_new("test-name", NULL)); object2 = G_OBJECT(cut_test_new("test-name", NULL)); object3 = G_OBJECT(cut_test_new("no-name", NULL)); gcut_assert_equal_object_custom(object1, object2, equal_name); MARK_FAIL(gcut_assert_equal_object_custom(object1, object3, equal_name)); } void test_equal_object_custom (void) { const gchar *inspected_expected, *inspected_actual; test = cut_test_new("gcut_assert_equal_object_custom test", stub_equal_object_custom); cut_assert_not_null(test); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); inspected_expected = cut_take_printf("#, " "element-name=<\"test\">, " "test-function=, " "base-directory=>", object1); inspected_actual = cut_take_printf("#, " "element-name=<\"test\">, " "test-function=, " "base-directory=>", object3); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "gcut_assert_equal_object_custom test", NULL, "", inspected_expected, inspected_actual, FAIL_LOCATION, "stub_equal_object_custom", NULL); } static void stub_equal_pid (void) { gcut_assert_equal_pid(0, 0); MARK_FAIL(gcut_assert_equal_pid(0, (GPid)100)); } void test_equal_pid (void) { test = cut_test_new("cut_assert_equal_pid()", stub_equal_pid); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "cut_assert_equal_pid()", NULL, "<0 == (GPid)100>", "0", "100", FAIL_LOCATION, "stub_equal_pid", NULL); } static void stub_not_equal_pid (void) { gcut_assert_not_equal_pid(0, (GPid)100); MARK_FAIL(gcut_assert_not_equal_pid(0, 0)); } void test_not_equal_pid (void) { test = cut_test_new("cut_assert_not_equal_pid()", stub_not_equal_pid); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 1, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "cut_assert_not_equal_pid()", NULL, "<0 != 0>", "0", "0", FAIL_LOCATION, "stub_not_equal_pid", NULL); } static void stub_equal_int64 (void) { gcut_assert_equal_int64(0, 0); gcut_assert_equal_int64((gint64)G_MAXINT32 + 1, (gint64)G_MAXINT32 + 1); MARK_FAIL(gcut_assert_equal_int64(G_MAXINT32, G_MAXINT64)); } void test_equal_int64 (void) { test = cut_test_new("cut_assert_equal_int64()", stub_equal_int64); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "cut_assert_equal_int64()", NULL, "", "2147483647", "9223372036854775807", FAIL_LOCATION, "stub_equal_int64", NULL); } static void stub_not_equal_int64 (void) { gcut_assert_not_equal_int64(0, 1); gcut_assert_not_equal_int64((gint64)G_MAXINT32, (gint64)G_MAXINT32 + 1); MARK_FAIL(gcut_assert_not_equal_int64(G_MAXINT64, G_MAXINT64)); } void test_not_equal_int64 (void) { test = cut_test_new("cut_assert_not_equal_int64()", stub_not_equal_int64); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "cut_assert_not_equal_int64()", NULL, "", "9223372036854775807", "9223372036854775807", FAIL_LOCATION, "stub_not_equal_int64", NULL); } static void stub_equal_uint64 (void) { gcut_assert_equal_uint64(0, 0); gcut_assert_equal_uint64((guint64)G_MAXUINT32 + 1, (guint64)G_MAXUINT32 + 1); MARK_FAIL(gcut_assert_equal_uint64(G_MAXUINT32, G_MAXUINT64)); } void test_equal_uint64 (void) { test = cut_test_new("cut_assert_equal_uint64()", stub_equal_uint64); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "cut_assert_equal_uint64()", NULL, "", "4294967295", "18446744073709551615", FAIL_LOCATION, "stub_equal_uint64", NULL); } static void stub_not_equal_uint64 (void) { gcut_assert_not_equal_uint64(0, 1); gcut_assert_not_equal_uint64((guint64)G_MAXUINT32, (guint64)G_MAXUINT32 + 1); MARK_FAIL(gcut_assert_not_equal_uint64(G_MAXUINT64, G_MAXUINT64)); } void test_not_equal_uint64 (void) { test = cut_test_new("cut_assert_not_equal_uint64()", stub_not_equal_uint64); cut_assert_false(run()); cut_assert_test_result_summary(run_context, 1, 2, 0, 1, 0, 0, 0, 0); cut_assert_test_result(run_context, 0, CUT_TEST_RESULT_FAILURE, "cut_assert_not_equal_uint64()", NULL, "", "18446744073709551615", "18446744073709551615", FAIL_LOCATION, "stub_not_equal_uint64", NULL); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-string.c0000644000175000017500000000067311424022520022673 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include void test_equal_null_terminated_string (void); void cut_setup (void) { } void cut_teardown (void) { } void test_equal_null_terminated_string (void) { GString actual = {"0123456789", 10, 0}; GString expected = {"0123456789", 10, 0}; gcut_assert_equal_string(&actual, &expected); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-string-io-channel.c0000644000175000017500000004160011523751076024720 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include void test_new(void); void test_new_null(void); void test_read_write(void); void test_clear(void); void test_source(void); void data_buffer_limit_block(void); void test_buffer_limit_block(gpointer data); void test_buffer_limit_non_block(void); void data_limit_block(void); void test_limit_block(gpointer data); void test_limit_non_block(void); void test_read_fail(void); void test_pipe_mode(void); void test_pipe_mode_eof(void); void test_main_context(void); static GIOChannel *channel; static gchar *data; static guint watch_id; static guint timeout_id; static GMainContext *main_context; static GError *expected_error; static GError *actual_error; void cut_setup (void) { channel = NULL; data = NULL; watch_id = 0; timeout_id = 0; main_context = NULL; expected_error = NULL; actual_error = NULL; } void cut_teardown (void) { if (channel) { gcut_string_io_channel_set_buffer_limit(channel, 0); gcut_string_io_channel_set_limit(channel, 0); g_io_channel_unref(channel); } if (data) g_free(data); if (watch_id > 0) { GSource *source; source = g_main_context_find_source_by_id(main_context, watch_id); if (source) { g_source_destroy(source); } else { g_source_remove(watch_id); } } if (timeout_id > 0) { GSource *source; source = g_main_context_find_source_by_id(main_context, timeout_id); if (source) { g_source_destroy(source); } else { g_source_remove(timeout_id); } } if (main_context) g_main_context_unref(main_context); if (expected_error) g_error_free(expected_error); if (actual_error) g_error_free(actual_error); } void test_new (void) { gsize length; GError *error = NULL; channel = gcut_string_io_channel_new("XXX"); cut_assert_equal_string("XXX", gcut_string_io_channel_get_string(channel)->str); g_io_channel_read_to_end(channel, &data, &length, &error); gcut_assert_error(error); cut_assert_equal_string("XXX", data); cut_assert_equal_string("XXX", gcut_string_io_channel_get_string(channel)->str); } void test_new_null (void) { gchar buffer[1024]; gsize length; GError *error = NULL; channel = gcut_string_io_channel_new(NULL); cut_assert_equal_string("", gcut_string_io_channel_get_string(channel)->str); cut_assert_equal_int(G_IO_STATUS_EOF, g_io_channel_read_chars(channel, buffer, sizeof(buffer), &length, &error)); gcut_assert_error(error); g_io_channel_read_to_end(channel, &data, &length, &error); gcut_assert_error(error); cut_assert_equal_string("", data); cut_assert_equal_string("", gcut_string_io_channel_get_string(channel)->str); } void test_read_write (void) { gchar buffer[1024]; gchar write_data[] = "data"; gsize length; GError *error = NULL; channel = gcut_string_io_channel_new(NULL); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); cut_assert_equal_string("", gcut_string_io_channel_get_string(channel)->str); cut_assert_equal_int(G_IO_STATUS_EOF, g_io_channel_read_chars(channel, buffer, sizeof(buffer), &length, &error)); gcut_assert_error(error); g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); g_io_channel_seek_position(channel, 0, G_SEEK_SET, &error); gcut_assert_error(error); g_io_channel_read_to_end(channel, &data, &length, &error); gcut_assert_error(error); cut_assert_equal_string(write_data, data); cut_assert_equal_string(write_data, gcut_string_io_channel_get_string(channel)->str); } void test_clear (void) { gsize length; GError *error = NULL; channel = gcut_string_io_channel_new("XXX"); cut_assert_equal_string("XXX", gcut_string_io_channel_get_string(channel)->str); gcut_string_io_channel_clear(channel); cut_assert_equal_string("", gcut_string_io_channel_get_string(channel)->str); g_io_channel_read_to_end(channel, &data, &length, &error); gcut_assert_error(error); cut_assert_equal_string("", data); } static gboolean watch_func (GIOChannel *channel, GIOCondition condition, gpointer data) { GIOCondition *target_condition = data; *target_condition = condition; return TRUE; } void test_source (void) { gchar write_data[] = "data"; gchar buffer[1024]; gsize length; GIOCondition target_condition = 0; GError *error = NULL; channel = gcut_string_io_channel_new(NULL); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); watch_id = g_io_add_watch(channel, G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL, watch_func, &target_condition); g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(0, target_condition); g_main_context_iteration(NULL, FALSE); cut_assert_equal_uint(G_IO_IN | G_IO_PRI, target_condition); cut_assert_equal_int(G_IO_STATUS_EOF, g_io_channel_read_chars(channel, buffer, sizeof(buffer), &length, &error)); gcut_assert_error(error); target_condition = 0; g_main_context_iteration(NULL, FALSE); cut_assert_equal_uint(0, target_condition); g_io_channel_seek_position(channel, 0, G_SEEK_SET, &error); gcut_assert_error(error); target_condition = 0; g_main_context_iteration(NULL, FALSE); cut_assert_equal_uint(G_IO_IN | G_IO_PRI, target_condition); } static gboolean cb_timeout_detect (gpointer user_data) { gboolean *timed_out = user_data; gsize limit; *timed_out = TRUE; limit = gcut_string_io_channel_get_buffer_limit(channel); gcut_string_io_channel_set_buffer_limit(channel, limit + 1); return FALSE; } void data_buffer_limit_block (void) { cut_add_data("default context", NULL, NULL, "new context", g_main_context_new(), NULL, NULL); } void test_buffer_limit_block (gpointer data) { gchar write_data[] = "data\n"; gsize length; GIOStatus status; GSource *timeout_source; gboolean timed_out = FALSE; GError *error = NULL; main_context = data; channel = gcut_string_io_channel_new(NULL); gcut_string_io_channel_set_main_context(channel, main_context); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); g_io_channel_set_buffered(channel, FALSE); gcut_string_io_channel_set_buffer_limit(channel, sizeof(write_data)); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_size(sizeof(write_data), length); g_io_channel_seek_position(channel, 0, G_SEEK_SET, &error); gcut_assert_error(error); timeout_source = g_timeout_source_new(100); g_source_set_callback(timeout_source, cb_timeout_detect, &timed_out, NULL); timeout_id = g_source_attach(timeout_source, main_context); g_source_unref(timeout_source); gcut_string_io_channel_set_buffer_limit(channel, length * 2 -1); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_size(sizeof(write_data), length); cut_assert_true(timed_out); } void test_buffer_limit_non_block (void) { gchar write_data[] = "data\n"; gsize length; gsize delta = 2; GIOStatus status; GError *error = NULL; channel = gcut_string_io_channel_new(NULL); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); g_io_channel_set_buffered(channel, FALSE); g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, &error); gcut_assert_error(error); gcut_string_io_channel_set_buffer_limit(channel, sizeof(write_data)); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_size(sizeof(write_data), length); gcut_string_io_channel_set_buffer_limit(channel, delta); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_size(delta, length); g_io_channel_seek_position(channel, 0, G_SEEK_SET, &error); gcut_assert_error(error); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_AGAIN, status); cut_assert_equal_size(0, length); } static gboolean cb_timeout (gpointer data) { gboolean *emitted = data; *emitted = TRUE; gcut_string_io_channel_set_limit(channel, 0); return FALSE; } void data_limit_block (void) { cut_add_data("default context", NULL, NULL, "new context", g_main_context_new(), NULL, NULL); } void test_limit_block (gpointer data) { gchar write_data[] = "data\n"; gsize length; GIOStatus status; GSource *timeout_source; gboolean timeout_emitted = FALSE; GError *error = NULL; main_context = data; channel = gcut_string_io_channel_new(NULL); gcut_string_io_channel_set_main_context(channel, main_context); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); g_io_channel_set_buffered(channel, FALSE); gcut_string_io_channel_set_limit(channel, sizeof(write_data) + 1); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_size(sizeof(write_data), length); timeout_source = g_timeout_source_new(10); g_source_set_callback(timeout_source, cb_timeout, &timeout_emitted, NULL); timeout_id = g_source_attach(timeout_source, main_context); g_source_unref(timeout_source); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &actual_error); cut_assert_true(timeout_emitted); } void test_limit_non_block (void) { gchar write_data[] = "data\n"; gsize length; GIOStatus status; GError *error = NULL; channel = gcut_string_io_channel_new(NULL); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); g_io_channel_set_buffered(channel, FALSE); gcut_string_io_channel_set_limit(channel, sizeof(write_data) + 1); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_size(sizeof(write_data), length); g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, &error); gcut_assert_error(error); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &actual_error); expected_error = g_error_new(G_IO_CHANNEL_ERROR, g_io_channel_error_from_errno(ENOSPC), "%s", g_strerror(ENOSPC)); gcut_assert_equal_error(expected_error, actual_error); cut_assert_equal_uint(G_IO_STATUS_ERROR, status); } void test_read_fail (void) { gchar buffer[1024]; gsize length; GIOStatus status; GError *error = NULL; channel = gcut_string_io_channel_new("data\n"); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); g_io_channel_set_buffered(channel, FALSE); status = g_io_channel_read_chars(channel, buffer, 1, &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_size(1, length); gcut_string_io_channel_set_read_fail(channel, TRUE); status = g_io_channel_read_chars(channel, buffer, 1, &length, &actual_error); expected_error = g_error_new(G_IO_CHANNEL_ERROR, g_io_channel_error_from_errno(EIO), "%s", g_strerror(EIO)); gcut_assert_equal_error(expected_error, actual_error); cut_assert_equal_uint(G_IO_STATUS_ERROR, status); cut_assert_equal_size(0, length); } void test_pipe_mode (void) { gchar initial_data[] = "XXX"; gchar write_data[] = "data\n"; gchar buffer[1024]; gsize length; GIOStatus status; GError *error = NULL; channel = gcut_string_io_channel_new(initial_data); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); g_io_channel_set_buffered(channel, FALSE); cut_assert_false(gcut_string_io_channel_get_pipe_mode(channel)); gcut_string_io_channel_set_pipe_mode(channel, TRUE); cut_assert_true(gcut_string_io_channel_get_pipe_mode(channel)); status = g_io_channel_read_chars(channel, buffer, sizeof(buffer), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_memory(initial_data, strlen(initial_data), buffer, length); status = g_io_channel_write_chars(channel, write_data, sizeof(write_data), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_size(sizeof(write_data), length); status = g_io_channel_read_chars(channel, buffer, sizeof(buffer), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_NORMAL, status); cut_assert_equal_memory(write_data, sizeof(write_data), buffer, length); } void test_pipe_mode_eof (void) { gchar buffer[1024]; gsize length; GIOStatus status; GError *error = NULL; channel = gcut_string_io_channel_new(NULL); g_io_channel_set_encoding(channel, NULL, &error); gcut_assert_error(error); g_io_channel_set_buffered(channel, FALSE); gcut_string_io_channel_set_pipe_mode(channel, TRUE); g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, &error); gcut_assert_error(error); status = g_io_channel_read_chars(channel, buffer, sizeof(buffer), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_AGAIN, status); g_io_channel_set_flags(channel, 0, &error); gcut_assert_error(error); status = g_io_channel_read_chars(channel, buffer, sizeof(buffer), &length, &error); gcut_assert_error(error); cut_assert_equal_uint(G_IO_STATUS_EOF, status); } void test_main_context (void) { channel = gcut_string_io_channel_new(NULL); cut_assert_equal_pointer(NULL, gcut_string_io_channel_get_main_context(channel)); main_context = g_main_context_new(); gcut_string_io_channel_set_main_context(channel, main_context); cut_assert_equal_pointer(main_context, gcut_string_io_channel_get_main_context(channel)); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-test-utils.c0000644000175000017500000001670611523751076023525 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include "../lib/cuttest-utils.h" #include #include void test_list_string (void); void test_list_string_array (void); void test_list_new (void); void test_take_new_list_string (void); void test_take_new_list_string_array (void); void test_take_new_list_object (void); void test_data_get (void); void test_take_string (void); void test_take_new_string (void); void test_fixture_data (void); static GList *string_list; static GList *object_list; static GCutDynamicData *data; void cut_setup (void) { string_list = NULL; object_list = NULL; data = NULL; } void cut_teardown (void) { if (string_list) gcut_list_string_free(string_list); if (object_list) gcut_list_object_free(object_list); if (data) g_object_unref(data); } void test_list_string (void) { GList *expected = NULL; expected = g_list_append(expected, "a"); expected = g_list_append(expected, "zzz"); expected = g_list_append(expected, "123"); string_list = gcut_list_string_new("a", "zzz", "123", NULL); gcut_assert_equal_list_string(gcut_take_list(expected, NULL), string_list); } void test_list_string_array (void) { const gchar *strings[] = {"a", "zzz", "123", NULL}; GList *expected = NULL; expected = g_list_append(expected, "a"); expected = g_list_append(expected, "zzz"); expected = g_list_append(expected, "123"); string_list = gcut_list_string_new_array(strings); gcut_assert_equal_list_string(gcut_take_list(expected, NULL), string_list); } void test_list_new (void) { GList *expected = NULL; GCutDynamicData *string_data, *int_data, *enum_data; string_data = gcut_dynamic_data_new("string", G_TYPE_STRING, NULL, NULL); int_data = gcut_dynamic_data_new("int", G_TYPE_INT, 0, NULL); enum_data = gcut_dynamic_data_new("enum", CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_SUCCESS, NULL); expected = g_list_append(expected, string_data); expected = g_list_append(expected, int_data); expected = g_list_append(expected, enum_data); object_list = gcut_list_new(string_data, int_data, enum_data, NULL); gcut_assert_equal_list_object(gcut_take_list(expected, NULL), object_list); } void test_take_new_list_string (void) { GList *expected = NULL; const GList *actual; expected = g_list_append(expected, "a"); expected = g_list_append(expected, "zzz"); expected = g_list_append(expected, "123"); actual = gcut_take_new_list_string("a", "zzz", "123", NULL); gcut_assert_equal_list_string(gcut_take_list(expected, NULL), actual); } void test_take_new_list_string_array (void) { const gchar *strings[] = {"a", "zzz", "123", NULL}; GList *expected = NULL; const GList *actual; expected = g_list_append(expected, "a"); expected = g_list_append(expected, "zzz"); expected = g_list_append(expected, "123"); actual = gcut_take_new_list_string_array(strings); gcut_assert_equal_list_string(gcut_take_list(expected, NULL), actual); } void test_take_new_list_object (void) { GList *expected = NULL; const GList *actual; GCutDynamicData *string_data, *int_data, *enum_data; string_data = gcut_dynamic_data_new("string", G_TYPE_STRING, NULL, NULL); int_data = gcut_dynamic_data_new("int", G_TYPE_INT, 0, NULL); enum_data = gcut_dynamic_data_new("enum", CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_SUCCESS, NULL); expected = g_list_append(expected, string_data); expected = g_list_append(expected, int_data); expected = g_list_append(expected, enum_data); actual = gcut_take_new_list_object(string_data, int_data, enum_data, NULL); gcut_assert_equal_list_object(gcut_take_list(expected, NULL), actual); } void test_data_get (void) { gpointer pointer; GError *error; pointer = malloc(10); error = g_error_new(G_FILE_ERROR, G_FILE_ERROR_NOENT, "not found"); data = gcut_dynamic_data_new("string", G_TYPE_STRING, "value", "int", G_TYPE_INT, -29, "uint", G_TYPE_UINT, 29, "type", G_TYPE_GTYPE, GCUT_TYPE_DYNAMIC_DATA, "flags", CUTTEST_TYPE_FLAGS, CUTTEST_FLAG_FIRST | CUTTEST_FLAG_THIRD, "enum", CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_SUCCESS, "pointer", G_TYPE_POINTER, pointer, g_free, "boxed", GCUT_TYPE_ERROR, error, NULL); cut_assert_equal_string("value", gcut_data_get_string(data, "string")); cut_assert_equal_int(-29, gcut_data_get_int(data, "int")); cut_assert_equal_uint(29, gcut_data_get_uint(data, "uint")); gcut_assert_equal_type(GCUT_TYPE_DYNAMIC_DATA, gcut_data_get_type(data, "type")); gcut_assert_equal_flags(CUTTEST_TYPE_FLAGS, CUTTEST_FLAG_FIRST | CUTTEST_FLAG_THIRD, gcut_data_get_flags(data, "flags")); gcut_assert_equal_enum(CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_SUCCESS, gcut_data_get_enum(data, "enum")); cut_assert_equal_pointer(pointer, gcut_data_get_pointer(data, "pointer")); gcut_assert_equal_error(error, gcut_data_get_boxed(data, "boxed")); } void test_take_string (void) { GString *expected, *actual; expected = g_string_new("foo bar baz"); actual = gcut_take_string(expected); cut_assert_equal_string(expected->str, actual->str); } void test_take_new_string (void) { GString *expected, *actual; expected = g_string_new("hello world"); gcut_take_string(expected); actual = gcut_take_new_string("hello world"); cut_assert_equal_string(expected->str, actual->str); } void test_fixture_data (void) { const gchar *expected; GString *data; cut_set_fixture_data_dir(cuttest_get_base_dir(), "fixtures", "data", NULL); data = gcut_get_fixture_data("1.txt", NULL); expected = "file1\n"; cut_assert_equal_memory(expected, strlen(expected), data->str, data->len); } cutter-testing-framework-1.1.7/test/gcutter/test-gcut-io.c0000644000175000017500000000165111205747030022000 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include void test_inspect_condition (void); static gchar *message; void cut_setup (void) { message = NULL; } void cut_teardown (void) { if (message) g_free(message); } #define cut_assert_equal_inspected_condition(expected, condition) \ cut_assert_equal_string_with_free(expected, \ gcut_io_inspect_condition(condition)) void test_inspect_condition (void) { cut_assert_equal_inspected_condition("", 0); cut_assert_equal_inspected_condition("In | Out | Priority high | Error " "| Hung up | Invalid request", G_IO_IN | G_IO_OUT | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-enum.c0000644000175000017500000002714211205747030022340 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include #include void test_enum_inspect(void); void data_enum_parse(void); void test_enum_parse(gconstpointer data); void test_flags_inspect(void); void data_flags_parse(void); void test_flags_parse(gconstpointer data); void data_flags_get_all(void); void test_flags_get_all(gconstpointer _data); static gchar *inspected; static GError *actual_error; void cut_setup (void) { inspected = NULL; actual_error = NULL; } void cut_teardown (void) { if (inspected) g_free(inspected); if (actual_error) g_error_free(actual_error); } void test_enum_inspect (void) { inspected = gcut_enum_inspect(CUT_TYPE_TEST_RESULT_STATUS, CUT_TEST_RESULT_PENDING); cut_assert_equal_string("#", inspected); g_free(inspected); inspected = gcut_enum_inspect(CUT_TYPE_TEST_RESULT_STATUS, -100); cut_assert_equal_string("#", inspected); } typedef struct _ParseTestData { GType type; gchar *value; gint expected_enum_value; guint expected_flags_value; GError *expected_error; } ParseTestData; static ParseTestData * parse_test_data_new (GType type, const gchar *value, gint expected_enum_value, guint expected_flags_value, GError *expected_error) { ParseTestData *data; data = g_new(ParseTestData, 1); data->type = type; data->value = g_strdup(value); data->expected_enum_value = expected_enum_value; data->expected_flags_value = expected_flags_value; data->expected_error = expected_error; return data; } static ParseTestData * parse_enum_test_data_new (GType type, const gchar *value, gint expected_enum_value, GError *expected_error) { return parse_test_data_new(type, value, expected_enum_value, 0, expected_error); } static ParseTestData * parse_flags_test_data_new (GType type, const gchar *value, gint expected_flags_value, GError *expected_error) { return parse_test_data_new(type, value, 0, expected_flags_value, expected_error); } static void parse_test_data_free (ParseTestData *data) { if (data->value) g_free(data->value); if (data->expected_error) g_error_free(data->expected_error); g_free(data); } void data_enum_parse (void) { cut_add_data("nick", parse_enum_test_data_new(CUT_TYPE_TEST_RESULT_STATUS, "pending", CUT_TEST_RESULT_PENDING, NULL), parse_test_data_free, "NICK", parse_enum_test_data_new(CUT_TYPE_TEST_RESULT_STATUS, "PENDING", CUT_TEST_RESULT_PENDING, NULL), parse_test_data_free, "name", parse_enum_test_data_new(CUT_TYPE_TEST_RESULT_STATUS, "CUT_TEST_RESULT_PENDING", CUT_TEST_RESULT_PENDING, NULL), parse_test_data_free, "NULL", parse_enum_test_data_new( CUT_TYPE_TEST_RESULT_STATUS, NULL, 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "enum value should not be NULL")), parse_test_data_free, "invalid type", parse_enum_test_data_new( GCUT_TYPE_EGG, "pending", 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "invalid enum type: GCutEgg" "(%" G_GSIZE_FORMAT ")", GCUT_TYPE_EGG)), parse_test_data_free, "unknown nick", parse_enum_test_data_new( CUT_TYPE_TEST_RESULT_STATUS, "unknown", 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "unknown enum value: " "(CutTestResultStatus)")), parse_test_data_free); } void test_enum_parse (gconstpointer data) { const ParseTestData *test_data = data; GError *error = NULL; gint actual_value; actual_value = gcut_enum_parse(test_data->type, test_data->value, &error); if (test_data->expected_error) { actual_error = error; gcut_assert_equal_error(test_data->expected_error, actual_error); } else { gcut_assert_error(error); } gcut_assert_equal_enum(test_data->type, test_data->expected_enum_value, actual_value); } void test_flags_inspect (void) { inspected = gcut_flags_inspect(CUTTEST_TYPE_FLAGS, 0); cut_assert_equal_string("#", inspected); g_free(inspected); inspected = gcut_flags_inspect(CUTTEST_TYPE_FLAGS, CUTTEST_FLAG_FIRST | CUTTEST_FLAG_SECOND); cut_assert_equal_string("#", inspected); g_free(inspected); inspected = gcut_flags_inspect(CUTTEST_TYPE_FLAGS, CUTTEST_FLAG_FIRST | (CUTTEST_FLAG_THIRD << 1)); cut_assert_equal_string("#", inspected); } void data_flags_parse (void) { cut_add_data("nick", parse_flags_test_data_new(CUTTEST_TYPE_FLAGS, "first|second", CUTTEST_FLAG_FIRST | CUTTEST_FLAG_SECOND, NULL), parse_test_data_free, "NICK", parse_flags_test_data_new(CUTTEST_TYPE_FLAGS, "SECOND|thIrd", CUTTEST_FLAG_SECOND | CUTTEST_FLAG_THIRD, NULL), parse_test_data_free, "name", parse_flags_test_data_new(CUTTEST_TYPE_FLAGS, "CUTTEST_FLAG_FIRST", CUTTEST_FLAG_FIRST, NULL), parse_test_data_free, "empty", parse_flags_test_data_new(CUTTEST_TYPE_FLAGS, "", 0, NULL), parse_test_data_free, "NULL", parse_flags_test_data_new( CUTTEST_TYPE_FLAGS, NULL, 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "flags value should not be NULL")), parse_test_data_free, "invalid type", parse_flags_test_data_new( GCUT_TYPE_EGG, "first", 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "invalid flags type: GCutEgg" "(%" G_GSIZE_FORMAT ")", GCUT_TYPE_EGG)), parse_test_data_free, "unknown nick only", parse_flags_test_data_new( CUTTEST_TYPE_FLAGS, "unknown", 0, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "unknown flags: " "(CuttestFlags): " ": #")), parse_test_data_free, "unknown nick with valid nick", parse_flags_test_data_new( CUTTEST_TYPE_FLAGS, "first|unknown1|CUTTEST_FLAG_THIRD|unknown2", (1 << 0 | 1 << 2), g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "unknown flags: " "(CuttestFlags): " ": " "#")), parse_test_data_free); } void test_flags_parse (gconstpointer data) { const ParseTestData *test_data = data; GError *error = NULL; guint actual_value; actual_value = gcut_flags_parse(test_data->type, test_data->value, &error); if (test_data->expected_error) { actual_error = error; gcut_assert_equal_error(test_data->expected_error, actual_error); } else { gcut_assert_error(error); } gcut_assert_equal_flags(test_data->type, test_data->expected_flags_value, actual_value); } void data_flags_get_all (void) { #define ADD(label, expected, type, error) \ gcut_add_datum(label, \ "expected", G_TYPE_UINT, expected, \ "type", G_TYPE_GTYPE, type, \ "error", G_TYPE_POINTER, error, g_error_free, \ NULL) ADD("success", CUTTEST_FLAG_FIRST | CUTTEST_FLAG_SECOND | CUTTEST_FLAG_THIRD, CUTTEST_TYPE_FLAGS, NULL); ADD("invalid type", 0, GCUT_TYPE_EGG, g_error_new(GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "invalid flags type: GCutEgg" "(%" G_GSIZE_FORMAT ")", GCUT_TYPE_EGG)); #undef ADD } void test_flags_get_all (gconstpointer _data) { const GCutDynamicData *data = _data; GType flags_type; GError *error = NULL; const GError *expected_error; guint actual_value; flags_type = gcut_data_get_type(data, "type"); actual_value = gcut_flags_get_all(flags_type, &error); expected_error = gcut_data_get_pointer(data, "error"); if (expected_error) { gcut_take_error(error); gcut_assert_equal_error(expected_error, error); } else { gcut_assert_error(error); } gcut_assert_equal_flags(flags_type, gcut_data_get_flags(data, "expected"), actual_value); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-hash-table.c0000644000175000017500000001047311244232306023401 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include void test_new(void); void test_equal_same_content(void); void test_equal_same_size_and_different_content(void); void test_equal_different_size(void); void test_equal_null(void); void test_equal_empty(void); void test_inspect(void); void test_inspect_empty(void); void test_inspect_null(void); void test_copy(void); static GHashTable *hash1, *hash2; static gchar *inspected; void cut_setup (void) { hash1 = NULL; hash2 = NULL; inspected = NULL; } void cut_teardown (void) { if (hash1) g_hash_table_unref(hash1); if (hash2) g_hash_table_unref(hash2); if (inspected) g_free(inspected); } static GHashTable * stub_gcut_hash_table_string_string_new_va_list (const gchar *key, ...) { GHashTable *hash; va_list args; va_start(args, key); hash = gcut_hash_table_string_string_new_va_list(key, args); va_end(args); return hash; } void test_new (void) { hash1 = gcut_hash_table_string_string_new("key1", "value1", "key2", "value2", "key3", "value3", NULL); hash2 = stub_gcut_hash_table_string_string_new_va_list("key1", "value1", "key2", "value2", "key3", "value3", NULL); cut_assert_true(gcut_hash_table_string_equal(hash1, hash2)); } void test_equal_same_content (void) { hash1 = gcut_hash_table_string_string_new("key1", "value1", "key2", "value2", NULL); hash2 = gcut_hash_table_string_string_new("key1", "value1", "key2", "value2", NULL); cut_assert_true(gcut_hash_table_string_equal(hash1, hash2)); } void test_equal_same_size_and_different_content (void) { hash1 = gcut_hash_table_string_string_new("key1", "value1", "key2", "value2", NULL); hash2 = gcut_hash_table_string_string_new("key1", "value1", "key22", "value22", NULL); cut_assert_false(gcut_hash_table_string_equal(hash1, hash2)); } void test_equal_different_size (void) { hash1 = gcut_hash_table_string_string_new("key1", "value1", "key2", "value2", NULL); hash2 = gcut_hash_table_string_string_new("key1", "value1", NULL); cut_assert_false(gcut_hash_table_string_equal(hash1, hash2)); } void test_equal_empty (void) { hash1 = gcut_hash_table_string_string_new(NULL, NULL); hash2 = gcut_hash_table_string_string_new(NULL, NULL); cut_assert_true(gcut_hash_table_string_equal(hash1, hash2)); } void test_equal_null (void) { cut_assert_true(gcut_hash_table_string_equal(NULL, NULL)); } void test_inspect (void) { hash1 = gcut_hash_table_string_string_new("key1", "value1", "key2", "value2", NULL); inspected = gcut_hash_table_string_string_inspect(hash1); cut_assert_equal_string("{\"key1\" => \"value1\", \"key2\" => \"value2\"}", inspected); } void test_inspect_empty (void) { hash1 = gcut_hash_table_string_string_new(NULL, NULL); inspected = gcut_hash_table_string_string_inspect(hash1); cut_assert_equal_string("{}", inspected); } void test_inspect_null (void) { inspected = gcut_hash_table_string_string_inspect(NULL); cut_assert_equal_string("(null)", inspected); } void test_copy (void) { hash1 = gcut_hash_table_string_string_new("key1", "value1", "key2", "value2", NULL); hash2 = gcut_hash_table_string_string_copy(hash1); gcut_assert_equal_hash_table_string_string(hash1, hash2); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/Makefile.in0000644000175000017500000006703411525654637021403 0ustar koukou# 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@ 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@ subdir = test/gcutter DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_gcut_assertions_helper_la_LIBADD = am_test_gcut_assertions_helper_la_OBJECTS = \ test-gcut-assertions-helper.lo test_gcut_assertions_helper_la_OBJECTS = \ $(am_test_gcut_assertions_helper_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent test_gcut_assertions_la_LIBADD = am_test_gcut_assertions_la_OBJECTS = test-gcut-assertions.lo test_gcut_assertions_la_OBJECTS = \ $(am_test_gcut_assertions_la_OBJECTS) test_gcut_dynamic_data_la_LIBADD = am_test_gcut_dynamic_data_la_OBJECTS = test-gcut-dynamic-data.lo test_gcut_dynamic_data_la_OBJECTS = \ $(am_test_gcut_dynamic_data_la_OBJECTS) test_gcut_egg_la_LIBADD = am_test_gcut_egg_la_OBJECTS = test-gcut-egg.lo test_gcut_egg_la_OBJECTS = $(am_test_gcut_egg_la_OBJECTS) test_gcut_enum_la_LIBADD = am_test_gcut_enum_la_OBJECTS = test-gcut-enum.lo test_gcut_enum_la_OBJECTS = $(am_test_gcut_enum_la_OBJECTS) test_gcut_hash_table_la_LIBADD = am_test_gcut_hash_table_la_OBJECTS = test-gcut-hash-table.lo test_gcut_hash_table_la_OBJECTS = \ $(am_test_gcut_hash_table_la_OBJECTS) test_gcut_inspect_la_LIBADD = am_test_gcut_inspect_la_OBJECTS = test-gcut-inspect.lo test_gcut_inspect_la_OBJECTS = $(am_test_gcut_inspect_la_OBJECTS) test_gcut_io_la_LIBADD = am_test_gcut_io_la_OBJECTS = test-gcut-io.lo test_gcut_io_la_OBJECTS = $(am_test_gcut_io_la_OBJECTS) test_gcut_key_file_la_LIBADD = am_test_gcut_key_file_la_OBJECTS = test-gcut-key-file.lo test_gcut_key_file_la_OBJECTS = $(am_test_gcut_key_file_la_OBJECTS) test_gcut_list_la_LIBADD = am_test_gcut_list_la_OBJECTS = test-gcut-list.lo test_gcut_list_la_OBJECTS = $(am_test_gcut_list_la_OBJECTS) test_gcut_object_la_LIBADD = am_test_gcut_object_la_OBJECTS = test-gcut-object.lo test_gcut_object_la_OBJECTS = $(am_test_gcut_object_la_OBJECTS) test_gcut_process_la_LIBADD = am_test_gcut_process_la_OBJECTS = test-gcut-process.lo test_gcut_process_la_OBJECTS = $(am_test_gcut_process_la_OBJECTS) test_gcut_string_io_channel_la_LIBADD = am_test_gcut_string_io_channel_la_OBJECTS = \ test-gcut-string-io-channel.lo test_gcut_string_io_channel_la_OBJECTS = \ $(am_test_gcut_string_io_channel_la_OBJECTS) test_gcut_string_la_LIBADD = am_test_gcut_string_la_OBJECTS = test-gcut-string.lo test_gcut_string_la_OBJECTS = $(am_test_gcut_string_la_OBJECTS) test_gcut_test_utils_la_LIBADD = am_test_gcut_test_utils_la_OBJECTS = test-gcut-test-utils.lo test_gcut_test_utils_la_OBJECTS = \ $(am_test_gcut_test_utils_la_OBJECTS) test_gcut_types_la_LIBADD = am_test_gcut_types_la_OBJECTS = test-gcut-types.lo test_gcut_types_la_OBJECTS = $(am_test_gcut_types_la_OBJECTS) test_gcut_value_equal_la_LIBADD = am_test_gcut_value_equal_la_OBJECTS = test-gcut-value-equal.lo test_gcut_value_equal_la_OBJECTS = \ $(am_test_gcut_value_equal_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(test_gcut_assertions_helper_la_SOURCES) \ $(test_gcut_assertions_la_SOURCES) \ $(test_gcut_dynamic_data_la_SOURCES) \ $(test_gcut_egg_la_SOURCES) $(test_gcut_enum_la_SOURCES) \ $(test_gcut_hash_table_la_SOURCES) \ $(test_gcut_inspect_la_SOURCES) $(test_gcut_io_la_SOURCES) \ $(test_gcut_key_file_la_SOURCES) $(test_gcut_list_la_SOURCES) \ $(test_gcut_object_la_SOURCES) $(test_gcut_process_la_SOURCES) \ $(test_gcut_string_io_channel_la_SOURCES) \ $(test_gcut_string_la_SOURCES) \ $(test_gcut_test_utils_la_SOURCES) \ $(test_gcut_types_la_SOURCES) \ $(test_gcut_value_equal_la_SOURCES) DIST_SOURCES = $(test_gcut_assertions_helper_la_SOURCES) \ $(test_gcut_assertions_la_SOURCES) \ $(test_gcut_dynamic_data_la_SOURCES) \ $(test_gcut_egg_la_SOURCES) $(test_gcut_enum_la_SOURCES) \ $(test_gcut_hash_table_la_SOURCES) \ $(test_gcut_inspect_la_SOURCES) $(test_gcut_io_la_SOURCES) \ $(test_gcut_key_file_la_SOURCES) $(test_gcut_list_la_SOURCES) \ $(test_gcut_object_la_SOURCES) $(test_gcut_process_la_SOURCES) \ $(test_gcut_string_io_channel_la_SOURCES) \ $(test_gcut_string_la_SOURCES) \ $(test_gcut_test_utils_la_SOURCES) \ $(test_gcut_types_la_SOURCES) \ $(test_gcut_value_equal_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/test/lib/libcuttest-utils.la \ $(GLIB_LIBS) LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/test/lib AM_CFLAGS = $(CUTTER_CFLAGS) CLEANFILES = *.gcno *.gcda check_LTLIBRARIES = \ test-gcut-assertions.la \ test-gcut-assertions-helper.la \ test-gcut-test-utils.la \ test-gcut-hash-table.la \ test-gcut-enum.la \ test-gcut-object.la \ test-gcut-list.la \ test-gcut-string.la \ test-gcut-string-io-channel.la \ test-gcut-egg.la \ test-gcut-process.la \ test-gcut-io.la \ test-gcut-key-file.la \ test-gcut-inspect.la \ test-gcut-dynamic-data.la \ test-gcut-value-equal.la \ test-gcut-types.la AM_LDFLAGS = \ -module \ -rpath `pwd`/.libs \ -avoid-version \ -no-undefined test_gcut_assertions_la_SOURCES = test-gcut-assertions.c test_gcut_assertions_helper_la_SOURCES = test-gcut-assertions-helper.c test_gcut_test_utils_la_SOURCES = test-gcut-test-utils.c test_gcut_hash_table_la_SOURCES = test-gcut-hash-table.c test_gcut_enum_la_SOURCES = test-gcut-enum.c test_gcut_object_la_SOURCES = test-gcut-object.c test_gcut_list_la_SOURCES = test-gcut-list.c test_gcut_string_la_SOURCES = test-gcut-string.c test_gcut_string_io_channel_la_SOURCES = test-gcut-string-io-channel.c test_gcut_egg_la_SOURCES = test-gcut-egg.c test_gcut_process_la_SOURCES = test-gcut-process.c test_gcut_io_la_SOURCES = test-gcut-io.c test_gcut_key_file_la_SOURCES = test-gcut-key-file.c test_gcut_inspect_la_SOURCES = test-gcut-inspect.c test_gcut_dynamic_data_la_SOURCES = test-gcut-dynamic-data.c test_gcut_value_equal_la_SOURCES = test-gcut-value-equal.c test_gcut_types_la_SOURCES = test-gcut-types.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/gcutter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/gcutter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done test-gcut-assertions-helper.la: $(test_gcut_assertions_helper_la_OBJECTS) $(test_gcut_assertions_helper_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_assertions_helper_la_OBJECTS) $(test_gcut_assertions_helper_la_LIBADD) $(LIBS) test-gcut-assertions.la: $(test_gcut_assertions_la_OBJECTS) $(test_gcut_assertions_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_assertions_la_OBJECTS) $(test_gcut_assertions_la_LIBADD) $(LIBS) test-gcut-dynamic-data.la: $(test_gcut_dynamic_data_la_OBJECTS) $(test_gcut_dynamic_data_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_dynamic_data_la_OBJECTS) $(test_gcut_dynamic_data_la_LIBADD) $(LIBS) test-gcut-egg.la: $(test_gcut_egg_la_OBJECTS) $(test_gcut_egg_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_egg_la_OBJECTS) $(test_gcut_egg_la_LIBADD) $(LIBS) test-gcut-enum.la: $(test_gcut_enum_la_OBJECTS) $(test_gcut_enum_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_enum_la_OBJECTS) $(test_gcut_enum_la_LIBADD) $(LIBS) test-gcut-hash-table.la: $(test_gcut_hash_table_la_OBJECTS) $(test_gcut_hash_table_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_hash_table_la_OBJECTS) $(test_gcut_hash_table_la_LIBADD) $(LIBS) test-gcut-inspect.la: $(test_gcut_inspect_la_OBJECTS) $(test_gcut_inspect_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_inspect_la_OBJECTS) $(test_gcut_inspect_la_LIBADD) $(LIBS) test-gcut-io.la: $(test_gcut_io_la_OBJECTS) $(test_gcut_io_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_io_la_OBJECTS) $(test_gcut_io_la_LIBADD) $(LIBS) test-gcut-key-file.la: $(test_gcut_key_file_la_OBJECTS) $(test_gcut_key_file_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_key_file_la_OBJECTS) $(test_gcut_key_file_la_LIBADD) $(LIBS) test-gcut-list.la: $(test_gcut_list_la_OBJECTS) $(test_gcut_list_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_list_la_OBJECTS) $(test_gcut_list_la_LIBADD) $(LIBS) test-gcut-object.la: $(test_gcut_object_la_OBJECTS) $(test_gcut_object_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_object_la_OBJECTS) $(test_gcut_object_la_LIBADD) $(LIBS) test-gcut-process.la: $(test_gcut_process_la_OBJECTS) $(test_gcut_process_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_process_la_OBJECTS) $(test_gcut_process_la_LIBADD) $(LIBS) test-gcut-string-io-channel.la: $(test_gcut_string_io_channel_la_OBJECTS) $(test_gcut_string_io_channel_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_string_io_channel_la_OBJECTS) $(test_gcut_string_io_channel_la_LIBADD) $(LIBS) test-gcut-string.la: $(test_gcut_string_la_OBJECTS) $(test_gcut_string_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_string_la_OBJECTS) $(test_gcut_string_la_LIBADD) $(LIBS) test-gcut-test-utils.la: $(test_gcut_test_utils_la_OBJECTS) $(test_gcut_test_utils_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_test_utils_la_OBJECTS) $(test_gcut_test_utils_la_LIBADD) $(LIBS) test-gcut-types.la: $(test_gcut_types_la_OBJECTS) $(test_gcut_types_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_types_la_OBJECTS) $(test_gcut_types_la_LIBADD) $(LIBS) test-gcut-value-equal.la: $(test_gcut_value_equal_la_OBJECTS) $(test_gcut_value_equal_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(test_gcut_value_equal_la_OBJECTS) $(test_gcut_value_equal_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-assertions-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-assertions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-dynamic-data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-egg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-enum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-hash-table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-inspect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-key-file.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-list.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-object.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-string-io-channel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-string.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-test-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-types.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gcut-value-equal.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) 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-am clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkLTLIBRARIES clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # 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: cutter-testing-framework-1.1.7/test/gcutter/Makefile.am0000644000175000017500000000340411424022520021333 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter \ -I$(top_srcdir)/gcutter \ -I$(top_srcdir)/test/lib AM_CFLAGS = $(CUTTER_CFLAGS) CLEANFILES = *.gcno *.gcda check_LTLIBRARIES = \ test-gcut-assertions.la \ test-gcut-assertions-helper.la \ test-gcut-test-utils.la \ test-gcut-hash-table.la \ test-gcut-enum.la \ test-gcut-object.la \ test-gcut-list.la \ test-gcut-string.la \ test-gcut-string-io-channel.la \ test-gcut-egg.la \ test-gcut-process.la \ test-gcut-io.la \ test-gcut-key-file.la \ test-gcut-inspect.la \ test-gcut-dynamic-data.la \ test-gcut-value-equal.la \ test-gcut-types.la AM_LDFLAGS = \ -module \ -rpath `pwd`/.libs \ -avoid-version \ -no-undefined LIBS = \ $(top_builddir)/cutter/libcutter.la \ $(top_builddir)/test/lib/libcuttest-utils.la \ $(GLIB_LIBS) test_gcut_assertions_la_SOURCES = test-gcut-assertions.c test_gcut_assertions_helper_la_SOURCES = test-gcut-assertions-helper.c test_gcut_test_utils_la_SOURCES = test-gcut-test-utils.c test_gcut_hash_table_la_SOURCES = test-gcut-hash-table.c test_gcut_enum_la_SOURCES = test-gcut-enum.c test_gcut_object_la_SOURCES = test-gcut-object.c test_gcut_list_la_SOURCES = test-gcut-list.c test_gcut_string_la_SOURCES = test-gcut-string.c test_gcut_string_io_channel_la_SOURCES = test-gcut-string-io-channel.c test_gcut_egg_la_SOURCES = test-gcut-egg.c test_gcut_process_la_SOURCES = test-gcut-process.c test_gcut_io_la_SOURCES = test-gcut-io.c test_gcut_key_file_la_SOURCES = test-gcut-key-file.c test_gcut_inspect_la_SOURCES = test-gcut-inspect.c test_gcut_dynamic_data_la_SOURCES = test-gcut-dynamic-data.c test_gcut_value_equal_la_SOURCES = test-gcut-value-equal.c test_gcut_types_la_SOURCES = test-gcut-types.c cutter-testing-framework-1.1.7/test/gcutter/test-gcut-types.c0000644000175000017500000000212711400051174022526 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include void test_error(void); void test_size(void); void test_error (void) { cut_assert_equal_string("GError", g_type_name(GCUT_TYPE_ERROR)); } void test_size (void) { cut_assert_equal_string("gsize", g_type_name(GCUT_TYPE_SIZE)); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-assertions-helper.c0000644000175000017500000000675311205747030025050 0ustar koukou#include #include void test_take_g_object(void); void test_take_g_list(void); #define CUT_TYPE_SIMPLE_OBJECT (cut_simple_object_get_type ()) #define CUT_SIMPLE_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_SIMPLE_OBJECT, CutSimpleObject)) #define CUT_SIMPLE_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_SIMPLE_OBJECT, CutSimpleObjectClass)) #define CUT_IS_SIMPLE_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_SIMPLE_OBJECT)) #define CUT_IS_SIMPLE_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_SIMPLE_OBJECT)) #define CUT_SIMPLE_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_SIMPLE_OBJECT, CutSimpleObjectClass)) typedef struct _CutSimpleObject CutSimpleObject; typedef struct _CutSimpleObjectClass CutSimpleObjectClass; struct _CutSimpleObject { GObject object; }; struct _CutSimpleObjectClass { GObjectClass parent_class; }; GType cut_simple_object_get_type (void) G_GNUC_CONST; G_DEFINE_TYPE(CutSimpleObject, cut_simple_object, G_TYPE_OBJECT) static void cut_simple_object_class_init (CutSimpleObjectClass *klass) { } static void cut_simple_object_init (CutSimpleObject *object) { } static CutTest *test; static CutRunContext *run_context; static CutTestContext *test_context; static CutTestResult *test_result; static GObject *object; static gboolean destroyed; static GList *list; static gboolean run (void) { gboolean success; run_context = CUT_RUN_CONTEXT(cut_test_runner_new()); test_context = cut_test_context_new(run_context, NULL, NULL, NULL, test); cut_test_context_current_push(test_context); success = cut_test_run(test, test_context, run_context); cut_test_context_current_pop(); return success; } void cut_setup (void) { test = NULL; run_context = NULL; test_context = NULL; test_result = NULL; object = NULL; destroyed = FALSE; list = NULL; } void cut_teardown (void) { if (test) g_object_unref(test); if (run_context) g_object_unref(run_context); if (test_context) g_object_unref(test_context); if (test_result) g_object_unref(test_result); if (list) g_list_free(list); } static void stub_take_g_object (void) { gcut_take_object(object); } static void check_unref (gpointer data, GObject *where_the_object_was) { gboolean *unrefed = data; *unrefed = TRUE; } void test_take_g_object (void) { gboolean unrefed = FALSE; object = g_object_new(CUT_TYPE_SIMPLE_OBJECT, NULL); cut_assert(object); g_object_weak_ref(object, check_unref, &unrefed); test = cut_test_new("cut_take_g_object test", stub_take_g_object); cut_assert_not_null(test); cut_assert_false(unrefed); cut_assert_true(run()); cut_assert_false(unrefed); g_object_unref(test_context); test_context = NULL; cut_assert_true(unrefed); } static void list_value_free (gpointer value) { destroyed = TRUE; } static void stub_take_g_list (void) { gcut_take_list(list, list_value_free); } void test_take_g_list (void) { list = g_list_prepend(list, GINT_TO_POINTER(100)); test = cut_test_new("cut_take_g_list test", stub_take_g_list); cut_assert_not_null(test); cut_assert_false(destroyed); cut_assert_true(run()); cut_assert_false(destroyed); g_object_unref(test_context); test_context = NULL; cut_assert_true(destroyed); list = NULL; } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/test/gcutter/test-gcut-object.c0000644000175000017500000000507611205747030022644 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ #include #include #include void test_equal (void); void test_inspect (void); void test_inspect_null (void); void test_inspect_custom (void); static GObject *object; static GObject *object1, *object2; static gchar *inspected; void cut_setup (void) { object = NULL; object1 = NULL; object2 = NULL; inspected = NULL; } void cut_teardown (void) { if (object) g_object_unref(object); if (object1) g_object_unref(object1); if (object2) g_object_unref(object2); if (inspected) g_free(inspected); } static gboolean name_equal (gconstpointer object1, gconstpointer object2) { return g_str_equal(cut_test_get_name(CUT_TEST(object1)), cut_test_get_name(CUT_TEST(object2))); } static gboolean always_false (gconstpointer object1, gconstpointer object2) { return FALSE; } void test_equal (void) { object1 = G_OBJECT(cut_test_new("test", NULL)); object2 = G_OBJECT(cut_test_new("test", NULL)); cut_assert_true(gcut_object_equal(NULL, NULL, NULL)); cut_assert_true(gcut_object_equal(object1, object1, NULL)); cut_assert_true(gcut_object_equal(object2, object2, NULL)); cut_assert_false(gcut_object_equal(object1, NULL, NULL)); cut_assert_false(gcut_object_equal(NULL, object2, NULL)); cut_assert_true(gcut_object_equal(object1, object2, name_equal)); cut_assert_false(gcut_object_equal(object1, object2, always_false)); } void test_inspect (void) { object = G_OBJECT(cut_loader_new("so-file")); inspected = gcut_object_inspect(object); cut_assert_equal_string(cut_take_printf("#, " "base-directory=>", object), inspected); } void test_inspect_null (void) { inspected = gcut_object_inspect(NULL); cut_assert_equal_string("(null)", inspected); } static void custom_inspect (GString *string, gconstpointer data, gpointer user_data) { gchar *message = user_data; g_string_append_printf(string, "%s: %s", G_OBJECT_TYPE_NAME(data), message); } void test_inspect_custom (void) { object = G_OBJECT(cut_loader_new("so-file")); inspected = gcut_object_inspect_custom(object, custom_inspect, "user-data"); cut_assert_equal_string("CutLoader: user-data", inspected); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/Makefile.am0000644000175000017500000000633511523771623016724 0ustar koukouACLOCAL_AMFLAGS = -I acmacros -I m4macros $$ACLOCAL_OPTIONS SUBDIRS = \ m4macros \ glib-compatible \ gcutter \ cutter \ cppcutter \ gdkcutter-pixbuf \ soupcutter \ module \ data \ test \ sample \ gst-plugins \ po \ misc \ license \ doc \ html \ vcc \ apt \ yum pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = \ cutter.pc \ gcutter.pc \ cppcutter.pc \ libcutter.pc if HAVE_GDK_PIXBUF pkgconfig_DATA += gdkcutter-pixbuf.pc endif if HAVE_LIBSOUP pkgconfig_DATA += soupcutter.pc endif EXTRA_DIST = \ autogen.sh \ config.h.in \ TUTORIAL \ TUTORIAL.ja \ README.ja \ NEWS \ NEWS.ja \ FEATURES \ FEATURES.ja \ USERS \ USERS.ja upload: upload-doc release: dist release-official release-debian release-official: $(srcdir)/misc/release.rb \ $(SF_USER) $(SF_PROJECT_ID) $(SF_PROJECT_NAME) \ $(PACKAGE_NAME) $(VERSION) README NEWS \ $(PACKAGE)-$(VERSION).tar.gz \ $(PACKAGE)-$(VERSION).zip release-debian: rm -rf tmp mkdir -p tmp tar xfz $(PACKAGE)-$(VERSION).tar.gz -C tmp mv tmp/$(PACKAGE)-$(VERSION) tmp/$(PACKAGE)-testing-framework-$(VERSION) tar cfz tmp/$(PACKAGE)-testing-framework-$(VERSION).tar.gz \ -C tmp \ $(PACKAGE)-testing-framework-$(VERSION) mkdir -p tmp/archives/debian/ echo "Options +Indexes" > tmp/archives/.htaccess mv tmp/$(PACKAGE)-testing-framework-$(VERSION).tar.gz \ tmp/archives/debian/ rsync -avz tmp/archives $(SF_HTDOCS)/ upload-doc: cd html && $(MAKE) $(AM_MAKEFLAGS) upload cd doc/reference && $(MAKE) $(AM_MAKEFLAGS) upload update-po: cd $(top_srcdir) && \ (find cutter -name '*.c'; \ find gcutter -name '*.c'; \ find cppcutter -name '*.c'; \ find gdkcutter-pixbuf -name '*.c'; \ find soupcutter -name '*.c'; \ find module -name '*.c'; \ find glib-compatible -name '*.c') | \ grep -v cut-marshalers.c | \ sort > po/POTFILES.in cd po && $(MAKE) $(AM_MAKEFLAGS) update-po cd doc/reference && $(MAKE) $(AM_MAKEFLAGS) update-po update-latest-release: @if test -z "$(OLD_RELEASE)"; then \ echo "\$$(OLD_RELEASE) is missing"; \ exit 1; \ fi @if test -z "$(OLD_RELEASE_DATE)"; then \ echo "\$$(OLD_RELEASE_DATE) is missing"; \ exit 1; \ fi @if test -z "$(NEW_RELEASE_DATE)"; then \ echo "\$$(NEW_RELEASE_DATE) is missing"; \ exit 1; \ fi cd $(top_srcdir) && \ misc/update-latest-release.rb \ $(PACKAGE) \ $(OLD_RELEASE) $(OLD_RELEASE_DATE) \ $(VERSION) $(NEW_RELEASE_DATE) \ rpm/fedora/cutter.spec.in \ rpm/centos/cutter.spec.in \ debian/changelog \ html/index.html \ html/index.html.ja \ doc/reference/header.html \ doc/reference/header-ja.html \ doc/install-to-cygwin.rd \ doc/install-to-cygwin.rd.ja \ doc/install-to-freebsd.rd \ doc/install-to-freebsd.rd.ja \ doc/install-to-others.rd \ doc/install-to-others.rd.ja \ doc/install-to-solaris.rd \ doc/install-to-solaris.rd.ja tag: svn ls $(SF_REPOS)/tags/$(VERSION) > /dev/null 2>&1; \ if test "$$?" = "0"; then \ echo "$(VERSION) is already tagged"; \ exit 1; \ fi svn cp -m "released $(VERSION)!!!" $(SF_USER_OPTION) \ $(SF_REPOS)/trunk $(SF_REPOS)/tags/$(VERSION) cutter-testing-framework-1.1.7/acmacros/0000755000175000017500000000000011525707410016444 5ustar koukoucutter-testing-framework-1.1.7/acmacros/ltsugar.m40000644000175000017500000001042411345735715020401 0ustar koukou# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # 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 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) cutter-testing-framework-1.1.7/acmacros/ltoptions.m40000644000175000017500000002724211345735714020760 0ustar koukou# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # 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 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [0], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) cutter-testing-framework-1.1.7/acmacros/ltversion.m40000644000175000017500000000127711345735715020753 0ustar koukou# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # 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. # Generated from ltversion.in. # serial 3017 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.2.6b]) m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) cutter-testing-framework-1.1.7/acmacros/libtool.m40000644000175000017500000077464711345735714020413 0ustar koukou# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written 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. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 56 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl _LT_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\[$]0 --fallback-echo"')dnl " lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` ;; esac _LT_OUTPUT_LIBTOOL_INIT ]) # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) cat >"$CONFIG_LT" <<_LTEOF #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. lt_cl_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2008 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. if test "$no_create" != yes; then lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) fi ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_XSI_SHELLFNS sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES # -------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(whole_archive_flag_spec, $1)='' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX # ----------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. m4_defun([_LT_PROG_ECHO_BACKSLASH], [_LT_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac ECHO=${lt_ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF [$]* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(lt_ECHO) ]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that does not interpret backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1]) AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line __oline__ "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[123]]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method == "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= 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 ;; linux* | k*bsd*-gnu) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # 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. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=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 exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi 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 exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ 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 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; 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. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE(int foo(void) {}, _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ) LDFLAGS="$save_LDFLAGS" else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then _LT_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], [[If ld is used when linking, flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [fix_srcfile_path], [1], [Fix the shell variable $srcfile for the compiler]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_PROG_CXX # ------------ # Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ # compiler, we have our own version here. m4_defun([_LT_PROG_CXX], [ pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) AC_PROG_CXX if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_CXX dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_CXX], []) # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [AC_REQUIRE([_LT_PROG_CXX])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; 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 exp_sym_flag='-Bexport' no_entry_flag="" 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 case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ 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 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[[12]]*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ]) dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_PROG_F77 # ------------ # Since AC_PROG_F77 is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_F77], [ pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) AC_PROG_F77 if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_F77 dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_F77], []) # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_REQUIRE([_LT_PROG_F77])dnl AC_LANG_PUSH(Fortran 77) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${F77-"f77"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_PROG_FC # ----------- # Since AC_PROG_FC is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_FC], [ pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) AC_PROG_FC if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_FC dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_FC], []) # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_REQUIRE([_LT_PROG_FC])dnl AC_LANG_PUSH(Fortran) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${FC-"f95"} compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC="$lt_save_CC" ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC= CC=${RC-"windres"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC="$lt_save_CC" ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_XSI_SHELLFNS # --------------------- # Bourne and XSI compatible variants of some useful shell functions. m4_defun([_LT_PROG_XSI_SHELLFNS], [case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $[*] )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } dnl func_dirname_and_basename dnl A portable version of this function is already defined in general.m4sh dnl so there is no need for it here. # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[[^=]]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$[@]"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]+=\$[2]" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]=\$$[1]\$[2]" } _LT_EOF ;; esac ]) cutter-testing-framework-1.1.7/acmacros/lt~obsolete.m40000644000175000017500000001311311345735715021270 0ustar koukou# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # 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 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) cutter-testing-framework-1.1.7/acmacros/intltool.m40000644000175000017500000002421511345735715020567 0ustar koukou## intltool.m4 - Configure intltool for the target system. -*-Shell-script-*- ## Copyright (C) 2001 Eazel, Inc. ## Author: Maciej Stachowiak ## Kenneth Christiansen ## ## 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. dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 40 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` ] AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`" AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be exetuted at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) cutter-testing-framework-1.1.7/FEATURES0000644000175000017500000002034211273747134016025 0ustar koukou# -*- rd -*- = Features --- What can be done with Cutter == Introduction Cutter has basic features of a unit testing framework: * Fixture * No test registration code * Result output with useful format for debugging * Many assertions Cutter also has many useful advanced features: * Cross platform * Data-Driven Testing support * Coverage support * Backtrace on crash * Serialize/deserialize test result * Multi-process/multi-thread support * Image diff * ... == Basic This section explains how Cutter provides features that are considered about basic unit testing framework features. === Fixture Fixture in a unit testing framework is a mechanism that set up test data before each test. It is usually implemented by executing setup/teardown process. See also (()). In Cutter, if cut_setup()/cut_teardown() functions are defined in a test program like the following, their functions are treated as setup/teardown processes: void cut_setup (void) { /* set up test data */ } void cut_teardown (void) { /* tear down test data */ } Cutter also supports cut_startup()/cut_shutdown() functions that are called on each test case starting/completing: void cut_startup (void) { /* set up the test case */ } void cut_shutdown (void) { /* tear down the test case*/ } Their functions are called the following order: * cut_startup() * cut_setup() * run test1 * cut_teardown() * cut_setup() * run test2 * cut_teardown() * ... * cut_shutdown() Cutter also supports functions that are called on all test starting/completing as experimental features. Their functions are called warmup/cooldown. Here is the call order: * run warmup * cut_startup() of test case1 * cut_setup() of test case1 * run test1-1 * cut_teardown() of test case1 * cut_setup() of test case1 * run test1-2 * cut_teardown() of test case1 * ... * cut_shutdown() of test case1 * cut_startup() of test case2 * cut_setup() of test case2 * run test2-1 * cut_teardown() of test case2 * cut_setup() of test case2 * run test2-2 * cut_teardown() of test case2 * ... * cut_shutdown() of test case1 * ... * run cooldown The last two functions are useful for testing a library that has initialize/finalize functions of itself. But they are experimental features. So explanation of their usage is omitted. If you want to use them, please contact us. === No test registration code Most of unit testing frameworks for dynamic languages doesn't require that users register their tests. Tests are found by frameworks and ran. But most of unit testing frameworks for C require that users register their tests. Cutter finds test functions automatically like frameworks for dynamic languages to write tests easily. Public functions that their name starts with "test_" are recognized as test functions. Here is a sample test function definition: void test_my_function (void); void test_my_function (void) { /* a test function */ } === Result output with useful format for debugging Cutter outputs a test result to confirm and fix a problem quickly. In particular Cutter outputs * no problem parts simply and * problem parts verbosely. Cutter outputs no problem parts simply (they may not be displayed) to avoid important parts are buried. Cutter outputs information of problem parts as many as possible to provide users information to judge what is a problem. For example, we assume that an expected string and an actual string are different on string equality check test. Cutter arranges and displays the expected string and the actual string to confirm difference between them easily: expected: but was: If their aren't arranged or displayed in the same line, it's difficult to find difference between them: expected: but was: is expected but was Cutter also outputs diff between the expected string and the actual string to show where is different explicitly: expected: but was: diff: - abc def ghi jkl ? ^^^ + abc DEF ghi jkl ? ^^^ Cutter strongly helps us to confirm a problem on test failure as mentioned above. === Many assertions (()) based unit testing frameworks provides assertions to assert test target works as we had expected. For example, many frameworks provides assertions like the followings: * assert: asserts that target is true value * assert_equal: asserts that an actual value equals an expected value In Cutter, the following assertions are corresponding the above assertions: * cut_assert() * cut_assert_true(): asserts same as cut_assert() but it clearly specifies "true value" (Cutter recommends to use it because it's self-describing rather than cut_assert()) * cut_assert_equal_int() * cut_assert_equal_uint() * cut_assert_equal_string() * ... Cutter also provides many built-in assertions than common assertions as mentioned above to write tests easily. For example, Cutter provides built-in assertions like the followings: * cut_assert_errno(): asserts that errno is 0 * cut_assert_match(): asserts that an expected string matches an actual string * cut_assert_path_exist(): asserts that specified path exists * ... See (()) and (()) in the reference manual for assertion list. == Advanced This section explains how Cutter provides features that are provided by a few unit testing frameworks or not provided any unit testing frameworks. === Cross platform For now, Cutter works on the following platforms: * GNU/Linux * FreeBSD * Mac OS X * Windows (MinGW) === Data-Driven Testing support There is a testing method called (()). Cutter supports Data-Driven Testing. See (()) for writing a data-driven test. Data-driven tests are executed by the following order: * call data setup function * cut_setup() * run test with test data1 * cut_teardown() * cut_setup() * run test with test data2 * cut_teardown() * ... === Coverage support (()) is a measure for how code is tested cyclopaedically. Cutter provides a M4 macro to help us measuring code coverage. If you use GNU Autoconf/GNU Automake, you can add code coverage support into your build system easily. See about AC_CHECK_COVERAGE in (()) and (()). === Backtrace on crash It's natural that a program written in C and/or C++crashes. Cutter tries to retrieve a backtrace on SEGV signal is raised. If a backtrace is retrieved, Cutter outputs it and exit. Of course Cutter cannot always retrieve a backtrace because the test process is broken. To check details of a problem, we need to use a debugger like GDB. But we can use a backtrace as the first step. === Serialize/deserialize test result There are some methods to confirm how high software's quality: * measuring transition between test status and number of found bugs. * measuring transition between test status and number of reported bugs. * measuring transition between test status and source code size. For example, if number of tests are grown but number of found bugs aren't grown, we may be doing inefficient test or software quality might be high without test. If number of tests are grown but number of reported bugs are grown, we may be testing irrelevance points. If source code size is grown but number of tests aren't grown, we may lazy. We can analyze software development status with test result logs in chronological order not just the current test result. We may use analyzed result to improve software quality. Cutter can save a test result to a file as XML. Cutter can also read saved XML and restore a test result. Cutter will provide a feature that charts test result logs. cutter-testing-framework-1.1.7/TUTORIAL.ja0000644000175000017500000016103211525642526016444 0ustar koukou# -*- rd -*- = チュートリアル --- Cutterの使い方 Copyright (C) 2007-2011 Kouhei Sutou : ライセンス (())と (())と (()) のトリプルライセンス。 == はじめに スタックを実現するプログラム(ライブラリ)をC言語で作成する。 プログラム作成はテストを作成しながら行う。テストの作成にはC 言語用のテスティングフレームワークであるCutterを用いる。 プログラムのビルドシステムにはGNUビルドシステム(GNU Autoconf/GNU Automake/GNU Libtool)を使用する。GNUビルドシス テムはビルド環境の差異を吸収する。これによりプログラム・テス トを複数の環境で容易にビルドできるようになる。 大きなコストをかけずにプログラム本体が複数の環境で動作するの であれば、その方がよい。さらにテストもその環境で動作するのな らば、プログラム本体がその環境で正しく動作することを容易に検 証できる。プログラム本体だけではなく、テストも複数の環境で容 易に動作することは重要である。 Cutterが依存しているライブラリはGLibのみである。GLibはUNIX系 のシステムだけではなく、WindowsやMac OS X上でも動作する移植 性の高いライブラリである。CutterはGLibを利用することにより移 植性の高い状態を保ちつつ豊富なテスト支援機能を提供するxUnit 系のテスティングフレームワークである。 以下、スタックを作成しながらCutterの使い方について述べる。 なお、Cutterはインストールされているものとする。 このプログラムのソースコード一式はsample/stack/以下にある。 == ディレクトリ構成 まず、プログラムを作成するためのディレクトリを用意する。ディ レクトリはstackとする。 % mkdir -p /tmp/stack % cd /tmp/stack 続いて、stack/ディレクトリ以下にビルド補助ファイル用ディレク トリconfig/、プログラム用ディレクトリsrc/、テストプログラム用 ディレクトリtest/を作成する。 [stack]% mkdir config src test つまり、ディレクトリ構成は以下のようになる。 stack/ -+- config/ ビルド補助用ディレクトリ | +- src/ ソースファイル用ディレクトリ | +- test/ テストプログラム用ディレクトリ == GNUビルドシステム化 GNUビルドシステムでは、コマンドを実行し、いくつかのファイルを 自動生成する。これらのコマンドは、autogen.shというシェルスク リプトを作成し、そこから呼び出すのが一般的である。ここでも、 その慣習に従う。 autogen.sh: #!/bin/sh run() { $@ if test $? -ne 0; then echo "Failed $@" exit 1 fi } run aclocal ${ACLOCAL_ARGS} run libtoolize --copy --force run autoheader run automake --add-missing --foreign --copy run autoconf autogen.shに実行権を付けることを忘れないこと。 [stack]% chmod +x autogen.sh run()はコマンドの実行結果を確認するための便利のための関数で ある。実行しているコマンドはそれぞれ以下のためである。 * aclocal: Automakeが利用するマクロをaclocal.m4に集める * libtoolize: libtoolを使用するために必要なファイルを用意 * autoheader: configureスクリプトが利用するconfig.h.inファイルを作成 * automake: configureスクリプトが利用するMakefile.inを生成 * autoconf: configureスクリプトを生成 もし、Cutterをaclocalと異なるprefixでインストールしている場合 はACLOCAL_ARGS環境変数を指定する。この環境変数はautogen.sh内 で参照している。ここでは、prefixを$HOME/localとしてCutterをイ ンストールしたものとする。 [stack]% export ACLOCAL_ARGS="-I $HOME/local/share/aclocal" この時点でautogen.shを実行すると以下のようになる。 [stack]% ./autogen.sh aclocal: `configure.ac' or `configure.in' is required Failed aclocal Autoconf用のファイルであるconfigure.acを用意する必要がある。 === configure.ac autogen.shのための最低限のconfigure.acは以下の通りである。 configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL AC_CONFIG_FILES([Makefile]) AC_OUTPUT configure.acを用意してもう一度autogen.shを実行すると以下のよ うになる。 [stack]% ./autogen.sh Putting files in AC_CONFIG_AUX_DIR, `config'. configure.ac:7: installing `config/install-sh' configure.ac:7: installing `config/missing' automake: no `Makefile.am' found for any configure output Failed automake --add-missing --foreign --copy 今度はAutomakeのためにMakefile.amを用意する必要がある。 === Makefile.am autogen.shのためだけであれば空のMakefile.amで構わない。 [stack]% touch Makefile.am [stack]% ./autogen.sh Putting files in AC_CONFIG_AUX_DIR, `config'. これでconfigureスクリプトが生成される。この時点で一般的なソ フトウェアのようにconfigure; make; make installができるよう になる。 [stack]% ./configure ... [stack]% make [stack]% make install ただし、ビルドするものもインストールするものも何もないため、 今は何も起きない。 == はじめてのテスト作成 最低限のビルド環境が整ったので、テストの作成にはいる。まずは、 新しく作ったばかりのスタックは空であることをテストする。コー ドにすると以下の通りである。 void test_new_stack (void) { Stack *stack; stack = stack_new(); if (stack_is_empty(stack)) PASS; else FAIL; } ここでは、上記のテストをCutterのテストとして動作させる。 === テストプログラムの作成 テストプログラムはtest/以下に作成する。ここでは test/test-stack.cとして作成するものとする。 まず、Cutterを使うためにcutter.hをincludeする。 test/test-stack.c: #include また、テスト対象のスタックの実装のAPIが書かれているstack.hも includeする。(stack.hは後で作成する。) test/test-stack.c: #include 続いて、このスタックのAPIを用いてテストを作成する。 test/test-stack.c: void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); } cut_assert()は引数が0ならテストが失敗、0以外ならテストが成功 と判断するマクロである。Cutterのテストとはcut_XXX()マクロを使 用して、特定の状況で望んだ動作をしているかを検証するプログラ ムを作成するということである。 以下に、「作成したばかりのスタックは空である」ということを検 証するテストのソースコード全体を示す。 test/test-stack.c: #include #include void test_new_stack (void); void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); } === テストのビルド Cutterの各テストは共有ライブラリになる。上記で作成したテスト を共有ライブラリとしてビルドするために、Makefile.amを変更す る。 ==== test/以下でのビルド設定 現在のMakefile.amは空である。 まず、make経由でaclocalが実行された場合にもautogen.sh用に設 定したACLOCAL_ARGS環境変数が使われるように以下を追記する。 Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS 次に、サブディレクトリであるtest/以下のtest/test-stack.cをビ ルドするためにはMakefile.amにtest/以下がサブディレクトリとし て存在することを指定する。 Makefile.am: ... SUBDIRS = test Makefile.amを変更した後にmakeを実行すると、makeがMakefile.am の変更を検出し、Makefileなどを自動的に更新する。 [stack]% make cd . && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign Makefile cd . && /bin/sh ./config.status Makefile config.status: creating Makefile Making all in test make[1]: ディレクトリ `/tmp/stack/test' に入ります make[1]: *** ターゲット `all' を make するルールがありません. 中止. make[1]: ディレクトリ `/tmp/stack/test' から出ます make: *** [all-recursive] エラー 1 test/以下もビルドしにいこうとしているのがわかる。ただし、 test/Makefileがないためtest/以下でのビルドは失敗している。 test/以下でビルドを行うようにするため、test/Makefile.amを作成 する。また、configureがtest/Makefileを生成するように configure.acに指定する。 test/以下でのmakeが失敗しないようにするには、空の test/Makefile.amでもよい。 [stack]% touch test/Makefile.am あとはconfigure.acにtest/Makefileを生成するように指定すれば makeは通るようになる。 configure.ac: ... AC_CONFIG_FILES([Makefile test/Makefile]) ... 実際にmakeを実行すると自動で再びconfigureが走り、 test/Makefileが生成され、test/以下でのmakeが失敗しなくなる。 [stack]% make ... config.status: creating test/Makefile config.status: creating src/config.h config.status: src/config.h is unchanged config.status: executing depfiles commands Making all in test make[1]: ディレクトリ `/tmp/stack/test' に入ります make[1]: `all' に対して行うべき事はありません. make[1]: ディレクトリ `/tmp/stack/test' から出ます make[1]: ディレクトリ `/tmp/stack' に入ります make[1]: `all-am' に対して行うべき事はありません. make[1]: ディレクトリ `/tmp/stack' から出ます ==== test/test_stack.soのビルド それではtest/test-stack.cを共有ライブラリとしてビルドできる ようにtest/Makefile.amを編集する。テスト用の共有ライブラリは 「test_」から始まる名前にする(「test_」の前に「lib」が付い ても良い)。また、テストプログラムはインストールする必要がな いため「noinst_」を使う。 test/Makefile.am: noinst_LTLIBRARIES = test_stack.la テストの共有ライブラリはCutterが提供するテスト実行コマンド cutterから動的に読み込まれる。動的に読み込まれる共有ライブラ リは、libtoolに-moduleオプションを渡す必要がある。ま た、-moduleオプションを指定する場合-rpathも指定する必要がある。 そこで、LDFLAGSを以下のように指定する。-avoid-versionはテスト の共有ライブラリにはバージョン番号を付ける必要がないため指定 している。-no-undefinedは未定義のシンボルがある場合にエラーを 報告するオプションである。環境によっては-no-undefinedを指定し ないと共有ライブラリが作成されないため指定している。(例えば、 Windows上でDLLを作成する場合) test/Makefile.am: ... LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test/test_stack.laのビルド(test_stack.soはtest/.libs/以下に 作成される)にはtest/test-stack.cを使用するので、それを指定す る。 test/Makefile.am: ... test_stack_la_SOURCES = test-stack.c これでtest/test_stack.laがビルドできる。 [stack]% make ... cd .. && /bin/sh /tmp/stack/config/missing --run automake-1.10 --foreign test/Makefile test/Makefile.am: required file `config/depcomp' not found test/Makefile.am: `automake --add-missing' can install `depcomp' make[1]: *** [Makefile.in] エラー 1 ... config/depcompを生成するには--add-missingオプション付きで automakeを実行する必要がある。これにはautogen.shを使用できる。 また、configureを再実行する必要もある。 [stack]% ./autogen.sh [stack]% ./configure これでmakeを実行することによりtest/test_stack.laができるよう になる。 [stack]% make ... test-stack.c:1:20: error: cutter.h: そのようなファイルやディレクトリはありません test-stack.c:2:19: error: stack.h: そのようなファイルやディレクトリはありません test-stack.c: In function ‘test_new_stack’: test-stack.c:9: error: ‘Stack’ undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: ‘stack’ undeclared (first use in this function) make[1]: *** [test-stack.lo] エラー 1 make[1]: ディレクトリ `/tmp/stack/test' から出ます make: *** [all-recursive] エラー 1 ただし、上記のようにCutterを使用する設定を行っていないため cutter.hが読み込めない。また、スタックの実装もないため stack.hの読み込みにも失敗する。 ==== Cutterの使用 まずは、cutter.hを読み込めるようにする。Cutterはaclocal用のマ クロファイルを提供している。そのため、容易にGNUビルドシステム から利用することができる。 まず、configure.acにCutterを検出するコードを追加する。 configure.ac: ... AC_CHECK_CUTTER AC_CONFIG_FILES([Makefile test/Makefile]) ... また、test/Makefile.amでは検出したCutter用の設定を利用する。 test/Makefile.am: ... INCLUDES = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) ... 現時点での完全なconfigure.ac、Makefile.am、test/Makefile.amは 以下のようになる。 configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL AC_CHECK_CUTTER AC_CONFIG_FILES([Makefile test/Makefile]) AC_OUTPUT Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = test test/Makefile.am: noinst_LTLIBRARIES = test_stack.la INCLUDES = $(CUTTER_CFLAGS) LIBS = $(CUTTER_LIBS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c AC_CHECK_CUTTERマクロ内では一般的なパッケージ情報管理ツールで あるpkg-configを使用している。もし、Cutterをpkg-configと異な るprefixでインストールしている場合はPKG_CONFIG_PATH環境変数を 指定する。この環境変数はpkg-configが.pcファイルを検索するため に利用する。ここではprefixを$HOME/localとしてCutterをインストー ルしたものとする。 [stack]% export PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig 変更後、makeを実行すると自動的にconfigureが実行され、Cutter を利用したビルドが行われる。 [stack]% make ... test-stack.c:2:19: error: stack.h: そのようなファイルやディレクトリはありません test-stack.c: In function ‘test_new_stack’: test-stack.c:9: error: ‘Stack’ undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: ‘stack’ undeclared (first use in this function) make[1]: *** [test-stack.lo] エラー 1 make[1]: ディレクトリ `/tmp/stack/test' から出ます make: *** [all-recursive] エラー 1 cutter.hが読み込めないというエラーがなくなった。 ==== スタックAPIの作成 次はstack.hが読み込めないエラーを解消する。 スタックの実装はsrc/以下に作成するので、スタックのAPIである stack.hはsrc/stack.hに置く。 [stack]% touch src/stack.h インクルードパスを設定し、テストプログラムからstack.hを読み 込めるようにする。 test/Makefile.am: ... INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src ... makeを実行するとstack.hが読み込めないエラーが解消されている のが分かる。 [stack]% make ... test-stack.c: In function ‘test_new_stack’: test-stack.c:9: error: ‘Stack’ undeclared (first use in this function) test-stack.c:9: error: (Each undeclared identifier is reported only once test-stack.c:9: error: for each function it appears in.) test-stack.c:9: error: ‘stack’ undeclared (first use in this function) make[1]: *** [test-stack.lo] エラー 1 make[1]: ディレクトリ `/tmp/stack/test' から出ます make: *** [all-recursive] エラー 1 残りのエラーがStack型が宣言されていないことだけになった。 ==== Stack型の宣言 src/stack.hにStack型を宣言し、テストプログラムをビルドできる ようにする。 src/stack.h: #ifndef __STACK_H__ #define __STACK_H__ typedef struct _Stack Stack; #endif stack_new()が宣言されていないため警告がでるが共有ライブラリ を作成することはできる。 [stack]% make ... test-stack.c: In function ‘test_new_stack’: test-stack.c:10: warning: assignment makes pointer from integer without a cast ... [stack]% file test/.libs/test_stack.so test/.libs/test_stack.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 注: Cygwin上では未解決のシンボルがあるときは作成できない。 Cygwin環境の場合は気にせずに次に進むこと。 ==== stack_new()/stack_is_empty()の宣言 stack_new()、stack_is_empty()を宣言し、警告を解消する。 src/stack.h: ... Stack *stack_new (void); int stack_is_empty (Stack *stack); ... makeをして警告がでないことを確認する。 [stack]% make === テスト起動 共有ライブラリが作成できたので、cutterコマンドでこのテストを 起動できる。 [stack]% cutter test/ cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new stack_new()が定義されていないため読み込みに失敗するが、テス トプログラムが読み込まれることは確認できる。 注: Cygwin上では未解決のシンボルがあるときはDLL作成できないの で、エラーにならず、「0個のテストを実行して失敗しなかった」結 果が報告される。以降の作業の中でスタックを実装し、未解決のシ ンボルが解決されればDLLが作成され、テストが実行できるようにな る。それまではテストの実行結果が異なる。Cygwin環境の場合は気 にせずに次に進むこと。 ==== テスト起動の自動化 GNUビルドシステムでは一般的にmake checkでテストが起動する。 スタックの実装でも同様にテストが起動するようにする。 まず、テストを起動するスクリプトtest/run-test.shを作成する。 cutterコマンドのパスは環境変数CUTTERで受け取ることにする。 test/run-test.sh: #!/bin/sh export BASE_DIR="`dirname $0`" $CUTTER -s $BASE_DIR "$@" $BASE_DIR 実行権を付けることを忘れないこと。 [stack]% chmod +x test/run-test.sh test/Makefile.amにテスト起動スクリプトとしてtest/run-test.sh を使うことを指定する。 test/Makefile.am: TESTS = run-test.sh TESTS_ENVIRONMENT = CUTTER="$(CUTTER)" ... TESTS_ENVIRONMENTではcutterコマンドのパスを環境変数CUTTERで 渡している。cutterコマンドのパスはconfigure.ac内に追加した AC_CHECK_CUTTERが検出している。 make -s checkでテストが走ることを確認する。-sオプションは makeの出力を抑えるオプション(silent)であり、これを指定する ことによりテスト結果が見やすくなる。 [stack]% make -s check Making check in test cutter: symbol lookup error: ./.libs/test_stack.so: undefined symbol: stack_new FAIL: run-test.sh ================================ 1 of 1 tests failed Please report to you@example.com ================================ ... 注: 前述のとおり、Cygwin上ではDLLが作成できないため、エラーは 発生しない。Cygwin環境の場合は実行結果が異なっても気にせずに 次に進むこと。 ==== test/run-test.shの単独実行のサポート make -s checkではビルドログなどテスト結果以外の出力がでて、テス ト結果が埋もれてしまう。そこで、make -s check経由ではなく test/run-test.shを実行できるようにする。 まず、test/run-test.shを環境変数CUTTERが指定されていない場合 は、cutterコマンドのパスを自動的に検出する。さらにmake check 経由でtest/run-test.shが起動された場合はmakeを実行し、必要な ファイルをビルドする。 test/run-test.sh: #!/bin/sh export BASE_DIR="`dirname $0`" top_dir="$BASE_DIR/.." if test -z "$NO_MAKE"; then make -C $top_dir > /dev/null || exit 1 fi if test -z "$CUTTER"; then CUTTER="`make -s -C $BASE_DIR echo-cutter`" fi $CUTTER -s $BASE_DIR "$@" $BASE_DIR このtest/run-test.shに対応するためにtest/Makefile.amを以下の ように変更する。 test/Makefile.am: ... TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" ... echo-cutter: @echo $(CUTTER) test/Makefile.am全体は以下のようになる。 test/Makefile.am: TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la INCLUDES = $(CUTTER_CFLAGS) -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) test/run-test.shを直接実行してテストが起動することを確認する。 [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new 注: Cygwin環境ではエラーは発生しない。 ここからはmake -s checkではなくtest/run-test.shを使用する。こ れは必要な情報のみが出力され、本当に興味のあるテストの結果が 埋もれてしまうのを防ぐためである。 また、スタックの実装を行う前にテストの実行環境を整備している のは、テストを実行するコストを下げるためである。これは、テス トを実行することが面倒になるとテストを実行しなくなり、その結 果、プログラムの品質低下につながるためである。 最初にテスト環境の整備を行うと、その分、プログラム本体の開発 着手が遅れてしまう。しかし、プログラム本体が開発・保守され続 ける間は常にテストを実行し、品質を保持する必要があるため、最 初にテスト環境整備に当てたコストは回収可能である。今後、快適 に品質の高いプログラムの開発を行うために、最初にテスト環境の 整備を行うことは重要である。 === スタックの実装 テスト環境の整備ができたため、スタックの実装に入る。 ==== 簡単なstack_new()の実装 まず、stack_new()を定義し、実行時エラーの原因を解決する。 スタックの実装はsrc/stack.cで行う。簡単なstack_new()の実装は 以下の通りである。 src/stack.c: #include #include "stack.h" Stack * stack_new (void) { return NULL; } ==== src/libstack.laのビルド それでは、makeでsrc/stack.cをビルドできるようにする。 まず、test/以下をビルド対象に加えたように、src/以下もビルド 対象とする。 Makefile.am: ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS SUBDIRS = src test configure.ac: ... AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) ... これでsrc/以下もビルド対象となる。 [stack]% test/run-test.sh configure.ac:13: required file `src/Makefile.in' not found make: *** [Makefile.in] エラー 1 src/Makefile.amを作成するとこのエラーはなくなる。 [stack]% touch src/Makefile.am [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new 注: Cygwin環境ではエラーは発生しない。 makeは通るようになるが、この時点ではsrc/stack.cはビルドされ ないし、テストプログラムもlibstack.soをリンクしていないので stack_new()が定義されていないエラーは変わらない。 src/Makefile.amに以下を追加し、src/stack.cからlibstack.soを 作成する。 src/Makefile.am: lib_LTLIBRARIES = libstack.la LDFLAGS = -no-undefined libstack_la_SOURCES = stack.c makeでlibstack.soが生成できるようになるはずである。 [stack]% make ... make[1]: ディレクトリ `/tmp/stack/src' に入ります Makefile:275: .deps/stack.Plo: そのようなファイルやディレクトリはありません make[1]: *** ターゲット `.deps/stack.Plo' を make するルールがありません. 中止. ... 上記のエラーを修正するためにconfigureをもう一度実行する必要が ある。 [stack]% ./configure makeでsrc/.libs/libstack.so.0.0.0を生成することができる。 [stack]% make [stack]% file src/.libs/libstack.so.0.0.0 src/.libs/libstack.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 注: Cygwin上ではsrc/.libs/cyglibstack.dllが作成される。 ==== src/libstack.laのリンク libstack.soはできたがテストプログラムにはリンクしていないの で、まだ実行時エラーは発生する。 [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_new 注: Cygwin環境ではエラーは発生しない。 libstack.soをリンクするためにtest/Makefile.amを以下のように 変更する。 test/Makefile.am: ... LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la ... Cygwin環境の場合はsrc/.libs/以下に生成されるスタックを実装し たDLLを利用するために、src/.libs/にパスを通す必要がある。その ため、以下のようにtest/run-test.shでcutterを実行する前にPATH を設定する。 test/run-test.sh: ... case `uname` in CYGWIN*) PATH="$top_dir/src/.libs:$PATH" ;; Darwin) DYLD_LIBRARY_PATH="$top_dir/src/.libs:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH ;; *BSD) LD_LIBRARY_PATH="$top_dir/src.libs:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH ;; *) : ;; esac $CUTTER -s $BASE_DIR "$@" $BASE_DIR テストプログラムを再リンクする必要があるため、一度make clean してからビルドしなおす。 [stack]% make clean [stack]% make [stack]% test/run-test.sh cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_is_empty 今まではstack_new()が見つからずにエラーが発生していたが、 stack_is_empty()が見つからないというエラーに変わった。これに より、libstack.soがリンクされていることが確認できた。 注: Cygwin環境ではエラーは発生しない。 ==== stack_is_empty()の実装 テストプログラム中ではstack_is_empty()の結果を以下のようにテ ストしている。 test/test-stack.c: ... cut_assert(stack_is_empty(stack)); ... つまり、stack_is_empty()が真を返すことをテストしている。よっ て、src/stack.cでのstack_is_empty()は真を返す必要がある。 src/stack.c: ... #define TRUE 1 #define FALSE 0 ... int stack_is_empty (Stack *stack) { return TRUE; } src/stack.c全体は以下のようになる。 src/stack.c: #include #include "stack.h" #define TRUE 1 #define FALSE 0 Stack * stack_new (void) { return NULL; } int stack_is_empty (Stack *stack) { return TRUE; } このstack_is_empty()の実装は常に真を返すため、テストは成功す るはずである。 [stack]% test/run-test.sh . Finished in 0.000028 seconds 1 test(s), 1 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed 「.」がひとつ表示されているのは1つのテストがパスしたことを表 している。現在は1つしかテストがないので1つのテストにパスした ということはすべてのテストにパスしたということである。 環境によっては表示が緑になっているはずである。これはテストが パスしているので次に進んでもよいという意味である。 テストが動作することが確認できたので、以降ではテストを作成し ながらスタックの実装を完成させる。 == pushの実装 まずはpushを実装する。今回の実装では、スタックにはintのみを 格納できることする。 === pushのテスト pushをした後はスタックのサイズが1になり、スタックは空ではなく なるはずである。これをテストにすると以下のようになる。 test/test-stack.c: ... void test_push (void); ... void test_push (void) { Stack *stack; stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } テストを実行すると、stack_get_size()が定義されていないため実 行時エラーになる。 [stack]% test/run-test.sh cutter: symbol lookup error: ./test/.libs/test_stack.so: undefined symbol: stack_get_size 注: Cygwin環境ではエラーは発生しない? このテストをパスするようにpushを実装する。 === cut_stack_push()の実装 まずは、パスしなくても良いのでテストが動くように stack_get_size()とstack_push()を実装する。 まず、src/stack.hに宣言を追加する。 src/stack.h: ... int stack_get_size (Stack *stack); void stack_push (Stack *stack, int value); ... 続いてsrc/stack.cに定義を追加する。 src/stack.c: ... int stack_get_size (Stack *stack) { return 0; } void stack_push (Stack *stack, int value) { } stack_get_size()が0を返しているのは、最初のstack_get_size() は以下のように0を期待されているからである。 test/test-stack.c: ... stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); ... pushの実装ができたのでテストを実行する。 [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:23: test_push() Finished in 0.000113 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed 「F」はテストが失敗(Failure)したことを表している。環境によっ ては表示が赤くなっているはずである。これは、テストがパスして いないので先に進むことは危険であることを示している。popの実 装に移る前にテストをパスさせるようにpushを実装を改良するべき だということである。 cutterからのメッセージでは、test/test-stack.cの23行目、 test_push()関数の中でstack_get_size(stack)の値が1ではなく0の ために失敗したということを表している。該当する行は以下の通り である。 test/test-stack.c:23: cut_assert_equal_int(1, stack_get_size(stack)); これはstack_get_size()が常に0を返しているためである。 stack_push()された後には内部のカウンタを1つ進める必要がある。 === メモリ開放 今まではstack_new()でNULLを返していたが、test_pushテストをパ スするためには内部にカウンタを持つ必要があるため、メモリを割 り当てる必要がある。メモリを割り当てた場合、使用済のメモリを 開放する必要がある。 例えば、test_new_stack()では以下のようにする必要がある。 void test_new_stack (void) { Stack *stack; stack = stack_new(); cut_assert(stack_is_empty(stack)); stack_free(stack); } しかし、stack_free()の前のcut_assert()が失敗した場合はその時 点で処理が終了してしまうため、stack_free()が呼ばれずメモリリー クが発生する。(ただし、テストプログラムはすぐに終了する短命 なプログラムため、害が大きくなることは少ない。) Cutterではテストの前後に必ず実行される関数を設定することがで きる。それがcut_setup()/cut_teardown()である。これらはテスト が成功した場合も失敗した場合も呼ばれるためテスト中で割り当て たメモリを確実に開放する処理などに使うことができる。 test_new_stack()をcut_setup()/cut_teardown()を使って確実にメ モリを開放するようにすると以下のようになる。 test/test-stack.c: ... static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } ... 同様に、test_push()でも、関数内のローカル変数stackを使わずに ファイル中でstaticなstackを使用すれば確実にメモリを開放でき る。 test/test-stack.c: ... void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } ... cut_setup()/cut_teardown()を使用したtest/test-stack.c全体は以 下のようになる。 test/test-stack.c: #include #include void test_new_stack (void); void test_push (void); static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } この変更の後でもテストが変更前と同じ結果を返すことを確認する。 [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:35: test_push() Finished in 0.000084 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed === stack_new()/stack_free()の実装 それでは、stack_new()でメモリを割り当て、stack_free()で開放 する処理を実装する。 まず、src/stack.hにstack_free()を宣言する。 src/stack.h: ... void stack_free (Stack *stack); ... 続いて、src/stack.cにStackを定義する。Stackはスタックのサイズ を保存するフィールドを含む。 src/stack.c: ... struct _Stack { int size; }; ... stack_new()でStackのためのメモリを割り当て、stack_free()で開 放する。 src/stack.c: ... Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; return stack; } void stack_free (Stack *stack) { free(stack); } ... この変更の後でもテストが変更前と同じ結果を返すことを確認する。 [stack]% test/run-test.sh .F 1) Failure: test_push <1 == stack_get_size(stack)> expected: <1> but was: <0> test/test-stack.c:35: test_push() Finished in 0.000113 seconds 2 test(s), 2 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed === stack_push()の本実装 Stackにスタックサイズを持つことができるようになったので、こ れを使用してテストをパスするように stack_push()/stack_get_size()を実装する。 src/stack.c: ... int stack_get_size (Stack *stack) { return stack->size; } void stack_push (Stack *stack, int value) { stack->size++; } pushする毎にスタックサイズを増やし、そのサイズを返すようにし た。これで今まで失敗していたstack_get_size()のテストがパスす るはずである。 [stack]% test/run-test.sh .F 1) Failure: test_push expected: is not FALSE/NULL test/test-stack.c:36: test_push() Finished in 0.000113 seconds 2 test(s), 3 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 50% passed 期待通りstack_get_size()のテストはパスしたがその後の test/test-stack.cの36行目、stack_is_empty()で失敗している。 test/test-stack.c:36: cut_assert(!stack_is_empty(stack)); スタックにpushしたら空ではなくなるはずである。 === stack_is_empty()の本実装 スタックが空なのはスタックサイズが0のときである。よって、 stack_is_empty()の実装は以下のようになる。 src/stack.c: ... int stack_is_empty (Stack *stack) { return stack->size == 0; } ... テストを実行し、すべてのテストにパスすることを確認する。 % test/run-test.sh .. Finished in 0.000036 seconds 2 test(s), 4 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed pushのテストもパスし、既存のスタックを作った直後の場合のテス トもパスしたままである。すべてのテストがパスしたため、結果表 示も緑に戻った。これで安心してpopの実装に進むことができる。 == popの実装 pushが実装できたので、次はpushで入れたデータを取り出すpopを 実装する。 === popのテスト popをすると最後にpushした値が順番に返ってくる。また、popする 毎にスタックサイズが減り、最後は空になる。これをテストにする と以下のようになる。 test/test-stack.c: ... void test_pop (void); ... void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } テストを走らせる。 [stack]% test/run-test.sh ..cutter: symbol lookup error: test/.libs/test_stack.so: undefined symbol: stack_pop stack_pop()を定義していないためエラーが発生している。エラー メッセージの前に「.」が二つ出ているので既存のテストはパスし ていることが確認できる。 注: Cygwin環境ではエラーは発生しない? === stack_pop()の実装 まず、src/stack.hにstack_pop()の宣言を追加する。 src/stack.h: ... int stack_pop (Stack *stack); ... つづいて、src/stack.cにstack_pop()の実装を追加する。 src/stack.c: ... int stack_pop (Stack *stack) { return 30; } ここで30を返すようにしているのは最初のstack_pop()では30を返 すことが期待されているからである。 test/test-stack.c:50: cut_assert_equal_int(30, stack_pop(stack)); テストを実行し、popのテストもエラーが発生せずに実行されるこ とを確認する。 [stack]% test/run-test.sh ..F 1) Failure: test_pop <2 == stack_get_size(stack)> expected: <2> but was: <3> test/test-stack.c:51: test_pop() Finished in 0.000307 seconds 3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 66.6667% passed popのテストが実行された。しかし、現在のstack_pop()ではスタッ クサイズを変更していないため、popした後のスタックサイズを確 認しているtest/test-stack.cの50行目のstack_get_size()で失敗 している。 test/test-stack.c:51: cut_assert_equal_int(2, stack_get_size(stack)); === データ領域の確保 テストが実行されることが確認できたのでテストにパスするように stack_pop()を実装する。 後でpopで取り出すために、pushされたデータを保存しておく必要 がある。Stackに保存されたデータを示す場所を用意し、 stack_push()/stack_pop()で動的に必要な領域を割り当てる。 まず、Stackに保存されたデータを示す場所を用意し、stack_new() で初期化、stack_free()で開放する。 src/stack.c: ... struct _Stack { int size; int *data; }; Stack * stack_new (void) { ... stack->data = NULL; ... } void stack_free (Stack *stack) { free(stack->data); free(stack); } ... この時点では外部向けの処理の内容は変わっていないはずなので、 テストを実行して変更前と同じように失敗することを確認する。 [stack]% test/run-test.sh ..F 1) Failure: test_pop <2 == stack_get_size(stack)> expected: <2> but was: <3> test/test-stack.c:51: test_pop() Finished in 0.000097 seconds 3 test(s), 6 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 66.6667% passed === stack_pop()の本実装 保存したデータを示す場所が用意できたので stack_push()/stack_pop()でそこに必要な分だけ領域を割り当て、 データを保存する。 src/stack.c: ... void stack_push (Stack *stack, int value) { int *new_data; stack->size++; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (!new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return; } stack->data = new_data; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; int *new_data; stack->size--; value = stack->data[stack->size]; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return value; } stack->data = new_data; return value; } テストを実行し、popのテストがパスすることを確認する。 [stack]% test/run-test.sh ... Finished in 0.000076 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed == 重複の排除 stack_push()/stack_pop()の実装では動的なメモリ割り当て部分、 メモリ割り当て失敗時のエラー処理部分に重複があった。一般的に コード中に重複があることは、メンテナンス性の面などの理由で悪 いこととされている。 ここでは、既存の動作を変更せずに重複している悪い部分を修正す る。既存の動作が変わっていないことはテストを実行することで確 認することができる。 === メモリ割り当て部分の重複の除去 まず、以下のメモリ割り当て部分の重複を除去する。 src/stack.c: new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); この部分はstack_realloc()として切り出す。 src/stack.c: ... static int * stack_realloc (Stack *stack) { return realloc(stack->data, sizeof(*stack->data) * stack->size); } void stack_push (Stack *stack, int value) { ... new_data = stack_realloc(stack); ... } int stack_pop (Stack *stack) { ... new_data = stack_realloc(stack); ... } この変更の後でも以前と同じ挙動をしているかを確かめる。 [stack]% test/run-test.sh ... Finished in 0.000078 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed 結果が緑なので次へ進める。 === エラー処理部分の重複の除去 次に、以下のメモリ割り当て失敗時のエラー処理部分の重複を除去 する。 src/stack.c: ... void stack_push (Stack *stack, int value) { ... new_data = stack_realloc(stack); if (!new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return; } ... } int stack_pop (Stack *stack) { ... new_data = stack_realloc(stack); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return value; } ... } これらのエラー処理をstack_realloc()の中に移動し、 stack_realloc()は割り当てたメモリを返すのではなく、新しくメ モリを割り当てることに成功したかどうかを返すことにする。 src/stack.c: ... static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } この変更の後でも以前と同じ挙動をしているかを確かめる。 [stack]% test/run-test.sh ... Finished in 0.000076 seconds 3 test(s), 15 assertion(s), 0 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 100% passed 既存の動作を変更することなく、プログラム中の重複部分を取り除 き、プログラムを改良したことを確認できた。 == まとめ 本稿では小さなスタックの実装を例にしてGNUビルドシステムを用い たビルド環境の構築方法・Cutterを用いたテストの作成方法・テス トのあるプログラムでのプログラムの改良方法を示した。 === メリット GNUビルドシステムを用いることにより、ビルド環境の差異を吸収 することが比較的容易になる。これはプログラムの移植性を向上さ せることにつながる。 Cutterを用いることにより、簡単にテストが書ける。既存のC言語用 テスティングフレームワークではテストを定義するために独自のマ クロを用いたり、テストの定義とテストの登録を別々に行う必要が あるなどテスト以外にも書かなければいけないことが多い。Cutter はこの点を改善し、テスト定義のための独自のマクロを提供せず、 通常どおりに関数を定義するだけでテストを定義できるようにした。 明示的にテストを定義する必要もない。 本稿ではcut_assert()とcut_assert_equal_int()しか使用しなかっ たが、cut_assert_equal_string()など期待値と実際の値を比較する ための方法を多数用意している。これにより、テストプログラムの ための比較方法を定義しなければいけない機会が減り、より簡潔に テストプログラムを書けるようになる。 また、Cutterのテスト結果出力は必要のない情報はなるべく表示せ ず、必要な情報はできるだけ多く提供する。これは必要な情報が埋 もれてしまうのを防ぎ、プログラムの修正を支援する。また、C言語 ではよくある異常終了時には、バックトレースの出力を試み、プロ グラム修正のためのより多くの情報を提供する。 既存の機能を変更せずにプログラムの内部構造を改良することはメ ンテナンス性を向上させるのに非常に役立つ。自動化されたテスト を作成することにより、既存の機能が変更されていないことを容易 に確認できる。 また、新規に機能を追加する場合でも、自動化されたテストがあれ ば、既存の機能を壊すことなく機能を追加していることを確認でき る。自動化テストを用意することはメンテナンス面でも、新機能開 発面でも品質の高いプログラムを作成する上で有用である。 === スタックのテスト 最終的なテストは以下の通りである。 test/test-stack.c #include #include void test_new_stack (void); void test_push (void); void test_pop (void); static Stack *stack; void cut_setup (void) { stack = NULL; } void cut_teardown (void) { if (stack) stack_free(stack); } void test_new_stack (void) { stack = stack_new(); cut_assert(stack_is_empty(stack)); } void test_push (void) { stack = stack_new(); cut_assert_equal_int(0, stack_get_size(stack)); stack_push(stack, 100); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert(!stack_is_empty(stack)); } void test_pop (void) { stack = stack_new(); stack_push(stack, 10); stack_push(stack, 20); stack_push(stack, 30); cut_assert_equal_int(3, stack_get_size(stack)); cut_assert_equal_int(30, stack_pop(stack)); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(20, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); stack_push(stack, 40); cut_assert_equal_int(2, stack_get_size(stack)); cut_assert_equal_int(40, stack_pop(stack)); cut_assert_equal_int(1, stack_get_size(stack)); cut_assert_equal_int(10, stack_pop(stack)); cut_assert_equal_int(0, stack_get_size(stack)); cut_assert(stack_is_empty(stack)); } === スタックの実装 最終的なプログラムは以下の通りである。このスタックは素朴な実 装であるため、エラーの通知方法やパフォーマンスのチューニング などの課題が残っているが、テストが示している通りの基本的な機 能は実装されている。 src/stack.c: #include #include "stack.h" #define TRUE 1 #define FALSE 0 struct _Stack { int size; int *data; }; Stack * stack_new (void) { Stack *stack; stack = malloc(sizeof(Stack)); if (!stack) return NULL; stack->size = 0; stack->data = NULL; return stack; } void stack_free (Stack *stack) { free(stack->data); free(stack); } int stack_is_empty (Stack *stack) { return stack->size == 0; } int stack_get_size (Stack *stack) { return stack->size; } static int stack_realloc (Stack *stack) { int *new_data; new_data = realloc(stack->data, sizeof(*stack->data) * stack->size); if (stack->size > 0 && !new_data) { free(stack->data); stack->data = NULL; stack->size = 0; return FALSE; } stack->data = new_data; return TRUE; } void stack_push (Stack *stack, int value) { stack->size++; if (!stack_realloc(stack)) return; stack->data[stack->size - 1] = value; } int stack_pop (Stack *stack) { int value; stack->size--; value = stack->data[stack->size]; stack_realloc(stack); return value; } === Cutterがある場合だけテストをサポート ここで作成したtest/test-stack.cはCutterがない場合はビルドに 失敗する。つまり、makeが失敗する。開発者であればテストを実行 するのが当然なので、Cutterがない場合は失敗しても問題はない。 むしろ、問題に気づきやすいのでそうである方がよいと言える。 しかし、ライブラリとしてスタックを使いたいユーザにはCutterが ない場合でもビルドが正常に終了できた方がよい。そのようなユー ザは開発者がテストしたリリース版のライブラリを使用していると 考えられるからである。 以下はCutterがない場合でもビルドできるようにする方法である。 まず、configure.acのAC_CHECK_CUTERの部分を以下のように変更し、 Cutterが提供するm4(cutter.m4)がない場合でもautogen.sh(よ り詳しくいうとaclocal)が動くようにする。(autogen.shを実行 するのが開発者のみであれば、この設定は必要ない。その場合は AC_CHECK_CUTTERの定義がないためにaclocalが失敗する。) configure.ac: ... m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) ... ここでac_cv_use_cutterという変数名を使っているのは、 AC_CHECK_CUTTERが同じ名前の変数を使っているからである。この 変数はCutterの検出が失敗した場合にも"no"になるので、 cutter.m4がない場合(autogen.shを実行した環境にCutterがない 場合)は常にCutterを検出できなかった状態となる。 次に、Cutterの検出に失敗したという情報をMakefile.am中で利用す るために、AC_CHECK_CUTTERの後ろでMakefile.am中で使える条件を 設定する。 configure.ac: ... m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) ... 後は、WITH_CUTTERが真の場合だけtest/test-stack.cをビルドし、 test/run-test.shを実行すればよい。 test/Makefile.am: if WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif ... 以上の変更を加えたconfigure.acとtest/Makefile.amの全体は以下 のとおりである。 configure.ac: AC_PREREQ(2.59) AC_INIT(stack, 0.0.1, you@example.com) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_HEADER([src/config.h]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_PROG_LIBTOOL m4_ifdef([AC_CHECK_CUTTER], [AC_CHECK_CUTTER], [ac_cv_use_cutter="no"]) AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"]) m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE]) AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) AC_OUTPUT test/Makefile.am: if WITH_CUTTER TESTS = run-test.sh TESTS_ENVIRONMENT = NO_MAKE=yes CUTTER="$(CUTTER)" noinst_LTLIBRARIES = test_stack.la endif INCLUDES = -I$(top_srcdir)/src LIBS = $(CUTTER_LIBS) $(top_builddir)/src/libstack.la AM_CFLAGS = $(CUTTER_CFLAGS) LDFLAGS = -module -rpath $(libdir) -avoid-version -no-undefined test_stack_la_SOURCES = test-stack.c echo-cutter: @echo $(CUTTER) === 関連項目 * xUnit: Cutterも属するassertXXXといった方法で結果を確認し ながらテストを書いていくテストの書き方をサポートするライ ブラリのこと。テスティングフレームワークとも呼ぶ。様々な 言語で実装されている。 * SUnit (Smalltalk) * JUnit (Java) * Test::Unit (Ruby) * PyUnit (Pytnon) * ... * エクストリーム・プログラミング(Extreme Programming, XP): 品質の高いプログラムを開発するための方法を集めたプログラ ミング方法。テストの作成も重要視している。 cutter-testing-framework-1.1.7/gcutter/0000755000175000017500000000000011525707411016332 5ustar koukoucutter-testing-framework-1.1.7/gcutter/gbsearcharray.h0000644000175000017500000002754511205747031021332 0ustar koukou/* GBSearchArray - Binary Searchable Array implementation * Copyright (C) 2000-2003 Tim Janik * * This software is provided "as is"; redistribution and modification * is permitted, provided that the following disclaimer is retained. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * In no event shall the authors or contributors be liable for any * direct, indirect, incidental, special, exemplary, or consequential * damages (including, but not limited to, procurement of substitute * goods or services; loss of use, data, or profits; or business * interruption) however caused and on any theory of liability, whether * in contract, strict liability, or tort (including negligence or * otherwise) arising in any way out of the use of this software, even * if advised of the possibility of such damage. */ #ifndef __G_BSEARCH_ARRAY_H__ #define __G_BSEARCH_ARRAY_H__ #include #include G_BEGIN_DECLS /* c++ guards */ /* this implementation is intended to be usable in third-party code * simply by pasting the contents of this file. as such, the * implementation needs to be self-contained within this file. */ /* convenience macro to avoid signed overflow for value comparisions */ #define G_BSEARCH_ARRAY_CMP(v1,v2) ((v1) > (v2) ? +1 : (v1) == (v2) ? 0 : -1) /* --- typedefs --- */ typedef gint (*GBSearchCompareFunc) (gconstpointer bsearch_node1, /* key */ gconstpointer bsearch_node2); typedef enum { G_BSEARCH_ARRAY_ALIGN_POWER2 = 1 << 0, /* align memory to power2 sizes */ G_BSEARCH_ARRAY_AUTO_SHRINK = 1 << 1 /* shrink array upon removal */ } GBSearchArrayFlags; /* --- structures --- */ typedef struct { guint sizeof_node; GBSearchCompareFunc cmp_nodes; guint flags; } GBSearchConfig; typedef union { guint n_nodes; /*< private >*/ gpointer alignment_dummy1; glong alignment_dummy2; gdouble alignment_dummy3; } GBSearchArray; /* --- public API --- */ static inline GBSearchArray* g_bsearch_array_create (const GBSearchConfig *bconfig); static inline gpointer g_bsearch_array_get_nth (GBSearchArray *barray, const GBSearchConfig *bconfig, guint nth); static inline guint g_bsearch_array_get_index (GBSearchArray *barray, const GBSearchConfig *bconfig, gconstpointer node_in_array); static inline GBSearchArray* g_bsearch_array_remove (GBSearchArray *barray, const GBSearchConfig *bconfig, guint index); /* provide uninitialized space at index for node insertion */ static inline GBSearchArray* g_bsearch_array_grow (GBSearchArray *barray, const GBSearchConfig *bconfig, guint index); /* insert key_node into array if it does not exist, otherwise do nothing */ static inline GBSearchArray* g_bsearch_array_insert (GBSearchArray *barray, const GBSearchConfig *bconfig, gconstpointer key_node); /* insert key_node into array if it does not exist, * otherwise replace the existing node's contents with key_node */ static inline GBSearchArray* g_bsearch_array_replace (GBSearchArray *barray, const GBSearchConfig *bconfig, gconstpointer key_node); static inline void g_bsearch_array_free (GBSearchArray *barray, const GBSearchConfig *bconfig); #define g_bsearch_array_get_n_nodes(barray) (((GBSearchArray*) (barray))->n_nodes) /* g_bsearch_array_lookup(): * return NULL or exact match node */ #define g_bsearch_array_lookup(barray, bconfig, key_node) \ g_bsearch_array_lookup_fuzzy ((barray), (bconfig), (key_node), 0) /* g_bsearch_array_lookup_sibling(): * return NULL for barray->n_nodes==0, otherwise return the * exact match node, or, if there's no such node, return the * node last visited, which is pretty close to an exact match * (will be one off into either direction). */ #define g_bsearch_array_lookup_sibling(barray, bconfig, key_node) \ g_bsearch_array_lookup_fuzzy ((barray), (bconfig), (key_node), 1) /* g_bsearch_array_lookup_insertion(): * return NULL for barray->n_nodes==0 or exact match, otherwise * return the node where key_node should be inserted (may be one * after end, i.e. g_bsearch_array_get_index(result) <= barray->n_nodes). */ #define g_bsearch_array_lookup_insertion(barray, bconfig, key_node) \ g_bsearch_array_lookup_fuzzy ((barray), (bconfig), (key_node), 2) /* --- implementation --- */ /* helper macro to cut down realloc()s */ #ifdef DISABLE_MEM_POOLS #define G_BSEARCH_UPPER_POWER2(n) (n) #else /* !DISABLE_MEM_POOLS */ #define G_BSEARCH_UPPER_POWER2(n) ((n) ? 1 << g_bit_storage ((n) - 1) : 0) #endif /* !DISABLE_MEM_POOLS */ #define G_BSEARCH_ARRAY_NODES(barray) (((guint8*) (barray)) + sizeof (GBSearchArray)) static inline GBSearchArray* g_bsearch_array_create (const GBSearchConfig *bconfig) { GBSearchArray *barray; guint size; g_return_val_if_fail (bconfig != NULL, NULL); size = sizeof (GBSearchArray) + bconfig->sizeof_node; if (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2) size = G_BSEARCH_UPPER_POWER2 (size); barray = (GBSearchArray *) g_realloc (NULL, size); memset (barray, 0, sizeof (GBSearchArray)); return barray; } static inline gpointer g_bsearch_array_lookup_fuzzy (GBSearchArray *barray, const GBSearchConfig *bconfig, gconstpointer key_node, const guint sibling_or_after); static inline gpointer g_bsearch_array_lookup_fuzzy (GBSearchArray *barray, const GBSearchConfig *bconfig, gconstpointer key_node, const guint sibling_or_after) { GBSearchCompareFunc cmp_nodes = bconfig->cmp_nodes; guint8 *check = NULL, *nodes = G_BSEARCH_ARRAY_NODES (barray); guint n_nodes = barray->n_nodes, offs = 0; guint sizeof_node = bconfig->sizeof_node; gint cmp = 0; while (offs < n_nodes) { guint i = (offs + n_nodes) >> 1; check = nodes + i * sizeof_node; cmp = cmp_nodes (key_node, check); if (cmp == 0) return sibling_or_after > 1 ? NULL : check; else if (cmp < 0) n_nodes = i; else /* (cmp > 0) */ offs = i + 1; } /* check is last mismatch, cmp > 0 indicates greater key */ return G_LIKELY (!sibling_or_after) ? NULL : (sibling_or_after > 1 && cmp > 0) ? check + sizeof_node : check; } static inline gpointer g_bsearch_array_get_nth (GBSearchArray *barray, const GBSearchConfig *bconfig, guint nth) { return (G_LIKELY (nth < barray->n_nodes) ? G_BSEARCH_ARRAY_NODES (barray) + nth * bconfig->sizeof_node : NULL); } static inline guint g_bsearch_array_get_index (GBSearchArray *barray, const GBSearchConfig *bconfig, gconstpointer node_in_array) { guint distance = ((guint8*) node_in_array) - G_BSEARCH_ARRAY_NODES (barray); g_return_val_if_fail (node_in_array != NULL, barray->n_nodes); distance /= bconfig->sizeof_node; return MIN (distance, barray->n_nodes + 1); /* may return one after end */ } static inline GBSearchArray* g_bsearch_array_grow (GBSearchArray *barray, const GBSearchConfig *bconfig, guint index) { guint old_size = barray->n_nodes * bconfig->sizeof_node; guint new_size = old_size + bconfig->sizeof_node; guint8 *node; g_return_val_if_fail (index <= barray->n_nodes, NULL); if (G_UNLIKELY (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2)) { new_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + new_size); old_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + old_size); if (old_size != new_size) barray = (GBSearchArray *) g_realloc (barray, new_size); } else barray = (GBSearchArray *) g_realloc (barray, sizeof (GBSearchArray) + new_size); node = G_BSEARCH_ARRAY_NODES (barray) + index * bconfig->sizeof_node; g_memmove (node + bconfig->sizeof_node, node, (barray->n_nodes - index) * bconfig->sizeof_node); barray->n_nodes += 1; return barray; } static inline GBSearchArray* g_bsearch_array_insert (GBSearchArray *barray, const GBSearchConfig *bconfig, gconstpointer key_node) { guint8 *node; if (G_UNLIKELY (!barray->n_nodes)) { barray = g_bsearch_array_grow (barray, bconfig, 0); node = G_BSEARCH_ARRAY_NODES (barray); } else { node = (guint8 *) g_bsearch_array_lookup_insertion (barray, bconfig, key_node); if (G_LIKELY (node)) { guint index = g_bsearch_array_get_index (barray, bconfig, node); /* grow and insert */ barray = g_bsearch_array_grow (barray, bconfig, index); node = G_BSEARCH_ARRAY_NODES (barray) + index * bconfig->sizeof_node; } else /* no insertion needed, node already there */ return barray; } memcpy (node, key_node, bconfig->sizeof_node); return barray; } static inline GBSearchArray* g_bsearch_array_replace (GBSearchArray *barray, const GBSearchConfig *bconfig, gconstpointer key_node) { guint8 *node = (guint8 *) g_bsearch_array_lookup (barray, bconfig, key_node); if (G_LIKELY (node)) /* expected path */ memcpy (node, key_node, bconfig->sizeof_node); else /* revert to insertion */ barray = g_bsearch_array_insert (barray, bconfig, key_node); return barray; } static inline GBSearchArray* g_bsearch_array_remove (GBSearchArray *barray, const GBSearchConfig *bconfig, guint index) { guint8 *node; g_return_val_if_fail (index < barray->n_nodes, NULL); barray->n_nodes -= 1; node = G_BSEARCH_ARRAY_NODES (barray) + index * bconfig->sizeof_node; g_memmove (node, node + bconfig->sizeof_node, (barray->n_nodes - index) * bconfig->sizeof_node); if (G_UNLIKELY (bconfig->flags & G_BSEARCH_ARRAY_AUTO_SHRINK)) { guint new_size = barray->n_nodes * bconfig->sizeof_node; guint old_size = new_size + bconfig->sizeof_node; if (G_UNLIKELY (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2)) { new_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + new_size); old_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + old_size); if (old_size != new_size) barray = (GBSearchArray *) g_realloc (barray, new_size); } else barray = (GBSearchArray *) g_realloc (barray, sizeof (GBSearchArray) + new_size); } return barray; } static inline void g_bsearch_array_free (GBSearchArray *barray, const GBSearchConfig *bconfig) { g_return_if_fail (barray != NULL); g_free (barray); } G_END_DECLS /* c++ guards */ #endif /* !__G_BSEARCH_ARRAY_H__ */ cutter-testing-framework-1.1.7/gcutter/gcut-marshalers.c0000644000175000017500000005330011243244160021572 0ustar koukou #ifndef ___gcut_marshal_MARSHAL_H__ #define ___gcut_marshal_MARSHAL_H__ #include G_BEGIN_DECLS #ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) #define g_marshal_value_peek_char(v) g_value_get_char (v) #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) #define g_marshal_value_peek_int(v) g_value_get_int (v) #define g_marshal_value_peek_uint(v) g_value_get_uint (v) #define g_marshal_value_peek_long(v) g_value_get_long (v) #define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) #define g_marshal_value_peek_int64(v) g_value_get_int64 (v) #define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) #define g_marshal_value_peek_enum(v) g_value_get_enum (v) #define g_marshal_value_peek_flags(v) g_value_get_flags (v) #define g_marshal_value_peek_float(v) g_value_get_float (v) #define g_marshal_value_peek_double(v) g_value_get_double (v) #define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) #define g_marshal_value_peek_param(v) g_value_get_param (v) #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the * g_value_get_*() functions */ #define g_marshal_value_peek_boolean(v) (v)->data[0].v_int #define g_marshal_value_peek_char(v) (v)->data[0].v_int #define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint #define g_marshal_value_peek_int(v) (v)->data[0].v_int #define g_marshal_value_peek_uint(v) (v)->data[0].v_uint #define g_marshal_value_peek_long(v) (v)->data[0].v_long #define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong #define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 #define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 #define g_marshal_value_peek_enum(v) (v)->data[0].v_long #define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong #define g_marshal_value_peek_float(v) (v)->data[0].v_float #define g_marshal_value_peek_double(v) (v)->data[0].v_double #define g_marshal_value_peek_string(v) (v)->data[0].v_pointer #define g_marshal_value_peek_param(v) (v)->data[0].v_pointer #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */ /* VOID:OBJECT,OBJECT (../gcutter/gcut-marshalers.list:1) */ extern void _gcut_marshal_VOID__OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__OBJECT_OBJECT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2); register GMarshalFunc_VOID__OBJECT_OBJECT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), data2); } /* VOID:OBJECT,OBJECT,OBJECT (../gcutter/gcut-marshalers.list:2) */ extern void _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer arg_3, gpointer data2); register GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), g_marshal_value_peek_object (param_values + 3), data2); } /* VOID:OBJECT,UINT (../gcutter/gcut-marshalers.list:3) */ extern void _gcut_marshal_VOID__OBJECT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__OBJECT_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_UINT) (gpointer data1, gpointer arg_1, guint arg_2, gpointer data2); register GMarshalFunc_VOID__OBJECT_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_uint (param_values + 2), data2); } /* VOID:OBJECT,UINT,UINT (../gcutter/gcut-marshalers.list:4) */ extern void _gcut_marshal_VOID__OBJECT_UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__OBJECT_UINT_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_UINT_UINT) (gpointer data1, gpointer arg_1, guint arg_2, guint arg_3, gpointer data2); register GMarshalFunc_VOID__OBJECT_UINT_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_UINT_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_uint (param_values + 2), g_marshal_value_peek_uint (param_values + 3), data2); } /* VOID:UINT,UINT (../gcutter/gcut-marshalers.list:5) */ extern void _gcut_marshal_VOID__UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__UINT_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1, guint arg_1, guint arg_2, gpointer data2); register GMarshalFunc_VOID__UINT_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_uint (param_values + 1), g_marshal_value_peek_uint (param_values + 2), data2); } /* VOID:STRING,STRING (../gcutter/gcut-marshalers.list:6) */ extern void _gcut_marshal_VOID__STRING_STRING (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__STRING_STRING (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2); register GMarshalFunc_VOID__STRING_STRING callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__STRING_STRING) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_string (param_values + 1), g_marshal_value_peek_string (param_values + 2), data2); } /* VOID:STRING,UINT (../gcutter/gcut-marshalers.list:7) */ extern void _gcut_marshal_VOID__STRING_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__STRING_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__STRING_UINT) (gpointer data1, gpointer arg_1, guint arg_2, gpointer data2); register GMarshalFunc_VOID__STRING_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__STRING_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_string (param_values + 1), g_marshal_value_peek_uint (param_values + 2), data2); } /* VOID:STRING,UINT64 (../gcutter/gcut-marshalers.list:8) */ extern void _gcut_marshal_VOID__STRING_UINT64 (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__STRING_UINT64 (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__STRING_UINT64) (gpointer data1, gpointer arg_1, guint64 arg_2, gpointer data2); register GMarshalFunc_VOID__STRING_UINT64 callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__STRING_UINT64) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_string (param_values + 1), g_marshal_value_peek_uint64 (param_values + 2), data2); } /* VOID:OBJECT,BOOLEAN (../gcutter/gcut-marshalers.list:9) */ extern void _gcut_marshal_VOID__OBJECT_BOOLEAN (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__OBJECT_BOOLEAN (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_BOOLEAN) (gpointer data1, gpointer arg_1, gboolean arg_2, gpointer data2); register GMarshalFunc_VOID__OBJECT_BOOLEAN callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_BOOLEAN) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_boolean (param_values + 2), data2); } /* VOID:OBJECT,OBJECT,BOOLEAN (../gcutter/gcut-marshalers.list:10) */ extern void _gcut_marshal_VOID__OBJECT_OBJECT_BOOLEAN (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); void _gcut_marshal_VOID__OBJECT_OBJECT_BOOLEAN (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN) (gpointer data1, gpointer arg_1, gpointer arg_2, gboolean arg_3, gpointer data2); register GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), g_marshal_value_peek_boolean (param_values + 3), data2); } G_END_DECLS #endif /* ___gcut_marshal_MARSHAL_H__ */ cutter-testing-framework-1.1.7/gcutter/gcut-types.h0000644000175000017500000000416411400100173020574 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_TYPES_H__ #define __GCUT_TYPES_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-types * @title: Types for GLib support * @short_description: Types that is used in test with GLib support. * * There are some types to be used in test with GLib support. */ /** * GCutInspectFunction: * @string: the #GString to be stored inspected result. * @data: the data element to be inspected. * @user_data: user data to pass to the function. * * Specifies the type of function which is called when the * @data element is inspected. It is passed the pointer to * the data element, should inspect @data and append * inspected string to @string. * * Since: 1.0.6 */ typedef void (*GCutInspectFunction) (GString *string, gconstpointer data, gpointer user_data); /** * GCUT_TYPE_ERROR: * * The #GType for a boxed type holding a #GError reference. * * Since: 1.0.7 */ #define GCUT_TYPE_ERROR (gcut_error_get_type()) /** * GCUT_TYPE_SIZE: * * The #GType for #gsize type. * * Since: 1.1.3 */ #define GCUT_TYPE_SIZE (gcut_size_get_type()) GType gcut_error_get_type (void) G_GNUC_CONST; GType gcut_size_get_type (void) G_GNUC_CONST; G_END_DECLS #endif /* __GCUT_TYPES_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-io.h0000644000175000017500000000214211205747031020046 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_IO_H__ #define __GCUT_IO_H__ #include G_BEGIN_DECLS /* TODO: 1.0.7: write document or create gcut_inspect_io_condition() */ gchar *gcut_io_inspect_condition (GIOCondition condition); G_END_DECLS #endif /* __GCUT_IO_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-hash-table.c0000644000175000017500000001427211407320462021450 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include "gcut-hash-table.h" #include "gcut-test-utils.h" #include "gcut-inspect.h" typedef struct _EqualData { GHashTable *target; GEqualFunc equal_func; gboolean equal; } EqualData; static void equal_hash_table_pair (gpointer key, gpointer value, gpointer user_data) { EqualData *data = user_data; gpointer target_key, target_value; if (!g_hash_table_lookup_extended((data->target), key, &target_key, &target_value)) { data->equal = FALSE; return; } if (!data->equal_func(value, target_value)) { data->equal = FALSE; return; } } gboolean gcut_hash_table_equal (GHashTable *hash1, GHashTable *hash2, GEqualFunc equal_func) { EqualData data; if (hash1 == NULL && hash2 == NULL) return TRUE; if (hash1 == NULL || hash2 == NULL) return FALSE; if (g_hash_table_size(hash1) != g_hash_table_size(hash2)) return FALSE; data.target = hash2; data.equal_func = equal_func; data.equal = TRUE; g_hash_table_foreach(hash1, equal_hash_table_pair, &data); return data.equal; } typedef struct _InspectData { GString *output; GCutInspectFunction key_inspect_func; GCutInspectFunction value_inspect_func; gpointer user_data; guint nth_pair; guint total_size; } InspectData; static void inspect_hash_table_pair (gpointer key, gpointer value, InspectData *data) { data->nth_pair++; data->key_inspect_func(data->output, key, data->user_data); g_string_append(data->output, " => "); data->value_inspect_func(data->output, value, data->user_data); if (data->nth_pair != data->total_size) g_string_append(data->output, ", "); } gchar * gcut_hash_table_inspect (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, gpointer user_data) { return gcut_hash_table_inspect_sorted(hash, key_inspect_func, value_inspect_func, NULL, user_data); } gchar * gcut_hash_table_inspect_sorted (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, GCompareFunc compare_func, gpointer user_data) { GString *string; GList *keys, *sorted_keys; InspectData data; if (!hash) return g_strdup("(null)"); string = g_string_new("{"); data.output = string; data.key_inspect_func = key_inspect_func; data.value_inspect_func = value_inspect_func; data.user_data = user_data; data.nth_pair = 0; data.total_size = g_hash_table_size(hash); keys = g_hash_table_get_keys(hash); if (compare_func) { sorted_keys = g_list_sort(keys, compare_func); } else { sorted_keys = keys; } for (; sorted_keys; sorted_keys = g_list_next(sorted_keys)) { gpointer key = sorted_keys->data; inspect_hash_table_pair(key, g_hash_table_lookup(hash, key), &data); } g_list_free(keys); g_string_append(string, "}"); return g_string_free(string, FALSE); } static gboolean equal_string (gconstpointer data1, gconstpointer data2) { if (data1 == NULL && data2 == NULL) return TRUE; if (data1 == NULL || data2 == NULL) return FALSE; return strcmp(data1, data2) == 0; } gboolean gcut_hash_table_string_equal (GHashTable *hash1, GHashTable *hash2) { return gcut_hash_table_equal(hash1, hash2, equal_string); } gchar * gcut_hash_table_string_string_inspect (GHashTable *hash) { return gcut_hash_table_inspect_sorted(hash, gcut_inspect_string, gcut_inspect_string, cut_utils_compare_string, NULL); } static void gcut_hash_table_copy_entry (gpointer key, gpointer value, gpointer user_data) { GHashTable *hash; hash = user_data; g_hash_table_insert(hash, g_strdup(key), g_strdup(value)); } GHashTable * gcut_hash_table_string_string_copy (GHashTable *hash) { GHashTable *copied_hash; copied_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); g_hash_table_foreach(hash, gcut_hash_table_copy_entry, copied_hash); return copied_hash; } GHashTable * gcut_hash_table_string_string_new (const gchar *key, ...) { GHashTable *table; va_list args; va_start(args, key); table = gcut_hash_table_string_string_new_va_list(key, args); va_end(args); return table; } GHashTable * gcut_hash_table_string_string_new_va_list (const gchar *key, va_list args) { GHashTable *table; table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); while (key) { const gchar *value; value = va_arg(args, const gchar *); g_hash_table_insert(table, g_strdup(key), g_strdup(value)); key = va_arg(args, const gchar *); } return table; } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-list.h0000644000175000017500000002434611326461736020435 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_LIST_H__ #define __GCUT_LIST_H__ #include #include G_BEGIN_DECLS /** * SECTION: gcut-list * @title: Assertion Utilities for GList * @short_description: Utilities to write assertions related * to #GList more easily. * * To write assertions, you need to check equality and show * expected and actual values. * * The utilities help you to write assertions that are * related to #GList. */ /** * gcut_list_equal: * @list1: a #GList to be compared. * @list2: a #GList to be compared. * @equal_func: a function that compares two values. * * Compares two #GList, @list1 and @list2. @equal_func is * called for each corresponding values of @list1 and @list2. * * e.g.: * |[ * TODO * ]| * * Returns: TRUE if all corresponding values of @list1 and * @list2 are reported TRUE by @equal_func, FALSE otherwise. * * Since: 1.0.5 */ gboolean gcut_list_equal (const GList *list1, const GList *list2, GEqualFunc equal_func); /** * gcut_list_inspect: * @list: a #GList to be inspected. * @inspect_func: a function that inspects each value. * @user_data: user data to pass to the function. * * Inspects @list. Each value of @list is inspected by * @inspect_func. The returned string should be freed when * no longer needed. * * e.g.: * |[ * TODO * ]| * * Returns: inspected @list as a string. * * Since: 1.0.5 */ gchar *gcut_list_inspect (const GList *list, GCutInspectFunction inspect_func, gpointer user_data); /** * gcut_list_equal_int: * @list1: a #GList of #gint to be compared. * @list2: a #GList of #gint to be compared. * * Compares two #GList, @list1 and @list2. @list1 and @list2 * should be #GList of #gint. * * Returns: TRUE if all corresponding integers of @list1 and * @list2 are same value, FALSE otherwise. * * Since: 1.0.6 */ gboolean gcut_list_equal_int (const GList *list1, const GList *list2); /** * gcut_list_inspect_int: * @list: a #GList of #gint to be inspected. * * Inspects @list. @list should be #GList of #gint. The * returned string should be freed when no longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.6 */ gchar *gcut_list_inspect_int (const GList *list); /** * gcut_list_equal_uint: * @list1: a #GList of #guint to be compared. * @list2: a #GList of #guint to be compared. * * Compares two #GList, @list1 and @list2. @list1 and @list2 * should be #GList of #guint. * * Returns: TRUE if all corresponding unsigned integers of * @list1 and @list2 are same value, FALSE otherwise. * * Since: 1.0.6 */ gboolean gcut_list_equal_uint (const GList *list1, const GList *list2); /** * gcut_list_inspect_uint: * @list: a #GList of #guint to be inspected. * * Inspects @list. @list should be #GList of #guint. The * returned string should be freed when no longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.6 */ gchar *gcut_list_inspect_uint (const GList *list); /** * gcut_list_equal_string: * @list1: a #GList of string to be compared. * @list2: a #GList of string to be compared. * * Compares two #GList, @list1 and @list2. @list1 and @list2 * should be #GList of string. * * Returns: TRUE if all corresponding string of @list1 and * @list2 are same content string, FALSE otherwise. * * Since: 1.0.6 */ gboolean gcut_list_equal_string (const GList *list1, const GList *list2); /** * gcut_list_inspect_string: * @list: a #GList of string to be inspected. * * Inspects @list. @list should be #GList of string. The * returned string should be freed when no longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.6 */ gchar *gcut_list_inspect_string (const GList *list); /** * gcut_list_inspect_object: * @list: a #GList of #GObject to be inspected. * * Inspects @list. @list should be #GList of #GObject. The * returned string should be freed when no longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.6 */ gchar *gcut_list_inspect_object (const GList *list); /** * gcut_list_inspect_enum: * @type: a #GEnum type. * @list: a #GList of enum value to be inspected. * * Inspects @list. @list should be #GList of enum value of * #GEnum. The returned string should be freed when no * longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.6 */ gchar *gcut_list_inspect_enum (GType type, const GList *list); /** * gcut_list_inspect_flags: * @type: a #GFlags type. * @list: a #GList of flags value to be inspected. * * Inspects @list. @list should be #GList of flags value of * #GFlags. The returned string should be freed when no * longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.6 */ gchar *gcut_list_inspect_flags (GType type, const GList *list); #ifndef CUTTER_DISABLE_DEPRECATED /** * gcut_list_int_equal: * @list1: a #GList of #gint to be compared. * @list2: a #GList of #gint to be compared. * * Compares two #GList, @list1 and @list2. @list1 and @list2 * should be #GList of #gint. * * Returns: TRUE if all corresponding integers of @list1 and * @list2 are same value, FALSE otherwise. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_equal_int() instead. */ #define gcut_list_int_equal(list1, list2) \ gcut_list_equal_int(list1, list2) /** * gcut_list_int_inspect: * @list: a #GList of #gint to be inspected. * * Inspects @list. @list should be #GList of #gint. The * returned string should be freed when no longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_inspect_int() instead. */ #define gcut_list_int_inspect(list) \ gcut_list_inspect_int(list) /** * gcut_list_uint_equal: * @list1: a #GList of #guint to be compared. * @list2: a #GList of #guint to be compared. * * Compares two #GList, @list1 and @list2. @list1 and @list2 * should be #GList of #guint. * * Returns: TRUE if all corresponding unsigned integers of * @list1 and @list2 are same value, FALSE otherwise. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_equal_uint() instead. */ #define gcut_list_uint_equal(list1, list2) \ gcut_list_equal_uint(list1, list2) /** * gcut_list_uint_inspect: * @list: a #GList of #guint to be inspected. * * Inspects @list. @list should be #GList of #guint. The * returned string should be freed when no longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_inspect_uint() instead. */ #define gcut_list_uint_inspect(list) \ gcut_list_inspect_uint(list) /** * gcut_list_string_equal: * @list1: a #GList of string to be compared. * @list2: a #GList of string to be compared. * * Compares two #GList, @list1 and @list2. @list1 and @list2 * should be #GList of string. * * Returns: TRUE if all corresponding string of @list1 and * @list2 are same content string, FALSE otherwise. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_equal_string() instead. */ #define gcut_list_string_equal(list1, list2) \ gcut_list_equal_string(list1, list2) /** * gcut_list_string_inspect: * @list: a #GList of string to be inspected. * * Inspects @list. @list should be #GList of string. The * returned string should be freed when no longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_inspect_string() instead. */ #define gcut_list_string_inspect(list) \ gcut_list_inspect_string(list) /** * gcut_list_object_inspect: * @list: a #GList of #GObject to be inspected. * * Inspects @list. @list should be #GList of #GObject. The * returned string should be freed when no longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_inspect_object() instead. */ #define gcut_list_object_inspect(list) \ gcut_list_inspect_object(list) /** * gcut_list_enum_inspect: * @list: a #GList of enum value to be inspected. * @type: a #GEnum type. * * Inspects @list. @list should be #GList of enum value of * #GEnum. The returned string should be freed when no * longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_inspect_enum() instead. */ #define gcut_list_enum_inspect(list, type) \ gcut_list_inspect_enum(type, list) /** * gcut_list_flags_inspect: * @list: a #GList of flags value to be inspected. * @type: a #GFlags type. * * Inspects @list. @list should be #GList of flags value of * #GFlags. The returned string should be freed when no * longer needed. * * Returns: inspected @list as a string. * * Since: 1.0.5 * * Deprecated: 1.0.6: Use gcut_list_inspect_flags() instead. */ #define gcut_list_flags_inspect(list, type) \ gcut_list_inspect_flags(type, list) #endif G_END_DECLS #endif /* __GCUT_LIST_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-key-file.h0000644000175000017500000000333511205747031021151 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_KEY_FILE_H__ #define __GCUT_KEY_FILE_H__ #include G_BEGIN_DECLS /* TODO: 1.0.7: write document */ gint gcut_key_file_get_enum (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType enum_type, GError **error); guint gcut_key_file_get_flags (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType flags_type, GError **error); G_END_DECLS #endif /* __GCUT_KEY_FILE_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-enum.h0000644000175000017500000001070211205747031020404 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_ENUM_H__ #define __GCUT_ENUM_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-enum * @title: Assertion Utilities for GEnum and GFlags * @short_description: Utilities to write assertions related * to #GEnum or #GFlags more easily. * * To write assertions, you need to check equality and show * expected and actual values. * * The utilities help you to write assertions that are * related to #GEnum or #GFlags. */ /** * GCUT_ENUM_ERROR: * * Error domain for enum related operations. Errors in this domain * will be from the #GCutEnumError enumeration. * * Since: 1.0.6 */ #define GCUT_ENUM_ERROR (gcut_enum_error_quark()) GQuark gcut_enum_error_quark (void); /** * GCutEnumError: * @GCUT_ENUM_ERROR_INVALID_TYPE: Invalid type. * @GCUT_ENUM_ERROR_INVALID_VALUE: Invalid value. * * Error codes returned by enum related operation. * * Since: 1.0.6 */ typedef enum { GCUT_ENUM_ERROR_INVALID_TYPE, GCUT_ENUM_ERROR_INVALID_VALUE } GCutEnumError; /** * gcut_enum_inspect: * @enum_type: a #GEnum type. * @enum_value: a #GEnum value to be inspected. * * Inspects @enum_type value, @enum_value. The returned * string should be freed when no longer needed. * * Returns: inspected @enum_value as a string. * * Since: 1.0.5 */ gchar *gcut_enum_inspect (GType enum_type, gint enum_value); /** * gcut_enum_parse: * @enum_type: a #GEnum type. * @enum_value: a string to be parsed. * @error: return location for an error, or %NULL * * Parses @enum_value and returns a enum value of * @enum_type. @enum_value should be enum name or nick * name. If @enum_value isn't match then @error is set to a * #GCutEnumError. * * Returns: enum value of @enum_type corresponded to @enum_value. * * Since: 1.0.6 */ gint gcut_enum_parse (GType enum_type, const gchar *enum_value, GError **error); /** * gcut_flags_inspect: * @flags_type: a #GFlags type. * @flags_value: a #GFlags value to be inspected. * * Inspects @flags_type value, @flags_value. The returned * string should be freed when no longer needed. * * Returns: inspected @flags_value as a string. * * Since: 1.0.5 */ gchar *gcut_flags_inspect (GType flags_type, guint flags_value); /** * gcut_flags_parse: * @flags_type: a #GFlags type. * @flags_value: a string to be parsed. * @error: return location for an error, or %NULL * * Parses @flags_value and returns a flags value of * @flags_type. @flags_value should be formated as * "nick-or-name1|nick-or-name2|...|nick-or-nameN". If * @flags_value includes unknown flag then @error is set to * a #GCutEnumError. * * Returns: flags value of @flags_type corresponded to @flags_value. * * Since: 1.0.6 */ guint gcut_flags_parse (GType flags_type, const gchar *flags_value, GError **error); /** * gcut_flags_get_all: * @flags_type: a #GFlags type. * @error: return location for an error, or %NULL * * Gets a flags value that includes all available flag * values. * * Returns: a flags value that includes all available flag * values. * * Since: 1.0.6 */ guint gcut_flags_get_all (GType flags_type, GError **error); G_END_DECLS #endif /* __GCUT_ENUM_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-egg.c0000644000175000017500000005601211205747031020201 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #ifdef HAVE_SYS_WAIT_H # include #endif #include #include #include #include #include "gcut-io.h" #include "gcut-egg.h" #include "gcut-marshalers.h" #include "cut-utils.h" #define GCUT_EGG_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), GCUT_TYPE_EGG, GCutEggPrivate)) typedef struct _WatchOutputData { GCutEgg *egg; guint signal; } WatchOutputData; typedef struct _GCutEggPrivate GCutEggPrivate; struct _GCutEggPrivate { gchar **command; GArray *env; GSpawnFlags flags; GSpawnFlags must_flags; GPid pid; gint status; guint process_watch_id; GIOChannel *input; GIOChannel *output; GIOChannel *error; guint output_watch_id; guint error_watch_id; WatchOutputData *watch_output_data; WatchOutputData *watch_error_data; guint forced_termination_wait_time; }; enum { PROP_0, PROP_COMMAND }; enum { START_SIGNAL, OUTPUT_RECEIVED, ERROR_RECEIVED, REAPED, ERROR, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0}; G_DEFINE_TYPE(GCutEgg, gcut_egg, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void gcut_egg_class_init (GCutEggClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; spec = g_param_spec_pointer("command", "Command", "The command to be ran by the egg", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_COMMAND, spec); /** * GCutEgg::output-received: * @egg: the object which received the signal. * @chunk: the chunk read from an external process's * standard output. * @size: the size of @chunk. (%gsize) * * It is emitted each time an external process outputs * something to its standard output and it is read. * * Note that you need to run GLib's main loop by * g_main_loop_run(), g_main_context_iteration() and so * on for detecting an external process's output is * readable. * * Since: 1.0.6 */ signals[OUTPUT_RECEIVED] = g_signal_new("output-received", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GCutEggClass, output_received), NULL, NULL, #if GLIB_SIZEOF_SIZE_T == 8 _gcut_marshal_VOID__STRING_UINT64, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT64 #else _gcut_marshal_VOID__STRING_UINT, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT #endif ); /** * GCutEgg::error-received: * @egg: the object which received the signal. * @chunk: the chunk read from an external process's * standard error output. * @size: the size of @chunk. (%gsize) * * It is emitted each time an external process outputs * something to its standard error output and it is * read. * * Note that you need to run GLib's main loop by * g_main_loop_run(), g_main_context_iteration() and so * on for detecting an external process's output is * readable. * * Since: 1.0.6 */ signals[ERROR_RECEIVED] = g_signal_new("error-received", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GCutEggClass, error_received), NULL, NULL, #if GLIB_SIZEOF_SIZE_T == 8 _gcut_marshal_VOID__STRING_UINT64, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT64 #else _gcut_marshal_VOID__STRING_UINT, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT #endif ); /** * GCutEgg::reaped: * @egg: the object which received the signal. * @status: the exit status of an external process. * * It is emitted when an external process is exited. * * Note that you need to run GLib's main loop by * g_main_loop_run(), g_main_context_iteration() and so * on for detecting an external process is exited. * * Since: 1.0.6 */ signals[REAPED] = g_signal_new("reaped", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GCutEggClass, reaped), NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); /** * GCutEgg::error: * @egg: the object which received the signal. * @error: the error of an external process. (%GError) * * It is emitted each time an external process causes an * error. (e.g. IO error) * * Since: 1.0.6 */ signals[ERROR] = g_signal_new("error", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GCutEggClass, error), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); g_type_class_add_private(gobject_class, sizeof(GCutEggPrivate)); } static void gcut_egg_init (GCutEgg *egg) { GCutEggPrivate *priv = GCUT_EGG_GET_PRIVATE(egg); priv->command = NULL; priv->env = NULL; priv->flags = G_SPAWN_SEARCH_PATH; priv->must_flags = G_SPAWN_DO_NOT_REAP_CHILD; priv->pid = 0; priv->status = 0; priv->process_watch_id = 0; priv->input = NULL; priv->output = NULL; priv->error = NULL; priv->output_watch_id = 0; priv->error_watch_id = 0; priv->watch_output_data = NULL; priv->watch_error_data = NULL; priv->forced_termination_wait_time = 10; } static void remove_child_watch_func (GCutEggPrivate *priv) { g_source_remove(priv->process_watch_id); priv->process_watch_id = 0; } static void remove_output_watch_func (GCutEggPrivate *priv) { g_source_remove(priv->output_watch_id); priv->output_watch_id = 0; } static void remove_error_watch_func (GCutEggPrivate *priv) { g_source_remove(priv->error_watch_id); priv->error_watch_id = 0; } static gboolean cb_timeout_wait (gpointer user_data) { gboolean *is_timeout = user_data; *is_timeout = TRUE; return FALSE; } static void dispose_io_channel (GCutEggPrivate *priv) { if (priv->input) { g_io_channel_unref(priv->input); priv->input = NULL; } if (priv->output_watch_id > 0) remove_output_watch_func(priv); if (priv->error_watch_id > 0) remove_error_watch_func(priv); if (priv->output) { g_io_channel_unref(priv->output); priv->output = NULL; } if (priv->error) { g_io_channel_unref(priv->error); priv->error = NULL; } if (priv->watch_output_data) { g_free(priv->watch_output_data); priv->watch_output_data = NULL; } if (priv->watch_error_data) { g_free(priv->watch_error_data); priv->watch_error_data = NULL; } } static void dispose (GObject *object) { GCutEggPrivate *priv; priv = GCUT_EGG_GET_PRIVATE(object); if (priv->command) { g_strfreev(priv->command); priv->command = NULL; } if (priv->process_watch_id && priv->pid) { gcut_egg_kill(GCUT_EGG(object), SIGTERM); if (priv->forced_termination_wait_time > 0) { gboolean is_timeout = FALSE; guint timeout_wait_id; timeout_wait_id = g_timeout_add(priv->forced_termination_wait_time, cb_timeout_wait, &is_timeout); while (!is_timeout && priv->process_watch_id > 0 && priv->pid > 0) g_main_context_iteration(NULL, TRUE); g_source_remove(timeout_wait_id); } } if (priv->process_watch_id) remove_child_watch_func(priv); if (priv->pid) { gcut_egg_close(GCUT_EGG(object)); } dispose_io_channel(priv); G_OBJECT_CLASS(gcut_egg_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GCutEggPrivate *priv = GCUT_EGG_GET_PRIVATE(object); switch (prop_id) { case PROP_COMMAND: if (priv->command) g_strfreev(priv->command); priv->command = g_strdupv(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GCutEggPrivate *priv = GCUT_EGG_GET_PRIVATE(object); switch (prop_id) { case PROP_COMMAND: g_value_set_pointer(value, priv->command); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } GQuark gcut_egg_error_quark (void) { return g_quark_from_static_string("gcut-egg-error-quark"); } GCutEgg * gcut_egg_new (const gchar *command, ...) { GCutEgg *egg; va_list args; va_start(args, command); egg = gcut_egg_new_va_list(command, args); va_end(args); return egg; } GCutEgg * gcut_egg_new_va_list (const gchar *command, va_list args) { GCutEgg *egg; GArray *command_line; command_line = g_array_new(TRUE, TRUE, sizeof(gchar *)); while (command) { g_array_append_val(command_line, command); command = va_arg(args, const gchar *); } egg = gcut_egg_new_array(command_line); g_array_free(command_line, TRUE); return egg; } GCutEgg * gcut_egg_new_argv (gint args, gchar **argv) { GCutEgg *egg; gint i; GArray *command_line; command_line = g_array_new(TRUE, TRUE, sizeof(gchar *)); for (i = 0; i < args && argv[i]; i++) { const gchar *command = argv[i]; g_array_append_val(command_line, command); } egg = gcut_egg_new_array(command_line); g_array_free(command_line, TRUE); return egg; } GCutEgg * gcut_egg_new_strings (const gchar **commands) { return g_object_new(GCUT_TYPE_EGG, "command", commands, NULL); } GCutEgg * gcut_egg_new_array (GArray *command) { return gcut_egg_new_strings((const gchar **)(command->data)); } GSpawnFlags gcut_egg_get_flags (GCutEgg *egg) { return GCUT_EGG_GET_PRIVATE(egg)->flags; } void gcut_egg_set_flags (GCutEgg *egg, GSpawnFlags flags) { GCUT_EGG_GET_PRIVATE(egg)->flags = flags; } gchar ** gcut_egg_get_env (GCutEgg *egg) { GCutEggPrivate *priv; GArray *env; guint i; priv = GCUT_EGG_GET_PRIVATE(egg); if (!priv->env) return NULL; env = g_array_new(TRUE, TRUE, sizeof(gchar *)); for (i = 0; i < priv->env->len; i += 2) { gchar *pair; pair = g_strconcat(g_array_index(priv->env, gchar *, i), "=", g_array_index(priv->env, gchar *, i + 1), NULL); g_array_append_val(env, pair); } return (gchar **)g_array_free(env, FALSE); } void gcut_egg_set_env (GCutEgg *egg, const gchar *name, ...) { GCutEggPrivate *priv; va_list args; if (!name) return; priv = GCUT_EGG_GET_PRIVATE(egg); if (!priv->env) priv->env = g_array_new(TRUE, TRUE, sizeof(gchar *)); va_start(args, name); while (name) { const gchar *value; guint i; gboolean found = FALSE; value = va_arg(args, gchar *); for (i = 0; i < priv->env->len; i += 2) { const gchar *_name; _name = g_array_index(priv->env, const gchar *, i); if (g_str_equal(name, _name)) { if (value) { g_array_index(priv->env, gchar *, i + 1) = g_strdup(value); } else { g_array_remove_index(priv->env, i + 1); g_array_remove_index(priv->env, i); } found = TRUE; break; } } if (!found && value) { const gchar *duped_string; duped_string = g_strdup(name); g_array_append_val(priv->env, duped_string); duped_string = g_strdup(value); g_array_append_val(priv->env, duped_string); } name = va_arg(args, gchar *); } va_end(args); } static void reap_child (GCutEgg *egg, GPid pid, gint status) { GCutEggPrivate *priv = GCUT_EGG_GET_PRIVATE(egg); if (priv->pid != pid) return; remove_child_watch_func(priv); priv->status = status; g_signal_emit(egg, signals[REAPED], 0, status); gcut_egg_close(egg); } static void child_watch_func (GPid pid, gint status, gpointer data) { GCutEgg *egg = data; GCutEggPrivate *priv; priv = GCUT_EGG_GET_PRIVATE(egg); reap_child(egg, pid, status); } static GIOChannel * create_output_channel (gint fd) { GIOChannel *channel; #ifndef G_OS_WIN32 channel = g_io_channel_unix_new(fd); #else channel = g_io_channel_win32_new_fd(fd); #endif if (!channel) return NULL; g_io_channel_set_close_on_unref(channel, TRUE); return channel; } static GIOChannel * create_input_channel (gint fd, guint *watch_id, GIOFunc watch_func, gpointer user_data) { GIOChannel *channel; #ifndef G_OS_WIN32 channel = g_io_channel_unix_new(fd); #else channel = g_io_channel_win32_new_fd(fd); #endif if (!channel) return NULL; g_io_channel_set_close_on_unref(channel, TRUE); g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL); *watch_id = g_io_add_watch(channel, G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL, watch_func, user_data); return channel; } #define BUFFER_SIZE 4096 static gboolean read_from_io_channel (GIOChannel *channel, GCutEgg *egg, guint signal) { GCutEggPrivate *priv; gboolean need_more_data = TRUE; priv = GCUT_EGG_GET_PRIVATE(egg); while (need_more_data) { GIOStatus status; gchar stream[BUFFER_SIZE]; gsize length = 0; GError *error = NULL; status = g_io_channel_read_chars(channel, stream, BUFFER_SIZE, &length, &error); if (error) { g_signal_emit(egg, signals[ERROR], 0, error); g_error_free(error); need_more_data = FALSE; break; } if (status == G_IO_STATUS_EOF) need_more_data = FALSE; if (status == G_IO_STATUS_AGAIN || length == 0) break; g_signal_emit(egg, signal, 0, stream, length); } return need_more_data; } static gboolean watch_output (GIOChannel *source, GIOCondition condition, gpointer user_data) { WatchOutputData *data = user_data; gboolean keep_callback = TRUE; if (condition & (G_IO_IN | G_IO_PRI)) { keep_callback = read_from_io_channel(source, data->egg, data->signal); } if (condition & (G_IO_ERR | G_IO_NVAL)) { gchar *message; GError *error; message = gcut_io_inspect_condition(condition); error = g_error_new(GCUT_EGG_ERROR, GCUT_EGG_ERROR_IO_ERROR, "%s", message); g_signal_emit(data->egg, signals[ERROR], 0, error); g_free(message); g_error_free(error); keep_callback = FALSE; } if (condition & G_IO_HUP) keep_callback = FALSE; return keep_callback; } gboolean gcut_egg_hatch (GCutEgg *egg, GError **error) { GCutEggPrivate *priv; gboolean success; gint input_fd = 0, output_fd = 0, error_fd = 0; gchar **env; priv = GCUT_EGG_GET_PRIVATE(egg); if (!priv->command) { g_set_error(error, GCUT_EGG_ERROR, GCUT_EGG_ERROR_COMMAND_LINE, "command line isn't set"); return FALSE; } if (priv->pid > 0) { gchar *command; command = g_strjoinv(" ", priv->command); g_set_error(error, GCUT_EGG_ERROR, GCUT_EGG_ERROR_ALREADY_RUNNING, "already running: %s", command); g_free(command); return FALSE; } dispose_io_channel(priv); env = gcut_egg_get_env(egg); success = g_spawn_async_with_pipes(NULL, priv->command, env, priv->flags | priv->must_flags, NULL, NULL, &priv->pid, &input_fd, &output_fd, &error_fd, error); if (env) g_strfreev(env); if (!success) return FALSE; priv->process_watch_id = g_child_watch_add(priv->pid, child_watch_func, egg); if (input_fd > 0) priv->input = create_output_channel(input_fd); if (output_fd > 0) { priv->watch_output_data = g_new(WatchOutputData, 1); priv->watch_output_data->egg = egg; priv->watch_output_data->signal = signals[OUTPUT_RECEIVED]; priv->output = create_input_channel(output_fd, &(priv->output_watch_id), watch_output, priv->watch_output_data); } if (error_fd > 0) { priv->watch_error_data = g_new(WatchOutputData, 1); priv->watch_error_data->egg = egg; priv->watch_error_data->signal = signals[ERROR_RECEIVED]; priv->error = create_input_channel(error_fd, &(priv->error_watch_id), watch_output, priv->watch_error_data); } return TRUE; } void gcut_egg_close (GCutEgg *egg) { GCutEggPrivate *priv; priv = GCUT_EGG_GET_PRIVATE(egg); if (priv->pid) { g_spawn_close_pid(priv->pid); priv->pid = 0; } } gboolean gcut_egg_write (GCutEgg *egg, const gchar *chunk, gsize size, GError **error) { GCutEggPrivate *priv; gsize rest_size = size; priv = GCUT_EGG_GET_PRIVATE(egg); while (rest_size > 0) { gsize written_size = 0; GIOStatus status; status = g_io_channel_write_chars(priv->input, chunk, rest_size, &written_size, error); if (status == G_IO_STATUS_ERROR) return FALSE; if (written_size == 0) return FALSE; rest_size -= written_size; chunk += written_size; } return TRUE; } GPid gcut_egg_get_pid (GCutEgg *egg) { return GCUT_EGG_GET_PRIVATE(egg)->pid; } gint gcut_egg_wait (GCutEgg *egg, guint timeout, GError **error) { GCutEggPrivate *priv; gboolean is_timeout = FALSE; guint timeout_id; priv = GCUT_EGG_GET_PRIVATE(egg); if (!priv) { g_set_error(error, GCUT_EGG_ERROR, GCUT_EGG_ERROR_INVALID_OBJECT, "passed GCutEgg is invalid"); return -1; } if (priv->pid == 0) { gchar *command = NULL; if (priv->command) command = g_strjoinv(" ", priv->command); if (command) { g_set_error(error, GCUT_EGG_ERROR, GCUT_EGG_ERROR_NOT_RUNNING, "not running: <%s>", command); g_free(command); } else { g_set_error(error, GCUT_EGG_ERROR, GCUT_EGG_ERROR_NOT_RUNNING, "not running"); } return -1; } timeout_id = g_timeout_add(timeout, cb_timeout_wait, &is_timeout); while (!is_timeout && priv->pid > 0) g_main_context_iteration(NULL, TRUE); g_source_remove(timeout_id); if (is_timeout) { gchar *command; command = g_strjoinv(" ", priv->command); g_set_error(error, GCUT_EGG_ERROR, GCUT_EGG_ERROR_TIMEOUT, "timeout while waiting reaped: <%s>", command); g_free(command); return -1; } return priv->status; } void gcut_egg_kill (GCutEgg *egg, int signal_number) { GCutEggPrivate *priv; priv = GCUT_EGG_GET_PRIVATE(egg); g_return_if_fail(priv != NULL); g_return_if_fail(priv->pid > 0); #ifndef G_OS_WIN32 kill(priv->pid, signal_number); #else cut_win32_kill_process(priv->pid, 0); #endif } GIOChannel * gcut_egg_get_input (GCutEgg *egg) { return GCUT_EGG_GET_PRIVATE(egg)->input; } GIOChannel * gcut_egg_get_output (GCutEgg *egg) { return GCUT_EGG_GET_PRIVATE(egg)->output; } GIOChannel * gcut_egg_get_error (GCutEgg *egg) { return GCUT_EGG_GET_PRIVATE(egg)->error; } guint gcut_egg_get_forced_termination_wait_time (GCutEgg *egg) { return GCUT_EGG_GET_PRIVATE(egg)->forced_termination_wait_time; } void gcut_egg_set_forced_termination_wait_time (GCutEgg *egg, guint timeout) { GCUT_EGG_GET_PRIVATE(egg)->forced_termination_wait_time = timeout; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-io.c0000644000175000017500000000361111205747031020043 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "gcut-io.h" gchar * gcut_io_inspect_condition (GIOCondition condition) { GArray *messages; gchar *message; messages = g_array_new(TRUE, TRUE, sizeof(gchar *)); if (condition & G_IO_IN) { message = "In"; g_array_append_val(messages, message); } if (condition & G_IO_OUT) { message = "Out"; g_array_append_val(messages, message); } if (condition & G_IO_PRI) { message = "Priority high"; g_array_append_val(messages, message); } if (condition & G_IO_ERR) { message = "Error"; g_array_append_val(messages, message); } if (condition & G_IO_HUP) { message = "Hung up"; g_array_append_val(messages, message); } if (condition & G_IO_NVAL) { message = "Invalid request"; g_array_append_val(messages, message); } message = g_strjoinv(" | ", (gchar **)(messages->data)); g_array_free(messages, TRUE); return message; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-string-io-channel.h0000644000175000017500000000537011523751077022776 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_STRING_IO_CHANNEL_H__ #define __GCUT_STRING_IO_CHANNEL_H__ #include G_BEGIN_DECLS /* TODO: 1.0.7: write document */ GIOChannel *gcut_string_io_channel_new (const gchar *initial); GString *gcut_string_io_channel_get_string (GIOChannel *channel); void gcut_string_io_channel_clear (GIOChannel *channel); gsize gcut_string_io_channel_get_buffer_limit (GIOChannel *channel); void gcut_string_io_channel_set_buffer_limit (GIOChannel *channel, gsize limit); gsize gcut_string_io_channel_get_limit (GIOChannel *channel); void gcut_string_io_channel_set_limit (GIOChannel *channel, gsize limit); gboolean gcut_string_io_channel_get_read_fail (GIOChannel *channel); void gcut_string_io_channel_set_read_fail (GIOChannel *channel, gboolean read_fail); gboolean gcut_string_io_channel_get_pipe_mode (GIOChannel *channel); void gcut_string_io_channel_set_pipe_mode (GIOChannel *channel, gboolean pipe_mode); GMainContext *gcut_string_io_channel_get_main_context (GIOChannel *channel); void gcut_string_io_channel_set_main_context (GIOChannel *channel, GMainContext *main_context); G_END_DECLS #endif /* __GCUT_STRING_IO_CHANNEL_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-marshalers.list0000644000175000017500000000031111205747031022320 0ustar koukouVOID:OBJECT,OBJECT VOID:OBJECT,OBJECT,OBJECT VOID:OBJECT,UINT VOID:OBJECT,UINT,UINT VOID:UINT,UINT VOID:STRING,STRING VOID:STRING,UINT VOID:STRING,UINT64 VOID:OBJECT,BOOLEAN VOID:OBJECT,OBJECT,BOOLEAN cutter-testing-framework-1.1.7/gcutter/gcut-error.c0000644000175000017500000000356711205747031020577 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gcut-error.h" gboolean gcut_error_equal (const GError *error1, const GError *error2) { if (error1 == error2) return TRUE; if (error1 == NULL || error2 == NULL) return FALSE; if (error1->domain != error2->domain) return FALSE; if (error1->code != error2->code) return FALSE; if (error1->message == NULL && error2->message == NULL) return TRUE; if (error1->message == NULL || error2->message == NULL) return FALSE; return g_str_equal(error1->message, error2->message); } gchar * gcut_error_inspect (const GError *error) { GString *inspected; if (!error) return g_strdup("No error"); inspected = g_string_new(g_quark_to_string(error->domain)); g_string_append_printf(inspected, ":%d", error->code); if (error->message) { g_string_append(inspected, ": "); g_string_append(inspected, error->message); } return g_string_free(inspected, FALSE); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-list.c0000644000175000017500000001517711424022520020411 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "gcut-list.h" #include "gcut-object.h" #include "gcut-enum.h" #include "gcut-test-utils.h" GList * gcut_list_new (gpointer element, ...) { GList *list = NULL; va_list args; va_start(args, element); while (element) { list = g_list_prepend(list, element); element = va_arg(args, gpointer); } va_end(args); return g_list_reverse(list); } gboolean gcut_list_equal (const GList *list1, const GList *list2, GEqualFunc equal_func) { const GList *node1, *node2; for (node1 = list1, node2 = list2; node1 && node2; node1 = g_list_next(node1), node2 = g_list_next(node2)) { if (!equal_func(node1->data, node2->data)) return FALSE; } return node1 == NULL && node2 == NULL; } gchar * gcut_list_inspect (const GList *list, GCutInspectFunction inspect_func, gpointer user_data) { const GList *node; GString *string; string = g_string_new("("); node = list; while (node) { inspect_func(string, node->data, user_data); node = g_list_next(node); if (node) g_string_append(string, ", "); } g_string_append(string, ")"); return g_string_free(string, FALSE); } static gboolean equal_int (gconstpointer data1, gconstpointer data2) { return GPOINTER_TO_INT(data1) == GPOINTER_TO_INT(data2); } gboolean gcut_list_equal_int (const GList *list1, const GList *list2) { return gcut_list_equal(list1, list2, equal_int); } static void inspect_int (GString *string, gconstpointer data, gpointer user_data) { g_string_append_printf(string, "%d", GPOINTER_TO_INT(data)); } gchar * gcut_list_inspect_int (const GList *list) { return gcut_list_inspect(list, inspect_int, NULL); } GList * gcut_list_int_new (guint n, gint value, ...) { GList *list = NULL; va_list args; guint i; va_start(args, value); for (i = 0; i < n; i++) { list = g_list_prepend(list, GINT_TO_POINTER(value)); value = va_arg(args, gint); } va_end(args); return g_list_reverse(list); } static gboolean equal_uint (gconstpointer data1, gconstpointer data2) { return GPOINTER_TO_UINT(data1) == GPOINTER_TO_UINT(data2); } gboolean gcut_list_equal_uint (const GList *list1, const GList *list2) { return gcut_list_equal(list1, list2, equal_uint); } static void inspect_uint (GString *string, gconstpointer data, gpointer user_data) { g_string_append_printf(string, "%u", GPOINTER_TO_UINT(data)); } gchar * gcut_list_inspect_uint (const GList *list) { return gcut_list_inspect(list, inspect_uint, NULL); } GList * gcut_list_uint_new (guint n, guint value, ...) { GList *list = NULL; va_list args; guint i; va_start(args, value); for (i = 0; i < n; i++) { list = g_list_prepend(list, GUINT_TO_POINTER(value)); value = va_arg(args, guint); } va_end(args); return g_list_reverse(list); } static gboolean equal_string (gconstpointer data1, gconstpointer data2) { if (data1 == NULL && data2 == NULL) return TRUE; if (data1 == NULL || data2 == NULL) return FALSE; return strcmp(data1, data2) == 0; } gboolean gcut_list_equal_string (const GList *list1, const GList *list2) { return gcut_list_equal(list1, list2, equal_string); } static void inspect_string (GString *string, gconstpointer data, gpointer user_data) { const gchar *value = data; if (value) g_string_append_printf(string, "\"%s\"", value); else g_string_append(string, "NULL"); } gchar * gcut_list_inspect_string (const GList *list) { return gcut_list_inspect(list, inspect_string, NULL); } GList * gcut_list_string_new (const gchar *value, ...) { GList *list = NULL; va_list args; va_start(args, value); while (value) { list = g_list_prepend(list, g_strdup(value)); value = va_arg(args, const gchar *); } va_end(args); return g_list_reverse(list); } GList * gcut_list_string_new_array (const gchar **strings) { GList *list = NULL; if (!strings) return NULL; for (; *strings; strings++) { list = g_list_prepend(list, g_strdup(*strings)); } return g_list_reverse(list); } void gcut_list_string_free (GList *list) { g_list_foreach(list, (GFunc)g_free, NULL); g_list_free(list); } static void object_unref_safe (gpointer object, gpointer user_data) { if (object) g_object_unref(object); } void gcut_list_object_free (GList *list) { g_list_foreach(list, object_unref_safe, NULL); g_list_free(list); } static void inspect_object (GString *string, gconstpointer data, gpointer user_data) { gchar *inspected_object; inspected_object = gcut_object_inspect(data); g_string_append(string, inspected_object); g_free(inspected_object); } gchar * gcut_list_inspect_object (const GList *list) { return gcut_list_inspect(list, inspect_object, NULL); } static void inspect_enum (GString *string, gconstpointer data, gpointer user_data) { gchar *inspected_enum; GType *type = user_data; inspected_enum = gcut_enum_inspect(*type, GPOINTER_TO_INT(data)); g_string_append(string, inspected_enum); g_free(inspected_enum); } gchar * gcut_list_inspect_enum (GType type, const GList *list) { return gcut_list_inspect(list, inspect_enum, &type); } static void inspect_flags (GString *string, gconstpointer data, gpointer user_data) { gchar *inspected_flags; GType *type = user_data; inspected_flags = gcut_flags_inspect(*type, GPOINTER_TO_UINT(data)); g_string_append(string, inspected_flags); g_free(inspected_flags); } gchar * gcut_list_inspect_flags (GType type, const GList *list) { return gcut_list_inspect(list, inspect_flags, &type); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-main.h0000644000175000017500000000226511205747031020371 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_MAIN_H__ #define __GCUT_MAIN_H__ #include G_BEGIN_DECLS void gcut_init (void); void gcut_value_equal_init (void); void gcut_quit (void); void gcut_value_equal_quit (void); G_END_DECLS #endif /* __GCUT_MAIN_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-data-helper.h0000644000175000017500000001046311400100174021616 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_DATA_HELPER_H__ #define __GCUT_DATA_HELPER_H__ #include G_BEGIN_DECLS gchar gcut_data_get_char_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); const gchar *gcut_data_get_string_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gint gcut_data_get_int_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); guint gcut_data_get_uint_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gint64 gcut_data_get_int64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); guint64 gcut_data_get_uint64_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gsize gcut_data_get_size_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); GType gcut_data_get_type_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); guint gcut_data_get_flags_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gint gcut_data_get_enum_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gconstpointer gcut_data_get_pointer_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gconstpointer gcut_data_get_boxed_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gpointer gcut_data_get_object_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gboolean gcut_data_get_boolean_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); gdouble gcut_data_get_double_helper (gconstpointer data, const gchar *field_name, CutCallbackFunction callback); G_END_DECLS #endif /* __GCUT_DATA_HELPER_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-event-loop.h0000644000175000017500000002547511523756466021564 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_EVENT_LOOP_H__ #define __GCUT_EVENT_LOOP_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-event-loop * @title: Abstracted event loop * @short_description: Abstracted event loop API for * customizing event loop in GCutter. * * #GCutEventLoop encapsulates event loop. For example, * event loop is used in #GCutProcess. It uses the GLib's * default main context for it. * * Normally, a custom #GCutEventLoop isn't required. It is * needed some special case. For example, using libev as * event loop backend instead of GLib's main loop. * * GCutter provides #GCutEventLoop for GLib's main context * and main loop, #GCutGLibEventLoop. * * Since: 1.1.6 */ #define GCUT_TYPE_EVENT_LOOP (gcut_event_loop_get_type ()) #define GCUT_EVENT_LOOP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCUT_TYPE_EVENT_LOOP, GCutEventLoop)) #define GCUT_EVENT_LOOP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCUT_TYPE_EVENT_LOOP, GCutEventLoopClass)) #define GCUT_IS_EVENT_LOOP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCUT_TYPE_EVENT_LOOP)) #define GCUT_IS_EVENT_LOOP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCUT_TYPE_EVENT_LOOP)) #define GCUT_EVENT_LOOP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCUT_TYPE_EVENT_LOOP, GCutEventLoopClass)) #define GCUT_EVENT_LOOP_ERROR (gcut_event_loop_error_quark()) typedef struct _GCutEventLoop GCutEventLoop; typedef struct _GCutEventLoopClass GCutEventLoopClass; struct _GCutEventLoop { GObject object; }; struct _GCutEventLoopClass { GObjectClass parent_class; void (*run) (GCutEventLoop *loop); gboolean (*iterate) (GCutEventLoop *loop, gboolean may_block); void (*quit) (GCutEventLoop *loop); guint (*watch_io) (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); guint (*watch_child_full) (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); guint (*add_timeout_full) (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); guint (*add_idle_full) (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); gboolean (*remove) (GCutEventLoop *loop, guint tag); }; GQuark gcut_event_loop_error_quark (void); GType gcut_event_loop_get_type (void) G_GNUC_CONST; /** * gcut_event_loop_run: * @loop: a #GCutEventLoop. * * Runs the given event loop until gcut_event_loop_quit() is * called on the loop. * * Since: 1.1.6 */ void gcut_event_loop_run (GCutEventLoop *loop); /** * gcut_event_loop_iterate: * @loop: a #GCutEventLoop. * @may_block: whether the call may block. * * Runs a single iteration for the given event loop. If no * events are ready and @may_block is %TRUE, waiting * for a event become ready. Otherwise, if @may_block is * %FALSE, events are not waited to become ready. * * Returns: %TRUE if a event was dispatched. * * Since: 1.1.6 */ gboolean gcut_event_loop_iterate (GCutEventLoop *loop, gboolean may_block); /** * gcut_event_loop_quit: * @loop: a #GCutEventLoop. * * Stops the @loop from running. * * Since: 1.1.6 */ void gcut_event_loop_quit (GCutEventLoop *loop); /** * gcut_event_loop_watch_io: * @loop: a #GCutEventLoop. * @channel: a #GIOChannel * @condition: conditions to watch for * @function: function to call * @data: data to pass to @function * * Adds the @channel into @loop with the default * priority. @function is called when @condition is met for * the given @channel. * * Returns: the event ID. * * Since: 1.1.6 */ guint gcut_event_loop_watch_io (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); /** * gcut_event_loop_watch_child: * @loop: a #GCutEventLoop. * @pid: process ID to watch * @function: function to call * @data: data to pass to @function * * Adds the @function to be called when the child indicated * by @pid exits into @loop with the default priority. * * Returns: the event ID. * * Since: 1.1.6 */ guint gcut_event_loop_watch_child (GCutEventLoop *loop, GPid pid, GChildWatchFunc function, gpointer data); /** * gcut_event_loop_watch_child_full: * @loop: a #GCutEventLoop. * @priority: the priority of the event. * @pid: process ID to watch * @function: function to call * @data: data to pass to @function * @notify: function to call when the event is removed, or %NULL * * Adds the @function to be called when the child indicated * by @pid exits into @loop with the @priority. * * Returns: the event ID. * * Since: 1.1.6 */ guint gcut_event_loop_watch_child_full (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); /** * gcut_event_loop_add_timeout: * @loop: a #GCutEventLoop. * @interval_in_seconds: the time between calls to the @function, in seconds. * @function: function to call * @data: data to pass to @function * * Adds the @function to be called at regular intervals, * with the default priority. * * Returns: the event ID. * * Since: 1.1.6 */ guint gcut_event_loop_add_timeout (GCutEventLoop *loop, gdouble interval_in_seconds, GSourceFunc function, gpointer data); /** * gcut_event_loop_add_timeout_full: * @loop: a #GCutEventLoop. * @priority: the priority of the event. * @interval_in_seconds: the time between calls to the @function, in seconds. * @function: function to call * @data: data to pass to @function * @notify: function to call when the event is removed, or %NULL * * Adds the @function to be called at regular intervals, * with the @priority. * * Returns: the event ID. * * Since: 1.1.6 */ guint gcut_event_loop_add_timeout_full (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); /** * gcut_event_loop_add_idle: * @loop: a #GCutEventLoop. * @function: function to call * @data: data to pass to @function * * Adds the @function to be called whenever there are no * higher priority events pending with the default priority. * * Returns: the event ID. * * Since: 1.1.6 */ guint gcut_event_loop_add_idle (GCutEventLoop *loop, GSourceFunc function, gpointer data); /** * gcut_event_loop_add_idle_full: * @loop: a #GCutEventLoop. * @priority: the priority of the event. * @function: function to call * @data: data to pass to @function * @notify: function to call when the event is removed, or %NULL * * Adds the @function to be called whenever there are no * higher priority events pending with the @priority. * * Returns: the event ID. * * Since: 1.1.6 */ guint gcut_event_loop_add_idle_full (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); /** * gcut_event_loop_remove: * @loop: a #GCutEventLoop. * @tag: the ID of the source to remove * * Removes the event with the given ID, @tag. * * Returns: %TRUE if the source was found and removed. * * Since: 1.1.6 */ gboolean gcut_event_loop_remove (GCutEventLoop *loop, guint tag); G_END_DECLS #endif /* __GCUT_EVENT_LOOP_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-inspect.h0000644000175000017500000002115011400100174021070 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_INSPECT_H__ #define __GCUT_INSPECT_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-inspect * @title: Object inspection functions * @short_description: Functions to inspect an object for * debugging. * * In test result, we need to know detail of inspected * objects for debugging. Functions of this section help us * to inspect interested objects. * * Since: 1.0.6 */ /** * gcut_inspect_direct: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as unsigned integer. * * e.g.: * |[ * gcut_inspect_direct(string, GUINT_TO_POINTER(100), NULL) -> "100" * ]| * * Since: 1.0.6 */ void gcut_inspect_direct (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_int: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as integer. * * e.g.: * |[ * gint int_value = 100; * gcut_inspect_int(string, &int_value, NULL) -> "100" * ]| * * Since: 1.0.6 */ void gcut_inspect_int (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_uint: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as unsigned integer. * * e.g.: * |[ * guint uint_value = 100; * gcut_inspect_uint(string, &uint_value, NULL) -> "100" * ]| * * Since: 1.0.6 */ void gcut_inspect_uint (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_int64: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as 64-bit integer. * * e.g.: * |[ * gint64 int64_value = 100; * gcut_inspect_int64(string, &int64_value, NULL) -> "100" * ]| * * Since: 1.1.3 */ void gcut_inspect_int64 (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_uint64: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as 64-bit unsigned integer. * * e.g.: * |[ * guint64 uint64_value = 100; * gcut_inspect_uint64(string, &uint64_value, NULL) -> "100" * ]| * * Since: 1.1.3 */ void gcut_inspect_uint64 (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_size: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as unsigned integer. * * e.g.: * |[ * gsize size_value = 100; * gcut_inspect_size(string, &size_value, NULL) -> "100" * ]| * * Since: 1.1.3 */ void gcut_inspect_size (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_char: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as character. * * e.g.: * |[ * gcut_inspect_char(string, 'C', NULL) -> "'C'" * gcut_inspect_char(string, '\0', NULL) -> "'\0'" * gcut_inspect_char(string, '\n', NULL) -> "'\n'" * ]| * * Since: 1.1.3 */ void gcut_inspect_char (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_string: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as string. It also accepts %NULL. * * e.g.: * |[ * gcut_inspect_string(string, "string", NULL) -> "\"string\"" * ]| * * Since: 1.0.6 */ void gcut_inspect_string (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_type: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as %GType. * * e.g.: * |[ * gcut_inspect_type(string, GTK_TYPE_WINDOW, NULL) -> "<GtkWindow>" * ]| * * Since: 1.0.6 */ void gcut_inspect_type (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_flags: * @string: the output string. * @data: the interested target. * @user_data: the pointer of GFlags type. * * Shows @data as value a GFlags type. * * e.g.: * |[ * GType flags_type; * GtkWidgetFlags flags; * * flags_type = GTK_TYPE_WIDGET_FLAGS; * flags = GTK_TOPLEVEL | GTK_VISIBLE; * gcut_inspect_flags(string, &flags, &flags_type); * -> #<GtkWidgetFlags: toplevel|visible (GTK_TOPLEVEL:0x10)|(GTK_VISIBLE:0x100)> * ]| * * Since: 1.0.6 */ void gcut_inspect_flags (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_enum: * @string: the output string. * @data: the interested target. * @user_data: the pointer of GEnum type. * * Shows @data as value of a GEnum type. * * e.g.: * |[ * GType enum_type; * GtkWidgetHelpType value; * * enum_type = GTK_TYPE_WIDGET_HELP_TYPE; * value = GTK_WIDGET_HELP_TOOLTIP; * gcut_inspect_enum(string, &value, &enum_type); * -> #<GtkWidgetHelpType: tooltip(GTK_WIDGET_HELP_TOOLTIP:0)> * ]| * * Since: 1.0.6 */ void gcut_inspect_enum (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_pointer * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as a pointer. * * e.g.: * |[ * memory = malloc(1); * gcut_inspect_pointer(string, memory, NULL) -> "#<0xXXXXXXX>" * ]| * * Since: 1.0.6 */ void gcut_inspect_pointer (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_boolean: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as boolean. * * e.g.: * |[ * gboolean boolean_value; * boolean_value = TRUE; * gcut_inspect_boolean(string, &boolean_value, NULL) -> "TRUE" * boolean_value = FALSE; * gcut_inspect_boolean(string, &boolean_value, NULL) -> "FALSE" * ]| * * Since: 1.1.3 */ void gcut_inspect_boolean (GString *string, gconstpointer data, gpointer user_data); /** * gcut_inspect_double: * @string: the output string. * @data: the interested target. * @user_data: the data passed by user. (ignored) * * Shows @data as double floating point number. * * e.g.: * |[ * gdouble double_value = 2.9; * gcut_inspect_double(string, &double_value, NULL) -> "2.9" * ]| * * Since: 1.1.3 */ void gcut_inspect_double (GString *string, gconstpointer data, gpointer user_data); G_END_DECLS #endif /* __GCUT_INSPECT_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-marshalers.h0000644000175000017500000001240211243244160021575 0ustar koukou #ifndef ___gcut_marshal_MARSHAL_H__ #define ___gcut_marshal_MARSHAL_H__ #include G_BEGIN_DECLS /* VOID:OBJECT,OBJECT (../gcutter/gcut-marshalers.list:1) */ extern void _gcut_marshal_VOID__OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,OBJECT,OBJECT (../gcutter/gcut-marshalers.list:2) */ extern void _gcut_marshal_VOID__OBJECT_OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,UINT (../gcutter/gcut-marshalers.list:3) */ extern void _gcut_marshal_VOID__OBJECT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,UINT,UINT (../gcutter/gcut-marshalers.list:4) */ extern void _gcut_marshal_VOID__OBJECT_UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,UINT (../gcutter/gcut-marshalers.list:5) */ extern void _gcut_marshal_VOID__UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:STRING,STRING (../gcutter/gcut-marshalers.list:6) */ extern void _gcut_marshal_VOID__STRING_STRING (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:STRING,UINT (../gcutter/gcut-marshalers.list:7) */ extern void _gcut_marshal_VOID__STRING_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:STRING,UINT64 (../gcutter/gcut-marshalers.list:8) */ extern void _gcut_marshal_VOID__STRING_UINT64 (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,BOOLEAN (../gcutter/gcut-marshalers.list:9) */ extern void _gcut_marshal_VOID__OBJECT_BOOLEAN (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,OBJECT,BOOLEAN (../gcutter/gcut-marshalers.list:10) */ extern void _gcut_marshal_VOID__OBJECT_OBJECT_BOOLEAN (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); G_END_DECLS #endif /* ___gcut_marshal_MARSHAL_H__ */ cutter-testing-framework-1.1.7/gcutter/gcut-string-io-channel.c0000644000175000017500000003615011523751077022771 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "gcut-string-io-channel.h" #include typedef struct _GCutStringIOChannel GCutStringIOChannel; typedef struct _GCutStringSource GCutStringSource; struct _GCutStringIOChannel { GIOChannel channel; GString *string; gint64 write_offset; gint64 read_offset; gsize buffer_limit; gsize limit; gboolean read_fail; GIOFlags flags; gboolean reach_eof; gboolean pipe_mode; GMainContext *main_context; }; struct _GCutStringSource { GSource source; GIOChannel *channel; GIOCondition condition; GIOCondition available_condition; }; static gboolean source_is_available (GSource *source) { GCutStringSource *string_source = (GCutStringSource *)source; GIOChannel *channel; GCutStringIOChannel *string_channel; GIOCondition available_buffer_condition; GIOCondition all_input_condition, all_error_condition; channel = string_source->channel; string_channel = (GCutStringIOChannel *)(channel); string_source->available_condition = 0; available_buffer_condition = g_io_channel_get_buffer_condition(channel) & string_source->condition; all_input_condition = (G_IO_IN | G_IO_PRI); if (string_source->condition & all_input_condition && channel->is_readable) { string_source->available_condition |= available_buffer_condition; if (string_channel->string && ((string_channel->string->len > string_channel->read_offset) || (!string_channel->pipe_mode && string_channel->string->len == string_channel->read_offset && !string_channel->reach_eof))) string_source->available_condition |= (all_input_condition & string_source->condition); } if (string_source->condition & G_IO_OUT && channel->is_writeable) string_source->available_condition |= G_IO_OUT; all_error_condition = (G_IO_ERR | G_IO_HUP | G_IO_NVAL); if (string_source->condition & all_error_condition) { string_source->available_condition |= available_buffer_condition; if (string_channel->string == NULL) string_source->available_condition |= (all_error_condition & string_source->condition); } return string_source->available_condition > 0; } static gboolean gcut_source_string_prepare (GSource *source, gint *timeout) { *timeout = -1; return source_is_available(source); } static gboolean gcut_source_string_check (GSource *source) { return source_is_available(source); } static gboolean gcut_source_string_dispatch (GSource *source, GSourceFunc callback, gpointer user_data) { GCutStringSource *string_source = (GCutStringSource *)source; GIOFunc func = (GIOFunc)callback; if (func) return func(string_source->channel, string_source->available_condition, user_data); else return FALSE; } static void gcut_source_string_finalize (GSource *source) { GCutStringSource *string_source = (GCutStringSource *)source; g_io_channel_unref(string_source->channel); } static GSourceFuncs gcut_source_string_funcs = { gcut_source_string_prepare, gcut_source_string_check, gcut_source_string_dispatch, gcut_source_string_finalize }; static GIOStatus gcut_string_io_channel_read (GIOChannel *channel, gchar *buf, gsize count, gsize *bytes_read, GError **error) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; gsize rest; if (string_channel->read_fail) { *bytes_read = 0; g_set_error(error, G_IO_CHANNEL_ERROR, g_io_channel_error_from_errno(EIO), "%s", g_strerror(EIO)); return G_IO_STATUS_ERROR; } rest = string_channel->string->len - (gsize)string_channel->read_offset; *bytes_read = MIN(count, rest); memcpy(buf, string_channel->string->str + string_channel->read_offset, *bytes_read); string_channel->read_offset += *bytes_read; if (!string_channel->pipe_mode) string_channel->write_offset += *bytes_read; if (string_channel->string->len > string_channel->read_offset || (string_channel->string->len == string_channel->read_offset && *bytes_read > 0)) { string_channel->reach_eof = FALSE; return G_IO_STATUS_NORMAL; } else { if (string_channel->pipe_mode && string_channel->flags & G_IO_FLAG_NONBLOCK) { string_channel->reach_eof = FALSE; return G_IO_STATUS_AGAIN; } else { string_channel->reach_eof = TRUE; return G_IO_STATUS_EOF; } } } static GIOStatus determine_write_size (GCutStringIOChannel *string_channel, gsize size, gsize *write_size, GError **error) { while (TRUE) { gsize buffer_size, available_size; if (string_channel->buffer_limit == 0) { *write_size = size; break; } if (!string_channel->string) { g_set_error(error, G_IO_CHANNEL_ERROR, g_io_channel_error_from_errno(EBADF), "%s: closed channel", g_strerror(EBADF)); return G_IO_STATUS_ERROR; } if (string_channel->string->len > string_channel->write_offset) { buffer_size = string_channel->string->len - (gsize)string_channel->write_offset; } else { buffer_size = 0; } if (string_channel->buffer_limit >= buffer_size) { available_size = string_channel->buffer_limit - buffer_size; } else { available_size = 0; } if (string_channel->flags & G_IO_FLAG_NONBLOCK) { if (available_size > 0) { *write_size = MIN(size, available_size); break; } else { return G_IO_STATUS_AGAIN; } } else { if (available_size >= size) { *write_size = size; break; } } g_main_context_iteration(string_channel->main_context, TRUE); } return G_IO_STATUS_NORMAL; } static GIOStatus gcut_string_io_channel_write (GIOChannel *channel, const gchar *buf, gsize count, gsize *bytes_written, GError **error) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; GIOStatus status; gsize write_size = 0; *bytes_written = 0; status = determine_write_size(string_channel, count, &write_size, error); if (status != G_IO_STATUS_NORMAL) return status; while (0 < string_channel->limit && string_channel->string && string_channel->limit < string_channel->string->len + write_size) { if (string_channel->flags & G_IO_FLAG_NONBLOCK) { g_set_error(error, G_IO_CHANNEL_ERROR, g_io_channel_error_from_errno(ENOSPC), "%s", g_strerror(ENOSPC)); return G_IO_STATUS_ERROR; } else { g_main_context_iteration(string_channel->main_context, TRUE); } } if (!string_channel->string) { g_set_error(error, G_IO_CHANNEL_ERROR, g_io_channel_error_from_errno(EBADF), "%s: closed channel", g_strerror(EBADF)); return G_IO_STATUS_ERROR; } g_string_overwrite_len(string_channel->string, (gsize)string_channel->write_offset, buf, write_size); *bytes_written = write_size; string_channel->write_offset += write_size; if (!string_channel->pipe_mode) string_channel->read_offset += write_size; return G_IO_STATUS_NORMAL; } static GIOStatus gcut_string_io_channel_seek (GIOChannel *channel, gint64 offset, GSeekType type, GError **error) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; switch (type) { case G_SEEK_SET: string_channel->write_offset = offset; string_channel->read_offset = offset; break; case G_SEEK_CUR: string_channel->write_offset += offset; string_channel->read_offset += offset; break; case G_SEEK_END: string_channel->write_offset = string_channel->string->len + offset; string_channel->read_offset = string_channel->string->len + offset; break; default: g_set_error(error, G_IO_CHANNEL_ERROR, g_io_channel_error_from_errno(EINVAL), "%s", g_strerror(EINVAL)); return G_IO_STATUS_ERROR; break; } string_channel->reach_eof = FALSE; return G_IO_STATUS_NORMAL; } static GIOStatus gcut_string_io_channel_close (GIOChannel *channel, GError **err) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; g_string_free(string_channel->string, TRUE); string_channel->string = NULL; string_channel->write_offset = 0; string_channel->read_offset = 0; return G_IO_STATUS_NORMAL; } static GSource * gcut_string_io_channel_create_watch (GIOChannel *channel, GIOCondition condition) { GSource *source; GCutStringSource *string_source; source = g_source_new(&gcut_source_string_funcs, sizeof(GCutStringSource)); string_source = (GCutStringSource *)source; string_source->channel = channel; g_io_channel_ref(channel); string_source->condition = condition; return source; } static void gcut_string_io_channel_free (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; if (string_channel->string) g_string_free(string_channel->string, TRUE); if (string_channel->main_context) g_main_context_unref(string_channel->main_context); g_free(string_channel); } static GIOStatus gcut_string_io_channel_set_flags (GIOChannel *channel, GIOFlags flags, GError **error) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; string_channel->flags = flags; return G_IO_STATUS_NORMAL; } static GIOFlags gcut_string_io_channel_get_flags (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; return string_channel->flags; } static GIOFuncs gcut_string_io_channel_funcs = { gcut_string_io_channel_read, gcut_string_io_channel_write, gcut_string_io_channel_seek, gcut_string_io_channel_close, gcut_string_io_channel_create_watch, gcut_string_io_channel_free, gcut_string_io_channel_set_flags, gcut_string_io_channel_get_flags }; GIOChannel * gcut_string_io_channel_new (const gchar *initial) { GIOChannel *channel; GCutStringIOChannel *string_channel; string_channel = g_new(GCutStringIOChannel, 1); channel = (GIOChannel *)string_channel; g_io_channel_init(channel); channel->funcs = &gcut_string_io_channel_funcs; channel->is_readable = TRUE; channel->is_writeable = TRUE; channel->is_seekable = TRUE; string_channel->string = g_string_new(initial); string_channel->write_offset = string_channel->string->len; string_channel->read_offset = 0; string_channel->buffer_limit = 0; string_channel->limit = 0; string_channel->read_fail = FALSE; string_channel->flags = 0; string_channel->reach_eof = FALSE; string_channel->pipe_mode = FALSE; string_channel->main_context = NULL; return channel; } GString * gcut_string_io_channel_get_string (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; return string_channel->string; } void gcut_string_io_channel_clear (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; g_string_truncate(string_channel->string, 0); string_channel->write_offset = 0; string_channel->read_offset = 0; } gsize gcut_string_io_channel_get_buffer_limit (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; return string_channel->buffer_limit; } void gcut_string_io_channel_set_buffer_limit (GIOChannel *channel, gsize limit) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; string_channel->buffer_limit = limit; } gsize gcut_string_io_channel_get_limit (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; return string_channel->limit; } void gcut_string_io_channel_set_limit (GIOChannel *channel, gsize limit) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; string_channel->limit = limit; } gboolean gcut_string_io_channel_get_read_fail (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; return string_channel->read_fail; } void gcut_string_io_channel_set_read_fail (GIOChannel *channel, gboolean read_fail) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; string_channel->read_fail = read_fail; } gboolean gcut_string_io_channel_get_pipe_mode (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; return string_channel->pipe_mode; } void gcut_string_io_channel_set_pipe_mode (GIOChannel *channel, gboolean pipe_mode) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; string_channel->pipe_mode = pipe_mode; } GMainContext * gcut_string_io_channel_get_main_context (GIOChannel *channel) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; return string_channel->main_context; } void gcut_string_io_channel_set_main_context (GIOChannel *channel, GMainContext *main_context) { GCutStringIOChannel *string_channel = (GCutStringIOChannel *)channel; if (string_channel->main_context == main_context) return; if (string_channel->main_context) g_main_context_unref(string_channel->main_context); string_channel->main_context = main_context; if (string_channel->main_context) g_main_context_ref(string_channel->main_context); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-dynamic-data.c0000644000175000017500000004162211424022520021763 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gcut-assertions.h" #define GCUT_DYNAMIC_DATA_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), \ GCUT_TYPE_DYNAMIC_DATA, \ GCutDynamicDataPrivate)) typedef struct _Field { GCutDynamicData *data; gchar *name; GType type; union { gpointer pointer; GType type; gchar character; gint integer; guint unsigned_integer; gint64 integer64; guint64 unsigned_integer64; gsize size; gboolean boolean; gdouble double_value; } value; GDestroyNotify free_function; } Field; typedef struct _GCutDynamicDataPrivate GCutDynamicDataPrivate; struct _GCutDynamicDataPrivate { GHashTable *fields; }; static Field * field_new (GCutDynamicData *data, const gchar *name, GType type) { Field *field; field = g_slice_new0(Field); field->data = data; field->name = g_strdup(name); field->type = type; return field; } static void field_free (Field *field) { if (field->value.pointer) { if (field->free_function) { field->free_function(field->value.pointer); } else if (G_TYPE_IS_BOXED(field->type)) { g_boxed_free(field->type, field->value.pointer); } } g_free(field->name); g_slice_free(Field, field); } static void field_inspect (GString *string, gconstpointer data, gpointer user_data) { const Field *field = data; switch (field->type) { case G_TYPE_CHAR: gcut_inspect_char(string, &(field->value.character), user_data); break; case G_TYPE_STRING: gcut_inspect_string(string, field->value.pointer, user_data); break; case G_TYPE_INT: gcut_inspect_int(string, &(field->value.integer), user_data); break; case G_TYPE_UINT: gcut_inspect_uint(string, &(field->value.unsigned_integer), user_data); break; case G_TYPE_INT64: gcut_inspect_int64(string, &(field->value.integer64), user_data); break; case G_TYPE_UINT64: gcut_inspect_uint64(string, &(field->value.unsigned_integer64), user_data); break; case G_TYPE_POINTER: gcut_inspect_pointer(string, field->value.pointer, user_data); break; case G_TYPE_BOOLEAN: gcut_inspect_boolean(string, &(field->value.boolean), user_data); break; case G_TYPE_DOUBLE: gcut_inspect_double(string, &(field->value.double_value), user_data); break; default: if (field->type == GCUT_TYPE_SIZE) { gcut_inspect_size(string, &(field->value.size), user_data); } else if (field->type == G_TYPE_GTYPE) { gcut_inspect_type(string, &(field->value.type), user_data); } else if (G_TYPE_IS_FLAGS(field->type)) { GType flags_type = field->type; gcut_inspect_flags(string, &(field->value.unsigned_integer), &flags_type); } else if (G_TYPE_IS_ENUM(field->type)) { GType enum_type = field->type; gcut_inspect_enum(string, &(field->value.integer), &enum_type); } else { g_string_append_printf(string, "[unsupported type: <%s>]", g_type_name(field->type)); } break; } } static gboolean field_equal (gconstpointer data1, gconstpointer data2) { const Field *field1 = data1; const Field *field2 = data2; gboolean result = FALSE; gchar *error_field_name; gdouble error; if (field1 == field2) return TRUE; if (field1 == NULL || field2 == NULL) return FALSE; if (field1->type != field2->type) return FALSE; switch (field1->type) { case G_TYPE_CHAR: result = (field1->value.character == field2->value.character); break; case G_TYPE_STRING: result = g_str_equal(field1->value.pointer, field2->value.pointer); break; case G_TYPE_INT: result = (field1->value.integer == field2->value.integer); break; case G_TYPE_UINT: result = (field1->value.unsigned_integer == field2->value.unsigned_integer); break; case G_TYPE_INT64: result = (field1->value.integer64 == field2->value.integer64); break; case G_TYPE_UINT64: result = (field1->value.unsigned_integer64 == field2->value.unsigned_integer64); break; case G_TYPE_POINTER: result = (field1->value.pointer == field2->value.pointer); break; case G_TYPE_BOOLEAN: result = ((field1->value.boolean && field2->value.boolean) || (!field1->value.boolean && !field2->value.boolean)); break; case G_TYPE_DOUBLE: error_field_name = g_strdup_printf("%s-error", field1->name); error = gcut_dynamic_data_get_double(field1->data, error_field_name, NULL); g_free(error_field_name); result = cut_utils_equal_double(field1->value.double_value, field2->value.double_value, error); break; default: if (field1->type == GCUT_TYPE_SIZE) { result = (field1->value.size == field2->value.size); } else if (field1->type == G_TYPE_GTYPE) { result = (field1->value.type == field2->value.type); } else if (G_TYPE_IS_FLAGS(field1->type)) { result = (field1->value.unsigned_integer == field2->value.unsigned_integer); } else if (G_TYPE_IS_ENUM(field1->type)) { result = (field1->value.integer == field2->value.integer); } else { g_warning("[unsupported type: <%s>]", g_type_name(field1->type)); result = FALSE; } break; } return result; } G_DEFINE_TYPE(GCutDynamicData, gcut_dynamic_data, G_TYPE_OBJECT) static void dispose (GObject *object); static void gcut_dynamic_data_class_init (GCutDynamicDataClass *klass) { GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; g_type_class_add_private(gobject_class, sizeof(GCutDynamicDataPrivate)); } static void gcut_dynamic_data_init (GCutDynamicData *data) { GCutDynamicDataPrivate *priv = GCUT_DYNAMIC_DATA_GET_PRIVATE(data); priv->fields = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)field_free); } static void dispose (GObject *object) { GCutDynamicDataPrivate *priv; priv = GCUT_DYNAMIC_DATA_GET_PRIVATE(object); if (priv->fields) { g_hash_table_unref(priv->fields); priv->fields = NULL; } G_OBJECT_CLASS(gcut_dynamic_data_parent_class)->dispose(object); } GQuark gcut_dynamic_data_error_quark (void) { return g_quark_from_static_string("gcut-dynamic-data-error-quark"); } GCutDynamicData * gcut_dynamic_data_new (const gchar *first_field_name, ...) { GCutDynamicData *data; va_list args; va_start(args, first_field_name); data = gcut_dynamic_data_new_va_list(first_field_name, args); va_end(args); return data; } GCutDynamicData * gcut_dynamic_data_new_va_list (const gchar *first_field_name, va_list args) { GCutDynamicDataPrivate *priv; GCutDynamicData *data; const gchar *name; data = g_object_new(GCUT_TYPE_DYNAMIC_DATA, NULL); priv = GCUT_DYNAMIC_DATA_GET_PRIVATE(data); name = first_field_name; while (name) { Field *field; field = field_new(data, name, va_arg(args, GType)); switch (field->type) { case G_TYPE_CHAR: field->value.character = va_arg(args, gint); break; case G_TYPE_STRING: field->value.pointer = g_strdup(va_arg(args, const gchar *)); field->free_function = g_free; break; case G_TYPE_INT: field->value.integer = va_arg(args, gint); break; case G_TYPE_UINT: field->value.unsigned_integer = va_arg(args, guint); break; case G_TYPE_INT64: field->value.integer64 = va_arg(args, gint64); break; case G_TYPE_UINT64: field->value.unsigned_integer64 = va_arg(args, guint64); break; case G_TYPE_POINTER: field->value.pointer = va_arg(args, gpointer); field->free_function = va_arg(args, GDestroyNotify); break; case G_TYPE_BOOLEAN: field->value.boolean = va_arg(args, gboolean); break; case G_TYPE_DOUBLE: field->value.double_value = va_arg(args, gdouble); break; default: if (field->type == GCUT_TYPE_SIZE) { field->value.size = va_arg(args, gsize); } else if (field->type == G_TYPE_GTYPE) { field->value.type = va_arg(args, GType); } else if (G_TYPE_IS_FLAGS(field->type)) { field->value.unsigned_integer = va_arg(args, guint); } else if (G_TYPE_IS_ENUM(field->type)) { field->value.integer = va_arg(args, gint); } else if (G_TYPE_IS_BOXED(field->type)) { field->value.pointer = va_arg(args, gpointer); } else if (G_TYPE_IS_OBJECT(field->type)) { field->value.pointer = va_arg(args, gpointer); field->free_function = g_object_unref; } else { g_warning("unsupported type: <%s>", g_type_name(field->type)); field_free(field); field = NULL; } break; } if (!field) break; g_hash_table_insert(priv->fields, g_strdup(name), field); name = va_arg(args, const gchar *); } return data; } gchar * gcut_dynamic_data_inspect (GCutDynamicData *data) { GCutDynamicDataPrivate *priv; GString *string; gchar *inspected_fields; priv = GCUT_DYNAMIC_DATA_GET_PRIVATE(data); string = g_string_new(NULL); g_string_append_printf(string, "#fields, gcut_inspect_string, field_inspect, NULL); g_string_append(string, inspected_fields); g_free(inspected_fields); g_string_append(string, ">"); return g_string_free(string, FALSE); } gboolean gcut_dynamic_data_equal (GCutDynamicData *data1, GCutDynamicData *data2) { GCutDynamicDataPrivate *priv1; GCutDynamicDataPrivate *priv2; if (data1 == data2) return TRUE; if (data1 == NULL || data2 == NULL) return FALSE; priv1 = GCUT_DYNAMIC_DATA_GET_PRIVATE(data1); priv2 = GCUT_DYNAMIC_DATA_GET_PRIVATE(data2); return gcut_hash_table_equal(priv1->fields, priv2->fields, field_equal); } gboolean gcut_dynamic_data_has_field (GCutDynamicData *data, const gchar *field_name) { GCutDynamicDataPrivate *priv; Field *field; priv = GCUT_DYNAMIC_DATA_GET_PRIVATE(data); field = g_hash_table_lookup(priv->fields, field_name); return field ? TRUE : FALSE; } static Field * lookup (GCutDynamicData *data, const gchar *field_name, GError **error) { GCutDynamicDataPrivate *priv; Field *field; priv = GCUT_DYNAMIC_DATA_GET_PRIVATE(data); field = g_hash_table_lookup(priv->fields, field_name); if (!field) { g_set_error(error, GCUT_DYNAMIC_DATA_ERROR, GCUT_DYNAMIC_DATA_ERROR_NOT_EXIST, "requested field doesn't exist: <%s>", field_name); return NULL; } return field; } gchar gcut_dynamic_data_get_char (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return '\0'; return field->value.character; } const gchar * gcut_dynamic_data_get_string (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return NULL; return field->value.pointer; } GType gcut_dynamic_data_get_data_type (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return G_TYPE_INVALID; return field->value.type; } gint gcut_dynamic_data_get_int (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.integer; } guint gcut_dynamic_data_get_uint (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.unsigned_integer; } gint64 gcut_dynamic_data_get_int64 (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.integer64; } guint64 gcut_dynamic_data_get_uint64 (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.unsigned_integer64; } gsize gcut_dynamic_data_get_size (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.size; } guint gcut_dynamic_data_get_flags (GCutDynamicData *data, const gchar *field_name, GError **error) { return gcut_dynamic_data_get_uint(data, field_name, error); } gint gcut_dynamic_data_get_enum (GCutDynamicData *data, const gchar *field_name, GError **error) { return gcut_dynamic_data_get_int(data, field_name, error); } gconstpointer gcut_dynamic_data_get_pointer (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.pointer; } gconstpointer gcut_dynamic_data_get_boxed (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.pointer; } gpointer gcut_dynamic_data_get_object (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.pointer; } gboolean gcut_dynamic_data_get_boolean (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0; return field->value.boolean; } gdouble gcut_dynamic_data_get_double (GCutDynamicData *data, const gchar *field_name, GError **error) { Field *field; field = lookup(data, field_name, error); if (!field) return 0.0; return field->value.double_value; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-error.h0000644000175000017500000000370311205747031020574 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_ERROR_H__ #define __GCUT_ERROR_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-error * @title: Assertion Utilities for GError * @short_description: Utilities to write assertions related * to #GError more easily. * * To write assertions, you need to check equality and show * expected and actual values. * * The utilities help you to write assertions that are * related to #GError. */ /** * gcut_error_equal: * @error1: a #GError to be compared. * @error2: a #GError to be compared. * * Compares two #GError, @error1 and @error2. * * Returns: %TRUE if both of @error1 and @error2 have the same * domain, code and message, %FALSE otherwise. * * Since: 1.0.5 */ gboolean gcut_error_equal (const GError *error1, const GError *error2); /** * gcut_error_inspect: * @error: a #GError value. * * Inspects @error. The returned string should be freed when * no longer needed. * * Returns: inspected @error as a string. * * Since: 1.0.5 */ gchar *gcut_error_inspect (const GError *error); G_END_DECLS #endif /* __GCUT_ERROR_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-value-equal.h0000644000175000017500000000455211205747031021667 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_VALUE_EQUAL_H__ #define __GCUT_VALUE_EQUAL_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-value-equal * @title: Assertion Utilities for GValue * @short_description: Utilities to write assertions related * to #GValue more easily. * * To write assertions, you need to check equality and show * expected and actual values. * * The utilities help you to write assertions that are * related to #GValue. */ /** * gcut_value_equal: * @value1: a #GValue to be compared. * @value2: a #GValue to be compared. * * Compares two #GValue, @value1 and @value2 by registered * equal function. (See gcut_value_register_equal_func() for * detail of how to register equal function of #GValue) * * Returns: TRUE if @value1 equals to @value2, FALSE * otherwise. * * Since: 1.0.5 */ gboolean gcut_value_equal (const GValue *value1, const GValue *value2); /** * gcut_value_register_equal_func: * @type1: a #GType of compared #GValue. * @type2: a #GType of compared #GValue. * @equal_func: a function that compares @type1's #GValue * with @type2's #GValue. * * e.g.: * |[ * TODO * ]| * * Registers equality check function between #GValue of * @type1 and #GValue of @type2. * * Since: 1.0.5 */ void gcut_value_register_equal_func (GType type1, GType type2, GEqualFunc equal_func); G_END_DECLS #endif /* __GCUT_VALUE_EQUAL_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-types.c0000644000175000017500000001003311400100173020557 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "gcut-types.h" GType gcut_error_get_type (void) { static GType type_id = 0; if (!type_id) type_id = g_boxed_type_register_static(g_intern_static_string("GError"), (GBoxedCopyFunc)g_error_copy, (GBoxedFreeFunc)g_error_free); return type_id; } static void value_init_size (GValue *value) { #if GLIB_SIZEOF_LONG == GLIB_SIZEOF_SIZE_T value->data[0].v_ulong = 0; #else value->data[0].v_uint64 = 0; #endif } static void value_copy_size (const GValue *src_value, GValue *dest_value) { #if GLIB_SIZEOF_LONG == GLIB_SIZEOF_SIZE_T dest_value->data[0].v_ulong = src_value->data[0].v_ulong; #else dest_value->data[0].v_uint64 = src_value->data[0].v_uint64; #endif } static gchar* value_collect_size (GValue *value, guint n_collect_values, GTypeCValue *collect_values, guint collect_flags) { #if GLIB_SIZEOF_LONG == GLIB_SIZEOF_SIZE_T value->data[0].v_long = (collect_values[0]).v_long; #else value->data[0].v_int64 = collect_values[0].v_int64; #endif return NULL; } static gchar* value_lcopy_size (const GValue *value, guint n_collect_values, GTypeCValue *collect_values, guint collect_flags) { gsize *size_p = collect_values[0].v_pointer; if (!size_p) { return g_strdup_printf("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME(value)); } #if GLIB_SIZEOF_LONG == GLIB_SIZEOF_SIZE_T *size_p = value->data[0].v_ulong; #else *size_p = value->data[0].v_uint64; #endif return NULL; } GType gcut_size_get_type (void) { static GType type_id = 0; if (!type_id) { GTypeInfo info = { 0, /* class_size */ NULL, /* base_init */ NULL, /* base_destroy */ NULL, /* class_init */ NULL, /* class_destroy */ NULL, /* class_data */ 0, /* instance_size */ 0, /* n_preallocs */ NULL, /* instance_init */ NULL, /* value_table */ }; const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE, }; static const GTypeValueTable value_table = { value_init_size, /* value_init */ NULL, /* value_free */ value_copy_size, /* value_copy */ NULL, /* value_peek_pointer */ "l", /* collect_format */ value_collect_size, /* collect_value */ "p", /* lcopy_format */ value_lcopy_size, /* lcopy_value */ }; info.value_table = &value_table; type_id = g_type_register_fundamental(g_type_fundamental_next(), g_intern_static_string("gsize"), &info, &finfo, 0); } return type_id; } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-event-loop.c0000644000175000017500000001524211523751077021537 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gcut-event-loop.h" #define GCUT_EVENT_LOOP_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), \ GCUT_TYPE_EVENT_LOOP, \ GCutEventLoopPrivate)) G_DEFINE_ABSTRACT_TYPE(GCutEventLoop, gcut_event_loop, G_TYPE_OBJECT) static void dispose (GObject *object); static void gcut_event_loop_class_init (GCutEventLoopClass *klass) { GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; klass->run = NULL; klass->quit = NULL; klass->watch_io = NULL; klass->watch_child_full = NULL; klass->add_timeout_full = NULL; klass->add_idle_full = NULL; klass->remove = NULL; } static void gcut_event_loop_init (GCutEventLoop *loop) { } static void dispose (GObject *object) { G_OBJECT_CLASS(gcut_event_loop_parent_class)->dispose(object); } GQuark gcut_event_loop_error_quark (void) { return g_quark_from_static_string("gcut-event-loop-error-quark"); } void gcut_event_loop_run (GCutEventLoop *loop) { GCutEventLoopClass *loop_class; g_return_if_fail(loop != NULL); g_return_if_fail(GCUT_IS_EVENT_LOOP(loop)); loop_class = GCUT_EVENT_LOOP_GET_CLASS(loop); loop_class->run(loop); } gboolean gcut_event_loop_iterate (GCutEventLoop *loop, gboolean may_block) { GCutEventLoopClass *loop_class; g_return_val_if_fail(loop != NULL, FALSE); g_return_val_if_fail(GCUT_IS_EVENT_LOOP(loop), FALSE); loop_class = GCUT_EVENT_LOOP_GET_CLASS(loop); return loop_class->iterate(loop, may_block); } void gcut_event_loop_quit (GCutEventLoop *loop) { GCutEventLoopClass *loop_class; g_return_if_fail(loop != NULL); g_return_if_fail(GCUT_IS_EVENT_LOOP(loop)); loop_class = GCUT_EVENT_LOOP_GET_CLASS(loop); loop_class->quit(loop); } guint gcut_event_loop_watch_io (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data) { GCutEventLoopClass *loop_class; g_return_val_if_fail(loop != NULL, 0); g_return_val_if_fail(GCUT_IS_EVENT_LOOP(loop), 0); loop_class = GCUT_EVENT_LOOP_GET_CLASS(loop); return loop_class->watch_io(loop, channel, condition, function, data); } guint gcut_event_loop_watch_child (GCutEventLoop *loop, GPid pid, GChildWatchFunc function, gpointer data) { return gcut_event_loop_watch_child_full(loop, G_PRIORITY_DEFAULT, pid, function, data, NULL); } guint gcut_event_loop_watch_child_full (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify) { GCutEventLoopClass *loop_class; g_return_val_if_fail(loop != NULL, 0); g_return_val_if_fail(GCUT_IS_EVENT_LOOP(loop), 0); loop_class = GCUT_EVENT_LOOP_GET_CLASS(loop); return loop_class->watch_child_full(loop, priority, pid, function, data, notify); } guint gcut_event_loop_add_timeout (GCutEventLoop *loop, gdouble interval_in_seconds, GSourceFunc function, gpointer data) { return gcut_event_loop_add_timeout_full(loop, G_PRIORITY_DEFAULT, interval_in_seconds, function, data, NULL); } guint gcut_event_loop_add_timeout_full (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify) { GCutEventLoopClass *loop_class; g_return_val_if_fail(loop != NULL, 0); g_return_val_if_fail(GCUT_IS_EVENT_LOOP(loop), 0); loop_class = GCUT_EVENT_LOOP_GET_CLASS(loop); return loop_class->add_timeout_full(loop, priority, interval_in_seconds, function, data, notify); } guint gcut_event_loop_add_idle (GCutEventLoop *loop, GSourceFunc function, gpointer data) { return gcut_event_loop_add_idle_full(loop, G_PRIORITY_DEFAULT_IDLE, function, data, NULL); } guint gcut_event_loop_add_idle_full (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify) { GCutEventLoopClass *loop_class; g_return_val_if_fail(loop != NULL, 0); g_return_val_if_fail(GCUT_IS_EVENT_LOOP(loop), 0); loop_class = GCUT_EVENT_LOOP_GET_CLASS(loop); return loop_class->add_idle_full(loop, priority, function, data, notify); } gboolean gcut_event_loop_remove (GCutEventLoop *loop, guint tag) { GCutEventLoopClass *loop_class; g_return_val_if_fail(loop != NULL, FALSE); g_return_val_if_fail(GCUT_IS_EVENT_LOOP(loop), FALSE); loop_class = GCUT_EVENT_LOOP_GET_CLASS(loop); return loop_class->remove(loop, tag); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-dynamic-data.h0000644000175000017500000001421011424022520021761 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_DYNAMIC_DATA_H__ #define __GCUT_DYNAMIC_DATA_H__ #include #include G_BEGIN_DECLS #define GCUT_DYNAMIC_DATA_ERROR (gcut_dynamic_data_error_quark()) #define GCUT_TYPE_DYNAMIC_DATA (gcut_dynamic_data_get_type()) #define GCUT_DYNAMIC_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCUT_TYPE_DYNAMIC_DATA, GCutDynamicData)) #define GCUT_DYNAMIC_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCUT_TYPE_DYNAMIC_DATA, GCutDynamicDataClass)) #define GCUT_IS_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCUT_TYPE_DYNAMIC_DATA)) #define GCUT_IS_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCUT_TYPE_DYNAMIC_DATA)) #define GCUT_DYNAMIC_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCUT_TYPE_DYNAMIC_DATA, GCutDynamicDataClass)) typedef struct _GCutDynamicData GCutDynamicData; typedef struct _GCutDynamicDataClass GCutDynamicDataClass; struct _GCutDynamicData { GObject object; }; struct _GCutDynamicDataClass { GObjectClass parent_class; }; typedef enum { GCUT_DYNAMIC_DATA_ERROR_NOT_EXIST } GCutDynamicDataError; GQuark gcut_dynamic_data_error_quark (void); GType gcut_dynamic_data_get_type (void) G_GNUC_CONST; GCutDynamicData *gcut_dynamic_data_new (const gchar *first_field_name, ...) G_GNUC_NULL_TERMINATED; GCutDynamicData *gcut_dynamic_data_new_va_list (const gchar *first_field_name, va_list args); gchar *gcut_dynamic_data_inspect (GCutDynamicData *data); gboolean gcut_dynamic_data_equal (GCutDynamicData *data1, GCutDynamicData *data2); gboolean gcut_dynamic_data_has_field (GCutDynamicData *data, const gchar *field_name); gchar gcut_dynamic_data_get_char (GCutDynamicData *data, const gchar *field_name, GError **error); const gchar *gcut_dynamic_data_get_string (GCutDynamicData *data, const gchar *field_name, GError **error); gint gcut_dynamic_data_get_int (GCutDynamicData *data, const gchar *field_name, GError **error); guint gcut_dynamic_data_get_uint (GCutDynamicData *data, const gchar *field_name, GError **error); gint64 gcut_dynamic_data_get_int64 (GCutDynamicData *data, const gchar *field_name, GError **error); guint64 gcut_dynamic_data_get_uint64 (GCutDynamicData *data, const gchar *field_name, GError **error); gsize gcut_dynamic_data_get_size (GCutDynamicData *data, const gchar *field_name, GError **error); GType gcut_dynamic_data_get_data_type(GCutDynamicData *data, const gchar *field_name, GError **error); guint gcut_dynamic_data_get_flags (GCutDynamicData *data, const gchar *field_name, GError **error); gint gcut_dynamic_data_get_enum (GCutDynamicData *data, const gchar *field_name, GError **error); gconstpointer gcut_dynamic_data_get_pointer (GCutDynamicData *data, const gchar *field_name, GError **error); gconstpointer gcut_dynamic_data_get_boxed (GCutDynamicData *data, const gchar *field_name, GError **error); gpointer gcut_dynamic_data_get_object (GCutDynamicData *data, const gchar *field_name, GError **error); gboolean gcut_dynamic_data_get_boolean (GCutDynamicData *data, const gchar *field_name, GError **error); gdouble gcut_dynamic_data_get_double (GCutDynamicData *data, const gchar *field_name, GError **error); G_END_DECLS #endif /* __GCUT_DYNAMIC_DATA_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-egg.h0000644000175000017500000003217611442135233020211 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_EGG_H__ #define __GCUT_EGG_H__ #include G_BEGIN_DECLS #ifndef CUTTER_DISABLE_DEPRECATED /** * SECTION: gcut-egg * @title: External command (deprecated) * @short_description: Convenience API for using external * command. (deprecated) * * #GCutEgg encapsulates external command execution, * communication and termination. #GCutEgg reports an error * as #GError. It can be asserted easily by * gcut_assert_error(). * * External command is specified to constructor like * gcut_egg_new(), gcut_egg_new_strings() and so * on. External command isn't run at the * time. gcut_egg_hatch() runs specified external command. * * Standard/Error outputs of external command are passed by * #GCutEgg::output-received/#GCutEgg::error-received signals * or #GIOChannel returned by * gcut_egg_get_output()/gcut_egg_get_error(). * gcut_egg_write() writes a chunk to standard input of * external command. * * To wait external command finished, gcut_egg_wait() can be * used. It accepts timeout to avoid infinite waiting. * * e.g.: * |[ * static GString *output_string; * static GCutEgg *egg; * * void * cut_setup (void) * { * output_string = g_string_new(NULL); * egg = NULL; * } * * void * cut_teardown (void) * { * if (output_string) * g_string_free(output_string, TRUE); * if (egg) * g_object_unref(egg); * } * * static void * cb_output_received (GCutEgg *egg, const gchar *chunk, gsize size, * gpointer user_data) * { * g_string_append_len(output_string, chunk, size); * } * * void * test_echo (void) * { * GError *error = NULL; * * egg = gcut_egg_new("echo", "XXX", NULL); * g_signal_connect(egg, "receive-output", * G_CALLBACK(cb_output_received), NULL); * * gcut_egg_hatch(egg, &error); * gcut_assert_error(error); * * gcut_egg_wait(egg, 1000, &error); * gcut_assert_error(error); * cut_assert_equal_string("XXX\n", output_string->str); * } * ]| * * Deprecated: 1.1.5: Use #GCutProcess instead. */ #define GCUT_TYPE_EGG (gcut_egg_get_type ()) #define GCUT_EGG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCUT_TYPE_EGG, GCutEgg)) #define GCUT_EGG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCUT_TYPE_EGG, GCutEggClass)) #define GCUT_IS_EGG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCUT_TYPE_EGG)) #define GCUT_IS_EGG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCUT_TYPE_EGG)) #define GCUT_EGG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCUT_TYPE_EGG, GCutEggClass)) #define GCUT_EGG_ERROR (gcut_egg_error_quark()) typedef struct _GCutEgg GCutEgg; typedef struct _GCutEggClass GCutEggClass; struct _GCutEgg { GObject object; }; struct _GCutEggClass { GObjectClass parent_class; void (*output_received) (GCutEgg *egg, const gchar *chunk, gsize size); void (*error_received) (GCutEgg *egg, const gchar *chunk, gsize size); void (*reaped) (GCutEgg *egg, gint status); void (*error) (GCutEgg *egg, GError *error); }; /** * GCutEggError: * @GCUT_EGG_ERROR_COMMAND_LINE: Command line related error. * @GCUT_EGG_ERROR_IO_ERROR: IO error. * @GCUT_EGG_ERROR_ALREADY_RUNNING: External command is already running. * @GCUT_EGG_ERROR_NOT_RUNNING: External command isn't running. * @GCUT_EGG_ERROR_INVALID_OBJECT: Invalid #GCutEgg object is passed. * @GCUT_EGG_ERROR_TIMEOUT: Timeout. * * Error codes returned by #GCutEgg related operations. * * Since: 1.0.6 * Deprecated: 1.1.5: Use #GCutProcessError instead. */ typedef enum { GCUT_EGG_ERROR_COMMAND_LINE, GCUT_EGG_ERROR_IO_ERROR, GCUT_EGG_ERROR_ALREADY_RUNNING, GCUT_EGG_ERROR_NOT_RUNNING, GCUT_EGG_ERROR_INVALID_OBJECT, GCUT_EGG_ERROR_TIMEOUT } GCutEggError; GQuark gcut_egg_error_quark (void); GType gcut_egg_get_type (void) G_GNUC_CONST; /** * gcut_egg_new: * @command: the external command name to be ran * @...: the arguments for @command * * Creates a new #GCutEgg object that runs @command. * * Returns: a new #GCutEgg. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_new() instead. */ GCutEgg *gcut_egg_new (const gchar *command, ...) G_GNUC_NULL_TERMINATED; /** * gcut_egg_new_va_list: * @command: the external command name to be ran * @args: arguments for @command * * Creates a new #GCutEgg object that runs @command. * * Returns: a new #GCutEgg. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_new_va_list() instead. */ GCutEgg *gcut_egg_new_va_list (const gchar *command, va_list args); /** * gcut_egg_new_argv: * @argc: the number of elements of @argv * @argv: the external command name to be ran and arguments * of it. * * Creates a new #GCutEgg object that runs @command. * * Returns: a new #GCutEgg. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_new_argv() instead. */ GCutEgg *gcut_egg_new_argv (gint argc, gchar **argv); /** * gcut_egg_new_strings: * @command: the external command name to be ran and * arguments of it. %NULL-terminated. * * Creates a new #GCutEgg object that runs @command. * * Returns: a new #GCutEgg. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_new_strings() instead. */ GCutEgg *gcut_egg_new_strings (const gchar **command); /** * gcut_egg_new_array: * @command: the external command name to be ran and * arguments of it. The #GArray should be zero-terminated. * * Creates a new #GCutEgg object that runs @command. * * Returns: a new #GCutEgg. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_new_array() instead. */ GCutEgg *gcut_egg_new_array (GArray *command); /** * gcut_egg_set_flags: * @egg: a #GCutEgg * @flags: the flags to be passed to g_spawn_async_with_pipes(). * * Sets @flags for spawning. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_set_flags() instead. */ void gcut_egg_set_flags (GCutEgg *egg, GSpawnFlags flags); /** * gcut_egg_get_flags: * @egg: a #GCutEgg * * Gets @flags for spawning. * * Returns: the flags for spawning. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_get_flags() instead. */ GSpawnFlags gcut_egg_get_flags (GCutEgg *egg); /** * gcut_egg_set_env: * @egg: a #GCutEgg * @name: the first environment name. * @...: the value of @name, followed by name and value * pairs. %NULL-terminated. * * Sets environment variable for external command. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_set_env() instead. */ void gcut_egg_set_env (GCutEgg *egg, const gchar *name, ...) G_GNUC_NULL_TERMINATED; /** * gcut_egg_get_env: * @egg: a #GCutEgg * * Gets environment variable for external command. * * Returns: a newly-allocated %NULL-terminated environment * variables. ("NAME1=VALUE1", "NAME2=VALUE2", * ..., %NULL) It should be freed by g_strfreev() when no longer * needed. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_get_env() instead. */ gchar **gcut_egg_get_env (GCutEgg *egg); /** * gcut_egg_hatch: * @egg: a #GCutEgg * @error: return location for an error, or %NULL * * Hatches a new external process. * * Returns: %TRUE on success, otherwise %FALSE * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_run() instead. */ gboolean gcut_egg_hatch (GCutEgg *egg, GError **error); /** * gcut_egg_close: * @egg: a #GCutEgg * * Closes a hatched external process. It is closed * implicitly on destroy. * * Since: 1.0.6 * Deprecated: 1.1.5: no need to close explicitly on #GCutProcess. */ void gcut_egg_close (GCutEgg *egg); /** * gcut_egg_write: * @egg: a #GCutEgg * @chunk: the data to be wrote * @size: the size of @chunk * @error: return location for an error, or %NULL * * Writes @chunk to external process's standard input. * * Returns: %TRUE on success, otherwise %FALSE * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_write() instead. */ gboolean gcut_egg_write (GCutEgg *egg, const gchar *chunk, gsize size, GError **error); /** * gcut_egg_get_pid: * @egg: a #GCutEgg * * Gets the process ID of running external process. If * external process isn't running, 0 is returned. * * Returns: the process ID of running external process if * external process is running, otherwise 0. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_get_pid() instead. */ GPid gcut_egg_get_pid (GCutEgg *egg); /** * gcut_egg_wait: * @egg: a #GCutEgg * @timeout: the timeout period in milliseconds * @error: return location for an error, or %NULL * * Waits running external process is finished while @timeout * milliseconds. If external process isn't finished while * @timeout milliseconds, %GCUT_EGG_ERROR_TIMEOUT error is * set and -1 is returned. If external process isn't * running, %GCUT_EGG_ERROR_NOT_RUNNING error is set and -1 * is returned. * * Returns: an exit status of external process on success, * otherwise -1. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_wait() instead. */ gint gcut_egg_wait (GCutEgg *egg, guint timeout, GError **error); /** * gcut_egg_kill: * @egg: a #GCutEgg * @signal_number: the signal number to be sent to external process * * Sends @signal_number signal to external process. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_kill() instead. */ void gcut_egg_kill (GCutEgg *egg, gint signal_number); /** * gcut_egg_get_input: * @egg: a #GCutEgg * * Gets a #GIOChannel connected with standard input of * external process. * * Returns: a #GIOChannel if external process is running, * otherwise %NULL. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_get_input_channel() instead. */ GIOChannel *gcut_egg_get_input (GCutEgg *egg); /** * gcut_egg_get_output: * @egg: a #GCutEgg * * Gets a #GIOChannel connected with standard output of * external process. * * Returns: a #GIOChannel if external process is running, * otherwise %NULL. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_get_output_channel() instead. */ GIOChannel *gcut_egg_get_output (GCutEgg *egg); /** * gcut_egg_get_error: * @egg: a #GCutEgg * * Gets a #GIOChannel connected with standard error output * of external process. * * Returns: a #GIOChannel if external process is running, * otherwise %NULL. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_get_error_channel() instead. */ GIOChannel *gcut_egg_get_error (GCutEgg *egg); /** * gcut_egg_get_forced_termination_wait_time: * @egg: a #GCutEgg * * Gets a wait time in milliseconds for forced termination * on dispose. * * Returns: a timeout value for waiting forced terminated * external command on dispose. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_get_forced_termination_wait_time() instead. */ guint gcut_egg_get_forced_termination_wait_time (GCutEgg *egg); /** * gcut_egg_set_forced_termination_wait_time: * @egg: a #GCutEgg * @timeout: the timeout value in milliseconds * * Sets a wait time in milliseconds for forced termination * on dispose. If @timeout is 0, it doesn't wait * termination of external process. The default value is 10. * * Since: 1.0.6 * Deprecated: 1.1.5: Use gcut_process_set_forced_termination_wait_time() instead. */ void gcut_egg_set_forced_termination_wait_time (GCutEgg *egg, guint timeout); #endif G_END_DECLS #endif /* __GCUT_EGG_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-glib-event-loop.c0000644000175000017500000002573011523751077022455 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gcut-glib-event-loop.h" #define GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), \ GCUT_TYPE_GLIB_EVENT_LOOP, \ GCutGLibEventLoopPrivate)) G_DEFINE_TYPE(GCutGLibEventLoop, gcut_glib_event_loop, GCUT_TYPE_EVENT_LOOP) typedef struct _GCutGLibEventLoopPrivate GCutGLibEventLoopPrivate; struct _GCutGLibEventLoopPrivate { GMainContext *context; GMainLoop *loop; }; enum { PROP_0, PROP_CONTEXT, PROP_LAST }; static GObject *constructor (GType type, guint n_props, GObjectConstructParam *props); static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void run (GCutEventLoop *loop); static gboolean iterate (GCutEventLoop *loop, gboolean may_block); static void quit (GCutEventLoop *loop); static guint watch_io (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data); static guint watch_child_full (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify); static guint add_timeout_full (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify); static guint add_idle_full (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify); static gboolean remove (GCutEventLoop *loop, guint tag); static void gcut_glib_event_loop_class_init (GCutGLibEventLoopClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->constructor = constructor; gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; klass->parent_class.run = run; klass->parent_class.iterate = iterate; klass->parent_class.quit = quit; klass->parent_class.watch_io = watch_io; klass->parent_class.watch_child_full = watch_child_full; klass->parent_class.add_timeout_full = add_timeout_full; klass->parent_class.add_idle_full = add_idle_full; klass->parent_class.remove = remove; spec = g_param_spec_pointer("context", "Context", "Use the GMainContext for the event loop", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property(gobject_class, PROP_CONTEXT, spec); g_type_class_add_private(gobject_class, sizeof(GCutGLibEventLoopPrivate)); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object; GObjectClass *klass; GCutGLibEventLoop *loop; GCutGLibEventLoopPrivate *priv; klass = G_OBJECT_CLASS(gcut_glib_event_loop_parent_class); object = klass->constructor(type, n_props, props); loop = GCUT_GLIB_EVENT_LOOP(object); priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); priv->loop = g_main_loop_new(priv->context, FALSE); return object; } static void gcut_glib_event_loop_init (GCutGLibEventLoop *loop) { GCutGLibEventLoopPrivate *priv; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); priv->context = NULL; priv->loop = NULL; } static void dispose (GObject *object) { GCutGLibEventLoopPrivate *priv; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(object); if (priv->loop) { g_main_loop_unref(priv->loop); priv->loop = NULL; } if (priv->context) { g_main_context_unref(priv->context); priv->context = NULL; } G_OBJECT_CLASS(gcut_glib_event_loop_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GCutGLibEventLoopPrivate *priv; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(object); switch (prop_id) { case PROP_CONTEXT: if (priv->context) g_main_context_unref(priv->context); priv->context = g_value_get_pointer(value); if (priv->context) g_main_context_ref(priv->context); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GCutGLibEventLoop *loop; GCutGLibEventLoopPrivate *priv; loop = GCUT_GLIB_EVENT_LOOP(object); priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); switch (prop_id) { case PROP_CONTEXT: g_value_set_pointer(value, priv->context); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } GCutEventLoop * gcut_glib_event_loop_new (GMainContext *context) { return g_object_new(GCUT_TYPE_GLIB_EVENT_LOOP, "context", context, NULL); } static void run (GCutEventLoop *loop) { GCutGLibEventLoopPrivate *priv; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); g_main_loop_run(priv->loop); } static gboolean iterate (GCutEventLoop *loop, gboolean may_block) { GCutGLibEventLoopPrivate *priv; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); return g_main_context_iteration(g_main_loop_get_context(priv->loop), may_block); } static void quit (GCutEventLoop *loop) { GCutGLibEventLoopPrivate *priv; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); g_main_loop_quit(priv->loop); } static guint watch_io (GCutEventLoop *loop, GIOChannel *channel, GIOCondition condition, GIOFunc function, gpointer data) { GCutGLibEventLoopPrivate *priv; guint watch_tag; GSource *watch_source; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); watch_source = g_io_create_watch(channel, condition); g_source_set_callback(watch_source, (GSourceFunc)function, data, NULL); watch_tag = g_source_attach(watch_source, g_main_loop_get_context(priv->loop)); g_source_unref(watch_source); return watch_tag; } static guint watch_child_full (GCutEventLoop *loop, gint priority, GPid pid, GChildWatchFunc function, gpointer data, GDestroyNotify notify) { GCutGLibEventLoopPrivate *priv; guint tag; GSource *source; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); source = g_child_watch_source_new(pid); if (priority != G_PRIORITY_DEFAULT) g_source_set_priority(source, priority); g_source_set_callback(source, (GSourceFunc)function, data, notify); tag = g_source_attach(source, g_main_loop_get_context(priv->loop)); g_source_unref(source); return tag; } static guint add_timeout_full (GCutEventLoop *loop, gint priority, gdouble interval_in_seconds, GSourceFunc function, gpointer data, GDestroyNotify notify) { GCutGLibEventLoopPrivate *priv; guint tag; GSource *source; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); source = g_timeout_source_new(interval_in_seconds * 1000); if (priority != G_PRIORITY_DEFAULT) g_source_set_priority(source, priority); g_source_set_callback(source, function, data, notify); tag = g_source_attach(source, g_main_loop_get_context(priv->loop)); g_source_unref(source); return tag; } static guint add_idle_full (GCutEventLoop *loop, gint priority, GSourceFunc function, gpointer data, GDestroyNotify notify) { GCutGLibEventLoopPrivate *priv; GSource *source; guint tag; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); source = g_idle_source_new(); if (priority != G_PRIORITY_DEFAULT_IDLE) g_source_set_priority(source, priority); g_source_set_callback(source, function, data, notify); tag = g_source_attach(source, g_main_loop_get_context(priv->loop)); g_source_unref(source); return tag; } static gboolean remove (GCutEventLoop *loop, guint tag) { GCutGLibEventLoopPrivate *priv; GSource *source; GMainContext *context; priv = GCUT_GLIB_EVENT_LOOP_GET_PRIVATE(loop); context = g_main_loop_get_context(priv->loop); source = g_main_context_find_source_by_id(context, tag); if (source) g_source_destroy(source); return source != NULL; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-public.h0000644000175000017500000000472611523751077020737 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_PUBLIC_H__ #define __GCUT_PUBLIC_H__ #include #include G_BEGIN_DECLS GObject *cut_test_context_take_g_object (CutTestContext *context, GObject *object); const GError *cut_test_context_take_g_error (CutTestContext *context, GError *error); const GList *cut_test_context_take_g_list (CutTestContext *context, GList *list, CutDestroyFunction destroy); GHashTable *cut_test_context_take_g_hash_table (CutTestContext *context, GHashTable *hash_table); GString *cut_test_context_take_g_string (CutTestContext *context, GString *string); GString *gcut_utils_get_fixture_data (CutTestContext *context, const gchar **full_path, const gchar *path, ...) G_GNUC_NULL_TERMINATED; GString *gcut_utils_get_fixture_data_va_list (CutTestContext *context, const gchar **full_path, const gchar *path, va_list args); G_END_DECLS #endif /* __GCUT_PUBLIC_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-process.h0000644000175000017500000003637211523751077021141 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_PROCESS_H__ #define __GCUT_PROCESS_H__ #include #include #include G_BEGIN_DECLS /** * SECTION: gcut-process * @title: External command * @short_description: Convenience API for using external * command. * * #GCutProcess encapsulates external command execution, * communication and termination. #GCutProcess reports an error * as #GError. It can be asserted easily by * gcut_assert_error(). * * External command is specified to constructor like * gcut_process_new(), gcut_process_new_strings() and so * on. External command isn't run at the * time. gcut_process_run() runs specified external command. * * Standard/Error outputs of external command are passed by * #GCutProcess::output-received/#GCutProcess::error-received signals * or #GIOChannel returned by * gcut_process_get_output()/gcut_process_get_error(). * gcut_process_write() writes a chunk to standard input of * external command. * * To wait external command finished, gcut_process_wait() can be * used. It accepts timeout to avoid infinite waiting. * * e.g.: * |[ * static GString *output_string; * static GCutProcess *process; * * void * cut_setup (void) * { * output_string = g_string_new(NULL); * process = NULL; * } * * void * cut_teardown (void) * { * if (output_string) * g_string_free(output_string, TRUE); * if (process) * g_object_unref(process); * } * * static void * cb_output_received (GCutProcess *process, const gchar *chunk, gsize size, * gpointer user_data) * { * g_string_append_len(output_string, chunk, size); * } * * void * test_echo (void) * { * GError *error = NULL; * * process = gcut_process_new("echo", "XXX", NULL); * g_signal_connect(process, "receive-output", * G_CALLBACK(cb_output_received), NULL); * * gcut_process_run(process, &error); * gcut_assert_error(error); * * gcut_process_wait(process, 1000, &error); * gcut_assert_error(error); * cut_assert_equal_string("XXX\n", output_string->str); * } * ]| * * Since: 1.1.5 */ #define GCUT_TYPE_PROCESS (gcut_process_get_type ()) #define GCUT_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCUT_TYPE_PROCESS, GCutProcess)) #define GCUT_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCUT_TYPE_PROCESS, GCutProcessClass)) #define GCUT_IS_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCUT_TYPE_PROCESS)) #define GCUT_IS_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCUT_TYPE_PROCESS)) #define GCUT_PROCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCUT_TYPE_PROCESS, GCutProcessClass)) #define GCUT_PROCESS_ERROR (gcut_process_error_quark()) typedef struct _GCutProcess GCutProcess; typedef struct _GCutProcessClass GCutProcessClass; struct _GCutProcess { GObject object; }; struct _GCutProcessClass { GObjectClass parent_class; void (*output_received) (GCutProcess *process, const gchar *chunk, gsize size); void (*error_received) (GCutProcess *process, const gchar *chunk, gsize size); void (*reaped) (GCutProcess *process, gint status); void (*error) (GCutProcess *process, GError *error); }; /** * GCutProcessError: * @GCUT_PROCESS_ERROR_COMMAND_LINE: Command line related error. * @GCUT_PROCESS_ERROR_IO_ERROR: IO error. * @GCUT_PROCESS_ERROR_ALREADY_RUNNING: External command is already running. * @GCUT_PROCESS_ERROR_NOT_RUNNING: External command isn't running. * @GCUT_PROCESS_ERROR_INVALID_OBJECT: Invalid #GCutProcess object is passed. * @GCUT_PROCESS_ERROR_INVALID_SIGNAL: Invalid signal is passed. * @GCUT_PROCESS_ERROR_PERMISSION_DENIED: Permission denied. * @GCUT_PROCESS_ERROR_TIMEOUT: Timeout. * * Error codes returned by #GCutProcess related operations. * * Since: 1.1.5 */ typedef enum { GCUT_PROCESS_ERROR_COMMAND_LINE, GCUT_PROCESS_ERROR_IO_ERROR, GCUT_PROCESS_ERROR_ALREADY_RUNNING, GCUT_PROCESS_ERROR_NOT_RUNNING, GCUT_PROCESS_ERROR_INVALID_OBJECT, GCUT_PROCESS_ERROR_INVALID_SIGNAL, GCUT_PROCESS_ERROR_PERMISSION_DENIED, GCUT_PROCESS_ERROR_TIMEOUT } GCutProcessError; GQuark gcut_process_error_quark (void); GType gcut_process_get_type (void) G_GNUC_CONST; /** * gcut_process_new: * @command: the external command name to be ran * @...: the arguments for @command * * Creates a new #GCutProcess object that runs @command. * * Returns: a new #GCutProcess. * * Since: 1.1.5 */ GCutProcess *gcut_process_new (const gchar *command, ...) G_GNUC_NULL_TERMINATED; /** * gcut_process_new_command_line: * @command_line: a command line * * Creates a new #GCutProcess object that runs @command_line. * * Returns: a new #GCutProcess. * * Since: 1.1.5 */ GCutProcess *gcut_process_new_command_line (const gchar *command_line); /** * gcut_process_new_va_list: * @command: the external command name to be ran * @args: arguments for @command * * Creates a new #GCutProcess object that runs @command. * * Returns: a new #GCutProcess. * * Since: 1.1.5 */ GCutProcess *gcut_process_new_va_list (const gchar *command, va_list args); /** * gcut_process_new_argv: * @argc: the number of elements of @argv * @argv: the external command name to be ran and arguments * of it. * * Creates a new #GCutProcess object that runs @command. * * Returns: a new #GCutProcess. * * Since: 1.1.5 */ GCutProcess *gcut_process_new_argv (gint argc, gchar **argv); /** * gcut_process_new_strings: * @command: the external command name to be ran and * arguments of it. %NULL-terminated. * * Creates a new #GCutProcess object that runs @command. * * Returns: a new #GCutProcess. * * Since: 1.1.5 */ GCutProcess *gcut_process_new_strings (const gchar **command); /** * gcut_process_new_array: * @command: the external command name to be ran and * arguments of it. The #GArray should be zero-terminated. * * Creates a new #GCutProcess object that runs @command. * * Returns: a new #GCutProcess. * * Since: 1.1.5 */ GCutProcess *gcut_process_new_array (GArray *command); /** * gcut_process_set_flags: * @process: a #GCutProcess * @flags: the flags to be passed to g_spawn_async_with_pipes(). * * Sets @flags for spawning. * * Since: 1.1.5 */ void gcut_process_set_flags (GCutProcess *process, GSpawnFlags flags); /** * gcut_process_get_flags: * @process: a #GCutProcess * * Gets @flags for spawning. * * Returns: the flags for spawning. * * Since: 1.1.5 */ GSpawnFlags gcut_process_get_flags (GCutProcess *process); /** * gcut_process_set_env: * @process: a #GCutProcess * @name: the first environment name. * @...: the value of @name, followed by name and value * pairs. %NULL-terminated. * * Sets environment variable for external command. * * Since: 1.1.5 */ void gcut_process_set_env (GCutProcess *process, const gchar *name, ...) G_GNUC_NULL_TERMINATED; /** * gcut_process_get_env: * @process: a #GCutProcess * * Gets environment variable for external command. * * Returns: a newly-allocated %NULL-terminated environment * variables. ("NAME1=VALUE1", "NAME2=VALUE2", * ..., %NULL) It should be freed by g_strfreev() when no longer * needed. * * Since: 1.1.5 */ gchar **gcut_process_get_env (GCutProcess *process); /** * gcut_process_run: * @process: a #GCutProcess * @error: return location for an error, or %NULL * * Runs a new external process. * * Returns: %TRUE on success, otherwise %FALSE * * Since: 1.1.5 */ gboolean gcut_process_run (GCutProcess *process, GError **error); /** * gcut_process_get_pid: * @process: a #GCutProcess * * Gets the process ID of running external process. If * external process isn't running, 0 is returned. * * Returns: the process ID of running external process if * external process is running, otherwise 0. * * Since: 1.1.5 */ GPid gcut_process_get_pid (GCutProcess *process); /** * gcut_process_wait: * @process: a #GCutProcess * @timeout: the timeout period in milliseconds * @error: return location for an error, or %NULL * * Waits running external process is finished while @timeout * milliseconds. If external process isn't finished while * @timeout milliseconds, %GCUT_PROCESS_ERROR_TIMEOUT error is * set and -1 is returned. If external process isn't * running, %GCUT_PROCESS_ERROR_NOT_RUNNING error is set and -1 * is returned. * * Returns: an exit status of external process on success, * otherwise -1. * * Since: 1.1.5 */ gint gcut_process_wait (GCutProcess *process, guint timeout, GError **error); /** * gcut_process_kill: * @process: a #GCutProcess * @signal_number: the signal number to be sent to external process * @error: return location for an error, or %NULL * * Sends @signal_number signal to external process. * * Returns: %TRUE on success, otherwise %FALSE * * Since: 1.1.5 */ gboolean gcut_process_kill (GCutProcess *process, gint signal_number, GError **error); /** * gcut_process_write: * @process: a #GCutProcess * @chunk: the data to be wrote * @size: the size of @chunk * @error: return location for an error, or %NULL * * Writes @chunk to external process's standard input. * * Returns: %TRUE on success, otherwise %FALSE * * Since: 1.1.5 */ gboolean gcut_process_write (GCutProcess *process, const gchar *chunk, gsize size, GError **error); /** * gcut_process_flush: * @process: a #GCutProcess * @error: return location for an error, or %NULL * * Flush buffered external process's standard input. * * Returns: the status of the operation: One of * %G_IO_STATUS_NORMAL, %G_IO_STATUS_AGAIN, or * %G_IO_STATUS_ERROR. * * Since: 1.1.5 */ GIOStatus gcut_process_flush (GCutProcess *process, GError **error); /** * gcut_process_get_output_string: * @process: a #GCutProcess * * Returns: a #GString that has all result of standard * output of external process. * * Since: 1.1.5 */ GString *gcut_process_get_output_string (GCutProcess *process); /** * gcut_process_get_error_string: * @process: a #GCutProcess * * Returns: a #GString that has all result of standard * error of external process. * * Since: 1.1.5 */ GString *gcut_process_get_error_string (GCutProcess *process); /** * gcut_process_get_input_channel: * @process: a #GCutProcess * * Gets a #GIOChannel connected with standard input of * external process. * * Returns: a #GIOChannel if external process is running, * otherwise %NULL. * * Since: 1.1.5 */ GIOChannel *gcut_process_get_input_channel (GCutProcess *process); /** * gcut_process_get_output_channel: * @process: a #GCutProcess * * Gets a #GIOChannel connected with standard output of * external process. * * Returns: a #GIOChannel if external process is running, * otherwise %NULL. * * Since: 1.1.5 */ GIOChannel *gcut_process_get_output_channel (GCutProcess *process); /** * gcut_process_get_error_channel: * @process: a #GCutProcess * * Gets a #GIOChannel connected with standard error output * of external process. * * Returns: a #GIOChannel if external process is running, * otherwise %NULL. * * Since: 1.1.5 */ GIOChannel *gcut_process_get_error_channel (GCutProcess *process); #ifdef CUT_SUPPORT_GIO #include /** * gcut_process_get_output_stream: * @process: a #GCutProcess * * Gets a #GInputStream connected with standard output of * external process. * * Returns: a #GInputStream if external process is running, * otherwise %NULL. * * Since: 1.1.5 */ GInputStream *gcut_process_get_output_stream (GCutProcess *process); /** * gcut_process_get_error_stream: * @process: a #GCutProcess * * Gets a #GInputStream connected with standard error output * of external process. * * Returns: a #GInputStream if external process is running, * otherwise %NULL. * * Since: 1.1.5 */ GInputStream *gcut_process_get_error_stream (GCutProcess *process); #endif /* CUT_SUPPORT_GIO */ /** * gcut_process_get_forced_termination_wait_time: * @process: a #GCutProcess * * Gets a wait time in milliseconds for forced termination * on dispose. * * Returns: a timeout value for waiting forced terminated * external command on dispose. * * Since: 1.1.5 */ guint gcut_process_get_forced_termination_wait_time (GCutProcess *process); /** * gcut_process_set_forced_termination_wait_time: * @process: a #GCutProcess * @timeout: the timeout value in milliseconds * * Sets a wait time in milliseconds for forced termination * on dispose. If @timeout is 0, it doesn't wait * termination of external process. The default value is 10. * * Since: 1.1.5 */ void gcut_process_set_forced_termination_wait_time (GCutProcess *process, guint timeout); /** * gcut_process_get_event_loop: * @process: a #GCutProcess * * Gets a event loop using by the @process. * * Returns: a #GCutEventLoop. * * Since: 1.1.6 */ GCutEventLoop *gcut_process_get_event_loop (GCutProcess *process); /** * gcut_process_set_event_loop: * @process: a #GCutProcess * @loop: the event loop or %NULL * * Sets a event loop for the @process. If @loop is %NULL, * the default GLib event loop will be used. * * Since: 1.1.6 */ void gcut_process_set_event_loop (GCutProcess *process, GCutEventLoop *loop); G_END_DECLS #endif /* __GCUT_PROCESS_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-assertions-helper.c0000644000175000017500000005550611523751077023125 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include "gcut-assertions-helper.h" void gcut_assert_equal_type_helper (GType expected, GType actual, const gchar *expression_expected, const gchar *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(g_type_name(expected)); cut_set_actual(g_type_name(actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_equal_value_helper (GValue *expected, GValue *actual, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_value_equal(expected, actual)) { cut_test_pass(); } else { const gchar *message; const gchar *inspected_expected, *inspected_actual; const gchar *expected_type_name, *actual_type_name; inspected_expected = cut_take_string(g_strdup_value_contents(expected)); inspected_actual = cut_take_string(g_strdup_value_contents(actual)); expected_type_name = g_type_name(G_VALUE_TYPE(expected)); actual_type_name = g_type_name(G_VALUE_TYPE(actual)); message = cut_take_printf("<%s == %s>", expression_expected, expression_actual); cut_set_expected(cut_take_printf("%s (%s)", inspected_expected, expected_type_name)); cut_set_actual(cut_take_printf("%s (%s)", inspected_actual, actual_type_name)); cut_test_fail(message); } } void gcut_assert_equal_list_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function) { if (gcut_list_equal(expected, actual, equal_function)) { cut_test_pass(); } else { const gchar *inspected_expected, *inspected_actual; inspected_expected = cut_take_string(gcut_list_inspect(expected, inspect_function, inspect_user_data)); inspected_actual = cut_take_string(gcut_list_inspect(actual, inspect_function, inspect_user_data)); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(cut_take_printf("<%s(%s[i], %s[i]) == TRUE>", expression_equal_function, expression_expected, expression_actual)); } } void gcut_assert_equal_list_int_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_list_equal_int(expected, actual)) { cut_test_pass(); } else { const gchar *inspected_expected, *inspected_actual; inspected_expected = cut_take_string(gcut_list_inspect_int(expected)); inspected_actual = cut_take_string(gcut_list_inspect_int(actual)); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_equal_list_uint_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_list_equal_uint(expected, actual)) { cut_test_pass(); } else { const gchar *inspected_expected, *inspected_actual; inspected_expected = cut_take_string(gcut_list_inspect_uint(expected)); inspected_actual = cut_take_string(gcut_list_inspect_uint(actual)); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_equal_list_string_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_list_equal_string(expected, actual)) { cut_test_pass(); } else { const gchar *message; const gchar *inspected_expected, *inspected_actual; inspected_expected = cut_take_string(gcut_list_inspect_string(expected)); inspected_actual = cut_take_string(gcut_list_inspect_string(actual)); message = cut_take_printf("<%s == %s>", expression_expected, expression_actual); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(message); } } void gcut_assert_equal_list_enum_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_list_equal_int(expected, actual)) { cut_test_pass(); } else { const gchar *inspected_expected, *inspected_actual; inspected_expected = cut_take_string(gcut_list_inspect_enum(type, expected)); inspected_actual = cut_take_string(gcut_list_inspect_enum(type, actual)); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_equal_list_flags_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_list_equal_uint(expected, actual)) { cut_test_pass(); } else { const gchar *inspected_expected, *inspected_actual; inspected_expected = cut_take_string(gcut_list_inspect_flags(type, expected)); inspected_actual = cut_take_string(gcut_list_inspect_flags(type, actual)); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_equal_list_object_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_list_equal(expected, actual, equal_function)) { cut_test_pass(); } else { const gchar *inspected_expected, *inspected_actual; inspected_expected = cut_take_string(gcut_list_inspect_object(expected)); inspected_actual = cut_take_string(gcut_list_inspect_object(actual)); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_equal_hash_table_helper (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function) { if (gcut_hash_table_equal(expected, actual, equal_function)) { cut_test_pass(); } else { gchar *inspected_expected, *inspected_actual; GCompareFunc compare_function = NULL; if (key_inspect_function == gcut_inspect_direct) { compare_function = cut_utils_compare_direct; } else if (key_inspect_function == gcut_inspect_string) { compare_function = cut_utils_compare_string; } inspected_expected = gcut_hash_table_inspect_sorted(expected, key_inspect_function, value_inspect_function, compare_function, inspect_user_data); inspected_actual = gcut_hash_table_inspect_sorted(actual, key_inspect_function, value_inspect_function, compare_function, inspect_user_data); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); g_free(inspected_expected); g_free(inspected_actual); cut_test_fail(cut_take_printf("<%s(%s[key], %s[key]) == TRUE>", expression_equal_function, expression_expected, expression_actual)); } } void gcut_assert_equal_hash_table_string_string_helper (GHashTable *expected, GHashTable *actual, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_hash_table_string_equal(expected, actual)) { cut_test_pass(); } else { gchar *inspected_expected, *inspected_actual; inspected_expected = gcut_hash_table_string_string_inspect(expected); inspected_actual = gcut_hash_table_string_string_inspect(actual); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); g_free(inspected_expected); g_free(inspected_actual); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_error_helper (GError *error, const gchar *expression_error) { if (error == NULL) { cut_test_pass(); } else { const gchar *inspected; inspected = cut_take_string(gcut_error_inspect(error)); g_error_free(error); cut_test_fail(cut_take_printf("expected: <%s> is NULL\n" " actual: <%s>", expression_error, inspected)); } } void gcut_assert_equal_error_helper (const GError *expected, const GError *actual, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_error_equal(expected, actual)) { cut_test_pass(); } else { cut_set_expected(cut_take_string(gcut_error_inspect(expected))); cut_set_actual(cut_take_string(gcut_error_inspect(actual))); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_remove_path_helper (const gchar *path, ...) { GError *remove_path_error = NULL; gchar *full_path; va_list args; va_start(args, path); full_path = cut_utils_build_path_va_list(path, args); va_end(args); cut_utils_remove_path_recursive(full_path, &remove_path_error); gcut_assert_error_helper(remove_path_error, cut_take_string(full_path)); } void gcut_assert_equal_time_val_helper (GTimeVal *expected, GTimeVal *actual, const gchar *expression_expected, const gchar *expression_actual) { const gchar *expected_string = NULL; const gchar *actual_string = NULL; if (expected) expected_string = cut_take_string(g_time_val_to_iso8601(expected)); if (actual) actual_string = cut_take_string(g_time_val_to_iso8601(actual)); cut_assert_equal_string_helper(expected_string, actual_string, expression_expected, expression_actual); } void gcut_assert_equal_enum_helper (GType enum_type, gint expected, gint actual, const gchar *expression_enum_type, const gchar *expression_expected, const gchar *expression_actual) { if (expected == actual) { cut_test_pass(); } else { const gchar *inspected_expected; const gchar *inspected_actual; inspected_expected = cut_take_string(gcut_enum_inspect(enum_type, expected)); inspected_actual = cut_take_string(gcut_enum_inspect(enum_type, actual)); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(cut_take_printf("<%s == %s> (%s)", expression_expected, expression_actual, expression_enum_type)); } } void gcut_assert_equal_flags_helper (GType flags_type, gint expected, gint actual, const gchar *expression_flags_type, const gchar *expression_expected, const gchar *expression_actual) { if (expected == actual) { cut_test_pass(); } else { const gchar *inspected_expected; const gchar *inspected_actual; inspected_expected = cut_take_string(gcut_flags_inspect(flags_type, expected)); inspected_actual = cut_take_string(gcut_flags_inspect(flags_type, actual)); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(cut_take_printf("<%s == %s> (%s)", expression_expected, expression_actual, expression_flags_type)); } } void gcut_assert_equal_object_helper (GObject *expected, GObject *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function) { if (gcut_object_equal(expected, actual, equal_function)) { cut_test_pass(); } else { gchar *inspected_expected, *inspected_actual; const gchar *message; inspected_expected = gcut_object_inspect(expected); inspected_actual = gcut_object_inspect(actual); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); g_free(inspected_expected); g_free(inspected_actual); if (expression_equal_function) message = cut_take_printf("<%s(%s, %s)>", expression_equal_function, expression_expected, expression_actual); else message = cut_take_printf("<%s == %s>", expression_expected, expression_actual); cut_test_fail(message); } } void gcut_assert_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" G_GINT64_FORMAT, expected)); cut_set_actual(cut_take_printf("%" G_GINT64_FORMAT, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_not_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" G_GINT64_FORMAT, expected)); cut_set_actual(cut_take_printf("%" G_GINT64_FORMAT, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void gcut_assert_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" G_GUINT64_FORMAT, expected)); cut_set_actual(cut_take_printf("%" G_GUINT64_FORMAT, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_not_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" G_GUINT64_FORMAT, expected)); cut_set_actual(cut_take_printf("%" G_GUINT64_FORMAT, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } #ifdef G_OS_WIN32 #define GCUT_GPID_FORMAT "p" #else #define GCUT_GPID_FORMAT "d" #endif void gcut_assert_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual) { if (expected == actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" GCUT_GPID_FORMAT, expected)); cut_set_actual(cut_take_printf("%" GCUT_GPID_FORMAT, actual)); cut_test_fail(cut_take_printf("<%s == %s>", expression_expected, expression_actual)); } } void gcut_assert_not_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual) { if (expected != actual) { cut_test_pass(); } else { cut_set_expected(cut_take_printf("%" GCUT_GPID_FORMAT, expected)); cut_set_actual(cut_take_printf("%" GCUT_GPID_FORMAT, actual)); cut_test_fail(cut_take_printf("<%s != %s>", expression_expected, expression_actual)); } } void gcut_assert_equal_string_helper (const GString *expected, const GString *actual, const gchar *expression_expected, const gchar *expression_actual) { if (gcut_string_equal(expected, actual)) { cut_test_pass(); } else { const gchar *message; const gchar *inspected_expected, *inspected_actual; inspected_expected = cut_take_string(gcut_string_inspect(expected)); inspected_actual = cut_take_string(gcut_string_inspect(actual)); message = cut_take_printf("<%s == %s>", expression_expected, expression_actual); cut_set_expected(inspected_expected); cut_set_actual(inspected_actual); cut_test_fail(message); } } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-inspect.c0000644000175000017500000001133611400100173021067 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gcut-inspect.h" #include "gcut-enum.h" void gcut_inspect_direct (GString *string, gconstpointer data, gpointer user_data) { g_string_append_printf(string, "%u", GPOINTER_TO_UINT(data)); } void gcut_inspect_int (GString *string, gconstpointer data, gpointer user_data) { const gint *int_value = data; g_string_append_printf(string, "%d", *int_value); } void gcut_inspect_uint (GString *string, gconstpointer data, gpointer user_data) { const guint *uint_value = data; g_string_append_printf(string, "%u", *uint_value); } void gcut_inspect_int64 (GString *string, gconstpointer data, gpointer user_data) { const gint64 *int64_value = data; g_string_append_printf(string, "%" G_GINT64_FORMAT, *int64_value); } void gcut_inspect_uint64 (GString *string, gconstpointer data, gpointer user_data) { const guint64 *uint64_value = data; g_string_append_printf(string, "%" G_GUINT64_FORMAT, *uint64_value); } void gcut_inspect_size (GString *string, gconstpointer data, gpointer user_data) { const gsize *size_value = data; g_string_append_printf(string, "%" G_GSIZE_FORMAT, *size_value); } void gcut_inspect_char (GString *string, gconstpointer data, gpointer user_data) { const gchar *value = data; switch (value[0]) { case '\a': g_string_append(string, "'\\a'"); break; case '\b': g_string_append(string, "'\\b'"); break; case '\t': g_string_append(string, "'\\t'"); break; case '\n': g_string_append(string, "'\\n'"); break; case '\v': g_string_append(string, "'\\v'"); break; case '\f': g_string_append(string, "'\\f'"); break; case '\r': g_string_append(string, "'\\r'"); break; case '\e': g_string_append(string, "'\\e'"); break; case '\'': g_string_append(string, "'\\''"); break; case '\\': g_string_append(string, "'\\\\'"); break; default: if (0x20 <= value[0] && value[0] <= 0x7e) { g_string_append_printf(string, "\'%c\'", value[0]); } else { g_string_append_printf(string, "'\\%d'", value[0]); } break; } } void gcut_inspect_string (GString *string, gconstpointer data, gpointer user_data) { const gchar *value = data; if (value) g_string_append_printf(string, "\"%s\"", value); else g_string_append(string, "NULL"); } void gcut_inspect_type (GString *string, gconstpointer data, gpointer user_data) { const GType *type = data; g_string_append_printf(string, "<%s>", g_type_name(*type)); } void gcut_inspect_flags (GString *string, gconstpointer data, gpointer user_data) { const guint *flags = data; GType *flags_type = user_data; gchar *inspected_flags; inspected_flags = gcut_flags_inspect(*flags_type, *flags); g_string_append(string, inspected_flags); g_free(inspected_flags); } void gcut_inspect_enum (GString *string, gconstpointer data, gpointer user_data) { const gint *enum_value = data; GType *enum_type = user_data; gchar *inspected_enum; inspected_enum = gcut_enum_inspect(*enum_type, *enum_value); g_string_append(string, inspected_enum); g_free(inspected_enum); } void gcut_inspect_pointer (GString *string, gconstpointer data, gpointer user_data) { g_string_append_printf(string, "#<%p>", data); } void gcut_inspect_boolean (GString *string, gconstpointer data, gpointer user_data) { const gboolean *boolean_value = data; if (*boolean_value) { g_string_append(string, "TRUE"); } else { g_string_append(string, "FALSE"); } } void gcut_inspect_double (GString *string, gconstpointer data, gpointer user_data) { const gdouble *double_value = data; g_string_append_printf(string, "%g", *double_value); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-hash-table.h0000644000175000017500000001261211256302421021446 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2009 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_HASH_TABLE_H__ #define __GCUT_HASH_TABLE_H__ #include #include G_BEGIN_DECLS /** * SECTION: gcut-hash-table * @title: Assertion Utilities for GHashTable * @short_description: Utilities to write assertions related * to #GHashTable more easily. * * To write assertions, you need to check equality and show * expected and actual values. * * The utilities help you to write assertions that are * related to #GHashTable. */ /** * gcut_hash_table_equal: * @hash1: a #GHashTable to be compared. * @hash2: a #GHashTable to be compared. * @equal_func: a function that compares two values. * * Compares two #GHashTable, @hash1 and * @hash2. @equal_func is called for each values of * the same key of @hash1 and @hash2. * * e.g.: * |[ * TODO * ]| * * Returns: TRUE if all same key's values of @hash1 and * @hash2 are reported TRUE by @equal_func, FALSE * otherwise. * * Since: 1.0.5 */ gboolean gcut_hash_table_equal (GHashTable *hash1, GHashTable *hash2, GEqualFunc equal_func); /** * gcut_hash_table_inspect: * @hash: a #GHashTable to be inspected. * @key_inspect_func: a function that inspects each key. * @value_inspect_func: a function that inspects each value. * @user_data: user data to pass to the function. * * Inspects @hash. Each key of @hash is inspected by * @key_inspect_func and each value of @hash is inspected by * @value_inspect_func. The returned string should be freed * when no longer needed. * * e.g.: * |[ * TODO * ]| * * Returns: inspected @hash as a string. * * Since: 1.0.5 */ gchar *gcut_hash_table_inspect (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, gpointer user_data); /** * gcut_hash_table_inspect_sorted: * @hash: a #GHashTable to be inspected and sorted. * @key_inspect_func: a function that inspects each key. * @value_inspect_func: a function that inspects each value. * @key_compare_func: a function that compares each key. * @user_data: user data to pass to the function. * * Sorts @hash as key by @key_compare_func and inspects * it. Each key of @hash is inspected by @key_inspect_func * and each value of @hash is inspected by * @value_inspect_func. The returned string should be freed * when no longer needed. * * If @key_compare_func is %NULL, @hash isn't sorted. It is * the same behavior as gcut_hash_table_inspect(). * * e.g.: * |[ * TODO * ]| * * Returns: inspected and sorted @hash as a string. * * Since: 1.0.9 */ gchar *gcut_hash_table_inspect_sorted (GHashTable *hash, GCutInspectFunction key_inspect_func, GCutInspectFunction value_inspect_func, GCompareFunc key_compare_func, gpointer user_data); /** * gcut_hash_table_string_equal: * @hash1: a #GHashTable to be compared. * @hash2: a #GHashTable to be compared. * * Compares two #GHashTable, @hash1 and * @hash2. @hash1 and @hash2 should have string key and * string value. * * Returns: TRUE if all same key's values of @hash1 and * @hash2 are same string content, FALSE otherwise. * * Since: 1.0.5 */ gboolean gcut_hash_table_string_equal (GHashTable *hash1, GHashTable *hash2); /** * gcut_hash_table_string_string_inspect: * @hash: a #GHashTable to be inspected. * * Inspects @hash. @hash should have string key and string * value. The returned string should be freed when no longer * needed. * * Returns: inspected @hash as a string. * * Since: 1.0.5 */ gchar *gcut_hash_table_string_string_inspect (GHashTable *hash); /** * gcut_hash_table_string_string_copy: * @hash: a #GHashTable to be copied. * * Copy @hash. @hash should have string key and string * value. The returned @hash should be freed by * g_hash_table_unref(). * * Returns: copied #GHashTable. It should be freed when no * longer needed. * * Since: 1.0.8 */ GHashTable *gcut_hash_table_string_string_copy (GHashTable *hash); G_END_DECLS #endif /* __GCUT_HASH_TABLE_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-enum.c0000644000175000017500000002044211205747031020401 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "gcut-enum.h" GQuark gcut_enum_error_quark (void) { return g_quark_from_static_string("gcut-enum-error-quark"); } gchar * gcut_enum_inspect (GType enum_type, gint enum_value) { GEnumClass *enum_class; GEnumValue *value; gchar *inspected; enum_class = g_type_class_ref(enum_type); if (!enum_class) return g_strdup_printf("unknown enum type: %s(%" G_GSIZE_FORMAT ")", g_type_name(enum_type), enum_type); value = g_enum_get_value(enum_class, enum_value); if (value) { inspected = g_strdup_printf("#<%s: %s(%s:%d)>", g_type_name(enum_type), value->value_nick, value->value_name, value->value); } else { inspected = g_strdup_printf("#<%s: %d>", g_type_name(enum_type), enum_value); } g_type_class_unref(enum_class); return inspected; } gint gcut_enum_parse (GType enum_type, const gchar *enum_value, GError **error) { GEnumClass *enum_class; gint value = 0; guint i; gboolean found = FALSE; if (!enum_value) { g_set_error(error, GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "enum value should not be NULL"); return 0; } enum_class = g_type_class_ref(enum_type); if (!enum_class) { g_set_error(error, GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "unknown enum type: %s(%" G_GSIZE_FORMAT ")", g_type_name(enum_type), enum_type); return 0; } if (!G_TYPE_IS_ENUM(enum_type)) { g_set_error(error, GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "invalid enum type: %s(%" G_GSIZE_FORMAT ")", g_type_name(enum_type), enum_type); g_type_class_unref(enum_class); return 0; } for (i = 0; i < enum_class->n_values; i++) { GEnumValue *val; val = enum_class->values + i; if (g_ascii_strcasecmp(val->value_name, enum_value) == 0 || g_ascii_strcasecmp(val->value_nick, enum_value) == 0) { found = TRUE; value = val->value; break; } } if (!found) { g_set_error(error, GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "unknown enum value: <%s>(%s)", enum_value, g_type_name(enum_type)); } g_type_class_unref(enum_class); return value; } gchar * gcut_flags_inspect (GType flags_type, guint flags_value) { GFlagsClass *flags_class; guint i; GString *inspected; flags_class = g_type_class_ref(flags_type); if (!flags_class) return g_strdup_printf("unknown flags type: %s(%" G_GSIZE_FORMAT ")", g_type_name(flags_type), flags_type); inspected = g_string_new(NULL); g_string_append_printf(inspected, "#<%s", g_type_name(flags_type)); if (flags_value > 0) { g_string_append(inspected, ":"); if (flags_value & flags_class->mask) { g_string_append(inspected, " "); for (i = 0; i < flags_class->n_values; i++) { GFlagsValue *value = flags_class->values + i; if (value->value & flags_value) g_string_append_printf(inspected, "%s|", value->value_nick); } inspected->str[inspected->len - 1] = ' '; for (i = 0; i < flags_class->n_values; i++) { GFlagsValue *value = flags_class->values + i; if (value->value & flags_value) g_string_append_printf(inspected, "(%s:0x%x)|", value->value_name, value->value); } g_string_truncate(inspected, inspected->len - 1); } if (flags_value & ~(flags_class->mask)) { g_string_append_printf(inspected, " (unknown flags: 0x%x)", flags_value & ~(flags_class->mask)); } } g_string_append(inspected, ">"); g_type_class_unref(flags_class); return g_string_free(inspected, FALSE); } static GFlagsClass * lookup_flags_class (GType flags_type, GError **error) { GFlagsClass *flags_class; flags_class = g_type_class_ref(flags_type); if (!flags_class) { g_set_error(error, GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "unknown flags type: %s(%" G_GSIZE_FORMAT ")", g_type_name(flags_type), flags_type); return NULL; } if (!G_TYPE_IS_FLAGS(flags_type)) { g_set_error(error, GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_TYPE, "invalid flags type: %s(%" G_GSIZE_FORMAT ")", g_type_name(flags_type), flags_type); g_type_class_unref(flags_class); return NULL; } return flags_class; } guint gcut_flags_parse (GType flags_type, const gchar *flags_value, GError **error) { GFlagsClass *flags_class; guint value = 0; guint i; gchar **flags, **flag; GArray *unknown_flags; if (!flags_value) { g_set_error(error, GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "flags value should not be NULL"); return 0; } flags_class = lookup_flags_class(flags_type, error); if (!flags_class) return 0; unknown_flags = g_array_new(TRUE, TRUE, sizeof(gchar *)); flags = g_strsplit(flags_value, "|", 0); for (flag = flags; *flag; flag++) { gboolean found = FALSE; for (i = 0; i < flags_class->n_values; i++) { GFlagsValue *val; val = flags_class->values + i; if (g_ascii_strcasecmp(val->value_name, *flag) == 0 || g_ascii_strcasecmp(val->value_nick, *flag) == 0) { found = TRUE; value |= val->value; break; } } if (!found) g_array_append_val(unknown_flags, *flag); } if (unknown_flags->len > 0) { gchar *inspected_unknown_flags; gchar *inspected_flags; inspected_unknown_flags = g_strjoinv("|", (gchar **)unknown_flags->data); inspected_flags = gcut_flags_inspect(flags_type, value); g_set_error(error, GCUT_ENUM_ERROR, GCUT_ENUM_ERROR_INVALID_VALUE, "unknown flags: <%s>(%s): <%s>: %s", inspected_unknown_flags, g_type_name(flags_type), flags_value, inspected_flags); g_free(inspected_unknown_flags); g_free(inspected_flags); } g_array_free(unknown_flags, TRUE); g_strfreev(flags); g_type_class_unref(flags_class); return value; } guint gcut_flags_get_all (GType flags_type, GError **error) { GFlagsClass *flags_class; guint all_available_values; flags_class = lookup_flags_class(flags_type, error); if (!flags_class) return 0; all_available_values = flags_class->mask; g_type_class_unref(flags_class); return all_available_values; } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-key-file.c0000644000175000017500000000404111205747031021137 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "gcut-enum.h" #include "gcut-key-file.h" gint gcut_key_file_get_enum (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType enum_type, GError **error) { gchar *value; gint enum_value; GError *local_error = NULL; value = g_key_file_get_value(key_file, group_name, key, &local_error); if (local_error) { if (error) *error = local_error; return 0; } enum_value = gcut_enum_parse(enum_type, value, error); g_free(value); return enum_value; } guint gcut_key_file_get_flags (GKeyFile *key_file, const gchar *group_name, const gchar *key, GType flags_type, GError **error) { gchar *value; gint flags_value; GError *local_error = NULL; value = g_key_file_get_value(key_file, group_name, key, &local_error); if (local_error) { if (error) *error = local_error; return 0; } flags_value = gcut_flags_parse(flags_type, value, error); g_free(value); return flags_value; } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-value-equal.c0000644000175000017500000001417211407320462021660 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "gbsearcharray.h" #include "gcut-main.h" #include "gcut-value-equal.h" #include typedef struct { GType type1; GType type2; GEqualFunc func; } EqualEntry; static gint equal_entries_cmp (gconstpointer bsearch_node1, gconstpointer bsearch_node2); static GBSearchArray *equal_entries = NULL; static GBSearchConfig equal_bconfig = { sizeof (EqualEntry), equal_entries_cmp, 0, }; static GEqualFunc equal_func_lookup (GType type1, GType type2) { EqualEntry entry; entry.type1 = type1; do { entry.type2 = type2; do { EqualEntry *found_entry; found_entry = g_bsearch_array_lookup(equal_entries, &equal_bconfig, &entry); if (found_entry) { if (g_type_value_table_peek(entry.type1) == g_type_value_table_peek(type1) && g_type_value_table_peek(entry.type2) == g_type_value_table_peek(type2)) return found_entry->func; } entry.type2 = g_type_parent(entry.type2); } while (entry.type2); entry.type1 = g_type_parent(entry.type1); } while (entry.type1); return NULL; } static gint equal_entries_cmp (gconstpointer bsearch_node1, gconstpointer bsearch_node2) { const EqualEntry *entry1 = bsearch_node1; const EqualEntry *entry2 = bsearch_node2; gint result; result = G_BSEARCH_ARRAY_CMP(entry1->type1, entry2->type1); if (result == 0) result = G_BSEARCH_ARRAY_CMP(entry1->type2, entry2->type2); return result; } void gcut_value_register_equal_func (GType type1, GType type2, GEqualFunc equal_func) { EqualEntry entry; g_return_if_fail(equal_func != NULL); entry.type1 = type1; entry.type2 = type2; entry.func = equal_func; equal_entries = g_bsearch_array_replace(equal_entries, &equal_bconfig, &entry); } gboolean gcut_value_equal (const GValue *value1, const GValue *value2) { GEqualFunc func; GType type1, type2; type1 = G_VALUE_TYPE(value1); type2 = G_VALUE_TYPE(value2); if (type1 == 0 && type2 == 0) return TRUE; if (type1 == 0 || type2 == 0) return FALSE; func = equal_func_lookup(type1, type2); if (func) return func(value1, value2); func = equal_func_lookup(type2, type1); if (func) return func(value2, value1); return FALSE; } #define DEFINE_SAME_TYPE_EQUAL_FUNC(type) \ static gboolean \ value_equal_ ## type ## _ ## type (gconstpointer val1, \ gconstpointer val2) \ { \ const GValue *value1 = val1; \ const GValue *value2 = val2; \ \ return g_value_get_ ## type(value1) == \ g_value_get_ ## type(value2); \ } DEFINE_SAME_TYPE_EQUAL_FUNC(char) DEFINE_SAME_TYPE_EQUAL_FUNC(uchar) DEFINE_SAME_TYPE_EQUAL_FUNC(boolean) DEFINE_SAME_TYPE_EQUAL_FUNC(int) DEFINE_SAME_TYPE_EQUAL_FUNC(uint) DEFINE_SAME_TYPE_EQUAL_FUNC(long) DEFINE_SAME_TYPE_EQUAL_FUNC(ulong) DEFINE_SAME_TYPE_EQUAL_FUNC(int64) DEFINE_SAME_TYPE_EQUAL_FUNC(uint64) DEFINE_SAME_TYPE_EQUAL_FUNC(float) DEFINE_SAME_TYPE_EQUAL_FUNC(double) DEFINE_SAME_TYPE_EQUAL_FUNC(pointer) DEFINE_SAME_TYPE_EQUAL_FUNC(gtype) static gboolean value_equal_string_string (gconstpointer val1, gconstpointer val2) { const GValue *value1 = val1; const GValue *value2 = val2; return cut_equal_string(g_value_get_string(value1), g_value_get_string(value2)); } void gcut_value_equal_init (void) { equal_entries = g_bsearch_array_create(&equal_bconfig); #define REGISTER_SAME_TYPE_EQUAL_FUNC(g_type, type) \ gcut_value_register_equal_func(g_type, g_type, \ value_equal_ ## type ## _ ## type) REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_CHAR, char); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_UCHAR, uchar); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_BOOLEAN, boolean); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_INT, int); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_UINT, uint); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_LONG, long); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_ULONG, ulong); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_INT64, int64); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_UINT64, uint64); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_FLOAT, float); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_DOUBLE, double); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_POINTER, pointer); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_GTYPE, gtype); REGISTER_SAME_TYPE_EQUAL_FUNC(G_TYPE_STRING, string); #undef REGISTER_SAME_TYPE_EQUAL_FUNC } void gcut_value_equal_quit (void) { } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcutter.h0000644000175000017500000000371111523751077020167 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUTTER_H__ #define __GCUTTER_H__ #include #include #include /** * SECTION: gcutter * @title: GCutter * @short_description: Cutter with GLib support. * @see_also: * Assertions with GLib support * * GCutter adds many useful features based on GLib to * Cutter. If you want to write tests with more easily, * it's good idea that you consider GCutter to be used too. * * It's easy to use GCutter. You just include <gcutter.h> * instead of <cutter.h> and use gcutter.pc instead of * cutter.pc: * * test-xxx.c: * |[ * -#include * +#include * ]| * * configure.ac: * |[ * -AC_CHECK_CUTTER * +AC_CHECK_GCUTTER * ]| * * Makefile.am: * |[ * -XXX_CFLAGS = $(CUTTER_CFLAGS) * -XXX_LIBS = $(CUTTER_LIBS) * +XXX_CFLAGS = $(GCUTTER_CFLAGS) * +XXX_LIBS = $(GCUTTER_LIBS) * ]| */ /** * GCUTTER_ENABLED * * Defined when GCutter is enabled. * * Since: 1.0.6 */ #define GCUTTER_ENABLED 1 #endif /* __GCUTTER_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-utils.c0000644000175000017500000000466311523751077020614 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "gcut-public.h" #include "gcut-error.h" GString * gcut_utils_get_fixture_data (CutTestContext *context, const gchar **fixture_data_path, const char *path, ...) { GString *data; va_list args; va_start(args, path); data = gcut_utils_get_fixture_data_va_list(context, fixture_data_path, path, args); va_end(args); return data; } GString * gcut_utils_get_fixture_data_va_list (CutTestContext *context, const gchar **fixture_data_path, const gchar *path, va_list args) { GError *error = NULL; GString *fixture_data; fixture_data = cut_test_context_get_fixture_data_va_list(context, &error, fixture_data_path, path, args); if (error) { gchar *inspected, *message; inspected = gcut_error_inspect(error); message = g_strdup_printf("can't get fixture data: %s", inspected); g_error_free(error); cut_test_context_register_result(context, CUT_TEST_RESULT_ERROR, message); g_free(inspected); g_free(message); cut_test_context_long_jump(context); } return fixture_data; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-test-utils.h0000644000175000017500000003013211523751077021564 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_TEST_UTILS_H__ #define __GCUT_TEST_UTILS_H__ #include #include G_BEGIN_DECLS /** * SECTION: gcut-test-utils * @title: Test Utilities with GLib support * @short_description: Utilities to write tests more easily * with GLib support. * * To write tests, you need to write codes that * set up/tear down test environment, prepare expected and * actual values and so on. Cutter provides test utilities * to you write your tests more easily. * * The utilities work with GLib. */ /** * gcut_take_object: * @object: the #GObject to be owned by Cutter. * * Passes ownership of @object to Cutter and returns @object. * * Returns: @object owned by Cutter. Don't g_object_unref() it. * * Since: 1.0.3 */ #define gcut_take_object(object) \ cut_test_context_take_g_object(cut_get_current_test_context(), \ (object)) /** * gcut_take_error: * @error: the #GError to be owned by Cutter. * * Passes ownership of @error to Cutter and returns * a @error itself. * * Returns: a #GError owned by Cutter. Don't g_error_free() * it. * * Since: 1.0.3 */ #define gcut_take_error(error) \ cut_test_context_take_g_error(cut_get_current_test_context(), \ (error)) /** * gcut_take_list: * @list: the #GList to be owned by Cutter. * @destroy_function: the destroy function that destroys the * elements of @list, or %NULL. * * Passes ownership of @list to Cutter and returns * @list itself. * * Returns: a #GList owned by Cutter. Don't g_list_free() * it. * * Since: 1.0.3 */ #define gcut_take_list(list, destroy_function) \ cut_test_context_take_g_list(cut_get_current_test_context(), \ (list), (destroy_function)) /** * gcut_take_hash_table: * @hash_table: the #GHashTable to be owned by Cutter. * * Passes ownership of @hash_table to Cutter and returns * @hash_table itself. * * Returns: a #GHashTable owned by Cutter. Don't * g_hash_table_unref() it. * * Since: 1.0.4 */ #define gcut_take_hash_table(hash_table) \ cut_test_context_take_g_hash_table(cut_get_current_test_context(), \ (hash_table)) /** * gcut_take_string: * @string: the #GString to be owned by Cutter. * * Passes ownership of @string to Cutter and returns * @string itself. * * Returns: a #GString owned by Cutter. Don't * g_string_free() it. * * Since: 1.1.6 */ #define gcut_take_string(string) \ cut_test_context_take_g_string(cut_get_current_test_context(), \ (string)) /** * gcut_take_new_string: * @string: the string. It can be %NULL. * * Creates a #GString object from passed string. * * Returns: a #GString owned by Cutter. Don't * g_string_free() it. * * Since: 1.1.6 */ #define gcut_take_new_string(string) \ gcut_take_string(g_string_new(string)) /** * gcut_list_new: * @element: the first #gpointer. * @...: remaining elements in list. %NULL-terminate. * * Creates a list from passed elements. * * e.g.: * |[ * GCutEgg *echo_egg, *cat_egg; * * echo_egg = gcut_egg_new("echo", "Hello", NULL); * cat_egg = gcut_egg_new("cat", "/etc/hosts", NULL); * egg_list = gcut_list_new(echo_egg, cat_egg, NULL); * ]| * * Returns: a newly-allocated #GList that contains passed * elements. * * Since: 1.1.1 */ GList *gcut_list_new (const gpointer element, ...) G_GNUC_NULL_TERMINATED; /** * gcut_list_int_new: * @n: the number of integer values. * @value: the first integer value. * @...: remaining integer values in list. * * Creates a list from passed integer values. * * e.g.: * |[ * gcut_list_int_new(3, -10, 1, 29); -> (-10, 1, 29) * ]| * * Returns: a newly-allocated #GList that contains passed * integer values and must be freed with g_list_free(). * * Since: 1.1.5 */ GList *gcut_list_int_new (guint n, gint value, ...); /** * gcut_list_uint_new: * @n: the number of unsigned integer values. * @value: the first unsigned integer value. * @...: remaining unsigned integer values in list. * * Creates a list from passed unsigned integer values. * * e.g.: * |[ * gcut_list_uint_new(3, 0, 1, 2); -> (0, 1, 2) * ]| * * Returns: a newly-allocated #GList that contains passed * unsigned integer values and must be freed with * g_list_free(). * * Since: 1.1.5 */ GList *gcut_list_uint_new (guint n, guint value, ...); /** * gcut_list_string_new: * @value: the first string. * @...: remaining strings in list. %NULL-terminate. * * Creates a list from passed strings. * * Returns: a newly-allocated #GList that contains passed * strings and must be freed with gcut_list_string_free(). * * Since: 1.0.3 */ GList *gcut_list_string_new (const gchar *value, ...) G_GNUC_NULL_TERMINATED; /** * gcut_list_string_new_array: * @strings: the string array. %NULL-terminate. * * Creates a list from passed string array. * * Returns: a newly-allocated #GList that contains passed * string array and must be freed with gcut_list_string_free(). * * Since: 1.0.6 */ GList *gcut_list_string_new_array (const gchar **strings); /** * gcut_take_new_list_int: * @n: the number of integer values. * @value: the first integer value. * @...: remaining strings in list. * * Creates a list from passed integer values that is owned * by Cutter. * * e.g.: * |[ * gcut_take_new_list_int(3, -10, 1, 29); -> (-10, 1, 29) * ]| * * Returns: a newly-allocated #GList that contains passed * integer values and is owned by Cutter. * * Since: 1.1.5 */ #define gcut_take_new_list_int(n, value, ...) \ gcut_take_list(gcut_list_int_new(n, value, __VA_ARGS__), NULL) /** * gcut_take_new_list_uint: * @n: the number of unsigned integer values. * @value: the first unsigned integer value. * @...: remaining strings in list. * * Creates a list from passed unsigned integer values that * is owned by Cutter. * * e.g.: * |[ * gcut_take_new_list_uint(3, 0, 1, 2); -> (0, 1, 2) * ]| * * Returns: a newly-allocated #GList that contains passed * unsigned integer values and is owned by Cutter. * * Since: 1.1.5 */ #define gcut_take_new_list_uint(n, value, ...) \ gcut_take_list(gcut_list_uint_new(n, value, __VA_ARGS__), NULL) /** * gcut_take_new_list_string: * @value: the first string. * @...: remaining strings in list. %NULL-terminate. * * Creates a list from passed strings that is owned by * Cutter. * * Returns: a newly-allocated #GList that contains passed * strings and is owned by Cutter. * * Since: 1.0.5 */ #define gcut_take_new_list_string(value, ...) \ gcut_take_new_list_string_backward_compatibility(value, __VA_ARGS__) #if !defined(CUTTER_DISABLE_DEPRECATED) && defined(__GNUC__) #define gcut_take_new_list_string_backward_compatibility(value, ...) \ gcut_take_list(gcut_list_string_new(value, ## __VA_ARGS__, NULL), \ g_free) #else #define gcut_take_new_list_string_backward_compatibility(value, ...) \ gcut_take_list(gcut_list_string_new(value, __VA_ARGS__), \ g_free) #endif /** * gcut_take_new_list_string_array: * @strings: the string array. %NULL-terminate. * * Creates a list from passed string array that is owned by * Cutter. * * Returns: a newly-allocated #GList that contains passed * string array and is owned by Cutter. * * Since: 1.0.6 */ #define gcut_take_new_list_string_array(strings) \ gcut_take_list(gcut_list_string_new_array(strings), g_free) /** * gcut_take_new_list_object: * @object: the first #GObject. * @...: remaining objects in list. %NULL-terminate. * * Creates a list from passed objects that is owned by * Cutter. * * Returns: a newly-allocated #GList that contains passed * objects and is owned by Cutter. * * Since: 1.1.1 */ #define gcut_take_new_list_object(object, ...) \ gcut_take_list(gcut_list_new(object, __VA_ARGS__), g_object_unref) /** * gcut_list_string_free: * @list: the list that contains strings to be freed. * * Frees @list and contained strings. * * Since: 1.0.3 */ void gcut_list_string_free (GList *list); /** * gcut_list_object_free: * @list: the list that contains #GObject's to be unrefed. * * Frees @list and contained objects. It's safe that @list * contains %NULL. * * Since: 1.1.1 */ void gcut_list_object_free (GList *list); /** * gcut_hash_table_string_string_new: * @key: The first key string. * @...: A %NULL-terminated list of rest arguments. The * first item is the string value of the first key, * followed optionally by more key/value pairs. It * must end with %NULL. * * Creates a hash table that has string key and string value * from passed key/value pairs. * * Returns: a newly-allocated #GHashTable that contains * passed key/value pairs and must be freed with * g_hash_table_unref(). * * Since: 1.0.4 */ GHashTable *gcut_hash_table_string_string_new(const gchar *key, ...) G_GNUC_NULL_TERMINATED; /** * gcut_hash_table_string_string_new_va_list: * @key: The first key string. * @args: A %NULL-terminated list of rest arguments. The * first item is the string value of the first key, * followed optionally by more key/value pairs. It * must end with %NULL. * * Creates a hash table that has string key and string value * from passed key/value pairs. * * Returns: a newly-allocated #GHashTable that contains * passed key/value pairs and must be freed with * g_hash_table_unref(). * * Since: 1.0.5 */ GHashTable *gcut_hash_table_string_string_new_va_list(const gchar *key, va_list args); /** * gcut_take_new_hash_table_string_string: * @key: The first key string. * @...: A %NULL-terminated list of rest arguments. The * string value of the first key, followed optionally * by more key/value pairs. It must end with %NULL. * * Creates a hash table that has string key and string value * from passed key/value pairs. The created hash table is * owned by Cutter. So don't g_hash_table_unref() it. * * Returns: a newly-allocated #GHashTable that contains * passed key/value pairs. * * Since: 1.0.5 */ #define gcut_take_new_hash_table_string_string(key, ...) \ gcut_take_hash_table(gcut_hash_table_string_string_new(key, ## __VA_ARGS__)) /** * gcut_get_fixture_data: * @path: a first element of the path to the fixture data. * @...: remaining elements in path. * %NULL-terminate is required. * * Reads the fixture data at "@path/..." and returns it as a * #GString that is owned by Cutter. The description of * cut_build_fixture_path() shows how the fixture data path * is determined. * * Returns: a content of the fixture data as #GString owend by * Cutter. Don't free it. * * Since: 1.1.6 */ #define gcut_get_fixture_data(...) \ gcut_utils_get_fixture_data(cut_get_current_test_context(), \ NULL, __VA_ARGS__) G_END_DECLS #endif /* __GCUT_TEST_UTILS_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-data.h0000644000175000017500000004122311442135233020351 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_DATA_H__ #define __GCUT_DATA_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-data * @title: Convenience test data API * @short_description: API to create test data without * structure definition. * * cut_add_data() requires custom data type for complex test * data. But it's not easy to write. gcut_add_datum() * provides API to use complex test data without custom data * type. It uses #GType for providing complex data. */ /** * gcut_add_datum: * @name: the name of the data. * @first_field_name: the first field name. * @...: the type and value pair of the first field, * followed optionally by the next field name, type * and value triples. %NULL-terminated. See * description for more details. * * Adds a datum to be used in data driven test. It's * convenient rather than cut_add_data() because you doesn't * need to define a new structure for a complex test data. * * e.g.: * |[ * #include * * void data_translate (void); * void test_translate (gconstpointer data); * * static const gchar* * translate (gint input) * { * switch(input) { * case 1: * return "first"; * case 111: * return "a hundred eleven"; * default: * return "unsupported"; * } * } * * void * data_translate(void) * { * gcut_add_datum("simple data", * "translated", G_TYPE_STRING, "first", * "input", G_TYPE_INT, 1, * NULL); * gcut_add_datum("complex data", * "translated", G_TYPE_STRING, "a hundred eleven", * "input", G_TYPE_INT, 111, * NULL); * } * * void * test_translate(gconstpointer data) * { * cut_assert_equal_string(gcut_data_get_string(data, "translated"), * gcut_data_get_int(data, "input")); * } * ]| * * Available types and their values are the followings: * * * * #G_TYPE_CHAR * * #gchar value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_CHAR, 'X', * NULL); * ]| * * * * * #G_TYPE_STRING * * const #gchar *value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_STRING, "string value", * NULL); * ]| * * * * * #G_TYPE_INT * * #gint value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_INT, 100, * NULL); * ]| * * * * * #G_TYPE_UINT * * #guint value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_UINT, 100, * NULL); * ]| * * * * * #G_TYPE_INT64 * * #gint64 value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_INT64, G_GINT64_CONSTANT(100), * NULL); * ]| * * * * * #G_TYPE_UINT64 * * #guint64 value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_UINT64, G_GUINT64_CONSTANT(100), * NULL); * ]| * * * * * #G_TYPE_GTYPE * * #GType value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_GTYPE, G_TYPE_OBJECT, * NULL); * ]| * * * * * GFlags types * * its type value. * e.g.: * |[ * gcut_add_datum("data name", * "field-name", GTK_TYPE_WIDGET_FLAGS, GTK_TOPLEVEL | GTK_MAPPED, * NULL); * ]| * * * * * GEnum types * * its type value. * e.g.: * |[ * gcut_add_datum("data name", * "field-name", GTK_TYPE_WRAP_MODE, GTK_WRAP_NONE, * NULL); * ]| * * * * * #G_TYPE_POINTER * * #gconstpointer value, #GDestroyNotify notify * notify is called when value is destroyed. * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_POINTER, my_structure_new(...), my_structure_free, * NULL); * ]| * * NOTE: value's ownership is passed to Cutter. Don't free it. * * * * GBoxed types * * its type value. * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_HASH_TABLE, * gcut_hash_table_string_string_new("name1", "value1", * "name2", "value2", * NULL), * NULL); * ]| * * NOTE: value's ownership is passed to Cutter. Don't free it. * * * * #G_TYPE_BOOLEAN * * #gboolean value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_BOOLEAN, TRUE, * NULL); * ]| * * * * * #G_TYPE_DOUBLE * * #gdouble value * e.g.: * |[ * gcut_add_datum("data name", * "field-name", G_TYPE_DOUBLE, 2.9, * NULL); * ]| * * * * * * Since: 1.0.6 */ #define gcut_add_datum(name, first_field_name, ...) \ cut_test_context_add_data( \ cut_get_current_test_context(), \ name, \ gcut_dynamic_data_new(first_field_name, __VA_ARGS__), \ g_object_unref, \ NULL) /** * gcut_data_has_field: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Returns: %TRUE if @data has a @field_name field is * available, %FALSE otherwise. * * Since: 1.1.5 */ #define gcut_data_has_field(data, field_name) \ gcut_dynamic_data_has_field(data, field_name) /** * gcut_data_get_char: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as char. * * Returns: a field value corresponded to @field_name. * * Since: 1.1.3 */ #define gcut_data_get_char(data, field_name) \ gcut_data_get_char_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_char(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_string: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as string. * * Returns: a field value corresponded to @field_name. * * Since: 1.0.6 */ #define gcut_data_get_string(data, field_name) \ gcut_data_get_string_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_string(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_int: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as integer. * * Returns: a field value corresponded to @field_name. * * Since: 1.0.6 */ #define gcut_data_get_int(data, field_name) \ gcut_data_get_int_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_int(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_uint: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as * unsigned integer. * * Returns: a field value corresponded to @field_name. * * Since: 1.0.6 */ #define gcut_data_get_uint(data, field_name) \ gcut_data_get_uint_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_uint(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_int64: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as 64-bit * integer. * * Returns: a field value corresponded to @field_name. * * Since: 1.1.3 */ #define gcut_data_get_int64(data, field_name) \ gcut_data_get_int64_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_int64(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_uint64: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as * 64-bit unsigned integer. * * Returns: a field value corresponded to @field_name. * * Since: 1.1.3 */ #define gcut_data_get_uint64(data, field_name) \ gcut_data_get_uint64_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_uint64(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_size: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as size_t. * * Returns: a field value corresponded to @field_name. * * Since: 1.1.3 */ #define gcut_data_get_size(data, field_name) \ gcut_data_get_size_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_size(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_type: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as #GType. * * Returns: a field value corresponded to @field_name. * * Since: 1.0.6 */ #define gcut_data_get_type(data, field_name) \ gcut_data_get_type_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_type(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_flags: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as * unsigned integer of GFlags. * * Returns: a field value corresponded to @field_name. * * Since: 1.0.6 */ #define gcut_data_get_flags(data, field_name) \ gcut_data_get_flags_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_flags(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_enum: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as * integer of GEnum type. * * Returns: a field value corresponded to @field_name. * * Since: 1.0.6 */ #define gcut_data_get_enum(data, field_name) \ gcut_data_get_enum_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_enum(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_pointer: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as * pointer. * * Returns: a field value corresponded to @field_name. * * Since: 1.0.6 */ #define gcut_data_get_pointer(data, field_name) \ gcut_data_get_pointer_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_pointer(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_boxed: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as * GBoxed type value. * * Returns: a field value corresponded to @field_name. * * Since: 1.0.7 */ #define gcut_data_get_boxed(data, field_name) \ gcut_data_get_boxed_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_boxed(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_object: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as * #GObject type value. * * Returns: a field value corresponded to @field_name. * * Since: 1.1.1 */ #define gcut_data_get_object(data, field_name) \ gcut_data_get_object_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_object(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_boolean: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as boolean. * * Returns: a field value corresponded to @field_name. * * Since: 1.1.3 */ #define gcut_data_get_boolean(data, field_name) \ gcut_data_get_boolean_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_boolean(data, field_name)), \ cut_pop_backtrace)) /** * gcut_data_get_double: * @data: the data added by gcut_add_datum(). * @field_name: the field name. * * Gets a field value identified by @field_name as double * floating point number. * * Returns: a field value corresponded to @field_name. * * Since: 1.1.3 */ #define gcut_data_get_double(data, field_name) \ gcut_data_get_double_helper( \ data, field_name, \ (cut_push_backtrace(gcut_data_get_double(data, field_name)), \ cut_pop_backtrace)) G_END_DECLS #endif /* __GCUT_DATA_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-glib-event-loop.h0000644000175000017500000000511711523760025022450 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_GLIB_EVENT_LOOP_H__ #define __GCUT_GLIB_EVENT_LOOP_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-glib-event-loop * @title: GLib event loop * @short_description: Event loop API for GLib main context * and loop. * * #GCutGLibEventLoop is an #GCutEventLoop implementation * for GLib's main context and loop. * * Since: 1.1.6 */ #define GCUT_TYPE_GLIB_EVENT_LOOP (gcut_glib_event_loop_get_type()) #define GCUT_GLIB_EVENT_LOOP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GCUT_TYPE_GLIB_EVENT_LOOP, GCutGLibEventLoop)) #define GCUT_GLIB_EVENT_LOOP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GCUT_TYPE_GLIB_EVENT_LOOP, GCutGLibEventLoopClass)) #define GCUT_IS_GLIB_EVENT_LOOP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GCUT_TYPE_GLIB_EVENT_LOOP)) #define GCUT_IS_GLIB_EVENT_LOOP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GCUT_TYPE_GLIB_EVENT_LOOP)) #define GCUT_GLIB_EVENT_LOOP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCUT_TYPE_GLIB_EVENT_LOOP, GCutGLibEventLoopClass)) typedef struct _GCutGLibEventLoop GCutGLibEventLoop; typedef struct _GCutGLibEventLoopClass GCutGLibEventLoopClass; struct _GCutGLibEventLoop { GCutEventLoop object; }; struct _GCutGLibEventLoopClass { GCutEventLoopClass parent_class; }; GType gcut_glib_event_loop_get_type (void) G_GNUC_CONST; /** * gcut_glib_event_loop_new: * @context: a #GMainContext or %NULL * * Creates a new #GCutEeventLoop for @context. If @context * is %NULL, the default GLib's main context is used. * * Returns: a new #GCutEventLoop. * * Since: 1.1.6 */ GCutEventLoop *gcut_glib_event_loop_new (GMainContext *context); G_END_DECLS #endif /* __GCUT_GLIB_EVENT_LOOP_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/Makefile.in0000644000175000017500000006276111525654634020423 0ustar koukou# 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@ 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@ subdir = gcutter DIST_COMMON = $(gcutter_include_HEADERS) $(pkginclude_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgcutter_la_LIBADD = am__objects_1 = am__objects_2 = gcut-marshalers.lo am__objects_3 = gcut-assertions-helper.lo gcut-data-helper.lo \ gcut-dynamic-data.lo gcut-egg.lo gcut-enum.lo gcut-error.lo \ gcut-hash-table.lo gcut-inspect.lo gcut-io.lo gcut-key-file.lo \ gcut-list.lo gcut-main.lo gcut-object.lo gcut-string.lo \ gcut-string-io-channel.lo gcut-types.lo gcut-process.lo \ gcut-value-equal.lo gcut-event-loop.lo gcut-glib-event-loop.lo \ gcut-utils.lo am_libgcutter_la_OBJECTS = $(am__objects_1) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) libgcutter_la_OBJECTS = $(am_libgcutter_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgcutter_la_SOURCES) DIST_SOURCES = $(libgcutter_la_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(gcutter_includedir)" \ "$(DESTDIR)$(pkgincludedir)" HEADERS = $(gcutter_include_HEADERS) $(pkginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(COVERAGE_CFLAGS) EXTRA_DIST = gcut-marshalers.list CLEANFILES = *.gcno *.gcda marshal_sources = \ gcut-marshalers.c \ gcut-marshalers.h MAINTAINERCLEANFILES = \ $(marshal_sources) BUILT_SOURCES = $(marshal_sources) noinst_LTLIBRARIES = libgcutter.la gcutter_public_headers = \ gcut-assertions.h \ gcut-assertions-helper.h \ gcut-public.h \ gcut-test-utils.h \ gcut-value-equal.h \ gcut-list.h \ gcut-hash-table.h \ gcut-error.h \ gcut-enum.h \ gcut-types.h \ gcut-object.h \ gcut-string.h \ gcut-string-io-channel.h \ gcut-egg.h \ gcut-io.h \ gcut-key-file.h \ gcut-inspect.h \ gcut-data.h \ gcut-data-helper.h \ gcut-dynamic-data.h \ gcut-process.h \ gcut-event-loop.h \ gcut-glib-event-loop.h \ gcut-main.h noinst_headers = \ gbsearcharray.h pkginclude_HEADERS = \ gcutter.h gcutter_includedir = $(pkgincludedir)/gcutter gcutter_include_HEADERS = \ $(gcutter_public_headers) libgcutter_sources = \ gcut-assertions-helper.c \ gcut-data-helper.c \ gcut-dynamic-data.c \ gcut-egg.c \ gcut-enum.c \ gcut-error.c \ gcut-hash-table.c \ gcut-inspect.c \ gcut-io.c \ gcut-key-file.c \ gcut-list.c \ gcut-main.c \ gcut-object.c \ gcut-string.c \ gcut-string-io-channel.c \ gcut-types.c \ gcut-process.c \ gcut-value-equal.c \ gcut-event-loop.c \ gcut-glib-event-loop.c \ gcut-utils.c libgcutter_la_SOURCES = \ $(gcutter_public_headers) \ $(noinst_headers) \ $(marshal_sources) \ $(libgcutter_sources) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gcutter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign gcutter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgcutter.la: $(libgcutter_la_OBJECTS) $(libgcutter_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgcutter_la_OBJECTS) $(libgcutter_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-assertions-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-data-helper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-dynamic-data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-egg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-enum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-event-loop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-glib-event-loop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-hash-table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-inspect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-key-file.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-list.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-main.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-marshalers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-object.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-process.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-string-io-channel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-string.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-types.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcut-value-equal.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-gcutter_includeHEADERS: $(gcutter_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(gcutter_includedir)" || $(MKDIR_P) "$(DESTDIR)$(gcutter_includedir)" @list='$(gcutter_include_HEADERS)'; test -n "$(gcutter_includedir)" || 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_HEADER) $$files '$(DESTDIR)$(gcutter_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(gcutter_includedir)" || exit $$?; \ done uninstall-gcutter_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(gcutter_include_HEADERS)'; test -n "$(gcutter_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(gcutter_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(gcutter_includedir)" && rm -f $$files install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ 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; }; }'`; \ 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: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; }; }'`; \ 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) @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 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(gcutter_includedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-gcutter_includeHEADERS \ install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-gcutter_includeHEADERS \ uninstall-pkgincludeHEADERS .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am \ install-gcutter_includeHEADERS install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgincludeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-gcutter_includeHEADERS \ uninstall-pkgincludeHEADERS gcut-marshalers.h : gcut-marshalers.list $(GLIB_GENMARSHAL) $(top_srcdir)/gcutter/gcut-marshalers.list --header --prefix=_gcut_marshal > $@ gcut-marshalers.c : gcut-marshalers.list $(GLIB_GENMARSHAL) $(top_srcdir)/gcutter/gcut-marshalers.list --header --body --prefix=_gcut_marshal > $@ echo-public-headers: @for header in $(gcutter_include_HEADERS); do \ echo $(abs_srcdir)/$${header}; \ done echo-libgcutter-sources: @echo $(libgcutter_sources) gcut-marshalers.c # 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: cutter-testing-framework-1.1.7/gcutter/gcut-assertions.h0000644000175000017500000010177111424022520021631 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2007-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_ASSERTIONS_H__ #define __GCUT_ASSERTIONS_H__ #include #include G_BEGIN_DECLS /** * SECTION: gcut-assertions * @title: Assertions with GLib support * @short_description: Checks that your program works as you * expect with GLib support. * */ /** * gcut_assert_equal_type: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.3 */ #define gcut_assert_equal_type(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_type_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_type(expected, actual, __VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_equal_g_type: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Deprecated: 1.0.3: Use gcut_assert_equal_type() instead. */ #define cut_assert_equal_g_type(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_type(expected, actual), \ __VA_ARGS__), \ cut_assert_equal_g_type(expected, actual, __VA_ARGS__)); \ } while (0) #endif /** * gcut_assert_equal_value: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.3 */ #define gcut_assert_equal_value(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_value_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_value(expected, actual, __VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_equal_g_value: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Deprecated: 1.0.3: Use gcut_assert_equal_value() instead. */ #define cut_assert_equal_g_value(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_value(expected, actual), \ __VA_ARGS__), \ cut_assert_equal_g_value(expected, actual, __VA_ARGS__)); \ } while (0) #endif /** * gcut_assert_equal_list: * @expected: an expected list. * @actual: an actual list. * @equal_function: a function that compares each elements of * @expected and @actual list. * @inspect_function: a function that inspected @expected * and @actual list. * @inspect_user_data: a data to be passed to @inspect_function. * @...: optional message. See cut_message() for details. * * Passes if @equal_function(@expected, @actual) == %CUT_TRUE. * * Since: 1.0.6 */ #define gcut_assert_equal_list(expected, actual, equal_function, \ inspect_function, inspect_user_data, \ ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_helper(expected, actual, \ equal_function, \ inspect_function, \ inspect_user_data, \ #expected, #actual, \ #equal_function), \ __VA_ARGS__), \ gcut_assert_equal_list(expected, actual, equal_function, \ inspect_function, inspect_user_data)); \ } while (0) /** * gcut_assert_equal_list_int: * @expected: an expected list of integer. * @actual: an actual list of integer. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.3 */ #define gcut_assert_equal_list_int(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_int_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_list_int(expected, actual, __VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_equal_g_list_int: * @expected: an expected list of integer. * @actual: an actual list of integer. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 0.8 * * Deprecated: 1.0.3: Use gcut_assert_equal_list_int() instead. */ #define cut_assert_equal_g_list_int(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_int_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_g_list_int(expected, actual, __VA_ARGS__)); \ } while (0) #endif /** * gcut_assert_equal_list_uint: * @expected: an expected list of unsigned integer. * @actual: an actual list of unsigned integer. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.3 */ #define gcut_assert_equal_list_uint(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_uint_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_list_uint(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_list_string: * @expected: an expected list of string. * @actual: an actual list of string. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.3 */ #define gcut_assert_equal_list_string(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_string_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_list_string(expected, actual, __VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_equal_g_list_string: * @expected: an expected list of string. * @actual: an actual list of string. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 0.8 * * Deprecated: 1.0.3: Use gcut_assert_equal_list_string() instead. */ #define cut_assert_equal_g_list_string(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_string_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ cut_assert_equal_g_list_string(expected, actual, __VA_ARGS__)); \ } while (0) #endif /** * gcut_assert_equal_list_object: * @expected: an expected list of #GObject. * @actual: an actual list of #GObject. * @...: optional message. See cut_message() for details. * * Passes if @expected and @actual has same GObject * in * same order. * * Since: 1.0.5 */ #define gcut_assert_equal_list_object(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_object_helper(expected, actual, \ g_direct_equal, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_list_object(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_list_object_custom: * @expected: an expected list of #GObject. * @actual: an actual list of #GObject. * @equal_function: a function that compares two #GObject. * @...: optional message. See cut_message() for details. * * Passes if @expected and @actual has same #GObject in same * order. Each comparison of #GObject uses @equal_function. * * Since: 1.0.5 */ #define gcut_assert_equal_list_object_custom(expected, actual, \ equal_function, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_object_helper(expected, actual, \ equal_function, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_list_object_custom(expected, actual, \ __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_list_enum: * @type: a #GEnum type. * @expected: an expected list of enum value. * @actual: an actual list of enum value. * @...: optional message. See cut_message() for details. * * Passes if @expected and @actual has same enum values in * same order. * * Since: 1.0.5 */ #define gcut_assert_equal_list_enum(type, expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_enum_helper(type, expected, actual, \ #type, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_list_enum(type, expected, actual, \ __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_list_flags: * @type: a #GFlags type. * @expected: an expected list of flags value. * @actual: an actual list of flags value. * @...: optional message. See cut_message() for details. * * Passes if @expected and @actual has same flags values in * same order. * * Since: 1.0.5 */ #define gcut_assert_equal_list_flags(type, expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_list_flags_helper(type, expected, actual, \ #type, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_list_flags(type, expected, actual, \ __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_hash_table: * @expected: an expected #GHashTable of string. * @actual: an actual #GHashTable of string. * @equal_function: a function that compares each values of * @expected and @actual hash table. * @key_inspect_function: a function that inspected a key of * @expected and @actual hash table. * @value_inspect_function: a function that inspected a value of * @expected and @actual hash table. * @inspect_user_data: a data to be passed to @inspect_function. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.6 */ #define gcut_assert_equal_hash_table(expected, actual, \ equal_function, \ key_inspect_function, \ value_inspect_function, \ inspect_user_data, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_hash_table_helper(expected, actual, \ equal_function, \ key_inspect_function, \ value_inspect_function, \ inspect_user_data, \ #expected, #actual, \ #equal_function), \ __VA_ARGS__), \ gcut_assert_equal_hash_table(expected, actual)); \ } while (0) /** * gcut_assert_equal_hash_table_string_string: * @expected: an expected #GHashTable of string. * @actual: an actual #GHashTable of string. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.4 */ #define gcut_assert_equal_hash_table_string_string(expected, actual, \ ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_hash_table_string_string_helper( \ expected, actual, #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_hash_table_string_string(expected, actual, \ __VA_ARGS__)); \ } while (0) /** * gcut_assert_error: * @error: a target #GError. * @...: optional message. See cut_message() for details. * * Passes if @error == %NULL. * * Since: 1.0.3 */ #define gcut_assert_error(error, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_error_helper(error, #error), \ __VA_ARGS__), \ gcut_assert_error(error, __VA_ARGS__)); \ } while (0) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_g_error: * @error: a target #GError. * @...: optional message. See cut_message() for details. * * Passes if @error == %NULL. * * Since: 1.0 * * Deprecated: 1.0.3: Use gcut_assert_error() instead. */ #define cut_assert_g_error(error, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_error_helper(error, #error), \ __VA_ARGS__), \ cut_assert_g_error(error, __VA_ARGS__)); \ } while (0) #endif /** * gcut_assert_equal_error: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.5 */ #define gcut_assert_equal_error(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_error_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_error(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_remove_path: * @path: a first element of the path to the removed path. * @...: remaining elements in path. NULL terminated. * * Passes if cut_utils_build_path(@path, ...) is removed successfully. * * Since: 1.0.3 */ #define gcut_assert_remove_path(path, ...) \ cut_trace_with_info_expression( \ gcut_assert_remove_path_helper(path, __VA_ARGS__), \ gcut_assert_remove_path(path, __VA_ARGS__)) #ifndef CUTTER_DISABLE_DEPRECATED /** * cut_assert_remove_path: * @path: a first element of the path to the removed path. * @...: remaining elements in path. NULL terminated. * * Passes if cut_utils_build_path(@path, ...) is removed successfully. * * Since: 1.0.2 * * Deprecated: 1.0.3: Use gcut_assert_remove_path() instead. */ #define cut_assert_remove_path(path, ...) \ cut_trace_with_info_expression( \ gcut_assert_remove_path_helper(path, __VA_ARGS__), \ cut_assert_remove_path(path, __VA_ARGS__)) #endif /** * gcut_assert_equal_time_val: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.4 */ #define gcut_assert_equal_time_val(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_time_val_helper(expected, actual, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_time_val(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_enum: * @enum_type: a #GEnum type. * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * e.g.: * |[ * gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE, GTK_DIR_LEFT, GTK_DIR_LEFT); -> Pass * gcut_assert_equal_enum(GTK_TYPE_DIRECTION_TYPE, GTK_DIR_DOWN, GTK_DIR_LEFT); -> Fail * ]| * * Since: 1.0.5 */ #define gcut_assert_equal_enum(enum_type, expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_enum_helper(enum_type, expected, actual, \ #enum_type, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_enum(enum_type, expected, actual, \ __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_flags: * @flags_type: a #GFlags type. * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * e.g.: * |[ * gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS, * GTK_DIALOG_DESTROY_MODAL | * GTK_DIALOG_DESTROY_WITH_PARENT, * GTK_DIALOG_DESTROY_MODAL | * GTK_DIALOG_DESTROY_WITH_PARENT); -> Pass * gcut_assert_equal_flags(GTK_TYPE_DIALOG_FLAGS, * GTK_DIALOG_DESTROY_MODAL | * GTK_DIALOG_DESTROY_WITH_PARENT, * GTK_DIALOG_DESTROY_MODAL); -> Fail * ]| * * Since: 1.0.5 */ #define gcut_assert_equal_flags(flags_type, expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_flags_helper(flags_type, \ expected, actual, \ #flags_type, \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_flags(flags_type, expected, actual, \ __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_object: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. See * gcut_assert_equal_object_custom() when you need to customize * equality check. * * e.g.: * |[ * gcut_assert_equal_object(object, object); -> Pass * gcut_assert_equal_object(object1, object2); -> Fail * gcut_assert_equal_object(NULL, NULL); -> Pass * gcut_assert_equal_object(object1, NULL); -> Fail * ]| * * Since: 1.0.5 */ #define gcut_assert_equal_object(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_object_helper(G_OBJECT(expected), \ G_OBJECT(actual), \ NULL, \ #expected, #actual, \ NULL), \ __VA_ARGS__), \ gcut_assert_equal_object(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_object_custom: * @expected: an expected value. * @actual: an actual value. * @equal_function: a function that compare two objects. * @...: optional message. See cut_message() for details. * * Passes if @equal_function(@expected, @actual) == %CUT_TRUE. * * e.g.: * |[ * static gboolean * equal_name (gconstpointer data1, gconstpointer data2) * { * return g_str_equal(my_object_get_name(MY_OBJECT(data1)), * my_object_get_name(MY_OBJECT(data2))); * } * * gcut_assert_equal_object_custom(object, object, equal_name); -> Pass * gcut_assert_equal_object_custom(same_name_object1, * same_name_object2, * equal_name); -> Pass * gcut_assert_equal_object_custom(different_name_object1, * different_name_object2, * equal_name); -> Fail * ]| * * Since: 1.0.5 */ #define gcut_assert_equal_object_custom(expected, actual, \ equal_function, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_object_helper(G_OBJECT(expected), \ G_OBJECT(actual), \ equal_function, \ #expected, #actual, \ #equal_function), \ __VA_ARGS__), \ gcut_assert_equal_object_custom(expected, actual, \ equal_function, __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_int64: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.5 */ #define gcut_assert_equal_int64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_int64_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_int64(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_not_equal_int64: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * Since: 1.1.4 */ #define gcut_assert_not_equal_int64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_not_equal_int64_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_not_equal_int64(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_uint64: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.5 */ #define gcut_assert_equal_uint64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_uint64_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_uint64(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_not_equal_uint64: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * Since: 1.1.4 */ #define gcut_assert_not_equal_uint64(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_not_equal_uint64_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_not_equal_uint64(expected, actual, __VA_ARGS__)); \ } while (0) /** * gcut_assert_equal_pid: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.0.6 */ #define gcut_assert_equal_pid(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_pid_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_pid(expected, actual)); \ } while (0) /** * gcut_assert_not_equal_pid: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected != @actual. * * Since: 1.0.7 */ #define gcut_assert_not_equal_pid(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_not_equal_pid_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_not_equal_pid(expected, actual)); \ } while (0) /** * gcut_assert_equal_string: * @expected: an expected value. * @actual: an actual value. * @...: optional message. See cut_message() for details. * * Passes if @expected == @actual. * * Since: 1.1.5 */ #define gcut_assert_equal_string(expected, actual, ...) do \ { \ cut_trace_with_info_expression( \ cut_test_with_user_message( \ gcut_assert_equal_string_helper((expected), (actual), \ #expected, #actual), \ __VA_ARGS__), \ gcut_assert_equal_string(expected, actual, __VA_ARGS__)); \ } while (0) G_END_DECLS #endif /* __GCUT_ASSERTIONS_H__ */ /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-assertions-helper.h0000644000175000017500000002502311424022520023101 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_ASSERTIONS_HELPER_H__ #define __GCUT_ASSERTIONS_HELPER_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include G_BEGIN_DECLS void gcut_assert_equal_type_helper (GType expected, GType actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_value_helper (GValue *expected, GValue *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, GCutInspectFunction inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_list_int_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_uint_helper(const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_string_helper (const GList *expected, const GList *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_enum_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_flags_helper (GType type, const GList *expected, const GList *actual, const gchar *expression_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_list_object_helper (const GList *expected, const GList *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_hash_table_helper (GHashTable *expected, GHashTable *actual, GEqualFunc equal_function, GCutInspectFunction key_inspect_function, GCutInspectFunction value_inspect_function, gpointer inspect_user_data, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_hash_table_string_string_helper (GHashTable *expected, GHashTable *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_error_helper (GError *error, const gchar *expression_error); void gcut_assert_equal_error_helper (const GError *expected, const GError *actual, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_remove_path_helper (const gchar *path, ...) G_GNUC_NULL_TERMINATED; void gcut_assert_equal_time_val_helper (GTimeVal *expected, GTimeVal *actual, const gchar *expression_expected, const gchar *actual_expected); void gcut_assert_equal_enum_helper (GType enum_type, gint expected, gint actual, const gchar *expression_enum_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_flags_helper (GType flags_type, gint expected, gint actual, const gchar *expression_flags_type, const gchar *expression_expected, const gchar *expression_actual); void gcut_assert_equal_object_helper (GObject *expected, GObject *actual, GEqualFunc equal_function, const gchar *expression_expected, const gchar *expression_actual, const gchar *expression_equal_function); void gcut_assert_equal_int64_helper (gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_int64_helper(gint64 expected, gint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_uint64_helper (guint64 expected, guint64 actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); void gcut_assert_not_equal_pid_helper (GPid expected, GPid actual, const char *expression_expected, const char *expression_actual); void gcut_assert_equal_string_helper (const GString *expected, const GString *actual, const gchar *expression_expected, const gchar *expression_actual); G_END_DECLS #endif /* __GCUT_ASSERTIONS_HELPER_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-main.c0000644000175000017500000000232611205747031020362 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "gcut-main.h" static gboolean initialized = FALSE; void gcut_init (void) { if (initialized) return; initialized = TRUE; gcut_value_equal_init(); } void gcut_quit (void) { if (!initialized) return; gcut_value_equal_quit(); initialized = FALSE; } /* vi:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-data-helper.c0000644000175000017500000000544311400100174021613 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009-2010 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include "gcut-data-helper.h" #include "gcut-assertions-helper.h" #define DEFINE_GETTER_HELPER(type_name, type) \ type \ gcut_data_get_ ## type_name ## _helper (gconstpointer data, \ const gchar *field_name, \ CutCallbackFunction callback) \ { \ GError *error = NULL; \ type value; \ \ value = gcut_dynamic_data_get_ ## type_name(GCUT_DYNAMIC_DATA(data), \ field_name, \ &error); \ gcut_assert_error_helper(error, "error"); \ callback(); \ \ return value; \ } DEFINE_GETTER_HELPER(char, gchar) DEFINE_GETTER_HELPER(string, const gchar *) DEFINE_GETTER_HELPER(int, gint) DEFINE_GETTER_HELPER(uint, guint) DEFINE_GETTER_HELPER(int64, gint64) DEFINE_GETTER_HELPER(uint64, guint64) DEFINE_GETTER_HELPER(size, gsize) #define gcut_data_get_data_type_helper gcut_data_get_type_helper DEFINE_GETTER_HELPER(data_type, GType) #undef gcut_data_get_data_type_helper DEFINE_GETTER_HELPER(flags, guint) DEFINE_GETTER_HELPER(enum, gint) DEFINE_GETTER_HELPER(pointer, gconstpointer) DEFINE_GETTER_HELPER(boxed, gconstpointer) DEFINE_GETTER_HELPER(object, gpointer) DEFINE_GETTER_HELPER(boolean, gboolean) DEFINE_GETTER_HELPER(double, gdouble) /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-object.c0000644000175000017500000000663711205747031020715 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include "gcut-object.h" #include "gcut-enum.h" #include "gcut-test-utils.h" gboolean gcut_object_equal (const GObject *object1, const GObject *object2, GEqualFunc equal_func) { if (object1 == object2) return TRUE; if (object1 == NULL || object2 == NULL) return FALSE; if (!equal_func) return FALSE; return equal_func(object1, object2); } static void inspect_object (GString *string, gconstpointer const_object, gpointer data) { GObject *object = (GObject *)const_object; guint i, n_properties = 0; GParamSpec **param_specs = NULL; g_string_append_printf(string, "#<%s:%p", G_OBJECT_TYPE_NAME(object), object); param_specs = g_object_class_list_properties(G_OBJECT_GET_CLASS(object), &n_properties); for (i = 0; i < n_properties; i++) { GParamSpec *spec = param_specs[i]; GValue value = {0,}; gchar *value_string; if (i > 0) g_string_append(string, ","); g_value_init(&value, spec->value_type); g_object_get_property(object, spec->name, &value); if (G_TYPE_IS_ENUM(spec->value_type)) { value_string = gcut_enum_inspect(spec->value_type, g_value_get_enum(&value)); } else if (G_TYPE_IS_FLAGS(spec->value_type)) { value_string = gcut_flags_inspect(spec->value_type, g_value_get_flags(&value)); } else if (G_TYPE_IS_OBJECT(spec->value_type)) { /* FIXME: circular check */ value_string = gcut_object_inspect(g_value_get_object(&value)); } else { value_string = g_strdup_value_contents(&value); } g_string_append_printf(string, " %s=<%s>", spec->name, value_string); g_free(value_string); g_value_unset(&value); } g_free(param_specs); g_string_append(string, ">"); } gchar * gcut_object_inspect (const GObject *object) { return gcut_object_inspect_custom(object, inspect_object, NULL); } gchar * gcut_object_inspect_custom (const GObject *object, GCutInspectFunction inspect_func, gpointer user_data) { GString *string; if (!object) return g_strdup("(null)"); string = g_string_new(NULL); inspect_func(string, object, user_data); return g_string_free(string, FALSE); } /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/gcutter/Makefile.am0000644000175000017500000000413211523751077020373 0ustar koukouINCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/cutter AM_CFLAGS = \ $(CUTTER_CFLAGS) \ $(COVERAGE_CFLAGS) EXTRA_DIST = gcut-marshalers.list CLEANFILES = *.gcno *.gcda marshal_sources = \ gcut-marshalers.c \ gcut-marshalers.h MAINTAINERCLEANFILES = \ $(marshal_sources) BUILT_SOURCES = $(marshal_sources) noinst_LTLIBRARIES = libgcutter.la gcutter_public_headers = \ gcut-assertions.h \ gcut-assertions-helper.h \ gcut-public.h \ gcut-test-utils.h \ gcut-value-equal.h \ gcut-list.h \ gcut-hash-table.h \ gcut-error.h \ gcut-enum.h \ gcut-types.h \ gcut-object.h \ gcut-string.h \ gcut-string-io-channel.h \ gcut-egg.h \ gcut-io.h \ gcut-key-file.h \ gcut-inspect.h \ gcut-data.h \ gcut-data-helper.h \ gcut-dynamic-data.h \ gcut-process.h \ gcut-event-loop.h \ gcut-glib-event-loop.h \ gcut-main.h noinst_headers = \ gbsearcharray.h pkginclude_HEADERS = \ gcutter.h gcutter_includedir=$(pkgincludedir)/gcutter gcutter_include_HEADERS = \ $(gcutter_public_headers) libgcutter_sources = \ gcut-assertions-helper.c \ gcut-data-helper.c \ gcut-dynamic-data.c \ gcut-egg.c \ gcut-enum.c \ gcut-error.c \ gcut-hash-table.c \ gcut-inspect.c \ gcut-io.c \ gcut-key-file.c \ gcut-list.c \ gcut-main.c \ gcut-object.c \ gcut-string.c \ gcut-string-io-channel.c \ gcut-types.c \ gcut-process.c \ gcut-value-equal.c \ gcut-event-loop.c \ gcut-glib-event-loop.c \ gcut-utils.c libgcutter_la_SOURCES = \ $(gcutter_public_headers) \ $(noinst_headers) \ $(marshal_sources) \ $(libgcutter_sources) gcut-marshalers.h : gcut-marshalers.list $(GLIB_GENMARSHAL) $(top_srcdir)/gcutter/gcut-marshalers.list --header --prefix=_gcut_marshal > $@ gcut-marshalers.c : gcut-marshalers.list $(GLIB_GENMARSHAL) $(top_srcdir)/gcutter/gcut-marshalers.list --header --body --prefix=_gcut_marshal > $@ echo-public-headers: @for header in $(gcutter_include_HEADERS); do \ echo $(abs_srcdir)/$${header}; \ done echo-libgcutter-sources: @echo $(libgcutter_sources) gcut-marshalers.c cutter-testing-framework-1.1.7/gcutter/gcut-string.h0000644000175000017500000000371611424026247020757 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_STRING_H__ #define __GCUT_STRING_H__ #include G_BEGIN_DECLS /** * SECTION: gcut-string * @title: Assertion Utilities for GString * @short_description: Utilities to write assertions related * to #GString more easily. * * To write assertions, you need to check equality and show * expected and actual values. * * The utilities help you to write assertions that are * related to #GString. */ /** * gcut_string_equal: * @string1: a #GString to be compared. * @string2: a #GString to be compared. * * Compares two #GString, @string1 and @string2. * * Returns: %TRUE if both of @string1 and @string2 have the same * content, %FALSE otherwise. * * Since: 1.1.5 */ gboolean gcut_string_equal (const GString *string1, const GString *string2); /** * gcut_string_inspect: * @string: a #GString value. * * Inspects @string. The returned string should be freed when * no longer needed. * * Returns: inspected @string as a string. * * Since: 1.1.5 */ gchar *gcut_string_inspect (const GString *string); G_END_DECLS #endif /* __GCUT_STRING_H__ */ /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-process.c0000644000175000017500000007524111523751077021132 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008-2011 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #ifdef HAVE_SYS_WAIT_H # include #endif #include #include #include #include #include #include "gcut-io.h" #include "gcut-process.h" #include "gcut-glib-event-loop.h" #include "gcut-marshalers.h" #include "cut-utils.h" #ifdef ERROR # undef ERROR #endif #define GCUT_PROCESS_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), GCUT_TYPE_PROCESS, GCutProcessPrivate)) typedef struct _WatchOutputData { GCutProcess *process; guint signal; } WatchOutputData; typedef struct _GCutProcessPrivate GCutProcessPrivate; struct _GCutProcessPrivate { gchar **command; GArray *env; GSpawnFlags flags; GSpawnFlags must_flags; GPid pid; gint status; guint process_watch_id; GIOChannel *input; GIOChannel *output; GIOChannel *error; #ifdef CUT_SUPPORT_GIO GInputStream *output_stream; GInputStream *error_stream; #endif guint output_watch_id; guint error_watch_id; GString *output_string; GString *error_string; WatchOutputData *watch_output_data; WatchOutputData *watch_error_data; guint forced_termination_wait_time; GCutEventLoop *event_loop; }; enum { PROP_0, PROP_COMMAND }; enum { START_SIGNAL, OUTPUT_RECEIVED, ERROR_RECEIVED, REAPED, ERROR, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0}; G_DEFINE_TYPE(GCutProcess, gcut_process, G_TYPE_OBJECT) static void dispose (GObject *object); static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void output_received (GCutProcess *process, const gchar *chunk, gsize size); static void error_received (GCutProcess *process, const gchar *chunk, gsize size); static void gcut_process_class_init (GCutProcessClass *klass) { GObjectClass *gobject_class; GParamSpec *spec; gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; klass->output_received = output_received; klass->error_received = error_received; spec = g_param_spec_pointer("command", "Command", "The command to be ran by the process", G_PARAM_READWRITE); g_object_class_install_property(gobject_class, PROP_COMMAND, spec); /** * GCutProcess::output-received: * @process: the object which received the signal. * @chunk: the chunk read from an external process's * standard output. * @size: the size of @chunk. (%gsize) * * It is emitted each time an external process outputs * something to its standard output and it is read. * * Note that you need to run GLib's main loop by * g_main_loop_run(), g_main_context_iteration() and so * on for detecting an external process's output is * readable. * * Since: 1.1.5 */ signals[OUTPUT_RECEIVED] = g_signal_new("output-received", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GCutProcessClass, output_received), NULL, NULL, #if GLIB_SIZEOF_SIZE_T == 8 _gcut_marshal_VOID__STRING_UINT64, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT64 #else _gcut_marshal_VOID__STRING_UINT, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT #endif ); /** * GCutProcess::error-received: * @process: the object which received the signal. * @chunk: the chunk read from an external process's * standard error output. * @size: the size of @chunk. (%gsize) * * It is emitted each time an external process outputs * something to its standard error output and it is * read. * * Note that you need to run GLib's main loop by * g_main_loop_run(), g_main_context_iteration() and so * on for detecting an external process's output is * readable. * * Since: 1.1.5 */ signals[ERROR_RECEIVED] = g_signal_new("error-received", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GCutProcessClass, error_received), NULL, NULL, #if GLIB_SIZEOF_SIZE_T == 8 _gcut_marshal_VOID__STRING_UINT64, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT64 #else _gcut_marshal_VOID__STRING_UINT, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_UINT #endif ); /** * GCutProcess::reaped: * @process: the object which received the signal. * @status: the exit status of an external process. * * It is emitted when an external process is exited. * * Note that you need to run GLib's main loop by * g_main_loop_run(), g_main_context_iteration() and so * on for detecting an external process is exited. * * Since: 1.1.5 */ signals[REAPED] = g_signal_new("reaped", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GCutProcessClass, reaped), NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); /** * GCutProcess::error: * @process: the object which received the signal. * @error: the error of an external process. (%GError) * * It is emitted each time an external process causes an * error. (e.g. IO error) * * Since: 1.1.5 */ signals[ERROR] = g_signal_new("error", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GCutProcessClass, error), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); g_type_class_add_private(gobject_class, sizeof(GCutProcessPrivate)); } static void gcut_process_init (GCutProcess *process) { GCutProcessPrivate *priv = GCUT_PROCESS_GET_PRIVATE(process); priv->command = NULL; priv->env = NULL; priv->flags = G_SPAWN_SEARCH_PATH; priv->must_flags = G_SPAWN_DO_NOT_REAP_CHILD; priv->pid = 0; priv->status = 0; priv->process_watch_id = 0; priv->input = NULL; priv->output = NULL; priv->error = NULL; #ifdef CUT_SUPPORT_GIO priv->output_stream = g_memory_input_stream_new(); priv->error_stream = g_memory_input_stream_new(); #endif priv->output_string = g_string_new(NULL); priv->error_string = g_string_new(NULL); priv->output_watch_id = 0; priv->error_watch_id = 0; priv->watch_output_data = NULL; priv->watch_error_data = NULL; priv->forced_termination_wait_time = 10; priv->event_loop = NULL; } static void remove_child_watch_func (GCutProcessPrivate *priv) { if (priv->process_watch_id > 0) { gcut_event_loop_remove(priv->event_loop, priv->process_watch_id); priv->process_watch_id = 0; } } static void remove_output_watch_func (GCutProcessPrivate *priv) { if (priv->output_watch_id > 0) { gcut_event_loop_remove(priv->event_loop, priv->output_watch_id); priv->output_watch_id = 0; } } static void remove_error_watch_func (GCutProcessPrivate *priv) { if (priv->error_watch_id > 0) { gcut_event_loop_remove(priv->event_loop, priv->error_watch_id); priv->error_watch_id = 0; } } static gboolean cb_timeout_wait (gpointer user_data) { gboolean *is_timeout = user_data; *is_timeout = TRUE; return FALSE; } static void dispose_io_channel (GCutProcessPrivate *priv) { if (priv->input) { g_io_channel_unref(priv->input); priv->input = NULL; } remove_output_watch_func(priv); remove_error_watch_func(priv); if (priv->output) { g_io_channel_unref(priv->output); priv->output = NULL; } if (priv->error) { g_io_channel_unref(priv->error); priv->error = NULL; } if (priv->watch_output_data) { g_free(priv->watch_output_data); priv->watch_output_data = NULL; } if (priv->watch_error_data) { g_free(priv->watch_error_data); priv->watch_error_data = NULL; } } #ifdef CUT_SUPPORT_GIO static void dispose_streams (GCutProcessPrivate *priv) { if (priv->output_stream) { g_object_unref(priv->output_stream); priv->output_stream = NULL; } if (priv->error_stream) { g_object_unref(priv->error_stream); priv->error_stream = NULL; } } #endif static void gcut_process_close (GCutProcess *process) { GCutProcessPrivate *priv; priv = GCUT_PROCESS_GET_PRIVATE(process); if (priv->pid) { g_spawn_close_pid(priv->pid); priv->pid = 0; } } static void dispose (GObject *object) { GCutProcessPrivate *priv; priv = GCUT_PROCESS_GET_PRIVATE(object); if (priv->command) { g_strfreev(priv->command); priv->command = NULL; } if (priv->process_watch_id && priv->pid) { GError *error = NULL; gcut_process_kill(GCUT_PROCESS(object), SIGTERM, &error); if (priv->forced_termination_wait_time > 0) { gboolean is_timeout = FALSE; guint timeout_wait_id; timeout_wait_id = g_timeout_add(priv->forced_termination_wait_time, cb_timeout_wait, &is_timeout); while (!is_timeout && priv->process_watch_id > 0 && priv->pid > 0) g_main_context_iteration(NULL, TRUE); g_source_remove(timeout_wait_id); } } remove_child_watch_func(priv); if (priv->pid) { gcut_process_close(GCUT_PROCESS(object)); } if (priv->output_string) { g_string_free(priv->output_string, TRUE); priv->output_string = NULL; } if (priv->error_string) { g_string_free(priv->error_string, TRUE); priv->error_string = NULL; } #ifdef CUT_SUPPORT_GIO dispose_streams(priv); #endif dispose_io_channel(priv); if (priv->event_loop) { g_object_unref(priv->event_loop); priv->event_loop = NULL; } G_OBJECT_CLASS(gcut_process_parent_class)->dispose(object); } static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GCutProcessPrivate *priv = GCUT_PROCESS_GET_PRIVATE(object); switch (prop_id) { case PROP_COMMAND: if (priv->command) g_strfreev(priv->command); priv->command = g_strdupv(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GCutProcessPrivate *priv = GCUT_PROCESS_GET_PRIVATE(object); switch (prop_id) { case PROP_COMMAND: g_value_set_pointer(value, priv->command); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } GQuark gcut_process_error_quark (void) { return g_quark_from_static_string("gcut-process-error-quark"); } GCutProcess * gcut_process_new (const gchar *command, ...) { GCutProcess *process; va_list args; va_start(args, command); process = gcut_process_new_va_list(command, args); va_end(args); return process; } GCutProcess * gcut_process_new_command_line (const gchar *command_line) { GCutProcess *process; gchar **argv = NULL; if (!g_shell_parse_argv(command_line, NULL, &argv, NULL)) { return FALSE; } process = gcut_process_new_strings((const gchar **)argv); g_strfreev (argv); return process; } GCutProcess * gcut_process_new_va_list (const gchar *command, va_list args) { GCutProcess *process; GArray *command_line; command_line = g_array_new(TRUE, TRUE, sizeof(gchar *)); while (command) { g_array_append_val(command_line, command); command = va_arg(args, const gchar *); } process = gcut_process_new_array(command_line); g_array_free(command_line, TRUE); return process; } GCutProcess * gcut_process_new_argv (gint args, gchar **argv) { GCutProcess *process; gint i; GArray *command_line; command_line = g_array_new(TRUE, TRUE, sizeof(gchar *)); for (i = 0; i < args && argv[i]; i++) { const gchar *command = argv[i]; g_array_append_val(command_line, command); } process = gcut_process_new_array(command_line); g_array_free(command_line, TRUE); return process; } GCutProcess * gcut_process_new_strings (const gchar **commands) { return g_object_new(GCUT_TYPE_PROCESS, "command", commands, NULL); } GCutProcess * gcut_process_new_array (GArray *command) { return gcut_process_new_strings((const gchar **)(command->data)); } GSpawnFlags gcut_process_get_flags (GCutProcess *process) { return GCUT_PROCESS_GET_PRIVATE(process)->flags; } void gcut_process_set_flags (GCutProcess *process, GSpawnFlags flags) { GCUT_PROCESS_GET_PRIVATE(process)->flags = flags; } gchar ** gcut_process_get_env (GCutProcess *process) { GCutProcessPrivate *priv; GArray *env; guint i; priv = GCUT_PROCESS_GET_PRIVATE(process); if (!priv->env) return NULL; env = g_array_new(TRUE, TRUE, sizeof(gchar *)); for (i = 0; i < priv->env->len; i += 2) { gchar *pair; pair = g_strconcat(g_array_index(priv->env, gchar *, i), "=", g_array_index(priv->env, gchar *, i + 1), NULL); g_array_append_val(env, pair); } return (gchar **)g_array_free(env, FALSE); } void gcut_process_set_env (GCutProcess *process, const gchar *name, ...) { GCutProcessPrivate *priv; va_list args; if (!name) return; priv = GCUT_PROCESS_GET_PRIVATE(process); if (!priv->env) priv->env = g_array_new(TRUE, TRUE, sizeof(gchar *)); va_start(args, name); while (name) { const gchar *value; guint i; gboolean found = FALSE; value = va_arg(args, gchar *); for (i = 0; i < priv->env->len; i += 2) { const gchar *_name; _name = g_array_index(priv->env, const gchar *, i); if (g_str_equal(name, _name)) { if (value) { g_array_index(priv->env, gchar *, i + 1) = g_strdup(value); } else { g_array_remove_index(priv->env, i + 1); g_array_remove_index(priv->env, i); } found = TRUE; break; } } if (!found && value) { const gchar *duped_string; duped_string = g_strdup(name); g_array_append_val(priv->env, duped_string); duped_string = g_strdup(value); g_array_append_val(priv->env, duped_string); } name = va_arg(args, gchar *); } va_end(args); } static void reap_child (GCutProcess *process, GPid pid, gint status) { GCutProcessPrivate *priv = GCUT_PROCESS_GET_PRIVATE(process); if (priv->pid != pid) return; remove_child_watch_func(priv); priv->status = status; g_signal_emit(process, signals[REAPED], 0, status); gcut_process_close(process); } static void child_watch_func (GPid pid, gint status, gpointer data) { GCutProcess *process = data; GCutProcessPrivate *priv; priv = GCUT_PROCESS_GET_PRIVATE(process); reap_child(process, pid, status); } static GIOChannel * create_channel (gint fd) { GIOChannel *channel; #ifndef G_OS_WIN32 channel = g_io_channel_unix_new(fd); #else channel = g_io_channel_win32_new_fd(fd); #endif if (!channel) return NULL; g_io_channel_set_close_on_unref(channel, TRUE); return channel; } static GIOChannel * create_output_channel (gint fd) { return create_channel(fd); } static GIOChannel * create_input_channel (GCutEventLoop *loop, gint fd, guint *watch_id, GIOFunc watch_func, gpointer user_data) { GIOChannel *channel; channel = create_channel(fd); if (!channel) return NULL; g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL); *watch_id = gcut_event_loop_watch_io(loop, channel, G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL, watch_func, user_data); return channel; } static void output_received (GCutProcess *process, const gchar *chunk, gsize size) { GCutProcessPrivate *priv; priv = GCUT_PROCESS_GET_PRIVATE(process); #ifdef CUT_SUPPORT_GIO g_memory_input_stream_add_data(G_MEMORY_INPUT_STREAM(priv->output_stream), g_strndup(chunk, size), size, g_free); #endif g_string_append_len(priv->output_string, chunk, size); } static void error_received (GCutProcess *process, const gchar *chunk, gsize size) { GCutProcessPrivate *priv; priv = GCUT_PROCESS_GET_PRIVATE(process); #ifdef CUT_SUPPORT_GIO g_memory_input_stream_add_data(G_MEMORY_INPUT_STREAM(priv->error_stream), g_strndup(chunk, size), size, g_free); #endif g_string_append_len(priv->error_string, chunk, size); } #define BUFFER_SIZE 4096 static gboolean read_from_io_channel (GIOChannel *channel, GCutProcess *process, guint signal) { GCutProcessPrivate *priv; gboolean need_more_data = TRUE; priv = GCUT_PROCESS_GET_PRIVATE(process); while (need_more_data) { GIOStatus status; gchar stream[BUFFER_SIZE]; gsize length = 0; GError *error = NULL; status = g_io_channel_read_chars(channel, stream, BUFFER_SIZE, &length, &error); if (error) { g_signal_emit(process, signals[ERROR], 0, error); g_error_free(error); need_more_data = FALSE; break; } if (status == G_IO_STATUS_EOF) need_more_data = FALSE; if (status == G_IO_STATUS_AGAIN || length == 0) break; g_signal_emit(process, signal, 0, stream, length); } return need_more_data; } static gboolean watch_output (GIOChannel *source, GIOCondition condition, gpointer user_data) { WatchOutputData *data = user_data; gboolean keep_callback = TRUE; if (condition & (G_IO_IN | G_IO_PRI)) { keep_callback = read_from_io_channel(source, data->process, data->signal); } if (condition & (G_IO_ERR | G_IO_NVAL)) { gchar *message; GError *error; message = gcut_io_inspect_condition(condition); error = g_error_new(GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_IO_ERROR, "%s", message); g_signal_emit(data->process, signals[ERROR], 0, error); g_free(message); g_error_free(error); keep_callback = FALSE; } if (condition & G_IO_HUP) keep_callback = FALSE; return keep_callback; } gboolean gcut_process_run (GCutProcess *process, GError **error) { GCutProcessPrivate *priv; gboolean success; gint input_fd = 0, output_fd = 0, error_fd = 0; gchar **env; GCutEventLoop *loop; priv = GCUT_PROCESS_GET_PRIVATE(process); if (!priv->command) { g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_COMMAND_LINE, "command line isn't set"); return FALSE; } if (priv->pid > 0) { gchar *command; command = g_strjoinv(" ", priv->command); g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_ALREADY_RUNNING, "already running: %s", command); g_free(command); return FALSE; } dispose_io_channel(priv); env = gcut_process_get_env(process); success = g_spawn_async_with_pipes(NULL, priv->command, env, priv->flags | priv->must_flags, NULL, NULL, &priv->pid, &input_fd, &output_fd, &error_fd, error); if (env) g_strfreev(env); if (!success) return FALSE; loop = gcut_process_get_event_loop(process); priv->process_watch_id = gcut_event_loop_watch_child(loop, priv->pid, child_watch_func, process); if (input_fd > 0) priv->input = create_output_channel(input_fd); if (output_fd > 0) { priv->watch_output_data = g_new(WatchOutputData, 1); priv->watch_output_data->process = process; priv->watch_output_data->signal = signals[OUTPUT_RECEIVED]; priv->output = create_input_channel(loop, output_fd, &(priv->output_watch_id), watch_output, priv->watch_output_data); } if (error_fd > 0) { priv->watch_error_data = g_new(WatchOutputData, 1); priv->watch_error_data->process = process; priv->watch_error_data->signal = signals[ERROR_RECEIVED]; priv->error = create_input_channel(loop, error_fd, &(priv->error_watch_id), watch_output, priv->watch_error_data); } return TRUE; } gboolean gcut_process_write (GCutProcess *process, const gchar *chunk, gsize size, GError **error) { GCutProcessPrivate *priv; gsize rest_size = size; priv = GCUT_PROCESS_GET_PRIVATE(process); while (rest_size > 0) { gsize written_size = 0; GIOStatus status; status = g_io_channel_write_chars(priv->input, chunk, rest_size, &written_size, error); if (status == G_IO_STATUS_ERROR) return FALSE; if (written_size == 0) return FALSE; rest_size -= written_size; chunk += written_size; } return TRUE; } GIOStatus gcut_process_flush (GCutProcess *process, GError **error) { GCutProcessPrivate *priv; priv = GCUT_PROCESS_GET_PRIVATE(process); if (priv->input) { return g_io_channel_flush(priv->input, error); } else { gchar *command; command = g_strjoinv(" ", priv->command); g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_NOT_RUNNING, "can't flush input for not running process: <%s>", command); g_free(command); return G_IO_STATUS_ERROR; } } GPid gcut_process_get_pid (GCutProcess *process) { return GCUT_PROCESS_GET_PRIVATE(process)->pid; } gint gcut_process_wait (GCutProcess *process, guint timeout, GError **error) { GCutProcessPrivate *priv; GCutEventLoop *loop; gboolean is_timeout = FALSE; guint timeout_id; priv = GCUT_PROCESS_GET_PRIVATE(process); if (!priv) { g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_INVALID_OBJECT, "passed GCutProcess is invalid"); return -1; } if (priv->pid == 0) { gchar *command = NULL; if (priv->command) command = g_strjoinv(" ", priv->command); if (command) { g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_NOT_RUNNING, "not running: <%s>", command); g_free(command); } else { g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_NOT_RUNNING, "not running"); } return -1; } loop = gcut_process_get_event_loop(process); timeout_id = gcut_event_loop_add_timeout(loop, timeout, cb_timeout_wait, &is_timeout); while (!is_timeout && priv->pid > 0) g_main_context_iteration(NULL, TRUE); gcut_event_loop_remove(loop, timeout_id); if (is_timeout) { gchar *command; command = g_strjoinv(" ", priv->command); g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_TIMEOUT, "timeout while waiting reaped: <%s>", command); g_free(command); return -1; } return priv->status; } static GCutProcessError gcut_process_error_from_errno (gint err_no) { switch (err_no) { case EINVAL: return GCUT_PROCESS_ERROR_INVALID_SIGNAL; break; case EPERM: return GCUT_PROCESS_ERROR_PERMISSION_DENIED; break; case ESRCH: return GCUT_PROCESS_ERROR_INVALID_OBJECT; break; default: return GCUT_PROCESS_ERROR_INVALID_OBJECT; break; } } gboolean gcut_process_kill (GCutProcess *process, int signal_number, GError **error) { GCutProcessPrivate *priv; priv = GCUT_PROCESS_GET_PRIVATE(process); if (!priv) { g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_INVALID_OBJECT, "Invalid process object."); return FALSE; } if (priv->pid == 0) { g_set_error(error, GCUT_PROCESS_ERROR, GCUT_PROCESS_ERROR_NOT_RUNNING, "The process is not running."); return FALSE; } #ifndef G_OS_WIN32 if (kill(priv->pid, signal_number) == -1) { g_set_error(error, GCUT_PROCESS_ERROR, gcut_process_error_from_errno(errno), "Error killing process: "); return FALSE; }; return TRUE; #else return cut_win32_kill_process(priv->pid, 0); #endif } GIOChannel * gcut_process_get_input_channel (GCutProcess *process) { return GCUT_PROCESS_GET_PRIVATE(process)->input; } GIOChannel * gcut_process_get_output_channel (GCutProcess *process) { return GCUT_PROCESS_GET_PRIVATE(process)->output; } GIOChannel * gcut_process_get_error_channel (GCutProcess *process) { return GCUT_PROCESS_GET_PRIVATE(process)->error; } guint gcut_process_get_forced_termination_wait_time (GCutProcess *process) { return GCUT_PROCESS_GET_PRIVATE(process)->forced_termination_wait_time; } void gcut_process_set_forced_termination_wait_time (GCutProcess *process, guint timeout) { GCUT_PROCESS_GET_PRIVATE(process)->forced_termination_wait_time = timeout; } GString * gcut_process_get_output_string (GCutProcess *process) { return GCUT_PROCESS_GET_PRIVATE(process)->output_string; } GString * gcut_process_get_error_string (GCutProcess *process) { return GCUT_PROCESS_GET_PRIVATE(process)->error_string; } #ifdef CUT_SUPPORT_GIO GInputStream * gcut_process_get_output_stream (GCutProcess *process) { GCutProcessPrivate *priv; g_return_val_if_fail(GCUT_IS_PROCESS(process), NULL); priv = GCUT_PROCESS_GET_PRIVATE(process); g_return_val_if_fail(priv, NULL); return priv->output_stream; } GInputStream * gcut_process_get_error_stream (GCutProcess *process) { GCutProcessPrivate *priv; g_return_val_if_fail(GCUT_IS_PROCESS(process), NULL); priv = GCUT_PROCESS_GET_PRIVATE(process); g_return_val_if_fail(priv, NULL); return priv->error_stream; } #endif GCutEventLoop * gcut_process_get_event_loop (GCutProcess *process) { GCutProcessPrivate *priv; g_return_val_if_fail(GCUT_IS_PROCESS(process), NULL); priv = GCUT_PROCESS_GET_PRIVATE(process); if (!priv->event_loop) { priv->event_loop = gcut_glib_event_loop_new(NULL); } return priv->event_loop; } void gcut_process_set_event_loop (GCutProcess *process, GCutEventLoop *loop) { GCutProcessPrivate *priv; g_return_if_fail(GCUT_IS_PROCESS(process)); priv = GCUT_PROCESS_GET_PRIVATE(process); if (priv->event_loop == loop) return; g_object_ref(loop); if (priv->event_loop) g_object_unref(priv->event_loop); priv->event_loop = loop; } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-string.c0000644000175000017500000000273311424022520020736 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #include #include #include "gcut-string.h" gboolean gcut_string_equal (const GString *string1, const GString *string2) { if (string1 == string2) return TRUE; if (string1 == NULL || string2 == NULL) return FALSE; if (string1->len != string2->len) return FALSE; return (memcmp(string1->str, string2->str, string1->len) == 0); } gchar * gcut_string_inspect (const GString *string) { if (!string) return g_strdup("No data"); return cut_utils_inspect_memory(string->str, string->len); } /* vi:ts=4:nowrap:ai:expandtab:sw=4 */ cutter-testing-framework-1.1.7/gcutter/gcut-object.h0000644000175000017500000000554011205747031020712 0ustar koukou/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2008 Kouhei Sutou * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #ifndef __GCUT_OBJECT_H__ #define __GCUT_OBJECT_H__ #include #include G_BEGIN_DECLS /** * SECTION: gcut-object * @title: Assertion Utilities for GObject * @short_description: Utilities to write assertions related * to #GObject more easily. * * To write assertions, you need to check equality and show * expected and actual values. * * The utilities help you to write assertions that are * related to #GObject. */ /** * gcut_object_equal: * @object1: a #GObject to be compared. * @object2: a #GObject to be compared. * @equal_func: a function that compares two #GObject. NULL * is OK. * * Compares two #GObject, @object1 and @object2 by * @equal_func. If @equal_func is NULL, @object1 and * @object2 is just only compared by memory location. * * Returns: TRUE if @object1 == @object2 or * @equal_func(@object1, @object2), FALSE otherwise. * * Since: 1.0.5 */ gboolean gcut_object_equal (const GObject *object1, const GObject *object2, GEqualFunc equal_func); /** * gcut_object_inspect: * @object: a #GObject. * * Inspects @object's property. The returned string should * be freed when no longer needed. * * Returns: inspected @object as a string. * * Since: 1.0.5 */ gchar *gcut_object_inspect (const GObject *object); /** * gcut_object_inspect_custom: * @object: a #GObject. * @inspect_func: a function that inspects @object. * @user_data: user data to pass to the function. * * Inspects @object by @inspect_func. The returned string * should be freed when no longer needed. * * Returns: inspected @object as a string. * * Since: 1.0.5 */ gchar *gcut_object_inspect_custom (const GObject *object, GCutInspectFunction inspect_func, gpointer user_data); G_END_DECLS #endif /* __GCUT_OBJECT_H__ */ /* vi:nowrap:ai:expandtab:sw=4:ts=4 */ cutter-testing-framework-1.1.7/NEWS0000644000175000017500000004526211525702710015362 0ustar koukou# -*- rd -*- = NEWS --- The history of Cutter == [release-1-1-7] 1.1.7: 2011-02-13 === Cutter ==== Improvements * Supported growlnotify. ==== Changes * Droped Debian GNU/Linux lenny support. ==== Fixes * Fixed using unknown symbol on CentOS 5.5. [Reported by Hiroaki Nakamura] === Document ===== Fixes * Fixed typos in tutorial. [Reported by Hiroaki Nakamura] === Thanks * Hiroaki Nakamura == [release-1-1-6] 1.1.6: 2011-02-09 === Cutter ==== Improvments * Renamed an utility: * (()) -> (()) * Added utitlities: * (()) * (()) * (()) * (()) * (()) * Supported Debian GNU/Linux squeeze. [Suggested by Romuald Conty] * Supported Ubuntu Maverick Meerkat. * Supported Fedora 14. * cutter.m4: supported --config-cache. * cutter.m4: supported custom Makefile for --enable-coverage. (specify custome Makefile name to AC_CHECK_COVERAGE() argument) * Supported notify-send. ==== Fixes * Fixed a wrong test. [Suggested by Ilya Barygin] === cut-diff ==== Improvements * Added ((<--label option|cut-diff#--label>)) that specify labels in header. === Thanks * Romuald Conty * Ilya Barygin == [release-1-1-5] 1.1.5: 2010-09-06 === Cutter ==== Improvements * Renamed assertions: * (()) -> (()) * (()) -> (()) * Added an assertion: * (()) * Renamed an utility: * (()) -> (()) * Added utilities: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * Supported Ubuntu Lucid Lynx. * Supported configure result report on configure finish. [Suggested by Romain Tartière] * Supported libgoffice-0.8. (libgoffice-0.6 support was dropped.) [Suggested by Romain Tartière] * Supported lcov 1.9. #3056684 [Patch by Romain Tartière] * Supported full-width spaces in test description. * Supported sub-cutter command in PATH. [Patch by Romain Tartière] ==== Fixes * Fixed locale depended tests. [Suggested by Romain Tartière] === cut-diff ==== Improvements * Added ((<--context-lines option|cut-diff#--context-lines>)) that specifies how many lines are shown around diff. === Documentation ==== Improvements * Used ports on FreeBSD. [Suggested by Romain Tartière] === Thanks * Romain Tartière == [release-1-1-4] 1.1.4: 2010-06-10 Supported CentOS. === Cutter ==== Improvements * Added assertions: * (()) * (()) * (()) * (()) * Added utilities: * (()) * Changed to use tabs in diff if they are needed. * Supported CentOS. ==== Fixes * Fixed a bug that assertion message is ignored. === Document ==== Fixes * Debian, Ubuntu: Fixed file paths. [Reported by Romuald Conty] === Thanks * Romuald Conty == [release-1-1-3] 1.1.3: 2010-04-13 Improved test driven test support. === Cutter ==== Improvements * AC_CHECK_ENABLE_COVERAGE: Added a new 'coverage-force' target that reports coverage even if 'make check' is failed. ==== Bug fixes * Removed unneeded memory free [Reported by Zed Shaw] * AC_CHECK_ENABLE_COVERAGE: Fixed a bug that 8 spaces instead of a TAB is printed into Makefile. === GCutter ==== Improvements * Improved data driven test support: * (()) * (()) * (()) * (()) * (()) * (()) * Added utilities: * (()) * (()) * (()) * (()) * (()) * (()) ==== Bug fixes * Fixed a bug that gcut_list_inspect_enum() and gcut_list_inspect_flags() is crashed on Mac OS X. === Document ==== Bug fixes * Fixed dependency package list for Cygwin 1.7. === Thanks * Zed Shaw == [release-1-1-2] 1.1.2: 2010-04-03 Improves Windows support. === Cutter ==== Improvements * Supported lcov 1.8 * Supported --enable-coverage=SOMETHING style. [Reported by gunyara-kun] * #2976775: Supported cut_omit() in cut_setup() [Reported by Romain Tartière] * Supported building and testing with Visual Studio C++ 2008 === CppCutter ==== Improvements * Added (()) that is a macro to mark test function on Windows === Document ==== Improvements * Supported Ubuntu Karmic Koara. === Thanks * Romain Tartière * gunyara-kun == [release-1-1-1] 1.1.1: 2010-03-11 Bug in 1.1.0 fixes and improvements of GObject and sockaddr support. === Cutter ==== Improvements * Supported DLL generated by Visual C++. * Added an assertion: * (()) * Added test utilities: * (()) * (()) * (()) ==== Fixes * Fixed a build problem on having stdint.h but not having inttypes.h. === GCutter ==== Improvements * Improved data driven test support: * (()) * Added utilities: * (()) * (()) * (()) == [release-1-1-0] 1.1.0: 2009-11-03 NOTE: This release includes API incompatibility. === Cutter ==== Improvements * Add assertions for types defined in stdint.h [Yuto Hayamizu] * ((*API CHANGE*)): Re-enable optional assertion message Before: cut_assert_equal_string("a", "b", "message"); After: cut_assert_equal_string("a", "b", cut_message("message")); * Add (()) * Make (()) obsolete * Make (()) obsolete * Make (()) obsolete === CppCutter ==== Improvements * Add supported types by (()) * Support test definition detection in namespace * Make (()) obsolete * Make (()) obsolete * Support optional assertion message * Add (()) === Thanks * Yuto Hayamizu == [release-1-0-9] 1.0.9: 2009-10-20 === Improvements * Add a function to (()): * (()) * Inspect hash table after sorted by key * Support colorized diff: (()) * Add --stop-before-test option that sets breakpoint before each test [Suggested by Yoshinori K. Okuji] * Add (()) command * Support unified diff * Support C++: (()) === Bug fixes * Fix locale dependent bugs [Reported by Yoshinori K. Okuji] === Thanks * Yoshinori K. Okuji == [release-1-0-8] 1.0.8: 2009-08-29 * Support libsoup: * HTTP client: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * HTTP server: * (()) * (()) * (()) * Assertions: * (()) * (()) * (()) * (()) * (()) * Add an function to (()): * (()) * Add mroonga to (()) * Support rpm package for Fedora * Support deb package for Debian * Support deb package for Ubuntu * Support lcov 1.7 * Document: * Add (()) * Add (()) * Add (()) * Add (()) == 1.0.7: 2009-05-20 * Provide (()) * Support (()) * Display test name on crash (if available) * Add shared library parser * Support ELF (Linux/*BSD), PE (Windows), Mach-O (Mac OS X) * Don't use BFD by default * Use ImageHlp instead of BFD on Windows * Document: * Add (()) * Add (()) * Add (()) * Add Cygwin related notes to (()) [Yamakawa Hiroshi] * Add test utilities: * (()) * Add assertions: * (()) * (()) * (()) * (()) * (()) [gunyara-kun] * (()) [gunyara-kun] * (()) [gunyara-kun] * (()) [gunyara-kun] * (()) [gunyara-kun] * (()) [gunyara-kun] * (()) [gunyara-kun] * Compatibility: * Make fixture functions without "cut_" prefix deprecated. [gunyara-kun] * (()) -> (()) * (()) -> (()) * (()) -> (()) * (()) -> (()) * Bug fixes: * Fix a typo in tutorial: [UNNO Hideyuki] * Fix file descriptor redirection: [UNNO Hideyuki] * Add --disable-signal-handling option == 1.0.6: 2009-03-01 * Add (()) * Add (()) * Improve backtrace detection: * (()) * Improve user message related API for assertions: * Obsolete optional message * for supporting non-GCC compilers * Add APIs to set user message independently of assertions: * (()) * (()) * Add API to use the same message with assertions: * (()) * Improve data driven test support: * (()) * Add "cut_" prefix to fixture functions: * (()) * (()) * (()) * (()) * Add test utilities: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * Add assertions: * (()) * (()) * (()) * (()) == 1.0.5: 2008-10-15 * Support max number of threads ran concurrently: * Add --max-threads option * For sub process: * (()) * (()) * Support GdkPixbuf: * Image comparison * Image diff * expected: (()) * actual: (()) * diff: (()) * Improve debug support: * Add --keep-opening-modules option * Keep opening modules for resolving symbols on debugging * Show test result on SIGABORT like on SIGSEGV * --name option support iterated test * 'but was:' -> 'actual:' * Add test utilities: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * Add assertions: * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * Improve user defined assertion writing support: * Support backtrace * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * (()) * Bug fixes: * Fix memory leak (Daijiro MORI) * Fix a bug that test result is ignored in setup()/teardown() == 1.0.4: 2008-08-27 * Option: * Add --stream-log-dir option that is for logging test result history * Add --fatal-failures option that test is aborted on failure (for cooperation with debugger) * Output: * Support folded diff * Output newline into long summary (".", "F", ...) * Add (()) to set attributes * Support (()) * Support data driven test on multi-thread * Add assertions: * (()) * (()) * Add utilities: * (()) * (()) * Fix: * Fix a build bug on no GOffice environment. (Reported by Kazumasa Matsunaga) * Experimental: * Add --analyzer mode that cutter analyzes test result log. == 1.0.3: 2008-07-15 * Support Data-Driven Testing: * (()) * Add assertions: * (()) * Rename assertions: * Rename features that requires GLib support to 'gcut_XXX' from 'cut_XXX'. 'cut_XXX' can be still used but they are deprecated. See (()) for more details. * Add utilities: * (()): appends diff to a string. * (())/(()): helps creating a list of strings. * (()): takes ownership of GError * to Cutter. * (()): takes ownership of GList * to Cutter. * (()): takes ownership of GObject * to Cutter. == 1.0.2: 2008-06-27 * Support fixture data * cut_set_fixture_data_dir() * cut_get_fixture_data_string() * cut_build_fixture_data_path() * Add a utility * cut_remove_path() * Add assertions * cut_assert_equal_fixture_data_string() * cut_assert_path_not_exist() * cut_assert_remove_path() * cut_error_errno() * Experimental: * Windows support == 1.0.1: 2008-06-13 * Improve AC_CHECK_COVERAGE * Document: * Fix: Require GLib >= 2.16 * Experimental: * Support GStreamer: * Transport test result to remote machine and so on * Support warmup()/cooldown() == 1.0.0: 2008-05-20 * Add assertions: * cut_assert_equal_pointer() * cut_assert_g_error() * cut_assert_match() * cut_assert_match_with_free() * Add --exclude-file option that specifies excluded files from test targets * Add --exclude-dir option that specifies excluded directories from test targets * Add --without-cutter to cutter.m4 (configure option) * Experimental: * Implement Cutter protocol (CutXMLStreamer and CutStreamParser) * Add cut_take_g_error() * Support Mac OS X == 0.9.0: 2008-05-12 * Add assertions. * cut_assert_equal_string_array_with_free() * cut_assert_true() * cut_assert_false() * cut_assert_file_exist() * Add AC_CHECK_GCUTTER * Experimental: Support GObject: * cut_take_g_object() == 0.8.0: 2008-05-07 * LGPL2 -> LGPL3 * Add assertions. * cut_assert_equal_g_list_int() * cut_assert_equal_g_list_string() * cut_assert_errno() * Support omission: cut_omit() * Support startup/shutdown hooks that are ran on before test case start and end. * Support diff. * Support gcov. * Experimental: Support fork: * cut_fork() * cut_wait_process() * cut_fork_get_stdout_message() * cut_fork_get_stderr_message() == 0.7.0: 2008-03-26 * Fixed packaging failure. * Fixed --help-all. * Added a document for XML format reported by Cutter. == 0.6.0: 2008-03-21 * Added --xml-report option for reporting test result as XML. * Added --test-case-order option for sorting test case by name. * Added --version option for outputting Cutter version. * Added --disable-bfd option to configure. == 0.5.0: 2008-03-10 * Included missing cutter/gbsearcharray.h. == 0.4.0: 2008-02-28 * cut_pending() -> cut_pend(). * Supported attributes. == 0.3.0: 2007-12-14 * Fixed documentation. * Marked cut_assert_equal_string_or_null() as deprecated. * cut_assert_equal_string() accepted NULL. * Removed an experimental API from document. == 0.2.0: 2007-11-29 * Initial release on SF.net. cutter-testing-framework-1.1.7/m4macros/0000755000175000017500000000000011525707411016402 5ustar koukoucutter-testing-framework-1.1.7/m4macros/cutter.m40000644000175000017500000001320011523751076020152 0ustar koukouAC_DEFUN([AC_CHECK_ENABLE_COVERAGE], [ AC_ARG_ENABLE([coverage], AS_HELP_STRING([--enable-coverage], [Enable coverage]), [cutter_enable_coverage=$enableval], [cutter_enable_coverage=no]) if test "x$cutter_enable_coverage" != "xno"; then ltp_version_list="1.6 1.7 1.8 1.9" AC_PATH_TOOL(LCOV, lcov) AC_PATH_TOOL(GENHTML, genhtml) if test -x "$LCOV"; then AC_CACHE_CHECK([for ltp version], cutter_cv_ltp_version, [ ltp_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'` cutter_cv_ltp_version="$ltp_version (NG)" for ltp_check_version in $ltp_version_list; do if test "$ltp_version" = "$ltp_check_version"; then cutter_cv_ltp_version="$ltp_check_version (ok)" fi done ]) fi case "$cutter_cv_ltp_version" in *\(ok\)*) cutter_enable_coverage=yes ;; *) cutter_enable_coverage=no ;; esac fi AC_MSG_CHECKING([for enabling coverage]) AC_MSG_RESULT($cutter_enable_coverage) ]) AC_DEFUN([AC_CHECK_COVERAGE], [ ac_check_coverage_makefile=$1 if test -z "$ac_check_coverage_makefile"; then ac_check_coverage_makefile=Makefile fi AC_SUBST(ac_check_coverage_makefile) AC_CHECK_ENABLE_COVERAGE COVERAGE_CFLAGS= if test "$cutter_enable_coverage" = "yes"; then COVERAGE_CFLAGS="--coverage" fi AC_SUBST(COVERAGE_CFLAGS) AM_CONDITIONAL([ENABLE_COVERAGE], [test "$cutter_enable_coverage" = "yes"]) COVERAGE_INFO_FILE="coverage.info" AC_SUBST(COVERAGE_INFO_FILE) COVERAGE_REPORT_DIR="coverage" AC_SUBST(COVERAGE_REPORT_DIR) if test "$GENHTML_OPTIONS" = ""; then GENHTML_OPTIONS="" fi AC_SUBST(GENHTML_OPTIONS) if test "$cutter_enable_coverage" = "yes"; then AC_CONFIG_COMMANDS([coverage], [ if test -e "$ac_check_coverage_makefile" && \ grep -q '^coverage:' $ac_check_coverage_makefile; then : # do nothing else sed -e 's/^ / /g' <>$ac_check_coverage_makefile .PHONY: coverage-clean coverage-report coverage coverage-force coverage-clean: \$(LCOV) --compat-libtool --zerocounters --directory . \\ --output-file \$(COVERAGE_INFO_FILE) coverage-report: \$(LCOV) --compat-libtool --directory . \\ --capture --output-file \$(COVERAGE_INFO_FILE) \$(LCOV) --compat-libtool --directory . \\ --extract \$(COVERAGE_INFO_FILE) "\`(cd '\$(top_srcdir)'; pwd)\`/*" \\ --output-file \$(COVERAGE_INFO_FILE) \$(GENHTML) --highlight --legend \\ --output-directory \$(COVERAGE_REPORT_DIR) \\ --prefix "\`(cd '\$(top_srcdir)'; pwd)\`" \\ \$(GENHTML_OPTIONS) \$(COVERAGE_INFO_FILE) coverage: coverage-clean check coverage-report coverage-force: \$(MAKE) \$(AM_MAKEFLAGS) coverage-clean \$(MAKE) \$(AM_MAKEFLAGS) check || : \$(MAKE) \$(AM_MAKEFLAGS) coverage-report EOS fi ], [ac_check_coverage_makefile="$ac_check_coverage_makefile"]) fi ]) AC_DEFUN([AC_CHECK_CUTTER], [ AC_ARG_WITH([cutter], AS_HELP_STRING([--with-cutter], [Use Cutter (default: auto)]), [cutter_with_value=$withval], [cutter_with_value=auto]) if test -z "$cutter_use_cutter"; then if test "x$cutter_with_value" = "xno"; then cutter_use_cutter=no else PKG_CHECK_MODULES(CUTTER, cutter $1, [cutter_use_cutter=yes], [cutter_use_cutter=no]) fi fi if test "$cutter_use_cutter" != "no"; then _PKG_CONFIG(CUTTER, variable=cutter, cutter) CUTTER=$pkg_cv_CUTTER fi ac_cv_use_cutter="$cutter_use_cutter" # for backward compatibility AC_SUBST([CUTTER_CFLAGS]) AC_SUBST([CUTTER_LIBS]) AC_SUBST([CUTTER]) ]) AC_DEFUN([AC_CHECK_GCUTTER], [ AC_CHECK_CUTTER($1) if test "$cutter_use_cutter" = "no"; then cutter_use_gcutter=no fi if test "x$cutter_use_gcutter" = "x"; then PKG_CHECK_MODULES(GCUTTER, gcutter $1, [cutter_use_gcutter=yes], [cutter_use_gcutter=no]) fi ac_cv_use_gcutter="$cutter_use_gcutter" # for backward compatibility AC_SUBST([GCUTTER_CFLAGS]) AC_SUBST([GCUTTER_LIBS]) ]) AC_DEFUN([AC_CHECK_CPPCUTTER], [ AC_CHECK_CUTTER($1) if test "$cutter_use_cutter" = "no"; then cutter_use_cppcutter=no fi if test "x$cutter_use_cppcutter" = "x"; then PKG_CHECK_MODULES(CPPCUTTER, cppcutter $1, [cutter_use_cppcutter=yes], [cutter_use_cppcutter=no]) fi ac_cv_use_cppcutter="$cutter_use_cppcutter" # for backward compatibility AC_SUBST([CPPCUTTER_CFLAGS]) AC_SUBST([CPPCUTTER_LIBS]) ]) AC_DEFUN([AC_CHECK_GDKCUTTER_PIXBUF], [ AC_CHECK_GCUTTER($1) if test "$cutter_use_cutter" = "no"; then cutter_use_gdkcutter_pixbuf=no fi if test "x$cutter_use_gdkcutter_pixbuf" = "x"; then PKG_CHECK_MODULES(GDKCUTTER_PIXBUF, gdkcutter-pixbuf $1, [cutter_use_gdkcutter_pixbuf=yes], [cutter_use_gdkcutter_pixbuf=no]) fi ac_cv_use_gdkcutter_pixbuf="$cutter_use_gdkcutter_pixbuf" # for backward compatibility AC_SUBST([GDKCUTTER_PIXBUF_CFLAGS]) AC_SUBST([GDKCUTTER_PIXBUF_LIBS]) ]) AC_DEFUN([AC_CHECK_SOUPCUTTER], [ AC_CHECK_GCUTTER($1) if test "$cutter_use_cutter" = "no"; then cutter_use_soupcutter=no fi if test "$cutter_use_soupcutter" != "no"; then PKG_CHECK_MODULES(SOUPCUTTER, soupcutter $1, [cutter_use_soupcutter=yes], [cutter_use_soupcutter=no]) fi ac_cv_use_soupcutter="$cutter_use_soupcutter" # for backward compatibility AC_SUBST([SOUPCUTTER_CFLAGS]) AC_SUBST([SOUPCUTTER_LIBS]) ]) cutter-testing-framework-1.1.7/m4macros/Makefile.in0000644000175000017500000003552111525654634020465 0ustar koukou# 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@ 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@ subdir = m4macros DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(m4datadir)" DATA = $(m4data_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ installed_m4 = cutter.m4 EXTRA_DIST = $(installed_m4) m4datadir = $(datadir)/aclocal m4data_DATA = $(installed_m4) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign m4macros/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign m4macros/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-m4dataDATA: $(m4data_DATA) @$(NORMAL_INSTALL) test -z "$(m4datadir)" || $(MKDIR_P) "$(DESTDIR)$(m4datadir)" @list='$(m4data_DATA)'; test -n "$(m4datadir)" || 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)$(m4datadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(m4datadir)" || exit $$?; \ done uninstall-m4dataDATA: @$(NORMAL_UNINSTALL) @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(m4datadir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(m4datadir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(m4datadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-m4dataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-m4dataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-m4dataDATA install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-m4dataDATA # 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: cutter-testing-framework-1.1.7/m4macros/Makefile.am0000644000175000017500000000016411205747030020433 0ustar koukouinstalled_m4= cutter.m4 EXTRA_DIST = $(installed_m4) m4datadir = $(datadir)/aclocal m4data_DATA = $(installed_m4) cutter-testing-framework-1.1.7/soupcutter.pc.in0000644000175000017500000000037411244232307020022 0ustar koukouprefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ libdir=@libdir@ includedir=@includedir@ Name: SoupCutter Description: Cutter with libsoup support. Version: @VERSION@ Requires: gcutter >= @VERSION@, libsoup-2.4 Libs: -L${libdir} -lsoupcutter cutter-testing-framework-1.1.7/vcc/0000755000175000017500000000000011525707422015432 5ustar koukoucutter-testing-framework-1.1.7/vcc/Makefile.in0000644000175000017500000004160611525654637017517 0ustar koukou# 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@ 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@ subdir = vcc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cutter.m4 \ $(top_srcdir)/acmacros/intltool.m4 \ $(top_srcdir)/acmacros/libtool.m4 \ $(top_srcdir)/acmacros/ltoptions.m4 \ $(top_srcdir)/acmacros/ltsugar.m4 \ $(top_srcdir)/acmacros/ltversion.m4 \ $(top_srcdir)/acmacros/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_LIBS = @BFD_LIBS@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CAIRO_PDF_CFLAGS = @CAIRO_PDF_CFLAGS@ CAIRO_PDF_LIBS = @CAIRO_PDF_LIBS@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COVERAGE_CFLAGS = @COVERAGE_CFLAGS@ COVERAGE_INFO_FILE = @COVERAGE_INFO_FILE@ COVERAGE_REPORT_DIR = @COVERAGE_REPORT_DIR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CUTTER = @CUTTER@ CUTTER_CFLAGS = @CUTTER_CFLAGS@ CUTTER_VERSION = @CUTTER_VERSION@ CUTTER_VERSION_MAJOR = @CUTTER_VERSION_MAJOR@ CUTTER_VERSION_MICRO = @CUTTER_VERSION_MICRO@ CUTTER_VERSION_MINOR = @CUTTER_VERSION_MINOR@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GENHTML = @GENHTML@ GENHTML_OPTIONS = @GENHTML_OPTIONS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LIBS = @GIO_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GLIB_MKENUMS = @GLIB_MKENUMS@ GLIB_REQUIRED = @GLIB_REQUIRED@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GOBJECT_QUERY = @GOBJECT_QUERY@ GOFFICE_CFLAGS = @GOFFICE_CFLAGS@ GOFFICE_LIBS = @GOFFICE_LIBS@ GREP = @GREP@ GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@ GSTREAMER_LIBS = @GSTREAMER_LIBS@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LCOV = @LCOV@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSOUP_CFLAGS = @LIBSOUP_CFLAGS@ LIBSOUP_LIBS = @LIBSOUP_LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_EXPORT_OPTIONS = @LIBTOOL_EXPORT_OPTIONS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_REVISION = @LT_REVISION@ LT_VERSION_INFO = @LT_VERSION_INFO@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TITLE = @PACKAGE_TITLE@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGO_CAIRO_CFLAGS = @PANGO_CAIRO_CFLAGS@ PANGO_CAIRO_LIBS = @PANGO_CAIRO_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ RD2 = @RD2@ RUBY = @RUBY@ SED = @SED@ SET_MAKE = @SET_MAKE@ SF_HOST = @SF_HOST@ SF_HTDOCS = @SF_HTDOCS@ SF_HTDOCS_PATH = @SF_HTDOCS_PATH@ SF_PROJECT_ID = @SF_PROJECT_ID@ SF_PROJECT_NAME = @SF_PROJECT_NAME@ SF_REPOS = @SF_REPOS@ SF_USER = @SF_USER@ SF_USER_OPTION = @SF_USER_OPTION@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDOWS_LIBS = @WINDOWS_LIBS@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_check_coverage_makefile = @ac_check_coverage_makefile@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ factory_moduledir = @factory_moduledir@ gst_pluginsdir = @gst_pluginsdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ icons_dir = @icons_dir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ report_factory_moduledir = @report_factory_moduledir@ report_moduledir = @report_moduledir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ stream_factory_moduledir = @stream_factory_moduledir@ stream_moduledir = @stream_moduledir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ui_factory_moduledir = @ui_factory_moduledir@ ui_moduledir = @ui_moduledir@ nobase_EXTRA_DIST = \ cutter.sln \ cutter.vcproj \ cutter-cui.vcproj \ include/config.h \ include/cutter/cut-enum-types.h \ include/cutter/cut-features.h \ include/cutter/cut-version.h \ include/gcutter/gcut-marshalers.h \ source/cutter/cut-enum-types.c \ source/gcutter/gcut-marshalers.c sync_actions = \ sync-config \ sync-generated-files \ generate-def \ generate-makefile \ generate-test-def \ generate-test-makefile \ generate-test-fixture-def \ generate-test-fixture-makefile binary_fixture_paths = \ test/fixtures/factory/type1 \ test/fixtures/factory/type2 \ test/fixtures/loader/attribute \ test/fixtures/loader/cpp-fixture \ test/fixtures/loader/cpp \ test/fixtures/loader/fixture \ test/fixtures/loader/iterator \ test/fixtures/loader/module \ test/fixtures/loader/suite \ test/fixtures/loader/test \ test/fixtures/path/parent/sub \ test/fixtures/pipeline/error \ test/fixtures/pipeline/failure \ test/fixtures/pipeline/omission \ test/fixtures/pipeline/pending \ test/fixtures/pipeline/setup-error \ test/fixtures/pipeline/success \ test/fixtures/repository \ test/fixtures/sub-process-group \ test/fixtures/sub-process-group/fixtures/normal \ test/fixtures/sub-process \ test/fixtures/sub-process/fixtures/normal \ test/fixtures/test-context all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign vcc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign vcc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am 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: 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) 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-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am 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 installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am sync: $(sync_actions) sync-config: sed -i'' \ -e 's/VERSION ".*"/VERSION "$(VERSION)"/' \ -e 's/PACKAGE_STRING ".*"/PACKAGE_STRING "$(PACKAGE_STRING)"/' \ include/config.h sync-generated-files: cp $(top_builddir)/cutter/cut-version.h include/cutter/ cp $(top_builddir)/cutter/cut-enum-types.h include/cutter/ cp $(top_builddir)/gcutter/gcut-marshalers.h include/gcutter/ cp $(top_builddir)/cutter/cut-enum-types.c source/cutter/ cp $(top_builddir)/gcutter/gcut-marshalers.c source/gcutter/ generate-def: ($(MAKE) -s -C $(top_builddir)/cutter echo-public-headers; \ $(MAKE) -s -C $(top_builddir)/cutter echo-private-headers; \ $(MAKE) -s -C $(top_builddir)/gcutter echo-public-headers) | \ xargs $(top_srcdir)/misc/generate-def.rb > \ resource/cutter.def $(MAKE) -s -C $(top_builddir)/gdkcutter-pixbuf echo-public-headers | \ xargs $(top_srcdir)/misc/generate-def.rb > \ resource/gdkcutter-pixbuf.def generate-makefile: $(MAKE) -s -C $(top_builddir)/cutter echo-libcutter-sources | \ xargs $(top_srcdir)/misc/generate-makefile-objects.rb \ LIBCUTTER_OBJECTS '$$(top_builddir)/cutter/' > \ Makefile.objects.cutter $(MAKE) -s -C $(top_builddir)/gcutter echo-libgcutter-sources | \ xargs $(top_srcdir)/misc/generate-makefile-objects.rb \ LIBGCUTTER_OBJECTS '$$(top_builddir)/gcutter/' > \ Makefile.objects.gcutter $(MAKE) -s -C $(top_builddir)/cppcutter echo-libcppcutter-sources | \ xargs $(top_srcdir)/misc/generate-makefile-objects.rb \ LIBCPPCUTTER_OBJECTS '$$(top_builddir)/cppcutter/' > \ Makefile.objects.cppcutter generate-test-def: ($(MAKE) -s -C $(top_builddir)/test/cutter echo-tests) | \ xargs $(top_srcdir)/misc/generate-test-defs.rb \ $(top_srcdir)/test/cutter resource/test/cutter generate-test-makefile: $(MAKE) -s -C $(top_builddir)/test/lib \ echo-cuttest-utils-public-headers | \ xargs $(top_srcdir)/misc/generate-def.rb > \ resource/cuttest-utils.def $(MAKE) -s -C $(top_builddir)/test/lib \ echo-cuttest-event-receiver-public-headers | \ xargs $(top_srcdir)/misc/generate-def.rb > \ resource/cuttest-event-receiver.def ($(MAKE) -s -C $(top_builddir)/test/cutter echo-tests) | \ xargs $(top_srcdir)/misc/generate-test-makefile.rb \ '$$(top_srcdir)' test/cutter generate-test-fixture-def: for path in $(binary_fixture_paths); do \ ($(MAKE) -s -C $(top_builddir)/$${path} echo-tests) | \ xargs $(top_srcdir)/misc/generate-test-defs.rb \ $(top_srcdir)/$${path} resource/$${path}; \ done generate-test-fixture-makefile: for path in $(binary_fixture_paths); do \ ($(MAKE) -s -C $(top_builddir)/$${path} echo-tests) | \ xargs $(top_srcdir)/misc/generate-test-makefile.rb \ '$$(top_srcdir)' $${path}; \ done # 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: cutter-testing-framework-1.1.7/vcc/Makefile.am0000644000175000017500000001020511277550767017500 0ustar koukounobase_EXTRA_DIST = \ cutter.sln \ cutter.vcproj \ cutter-cui.vcproj \ include/config.h \ include/cutter/cut-enum-types.h \ include/cutter/cut-features.h \ include/cutter/cut-version.h \ include/gcutter/gcut-marshalers.h \ source/cutter/cut-enum-types.c \ source/gcutter/gcut-marshalers.c sync_actions = \ sync-config \ sync-generated-files \ generate-def \ generate-makefile \ generate-test-def \ generate-test-makefile \ generate-test-fixture-def \ generate-test-fixture-makefile sync: $(sync_actions) sync-config: sed -i'' \ -e 's/VERSION ".*"/VERSION "$(VERSION)"/' \ -e 's/PACKAGE_STRING ".*"/PACKAGE_STRING "$(PACKAGE_STRING)"/' \ include/config.h sync-generated-files: cp $(top_builddir)/cutter/cut-version.h include/cutter/ cp $(top_builddir)/cutter/cut-enum-types.h include/cutter/ cp $(top_builddir)/gcutter/gcut-marshalers.h include/gcutter/ cp $(top_builddir)/cutter/cut-enum-types.c source/cutter/ cp $(top_builddir)/gcutter/gcut-marshalers.c source/gcutter/ generate-def: ($(MAKE) -s -C $(top_builddir)/cutter echo-public-headers; \ $(MAKE) -s -C $(top_builddir)/cutter echo-private-headers; \ $(MAKE) -s -C $(top_builddir)/gcutter echo-public-headers) | \ xargs $(top_srcdir)/misc/generate-def.rb > \ resource/cutter.def $(MAKE) -s -C $(top_builddir)/gdkcutter-pixbuf echo-public-headers | \ xargs $(top_srcdir)/misc/generate-def.rb > \ resource/gdkcutter-pixbuf.def generate-makefile: $(MAKE) -s -C $(top_builddir)/cutter echo-libcutter-sources | \ xargs $(top_srcdir)/misc/generate-makefile-objects.rb \ LIBCUTTER_OBJECTS '$$(top_builddir)/cutter/' > \ Makefile.objects.cutter $(MAKE) -s -C $(top_builddir)/gcutter echo-libgcutter-sources | \ xargs $(top_srcdir)/misc/generate-makefile-objects.rb \ LIBGCUTTER_OBJECTS '$$(top_builddir)/gcutter/' > \ Makefile.objects.gcutter $(MAKE) -s -C $(top_builddir)/cppcutter echo-libcppcutter-sources | \ xargs $(top_srcdir)/misc/generate-makefile-objects.rb \ LIBCPPCUTTER_OBJECTS '$$(top_builddir)/cppcutter/' > \ Makefile.objects.cppcutter generate-test-def: ($(MAKE) -s -C $(top_builddir)/test/cutter echo-tests) | \ xargs $(top_srcdir)/misc/generate-test-defs.rb \ $(top_srcdir)/test/cutter resource/test/cutter generate-test-makefile: $(MAKE) -s -C $(top_builddir)/test/lib \ echo-cuttest-utils-public-headers | \ xargs $(top_srcdir)/misc/generate-def.rb > \ resource/cuttest-utils.def $(MAKE) -s -C $(top_builddir)/test/lib \ echo-cuttest-event-receiver-public-headers | \ xargs $(top_srcdir)/misc/generate-def.rb > \ resource/cuttest-event-receiver.def ($(MAKE) -s -C $(top_builddir)/test/cutter echo-tests) | \ xargs $(top_srcdir)/misc/generate-test-makefile.rb \ '$$(top_srcdir)' test/cutter binary_fixture_paths = \ test/fixtures/factory/type1 \ test/fixtures/factory/type2 \ test/fixtures/loader/attribute \ test/fixtures/loader/cpp-fixture \ test/fixtures/loader/cpp \ test/fixtures/loader/fixture \ test/fixtures/loader/iterator \ test/fixtures/loader/module \ test/fixtures/loader/suite \ test/fixtures/loader/test \ test/fixtures/path/parent/sub \ test/fixtures/pipeline/error \ test/fixtures/pipeline/failure \ test/fixtures/pipeline/omission \ test/fixtures/pipeline/pending \ test/fixtures/pipeline/setup-error \ test/fixtures/pipeline/success \ test/fixtures/repository \ test/fixtures/sub-process-group \ test/fixtures/sub-process-group/fixtures/normal \ test/fixtures/sub-process \ test/fixtures/sub-process/fixtures/normal \ test/fixtures/test-context generate-test-fixture-def: for path in $(binary_fixture_paths); do \ ($(MAKE) -s -C $(top_builddir)/$${path} echo-tests) | \ xargs $(top_srcdir)/misc/generate-test-defs.rb \ $(top_srcdir)/$${path} resource/$${path}; \ done generate-test-fixture-makefile: for path in $(binary_fixture_paths); do \ ($(MAKE) -s -C $(top_builddir)/$${path} echo-tests) | \ xargs $(top_srcdir)/misc/generate-test-makefile.rb \ '$$(top_srcdir)' $${path}; \ done