Configure Travis CI, to extend more compile environments.

Revert commit 9e5d57c to support string tpye VERSION.
Add cmake compilation switch to choose language stanard.
diff --git a/.travis.yml b/.travis.yml
index 0554dc9..0f007c3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,18 +9,18 @@
 addons:
   homebrew:
     packages:
-    - clang-format
-    - meson
-    - ninja
+      - clang-format
+      - meson
+      - ninja
     update: false # do not update homebrew by default
   apt:
     sources:
-    - ubuntu-toolchain-r-test
-    - llvm-toolchain-xenial-8
+      - ubuntu-toolchain-r-test
+      - llvm-toolchain-xenial-8
     packages:
-    - clang-format-8
-    - clang-8
-    - valgrind
+      - clang-format-8
+      - clang-8
+      - valgrind
 matrix:
   allow_failures:
     - os: osx
@@ -30,27 +30,74 @@
       osx_image: xcode11
       compiler: clang
       env:
-         CXX="clang++"
-         CC="clang"
-         LIB_TYPE=static
-         BUILD_TYPE=release
+        CXX="clang++"
+        CC="clang"
+        LIB_TYPE=static
+        BUILD_TYPE=release
+        LANGUAGE_STANDARD="11"
       script: ./.travis_scripts/meson_builder.sh
     - name: Linux xenial clang meson static release testing
       os: linux
       dist: xenial
       compiler: clang
       env:
-         CXX="clang++"
-         CC="clang"
-         LIB_TYPE=static
-         BUILD_TYPE=release
+        CXX="clang++"
+        CC="clang"
+        LIB_TYPE=static
+        BUILD_TYPE=release
+        LANGUAGE_STANDARD="11"
       # before_install and install steps only needed for linux meson builds
       before_install:
-          - source ./.travis_scripts/travis.before_install.${TRAVIS_OS_NAME}.sh
+        - source ./.travis_scripts/travis.before_install.${TRAVIS_OS_NAME}.sh
       install:
-           - source ./.travis_scripts/travis.install.${TRAVIS_OS_NAME}.sh
+        - source ./.travis_scripts/travis.install.${TRAVIS_OS_NAME}.sh
       script: ./.travis_scripts/meson_builder.sh
-    - name: Linux xenial gcc cmake coverage
+    - name: Linux xenial gcc-4.6 meson static release with C++03 testing
+      os: linux
+      dist: xenial
+      compiler: gcc
+      addons:
+        apt:
+          sources:
+            - ubuntu-toolchain-r-test
+          packages:
+            - g++-4.6
+      env:
+        CC=gcc-4.6
+        CXX=g++-4.6
+        LIB_TYPE=static
+        BUILD_TYPE=release
+        LANGUAGE_STANDARD="03"
+      # before_install and install steps only needed for linux meson builds
+      before_install:
+        - source ./.travis_scripts/travis.before_install.${TRAVIS_OS_NAME}.sh
+      install:
+        - source ./.travis_scripts/travis.install.${TRAVIS_OS_NAME}.sh
+      script: ./.travis_scripts/meson_builder.sh
+    - name: Linux xenial gcc-4.6 meson static release with C++98 testing
+      os: linux
+      dist: xenial
+      compiler: gcc
+      addons:
+        apt:
+          sources:
+            - ubuntu-toolchain-r-test
+          packages:
+            - g++-4.6
+      env:
+        CC=gcc-4.6
+        CXX=g++-4.6
+        LIB_TYPE=static
+        BUILD_TYPE=release
+        LANGUAGE_STANDARD="98"
+      # before_install and install steps only needed for linux meson builds
+      before_install:
+        - source ./.travis_scripts/travis.before_install.${TRAVIS_OS_NAME}.sh
+      install:
+        - source ./.travis_scripts/travis.install.${TRAVIS_OS_NAME}.sh
+      script: ./.travis_scripts/meson_builder.sh
+
+    - name: Linux xenial gcc-5.4 cmake-3.12 coverage
       os: linux
       dist: xenial
       compiler: gcc
@@ -62,10 +109,77 @@
         BUILD_TYPE=Debug
         LIB_TYPE=shared
         DESTDIR=/tmp/cmake_json_cpp
+        LANGUAGE_STANDARD="11"
       before_install:
-          - pip install --user cpp-coveralls
+        - pip install --user cpp-coveralls
       script: ./.travis_scripts/cmake_builder.sh
       after_success:
