]> git.saurik.com Git - wxWidgets.git/commitdiff
1. added wfstream.cpp to wxBase (needed by filesys.cpp)
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 5 Jan 2000 18:10:06 +0000 (18:10 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 5 Jan 2000 18:10:06 +0000 (18:10 +0000)
2. small enchancements in wxCmdLineParser (handles "help" options correctly)
3. use wxCmdLineParser in makegen

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5266 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

12 files changed:
Makefile.in
distrib/msw/tmake/filelist.txt
include/wx/cmdline.h
src/common/cmdline.cpp
src/msw/makefile.b32
src/msw/makefile.bcc
src/msw/makefile.dos
src/msw/makefile.g95
src/msw/makefile.sc
src/msw/makefile.vc
src/msw/makefile.wat
utils/makegen/makegen.cpp

index e62ab62f171f3b9dbaa63b6c6e650fcd39d590f3..81ff08708eef3cf143ca6d31cd2b78c1b97ac609 100644 (file)
@@ -1,5 +1,5 @@
 #
-# This file was automatically generated by tmake at 18:17, 2000/01/05
+# This file was automatically generated by tmake at 19:06, 2000/01/05
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE UNX.T!
 
 #
@@ -166,6 +166,7 @@ BASE_HEADERS = \
                utils.h \
                variant.h \
                version.h \
+               wfstream.h \
                wx.h \
                wxchar.h \
                wxprec.h
@@ -1873,6 +1874,7 @@ BASE_OBJS = \
                txtstrm.o \
                utilscmn.o \
                variant.o \
+               wfstream.o \
                wxchar.o \
                dir.o \
                threadpsx.o \
@@ -1911,6 +1913,7 @@ BASE_DEPS = \
                txtstrm.d \
                utilscmn.d \
                variant.d \
+               wfstream.d \
                wxchar.d \
                dir.d \
                threadpsx.d \
index aedc9cb8de93e3c262691617c17db1a480f49537..bbf5cc9e030875df55e38eb85a2d49b4b6d6d5b0 100644 (file)
@@ -187,7 +187,7 @@ valgen.cpp  C
 validate.cpp   C
 valtext.cpp    C
 variant.cpp    C       B
-wfstream.cpp   C
+wfstream.cpp   C       B
 wincmn.cpp     C
 wxchar.cpp     C       B
 wxexpr.cpp     C
@@ -695,7 +695,7 @@ valtext.h   W
 variant.h      W       B
 version.h      W       B
 wave.h W
-wfstream.h     W
+wfstream.h     W       B
 window.h       W
 wizard.h       W
 wx.h   W       B
index 0b7576b8cfd5f38ef3f138569fcbc5566590440d..c8bea6105fe5984e6fe01e235d2a878107b276ea 100644 (file)
@@ -126,6 +126,9 @@ public:
     void EnableLongOptions(bool enable = TRUE);
     void DisableLongOptions() { EnableLongOptions(FALSE); }
 
+    // extra text may be shown by Usage() method if set by this function
+    void SetLogo(const wxString& logo);
+
     // construct the cmd line description
     // ----------------------------------
 
@@ -181,7 +184,7 @@ public:
     size_t GetParamCount() const;
 
     // gets the value of Nth parameter (as string only for now)
-    wxString GetParam(size_t n) const;
+    wxString GetParam(size_t n = 0u) const;
 
 private:
     // common part of all ctors
index 6fc133bc4e760bb02b9308ab403df2ca0ea79133..b25354f10400593f00760e2a39cde0baf3dcf27e 100644 (file)
@@ -142,8 +142,8 @@ struct wxCmdLineParserData
 {
     // options
     wxString m_switchChars;     // characters which may start an option
-
     bool m_enableLongOptions;   // TRUE if long options are enabled
+    wxString m_logo;            // some extra text to show in Usage()
 
     // cmd line data
     wxArrayString m_arguments;  // == argv, argc == m_arguments.GetCount()
@@ -264,6 +264,11 @@ void wxCmdLineParser::EnableLongOptions(bool enable)
     m_data->m_enableLongOptions = enable;
 }
 
+void wxCmdLineParser::SetLogo(const wxString& logo)
+{
+    m_data->m_logo = logo;
+}
+
 // ----------------------------------------------------------------------------
 // command line construction
 // ----------------------------------------------------------------------------
@@ -275,7 +280,8 @@ void wxCmdLineParser::SetDesc(const wxCmdLineEntryDesc *desc)
         switch ( desc->kind )
         {
             case wxCMD_LINE_SWITCH:
-                AddSwitch(desc->shortName, desc->longName, desc->description);
+                AddSwitch(desc->shortName, desc->longName, desc->description,
+                          desc->flags);
                 break;
 
             case wxCMD_LINE_OPTION:
@@ -842,6 +848,11 @@ void wxCmdLineParser::Usage()
         }
     }
 
