285 lines
6.2 KiB
Perl
Executable File
285 lines
6.2 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
my $vernr = "0.0.2";
|
|
my $monthshort = "Mar";
|
|
my $monthlong = "March";
|
|
my $year = "2009";
|
|
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Getopt::Long;
|
|
use Pod::Usage;
|
|
|
|
###
|
|
# User defined settings
|
|
###
|
|
my $svn_path_remote = 'https://kicad.svn.sourceforge.net/svnroot/kicad/trunk';
|
|
my $svn_path_local = '/media/data/projects/applications/kicad/subversion/kicad-core';
|
|
my $build_path = '/home/jerry/builds/kicad';
|
|
|
|
|
|
## TODO
|
|
## Add debian package generation
|
|
## dh_make -e jerkejacobs@gmail.com -s -n
|
|
## debuild -us -uc
|
|
## TODO
|
|
|
|
|
|
###
|
|
# Commandline options
|
|
###
|
|
my $option_about = 0;
|
|
my $option_manual = 0;
|
|
my $option_help = 0;
|
|
my $option_build_binaries = 0;
|
|
my $option_svn_update = 0;
|
|
my $option_verbose = 1;
|
|
my $option_version = 0;
|
|
my $option_generate_makefiles = 0;
|
|
my $option_no_clear = 0;
|
|
my $option_install_binaries = 0;
|
|
my $no_options = 0; # No options given
|
|
|
|
###
|
|
# Commands
|
|
###
|
|
my $command_silent = '&> /dev/null'; # Nullify stderr and stdout from commands
|
|
my $command_cmake = "cmake -DCMAKE_BUILD_TYPE=Debug -DwxWidgets_USE_DEBUG=ON $svn_path_local"; # Where cmake looks for CMakeLists.txt
|
|
my $command_svn_update = 'svn update'; # Subversion update command
|
|
|
|
###
|
|
# Help and about messages
|
|
###
|
|
my $about_message = "KiCad Devel, version $vernr, $monthshort $year, jerkejacobs\@gmail.org\n";
|
|
my $short_help = "No options given try `kicad_devel.pl --help' for more information.\n";
|
|
|
|
|
|
###########################################
|
|
########### Commandline options ###########
|
|
###########################################
|
|
if (@ARGV == 0)
|
|
{
|
|
print $short_help;
|
|
}
|
|
else
|
|
{
|
|
GetOptions('help|?' => \$option_help,
|
|
'man' => \$option_manual,
|
|
'build-binaries|compile' => \$option_build_binaries,
|
|
'svn-update' => \$option_svn_update,
|
|
'about' => \$option_about,
|
|
'version' => \$option_version,
|
|
'generate-makefiles' => \$option_generate_makefiles,
|
|
'install|install-binaries' => \$option_install_binaries,
|
|
'no-clear' => \$option_no_clear,
|
|
|
|
# Verbose settings
|
|
'quiet|noverbose' => sub { $option_verbose = 0 });
|
|
|
|
pod2usage(1) if $option_help;
|
|
pod2usage(-verbose => 2) if $option_manual;
|
|
}
|
|
|
|
|
|
###########################
|
|
########### Main ##########
|
|
###########################
|
|
|
|
# Init main function
|
|
main();
|
|
|
|
sub
|
|
main
|
|
{
|
|
# No commandline options given
|
|
if ($no_options) {
|
|
print $short_help;
|
|
exit(0);
|
|
}
|
|
|
|
# Option svn update given
|
|
if ($option_svn_update) {
|
|
svn_update();
|
|
}
|
|
|
|
# Generate makefiles
|
|
if ($option_generate_makefiles) {
|
|
generate_makefiles();
|
|
}
|
|
|
|
# Option build binaries given
|
|
if ($option_build_binaries) {
|
|
build_binaries();
|
|
}
|
|
|
|
# Install compiled binaries
|
|
if ($option_install_binaries) {
|
|
install_binaries();
|
|
}
|
|
exit(0);
|
|
}
|
|
|
|
###
|
|
# Clear the console screen
|
|
###
|
|
sub
|
|
clear_screen {
|
|
|
|
# Clear screen if no clear option is false
|
|
if ($option_no_clear == 0)
|
|
{
|
|
print `clear`;
|
|
}
|
|
else
|
|
{
|
|
print "\n\n";
|
|
}
|
|
}
|
|
|
|
###
|
|
# Print line of $_[1] char
|
|
# $_[0] = Number of chars before newline
|
|
# $_[1] = Char to print line of
|
|
###
|
|
sub
|
|
print_line {
|
|
for(my $i = 0; $i < $_[0]; ++$i) {
|
|
print $_[1];
|
|
}
|
|
print "\n";
|
|
}
|
|
|
|
###
|
|
# Execute cmake on svn_path_local to generate makefiles
|
|
# on build_path
|
|
###
|
|
sub
|
|
generate_makefiles {
|
|
|
|
# Print settings to output
|
|
if ($option_verbose == 1)
|
|
{
|
|
clear_screen();
|
|
|
|
print_line(80, '#');
|
|
|
|
print " Generating makefiles\n";
|
|
|
|
print_line(80, '#');
|
|
|
|
print " SVN Path : $svn_path_local\n";
|
|
print " Build Path : $build_path\n";
|
|
print " CMake Command : $command_cmake\n";
|
|
|
|
print_line(80, '#');
|
|
}
|
|
|
|
###
|
|
# Execute cmake command with correct verbose level output
|
|
###
|
|
|
|
# Execute command and dump output to console
|
|
if ($option_verbose == 0)
|
|
{
|
|
chdir $build_path;
|
|
`$command_cmake $command_silent`;
|
|
}
|
|
|
|
# Execute command and display output to console
|
|
if ($option_verbose == 1)
|
|
{
|
|
chdir $build_path
|
|
or die "Can't cd to $build_path";
|
|
print `$command_cmake`;
|
|
}
|
|
|
|
# Print output
|
|
if ($option_verbose == 1)
|
|
{
|
|
print_line(80, '#');
|
|
}
|
|
}
|
|
|
|
###
|
|
# Update local subversion repository on $svn_path_local
|
|
###
|
|
sub
|
|
svn_update
|
|
{
|
|
if ($option_verbose)
|
|
{
|
|
clear_screen();
|
|
print_line(80, '#');
|
|
print "Updating local subversion repository\n";
|
|
print_line(80, '#');
|
|
print "Repository path : $svn_path_local\n";
|
|
print "SVN Command : $command_svn_update\n";
|
|
print_line(80, '#');
|
|
chdir $svn_path_local
|
|
or die "Can't cd to $svn_path_local";
|
|
print `$command_svn_update`;
|
|
print_line(80, '#');
|
|
}
|
|
else
|
|
{
|
|
chdir $svn_path_local;
|
|
`$command_svn_update $command_silent`;
|
|
}
|
|
}
|
|
|
|
###
|
|
# Build the binaries on $build_path
|
|
###
|
|
sub
|
|
build_binaries
|
|
{
|
|
chdir $build_path
|
|
or die "Can't cd to $build_path";
|
|
system("make -j 4");
|
|
}
|
|
|
|
###
|
|
# Install the compiled binaries from $build_path
|
|
###
|
|
sub
|
|
install_binaries
|
|
{
|
|
chdir $build_path
|
|
or die "Can't cd to $build_path";
|
|
system("make install");
|
|
}
|
|
|
|
######## Begin of POD manual page ########
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
kicad_devel - KiCad development helper program
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
kicad_devel [options]
|
|
|
|
Options:
|
|
|
|
--help -? brief help message
|
|
--man -M full program manual
|
|
--verbose -V set verbosity level
|
|
--about about information
|
|
--version -v display version information
|
|
--svn-update -svn-up update kicad subversion path
|
|
--build-binaries -compile compile sourcecode in build path
|
|
--install-binaries -install install compiled binaries
|
|
--no-clear dont clear the console screen after every command is executed
|
|
|
|
=head1 OPTIONS
|
|
|
|
=head2 HELP
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
B<This program> will read the given input file(s) and do something
|
|
useful with the contents thereof.
|
|
|
|
=cut
|