xref: /aosp_15_r20/external/bazelbuild-rules_android/src/tools/jdeps/jdeps.go (revision 9e965d6fece27a77de5377433c2f7e6999b8cc0b)
1*9e965d6fSRomain Jobredeaux// Copyright 2018 The Bazel Authors. All rights reserved.
2*9e965d6fSRomain Jobredeaux//
3*9e965d6fSRomain Jobredeaux// Licensed under the Apache License, Version 2.0 (the "License");
4*9e965d6fSRomain Jobredeaux// you may not use this file except in compliance with the License.
5*9e965d6fSRomain Jobredeaux// You may obtain a copy of the License at
6*9e965d6fSRomain Jobredeaux//
7*9e965d6fSRomain Jobredeaux//    http://www.apache.org/licenses/LICENSE-2.0
8*9e965d6fSRomain Jobredeaux//
9*9e965d6fSRomain Jobredeaux// Unless required by applicable law or agreed to in writing, software
10*9e965d6fSRomain Jobredeaux// distributed under the License is distributed on an "AS IS" BASIS,
11*9e965d6fSRomain Jobredeaux// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9e965d6fSRomain Jobredeaux// See the License for the specific language governing permissions and
13*9e965d6fSRomain Jobredeaux// limitations under the License.
14*9e965d6fSRomain Jobredeaux
15*9e965d6fSRomain Jobredeaux// jdeps is a command line tool to filter a jdeps proto
16*9e965d6fSRomain Jobredeauxpackage main
17*9e965d6fSRomain Jobredeaux
18*9e965d6fSRomain Jobredeauximport (
19*9e965d6fSRomain Jobredeaux	"flag"
20*9e965d6fSRomain Jobredeaux	"io/ioutil"
21*9e965d6fSRomain Jobredeaux	"log"
22*9e965d6fSRomain Jobredeaux	"strings"
23*9e965d6fSRomain Jobredeaux
24*9e965d6fSRomain Jobredeaux	dpb "src/tools/jdeps/proto/deps_go_proto"
25*9e965d6fSRomain Jobredeaux	"google.golang.org/protobuf/proto"
26*9e965d6fSRomain Jobredeaux)
27*9e965d6fSRomain Jobredeaux
28*9e965d6fSRomain Jobredeauxvar (
29*9e965d6fSRomain Jobredeaux	in     = flag.String("in", "", "Path to input jdeps file")
30*9e965d6fSRomain Jobredeaux	target = flag.String("target", "", "Target suffix to remove from jdeps file")
31*9e965d6fSRomain Jobredeaux	out    = flag.String("out", "", "Path to output jdeps file")
32*9e965d6fSRomain Jobredeaux)
33*9e965d6fSRomain Jobredeaux
34*9e965d6fSRomain Jobredeauxfunc main() {
35*9e965d6fSRomain Jobredeaux	flag.Parse()
36*9e965d6fSRomain Jobredeaux	if *in == "" || *target == "" || *out == "" {
37*9e965d6fSRomain Jobredeaux		log.Fatal("Missing required flags. Must specify --in --target --out.")
38*9e965d6fSRomain Jobredeaux	}
39*9e965d6fSRomain Jobredeaux
40*9e965d6fSRomain Jobredeaux	bytes, err := ioutil.ReadFile(*in)
41*9e965d6fSRomain Jobredeaux	if err != nil {
42*9e965d6fSRomain Jobredeaux		log.Fatalf("Error reading input jdeps: %v", err)
43*9e965d6fSRomain Jobredeaux	}
44*9e965d6fSRomain Jobredeaux	jdeps := &dpb.Dependencies{}
45*9e965d6fSRomain Jobredeaux	if err = proto.Unmarshal(bytes, jdeps); err != nil {
46*9e965d6fSRomain Jobredeaux		log.Fatalf("Error parsing input jdeps: %v", err)
47*9e965d6fSRomain Jobredeaux	}
48*9e965d6fSRomain Jobredeaux
49*9e965d6fSRomain Jobredeaux	newJdeps := proto.Clone(jdeps).(*dpb.Dependencies)
50*9e965d6fSRomain Jobredeaux	var deps []*dpb.Dependency
51*9e965d6fSRomain Jobredeaux	for _, dep := range jdeps.Dependency {
52*9e965d6fSRomain Jobredeaux		if !strings.HasSuffix(dep.GetPath(), *target) {
53*9e965d6fSRomain Jobredeaux			deps = append(deps, dep)
54*9e965d6fSRomain Jobredeaux		}
55*9e965d6fSRomain Jobredeaux	}
56*9e965d6fSRomain Jobredeaux	newJdeps.Dependency = deps
57*9e965d6fSRomain Jobredeaux
58*9e965d6fSRomain Jobredeaux	bytes, err = proto.Marshal(newJdeps)
59*9e965d6fSRomain Jobredeaux	if err != nil {
60*9e965d6fSRomain Jobredeaux		log.Fatalf("Error serializing output jdeps: %v", err)
61*9e965d6fSRomain Jobredeaux	}
62*9e965d6fSRomain Jobredeaux
63*9e965d6fSRomain Jobredeaux	err = ioutil.WriteFile(*out, bytes, 0644)
64*9e965d6fSRomain Jobredeaux	if err != nil {
65*9e965d6fSRomain Jobredeaux		log.Fatalf("Error writing output jdeps: %v", err)
66*9e965d6fSRomain Jobredeaux	}
67*9e965d6fSRomain Jobredeaux}
68