+    if ( !!m_data->m_logo )
+    {
+        wxLogMessage(m_data->m_logo);
+    }
+
     wxLogMessage(brief);
     wxLogMessage(detailed);
 }
index 72b15494678cabdac874ca59f64c094ca6b04a3b..5a93432c83ab6aa626a2112daf271b4fa6cc1d5d 100644 (file)
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 18:17, 2000/01/05
+# This file was automatically generated by tmake at 19:06, 2000/01/05
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE B32.T!
 
 #
index 676e5816fe46fa6ff9984415ab2b3a116e8124d7..ba2d0c7ca3f40ff69d8cedc83a57dc3a8ca8985e 100644 (file)
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 18:17, 2000/01/05
+# This file was automatically generated by tmake at 19:06, 2000/01/05
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE BCC.T!
 
 #
index 8da9a5ed058b3935cd1fb4c5f660afeb8ce963c3..f818a5491dbca7a29cea4685617b2d13d43126d6 100644 (file)
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:17, 2000/01/05
+# This file was automatically generated by tmake at 19:06, 2000/01/05
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE DOS.T!
 
 #
index 699f99b3e0777da1a007e208eb3249407d3a4d0b..e57041af51054922c744be8ad1da83bd2ef28d6b 100644 (file)
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:17, 2000/01/05
+# This file was automatically generated by tmake at 19:06, 2000/01/05
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE G95.T!
 
 #
index e545a7e42307cd91375c54627802c43c3dd4446c..875c0a3c5cabb49d1788431af7b31ee368930d0d 100644 (file)
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 18:17, 2000/01/05
+# This file was automatically generated by tmake at 19:06, 2000/01/05
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE SC.T!
 
 # Symantec C++ makefile for the msw objects
index 6e5cbca3163be3de904b7dcf0c7755c2db74de70..eb11156d804f7b67ebb36e853f640102cdd29a6b 100644 (file)
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 18:17, 2000/01/05
+# This file was automatically generated by tmake at 19:06, 2000/01/05
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE VC.T!
 
 # File:     makefile.vc
index 5b294fc30986c95798842f2cc692cd2f65866e0e..9c90e01dfb472fe6b1ef42448a22eaae719f6dca 100644 (file)
@@ -1,6 +1,6 @@
 #!/binb/wmake.exe
 
-# This file was automatically generated by tmake at 18:17, 2000/01/05
+# This file was automatically generated by tmake at 19:06, 2000/01/05
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE WAT.T!
 
 #
index 6a49d4e5cc039afbf89dbd58ff4eb8f77209d407..5013ffdfde1f58fe2870b038bf0038c9d4883023 100644 (file)
@@ -9,6 +9,13 @@
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
+/*
+ * TODO
+ *
+ *  1. support for programs with multiple object files
+ *  2. support for programs under utils and demos, not only samples
+ */
+
 // ============================================================================
 // declarations
 // ============================================================================
@@ -29,6 +36,7 @@
 #include <wx/dir.h>
 #include <wx/textfile.h>
 #include <wx/datetime.h>
+#include <wx/cmdline.h>
 
 // ----------------------------------------------------------------------------
 // the application class
 class MakeGenApp : public wxApp
 {
 public:
+    MakeGenApp() { m_quiet = FALSE; }
+
     virtual bool OnInit();
 
     virtual int OnRun();
 
 private:
-    void Usage();               // give the usage message
-
     bool GenerateMakefile(const wxString& filename);
 
-    wxString m_sampleName,      // the name of the sample
+    wxString m_progname,        // the name of the sample
              m_dirname,         // directory with the template files
-             m_outputDir;       // directory to output files to
+             m_outdir;          // directory to output files to
+
+    bool m_quiet;               // don't give non essential messages
 };
 
 IMPLEMENT_APP(MakeGenApp);
@@ -61,11 +71,6 @@ IMPLEMENT_APP(MakeGenApp);
 // MakeGenApp
 // ----------------------------------------------------------------------------
 
-void MakeGenApp::Usage()
-{
-    wxLogError(_T("Usage: %s [-o output_dir] sample_name"), argv[0]);
-}
-
 bool MakeGenApp::GenerateMakefile(const wxString& filename)
 {
     wxTextFile fileIn(m_dirname + filename);
@@ -76,7 +81,7 @@ bool MakeGenApp::GenerateMakefile(const wxString& filename)
         return FALSE;
     }
 
-    wxFFile fileOut(m_outputDir + filename, "w");
+    wxFFile fileOut(m_outdir + filename, "w");
     if ( !fileOut.IsOpened() )
     {
         wxLogError(_T("Makefile '%s' couldn't be generated."), filename.c_str());
@@ -84,13 +89,16 @@ bool MakeGenApp::GenerateMakefile(const wxString& filename)
         return FALSE;
     }
 
