Changed Flora license
[apps/core/preloaded/print-service.git] / drvopt / getdrv.go
1 /*
2 *       Printservice
3 *
4 * Copyright 2012  Samsung Electronics Co., Ltd
5
6 * Licensed under the Flora License, Version 1.1 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9
10 * http://floralicense.org/license/
11
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 */
19
20 package main
21
22 import (
23         "./drv"
24         "flag"
25         "fmt"
26         "io/ioutil"
27         "os"
28         "os/exec"
29         "runtime/pprof"
30 )
31
32 var (
33         infile          string
34         outfile         *os.File
35         err                     error
36         glob            string
37         product         string
38         listmod         string
39         listprod        string
40         show_help       bool
41         cpuprofile      string
42 )
43
44 func init() {
45         flag.StringVar(&infile, "i", "stripped.drv", "input drv file")
46         flag.StringVar(&glob, "r", "", "model search pattern")
47         flag.StringVar(&product, "p", "", "product search pattern")
48         flag.StringVar(&listmod, "l", "", "list models")
49         flag.StringVar(&listprod, "c", "", "list products")
50         flag.StringVar(&cpuprofile, "f", "", "write cpu profile to file")
51 }
52
53 func main() {
54
55         flag.Parse()
56
57         if cpuprofile != "" {
58                 f, err := os.Create(cpuprofile)
59                 if err != nil {
60                         fmt.Print(err)
61                 }
62                 pprof.StartCPUProfile(f)
63                 defer pprof.StopCPUProfile()
64         }
65
66         if infile == "" {
67                 flag.Usage()
68                 return
69         }
70
71         if listmod != "" {
72                 drvm := drv.LoadDrvm(listmod)
73                 drvm.ListModels()
74                 return
75         }
76
77         if listprod != "" {
78                 drvm := drv.LoadDrvm(listprod)
79                 drvm.ListProducts()
80                 return
81         }
82
83         drvm := drv.LoadDrvm(infile)
84
85         if outfile == nil {
86                 outfile, err = ioutil.TempFile("/tmp", "DRV")
87                 if err != nil {
88                         fmt.Println(err)
89                         return
90                 }
91         }
92         defer outfile.Close()
93         defer os.Remove(outfile.Name())
94
95         switch {
96         case glob != "":
97                 if drvm.PrintModel(glob, outfile) != nil {
98                         drvm.PrintProduct(glob, outfile)
99                 }
100         case product != "":
101                 if drvm.PrintProduct(product, outfile) != nil {
102                         drvm.PrintModel(product, outfile)
103                 }
104         }
105
106         cmd := exec.Command("ppdc", "-v", "-d", ".", outfile.Name())
107         out,err := cmd.Output()
108         if err != nil {
109                 fmt.Printf("cannot create ppd for model %s : %s\n", glob, err)
110         }
111
112         fmt.Printf("%s",out)
113         return
114 }