1*1fa6dee9SAndroid Build Coastguard Worker// Copyright 2014 Google Inc. All rights reserved. 2*1fa6dee9SAndroid Build Coastguard Worker// 3*1fa6dee9SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*1fa6dee9SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*1fa6dee9SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*1fa6dee9SAndroid Build Coastguard Worker// 7*1fa6dee9SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*1fa6dee9SAndroid Build Coastguard Worker// 9*1fa6dee9SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*1fa6dee9SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*1fa6dee9SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*1fa6dee9SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*1fa6dee9SAndroid Build Coastguard Worker// limitations under the License. 14*1fa6dee9SAndroid Build Coastguard Worker 15*1fa6dee9SAndroid Build Coastguard Workerpackage deptools 16*1fa6dee9SAndroid Build Coastguard Worker 17*1fa6dee9SAndroid Build Coastguard Workerimport ( 18*1fa6dee9SAndroid Build Coastguard Worker "fmt" 19*1fa6dee9SAndroid Build Coastguard Worker "os" 20*1fa6dee9SAndroid Build Coastguard Worker "strings" 21*1fa6dee9SAndroid Build Coastguard Worker) 22*1fa6dee9SAndroid Build Coastguard Worker 23*1fa6dee9SAndroid Build Coastguard Workervar ( 24*1fa6dee9SAndroid Build Coastguard Worker pathEscaper = strings.NewReplacer( 25*1fa6dee9SAndroid Build Coastguard Worker `\`, `\\`, 26*1fa6dee9SAndroid Build Coastguard Worker ` `, `\ `, 27*1fa6dee9SAndroid Build Coastguard Worker `#`, `\#`, 28*1fa6dee9SAndroid Build Coastguard Worker `*`, `\*`, 29*1fa6dee9SAndroid Build Coastguard Worker `[`, `\[`, 30*1fa6dee9SAndroid Build Coastguard Worker `|`, `\|`) 31*1fa6dee9SAndroid Build Coastguard Worker) 32*1fa6dee9SAndroid Build Coastguard Worker 33*1fa6dee9SAndroid Build Coastguard Worker// WriteDepFile creates a new gcc-style depfile and populates it with content 34*1fa6dee9SAndroid Build Coastguard Worker// indicating that target depends on deps. 35*1fa6dee9SAndroid Build Coastguard Workerfunc WriteDepFile(filename, target string, deps []string) error { 36*1fa6dee9SAndroid Build Coastguard Worker f, err := os.Create(filename) 37*1fa6dee9SAndroid Build Coastguard Worker if err != nil { 38*1fa6dee9SAndroid Build Coastguard Worker return err 39*1fa6dee9SAndroid Build Coastguard Worker } 40*1fa6dee9SAndroid Build Coastguard Worker defer f.Close() 41*1fa6dee9SAndroid Build Coastguard Worker 42*1fa6dee9SAndroid Build Coastguard Worker var escapedDeps []string 43*1fa6dee9SAndroid Build Coastguard Worker 44*1fa6dee9SAndroid Build Coastguard Worker for _, dep := range deps { 45*1fa6dee9SAndroid Build Coastguard Worker escapedDeps = append(escapedDeps, pathEscaper.Replace(dep)) 46*1fa6dee9SAndroid Build Coastguard Worker } 47*1fa6dee9SAndroid Build Coastguard Worker 48*1fa6dee9SAndroid Build Coastguard Worker _, err = fmt.Fprintf(f, "%s: \\\n %s\n", target, 49*1fa6dee9SAndroid Build Coastguard Worker strings.Join(escapedDeps, " \\\n ")) 50*1fa6dee9SAndroid Build Coastguard Worker if err != nil { 51*1fa6dee9SAndroid Build Coastguard Worker return err 52*1fa6dee9SAndroid Build Coastguard Worker } 53*1fa6dee9SAndroid Build Coastguard Worker 54*1fa6dee9SAndroid Build Coastguard Worker return nil 55*1fa6dee9SAndroid Build Coastguard Worker} 56