+    wxLogVerbose(_T("Generating '%s' for '%s'..."),
+                 (m_outdir + filename).c_str(), m_progname.c_str());
+
     size_t count = fileIn.GetLineCount();
     for ( size_t n = 0; n < count; n++ )
     {
         wxString line = fileIn[n];
 
         line.Replace(_T("#DATE"), wxDateTime::Now().FormatISODate());
-        line.Replace(_T("#NAME"), m_sampleName);
+        line.Replace(_T("#NAME"), m_progname);
 
         fileOut.Write(line + _T('\n'));
     }
@@ -98,28 +106,65 @@ bool MakeGenApp::GenerateMakefile(const wxString& filename)
     return TRUE;
 }
 
+// parse the cmd line
 bool MakeGenApp::OnInit()
 {
-    // parse the cmd line
-    if ( (argc == 1) || (argc == 3) ||
-         (argv[1][0] == _T('-') && argv[1][1] != _T('o')) ||
-         (argc == 2 && argv[1][0] == _T('-')) )
+    static const wxCmdLineEntryDesc cmdLineDesc[] =
     {
-        Usage();
+        { wxCMD_LINE_SWITCH, _T("h"), _T("help"),    _T("give this usage message"),
+            wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
+        { wxCMD_LINE_SWITCH, _T("v"), _T("verbose"), _T("be more verbose") },
+        { wxCMD_LINE_SWITCH, _T("q"), _T("quiet"),   _T("be quiet") },
 
+        { wxCMD_LINE_OPTION, _T("i"), _T("input"),   _T("directory with template files") },
+
+        { wxCMD_LINE_PARAM,  NULL, NULL,     _T("output_directory") },
+
+        { wxCMD_LINE_NONE }
+    };
+
+    wxCmdLineParser parser(cmdLineDesc, argc, argv);
+    parser.SetLogo(_T("MakeGen: a makefile generator for wxWindows\n"
+                      "Copyright (c) 2000 Vadim Zeitlin"));
+
+    if ( parser.Parse() != 0 )
+    {
+        // failed to parse the cmd line or help was requested (and given)
         return FALSE;
     }
 
-    m_sampleName = argv[1];
-    if ( m_sampleName[0u] == _T('-') )
+    (void)parser.Found(_T("i"), &m_dirname);
+    if ( parser.Found(_T("q")) )
     {
-        m_outputDir = argv[2];
-        if ( !wxEndsWithPathSeparator(m_outputDir) )
-        {
-            m_outputDir += _T('/');
-        }
+        m_quiet = TRUE;
+
+        wxLog::GetActiveTarget()->SetVerbose(FALSE);
+    }
+    else if ( parser.Found(_T("v")) )
+    {
+        wxLog::GetActiveTarget()->SetVerbose();
+    }
+
+    m_outdir = parser.GetParam();
+
+#ifdef __WINDOWS__
+    m_outdir.Replace(_T("\\"), _T("/"));
+#endif
+
+    if ( !!m_outdir && m_outdir.Last() == _T('/') )
+    {
+        m_outdir.Truncate(m_outdir.length() - 1);
+    }
+
+    m_progname = m_outdir.AfterLast(_T('/'));
+
+    if ( !m_progname )
+    {
+        wxLogError(_T("Output directory should be specified."));
 
-        m_sampleName = argv[3];
+        parser.Usage();
+
+        return FALSE;
     }
 
     return TRUE;
@@ -127,10 +172,13 @@ bool MakeGenApp::OnInit()
 
 int MakeGenApp::OnRun()
 {
-    m_dirname = wxGetenv(_T("MAKEGEN_PATH"));
     if ( !m_dirname )
     {
-        m_dirname = wxGetCwd();
+        m_dirname = wxGetenv(_T("MAKEGEN_PATH"));
+        if ( !m_dirname )
+        {
+            m_dirname = wxGetCwd();
+        }
     }
 
     if ( !wxEndsWithPathSeparator(m_dirname) )
@@ -153,7 +201,7 @@ int MakeGenApp::OnRun()
 
     wxString filename;
     size_t n = 0;
-    bool cont = dir.GetFirst(&filename, _T("?akefile.*"), wxDIR_FILES);
+    bool cont = dir.GetFirst(&filename, wxEmptyString, wxDIR_FILES);
     while ( cont )
     {
         n++;
@@ -171,9 +219,9 @@ int MakeGenApp::OnRun()
     if ( n )
     {
         wxLogVerbose(_T("Successfully generated %u makefiles in '%s'."),
-                     n, m_outputDir.c_str());
+                     n, m_outdir.c_str());
     }
-    else
+    else if ( !m_quiet )
     {
         wxLogWarning(_T("No makefiles found: either set MAKEGEN_PATH variable "
                         "or run the program from its directory"));