(command.CommandList
  children: [
    (C {(set)} {(-xe)})
    (C {(Lit_Other ':')} 
      {
        (word_part.BracedVarSub
          token: <VSub_Name OS>
          suffix_op: 
            (suffix_op.StringUnary
              op_id: VTest_ColonQMark
              arg_word: {(DQ ("Environment variable 'OS' must be set (e.g., OS=ubuntu:14.04)"))}
            )
          spids: [21 27]
        )
      }
    )
    (C {(Lit_Other ':')} 
      {
        (word_part.BracedVarSub
          token: <VSub_Name BUILDTOOL>
          suffix_op: 
            (suffix_op.StringUnary
              op_id: VTest_ColonQMark
              arg_word: 
                {(DQ ("Environment variable 'BUILDTOOL' must be set (e.g., BUILDTOOL=autotools)"))}
            )
          spids: [31 37]
        )
      }
    )
    (C {(Lit_Other ':')} 
      {
        (word_part.BracedVarSub
          token: <VSub_Name COMPILER>
          suffix_op: 
            (suffix_op.StringUnary
              op_id: VTest_ColonQMark
              arg_word: {(DQ ("Environment variable 'COMPILER' must be set (e.g., COMPILER=gcc)"))}
            )
          spids: [41 47]
        )
      }
    )
    (C {(Lit_Other ':')} 
      {
        (word_part.BracedVarSub
          token: <VSub_Name CONFIGURATION>
          suffix_op: 
            (suffix_op.StringUnary
              op_id: VTest_ColonQMark
              arg_word: 
                {
                  (DQ 
                    (
"Environment variable 'CONFIGURATION' must be set (e.g., CONFIGURATION='--enable-libevent --enable-ssl')"
                    )
                  )
                }
            )
          spids: [51 57]
        )
      }
    )
    (C {(Lit_Other ':')} 
      {
        (word_part.BracedVarSub
          token: <VSub_Name ENVIRONMENT>
          suffix_op: 
            (suffix_op.StringUnary
              op_id: VTest_ColonQMark
              arg_word: 
                {
                  (DQ 
                    (
"Environment variable 'ENVIRONMENT' must be set (e.g., ENVIRONMENT='GLOG_v=1 MESOS_VERBOSE=1')"
                    )
                  )
                }
            )
          spids: [61 67]
        )
      }
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:MESOS_DIRECTORY spids:[73])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (command.AndOr
                        ops: [Op_DAmp]
                        children: [
                          (C {(cd)} 
                            {
                              (DQ 
                                (word_part.CommandSubPart
                                  command_list: 
                                    (command.CommandList
                                      children: [(C {(dirname)} {(DQ ($ VSub_Number '$0'))})]
                                    )
                                  left_token: <Left_CommandSub '$('>
                                  spids: [79 87]
                                ) (/..)
                              )
                            }
                          )
                          (C {(pwd)})
                        ]
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [74 95]
              )
            }
          spids: [73]
        )
      ]
      spids: [73]
    )
    (C {(cd)} {(DQ ($ VSub_DollarName '$MESOS_DIRECTORY'))})
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:DOCKERFILE spids:[113])
          op: Equal
          rhs: {(DQ (Dockerfile))}
          spids: [113]
        )
      ]
      spids: [113]
    )
    (C {(rm)} {(-f)} {($ VSub_DollarName '$DOCKERFILE')})
    (command.FuncDef
      name: append_dockerfile
      body: 
        (command.BraceGroup
          children: [
            (command.SimpleCommand
              words: [{(echo)} {($ VSub_Number '$1')}]
              redirects: [
                (redir.Redir
                  op: <Redir_DGreat '>>'>
                  fd: 16777215
                  arg_word: {($ VSub_DollarName '$DOCKERFILE')}
                )
              ]
            )
          ]
          spids: [136]
        )
      spids: [132 135]
    )
    (command.Case
      to_match: {($ VSub_DollarName '$OS')}
      arms: [
        (case_arm
          pat_list: [{(centos) (Lit_Other '*')}]
          action: [
            (C {(append_dockerfile)} {(DQ ('FROM ') ($ VSub_DollarName '$OS'))})
            (C {(append_dockerfile)} {(DQ ('RUN yum install -y which'))})
            (C {(append_dockerfile)} {(DQ ("RUN yum groupinstall -y 'Development Tools'"))})
            (C {(append_dockerfile)} {(DQ ('RUN yum install -y epel-release'))})
            (C {(append_dockerfile)} {(DQ ('RUN yum install -y clang git maven cmake'))})
            (C {(append_dockerfile)} 
              {
                (DQ 
                  (
'RUN yum install -y java-1.8.0-openjdk-devel python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-utils-devel libevent-devel libev-devel'
                  )
                )
              }
            )
            (C {(append_dockerfile)} {(DQ ('RUN adduser mesos'))})
          ]
          spids: [161 163 239 16777215]
        )
        (case_arm
          pat_list: [{(Lit_Other '*') (ubuntu) (Lit_Other '*')}]
          action: [
            (C {(append_dockerfile)} {(DQ ('FROM ') ($ VSub_DollarName '$OS'))})
            (C {(append_dockerfile)} {(DQ ('RUN rm -rf /var/lib/apt/lists/*'))})
            (command.AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} 
                  {
                    (DQ 
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(uname)} {(-m)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [293 297]
                      )
                    )
                  } {(Lit_Other '=')} {(DQ (x86_64))} {(Lit_Other ']')}
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:CLANG_PKG spids:[310])
                      op: Equal
                      rhs: {(clang-3.5)}
                      spids: [310]
                    )
                  ]
                  spids: [310]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:CLANG_PKG spids:[315])
                      op: Equal
                      rhs: (word.EmptyWord)
                      spids: [315]
                    )
                  ]
                  spids: [315]
                )
              ]
            )
            (C {(append_dockerfile)} {(DQ ('RUN apt-get update'))})
            (C {(append_dockerfile)} 
              {
                (DQ ('RUN apt-get -y install build-essential ') ($ VSub_DollarName '$CLANG_PKG') 
                  (' git maven autoconf libtool cmake')
                )
              }
            )
            (C {(append_dockerfile)} 
              {
                (DQ 
                  (
'RUN apt-get -y install openjdk-7-jdk python-dev libcurl4-nss-dev libsasl2-dev libapr1-dev libsvn-dev libevent-dev libev-dev'
                  )
                )
              }
            )
            (C {(append_dockerfile)} {(DQ ('RUN apt-get -y install wget curl sed'))})
            (C {(append_dockerfile)} {(DQ ("RUN adduser --disabled-password --gecos '' mesos"))})
          ]
          spids: [242 245 360 16777215]
        )
        (case_arm
          pat_list: [{(Lit_Other '*')}]
          action: [
            (C {(echo)} {(DQ ('Unknown OS ') ($ VSub_DollarName '$OS'))})
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [363 364 380 16777215]
        )
      ]
      spids: [154 158 382]
    )
    (command.Case
      to_match: {($ VSub_DollarName '$COMPILER')}
      arms: [
        (case_arm
          pat_list: [{(gcc)}]
          action: [
            (C {(append_dockerfile)} {(DQ ('ENV CC gcc'))})
            (C {(append_dockerfile)} {(DQ ('ENV CXX g++'))})
          ]
          spids: [392 393 410 16777215]
        )
        (case_arm
          pat_list: [{(clang)}]
          action: [
            (command.Case
              to_match: {($ VSub_DollarName '$OS')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (ubuntu) (Lit_Other '*')}]
                  action: [
                    (C {(append_dockerfile)} {(DQ ('ENV CC clang-3.5'))})
                    (C {(append_dockerfile)} {(DQ ('ENV CXX clang++-3.5'))})
                  ]
                  spids: [424 427 444 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {(append_dockerfile)} {(DQ ('ENV CC clang'))})
                    (C {(append_dockerfile)} {(DQ ('ENV CXX clang++'))})
                  ]
                  spids: [447 448 465 16777215]
                )
              ]
              spids: [417 421 468]
            )
          ]
          spids: [413 414 471 16777215]
        )
        (case_arm
          pat_list: [{(Lit_Other '*')}]
          action: [
            (C {(echo)} {(DQ ('Unknown Compiler ') ($ VSub_DollarName '$COMPILER'))})
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [474 475 491 16777215]
        )
      ]
      spids: [385 389 493]
    )
    (C {(append_dockerfile)} {(DQ ('WORKDIR mesos'))})
    (C {(append_dockerfile)} {(DQ ('COPY . /mesos/'))})
    (C {(append_dockerfile)} {(DQ ('RUN chown -R mesos /mesos'))})
    (C {(append_dockerfile)} {(DQ ('USER mesos'))})
    (C {(append_dockerfile)} {(DQ ('ENV GTEST_OUTPUT xml:report.xml'))})
    (C {(append_dockerfile)} 
      {(DQ ('ENV DISTCHECK_CONFIGURE_FLAGS ') ($ VSub_DollarName '$CONFIGURATION'))}
    )
    (C {(append_dockerfile)} {(DQ ('ENV ') ($ VSub_DollarName '$ENVIRONMENT'))})
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_DollarName '$COVERITY_TOKEN'))} {(Lit_Other ']')})
          ]
          action: [
            (C {(append_dockerfile)} 
              {
                (DQ ('ENV MESOS_VERSION ') 
                  (word_part.CommandSubPart
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Pipeline
                            children: [
                              (C {(grep)} {(DQ (AC_INIT))} {(configure.ac)})
                              (C {(sed)} {(SQ <'s/AC_INIT[(]\\[mesos\\], \\[\\(.*\\)\\][)]/\\1/'>)})
                            ]
                            negated: F
                          )
                        ]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [609 625]
                  )
                )
              }
            )
            (C {(append_dockerfile)} 
              {
                (DQ ('RUN wget https://scan.coverity.com/download/linux64  --post-data ') 
                  (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('token=') ($ VSub_DollarName '$COVERITY_TOKEN') ('&project=Mesos') 
                  (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' -O coverity_tool.tgz')
                )
              }
            )
            (C {(append_dockerfile)} 
              {(DQ ('RUN tar xvf coverity_tool.tgz; mv cov-analysis-linux* cov-analysis'))}
            )
            (C {(append_dockerfile)} 
              {
                (DQ ('CMD ./bootstrap && ./configure ') ($ VSub_DollarName '$CONFIGURATION') 
                  (
' &&  cov-analysis/bin/cov-build -dir cov-int make -j6 && tar czcf mesos.tgz cov-int && tail cov-int/build-log.txt && curl --form '
                  ) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('token=') 
                  ($ VSub_DollarName '$COVERITY_TOKEN') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' --form ') 
                  (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('email=dev@mesos.apache.org') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                  ('  --form ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('file=@mesos.tgz') 
                  (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' --form ') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('version=') 
                  ($ VSub_DollarName '$MESOS_VERSION') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' --form ') 
                  (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ("description='Continious Coverity Build'") 
                  (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('   https://scan.coverity.com/builds?project=Mesos')
                )
              }
            )
          ]
          spids: [16777215 593]
        )
      ]
      else_action: [
        (command.Case
          to_match: {($ VSub_DollarName '$BUILDTOOL')}
          arms: [
            (case_arm
              pat_list: [{(autotools)}]
              action: [
                (C {(append_dockerfile)} 
                  {
                    (DQ ('CMD ./bootstrap && ./configure ') ($ VSub_DollarName '$CONFIGURATION') 
                      (' && make -j6 distcheck 2>&1')
                    )
                  }
                )
              ]
              spids: [693 694 706 16777215]
            )
            (case_arm
              pat_list: [{(cmake)}]
              action: [
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:CONFIGURATION spids:[721])
                      op: Equal
                      rhs: 
                        {
                          (word_part.BracedVarSub
                            token: <VSub_Name CONFIGURATION>
                            suffix_op: 
                              (suffix_op.PatSub
                                pat: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar "\\'">)}
                                replace: {(DQ )}
                                replace_mode: Lit_Slash
                                spids: [724]
                              )
                            spids: [722 730]
                          )
                        }
                      spids: [721]
                    )
                  ]
                  spids: [721]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:CONFIGURATION spids:[737])
                      op: Equal
                      rhs: 
                        {
                          (word_part.BracedVarSub
                            token: <VSub_Name CONFIGURATION>
                            suffix_op: 
                              (suffix_op.PatSub
                                pat: {(-)}
                                replace: {(DQ (_))}
                                replace_mode: Lit_Slash
                                spids: [740]
                              )
                            spids: [738 747]
                          )
                        }
                      spids: [737]
                    )
                  ]
                  spids: [737]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:CONFIGURATION spids:[754])
                      op: Equal
                      rhs: 
                        {
                          (word_part.BracedVarSub
                            token: <VSub_Name CONFIGURATION>
                            suffix_op: 
                              (suffix_op.PatSub
                                pat: {(__)}
                                replace: {(DQ (-D))}
                                replace_mode: Lit_Slash
                                spids: [757]
                              )
                            spids: [755 764]
                          )
                        }
                      spids: [754]
                    )
                  ]
                  spids: [754]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:CONFIGURATION spids:[771])
                      op: Equal
                      rhs: 
                        {
                          (word_part.BracedVarSub
                            token: <VSub_Name CONFIGURATION>
                            suffix_op: (suffix_op.StringUnary op_id:VOp1_DCaret arg_word:{})
                            spids: [772 775]
                          )
                        }
                      spids: [771]
                    )
                  ]
                  spids: [771]
                )
                (command.SimpleCommand
                  words: [{(read)} {(-r)} {(-a)} {(array)}]
                  redirects: [
                    (redir.Redir
                      op: <Redir_TLess '<<<'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_DollarName '$CONFIGURATION'))}
                    )
                  ]
                  more_env: [(env_pair name:IFS val:{(SQ <' '>)} spids:[783])]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:CONFIGURATION spids:[804])
                      op: Equal
                      rhs: {(DQ )}
                      spids: [804]
                    )
                  ]
                  spids: [804]
                )
                (command.ForEach
                  iter_name: element
                  iter_words: [
                    {
                      (DQ 
                        (word_part.BracedVarSub
                          token: <VSub_Name array>
                          bracket_op: (bracket_op.WholeArray op_id:Lit_At)
                          spids: [816 821]
                        )
                      )
                    }
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:CONFIGURATION spids:[828])
                              op: Equal
                              rhs: 
                                {
                                  (DQ ($ VSub_DollarName '$CONFIGURATION') (' ') 
                                    ($ VSub_DollarName '$element') ('=1')
                                  )
                                }
                              spids: [828]
                            )
                          ]
                          spids: [828]
                        )
                      ]
                      spids: [825 837]
                    )
                  spids: [814 16777215]
                )
                (C {(append_dockerfile)} 
                  {
                    (DQ ('CMD ./bootstrap && mkdir build && cd build && cmake ') 
                      ($ VSub_DollarName '$CONFIGURATION') (' .. && make -j6 check && make -j6')
                    )
                  }
                )
              ]
              spids: [709 710 866 16777215]
            )
            (case_arm
              pat_list: [{(Lit_Other '*')}]
              action: [
                (C {(echo)} {(DQ ('Unknown build tool ') ($ VSub_DollarName '$BUILDTOOL'))})
                (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
              ]
              spids: [869 870 886 16777215]
            )
          ]
          spids: [686 690 889]
        )
      ]
      spids: [679 891]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:TAG spids:[897])
          op: Equal
          rhs: 
            {(mesos-) 
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [(C {(date)} {(Lit_Other '+') (Lit_Other '%') (s)})]
                  )
                left_token: <Left_Backtick '`'>
                spids: [899 905]
              ) (-) ($ VSub_DollarName '$RANDOM')
            }
          spids: [897]
        )
      ]
      spids: [897]
    )
    (C {(docker)} {(build)} {(--no-cache) (Lit_Other '=') (true)} {(-t)} {($ VSub_DollarName '$TAG')} {(.)})
    (C {(trap)} {(DQ ('docker rmi ') ($ VSub_DollarName '$TAG'))} {(EXIT)})
    (C {(docker)} {(run)} {(--privileged)} {(--rm)} {($ VSub_DollarName '$TAG')})
  ]
)