-          - coveralls --include src/lib_json --include include
+        - coveralls --include src/lib_json --include include
+    - name: Linux xenial gcc-4.6 cmake-3.12 with C++98 testing
+      os: linux
+      dist: xenial
+      compiler: gcc
+      addons:
+        apt:
+          sources:
+            - ubuntu-toolchain-r-test
+          packages:
+            - g++-4.6
+            - valgrind
+      env:
+        CC=gcc-4.6
+        CXX=g++-4.6
+        DO_MemCheck=ON
+        BUILD_TOOL="Unix Makefiles"
+        LIB_TYPE=static
+        BUILD_TYPE=release
+        DESTDIR=/tmp/cmake_json_cpp
+        LANGUAGE_STANDARD="98"
+      before_install:
+        - sudo apt-get update
+        - sudo apt-get install python3
+      script: ./.travis_scripts/cmake_builder.sh
+    - name: Linux xenial gcc-5.4 cmake-3.12 with C++98 testing
+      os: linux
+      dist: xenial
+      compiler: gcc
+      env:
+        CC=gcc
+        CXX=g++
+        DO_MemCheck=ON
+        BUILD_TOOL="Unix Makefiles"
+        LIB_TYPE=static
+        BUILD_TYPE=release
+        DESTDIR=/tmp/cmake_json_cpp
+        LANGUAGE_STANDARD="98"
+      script: ./.travis_scripts/cmake_builder.sh
+    - name: Linux xenial clang cmake-3.12 with C++11 testing
+      os: linux
+      dist: xenial
+      compiler: clang
+      env:
+        CC=clang
+        CXX=clang++
+        DO_MemCheck=ON
+        BUILD_TOOL="Unix Makefiles"
+        LIB_TYPE=static
+        BUILD_TYPE=release
+        DESTDIR=/tmp/cmake_json_cpp
+        LANGUAGE_STANDARD="11"
+      script: ./.travis_scripts/cmake_builder.sh
+    - name: Linux xenial clang cmake-3.12 with C++98 testing
+      os: linux
+      dist: xenial
+      compiler: gcc
+      env:
+        CC=clang
+        CXX=clang++
+        DO_MemCheck=ON
+        BUILD_TOOL="Unix Makefiles"
+        LIB_TYPE=static
+        BUILD_TYPE=release
+        DESTDIR=/tmp/cmake_json_cpp
+        LANGUAGE_STANDARD="98"
+      script: ./.travis_scripts/cmake_builder.sh
 notifications:
   email: false
diff --git a/.travis_scripts/cmake_builder.sh b/.travis_scripts/cmake_builder.sh
index ccb3331..920985f 100755
--- a/.travis_scripts/cmake_builder.sh
+++ b/.travis_scripts/cmake_builder.sh
@@ -66,7 +66,7 @@
 echo ${CXX}
 ${CXX} --version
 _COMPILER_NAME=`basename ${CXX}`
-if [ "${BUILD_TYPE}" == "shared" ]; then
+if [ "${BUILD_TYPE}" = "shared" ]; then
   _CMAKE_BUILD_SHARED_LIBS=ON
 else
   _CMAKE_BUILD_SHARED_LIBS=OFF
@@ -98,6 +98,14 @@
   export _BUILD_EXE=make
 fi
 
+# Language standard
+# Set default to ON
+if [ "${LANGUAGE_STANDARD}" = "98" ]; then
+  _BUILD_WITH_CXX_11=OFF
+else
+  _BUILD_WITH_CXX_11=ON
+fi
+
 _BUILD_DIR_NAME="build-cmake_${BUILD_TYPE}_${LIB_TYPE}_${_COMPILER_NAME}_${_BUILD_EXE}"
 mkdir -p ${_BUILD_DIR_NAME}
 cd "${_BUILD_DIR_NAME}"
@@ -112,6 +120,7 @@
     -DCMAKE_BUILD_TYPE:STRING=${BUILD_TYPE} \
     -DBUILD_SHARED_LIBS:BOOL=${_CMAKE_BUILD_SHARED_LIBS} \
     -DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR} \
+    -DBUILD_WITH_CXX_11=${_BUILD_WITH_CXX_11} \
     ../
 
   ctest -C ${BUILD_TYPE} -D ExperimentalStart -D ExperimentalConfigure -D ExperimentalBuild ${CTEST_TESTING_OPTION} -D ExperimentalSubmit
