Author: marvin
Date: Mon Jun 18 23:00:13 2012
New Revision: 1351529
URL: http://svn.apache.org/viewvc?rev=1351529&view=rev
Log:
Change arguments accepted by charmonize.
Modify how arguments are passed to charmonize, so that it is possible to
enable writing of charmony.h and Charmony.pm separately, and so that it
is easier to pass many CC flags.
Modified:
lucy/trunk/charmonizer/charmonize.c
lucy/trunk/perl/buildlib/Lucy/Build.pm
lucy/trunk/ruby/Rakefile
Modified: lucy/trunk/charmonizer/charmonize.c
URL:
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/charmonize.c?rev=1351529&r1=1351528&r2=1351529&view=diff
==============================================================================
--- lucy/trunk/charmonizer/charmonize.c (original)
+++ lucy/trunk/charmonizer/charmonize.c Mon Jun 18 23:00:13 2012
@@ -37,18 +37,82 @@
#include "Charmonizer/Core/ConfWriterC.h"
#include "Charmonizer/Core/ConfWriterPerl.h"
-int main(int argc, char **argv) {
- /* Parse and process arguments. */
- if (argc != 3) {
+#define MAX_CC_LEN 128
+#define MAX_FLAGS_LEN 2048
+
+struct CLIArgs {
+ char cc_command[MAX_CC_LEN + 1];
+ char cc_flags[MAX_FLAGS_LEN + 1];
+ int enable_c;
+ int enable_perl;
+};
+
+/* Parse command line arguments. */
+static void
+S_parse_arguments(int argc, char **argv, struct CLIArgs *args) {
+ int i;
+ int output_enabled = 0;
+
+ /* Parse most args. */
+ for (i = 1; i < argc; i++) {
+ char *arg = argv[i];
+ if (strcmp(arg, "--") == 0) {
+ /* From here on out, everything will be a compiler flag. */
+ i++;
+ break;
+ }
+ if (strcmp(arg, "--enable-c") == 0) {
+ args->enable_c = 1;
+ output_enabled = 1;
+ }
+ else if (strcmp(arg, "--enable-perl") == 0) {
+ args->enable_perl = 1;
+ output_enabled = 1;
+ }
+ else if (memcmp(arg, "--cc=", 5) == 0) {
+ if (strlen(arg) > MAX_CC_LEN - 5) {
+ fprintf(stderr, "Exceeded max length for compiler command");
+ exit(1);
+ }
+ strcpy(args->cc_command, arg + 5);
+ }
+ }
+
+ /* Accumulate compiler flags. */
+ for (; i < argc; i++) {
+ char *arg = argv[i];
+ if (strlen(arg) + strlen(args->cc_flags) + 2 >= MAX_FLAGS_LEN) {
+ fprintf(stderr, "Exceeded max length for compiler flags");
+ exit(1);
+ }
+ strcat(args->cc_flags, " ");
+ strcat(args->cc_flags, arg);
+
+ }
+
+ /* Validate. */
+ if (!args->cc_command
+ || !strlen(args->cc_command)
+ || !output_enabled
+ ) {
fprintf(stderr,
- "Usage: ./charmonize CC_COMMAND CC_FLAGS\n");
+ "Usage: ./charmonize --cc=CC_COMMAND [--enable-c] "
+ "[--enable-perl] -- CC_FLAGS\n");
exit(1);
}
- else {
- char *cc_command = argv[1];
- char *cc_flags = argv[2];
- chaz_Probe_init(cc_command, cc_flags);
+
+}
+
+int main(int argc, char **argv) {
+ struct CLIArgs args;
+ memset(&args, 0, sizeof(struct CLIArgs));
+
+ S_parse_arguments(argc, argv, &args);
+ chaz_Probe_init(args.cc_command, args.cc_flags);
+ if (args.enable_c) {
chaz_ConfWriterC_enable();
+ }
+ if (args.enable_perl) {
chaz_ConfWriterPerl_enable();
}
Modified: lucy/trunk/perl/buildlib/Lucy/Build.pm
URL:
http://svn.apache.org/viewvc/lucy/trunk/perl/buildlib/Lucy/Build.pm?rev=1351529&r1=1351528&r2=1351529&view=diff
==============================================================================
--- lucy/trunk/perl/buildlib/Lucy/Build.pm (original)
+++ lucy/trunk/perl/buildlib/Lucy/Build.pm Mon Jun 18 23:00:13 2012
@@ -137,12 +137,15 @@ sub ACTION_charmony {
$self->add_to_cleanup($CHARMONY_PATH);
# Prepare arguments to charmonize.
- my $flags = join( ' ',
+ my @command = (
+ $CHARMONIZE_EXE_PATH,
+ '--cc=' . _quotify( $self->config('cc') ),
+ '--enable-c',
+ '--enable-perl',
+ '--',
$self->config('ccflags'),
@{ $self->extra_compiler_flags },
);
- $flags =~ s/"/\\"/g;
- my @command = ( $CHARMONIZE_EXE_PATH, $self->config('cc'), $flags );
if ( $ENV{CHARM_VALGRIND} ) {
unshift @command, "valgrind", "--leak-check=yes";
}
@@ -151,6 +154,13 @@ sub ACTION_charmony {
system(@command) and die "Failed to write $CHARMONY_PATH: $!";
}
+sub _quotify {
+ my $string = shift;
+ $string =~ s/\\/\\\\/g;
+ $string =~ s/"/\\"/g;
+ return qq|"$string"|;
+}
+
# Build the charmonizer tests.
sub ACTION_charmonizer_tests {
my $self = shift;
Modified: lucy/trunk/ruby/Rakefile
URL:
http://svn.apache.org/viewvc/lucy/trunk/ruby/Rakefile?rev=1351529&r1=1351528&r2=1351529&view=diff
==============================================================================
--- lucy/trunk/ruby/Rakefile (original)
+++ lucy/trunk/ruby/Rakefile Mon Jun 18 23:00:13 2012
@@ -118,7 +118,13 @@ desc "Run the charmonize executable, cre
task :charmony => [:charmonize] do
if !uptodate? CHARMONY_PATH, [CHARMONIZE_EXE_PATH]
puts "Writing #{CHARMONY_PATH}...\n"
- command = [CHARMONIZE_EXE_PATH, cc_command, all_ccflags]
+ command = [
+ CHARMONIZE_EXE_PATH,
+ "--cc=\"#{cc_command}\"",
+ "--enable-c",
+ "--",
+ all_ccflags
+ ]
if ENV["CHARM_VALGRIND"]
command.unshift("valgrind", "--leak-check=yes")
end