docs: def gen_setup(config, default_build_type, relative_path, setup_script_name):
      """
      Generate setup script.
      """
      from autocmake.extract import extract_list
  
      s = []
      s.append('#!/usr/bin/env python')
      s.append('\n{0}'.format(autogenerated_notice()))
      s.append('\nimport os')
      s.append('import sys')
      s.append('assert sys.version_info >= (2, 6), \'Python >= 2.6 is required\'')
  
      s.append("\nsys.path.insert(0, '{0}')".format(relative_path))
  
      s.append('from autocmake import configure')
      s.append('from autocmake.external import docopt')
  
      s.append('\n\noptions = """')
      s.append('Usage:')
      s.append('  ./{0} [options] [<builddir>]'.format(setup_script_name))
      s.append('  ./{0} (-h | --help)'.format(setup_script_name))
      s.append('\nOptions:')
  
      options = []
  
      for opt in config['docopt']:
          first = opt.split()[0].strip()
          rest = ' '.join(opt.split()[1:]).strip()
          options.append([first, rest])
  
      options.append(['--type=<TYPE>', 'Set the CMake build type (debug, release, relwithdebinfo, minsizerel) [default: {0}].'.format(default_build_type)])
      options.append(['--generator=<STRING>', 'Set the CMake build system generator [default: Unix Makefiles].'])
      options.append(['--show', 'Show CMake command and exit.'])
      options.append(['--cmake-executable=<CMAKE_EXECUTABLE>', 'Set the CMake executable [default: cmake].'])
      options.append(['--cmake-options=<STRING>', "Define options to CMake [default: '']."])
      options.append(['--prefix=<PATH>', 'Set the install path for make install.'])
      options.append(['<builddir>', 'Build directory.'])
      options.append(['-h --help', 'Show this screen.'])
  
      s.append(align_options(options))
  
      s.append('"""')
  
      s.append(gen_cmake_command(config))
  
      s.append("\n")
      s.append("# parse command line args")
      s.append("try:")
      s.append("    arguments = docopt.docopt(options, argv=None)")
      s.append("except docopt.DocoptExit:")
      s.append(r"    sys.stderr.write('ERROR: bad input to {0}\n'.format(sys.argv[0]))")
      s.append("    sys.stderr.write(options)")
      s.append("    sys.exit(-1)")
      s.append("\n")
      s.append("# use extensions to validate/post-process args")
      s.append("if configure.module_exists('extensions'):")
      s.append("    import extensions")
      s.append("    arguments = extensions.postprocess_args(sys.argv, arguments)")
      s.append("\n")
      s.append("root_directory = os.path.dirname(os.path.realpath(__file__))")
      s.append("\n")
      s.append("build_path = arguments['<builddir>']")
      s.append("\n")
      s.append("# create cmake command")
      s.append("cmake_command = '{0} -H{1}'.format(gen_cmake_command(options, arguments), root_directory)")
      s.append("\n")
      s.append("# run cmake")
      s.append("configure.configure(root_directory, build_path, cmake_command, arguments['--show'])")
  
      return s