diff --git a/.travis_scripts/meson_builder.sh b/.travis_scripts/meson_builder.sh
index 1fdd8f6..6026c7d 100755
--- a/.travis_scripts/meson_builder.sh
+++ b/.travis_scripts/meson_builder.sh
@@ -64,11 +64,15 @@
 _COMPILER_NAME=`basename ${CXX}`
 _BUILD_DIR_NAME="build-${BUILD_TYPE}_${LIB_TYPE}_${_COMPILER_NAME}"
 
+# if LANGUAGE_STANDARD not set or null, set it to 11
+_CPP_STD=${LANGUAGE_STANDARD:="11"}
+
 ./.travis_scripts/run-clang-format.sh
 meson --fatal-meson-warnings --werror --buildtype ${BUILD_TYPE} --default-library ${LIB_TYPE} . "${_BUILD_DIR_NAME}"
-ninja -v -j 2 -C "${_BUILD_DIR_NAME}"
 
 cd "${_BUILD_DIR_NAME}"
+  meson configure -Dcpp_std="c++${_CPP_STD}"
+  ninja -v -j 2 -C ./
   meson test --no-rebuild --print-errorlogs
 
   if [ "${DESTDIR}" != "/usr/local" ]; then
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cd978bb..6993057 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,12 +37,6 @@
     endif()
 endforeach()
 
-# Build the library with C++11 standard support, independent from other including
-# software which may use a different CXX_STANDARD or CMAKE_CXX_STANDARD.
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_EXTENSIONS OFF)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-
 # Ensure that CMAKE_BUILD_TYPE has a value specified for single configuration generators.
 if(NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES)
     set(CMAKE_BUILD_TYPE Release CACHE STRING
@@ -59,19 +53,47 @@
     set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_EXECUTABLE}" CACHE PATH "ccache" FORCE)
 endif()
 
+# Note: project(VERSION XX) - the VERSION here is number, but VERSION in meson is string.
+# Thus, it is better to be consistent.
 project(JSONCPP
-        # Note: version must be updated in three places when doing a release. This
-        # annoying process ensures that amalgamate, CMake, and meson all report the
-        # correct version.
-        # 1. ./meson.build
-        # 2. ./include/json/version.h
-        # 3. ./CMakeLists.txt
-        # IMPORTANT: also update the JSONCPP_SOVERSION!!
-        VERSION 1.9.3 # <major>[.<minor>[.<patch>[.<tweak>]]]
         LANGUAGES CXX)
 
+# Set variable named ${VAR_NAME} to value ${VALUE}
+function(set_using_dynamic_name VAR_NAME VALUE)
+    set( "${VAR_NAME}" "${VALUE}" PARENT_SCOPE)
+endfunction()
+
+# Extract major, minor, patch from version text
+# Parse a version string "X.Y.Z" and outputs
+# version parts in ${OUPUT_PREFIX}_MAJOR, _MINOR, _PATCH.
+# If parse succeeds then ${OUPUT_PREFIX}_FOUND is TRUE.
+macro(jsoncpp_parse_version VERSION_TEXT OUPUT_PREFIX)
+    set(VERSION_REGEX "[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9_]+)?")
+    if( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} )
+        string(REGEX MATCHALL "[0-9]+|-([A-Za-z0-9_]+)" VERSION_PARTS ${VERSION_TEXT})
+        list(GET VERSION_PARTS 0 ${OUPUT_PREFIX}_MAJOR)
+        list(GET VERSION_PARTS 1 ${OUPUT_PREFIX}_MINOR)
+        list(GET VERSION_PARTS 2 ${OUPUT_PREFIX}_PATCH)
+        set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" TRUE )
+    else( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} )
+        set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" FALSE )
+    endif()
+endmacro()
+
+# Note: version must be updated in three places when doing a release. This
+# annoying process ensures that amalgamate, CMake, and meson all report the
+# correct version.
+# 1. ./meson.build
+# 2. ./include/json/version.h
+# 3. ./CMakeLists.txt
+# IMPORTANT: also update the JSONCPP_SOVERSION!!
+set( JSONCPP_VERSION 00.11.0 )
+set( JSONCPP_SOVERSION 23 )
+jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION )
 message(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}")
