f8fe358884ae3e52e19be92ebcce1f17363fb823
[roojspacker] / src / jsdoc / PackerRun.vala
1
2 /** 
3   the application
4   -- in theory this code  can be used as a library... but this is the standard command line version...
5   
6   
7   valac  --vapidir=/usr/share/vala/vapi 
8      --vapidir=/usr/share/vala/vapi 
9     --vapidir=/usr/share/vala-0.30/vapi 
10         --thread  -g  
11       JSDOC/Lang.vala JSDOC/TextStream.vala JSDOC/TokenReader.vala JSDOC/Token.vala JSDOC/TokenStream.vala JSDOC/Packer.vala 
12       JSDOC/Collapse.vala JSDOC/ScopeParser.vala JSDOC/Scope.vala JSDOC/Identifier.vala JSDOC/CompressWhite.vala 
13        JSDOC/PackerRun.vala --pkg glib-2.0 --pkg gee-1.0 --pkg gio-2.0 --pkg posix -o /tmp/jspack --target-glib=2.32  -X -lm
14
15   
16 */
17
18 namespace JSDOC
19 {
20         // --------------- <<<<<<< <MAIN HERE....
21         
22 #if HAVE_OLD_GLIB
23         class PackerRun : Object 
24 #else
25         class PackerRun : Application   
26 #endif
27         {
28                 public static string opt_target = null;
29                 public static string opt_debug_target = null;
30 //              public static string opt_tmpdir = null;
31                 private static string opt_basedir = null;
32                 
33                 /**
34                 * @cfg baseDir -- prefix the files listed in indexfiles with this.
35                 */
36                  
37                 public static string opt_real_basedir = null; // USE this one it's calcuated based on current path..
38                 
39                 public static string opt_doc_target = null;
40                 public static string opt_doc_template_dir = null;
41                 public static bool opt_doc_include_private = false;             
42                                 
43                 [CCode (array_length = false, array_null_terminated = true)]
44                 private static string[]? opt_files = null;
45                 [CCode (array_length = false, array_null_terminated = true)]
46                 private static string[]? opt_files_from = null;
47                 
48                 
49                 public static bool opt_debug = false;
50                 
51                  /**
52                  * @cfg {Boolean} opt_skip_scope (optional) skip Scope parsing and replacement.
53                  *    usefull for debugging...
54                  */
55                 public static bool opt_skip_scope = false;
56                 
57                 /**
58                  * @cfg {Boolean} opt_keep_whitespace (optional) do not remove white space in output.
59                  *    usefull for debugging compressed files.
60                  */
61                 
62                 public static bool opt_keep_whitespace = false; 
63                 
64                         /**
65                  * @cfg {Boolean} opt_dump_tokens (optional) read the first file and dump the tokens.
66                  *    usefull for debugging...
67                  */
68                 
69                 public static bool opt_dump_tokens = false;     
70                 
71                   
72                 /**
73                  * @cfg {Boolean} opt_clean_cache  (optional) clean up temp files after done - 
74                  *    Defaults to false if you set tmpDir, otherwise true.
75                  */
76                 
77                 public static bool opt_clean_cache = true;      
78                 
79                 // not actually an option yet..
80                 
81                 public static string opt_doc_ext = "html";
82                 
83                 const OptionEntry[] options = {
84                 
85                         { "jsfile", 'f', 0, OptionArg.FILENAME_ARRAY, ref opt_files ,"add a file to compile", null },
86                         { "target", 't', 0, OptionArg.STRING, ref opt_target, "Target File to write (eg. roojs.js)", null },
87                         { "debug-target", 'T', 0, OptionArg.STRING, ref opt_debug_target, "Target File to write debug code (eg. roojs-debug.js)", null },
88                         //{ "tmpdir", 'm', 0, OptionArg.STRING, ref opt_tmpdir, "Temporary Directory to use (defaults to /tmp)", null },
89                         { "basedir", 'b', 0, OptionArg.STRING, ref opt_basedir, "Base directory (where the files listed in index files are located.)", null },
90
91                         { "index-files", 'i', 0, OptionArg.FILENAME_ARRAY, ref opt_files_from ,"files that contain listing of files to compile", null },                 
92                         { "keep-whitespace", 'w', 0, OptionArg.NONE, ref opt_keep_whitespace, "Keep whitespace", null },
93                         { "skip-scope", 's', 0, OptionArg.NONE, ref opt_skip_scope, "Skip scope parsing and variable replacement", null },
94                         { "debug", 0, 0, OptionArg.NONE, ref opt_debug, "Show debug messages", null },
95                         { "dump-tokens", 'k', 0, OptionArg.NONE, ref opt_dump_tokens, "Dump the tokens from a file", null },
96                         { "clean-cache", 'c', 0, OptionArg.NONE, ref opt_clean_cache, "Clean up the cache after running (slower)", null },
97
98                         // fixme -- keepwhite.. cleanup 
99                         
100                         // documentation options
101                         // usage: roojspacker --basedir roojs1 \
102                         //       --doc-target roojs1/docs \
103                         //       --index-files roojs1/buildSDK/dependancy_core.txt  \
104                         //       --index-files roojs1/buildSDK/dependancy_ui.txt  \
105                         //       --index-files roojs1/buildSDK/dependancy_bootstrap.txt  \
106                         //       --doc-template-dir\
107                         
108                         
109                         { "doc-target", 'd', 0, OptionArg.STRING, ref opt_doc_target, "Documentation Directory target", null },
110                         { "doc-template-dir", 'p', 0, OptionArg.STRING, ref opt_doc_template_dir, "Documentation Directory target", null },
111                         { "doc-private", 'p', 0, OptionArg.NONE, ref opt_doc_include_private, "Document Private functions", null },                                             
112                         
113                         
114                         
115                         { null }
116                 };
117                  
118
119         
120                 public PackerRun (string[] args)
121                 {
122 #if !HAVE_OLD_GLIB              
123                         Object(
124                             application_id: "org.roojs.jsdoc.packerrun",
125                                 flags: ApplicationFlags.HANDLES_COMMAND_LINE 
126                         );
127 #endif                                   
128                          
129                         
130                         // what's required...
131                         if (opt_debug) {
132                                 GLib.Log.set_handler(null, 
133                                         GLib.LogLevelFlags.LEVEL_DEBUG | GLib.LogLevelFlags.LEVEL_WARNING, 
134                                         (dom, lvl, msg) => {
135                                         print("%s: %s\n", dom, msg);
136                                 });
137                         }
138                         
139                         
140                 
141   
142   
143                          
144                         // set the base directory...
145                         var curdir = Environment.get_current_dir() + Path.DIR_SEPARATOR_S;
146                         if (opt_basedir == null) {
147
148                                 opt_real_basedir = curdir;
149                         } else if (opt_basedir[0] == '/') {     
150                                 opt_real_basedir  = opt_basedir;
151                         } else {
152                                 opt_real_basedir  = curdir + opt_basedir;
153                         }
154                         // suffix a slash..
155                         if (opt_real_basedir [opt_real_basedir .length-1].to_string() != Path.DIR_SEPARATOR_S) {
156                                 opt_real_basedir  += Path.DIR_SEPARATOR_S;
157                         }
158                         
159                         GLib.debug("real_base_dir  = '%s' : opt_basedir ='%s'\n", opt_real_basedir , opt_basedir);
160                         
161                         
162                         if (opt_files == null && opt_files_from == null) {
163                                 GLib.error("You must list some files with -f or -i to compile - see --help for more details");
164                                 GLib.Process.exit(1);
165                         }
166                         
167                         
168                                 // now run the Packer...
169                         var p = new Packer(                     );
170                         
171                         
172                         if (opt_files != null) {
173                          
174                                 foreach (var  f in opt_files) {
175                                         GLib.debug("Adding File %s", f);
176                                         p.loadFile(f);
177                                 }
178                         }  
179                         if (opt_files_from != null) {
180                          
181                                 foreach (var  f in opt_files_from) {
182                                         GLib.debug("Adding File %s", f);
183                                         p.loadSourceIndex(f);
184                                 }
185                         }  
186                         
187                         var run_pack = false;
188                         if (opt_target != null || opt_debug_target != null || opt_dump_tokens) {
189                         
190                                 p.pack( opt_target == null ? "" : opt_target ,
191                                                 opt_debug_target == null ? "" :  opt_debug_target );
192                         
193                         if (p.outstr.length > 0 ) {
194                                         stdout.printf ("%s", p.outstr);
195                                 }
196                 }
197                 if (opt_doc_target != null) {
198                         //var d = new DocBuilder(p);
199                 }
200                 
201                 
202                 
203                 
204                 }        
205                 
206         }
207         
208 }