From e612f101d324eb3a81f0e73f07594c1836b41545 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 5 Jan 2000 18:10:06 +0000 Subject: [PATCH] 1. added wfstream.cpp to wxBase (needed by filesys.cpp) 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 --- Makefile.in | 5 +- distrib/msw/tmake/filelist.txt | 4 +- include/wx/cmdline.h | 5 +- src/common/cmdline.cpp | 15 ++++- src/msw/makefile.b32 | 2 +- src/msw/makefile.bcc | 2 +- src/msw/makefile.dos | 2 +- src/msw/makefile.g95 | 2 +- src/msw/makefile.sc | 2 +- src/msw/makefile.vc | 2 +- src/msw/makefile.wat | 2 +- utils/makegen/makegen.cpp | 106 ++++++++++++++++++++++++--------- 12 files changed, 107 insertions(+), 42 deletions(-) diff --git a/Makefile.in b/Makefile.in index e62ab62f17..81ff08708e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 \ diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index aedc9cb8de..bbf5cc9e03 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -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 diff --git a/include/wx/cmdline.h b/include/wx/cmdline.h index 0b7576b8cf..c8bea6105f 100644 --- a/include/wx/cmdline.h +++ b/include/wx/cmdline.h @@ -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 diff --git a/src/common/cmdline.cpp b/src/common/cmdline.cpp index 6fc133bc4e..b25354f104 100644 --- a/src/common/cmdline.cpp +++ b/src/common/cmdline.cpp @@ -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); } diff --git a/src/msw/makefile.b32 b/src/msw/makefile.b32 index 72b1549467..5a93432c83 100644 --- a/src/msw/makefile.b32 +++ b/src/msw/makefile.b32 @@ -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! # diff --git a/src/msw/makefile.bcc b/src/msw/makefile.bcc index 676e5816fe..ba2d0c7ca3 100644 --- a/src/msw/makefile.bcc +++ b/src/msw/makefile.bcc @@ -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! # diff --git a/src/msw/makefile.dos b/src/msw/makefile.dos index 8da9a5ed05..f818a5491d 100644 --- a/src/msw/makefile.dos +++ b/src/msw/makefile.dos @@ -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! # diff --git a/src/msw/makefile.g95 b/src/msw/makefile.g95 index 699f99b3e0..e57041af51 100644 --- a/src/msw/makefile.g95 +++ b/src/msw/makefile.g95 @@ -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! # diff --git a/src/msw/makefile.sc b/src/msw/makefile.sc index e545a7e423..875c0a3c5c 100644 --- a/src/msw/makefile.sc +++ b/src/msw/makefile.sc @@ -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 diff --git a/src/msw/makefile.vc b/src/msw/makefile.vc index 6e5cbca316..eb11156d80 100644 --- a/src/msw/makefile.vc +++ b/src/msw/makefile.vc @@ -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 diff --git a/src/msw/makefile.wat b/src/msw/makefile.wat index 5b294fc309..9c90e01dfb 100644 --- a/src/msw/makefile.wat +++ b/src/msw/makefile.wat @@ -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! # diff --git a/utils/makegen/makegen.cpp b/utils/makegen/makegen.cpp index 6a49d4e5cc..5013ffdfde 100644 --- a/utils/makegen/makegen.cpp +++ b/utils/makegen/makegen.cpp @@ -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 #include #include +#include // ---------------------------------------------------------------------------- // the application class @@ -37,18 +45,20 @@ 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")); -- 2.45.2