File: code-make

package info (click to toggle)
trafficserver 9.2.5%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 53,008 kB
  • sloc: cpp: 345,484; ansic: 31,134; python: 24,200; sh: 7,271; makefile: 3,045; perl: 2,261; java: 277; pascal: 119; sql: 94; xml: 2
file content (68 lines) | stat: -rwxr-xr-x 2,461 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env perl

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This tool is a "replacement" for make, which wraps the make command around
# a filter that tries to normalize the output such that the filenames are relative
# to the build directory. This passes all arguments passed along to make itself,
# and you can override the "make" command using the MAKE environment variable.

use strict;
use Term::ANSIColor;

my %COLORS = (
    "_header"  => "italic green",
    "_line"    => "cyan",
    "_message" => "italic magenta",
    "error"    => "red",
    "warning"  => "yellow",
    "note"     => "blue"
);
my $CMD = $ENV{"MAKE"} || "make" . " 2>&1 " . join(" ", @ARGV);
my @DIRS = ();

print colored("Running: $CMD\n", $COLORS{"_header"});

open my $cmd, '-|', $CMD;
while (my $line = <$cmd>) {
    if ($line =~ /(error|warning|note):/) {
        my $msg   = $1;
        my @parts = split(/:/, $line);
        my $file  = $parts[0];

        if (substr($file, 0, 1) ne "/") {
            $file =~ s/^[\.\/]+//;    # Strip leading ./, ../, ../../, etc.

            # Lazy eval on this, assuming that we will not find errors typically...
            if (!@DIRS) {
                @DIRS = split(/\n/, `find . -type d | fgrep -v -e .deps -e .libs -e .git -e .vscode`);
            }

            foreach (@DIRS) {
                if (-f "$_/$file") {
                    $file = "$_/$file";
                    last;
                }
            }
        }
        print colored("$file:$parts[1]:$parts[2]:", $COLORS{"_line"});
        print colored("$msg",                       $COLORS{"$msg"});
        print colored("$parts[4]\n",                $COLORS{"_message"});
    } else {
        print $line;
    }
}