Bump version to 6.4.7.2.M8
[LibreOffice.git] / solenv / gbuild / platform / filter-showIncludes.awk
blobb8a1db052701a8108d853a51fe4bc78c48c2448c
1 #!/usr/bin/gawk -f
2 # -*- tab-width: 4; indent-tabs-mode: t -*-
4 # This file is part of the LibreOffice project.
6 # This Source Code Form is subject to the terms of the Mozilla Public
7 # License, v. 2.0. If a copy of the MPL was not distributed with this
8 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
11 # Create dependency information from the output of cl.exe's showInclude. It
12 # needs additional information - the output name to which to write, objfile
13 # that depends on the includes, and the original file name.
14 # For best results all arguments should be absolute paths.
16 # It also consolidates the file names to a canonical form, and filters out
17 # duplicates.
19 # based on filter-showInclude.pl by Jan Holesovsky <kendy@suse.cz>
21 BEGIN {
22 if (!depfile || !objectfile || !sourcefile) {
23 print "usage: filter-showIncludes.awk -vdepfile=depfile.d " \
24 "-vobjectfile=objfile.o -vsourcefile=source.cxx" > "/dev/stderr"
25 exit 1
27 tempfile = depfile ".tmp"
28 print objectfile " : \\\n " sourcefile " \\" > tempfile
30 showincludes_prefix = ENVIRON["SHOWINCLUDES_PREFIX"];
31 if (!showincludes_prefix) {
32 showincludes_prefix = "Note: including file:"
35 # to match especially drive letters in whitelist case insensitive
36 IGNORECASE = 1
37 whitelist = \
38 "^(" ENVIRON["SRCDIR"] "|" ENVIRON["WORKDIR"] ")"
39 firstline = 1
43 sub(/\r$/, "")
44 sub(/^ */, "")
45 if (index($0, showincludes_prefix) == 1) {
46 $0 = substr($0, length(showincludes_prefix) + 1)
47 sub(/^ */, "")
49 # The output from MSVC may contain a carriage return character at the
50 # end of filenames, in which case the translation unit will depend on a
51 # non-existing header, resulting in constant rebuild of all files,
52 # prevent that.
53 sub(/ /, "")
55 gsub(/\\/, "/")
56 gsub(/ /, "\\ ")
57 if ($0 ~ whitelist) { # filter out system headers
58 if (!($0 in incfiles)) {
59 incfiles[$0]
60 print " " $0 " \\" > tempfile
63 } else {
64 # because MSVC stupidly prints errors on stdout, it's
65 # necessary to forward everything that isn't matched by the pattern
66 # so users get to see them.
67 if (firstline) { # ignore the line that just prints name of sourcefile
68 firstline = 0
69 } else {
70 print $0 > "/dev/stderr"
75 END {
76 if (!tempfile) {
77 exit 1
79 print "" > tempfile
81 # fdo#40099 if header.h does not exist, it will simply be considered out of
82 # date and any targets that use it as a prerequisite will be updated,
83 # which avoid misery when the header is deliberately deleted and removed
84 # as an include
85 # see http://www.makelinux.net/make3/make3-CHP-8-SECT-3
86 for (file in incfiles) {
87 print file " :\n" > tempfile
90 close(tempfile)
91 movecmd = "mv " tempfile " " depfile
92 ret = system(movecmd)
93 if (ret) {
94 print "ERROR: " movecmd " FAILED with status " ret > "/dev/stderr"
95 exit ret
99 # vim: set noet sw=4 ts=4: