#!perl

use strict;
use warnings;

use SPVM();
use SPVM::Builder::Generator::Lib;
use SPVM::Builder::Util;

SPVM::Builder::Util::getopt
  'h|help'          => \my $help,
  'v|version'       => \my $show_version,
  'q|quiet'   => \my $quiet,
  'f|force' => \my $force,
  'module-dir=s' => \my $module_dir,
  'native-language=s' => \my $native_language,
  'script-file=s' => \my $script_file,
  'native-lib-name=s' => \my $native_lib_name,
;

if ($help) {
  die SPVM::Builder::Util::extract_usage;
}
elsif ($show_version) {
  my $version_string = "spvmgenlib v$SPVM::VERSION";
  print "$version_string\n";
}
else {
  my $class_name = shift;
  unless (defined $class_name) {
    die SPVM::Builder::Util::extract_usage;
  }
  
  my $genlib= SPVM::Builder::Generator::Lib->new(
    class_name => $class_name,
    quiet => $quiet,
    force => $force,
    module_dir => $module_dir,
    native_language => $native_language,
    script_file => $script_file,
    native_lib_name => $native_lib_name,
  );
  $genlib->generate_lib;
}

=encoding utf8

=head1 NAME

spvmgenlib - The Command to Generate SPVM Native Libraries

=head1 SYNOPSIS

  Usage: spvmgenlib [OPTIONS] [CLASS_NAME]
    
    spvmgenlib MyLib

  Options:
    -h, --help                     Show this message
    -v, --version                  Show the version
    -q, --quiet                    Quiet output
    -f, --force                    Force to generate files
    --module-dir                   Module directory, default: "lib/SPVM"
    --script-file                  Generate the script file
    --native-lib-name              Generate native library with the name
    --native-language              Native language name, "c" or "c++", default: "c"
    
=head1 DESCRIPTION

B<spvmgenlib> is the command to generate SPVM native libraries.
