Sync EDKII BaseTools to BaseTools project r1903.
[efi/edk2/.git] / edk2 / BaseTools / Source / Python / fpd2dsc / fpd2dsc.py
1 ## @file\r
2 # Convert an XML-based FPD file to a text-based DSC file.\r
3 #\r
4 # Copyright (c) 2007 - 2010, Intel Corporation\r
5 # All rights reserved. This program and the accompanying materials\r
6 # are licensed and made available under the terms and conditions of the BSD License\r
7 # which accompanies this distribution.  The full text of the license may be found at\r
8 # http://opensource.org/licenses/bsd-license.php\r
9 #\r
10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12 #\r
13 \r
14 ##\r
15 # Import Modules\r
16 #\r
17 import os, re, sys, xml.dom.minidom  #XmlRoutines, EdkIIWorkspace\r
18 from LoadFpd import LoadFpd\r
19 from StoreDsc import StoreDsc\r
20 from optparse import OptionParser\r
21 \r
22 # Version and Copyright\r
23 __version_number__ = "1.0"\r
24 __version__ = "%prog Version " + __version_number__\r
25 __copyright__ = "Copyright (c) 2007 - 2010, Intel Corporation  All rights reserved."\r
26 \r
27 ## Parse command line options\r
28 #\r
29 # Using standard Python module optparse to parse command line option of this tool.\r
30 #\r
31 # @retval Options   A optparse.Values object containing the parsed options\r
32 # @retval Args      All the arguments got from the command line\r
33 #\r
34 def MyOptionParser():\r
35     """ Argument Parser """\r
36     usage = "%prog [options] input_filename"\r
37     parser = OptionParser(usage=usage,description=__copyright__,version="%prog " + str(__version_number__))\r
38     parser.add_option("-o", "--output", dest="outfile", help="Specific Name of the DSC file to create, otherwise it is the FPD filename with the extension repalced.")\r
39     parser.add_option("-a", "--auto", action="store_true", dest="autowrite", default=False, help="Automatically create output files and write the DSC file")\r
40     parser.add_option("-q", "--quiet", action="store_const", const=0, dest="verbose", help="Do not print any messages, just return either 0 for succes or 1 for failure")\r
41     parser.add_option("-v", "--verbose", action="count", dest="verbose", help="Do not print any messages, just return either 0 for succes or 1 for failure")\r
42     parser.add_option("-d", "--debug", action="store_true", dest="debug", default=False, help="Enable printing of debug messages.")\r
43     parser.add_option("-w", "--workspace", dest="workspace", default=str(os.environ.get('WORKSPACE')), help="Specify workspace directory.")\r
44     (options, args) = parser.parse_args(sys.argv[1:])\r
45 \r
46     return options,args\r
47 \r
48 ## Entrance method\r
49 #\r
50 # This method mainly dispatch specific methods per the command line options.\r
51 # If no error found, return zero value so the caller of this tool can know\r
52 # if it's executed successfully or not.\r
53 #\r
54 # @retval 0     Tool was successful\r
55 # @retval 1     Tool failed\r
56 #\r
57 def Main():\r
58     global Options\r
59     global Args\r
60     global WorkSpace\r
61     Options,Args = MyOptionParser()\r
62 \r
63     WorkSpace = ""\r
64     #print Options.workspace\r
65     if (Options.workspace == None):\r
66         print "ERROR: E0000: WORKSPACE not defined.\n  Please set the WORKSPACE environment variable to the location of the EDK II install directory."\r
67         sys.exit(1)\r
68     else:\r
69         WorkSpace = Options.workspace\r
70         if (Options.debug):\r
71             print "Using Workspace:", WorkSpace\r
72     try:\r
73         Options.verbose +=1\r
74     except:\r
75         Options.verbose = 1\r
76         pass\r
77 \r
78     InputFile = ""\r
79     if Args == []:\r
80         print "usage:" "%prog [options] input_filename"\r
81     else:\r
82         InputFile = Args[0]\r
83         #print InputFile\r
84     if InputFile != "":\r
85         FileName = InputFile\r
86         if ((Options.verbose > 1) | (Options.autowrite)):\r
87             print "FileName:",InputFile\r
88     else:\r
89         print "ERROR: E0001 - You must specify an input filename"\r
90         sys.exit(1)\r
91 \r
92     if (Options.outfile):\r
93         OutputFile = Options.outfile\r
94     else:\r
95        OutputFile = FileName.replace('.fpd', '.dsc')\r
96 \r
97     if ((Options.verbose > 2) or (Options.debug)):\r
98         print "Output Filename:", OutputFile\r
99         \r
100     try:\r
101         Platform = LoadFpd(FileName)\r
102         StoreDsc(OutputFile, Platform)\r
103         return 0\r
104     except Exception, e:\r
105         print e\r
106         return 1\r
107 \r
108 if __name__ == '__main__':\r
109     sys.exit(Main())\r
110     #pass\r
111     #global Options\r
112     #global Args\r
113     #Options,Args = MyOptionParser()\r
114     \r
115     #Main()\r
116     #sys.exit(0)