From: Simon Ruderich Date: Sun, 8 Apr 2012 14:11:54 +0000 (+0200) Subject: Handle dependency generation flags (-M/-MM/-MD/-MMD). X-Git-Tag: 0.01~32 X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=commitdiff_plain;h=53e64de60f08fcb752b1f3ccb41c9e8555be8866 Handle dependency generation flags (-M/-MM/-MD/-MMD). --- diff --git a/bin/blhc b/bin/blhc index 5adfca6..91a5f49 100755 --- a/bin/blhc +++ b/bin/blhc @@ -731,6 +731,7 @@ FILE: foreach my $file (@ARGV) { # Skip unnecessary tests when only preprocessing. my $flag_preprocess = 0; + my $dependency = 0; my $preprocess = 0; my $compile = 0; my $link = 0; @@ -740,11 +741,25 @@ FILE: foreach my $file (@ARGV) { $preprocess = 1; $flag_preprocess = 1 if $1 eq '-E'; $compile = 1 if $1 eq '-S' or $1 eq '-c'; + # Dependency generation for Makefiles. The other flags (-MF -MG -MP + # -MT -MQ) are always used with -M/-MM. + } elsif ($line =~ /\s(?:-M|-MM)\b/) { + $dependency = 1; # Otherwise assume we are linking. } else { $link = 1; } + # -MD/-MMD also cause dependency generation, but they don't imply -E! + if ($line =~ /\s(?:-MD|-MMD)\b/) { + $dependency = 0; + $flag_preprocess = 0; + } + + # Dependency generation for Makefiles, no preprocessing or other flags + # needed. + next if $dependency; + # Get all file extensions on this line. my @extensions = $line =~ /$file_extension_regex/go; # Ignore all unknown extensions to speedup the search below. diff --git a/t/logs/bad b/t/logs/bad index f77809b..bac71a1 100644 --- a/t/logs/bad +++ b/t/logs/bad @@ -32,3 +32,8 @@ gcc -E test.c gcc test.c gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o + +gcc -MD -c test.c +gcc -MT -MD -MF test.d -c test.c +gcc -MMD -c test.c +gcc -MT -MMD -MF test.d -c test.c diff --git a/t/logs/good b/t/logs/good index 180a64d..e863207 100644 --- a/t/logs/good +++ b/t/logs/good @@ -33,3 +33,6 @@ gcc -E -D_FORTIFY_SOURCE=2 test.c gcc -Wl,-z,relro -o test test.cpp.o command --cc test + +gcc -MM test.c > test.d +gcc -MM -MT test.d test.c diff --git a/t/tests.t b/t/tests.t index 3108c19..7fc4f9e 100644 --- a/t/tests.t +++ b/t/tests.t @@ -111,6 +111,14 @@ CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc test.c LDFLAGS missing (-Wl,-z,relro): gcc test.c CXXFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o +CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MD -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MD -c test.c +CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MT -MD -MF test.d -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MT -MD -MF test.d -c test.c +CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MMD -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MMD -c test.c +CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MT -MMD -MF test.d -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MT -MMD -MF test.d -c test.c '; is_blhc 'bad', '--pie', 8, 'CFLAGS missing (-fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -g -O2 -c test-a.c @@ -141,6 +149,14 @@ LDFLAGS missing (-fPIE -pie -Wl,-z,relro): gcc test.c CXXFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o LDFLAGS missing (-fPIE -pie): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o +CFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MD -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MD -c test.c +CFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MT -MD -MF test.d -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MT -MD -MF test.d -c test.c +CFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MMD -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MMD -c test.c +CFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MT -MMD -MF test.d -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MT -MMD -MF test.d -c test.c '; is_blhc 'bad', '--bindnow', 8, 'CFLAGS missing (-fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -g -O2 -c test-a.c @@ -170,6 +186,14 @@ LDFLAGS missing (-Wl,-z,relro -Wl,-z,now): gcc test.c CXXFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o LDFLAGS missing (-Wl,-z,now): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o +CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MD -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MD -c test.c +CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MT -MD -MF test.d -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MT -MD -MF test.d -c test.c +CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MMD -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MMD -c test.c +CFLAGS missing (-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MT -MMD -MF test.d -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MT -MMD -MF test.d -c test.c '; my $bad_pie_bindnow = 'CFLAGS missing (-fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -g -O2 -c test-a.c @@ -200,6 +224,14 @@ LDFLAGS missing (-fPIE -pie -Wl,-z,relro -Wl,-z,now): gcc test.c CXXFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o LDFLAGS missing (-fPIE -pie -Wl,-z,now): gcc -Wl,-z,relro -o test test-.cpp test-b.cpp.o +CFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MD -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MD -c test.c +CFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MT -MD -MF test.d -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MT -MD -MF test.d -c test.c +CFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MMD -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MMD -c test.c +CFLAGS missing (-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security): gcc -MT -MMD -MF test.d -c test.c +CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -MT -MMD -MF test.d -c test.c '; is_blhc 'bad', '--pie --bindnow', 8, $bad_pie_bindnow;