// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/tools/gt_featureindex.c
// Function: gt_featureindex_option_parser_new
static GtOptionParser* gt_featureindex_option_parser_new(void *tool_arguments)
{
  GtFeatureindexArguments *arguments = tool_arguments;
  GtOptionParser *op;
  GtOption *option, *backend_option, *filenameoption;
  static const char *backends[] = {
#ifdef HAVE_SQLITE
    GT_SQLITE_BACKEND_STRING,
#endif
#ifdef HAVE_MYSQL
    GT_MYSQL_BACKEND_STRING,
#endif
    NULL
  };
  gt_assert(arguments);

  /* init */
  op = gt_option_parser_new("[option ...] indexfilename",
                            "Retrieve annotations from a persistent "
                            "feature index as GFF3 output.");

  arguments->rngopt = gt_option_new_range("range",
                                          "range constraint for index query",
                                          &arguments->qry_rng, NULL);
  gt_option_parser_add_option(op, gt_option_ref(arguments->rngopt));

  option = gt_option_new_string("seqid", "sequence region",
                                arguments->seqid, NULL);
  gt_option_parser_add_option(op, option);

  option = gt_option_new_bool("retain", "retain attributes",
                              &arguments->retain, true);
  gt_option_parser_add_option(op, option);

  /* -backend */
  backend_option = gt_option_new_choice("backend", "database backend to use\n"
                                        "choose from ["
#ifdef HAVE_SQLITE
                                         GT_SQLITE_BACKEND_STRING
#endif
#ifdef HAVE_MYSQL
                                        "|" GT_MYSQL_BACKEND_STRING
#endif
                                        "]",
                                        arguments->backend, backends[0],
                                        backends);
  gt_option_parser_add_option(op, backend_option);

  /* -filename */
  filenameoption = gt_option_new_string("filename",
                                        "filename for feature database "
                                        "(sqlite backend only)",
                                        arguments->filename, NULL);
  gt_option_parser_add_option(op, filenameoption);

#ifdef HAVE_MYSQL
  /* -host */
  option = gt_option_new_string("host", "hostname for database connection",
                                arguments->host, NULL);
  gt_option_parser_add_option(op, option);
  gt_option_is_mandatory_either(option, filenameoption);

  /* -user */
  option = gt_option_new_string("user", "username for database connection",
                                arguments->user, NULL);
  gt_option_parser_add_option(op, option);

  /* -database */
  option = gt_option_new_string("database",
                                "database name for database connection",
                                arguments->database, NULL);
  gt_option_parser_add_option(op, option);

  /* -port */
  option = gt_option_new_int_max("port", "port for database connection",
                                 &arguments->port, 3333, 65534);
  gt_option_parser_add_option(op, option);
#else
  gt_option_is_mandatory(filenameoption);
#endif

  option = gt_option_new_bool("child_check", "test callbacks for "
                                             "child node addition",
                              &arguments->child_callback_check, false);
  gt_option_parser_add_option(op, option);
  gt_option_is_development_option(option);

  option = gt_option_new_bool("attributes_check", "test callbacks for "
                                                  "attribute modification",
                              &arguments->attributes_callback_check, false);
  gt_option_parser_add_option(op, option);
  gt_option_is_development_option(option);

  option = gt_option_new_verbose(&arguments->verbose);
  gt_option_parser_add_option(op, option);

  return op;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
testq %rdi, %rdi
je 0x2a569
movq %rdi, %rbx
leaq 0x2c27a4(%rip), %rdi    # 0x2ecba9
leaq 0x2c27b8(%rip), %rsi    # 0x2ecbc4
callq 0x97df5
movq %rax, %r14
leaq 0x2f3439(%rip), %rdi    # 0x31d854
leaq 0x2c27e7(%rip), %rsi    # 0x2ecc09
movq %rbx, %rdx
xorl %ecx, %ecx
callq 0x9aca4
movq %rax, 0x50(%rbx)
movq %rax, %rdi
callq 0x97db0
movq %r14, %rdi
movq %rax, %rsi
callq 0x97f31
movq 0x10(%rbx), %rdx
leaq 0x2d55ae(%rip), %rdi    # 0x2ff9fc
leaq 0x3134b0(%rip), %rsi    # 0x33d905
xorl %ecx, %ecx
callq 0x9ad12
movq %r14, %rdi
movq %rax, %rsi
callq 0x97f31
leaq 0x4d(%rbx), %rdx
leaq 0x2c27b8(%rip), %rdi    # 0x2ecc2a
leaq 0x2c27b8(%rip), %rsi    # 0x2ecc31
pushq $0x1
popq %rcx
callq 0x9a997
movq %r14, %rdi
movq %rax, %rsi
callq 0x97f31
movq 0x18(%rbx), %rdx
movq 0x40e399(%rip), %rcx    # 0x438830
leaq 0x40e392(%rip), %r8     # 0x438830
leaq 0x2c279e(%rip), %rdi    # 0x2ecc43
leaq 0x2c279f(%rip), %rsi    # 0x2ecc4b
callq 0x9ad83
movq %r14, %rdi
movq %rax, %rsi
callq 0x97f31
movq 0x20(%rbx), %rdx
leaq 0x33c071(%rip), %rdi    # 0x366538
leaq 0x2c27aa(%rip), %rsi    # 0x2ecc78
xorl %ecx, %ecx
callq 0x9ad12
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x9ae37
leaq 0x4e(%rbx), %rdx
leaq 0x2c27b6(%rip), %rdi    # 0x2eccac
leaq 0x2c27bb(%rip), %rsi    # 0x2eccb8
xorl %ecx, %ecx
callq 0x9a997
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x9b10a
leaq 0x4f(%rbx), %rdx
leaq 0x2c27ba(%rip), %rdi    # 0x2eccdf
leaq 0x2c27c4(%rip), %rsi    # 0x2eccf0
xorl %ecx, %ecx
callq 0x9a997
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r15, %rdi
callq 0x9b10a
addq $0x4c, %rbx
movq %rbx, %rdi
callq 0x9a9b6
movq %r14, %rdi
movq %rax, %rsi
callq 0x97f31
movq %r14, %rax
popq %rbx
popq %r14
popq %r15
retq
movq 0x40d9f8(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2baa99(%rip), %rsi    # 0x2e5013
leaq 0x31e0d2(%rip), %rdx    # 0x348653
leaq 0x2c25ff(%rip), %rcx    # 0x2ecb87
leaq 0x2c25dc(%rip), %r8     # 0x2ecb6b
pushq $0x64
popq %r9
xorl %eax, %eax
callq 0x17a50
callq 0x17390