#!perl

use strict;
use warnings;

use SPVM();
use SPVM::Builder::Exe;
use SPVM::Builder::Util;

SPVM::Builder::Util::getopt
  'h|help'          => \my $help,
  'v|version'       => \my $show_version,
  'o|output=s'        => \my $output_file,
  'B|build-dir=s'   => \my $build_dir,
  'I|module-dir=s' => \my @module_dirs,
  'q|quiet'   => \my $quiet,
  'O|optimize=s' => \my $optimize,
  'ccflags=s' => \my $extra_compiler_flags,
  'lddlflags=s' => \my $extra_linker_flags,
  '-f|force' => \my $force,
;

die SPVM::Builder::Util::extract_usage if $help || !(my $target_package_name = shift);

push @module_dirs, @INC;

my $build_exe = SPVM::Builder::Exe->new(
  module_dirs => \@module_dirs,
  output_file => $output_file,
  target_package_name => $target_package_name,
  quiet => $quiet,
  optimize => $optimize,
  extra_compiler_flags => $extra_compiler_flags,
  extra_linker_flags => $extra_linker_flags,
  force => $force,
);
$build_exe->build_exe_file;

=encoding utf8

=head1 NAME

spvmcc - SPVM compiler to create exe file

=head1 SYNOPSIS

  Usage: spvmcc [OPTIONS] [PACKAGE]

    spvmcc -I lib -o myapp Myapp

  Options:
    -h, --help                     Show this message
    -v, --version                  Version
    -o, --output                   Excutable file name
    -I, --module-dir <directory>   Add SPVM module searching directory
    -B, --build-dir <directory>    Building diretory
    -q, --quiet                    Quiet output
    -O, --optimize <level>         Optimaization level
    --ccflags <options>            Additional compiler flags
    --lddlflags <options>          Additional linker flags
    -f, --force                    Force compile and link

=head1 DESCRIPTION

spvmcc is SPVM compiler to create executable file.