-set(JSONCPP_SOVERSION 23)
+#if(NOT JSONCPP_VERSION_FOUND)
+#    message(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z")
+#endif(NOT JSONCPP_VERSION_FOUND)
 
 option(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" ON)
 option(JSONCPP_WITH_POST_BUILD_UNITTEST "Automatically run unit-tests as a post build step" ON)
@@ -81,6 +103,36 @@
 option(JSONCPP_WITH_CMAKE_PACKAGE "Generate and install cmake package files" ON)
 option(JSONCPP_WITH_EXAMPLE "Compile JsonCpp example" OFF)
 option(BUILD_SHARED_LIBS "Build jsoncpp_lib as a shared library." OFF)
+option(BUILD_WITH_CXX_11 "Build jsoncpp_lib with C++11 standard." ON)
+
+##  To compatible with C++0x and C++1x
+set(CMAKE_MINIMUN_CXX_STANDARD 98)
+if(CMAKE_COMPILER_IS_GNUCXX)
+  set(CMAKE_CXX_COMPILER "/usr/bin/g++")
+  execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CXX_VERSION)
+  if(CXX_VERSION VERSION_GREATER 4.8.0)
+      if(BUILD_WITH_CXX_11)
+          set(CMAKE_CXX_STANDARD 11)
+          message(STATUS "Compiled with C++11(or newer) standard!")
+      else()
+          set(CMAKE_CXX_STANDARD 98)
+          message(STATUS "Compiled with C++0x standard!")
+      endif()
+  else()
+      set(CMAKE_CXX_STANDARD 98)
+      message(STATUS "Compiled with C++0x standard!")
+  endif()
+endif()
+
+if (NOT CMAKE_CXX_STANDARD)
+  if (BUILD_WITH_CXX_11)
+    set(CMAKE_CXX_STANDARD 11)
+    message(STATUS "Compiled with C++1x standard!")
+  else()
+    set(CMAKE_CXX_STANDARD 98)
+    message(STATUS "Compiled with C++0x standard!")
+  endif()
+endif()
 
 # Adhere to GNU filesystem layout conventions
 include(GNUInstallDirs)
@@ -127,7 +179,7 @@
     # not yet ready for -Wsign-conversion
 
     if(JSONCPP_WITH_STRICT_ISO)
-        add_compile_options(-Wpedantic)
+        add_compile_options(-Wall)
     endif()
     if(JSONCPP_WITH_WARNING_AS_ERROR)
         add_compile_options(-Werror=conversion)
@@ -160,7 +212,7 @@
         DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp
         FILE        jsoncppConfig.cmake)
     write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/jsoncppConfigVersion.cmake"
-        VERSION ${PROJECT_VERSION}
+        VERSION ${JSONCPP_VERSION}
         COMPATIBILITY SameMajorVersion)
     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jsoncppConfigVersion.cmake
         DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp)
diff --git a/meson.build b/meson.build
index 975d56c..040a6bd 100644
--- a/meson.build
+++ b/meson.build
@@ -9,7 +9,7 @@
   # 2. /include/json/version.h
   # 3. /CMakeLists.txt
   # IMPORTANT: also update the SOVERSION!!
-  version : '1.9.3',
+  version : '00.11.0',
   default_options : [
     'buildtype=release',
     'cpp_std=c++11',
diff --git a/src/lib_json/CMakeLists.txt b/src/lib_json/CMakeLists.txt
index b330665..6686c4d 100644
--- a/src/lib_json/CMakeLists.txt
+++ b/src/lib_json/CMakeLists.txt
@@ -90,6 +90,7 @@
 # Specify compiler features required when compiling a given target.
 # See https://cmake.org/cmake/help/v3.1/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html#prop_gbl:CMAKE_CXX_KNOWN_FEATURES
 # for complete list of features available
+if(CMAKE_CXX_STANDARD EQUAL "11")
 target_compile_features(jsoncpp_lib PUBLIC
         cxx_std_11 # Compiler mode is aware of C++ 11.
         #MSVC 1900 cxx_alignas # Alignment control alignas, as defined in N2341.
@@ -136,6 +137,10 @@
         cxx_variadic_macros # Variadic macros, as defined in N1653.
         cxx_variadic_templates # Variadic templates, as defined in N2242.
 )
+else()
+    set(CMAKE_CXX_STANDARD 98)
+    target_compile_features(jsoncpp_lib PUBLIC)
+endif()
 
 install(TARGETS jsoncpp_lib ${INSTALL_EXPORT}
     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}