blob: a8602deb789bde6be30eaaa9d16a0f48275cabc2 [file] [log] [blame]
Jingwen Chen5ba7e472020-07-15 10:06:41 +00001// Copyright 2020 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package main
16
17import (
18 "android/soong/android"
Liz Kammer2dd9ca42020-11-25 16:06:39 -080019 "android/soong/bp2build"
Jingwen Chen5ba7e472020-07-15 10:06:41 +000020 "io/ioutil"
21 "os"
22 "path/filepath"
Jingwen Chen5ba7e472020-07-15 10:06:41 +000023)
24
Liz Kammerba3ea162021-02-17 13:22:03 -050025func createBazelQueryView(ctx *bp2build.CodegenContext, bazelQueryViewDir string) error {
Liz Kammer2dd9ca42020-11-25 16:06:39 -080026 ruleShims := bp2build.CreateRuleShims(android.ModuleTypeFactories())
Jingwen Chen164e0862021-02-19 00:48:40 -050027
Jingwen Chenc63677b2021-06-17 05:43:19 +000028 // Ignore metrics reporting and compat layers for queryview, since queryview
29 // is already a full-repo conversion and can use data from bazel query
30 // directly.
31 buildToTargets, _, _ := bp2build.GenerateBazelTargets(ctx, true)
Jingwen Chen5ba7e472020-07-15 10:06:41 +000032
Jingwen Chen33832f92021-01-24 22:55:54 -050033 filesToWrite := bp2build.CreateBazelFiles(ruleShims, buildToTargets, bp2build.QueryView)
Liz Kammer2dd9ca42020-11-25 16:06:39 -080034 for _, f := range filesToWrite {
35 if err := writeReadOnlyFile(bazelQueryViewDir, f); err != nil {
Jingwen Chend8004ef2020-08-27 09:40:43 +000036 return err
37 }
38 }
39
Liz Kammer2dd9ca42020-11-25 16:06:39 -080040 return nil
Jingwen Chen5ba7e472020-07-15 10:06:41 +000041}
42
Liz Kammer2dd9ca42020-11-25 16:06:39 -080043// The auto-conversion directory should be read-only, sufficient for bazel query. The files
Jingwen Chend8004ef2020-08-27 09:40:43 +000044// are not intended to be edited by end users.
Liz Kammer2dd9ca42020-11-25 16:06:39 -080045func writeReadOnlyFile(dir string, f bp2build.BazelFile) error {
46 dir = filepath.Join(dir, f.Dir)
47 if err := createDirectoryIfNonexistent(dir); err != nil {
48 return err
49 }
50 pathToFile := filepath.Join(dir, f.Basename)
51
Jingwen Chen5ba7e472020-07-15 10:06:41 +000052 // 0444 is read-only
Liz Kammer2dd9ca42020-11-25 16:06:39 -080053 err := ioutil.WriteFile(pathToFile, []byte(f.Contents), 0444)
54
55 return err
Jingwen Chen5ba7e472020-07-15 10:06:41 +000056}
Jingwen Chen69d4cbe2020-08-07 14:16:34 +000057
Liz Kammer2dd9ca42020-11-25 16:06:39 -080058func createDirectoryIfNonexistent(dir string) error {
59 if _, err := os.Stat(dir); os.IsNotExist(err) {
60 return os.MkdirAll(dir, os.ModePerm)
61 } else {
62 return err
Jingwen Chen69d4cbe2020-08-07 14:16:34 +000063 }
64}