sassc 2.0.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.gitmodules +1 -1
  4. data/.travis.yml +9 -3
  5. data/CHANGELOG.md +36 -0
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +43 -7
  9. data/ext/depend +4 -0
  10. data/ext/extconf.rb +92 -0
  11. data/ext/libsass/VERSION +1 -0
  12. data/ext/libsass/include/sass/base.h +9 -1
  13. data/ext/libsass/include/sass/context.h +5 -1
  14. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  15. data/ext/libsass/src/ast.cpp +755 -2028
  16. data/ext/libsass/src/ast.hpp +492 -2477
  17. data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
  18. data/ext/libsass/src/ast2c.hpp +39 -0
  19. data/ext/libsass/src/ast_def_macros.hpp +70 -10
  20. data/ext/libsass/src/ast_fwd_decl.cpp +5 -3
  21. data/ext/libsass/src/ast_fwd_decl.hpp +107 -296
  22. data/ext/libsass/src/ast_helpers.hpp +292 -0
  23. data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
  24. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  25. data/ext/libsass/src/ast_sel_unify.cpp +275 -0
  26. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  27. data/ext/libsass/src/ast_selectors.cpp +1043 -0
  28. data/ext/libsass/src/ast_selectors.hpp +522 -0
  29. data/ext/libsass/src/ast_supports.cpp +114 -0
  30. data/ext/libsass/src/ast_supports.hpp +121 -0
  31. data/ext/libsass/src/ast_values.cpp +1154 -0
  32. data/ext/libsass/src/ast_values.hpp +498 -0
  33. data/ext/libsass/src/backtrace.cpp +11 -7
  34. data/ext/libsass/src/backtrace.hpp +5 -5
  35. data/ext/libsass/src/base64vlq.cpp +5 -2
  36. data/ext/libsass/src/base64vlq.hpp +1 -1
  37. data/ext/libsass/src/bind.cpp +35 -34
  38. data/ext/libsass/src/bind.hpp +3 -1
  39. data/ext/libsass/src/c2ast.cpp +64 -0
  40. data/ext/libsass/src/c2ast.hpp +14 -0
  41. data/ext/libsass/src/cencode.c +4 -6
  42. data/ext/libsass/src/check_nesting.cpp +83 -88
  43. data/ext/libsass/src/check_nesting.hpp +39 -34
  44. data/ext/libsass/src/color_maps.cpp +168 -164
  45. data/ext/libsass/src/color_maps.hpp +152 -160
  46. data/ext/libsass/src/constants.cpp +20 -0
  47. data/ext/libsass/src/constants.hpp +19 -0
  48. data/ext/libsass/src/context.cpp +104 -121
  49. data/ext/libsass/src/context.hpp +43 -55
  50. data/ext/libsass/src/cssize.cpp +103 -188
  51. data/ext/libsass/src/cssize.hpp +45 -51
  52. data/ext/libsass/src/dart_helpers.hpp +199 -0
  53. data/ext/libsass/src/debugger.hpp +524 -361
  54. data/ext/libsass/src/emitter.cpp +26 -26
  55. data/ext/libsass/src/emitter.hpp +20 -18
  56. data/ext/libsass/src/environment.cpp +41 -27
  57. data/ext/libsass/src/environment.hpp +33 -22
  58. data/ext/libsass/src/error_handling.cpp +92 -94
  59. data/ext/libsass/src/error_handling.hpp +73 -50
  60. data/ext/libsass/src/eval.cpp +380 -515
  61. data/ext/libsass/src/eval.hpp +64 -57
  62. data/ext/libsass/src/eval_selectors.cpp +75 -0
  63. data/ext/libsass/src/expand.cpp +322 -263
  64. data/ext/libsass/src/expand.hpp +55 -39
  65. data/ext/libsass/src/extender.cpp +1188 -0
  66. data/ext/libsass/src/extender.hpp +399 -0
  67. data/ext/libsass/src/extension.cpp +43 -0
  68. data/ext/libsass/src/extension.hpp +89 -0
  69. data/ext/libsass/src/file.cpp +134 -88
  70. data/ext/libsass/src/file.hpp +28 -37
  71. data/ext/libsass/src/fn_colors.cpp +596 -0
  72. data/ext/libsass/src/fn_colors.hpp +85 -0
  73. data/ext/libsass/src/fn_lists.cpp +285 -0
  74. data/ext/libsass/src/fn_lists.hpp +34 -0
  75. data/ext/libsass/src/fn_maps.cpp +94 -0
  76. data/ext/libsass/src/fn_maps.hpp +30 -0
  77. data/ext/libsass/src/fn_miscs.cpp +244 -0
  78. data/ext/libsass/src/fn_miscs.hpp +40 -0
  79. data/ext/libsass/src/fn_numbers.cpp +227 -0
  80. data/ext/libsass/src/fn_numbers.hpp +45 -0
  81. data/ext/libsass/src/fn_selectors.cpp +205 -0
  82. data/ext/libsass/src/fn_selectors.hpp +35 -0
  83. data/ext/libsass/src/fn_strings.cpp +268 -0
  84. data/ext/libsass/src/fn_strings.hpp +34 -0
  85. data/ext/libsass/src/fn_utils.cpp +158 -0
  86. data/ext/libsass/src/fn_utils.hpp +62 -0
  87. data/ext/libsass/src/inspect.cpp +253 -266
  88. data/ext/libsass/src/inspect.hpp +72 -74
  89. data/ext/libsass/src/json.cpp +2 -2
  90. data/ext/libsass/src/lexer.cpp +25 -84
  91. data/ext/libsass/src/lexer.hpp +5 -16
  92. data/ext/libsass/src/listize.cpp +27 -43
  93. data/ext/libsass/src/listize.hpp +14 -11
  94. data/ext/libsass/src/mapping.hpp +1 -0
  95. data/ext/libsass/src/memory.hpp +12 -0
  96. data/ext/libsass/src/memory/allocator.cpp +48 -0
  97. data/ext/libsass/src/memory/allocator.hpp +138 -0
  98. data/ext/libsass/src/memory/config.hpp +20 -0
  99. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  100. data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
  101. data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
  102. data/ext/libsass/src/operation.hpp +193 -143
  103. data/ext/libsass/src/operators.cpp +56 -29
  104. data/ext/libsass/src/operators.hpp +11 -11
  105. data/ext/libsass/src/ordered_map.hpp +112 -0
  106. data/ext/libsass/src/output.cpp +59 -75
  107. data/ext/libsass/src/output.hpp +15 -22
  108. data/ext/libsass/src/parser.cpp +662 -818
  109. data/ext/libsass/src/parser.hpp +96 -100
  110. data/ext/libsass/src/parser_selectors.cpp +189 -0
  111. data/ext/libsass/src/permutate.hpp +164 -0
  112. data/ext/libsass/src/plugins.cpp +12 -8
  113. data/ext/libsass/src/plugins.hpp +8 -8
  114. data/ext/libsass/src/position.cpp +10 -26
  115. data/ext/libsass/src/position.hpp +44 -21
  116. data/ext/libsass/src/prelexer.cpp +14 -8
  117. data/ext/libsass/src/prelexer.hpp +9 -9
  118. data/ext/libsass/src/remove_placeholders.cpp +59 -57
  119. data/ext/libsass/src/remove_placeholders.hpp +20 -18
  120. data/ext/libsass/src/sass.cpp +25 -18
  121. data/ext/libsass/src/sass.hpp +22 -14
  122. data/ext/libsass/src/sass2scss.cpp +49 -18
  123. data/ext/libsass/src/sass_context.cpp +104 -132
  124. data/ext/libsass/src/sass_context.hpp +2 -2
  125. data/ext/libsass/src/sass_functions.cpp +7 -4
  126. data/ext/libsass/src/sass_functions.hpp +1 -1
  127. data/ext/libsass/src/sass_values.cpp +26 -21
  128. data/ext/libsass/src/settings.hpp +19 -0
  129. data/ext/libsass/src/source.cpp +69 -0
  130. data/ext/libsass/src/source.hpp +95 -0
  131. data/ext/libsass/src/source_data.hpp +32 -0
  132. data/ext/libsass/src/source_map.cpp +27 -20
  133. data/ext/libsass/src/source_map.hpp +14 -11
  134. data/ext/libsass/src/stylesheet.cpp +22 -0
  135. data/ext/libsass/src/stylesheet.hpp +57 -0
  136. data/ext/libsass/src/to_value.cpp +24 -22
  137. data/ext/libsass/src/to_value.hpp +18 -22
  138. data/ext/libsass/src/units.cpp +28 -22
  139. data/ext/libsass/src/units.hpp +9 -8
  140. data/ext/libsass/src/utf8/checked.h +12 -10
  141. data/ext/libsass/src/utf8/core.h +3 -0
  142. data/ext/libsass/src/utf8_string.cpp +12 -10
  143. data/ext/libsass/src/utf8_string.hpp +7 -6
  144. data/ext/libsass/src/util.cpp +97 -107
  145. data/ext/libsass/src/util.hpp +74 -30
  146. data/ext/libsass/src/util_string.cpp +125 -0
  147. data/ext/libsass/src/util_string.hpp +73 -0
  148. data/ext/libsass/src/values.cpp +33 -24
  149. data/ext/libsass/src/values.hpp +2 -2
  150. data/lib/sassc.rb +24 -0
  151. data/lib/sassc/engine.rb +7 -5
  152. data/lib/sassc/functions_handler.rb +11 -13
  153. data/lib/sassc/native.rb +10 -9
  154. data/lib/sassc/native/native_functions_api.rb +0 -5
  155. data/lib/sassc/script.rb +4 -6
  156. data/lib/sassc/version.rb +1 -1
  157. data/sassc.gemspec +32 -12
  158. data/test/engine_test.rb +32 -2
  159. data/test/functions_test.rb +38 -1
  160. data/test/native_test.rb +4 -4
  161. metadata +95 -109
  162. data/ext/Rakefile +0 -3
  163. data/ext/libsass/.editorconfig +0 -15
  164. data/ext/libsass/.gitattributes +0 -2
  165. data/ext/libsass/.github/CONTRIBUTING.md +0 -65
  166. data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
  167. data/ext/libsass/.gitignore +0 -85
  168. data/ext/libsass/.travis.yml +0 -64
  169. data/ext/libsass/COPYING +0 -25
  170. data/ext/libsass/GNUmakefile.am +0 -88
  171. data/ext/libsass/INSTALL +0 -1
  172. data/ext/libsass/LICENSE +0 -25
  173. data/ext/libsass/Makefile +0 -351
  174. data/ext/libsass/Makefile.conf +0 -55
  175. data/ext/libsass/Readme.md +0 -104
  176. data/ext/libsass/SECURITY.md +0 -10
  177. data/ext/libsass/appveyor.yml +0 -91
  178. data/ext/libsass/configure.ac +0 -138
  179. data/ext/libsass/contrib/libsass.spec +0 -66
  180. data/ext/libsass/docs/README.md +0 -20
  181. data/ext/libsass/docs/api-context-example.md +0 -45
  182. data/ext/libsass/docs/api-context-internal.md +0 -163
  183. data/ext/libsass/docs/api-context.md +0 -295
  184. data/ext/libsass/docs/api-doc.md +0 -215
  185. data/ext/libsass/docs/api-function-example.md +0 -67
  186. data/ext/libsass/docs/api-function-internal.md +0 -8
  187. data/ext/libsass/docs/api-function.md +0 -74
  188. data/ext/libsass/docs/api-importer-example.md +0 -112
  189. data/ext/libsass/docs/api-importer-internal.md +0 -20
  190. data/ext/libsass/docs/api-importer.md +0 -86
  191. data/ext/libsass/docs/api-value-example.md +0 -55
  192. data/ext/libsass/docs/api-value-internal.md +0 -76
  193. data/ext/libsass/docs/api-value.md +0 -154
  194. data/ext/libsass/docs/build-on-darwin.md +0 -27
  195. data/ext/libsass/docs/build-on-gentoo.md +0 -55
  196. data/ext/libsass/docs/build-on-windows.md +0 -139
  197. data/ext/libsass/docs/build-shared-library.md +0 -35
  198. data/ext/libsass/docs/build-with-autotools.md +0 -78
  199. data/ext/libsass/docs/build-with-makefiles.md +0 -68
  200. data/ext/libsass/docs/build-with-mingw.md +0 -107
  201. data/ext/libsass/docs/build-with-visual-studio.md +0 -90
  202. data/ext/libsass/docs/build.md +0 -97
  203. data/ext/libsass/docs/compatibility-plan.md +0 -48
  204. data/ext/libsass/docs/contributing.md +0 -17
  205. data/ext/libsass/docs/custom-functions-internal.md +0 -122
  206. data/ext/libsass/docs/dev-ast-memory.md +0 -223
  207. data/ext/libsass/docs/implementations.md +0 -56
  208. data/ext/libsass/docs/plugins.md +0 -47
  209. data/ext/libsass/docs/setup-environment.md +0 -68
  210. data/ext/libsass/docs/source-map-internals.md +0 -51
  211. data/ext/libsass/docs/trace.md +0 -26
  212. data/ext/libsass/docs/triage.md +0 -17
  213. data/ext/libsass/docs/unicode.md +0 -39
  214. data/ext/libsass/extconf.rb +0 -6
  215. data/ext/libsass/include/sass/version.h.in +0 -12
  216. data/ext/libsass/m4/.gitkeep +0 -0
  217. data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +0 -167
  218. data/ext/libsass/res/resource.rc +0 -35
  219. data/ext/libsass/script/bootstrap +0 -13
  220. data/ext/libsass/script/branding +0 -10
  221. data/ext/libsass/script/ci-build-libsass +0 -134
  222. data/ext/libsass/script/ci-build-plugin +0 -62
  223. data/ext/libsass/script/ci-install-compiler +0 -6
  224. data/ext/libsass/script/ci-install-deps +0 -20
  225. data/ext/libsass/script/ci-report-coverage +0 -42
  226. data/ext/libsass/script/spec +0 -5
  227. data/ext/libsass/script/tap-driver +0 -652
  228. data/ext/libsass/script/tap-runner +0 -1
  229. data/ext/libsass/script/test-leaks.pl +0 -103
  230. data/ext/libsass/src/GNUmakefile.am +0 -54
  231. data/ext/libsass/src/extend.cpp +0 -2130
  232. data/ext/libsass/src/extend.hpp +0 -86
  233. data/ext/libsass/src/functions.cpp +0 -2234
  234. data/ext/libsass/src/functions.hpp +0 -198
  235. data/ext/libsass/src/memory/SharedPtr.cpp +0 -114
  236. data/ext/libsass/src/memory/SharedPtr.hpp +0 -206
  237. data/ext/libsass/src/node.cpp +0 -319
  238. data/ext/libsass/src/node.hpp +0 -118
  239. data/ext/libsass/src/paths.hpp +0 -71
  240. data/ext/libsass/src/sass_util.cpp +0 -149
  241. data/ext/libsass/src/sass_util.hpp +0 -256
  242. data/ext/libsass/src/subset_map.cpp +0 -55
  243. data/ext/libsass/src/subset_map.hpp +0 -76
  244. data/ext/libsass/src/support/libsass.pc.in +0 -11
  245. data/ext/libsass/src/to_c.hpp +0 -39
  246. data/ext/libsass/test/test_node.cpp +0 -94
  247. data/ext/libsass/test/test_paths.cpp +0 -28
  248. data/ext/libsass/test/test_selector_difference.cpp +0 -25
  249. data/ext/libsass/test/test_specificity.cpp +0 -25
  250. data/ext/libsass/test/test_subset_map.cpp +0 -472
  251. data/ext/libsass/test/test_superselector.cpp +0 -69
  252. data/ext/libsass/test/test_unification.cpp +0 -31
  253. data/ext/libsass/version.sh +0 -10
  254. data/ext/libsass/win/libsass.sln +0 -39
  255. data/ext/libsass/win/libsass.sln.DotSettings +0 -9
  256. data/ext/libsass/win/libsass.targets +0 -118
  257. data/ext/libsass/win/libsass.vcxproj +0 -188
  258. data/ext/libsass/win/libsass.vcxproj.filters +0 -357
  259. data/lib/sassc/native/lib_c.rb +0 -21
  260. data/lib/tasks/libsass.rb +0 -33
