From: Enblend <enb...@li...> - 2010-08-12 17:32:56
|
changeset 07af3b90fef0 in /hgrepo/e/en/enblend/enblend details: http://enblend.hg.sourceforge.net/hgweb/enblend/enblend/hgrepo/e/en/enblend/enblend?cmd=changeset;node=07af3b90fef0 description: Make shell scripts (especially "html2xhtml") a bit more portable. diffstat: VERSION | 2 +- configure.in | 121 ++++++++++++++------------------------------------ doc/Makefile.am | 20 ++++---- doc/enblend.info | 0 doc/enfuse.info | 0 doc/html2xhtml | 98 +++++++++++++++++++++-------------------- doc/versenblend.texi | 4 +- doc/versenfuse.texi | 4 +- 8 files changed, 99 insertions(+), 150 deletions(-) diffs (637 lines): diff -r f2c326ffb36d -r 07af3b90fef0 VERSION --- a/VERSION Wed Aug 11 19:06:14 2010 +0200 +++ b/VERSION Thu Aug 12 19:06:16 2010 +0200 @@ -1,1 +1,1 @@ -4.1-5a9da370be6b +4.1-f2c326ffb36d diff -r f2c326ffb36d -r 07af3b90fef0 configure.in --- a/configure.in Wed Aug 11 19:06:14 2010 +0200 +++ b/configure.in Thu Aug 12 19:06:16 2010 +0200 @@ -45,17 +45,10 @@ [use OpenEXR @<:@default=check@:>@])], [], [with_openexr=check]) -AS_IF([test "x$with_openexr" = xNO \ - -o "x$with_openexr" = xNo \ - -o "x$with_openexr" = xno], +AS_IF([test "$with_openexr" = no], [AC_MSG_NOTICE([disabling OpenEXR]) have_exr=no], - [if test "x$with_openexr" = xyes \ - -o "x$with_openexr" = "xYES" \ - -o "x$with_openexr" = "xYes" \ - -o "x$with_openexr" = "xcheck" \ - -o "x$with_openexr" = "xCHECK" \ - -o "x$with_openexr" = "xCheck"; then + [if test "$with_openexr" = yes || test "$with_openexr" = check; then AC_MSG_RESULT(yes) PKG_CHECK_MODULES(OPENEXR, OpenEXR >= 1.0, [AC_DEFINE(HasEXR, 1, [Define if you have EXR library]) @@ -70,7 +63,7 @@ have_exr=no fi]) -if test "x$GXX" = xyes; then +if test "$GXX" = yes; then # Fixes SourceForge bug id 2121647 on some systems with newer GCCs. CXXFLAGS="$CXXFLAGS --param inline-unit-growth=60" fi @@ -88,11 +81,9 @@ [force usage of Apple OpenGL framework (Mac OS X only)])]) can_use_gpu=no no_gpu_reason= -if test "x$gpu_support" = "xyes" \ - -o "x$gpu_support" = "xYES" \ - -o "x$gpu_support" = "xYes"; then +if test "$gpu_support" = yes; then missing_for_gpu= - if test "X$with_apple_opengl_framework" = "Xyes"; then + if test "$with_apple_opengl_framework" = yes; then AC_DEFINE([HAVE_APPLE_OPENGL_FRAMEWORK], [1], [Use the Apple OpenGL framework.]) GL_LIBS="-framework OpenGL -framework AGL" @@ -112,13 +103,13 @@ AX_CHECK_GLU AX_CHECK_GLUT fi - if test "X$no_gl" = Xyes; then + if test "$no_gl" = yes; then missing_for_gpu="$missing_for_gpu GL" AC_MSG_WARN([[GL not found, disabling GPU mode]]) - elif test "X$no_glu" = Xyes; then + elif test "$no_glu" = yes; then missing_for_gpu="$missing_for_gpu GLU" AC_MSG_WARN([[GLU not found, disabling GPU mode]]) - elif test "X$no_glut" = Xyes; then + elif test "$no_glut" = yes; then missing_for_gpu="$missing_for_gpu GLUT" AC_MSG_WARN([[GLUT not found, disabling GPU mode]]) else @@ -145,11 +136,11 @@ AC_ARG_WITH(dmalloc, [ --with-dmalloc use dmalloc, as in http://www.dmalloc.com/dmalloc.tar.gz], - [if test "x$withval" = xyes; then + [if test "$withval" = yes; then AC_MSG_RESULT(yes) AC_DEFINE(WITH_DMALLOC, 1, [Define if using the dmalloc debugging malloc package]) - if test x$acx_pthread_ok = xyes; then + if test $acx_pthread_ok = yes; then LIBS="$LIBS -ldmallocthcxx" enable_dmalloc="yes (thread aware)" else @@ -206,13 +197,9 @@ [use Boost filesystem library @<:@default=check@:>@])], [], [with_boost_filesystem=check]) -AS_IF([test "x$with_boost_filesystem" = xNO \ - -o "x$with_boost_filesystem" = xNo \ - -o "x$with_boost_filesystem" = xno], +AS_IF([test "$with_boost_filesystem" = no], [AC_MSG_NOTICE([disabling use of Boost "filesystem" library])], - [AS_IF([test "x$with_boost_filesystem" = xYES \ - -o "x$with_boost_filesystem" = xYes \ - -o "x$with_boost_filesystem" = xyes], + [AS_IF([test "$with_boost_filesystem" = yes], [AC_MSG_NOTICE([forcing use of Boost "filesystem" library]) AC_DEFINE(HAVE_BOOST_FILESYSTEM, 1, [Define if you have boost/filesystem.hpp]) @@ -220,15 +207,13 @@ [AC_CHECK_HEADER(boost/filesystem.hpp, [], AC_MSG_NOTICE([Boost "filesystem" header is missing.])) - if test x$ac_cv_header_boost_filesystem_hpp = xyes; then + if test "$ac_cv_header_boost_filesystem_hpp" = yes; then found_boost_filesystem_lib=no candidates="-lboost_filesystem" - if test x$acx_pthread_ok = xyes; then + if test "$acx_pthread_ok" = yes; then candidates="-lboost_filesystem-mt $candidates" fi - if test "x$with_boost_filesystem" != xCHECK \ - -a "x$with_boost_filesystem" != xCheck \ - -a "x$with_boost_filesystem" != xcheck; then + if test "$with_boost_filesystem" != check; then candidates="$with_boost_filesystem $candidates" fi LIBS_ORIG=$LIBS @@ -253,8 +238,8 @@ done LIBS=$LIBS_ORIG fi - if test x$ac_cv_header_boost_filesystem_hpp = xyes \ - -a x$found_boost_filesystem_lib = xyes; then + if test "$ac_cv_header_boost_filesystem_hpp" = yes && + test "$found_boost_filesystem_lib" = yes; then AC_DEFINE(HAVE_BOOST_FILESYSTEM, 1, [Define if you have boost/filesystem.hpp]) else @@ -300,7 +285,7 @@ AC_C99_FUNC_LRINTF AX_WITH_PROG(PERL, perl, false, []) -if test "x$PERL" = xfalse; then +if test "$PERL" = false; then AC_MSG_ERROR(cannot find perl) fi AX_PROG_PERL_MODULES(Sys::Hostname, [], @@ -309,7 +294,7 @@ AC_MSG_WARN(missing Perl module Time::Zone)) # Documentation -if test $cross_compiling = no; then +if test "$cross_compiling" = no; then AM_MISSING_PROG(HELP2MAN, help2man) else HELP2MAN=: @@ -330,7 +315,7 @@ missing_for_doc="$missing_for_doc IO::Handle"]) AX_WITH_PROG(GNUPLOT, gnuplot, false, []) -if test "x$GNUPLOT" = xfalse; then +if test "$GNUPLOT" = false; then AC_MSG_WARN(cannot find gnuplot; will not be able to build documentation) can_build_doc=no missing_for_doc="$missing_for_doc gnuplot" @@ -352,7 +337,7 @@ fi; \ done IFS="$orig_ifs" -if test $have_freesans_font != yes; then +if test "$have_freesans_font" != yes; then AC_MSG_WARN(cannot find font "FreeSans.ttf" anywhere in GDFONTPATH; text in the documentation's figures could look strange) fi @@ -360,7 +345,7 @@ fig2dev, fig2dev, false) -if test "x$FIG2DEV" = xfalse; then +if test "$FIG2DEV" = false; then AC_MSG_WARN(cannot find fig2dev; will not be able to build documentation) can_build_doc=no missing_for_doc="$missing_for_doc fig2dev" @@ -370,7 +355,7 @@ pngtopnm, pngtopnm, false) -if test "x$PNGTOPNM" = xfalse; then +if test "$PNGTOPNM" = false; then AC_MSG_NOTICE(cannot find pngtopnm; will not be able to add transparency to all PNG images) can_build_doc=no missing_for_doc="$missing_for_doc pngtopnm" @@ -380,7 +365,7 @@ pnmtopng, pnmtopng, false) -if test "x$PNMTOPNG" = xfalse; then +if test "$PNMTOPNG" = false; then AC_MSG_NOTICE(cannot find pnmtopng; will not be able to add transparency to all PNG images) can_build_doc=no missing_for_doc="$missing_for_doc pnmtopng" @@ -394,47 +379,17 @@ makeinfo, makeinfo, false) -if test "x$MAKEINFO" = xfalse; then +if test "$MAKEINFO" = false; then AC_MSG_WARN(cannot find makeinfo; will not be able to build documentation) can_build_doc=no missing_for_doc="$missing_for_doc makeinfo" fi -dnl AC_CHECK_PROG(TEXI2DVI, -dnl texi2dvi, -dnl texi2dvi, -dnl false) -dnl if test "x$TEXI2DVI" = xfalse; then -dnl AC_MSG_WARN(cannot find texi2dvi; will not be able to build documentation) -dnl can_build_doc=no -dnl missing_for_doc="$missing_for_doc texi2dvi" -dnl fi - -dnl AC_CHECK_PROG(TEXI2PDF, -dnl texi2pdf, -dnl texi2pdf, -dnl false) -dnl if test "x$TEXI2PDF" = xfalse; then -dnl AC_MSG_WARN(cannot find texi2pdf; will not be able to build documentation) -dnl can_build_doc=no -dnl missing_for_doc="$missing_for_doc texi2pdf" -dnl fi - -dnl AC_CHECK_PROG(DVIPS, -dnl dvips, -dnl dvips, -dnl false) -dnl if test "x$DVIPS" = xfalse; then -dnl AC_MSG_WARN(cannot find dvips; will not be able to build documentation) -dnl can_build_doc=no -dnl missing_for_doc="$missing_for_doc dvips" -dnl fi - AC_CHECK_PROG(TIDY, tidy, tidy, false) -if test "x$TIDY" = xfalse; then +if test "$TIDY" = false; then AC_MSG_WARN(cannot find tidy; will not be able to build XHTML documentation) can_build_doc=no missing_for_doc="$missing_for_doc tidy" @@ -444,14 +399,14 @@ xmllint, xmllint, false) -if test "x$XMLLINT" = xfalse; then +if test "$XMLLINT" = false; then AC_MSG_WARN(cannot find xmllint; will not be able to build XHTML documentation) can_build_doc=no missing_for_doc="$missing_for_doc xmllint" fi -AM_CONDITIONAL([BUILD_DOC], [test $can_build_doc = yes]) -if test $can_build_doc = no; then +AM_CONDITIONAL([BUILD_DOC], [test "$can_build_doc" = yes]) +if test "$can_build_doc" = no; then no_doc_reason=", because of missing$missing_for_doc" fi @@ -462,9 +417,7 @@ [split documentation @<:@default=yes@:>@]), [split_doc=$enableval], [split_doc=$split_doc_default]) -if test "x$split_doc" = "xyes" \ - -o "x$split_doc" = "xYES" \ - -o "x$split_doc" = "xYes"; then +if test "$split_doc" = yes; then AM_MAKEINFOFLAGS="$AM_MAKEINFOFLAGS" AM_MAKEINFOHTMLFLAGS="$AM_MAKEINFOHTMLFLAGS" AC_MSG_RESULT(yes) @@ -488,9 +441,7 @@ [turn on debugging @<:@default=no@:>@]), [enable_debug=$enableval], [enable_debug=$debug_default]) -if test "x$enable_debug" = "xyes" \ - -o "x$enable_debug" = "xYES" \ - -o "x$enable_debug" = "xYes"; then +if test "$enable_debug" = yes; then CXXFLAGS="$CXXFLAGS -g -DDEBUG -Wall" AC_MSG_RESULT(yes) enable_debug=yes @@ -507,9 +458,7 @@ [allow for processing of large images @<:@default=yes@:>@]), [enable_image_cache=$enableval], [enable_image_cache=$image_cache_default]) -if test "x$enable_image_cache" = "xyes" \ - -o "x$enable_image_cache" = "xYES" \ - -o "x$enable_image_cache" = "xYes"; then +if test "$enable_image_cache" = yes; then AC_DEFINE(CACHE_IMAGES, 1, [Define if you want to compile Enblend and Enfuse with image cache]) AC_MSG_RESULT(yes) @@ -526,9 +475,7 @@ [compile with OpenMP @<:@default=no@:>@]), [enable_openmp=$enableval], [enable_openmp=$openmp_default]) -if test "x$enable_openmp" = "xyes" \ - -o "x$enable_openmp" = "xYES" \ - -o "x$enable_openmp" = "xYes"; then +if test "$enable_openmp" = yes; then AC_MSG_RESULT(yes) AX_OPENMP([enable_openmp=yes]) CFLAGS="$CFLAGS $OPENMP_CFLAGS" @@ -538,7 +485,7 @@ AC_MSG_RESULT(no) enable_openmp=no else - if test $enable_image_cache = yes; then + if test "$enable_image_cache" = yes; then AC_MSG_WARN([[image cache and OpenMP support are mutually exclusive]]) AC_MSG_WARN([[only configure like this if you want to develop a reentrant image cache]]) warnings=`echo -e "$warnings\n WARNING: Image cache and OpenMP are both enabled! You are a developer, aren't you?"` diff -r f2c326ffb36d -r 07af3b90fef0 doc/Makefile.am --- a/doc/Makefile.am Wed Aug 11 19:06:14 2010 +0200 +++ b/doc/Makefile.am Thu Aug 12 19:06:16 2010 +0200 @@ -112,7 +112,7 @@ .PHONY: validate-xhtml validate-xhtml: $(HTMLS:.html=.xhtml) for x in $(HTMLS); do \ - xhtml=$${x/%.html/.xhtml}; \ + xhtml=`basename $$x .html`.xhtml; \ if test -d $$xhtml; then \ for y in $$xhtml/*.xhtml; do \ $(XMLLINT) $(XMLLINT_FLAGS) $$y; \ @@ -127,9 +127,9 @@ @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" for x in $(HTMLS); do \ - xhtml=$${x/%.html/.xhtml}; \ + xhtml=`basename $$x .html`.xhtml; \ if test -d $$x; then \ - test -d "$(DESTDIR)$(htmldir)/$$xhtml" || mkdir "$(DESTDIR)$(htmldir)/$$xhtml"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$xhtml"; \ $(INSTALL_DATA) $$xhtml/* "$(DESTDIR)$(htmldir)/$$xhtml"; \ else \ $(INSTALL_DATA) *.xhtml *.png "$(DESTDIR)$(htmldir)"; \ @@ -140,12 +140,11 @@ uninstall-xhtml: @$(NORMAL_UNINSTALL) for x in $(HTMLS); do \ - xhtml=$${x/%.html/.xhtml}; \ + xhtml=`basename $$x .html`.xhtml; \ if test -d $$x; then \ - test -d "$(DESTDIR)$(htmldir)/$$xhtml" || mkdir "$(DESTDIR)$(htmldir)/$$xhtml"; \ - echo rm -rf "$(DESTDIR)$(htmldir)/$$xhtml"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$xhtml"; \ else \ - echo rm -rf "$(DESTDIR)$(htmldir)/*.xhtml" "$(DESTDIR)$(htmldir)/*.png"; \ + rm -rf "$(DESTDIR)$(htmldir)/*.xhtml" "$(DESTDIR)$(htmldir)/*.png"; \ fi; \ done @@ -170,11 +169,12 @@ -e '/---END-TEXT---/,$$d' \ -e 's/^# \?//' < $< > $@ +FIG2PNGFLAGS = -F .fig.png: - if test "x$PNGTOPNM" = xfalse -o "x$PNMTOPNG" = xfalse; then \ - $(FIG2DEV) -L png -F $< > $@; \ + if test "$(PNGTOPNM)" = false || test "$(PNMTOPNG)" = false; then \ + $(FIG2DEV) -L png $(FIG2PNGFLAGS) $< > $@; \ else \ - $(FIG2DEV) -L png -F $< | $(PNGTOPNM) | $(PNMTOPNG) -transparent white > $@; \ + $(FIG2DEV) -L png $(FIG2PNGFLAGS) $< | $(PNGTOPNM) | $(PNMTOPNG) -transparent white > $@; \ fi .fig.eps: diff -r f2c326ffb36d -r 07af3b90fef0 doc/enblend.info Binary file doc/enblend.info has changed diff -r f2c326ffb36d -r 07af3b90fef0 doc/enfuse.info Binary file doc/enfuse.info has changed diff -r f2c326ffb36d -r 07af3b90fef0 doc/html2xhtml --- a/doc/html2xhtml Wed Aug 11 19:06:14 2010 +0200 +++ b/doc/html2xhtml Thu Aug 12 19:06:16 2010 +0200 @@ -1,12 +1,13 @@ #! /bin/sh +#! /bin/dash -x # This file is part of Enblend. # Licence details can be found in the file COPYING. -# name: html2xhtml -# synopsis: Convert the HTML output of makeinfo(1) to valid XHTML -# author: Dr. Christoph L. Spiel -# bash version: 3.2.39 +# name: html2xhtml +# synopsis: Convert the HTML output of makeinfo(1) to valid XHTML +# author: Dr. Christoph L. Spiel +# shell version: bash-3.2.39, dash-0.5.4 readonly global__command=`basename $0` @@ -18,7 +19,14 @@ global__xmllint_flags="-valid --noblanks --noent --nsclean --format --encode iso-8859-1" -function convert_with_tidy +failwith_error () +{ + echo "$global__command: $@" 1>&2 + exit 1 +} + + +convert_with_tidy () { # We add the system identifier # "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" @@ -46,7 +54,7 @@ # elements that make an XML parser puke and 2/ we have intentionally # introduced pseudo MathML tags to coerce tidy(1) into formatting them # inline. These tags must be reverted. -function postprocess_tidy_output +postprocess_tidy_output () { $global__sed \ -e '1,9s|""|"http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd"|' \ @@ -72,31 +80,31 @@ # Makeinfo(1) generates indirect-reference files for each float. # Their filenames start with "Table_" or "Figure_*", which is how we # distinguish them from the html files making up the body. -function is_indirect_reference_file +is_indirect_reference_file () { local filename=$1 - test -z "${filename%Table_*}" -o -z "${filename%Figure_*}" + test -z "${filename%Table_*}" || test -z "${filename%Figure_*}" } # Convert all html files iside the given directory. -function convert_directory +convert_directory () { local html_directory=$1 - local xhtml_directory=${html_directory/%.html/.xhtml} + local xhtml_directory=`basename $html_directory .html`.xhtml - test -d $xhtml_directory || mkdir $xhtml_directory + mkdir -p $xhtml_directory cp *.png $xhtml_directory ( - cd $html_directory + cd $html_directory || failwith_error "cannot cd to \"$html_directory\"" ls -1 *.html | \ $global__sed -ne 's#\(.*\)\.html#s|\1\\.html|\1.xhtml|g#p' > ,fix-file-refs.sed ) - echo -n '' > $html_directory/,fix-indir.sed + printf '' > $html_directory/,fix-indir.sed for html_file in $html_directory/*.html; do local html_base=`basename $html_file` @@ -111,7 +119,7 @@ local html_base=`basename $html_file` if ! is_indirect_reference_file $html_base; then - local xhtml_file=$xhtml_directory/${html_base/%.html/.xhtml} + local xhtml_file=$xhtml_directory/`basename $html_base .html`.xhtml convert_with_tidy $html_file | \ postprocess_tidy_output | \ @@ -127,10 +135,10 @@ # Convert a single standalone html file. -function convert_file +convert_file () { local html_file=$1 - local xhtml_file=${html_file/%.html/.xhtml} + local xhtml_file=`basename $html_file .html`.xhtml convert_with_tidy $html_file | \ postprocess_tidy_output | \ @@ -139,106 +147,99 @@ } -function convert_html_to_xhtml +convert_html_to_xhtml () { local html=$1 if test -d "$html"; then - convert_directory "$html" + convert_directory $html else - convert_file "$html" + convert_file $html fi } # We prefer to check for all binaries before we get an unpleasant # surprise in one of the pipes. -function check_binaries +check_binaries () { for v in global__sed global__tidy global__xmllint; do eval x=\$$v - test -z "$x" && { - echo "$global__command: utility \"${v#global__}\" is not defined" 1>&2 - exit 1 - } - $x --version > /dev/null 2>&1 || { - echo "$global__command: cannot execute \"$x\" for \"${v#global__}\"" 1>&2 - exit 1 - } + test -z "$x" && failwith_error "variable \"${v#global__}\" is not defined" + $x --version > /dev/null 2>&1 || \ + failwith_error "cannot execute \"$x\" for \"${v#global__}\"" done } -function parse_options +parse_options () { - let n=0 + : $((n=0)) - while [ -n "$1" ]; do + while test -n "$1"; do case "$1" in --document-version=*) - global__document_version="${1/--document-version=/}" + global__document_version="${1#--document-version=}" ;; -h | --help) show_help exit 0 ;; --tidy-flags=*) - global__tidy_flags="$global__tidy_flags ${1/--tidy-flags=/}" + global__tidy_flags="$global__tidy_flags ${1#--tidy-flags=}" ;; --xmllint-flags=*) - global__xmllint_flags="$global__xmllint_flags ${1/--xmllint-flags=/}" + global__xmllint_flags="$global__xmllint_flags ${1#--xmllint-flags=}" ;; --) shift - let ++n + : $((n=n+1)) break 2 ;; --*) - echo "unknown long option \"$1\"" 1>&2 - exit 1 + failwith_error "unknown long option \"$1\"" ;; -*) - echo "unknown short option \"$1\"" 1>&2 - exit 1 + failwith_error "unknown short option \"$1\"" ;; *) break 2 esac shift - let ++n + : $((n=n+1)) done return $n } -function show_help +show_help () { - cat <<END_OF_HELP + printf %s "\ Usage: $global__command_name [OPTIONS] [HTML...] Convert HTML files or directories to XHTML. Options: --document-version=VERSION set meta tag for documentation's version - [default: "$global__document_version"] + [default: \"$global__document_version\"] --tidy-flags=FLAGS set flags for tidy(1) --xmllint-flags=FLAGS set flags for xmllint(1) -h, --help show this help screen Influential environment variables: - SED name of sed binary [default: "$global__sed"] - TIDY name of tidy binary [default: "$global__tidy"] - XMLLINT name of xmllint binary [default: "$global__xmllint"] -END_OF_HELP + SED name of sed binary [default: \"$global__sed\"] + TIDY name of tidy binary [default: \"$global__tidy\"] + XMLLINT name of xmllint binary [default: \"$global__xmllint\"] +" } -function main +main () { parse_options "$@" shift $? # shift away all options @@ -252,3 +253,4 @@ main "$@" +exit 0 diff -r f2c326ffb36d -r 07af3b90fef0 doc/versenblend.texi --- a/doc/versenblend.texi Wed Aug 11 19:06:14 2010 +0200 +++ b/doc/versenblend.texi Thu Aug 12 19:06:16 2010 +0200 @@ -1,4 +1,4 @@ @set UPDATED 31 May 2010 @set UPDATED-MONTH May 2010 -@set EDITION 4.1-5a9da370be6b -@set VERSION 4.1-5a9da370be6b +@set EDITION 4.1-f2c326ffb36d +@set VERSION 4.1-f2c326ffb36d diff -r f2c326ffb36d -r 07af3b90fef0 doc/versenfuse.texi --- a/doc/versenfuse.texi Wed Aug 11 19:06:14 2010 +0200 +++ b/doc/versenfuse.texi Thu Aug 12 19:06:16 2010 +0200 @@ -1,4 +1,4 @@ @set UPDATED 10 August 2010 @set UPDATED-MONTH August 2010 -@set EDITION 4.1-5a9da370be6b -@set VERSION 4.1-5a9da370be6b +@set EDITION 4.1-f2c326ffb36d +@set VERSION 4.1-f2c326ffb36d |