You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/07/03 04:30:26 UTC
[lucy-commits] svn commit: r1142360 - in /incubator/lucy/trunk: charmonizer/Makefile
charmonizer/Makefile.MSVC charmonizer/Makefile.MinGW
devel/bin/gen_charmonizer_makefiles.pl
Author: marvin
Date: Sun Jul 3 02:30:26 2011
New Revision: 1142360
URL: http://svn.apache.org/viewvc?rev=1142360&view=rev
Log:
Abstract out link commands using Perl OO rather than Make.
Perl string manipulation backed by Perl OO allows more precise control over
the command which gets issued than Make's variable interpolation. This is
important because the whitespace in how the target gets specified is
significant and varies across different operating systems and linkers.
This commit should restore Unix compatibility.
Modified:
incubator/lucy/trunk/charmonizer/Makefile
incubator/lucy/trunk/charmonizer/Makefile.MSVC
incubator/lucy/trunk/charmonizer/Makefile.MinGW
incubator/lucy/trunk/devel/bin/gen_charmonizer_makefiles.pl
Modified: incubator/lucy/trunk/charmonizer/Makefile
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/charmonizer/Makefile?rev=1142360&r1=1142359&r2=1142360&view=diff
==============================================================================
--- incubator/lucy/trunk/charmonizer/Makefile (original)
+++ incubator/lucy/trunk/charmonizer/Makefile Sun Jul 3 02:30:26 2011
@@ -18,9 +18,6 @@
CC= cc
DEFS=
CFLAGS= -Isrc $(DEFS)
-LINKER= $(CC)
-LINKFLAGS= $(CFLAGS)
-LINKOUT= -o
.c.o:
$(CC) $(CFLAGS) -c $*.c -o $@
@@ -40,32 +37,32 @@ CLEANABLE= $(OBJS) $(PROGNAME) $(TEST_OB
all: $(PROGNAME)
$(PROGNAME): $(OBJS)
- $(LINKER) $(LINKFLAGS) $(OBJS) $(LINKOUT)"$(PROGNAME)"
+ $(CC) $(CFLAGS) $(OBJS) -o $(PROGNAME)
$(OBJS) $(TEST_OBJS): $(HEADERS)
tests: $(TESTS)
TestDirManip: src/Charmonizer/Test.o src/Charmonizer/Test/TestDirManip.o
- $(LINKER) $(LINKFLAGS) src/Charmonizer/Test.o src/Charmonizer/Test/TestDirManip.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src/Charmonizer/Test/TestDirManip.o src/Charmonizer/Test.o -o $@
TestFuncMacro: src/Charmonizer/Test.o src/Charmonizer/Test/TestFuncMacro.o
- $(LINKER) $(LINKFLAGS) src/Charmonizer/Test.o src/Charmonizer/Test/TestFuncMacro.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src/Charmonizer/Test/TestFuncMacro.o src/Charmonizer/Test.o -o $@
TestHeaders: src/Charmonizer/Test.o src/Charmonizer/Test/TestHeaders.o
- $(LINKER) $(LINKFLAGS) src/Charmonizer/Test.o src/Charmonizer/Test/TestHeaders.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src/Charmonizer/Test/TestHeaders.o src/Charmonizer/Test.o -o $@
TestIntegers: src/Charmonizer/Test.o src/Charmonizer/Test/TestIntegers.o
- $(LINKER) $(LINKFLAGS) src/Charmonizer/Test.o src/Charmonizer/Test/TestIntegers.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src/Charmonizer/Test/TestIntegers.o src/Charmonizer/Test.o -o $@
TestLargeFiles: src/Charmonizer/Test.o src/Charmonizer/Test/TestLargeFiles.o
- $(LINKER) $(LINKFLAGS) src/Charmonizer/Test.o src/Charmonizer/Test/TestLargeFiles.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src/Charmonizer/Test/TestLargeFiles.o src/Charmonizer/Test.o -o $@
TestUnusedVars: src/Charmonizer/Test.o src/Charmonizer/Test/TestUnusedVars.o
- $(LINKER) $(LINKFLAGS) src/Charmonizer/Test.o src/Charmonizer/Test/TestUnusedVars.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src/Charmonizer/Test/TestUnusedVars.o src/Charmonizer/Test.o -o $@
TestVariadicMacros: src/Charmonizer/Test.o src/Charmonizer/Test/TestVariadicMacros.o
- $(LINKER) $(LINKFLAGS) src/Charmonizer/Test.o src/Charmonizer/Test/TestVariadicMacros.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src/Charmonizer/Test/TestVariadicMacros.o src/Charmonizer/Test.o -o $@
clean:
rm -f $(CLEANABLE)
Modified: incubator/lucy/trunk/charmonizer/Makefile.MSVC
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/charmonizer/Makefile.MSVC?rev=1142360&r1=1142359&r2=1142360&view=diff
==============================================================================
--- incubator/lucy/trunk/charmonizer/Makefile.MSVC (original)
+++ incubator/lucy/trunk/charmonizer/Makefile.MSVC Sun Jul 3 02:30:26 2011
@@ -18,9 +18,6 @@
CC= cl
DEFS=
CFLAGS= -Isrc -nologo -D_CRT_SECURE_NO_WARNINGS $(DEFS)
-LINKER= link
-LINKFLAGS= -nologo
-LINKOUT= /OUT:
.c.obj:
$(CC) $(CFLAGS) -c $< -Fo$@
@@ -40,32 +37,32 @@ CLEANABLE= $(OBJS) $(PROGNAME) $(TEST_OB
all: $(PROGNAME)
$(PROGNAME): $(OBJS)
- $(LINKER) $(LINKFLAGS) $(OBJS) $(LINKOUT)"$(PROGNAME)"
+ link -nologo $(OBJS) /OUT:$(PROGNAME)
$(OBJS) $(TEST_OBJS): $(HEADERS)
tests: $(TESTS)
TestDirManip.exe: src\Charmonizer\Test.obj src\Charmonizer\Test\TestDirManip.obj
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.obj src\Charmonizer\Test\TestDirManip.obj $(LINKOUT)"$@"
+ link -nologo src\Charmonizer\Test\TestDirManip.obj src\Charmonizer\Test.obj /OUT:$@
TestFuncMacro.exe: src\Charmonizer\Test.obj src\Charmonizer\Test\TestFuncMacro.obj
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.obj src\Charmonizer\Test\TestFuncMacro.obj $(LINKOUT)"$@"
+ link -nologo src\Charmonizer\Test\TestFuncMacro.obj src\Charmonizer\Test.obj /OUT:$@
TestHeaders.exe: src\Charmonizer\Test.obj src\Charmonizer\Test\TestHeaders.obj
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.obj src\Charmonizer\Test\TestHeaders.obj $(LINKOUT)"$@"
+ link -nologo src\Charmonizer\Test\TestHeaders.obj src\Charmonizer\Test.obj /OUT:$@
TestIntegers.exe: src\Charmonizer\Test.obj src\Charmonizer\Test\TestIntegers.obj
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.obj src\Charmonizer\Test\TestIntegers.obj $(LINKOUT)"$@"
+ link -nologo src\Charmonizer\Test\TestIntegers.obj src\Charmonizer\Test.obj /OUT:$@
TestLargeFiles.exe: src\Charmonizer\Test.obj src\Charmonizer\Test\TestLargeFiles.obj
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.obj src\Charmonizer\Test\TestLargeFiles.obj $(LINKOUT)"$@"
+ link -nologo src\Charmonizer\Test\TestLargeFiles.obj src\Charmonizer\Test.obj /OUT:$@
TestUnusedVars.exe: src\Charmonizer\Test.obj src\Charmonizer\Test\TestUnusedVars.obj
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.obj src\Charmonizer\Test\TestUnusedVars.obj $(LINKOUT)"$@"
+ link -nologo src\Charmonizer\Test\TestUnusedVars.obj src\Charmonizer\Test.obj /OUT:$@
TestVariadicMacros.exe: src\Charmonizer\Test.obj src\Charmonizer\Test\TestVariadicMacros.obj
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.obj src\Charmonizer\Test\TestVariadicMacros.obj $(LINKOUT)"$@"
+ link -nologo src\Charmonizer\Test\TestVariadicMacros.obj src\Charmonizer\Test.obj /OUT:$@
clean:
CMD /c FOR %i IN ($(CLEANABLE)) DO IF EXIST %i DEL /F %i
Modified: incubator/lucy/trunk/charmonizer/Makefile.MinGW
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/charmonizer/Makefile.MinGW?rev=1142360&r1=1142359&r2=1142360&view=diff
==============================================================================
--- incubator/lucy/trunk/charmonizer/Makefile.MinGW (original)
+++ incubator/lucy/trunk/charmonizer/Makefile.MinGW Sun Jul 3 02:30:26 2011
@@ -18,9 +18,6 @@
CC= gcc
DEFS=
CFLAGS= -Isrc $(DEFS)
-LINKER= $(CC)
-LINKFLAGS= $(CFLAGS)
-LINKOUT= -o
.c.o:
$(CC) $(CFLAGS) -c $*.c -o $@
@@ -40,32 +37,32 @@ CLEANABLE= $(OBJS) $(PROGNAME) $(TEST_OB
all: $(PROGNAME)
$(PROGNAME): $(OBJS)
- $(LINKER) $(LINKFLAGS) $(OBJS) $(LINKOUT)"$(PROGNAME)"
+ $(CC) $(CFLAGS) $(OBJS) -o $(PROGNAME)
$(OBJS) $(TEST_OBJS): $(HEADERS)
tests: $(TESTS)
TestDirManip.exe: src\Charmonizer\Test.o src\Charmonizer\Test\TestDirManip.o
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.o src\Charmonizer\Test\TestDirManip.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src\Charmonizer\Test\TestDirManip.o src\Charmonizer\Test.o -o $@
TestFuncMacro.exe: src\Charmonizer\Test.o src\Charmonizer\Test\TestFuncMacro.o
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.o src\Charmonizer\Test\TestFuncMacro.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src\Charmonizer\Test\TestFuncMacro.o src\Charmonizer\Test.o -o $@
TestHeaders.exe: src\Charmonizer\Test.o src\Charmonizer\Test\TestHeaders.o
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.o src\Charmonizer\Test\TestHeaders.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src\Charmonizer\Test\TestHeaders.o src\Charmonizer\Test.o -o $@
TestIntegers.exe: src\Charmonizer\Test.o src\Charmonizer\Test\TestIntegers.o
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.o src\Charmonizer\Test\TestIntegers.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src\Charmonizer\Test\TestIntegers.o src\Charmonizer\Test.o -o $@
TestLargeFiles.exe: src\Charmonizer\Test.o src\Charmonizer\Test\TestLargeFiles.o
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.o src\Charmonizer\Test\TestLargeFiles.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src\Charmonizer\Test\TestLargeFiles.o src\Charmonizer\Test.o -o $@
TestUnusedVars.exe: src\Charmonizer\Test.o src\Charmonizer\Test\TestUnusedVars.o
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.o src\Charmonizer\Test\TestUnusedVars.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src\Charmonizer\Test\TestUnusedVars.o src\Charmonizer\Test.o -o $@
TestVariadicMacros.exe: src\Charmonizer\Test.o src\Charmonizer\Test\TestVariadicMacros.o
- $(LINKER) $(LINKFLAGS) src\Charmonizer\Test.o src\Charmonizer\Test\TestVariadicMacros.o $(LINKOUT)"$@"
+ $(CC) $(CFLAGS) src\Charmonizer\Test\TestVariadicMacros.o src\Charmonizer\Test.o -o $@
clean:
CMD /c FOR %i IN ($(CLEANABLE)) DO IF EXIST %i DEL /F %i
Modified: incubator/lucy/trunk/devel/bin/gen_charmonizer_makefiles.pl
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/devel/bin/gen_charmonizer_makefiles.pl?rev=1142360&r1=1142359&r2=1142360&view=diff
==============================================================================
--- incubator/lucy/trunk/devel/bin/gen_charmonizer_makefiles.pl (original)
+++ incubator/lucy/trunk/devel/bin/gen_charmonizer_makefiles.pl Sun Jul 3 02:30:26 2011
@@ -88,6 +88,12 @@ sub objectify {
return @objects;
}
+sub build_link_command {
+ my ( $self, %args ) = @_;
+ my $objects = join( " ", @{ $args{objects} } );
+ return "\$(CC) \$(CFLAGS) $objects -o $args{target}";
+}
+
sub test_execs {
my $self = shift;
my @test_execs = grep { $_ !~ /Test\.c/ } @_; # skip Test.c entry
@@ -105,10 +111,13 @@ sub test_blocks {
my $exe = $c_file;
$exe =~ s/.*(Test\w+)\.c$/$1$self->{exe_ext}/ or die "no match $exe";
my ($obj) = $self->objectify($c_file);
- push @blocks, <<END_BLOCK;
-$exe: src/Charmonizer/Test$self->{obj_ext} $obj
-\t\$(LINKER) \$(LINKFLAGS) src/Charmonizer/Test$self->{obj_ext} $obj \$(LINKOUT)"\$@"
-END_BLOCK
+ my ($test_obj)
+ = $self->pathify( $self->objectify("src/Charmonizer/Test.c") );
+ my $link_command = $self->build_link_command(
+ objects => [ $obj, $test_obj ],
+ target => '$@',
+ );
+ push @blocks, qq|$exe: $test_obj $obj\n\t$link_command|;
}
return @blocks;
}
@@ -127,6 +136,10 @@ sub gen_makefile {
my ( $self, %args ) = @_;
open my $fh, ">", $args{file} or die "open '$args{file}' failed: $!\n";
my $license = $self->license;
+ my $progname_link_command = $self->build_link_command(
+ objects => ['$(OBJS)'],
+ target => '$(PROGNAME)',
+ );
my $content = <<EOT;
# GENERATED BY $FindBin::Script: do not hand-edit!!!
#
@@ -147,13 +160,14 @@ CLEANABLE= \$(OBJS) \$(PROGNAME) \$(TEST
all: \$(PROGNAME)
\$(PROGNAME): \$(OBJS)
- \$(LINKER) \$(LINKFLAGS) \$(OBJS) \$(LINKOUT)"\$(PROGNAME)"
+\t$progname_link_command
\$(OBJS) \$(TEST_OBJS): \$(HEADERS)
tests: \$(TESTS)
$args{test_blocks}
+
$args{clean_target}
EOT
@@ -172,7 +186,7 @@ sub write_makefile {
objs => join(" ", $self->pathify(@objects)),
test_objs => join(" ", $self->pathify(@test_objects)),
headers => join(" ", $self->pathify( @{ $self->{h_files} } ) ),
- test_blocks => join("\n", $self->pathify(@test_blocks)),
+ test_blocks => join("\n\n", @test_blocks),
top => $self->top,
clean_target => $self->clean_target,
file => $self->{filename},
@@ -216,9 +230,6 @@ sub top {
CC= cc
DEFS=
CFLAGS= -Isrc \$(DEFS)
-LINKER= \$(CC)
-LINKFLAGS= \$(CFLAGS)
-LINKOUT= -o
.c.o:
\t\$(CC) \$(CFLAGS) -c \$*.c -o \$@
@@ -247,15 +258,18 @@ sub top {
CC= cl
DEFS=
CFLAGS= -Isrc -nologo -D_CRT_SECURE_NO_WARNINGS \$(DEFS)
-LINKER= link
-LINKFLAGS= -nologo
-LINKOUT= /OUT:
.c.obj:
\t\$(CC) \$(CFLAGS) -c \$< -Fo\$@
END_STUFF
}
+sub build_link_command {
+ my ( $self, %args ) = @_;
+ my $objects = join( " ", @{ $args{objects} } );
+ return "link -nologo $objects /OUT:$args{target}";
+}
+
sub pathify { shift->winnify(@_) }
sub clean_target { shift->clean_target_win }
@@ -277,9 +291,6 @@ sub top {
CC= gcc
DEFS=
CFLAGS= -Isrc \$(DEFS)
-LINKER= \$(CC)
-LINKFLAGS= \$(CFLAGS)
-LINKOUT= -o
.c.o:
\t\$(CC) \$(CFLAGS) -c \$*.c -o \$@