@@ -1,35 +0,0 @@
1
- #include <windows.h>
2
-
3
- // DLL version information.
4
- VS_VERSION_INFO VERSIONINFO
5
- FILEVERSION 1,0,0,0
6
- PRODUCTVERSION 1,0,0,0
7
- FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8
- #ifdef _DEBUG
9
- FILEFLAGS VS_FF_DEBUG | VS_FF_PRERELEASE
10
- #else
11
- FILEFLAGS 0
12
- #endif
13
- FILEOS VOS_NT_WINDOWS32
14
- FILETYPE VFT_DLL
15
- FILESUBTYPE VFT2_UNKNOWN
16
- BEGIN
17
- BLOCK "StringFileInfo"
18
- BEGIN
19
- BLOCK "080904b0"
20
- BEGIN
21
- VALUE "CompanyName", "Sass Open Source Foundation"
22
- VALUE "FileDescription", "A C/C++ implementation of a Sass compiler"
23
- VALUE "FileVersion", "1.0.0.0"
24
- VALUE "InternalName", "libsass"
25
- VALUE "LegalCopyright", "\251 2017 libsass.org"
26
- VALUE "OriginalFilename", "libsass.dll"
27
- VALUE "ProductName", "LibSass Library"
28
- VALUE "ProductVersion", "1.0.0.0"
29
- END
30
- END
31
- BLOCK "VarFileInfo"
32
- BEGIN
33
- VALUE "Translation", 0x809, 1200
34
- END
35
- END
@@ -1,13 +0,0 @@
1
- #!/bin/bash
2
-
3
- script/branding
4
-
5
- : ${SASS_SPEC_PATH:="sass-spec"}
6
- : ${SASS_SASSC_PATH:="sassc" }
7
-
8
- if [ ! -d $SASS_SPEC_PATH ]; then
9
- git clone https://github.com/sass/sass-spec.git $SASS_SPEC_PATH
10
- fi
11
- if [ ! -d $SASS_SASSC_PATH ]; then
12
- git clone https://github.com/sass/sassc.git $SASS_SASSC_PATH
13
- fi
@@ -1,10 +0,0 @@
1
- #! /bin/bash
2
-
3
- echo " "
4
- echo " _ ___ ____ ____ _ ____ ____ "
5
- echo "| | |_ _| __ ) ___| / \ / ___/ ___| "
6
- echo "| | | || _ \___ \ / _ \ \___ \___ \ "
7
- echo "| |___ | || |_) |__) / ___ \ ___) |__) |"
8
- echo "|_____|___|____/____/_/ \_\____/____/ "
9
- echo " "
10
-
@@ -1,134 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -e
4
-
5
- script/bootstrap
6
-
7
- # export this path right here (was in script/spec before)
8
- export SASS_LIBSASS_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../ && pwd )"
9
-
10
- # use some defaults if not running under travis ci
11
- if [ "x$CONTINUOUS_INTEGRATION" == "x" ]; then export CONTINUOUS_INTEGRATION=true; fi
12
- if [ "x$TRAVIS_BUILD_DIR" == "x" ]; then export TRAVIS_BUILD_DIR=$(pwd); fi
13
- if [ "x$SASS_SASSC_PATH" == "x" ]; then export SASS_SASSC_PATH=$(pwd)/sassc; fi
14
- if [ "x$SASS_SPEC_PATH" == "x" ]; then export SASS_SPEC_PATH=$(pwd)/sass-spec; fi
15
-
16
- # try to get the os name from uname (and filter via perl - probably not the most portable way?)
17
- if [ "x$TRAVIS_OS_NAME" == "x" ]; then export TRAVIS_OS_NAME=`uname -s | perl -ne 'print lc \$1 if\(/^([a-zA-Z]+)/'\)`; fi
18
-
19
- if [ "x$COVERAGE" == "xyes" ]; then
20
- COVERAGE_OPT="--enable-coverage"
21
- export EXTRA_CFLAGS="-fprofile-arcs -ftest-coverage"
22
- export EXTRA_CXXFLAGS="-fprofile-arcs -ftest-coverage"
23
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
24
- # osx doesn't seem to know gcov lib?
25
- export EXTRA_LDFLAGS="--coverage"
26
- else
27
- export EXTRA_LDFLAGS="-lgcov --coverage"
28
- fi
29
- else
30
- COVERAGE_OPT="--disable-coverage"
31
- fi
32
-
33
- if [ "x$BUILD" == "xstatic" ]; then
34
- SHARED_OPT="--disable-shared --enable-static"
35
- MAKE_TARGET="static"
36
- else
37
- # Makefile of sassc wants to link to static
38
- SHARED_OPT="--enable-shared --enable-static"
39
- MAKE_TARGET="shared"
40
- fi
41
-
42
- if [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then
43
- MAKE_OPTS="$MAKE_OPTS -j1 V=1"
44
- else
45
- MAKE_OPTS="$MAKE_OPTS -j5 V=1"
46
- fi
47
-
48
- if [ "x$PREFIX" == "x" ]; then
49
- if [ "x$TRAVIS_BUILD_DIR" == "x" ]; then
50
- PREFIX=$SASS_LIBSASS_PATH/build
51
- else
52
- PREFIX=$TRAVIS_BUILD_DIR/build
53
- fi
54
- fi
55
-
56
- # enable address sanitation
57
- # https://en.wikipedia.org/wiki/AddressSanitizer
58
- if [ "x$CC" == "xclang" ]; then
59
- if [ "x$COVERAGE" != "xyes" ]; then
60
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then
61
- export EXTRA_CFLAGS="$EXTRA_CFLAGS -fsanitize=address"
62
- export EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -fsanitize=address"
63
- export EXTRA_LDFLAGS="$EXTRA_LDFLAGS -fsanitize=address"
64
- fi
65
- fi
66
- fi
67
-
68
- echo SASS_LIBSASS_PATH: $SASS_LIBSASS_PATH
69
- echo TRAVIS_BUILD_DIR: $TRAVIS_BUILD_DIR
70
- echo SASS_SASSC_PATH: $SASS_SASSC_PATH
71
- echo SASS_SPEC_PATH: $SASS_SPEC_PATH
72
- echo INSTALL_LOCATION: $PREFIX
73
-
74
- if [ "x$AUTOTOOLS" == "xyes" ]; then
75
-
76
- echo -en 'travis_fold:start:configure\r'
77
- autoreconf --force --install
78
- ./configure --enable-tests $COVERAGE_OPT \
79
- --disable-silent-rules \
80
- --with-sassc-dir=$SASS_SASSC_PATH \
81
- --with-sass-spec-dir=$SASS_SPEC_PATH \
82
- --prefix=$PREFIX \
83
- ${SHARED_OPT}
84
- echo -en 'travis_fold:end:configure\r'
85
-
86
- make $MAKE_OPTS clean
87
-
88
- # install to prefix directory
89
- PREFIX="$PREFIX" make $MAKE_OPTS install
90
-
91
- else
92
-
93
- make $MAKE_OPTS clean
94
-
95
- fi
96
-
97
- # install to prefix directory
98
- PREFIX="$PREFIX" make $MAKE_OPTS install
99
-
100
- ls -la $PREFIX/*
101
-
102
- echo successfully compiled libsass
103
- echo AUTOTOOLS=$AUTOTOOLS COVERAGE=$COVERAGE BUILD=$BUILD
104
-
105
- if [ "$CONTINUOUS_INTEGRATION" == "true" ] && [ "$TRAVIS_PULL_REQUEST" != "false" ] && [ "x$TRAVIS_PULL_REQUEST" != "x" ] &&
106
- ([ "$TRAVIS_OS_NAME" == "linux" ] || [ "$TRAVIS_OS_NAME" == "osx" ] || [ "$TRAVIS_OS_NAME" == "cygwin" ]);
107
- then
108
-
109
- echo "Fetching PR $TRAVIS_PULL_REQUEST"
110
-
111
- JSON=$(curl -L -sS https://api.github.com/repos/sass/libsass/pulls/$TRAVIS_PULL_REQUEST)
112
-
113
- if [[ $JSON =~ "API rate limit exceeded" ]];
114
- then
115
- echo "Travis rate limit on github exceeded"
116
- echo "Retrying via 'special purpose proxy'"
117
- JSON=$(curl -L -sS https://github-api-reverse-proxy.herokuapp.com/repos/sass/libsass/pulls/$TRAVIS_PULL_REQUEST)
118
- fi
119
-
120
- RE_SPEC_PR="sass\/sass-spec(#|\/pull\/)([0-9]+)"
121
-
122
- if [[ $JSON =~ $RE_SPEC_PR ]];
123
- then
124
- SPEC_PR="${BASH_REMATCH[2]}"
125
- echo "Fetching Sass Spec PR $SPEC_PR"
126
- git -C sass-spec fetch -u origin pull/$SPEC_PR/head:ci-spec-pr-$SPEC_PR
127
- git -C sass-spec checkout --force ci-spec-pr-$SPEC_PR
128
- LD_LIBRARY_PATH="$PREFIX/lib/" make $MAKE_OPTS test_probe
129
- else
130
- LD_LIBRARY_PATH="$PREFIX/lib/" make $MAKE_OPTS test_probe
131
- fi
132
- else
133
- LD_LIBRARY_PATH="$PREFIX/lib/" make $MAKE_OPTS test_probe
134
- fi
@@ -1,62 +0,0 @@
1
- #!/bin/bash
2
-
3
- PLUGIN=$1
4
- RUBY_BIN=ruby
5
- SASS_SPEC_PATH=sass-spec
6
- SASSC_BIN=sassc/bin/sassc
7
- SASS_SPEC_SPEC_DIR=plugins/libsass-${PLUGIN}/test
8
-
9
- if [ -e ./tester ] ; then
10
- SASSC_BIN=./tester
11
- fi
12
-
13
- if [ -d ./build/lib ] ; then
14
- cp -a build/lib lib
15
- fi
16
-
17
- if [ "x$1" == "x" ] ; then
18
- echo "No plugin name given"
19
- exit 1
20
- fi
21
-
22
- if [ "x$COVERAGE" == "0" ] ; then
23
- unset COVERAGE
24
- fi
25
-
26
- export EXTRA_CFLAGS=""
27
- export EXTRA_CXXFLAGS=""
28
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
29
- # osx doesn't seem to know gcov lib?
30
- export EXTRA_LDFLAGS="--coverage"
31
- else
32
- export EXTRA_LDFLAGS="-lgcov --coverage"
33
- fi
34
-
35
- mkdir -p plugins
36
- if [ ! -d plugins/libsass-${PLUGIN} ] ; then
37
- git clone https://github.com/mgreter/libsass-${PLUGIN} plugins/libsass-${PLUGIN}
38
- fi
39
- if [ ! -d plugins/libsass-${PLUGIN}/build ] ; then
40
- mkdir plugins/libsass-${PLUGIN}/build
41
- fi
42
- RETVAL=$?; if [ "$RETVAL" != "0" ]; then exit $RETVAL; fi
43
-
44
- cd plugins/libsass-${PLUGIN}/build
45
- cmake -G "Unix Makefiles" -D LIBSASS_DIR="../../.." ..
46
- RETVAL=$?; if [ "$RETVAL" != "0" ]; then exit $RETVAL; fi
47
- make VERBOSE=1 -j2
48
- RETVAL=$?; if [ "$RETVAL" != "0" ]; then exit $RETVAL; fi
49
- cd ../../..
50
-
51
- # glob only works on paths relative to imports
52
- if [ "x$PLUGIN" == "xglob" ]; then
53
- ${SASSC_BIN} --plugin-path plugins/libsass-${PLUGIN}/build ${SASS_SPEC_SPEC_DIR}/basic/input.scss > ${SASS_SPEC_SPEC_DIR}/basic/result.css
54
- ${SASSC_BIN} --plugin-path plugins/libsass-${PLUGIN}/build ${SASS_SPEC_SPEC_DIR}/basic/input.scss --sourcemap > /dev/null
55
- else
56
- cat ${SASS_SPEC_SPEC_DIR}/basic/input.scss | ${SASSC_BIN} --plugin-path plugins/libsass-${PLUGIN}/build -I ${SASS_SPEC_SPEC_DIR}/basic > ${SASS_SPEC_SPEC_DIR}/basic/result.css
57
- cat ${SASS_SPEC_SPEC_DIR}/basic/input.scss | ${SASSC_BIN} --plugin-path plugins/libsass-${PLUGIN}/build -I ${SASS_SPEC_SPEC_DIR}/basic --sourcemap > /dev/null
58
- fi
59
- RETVAL=$?; if [ "$RETVAL" != "0" ]; then exit $RETVAL; fi
60
-
61
- diff ${SASS_SPEC_SPEC_DIR}/basic/expected_output.css ${SASS_SPEC_SPEC_DIR}/basic/result.css
62
- RETVAL=$?; if [ "$RETVAL" != "0" ]; then exit $RETVAL; fi
@@ -1,6 +0,0 @@
1
- #!/bin/bash
2
-
3
- gem install minitest
4
- gem install minitap
5
-
6
- pip2 install --user 'requests[security]'
@@ -1,20 +0,0 @@
1
- #!/bin/bash
2
- if [ "x$COVERAGE" == "xyes" ]; then
3
- pip2 install --user gcovr
4
- pip2 install --user cpp-coveralls
5
- else
6
- echo "no dependencies to install"
7
- fi
8
-
9
- if [ "x$AUTOTOOLS" == "xyes" ]; then
10
- AUTOTOOLS=yes
11
-
12
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then
13
- sudo add-apt-repository -y ppa:rbose-debianizer/automake &> /dev/null
14
- sudo apt-get -qq update
15
- sudo apt-get -qq install automake
16
- fi
17
-
18
- fi
19
-
20
- exit 0
@@ -1,42 +0,0 @@
1
- #!/bin/bash
2
-
3
- if [ "x$COVERAGE" = "xyes" ]; then
4
-
5
- # find / -name "gcovr"
6
- # find / -name "coveralls"
7
- # this is only needed for mac os x builds!
8
- PATH=$PATH:/Users/travis/Library/Python/2.7/bin/
9
-
10
-
11
- # exclude some directories from profiling (.libs is from autotools)
12
- export EXCLUDE_COVERAGE="--exclude plugins
13
- --exclude sassc/sassc.c
14
- --exclude src/sass-spec
15
- --exclude src/.libs
16
- --exclude src/debug.hpp
17
- --exclude src/json.cpp
18
- --exclude src/json.hpp
19
- --exclude src/cencode.c
20
- --exclude src/b64
21
- --exclude src/utf8
22
- --exclude src/utf8_string.hpp
23
- --exclude src/utf8.h
24
- --exclude src/utf8_string.cpp
25
- --exclude src/sass2scss.h
26
- --exclude src/sass2scss.cpp
27
- --exclude src/test
28
- --exclude src/posix
29
- --exclude src/debugger.hpp"
30
- # debug used gcov version
31
- # option not available on mac
32
- if [ "$TRAVIS_OS_NAME" != "osx" ]; then
33
- gcov -v
34
- fi
35
- # create summarized report
36
- gcovr -r .
37
- # submit report to coveralls.io
38
- coveralls $EXCLUDE_COVERAGE --gcov-options '\-lp'
39
-
40
- else
41
- echo "skip coverage reporting"
42
- fi
@@ -1,5 +0,0 @@
1
- #!/bin/bash
2
-
3
- script/bootstrap
4
-
5
- make $MAKE_OPTS test_build
@@ -1,652 +0,0 @@
1
- #!/usr/bin/env sh
2
- # Copyright (C) 2011-2013 Free Software Foundation, Inc.
3
- #
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation; either version 2, or (at your option)
7
- # any later version.
8
- #
9
- # This program is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
13
- #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
-
17
- # As a special exception to the GNU General Public License, if you
18
- # distribute this file as part of a program that contains a
19
- # configuration script generated by Autoconf, you may include it under
20
- # the same distribution terms that you use for the rest of that program.
21
-
22
- # This file is maintained in Automake, please report
23
- # bugs to <bug-automake@gnu.org> or send patches to
24
- # <automake-patches@gnu.org>.
25
-
26
- scriptversion=2011-12-27.17; # UTC
27
-
28
- # Make unconditional expansion of undefined variables an error. This
29
- # helps a lot in preventing typo-related bugs.
30
- set -u
31
-
32
- me=tap-driver.sh
33
-
34
- fatal ()
35
- {
36
- echo "$me: fatal: $*" >&2
37
- exit 1
38
- }
39
-
40
- usage_error ()
41
- {
42
- echo "$me: $*" >&2
43
- print_usage >&2
44
- exit 2
45
- }
46
-
47
- print_usage ()
48
- {
49
- cat <<END
50
- Usage:
51
- tap-driver.sh --test-name=NAME --log-file=PATH --trs-file=PATH
52
- [--expect-failure={yes|no}] [--color-tests={yes|no}]
53
- [--enable-hard-errors={yes|no}] [--ignore-exit]
54
- [--diagnostic-string=STRING] [--merge|--no-merge]
55
- [--comments|--no-comments] [--] TEST-COMMAND
56
- The \`--test-name', \`--log-file' and \`--trs-file' options are mandatory.
57
- END
58
- }
59
-
60
- # TODO: better error handling in option parsing (in particular, ensure
61
- # TODO: $log_file, $trs_file and $test_name are defined).
62
- test_name= # Used for reporting.
63
- log_file= # Where to save the result and output of the test script.
64
- trs_file= # Where to save the metadata of the test run.
65
- expect_failure=0
66
- color_tests=0
67
- merge=0
68
- ignore_exit=0
69
- comments=0
70
- diag_string='#'
71
- while test $# -gt 0; do
72
- case $1 in
73
- --help) print_usage; exit $?;;
74
- --version) echo "$me $scriptversion"; exit $?;;
75
- --test-name) test_name=$2; shift;;
76
- --log-file) log_file=$2; shift;;
77
- --trs-file) trs_file=$2; shift;;
78
- --color-tests) color_tests=$2; shift;;
79
- --expect-failure) expect_failure=$2; shift;;
80
- --enable-hard-errors) shift;; # No-op.
81
- --merge) merge=1;;
82
- --no-merge) merge=0;;
83
- --ignore-exit) ignore_exit=1;;
84
- --comments) comments=1;;
85
- --no-comments) comments=0;;
86
- --diagnostic-string) diag_string=$2; shift;;
87
- --) shift; break;;
88
- -*) usage_error "invalid option: '$1'";;
89
- esac
90
- shift
91
- done
92
-
93
- test $# -gt 0 || usage_error "missing test command"
94
-
95
- case $expect_failure in
96
- yes) expect_failure=1;;
97
- *) expect_failure=0;;
98
- esac
99
-
100
- if test $color_tests = yes; then
101
- init_colors='
102
- color_map["red"]="" # Red.
103
- color_map["grn"]="" # Green.
104
- color_map["lgn"]="" # Light green.
105
- color_map["blu"]="" # Blue.
106
- color_map["mgn"]="" # Magenta.
107
- color_map["std"]="" # No color.
108
- color_for_result["ERROR"] = "mgn"
109
- color_for_result["PASS"] = "grn"
110
- color_for_result["XPASS"] = "red"
111
- color_for_result["FAIL"] = "red"
112
- color_for_result["XFAIL"] = "lgn"
113
- color_for_result["SKIP"] = "blu"'
114
- else
115
- init_colors=''
116
- fi
117
-
118
- # :; is there to work around a bug in bash 3.2 (and earlier) which
119
- # does not always set '$?' properly on redirection failure.
120
- # See the Autoconf manual for more details.
121
- :;{
122
- (
123
- # Ignore common signals (in this subshell only!), to avoid potential
124
- # problems with Korn shells. Some Korn shells are known to propagate
125
- # to themselves signals that have killed a child process they were
126
- # waiting for; this is done at least for SIGINT (and usually only for
127
- # it, in truth). Without the `trap' below, such a behaviour could
128
- # cause a premature exit in the current subshell, e.g., in case the
129
- # test command it runs gets terminated by a SIGINT. Thus, the awk
130
- # script we are piping into would never seen the exit status it
131
- # expects on its last input line (which is displayed below by the
132
- # last `echo $?' statement), and would thus die reporting an internal
133
- # error.
134
- # For more information, see the Autoconf manual and the threads:
135
- # <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
136
- # <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
137
- trap : 1 3 2 13 15
138
- if test $merge -gt 0; then
139
- exec 2>&1
140
- else
141
- exec 2>&3
142
- fi
143
- "$@"
144
- echo $?
145
- ) | LC_ALL=C ${AM_TAP_AWK-awk} \
146
- -v me="$me" \
147
- -v test_script_name="$test_name" \
148
- -v log_file="$log_file" \
149
- -v trs_file="$trs_file" \
150
- -v expect_failure="$expect_failure" \
151
- -v merge="$merge" \
152
- -v ignore_exit="$ignore_exit" \
153
- -v comments="$comments" \
154
- -v diag_string="$diag_string" \
155
- '
156
- # FIXME: the usages of "cat >&3" below could be optimized when using
157
- # FIXME: GNU awk, and/on on systems that supports /dev/fd/.
158
-
159
- # Implementation note: in what follows, `result_obj` will be an
160
- # associative array that (partly) simulates a TAP result object
161
- # from the `TAP::Parser` perl module.
162
-
163
- ## ----------- ##
164
- ## FUNCTIONS ##
165
- ## ----------- ##
166
-
167
- function fatal(msg)
168
- {
169
- print me ": " msg | "cat >&2"
170
- exit 1
171
- }
172
-
173
- function abort(where)
174
- {
175
- fatal("internal error " where)
176
- }
177
-
178
- # Convert a boolean to a "yes"/"no" string.
179
- function yn(bool)
180
- {
181
- return bool ? "yes" : "no";
182
- }
183
-
184
- function add_test_result(result)
185
- {
186
- if (!test_results_index)
187
- test_results_index = 0
188
- test_results_list[test_results_index] = result
189
- test_results_index += 1
190
- test_results_seen[result] = 1;
191
- }
192
-
193
- # Whether the test script should be re-run by "make recheck".
194
- function must_recheck()
195
- {
196
- for (k in test_results_seen)
197
- if (k != "XFAIL" && k != "PASS" && k != "SKIP")
198
- return 1
199
- return 0
200
- }
201
-
202
- # Whether the content of the log file associated to this test should
203
- # be copied into the "global" test-suite.log.
204
- function copy_in_global_log()
205
- {
206
- for (k in test_results_seen)
207
- if (k != "PASS")
208
- return 1
209
- return 0
210
- }
211
-
212
- # FIXME: this can certainly be improved ...
213
- function get_global_test_result()
214
- {
215
- if ("ERROR" in test_results_seen)
216
- return "ERROR"
217
- if ("FAIL" in test_results_seen || "XPASS" in test_results_seen)
218
- return "FAIL"
219
- all_skipped = 1
220
- for (k in test_results_seen)
221
- if (k != "SKIP")
222
- all_skipped = 0
223
- if (all_skipped)
224
- return "SKIP"
225
- return "PASS";
226
- }
227
-
228
- function stringify_result_obj(result_obj)
229
- {
230
- if (result_obj["is_unplanned"] || result_obj["number"] != testno)
231
- return "ERROR"
232
-
233
- if (plan_seen == LATE_PLAN)
234
- return "ERROR"
235
-
236
- if (result_obj["directive"] == "TODO")
237
- return result_obj["is_ok"] ? "XPASS" : "XFAIL"
238
-
239
- if (result_obj["directive"] == "SKIP")
240
- return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL;
241
-
242
- if (length(result_obj["directive"]))
243
- abort("in function stringify_result_obj()")
244
-
245
- return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL
246
- }
247
-
248
- function decorate_result(result)
249
- {
250
- color_name = color_for_result[result]
251
- if (color_name)
252
- return color_map[color_name] "" result "" color_map["std"]
253
- # If we are not using colorized output, or if we do not know how
254
- # to colorize the given result, we should return it unchanged.
255
- return result
256
- }
257
-
258
- function report(result, details)
259
- {
260
- if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/)
261
- {
262
- msg = ": " test_script_name
263
- add_test_result(result)
264
- }
265
- else if (result == "#")
266
- {
267
- msg = " " test_script_name ":"
268
- }
269
- else
270
- {
271
- abort("in function report()")
272
- }
273
- if (length(details))
274
- msg = msg " " details
275
- # Output on console might be colorized.
276
- print decorate_result(result) msg
277
- # Log the result in the log file too, to help debugging (this is
278
- # especially true when said result is a TAP error or "Bail out!").
279
- print result msg | "cat >&3";
280
- }
281
-
282
- function testsuite_error(error_message)
283
- {
284
- report("ERROR", "- " error_message)
285
- }
286
-
287
- function handle_tap_result()
288
- {
289
- details = result_obj["number"];
290
- if (length(result_obj["description"]))
291
- details = details " " result_obj["description"]
292
-
293
- if (plan_seen == LATE_PLAN)
294
- {
295
- details = details " # AFTER LATE PLAN";
296
- }
297
- else if (result_obj["is_unplanned"])
298
- {
299
- details = details " # UNPLANNED";
300
- }
301
- else if (result_obj["number"] != testno)
302
- {
303
- details = sprintf("%s # OUT-OF-ORDER (expecting %d)",
304
- details, testno);
305
- }
306
- else if (result_obj["directive"])
307
- {
308
- details = details " # " result_obj["directive"];
309
- if (length(result_obj["explanation"]))
310
- details = details " " result_obj["explanation"]
311
- }
312
-
313
- report(stringify_result_obj(result_obj), details)
314
- }
315
-
316
- # `skip_reason` should be empty whenever planned > 0.
317
- function handle_tap_plan(planned, skip_reason)
318
- {
319
- planned += 0 # Avoid getting confused if, say, `planned` is "00"
320
- if (length(skip_reason) && planned > 0)
321
- abort("in function handle_tap_plan()")
322
- if (plan_seen)
323
- {
324
- # Error, only one plan per stream is acceptable.
325
- testsuite_error("multiple test plans")
326
- return;
327
- }
328
- planned_tests = planned
329
- # The TAP plan can come before or after *all* the TAP results; we speak
330
- # respectively of an "early" or a "late" plan. If we see the plan line
331
- # after at least one TAP result has been seen, assume we have a late
332
- # plan; in this case, any further test result seen after the plan will
333
- # be flagged as an error.
334
- plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN)
335
- # If testno > 0, we have an error ("too many tests run") that will be
336
- # automatically dealt with later, so do not worry about it here. If
337
- # $plan_seen is true, we have an error due to a repeated plan, and that
338
- # has already been dealt with above. Otherwise, we have a valid "plan
339
- # with SKIP" specification, and should report it as a particular kind
340
- # of SKIP result.
341
- if (planned == 0 && testno == 0)
342
- {
343
- if (length(skip_reason))
344
- skip_reason = "- " skip_reason;
345
- report("SKIP", skip_reason);
346
- }
347
- }
348
-
349
- function extract_tap_comment(line)
350
- {
351
- if (index(line, diag_string) == 1)
352
- {
353
- # Strip leading `diag_string` from `line`.
354
- line = substr(line, length(diag_string) + 1)
355
- # And strip any leading and trailing whitespace left.
356
- sub("^[ \t]*", "", line)
357
- sub("[ \t]*$", "", line)
358
- # Return what is left (if any).
359
- return line;
360
- }
361
- return "";
362
- }
363
-
364
- # When this function is called, we know that line is a TAP result line,
365
- # so that it matches the (perl) RE "^(not )?ok\b".
366
- function setup_result_obj(line)
367
- {
368
- # Get the result, and remove it from the line.
369
- result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0)
370
- sub("^(not )?ok[ \t]*", "", line)
371
-
372
- # If the result has an explicit number, get it and strip it; otherwise,
373
- # automatically assing the next progresive number to it.
374
- if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/)
375
- {
376
- match(line, "^[0-9]+")
377
- # The final `+ 0` is to normalize numbers with leading zeros.
378
- result_obj["number"] = substr(line, 1, RLENGTH) + 0
379
- line = substr(line, RLENGTH + 1)
380
- }
381
- else
382
- {
383
- result_obj["number"] = testno
384
- }
385
-
386
- if (plan_seen == LATE_PLAN)
387
- # No further test results are acceptable after a "late" TAP plan
388
- # has been seen.
389
- result_obj["is_unplanned"] = 1
390
- else if (plan_seen && testno > planned_tests)
391
- result_obj["is_unplanned"] = 1
392
- else
393
- result_obj["is_unplanned"] = 0
394
-
395
- # Strip trailing and leading whitespace.
396
- sub("^[ \t]*", "", line)
397
- sub("[ \t]*$", "", line)
398
-
399
- # This will have to be corrected if we have a "TODO"/"SKIP" directive.
400
- result_obj["description"] = line
401
- result_obj["directive"] = ""
402
- result_obj["explanation"] = ""
403
-
404
- if (index(line, "#") == 0)
405
- return # No possible directive, nothing more to do.
406
-
407
- # Directives are case-insensitive.
408
- rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*"
409
-
410
- # See whether we have the directive, and if yes, where.
411
- pos = match(line, rx "$")
412
- if (!pos)
413
- pos = match(line, rx "[^a-zA-Z0-9_]")
414
-
415
- # If there was no TAP directive, we have nothing more to do.
416
- if (!pos)
417
- return
418
-
419
- # Let`s now see if the TAP directive has been escaped. For example:
420
- # escaped: ok \# SKIP
421
- # not escaped: ok \\# SKIP
422
- # escaped: ok \\\\\# SKIP
423
- # not escaped: ok \ # SKIP
424
- if (substr(line, pos, 1) == "#")
425
- {
426
- bslash_count = 0
427
- for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--)
428
- bslash_count += 1
429
- if (bslash_count % 2)
430
- return # Directive was escaped.
431
- }
432
-
433
- # Strip the directive and its explanation (if any) from the test
434
- # description.
435
- result_obj["description"] = substr(line, 1, pos - 1)
436
- # Now remove the test description from the line, that has been dealt
437
- # with already.
438
- line = substr(line, pos)
439
- # Strip the directive, and save its value (normalized to upper case).
440
- sub("^[ \t]*#[ \t]*", "", line)
441
- result_obj["directive"] = toupper(substr(line, 1, 4))
442
- line = substr(line, 5)
443
- # Now get the explanation for the directive (if any), with leading
444
- # and trailing whitespace removed.
445
- sub("^[ \t]*", "", line)
446
- sub("[ \t]*$", "", line)
447
- result_obj["explanation"] = line
448
- }
449
-
450
- function get_test_exit_message(status)
451
- {
452
- if (status == 0)
453
- return ""
454
- if (status !~ /^[1-9][0-9]*$/)
455
- abort("getting exit status")
456
- if (status < 127)
457
- exit_details = ""
458
- else if (status == 127)
459
- exit_details = " (command not found?)"
460
- else if (status >= 128 && status <= 255)
461
- exit_details = sprintf(" (terminated by signal %d?)", status - 128)
462
- else if (status > 256 && status <= 384)
463
- # We used to report an "abnormal termination" here, but some Korn
464
- # shells, when a child process die due to signal number n, can leave
465
- # in $? an exit status of 256+n instead of the more standard 128+n.
466
- # Apparently, both behaviours are allowed by POSIX (2008), so be
467
- # prepared to handle them both. See also Austing Group report ID
468
- # 0000051 <http://www.austingroupbugs.net/view.php?id=51>
469
- exit_details = sprintf(" (terminated by signal %d?)", status - 256)
470
- else
471
- # Never seen in practice.
472
- exit_details = " (abnormal termination)"
473
- return sprintf("exited with status %d%s", status, exit_details)
474
- }
475
-
476
- function write_test_results()
477
- {
478
- print ":global-test-result: " get_global_test_result() > trs_file
479
- print ":recheck: " yn(must_recheck()) > trs_file
480
- print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file
481
- for (i = 0; i < test_results_index; i += 1)
482
- print ":test-result: " test_results_list[i] > trs_file
483
- close(trs_file);
484
- }
485
-
486
- BEGIN {
487
-
488
- ## ------- ##
489
- ## SETUP ##
490
- ## ------- ##
491
-
492
- '"$init_colors"'
493
-
494
- # Properly initialized once the TAP plan is seen.
495
- planned_tests = 0
496
-
497
- COOKED_PASS = expect_failure ? "XPASS": "PASS";
498
- COOKED_FAIL = expect_failure ? "XFAIL": "FAIL";
499
-
500
- # Enumeration-like constants to remember which kind of plan (if any)
501
- # has been seen. It is important that NO_PLAN evaluates "false" as
502
- # a boolean.
503
- NO_PLAN = 0
504
- EARLY_PLAN = 1
505
- LATE_PLAN = 2
506
-
507
- testno = 0 # Number of test results seen so far.
508
- bailed_out = 0 # Whether a "Bail out!" directive has been seen.
509
-
510
- # Whether the TAP plan has been seen or not, and if yes, which kind
511
- # it is ("early" is seen before any test result, "late" otherwise).
512
- plan_seen = NO_PLAN
513
-
514
- ## --------- ##
515
- ## PARSING ##
516
- ## --------- ##
517
-
518
- is_first_read = 1
519
-
520
- while (1)
521
- {
522
- # Involutions required so that we are able to read the exit status
523
- # from the last input line.
524
- st = getline
525
- if (st < 0) # I/O error.
526
- fatal("I/O error while reading from input stream")
527
- else if (st == 0) # End-of-input
528
- {
529
- if (is_first_read)
530
- abort("in input loop: only one input line")
531
- break
532
- }
533
- if (is_first_read)
534
- {
535
- is_first_read = 0
536
- nextline = $0
537
- continue
538
- }
539
- else
540
- {
541
- curline = nextline
542
- nextline = $0
543
- $0 = curline
544
- }
545
- # Copy any input line verbatim into the log file.
546
- print | "cat >&3"
547
- # Parsing of TAP input should stop after a "Bail out!" directive.
548
- if (bailed_out)
549
- continue
550
-
551
- # TAP test result.
552
- if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/)
553
- {
554
- testno += 1
555
- setup_result_obj($0)
556
- handle_tap_result()
557
- }
558
- # TAP plan (normal or "SKIP" without explanation).
559
- else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/)
560
- {
561
- # The next two lines will put the number of planned tests in $0.
562
- sub("^1\\.\\.", "")
563
- sub("[^0-9]*$", "")
564
- handle_tap_plan($0, "")
565
- continue
566
- }
567
- # TAP "SKIP" plan, with an explanation.
568
- else if ($0 ~ /^1\.\.0+[ \t]*#/)
569
- {
570
- # The next lines will put the skip explanation in $0, stripping
571
- # any leading and trailing whitespace. This is a little more
572
- # tricky in truth, since we want to also strip a potential leading
573
- # "SKIP" string from the message.
574
- sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "")
575
- sub("[ \t]*$", "");
576
- handle_tap_plan(0, $0)
577
- }
578
- # "Bail out!" magic.
579
- # Older versions of prove and TAP::Harness (e.g., 3.17) did not
580
- # recognize a "Bail out!" directive when preceded by leading
581
- # whitespace, but more modern versions (e.g., 3.23) do. So we
582
- # emulate the latter, "more modern" behaviour.
583
- else if ($0 ~ /^[ \t]*Bail out!/)
584
- {
585
- bailed_out = 1
586
- # Get the bailout message (if any), with leading and trailing
587
- # whitespace stripped. The message remains stored in `$0`.
588
- sub("^[ \t]*Bail out![ \t]*", "");
589
- sub("[ \t]*$", "");
590
- # Format the error message for the
591
- bailout_message = "Bail out!"
592
- if (length($0))
593
- bailout_message = bailout_message " " $0
594
- testsuite_error(bailout_message)
595
- }
596
- # Maybe we have too look for dianogtic comments too.
597
- else if (comments != 0)
598
- {
599
- comment = extract_tap_comment($0);
600
- if (length(comment))
601
- report("#", comment);
602
- }
603
- }
604
-
605
- ## -------- ##
606
- ## FINISH ##
607
- ## -------- ##
608
-
609
- # A "Bail out!" directive should cause us to ignore any following TAP
610
- # error, as well as a non-zero exit status from the TAP producer.
611
- if (!bailed_out)
612
- {
613
- if (!plan_seen)
614
- {
615
- testsuite_error("missing test plan")
616
- }
617
- else if (planned_tests != testno)
618
- {
619
- bad_amount = testno > planned_tests ? "many" : "few"
620
- testsuite_error(sprintf("too %s tests run (expected %d, got %d)",
621
- bad_amount, planned_tests, testno))
622
- }
623
- if (!ignore_exit)
624
- {
625
- # Fetch exit status from the last line.
626
- exit_message = get_test_exit_message(nextline)
627
- if (exit_message)
628
- testsuite_error(exit_message)
629
- }
630
- }
631
-
632
- write_test_results()
633
-
634
- exit 0
635
-
636
- } # End of "BEGIN" block.
637
- '
638
-
639
- # TODO: document that we consume the file descriptor 3 :-(
640
- } 3>"$log_file"
641
-
642
- test $? -eq 0 || fatal "I/O or internal error"
643
-
644
- # Local Variables:
645
- # mode: shell-script
646
- # sh-indentation: 2
647
- # eval: (add-hook 'write-file-hooks 'time-stamp)
648
- # time-stamp-start: "scriptversion="
649
- # time-stamp-format: "%:y-%02m-%02d.%02H"
650
- # time-stamp-time-zone: "UTC"
651
- # time-stamp-end: "; # UTC"
652
- # End: