예제 #1
0
void dialog_about::OnCopyVersionInfo( wxCommandEvent& event )
{
    if( !wxTheClipboard->Open() )
    {
        wxMessageBox( _( "Could not open clipboard to write version information." ),
                      _( "Clipboard Error" ), wxOK | wxICON_EXCLAMATION, this );
        return;
    }

    wxPlatformInfo platform;

    // DO NOT translate information in the msg_version string
    wxString msg_version;
    msg_version << "Application: " << info.GetAppName() << "\n";
    msg_version << "Version: " << info.GetBuildVersion() << "\n";
    msg_version << "Libraries: " << wxGetLibraryVersionInfo().GetVersionString() << "\n";
#ifdef BUILD_GITHUB_PLUGIN
    msg_version << "           " << KICAD_CURL::GetVersion() << "\n";
#endif
    msg_version << "Platform: " << wxGetOsDescription() << ", "
                                << platform.GetArchName() << ", "
                                << platform.GetEndiannessName() << ", "
                                << platform.GetPortIdName() << "\n";

    msg_version << "- Build Info -\n";
    msg_version << "wxWidgets: " << wxVERSION_NUM_DOT_STRING << " (";
    msg_version << __WX_BO_UNICODE __WX_BO_STL __WX_BO_WXWIN_COMPAT_2_8 ")\n";

    msg_version << "Boost: " << ( BOOST_VERSION / 100000 ) << wxT( "." )
                             << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." )
                             << ( BOOST_VERSION % 100 ) << wxT( "\n" );

#ifdef BUILD_GITHUB_PLUGIN
    msg_version << "Curl: " << LIBCURL_VERSION << "\n";
#endif

    msg_version << "KiCad - Compiler: ";
#if defined(__clang__)
    msg_version << "Clang " << __clang_major__ << "." << __clang_minor__ << "." << __clang_patchlevel__;
#elif defined(__GNUG__)
    msg_version << "GCC " << __GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__;
#elif defined(_MSC_VER)
    msg_version << "Visual C++ " << _MSC_VER;
#elif defined(__INTEL_COMPILER)
    msg_version << "Intel C++ " << __INTEL_COMPILER;
#else
    msg_version << "Other Compiler ";
#endif

#if defined(__GXX_ABI_VERSION)
    msg_version << " with C++ ABI " << __GXX_ABI_VERSION << "\n";
#else
    msg_version << " without C++ ABI\n";
#endif

    msg_version << "        Settings: ";

    #define ON "ON\n"
    #define OFF "OFF\n"

    msg_version << "USE_WX_GRAPHICS_CONTEXT=";
#ifdef USE_WX_GRAPHICS_CONTEXT
    msg_version << ON;
#else
    msg_version << OFF;
#endif

    msg_version << "                  USE_WX_OVERLAY=";
#ifdef USE_WX_OVERLAY
    msg_version << ON;
#else
    msg_version << OFF;
#endif

    msg_version << "                  KICAD_SCRIPTING=";
#ifdef KICAD_SCRIPTING
    msg_version << ON;
#else
    msg_version << OFF;
#endif

    msg_version << "                  KICAD_SCRIPTING_MODULES=";
#ifdef KICAD_SCRIPTING_MODULES
    msg_version << ON;
#else
    msg_version << OFF;
#endif

    msg_version << "                  KICAD_SCRIPTING_WXPYTHON=";
#ifdef KICAD_SCRIPTING_WXPYTHON
    msg_version << ON;
#else
    msg_version << OFF;
#endif

    msg_version << "                  BUILD_GITHUB_PLUGIN=";
#ifdef BUILD_GITHUB_PLUGIN
    msg_version << ON;
#else
    msg_version << OFF;
#endif

    msg_version << "                  KICAD_USE_SCH_IO_MANAGER=";
#ifdef KICAD_USE_SCH_IO_MANAGER
    msg_version << ON;
#else
    msg_version << OFF;
#endif

    msg_version << "                  KICAD_USE_OCE=";
#ifdef KICAD_USE_OCE
    msg_version << ON;
#else
    msg_version << OFF;
#endif

    wxTheClipboard->SetData( new wxTextDataObject( msg_version ) );
    wxTheClipboard->Close();
    copyVersionInfo->SetLabel( _( "Copied..." ) );
}
예제 #2
0
/**
 * Initializes the <code>AboutAppInfo</code> object with application specific information.
 *
 * This the object which holds all information about the application
 */
static void InitKiCadAboutNew( AboutAppInfo& info )
{
    // Set application specific icon
    const wxTopLevelWindow* const tlw = wxDynamicCast( Pgm().App().GetTopWindow(),
                                                       wxTopLevelWindow );

    if( tlw )
        info.SetIcon( tlw->GetIcon() );
    else
    {
        wxBitmap    bitmap = KiBitmap( icon_kicad_xpm  );
        wxIcon      icon;

        icon.CopyFromBitmap( bitmap );

        info.SetIcon( icon );
    }

    /* Set title */
    info.SetAppName( Pgm().App().GetAppName() );

    /* Copyright information */
    info.SetCopyright( wxT( "(C) 1992-2016 KiCad Developers Team" ) );

    /* KiCad build version */
    wxString version;
    version << GetBuildVersion()
#ifdef DEBUG
            << wxT( ", debug" )
#else
            << wxT( ", release" )
#endif
            << wxT( " build" );

    info.SetBuildVersion( version );

    /* wxWidgets version */
    wxString libVersion;
    libVersion << wxGetLibraryVersionInfo().GetVersionString();

    /* Unicode or ANSI version */
#if wxUSE_UNICODE
    libVersion << wxT( " Unicode " );
#else
    libVersion << wxT( " ANSI " );
#endif

    // Just in case someone builds KiCad with the platform native of Boost instead of
    // the version included with the KiCad source.
    libVersion << wxT( "and Boost " ) << ( BOOST_VERSION / 100000 ) << wxT( "." )
               << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." ) << ( BOOST_VERSION % 100 )
               << wxT( "\n" );

    // Operating System Information

    wxPlatformInfo platformInfo;

    libVersion << wxT( "Platform: " ) << wxGetOsDescription() << wxT( ", " )
               << platformInfo.GetArchName();

    info.SetLibVersion( libVersion );


    /* info/description part HTML formatted */

    wxString description;

    /* short description */
    description << wxT( "<p>" );
    description << wxT( "<b><u>" )
                << _( "Description" )
                << wxT( "</u></b>" ); // bold & underlined font for caption

    description << wxT( "<p>" )
                << _( "The KiCad EDA Suite is a set of open source applications for the "
                      "creation of electronic schematics and to design printed circuit boards." )
                << wxT( "</p>" );

    description << wxT( "</p>" );

    /* websites */
    description << wxT( "<p><b><u>" )
                << _( "KiCad on the web" )
                << wxT( "</u></b>" ); // bold & underlined font for caption

    // bullet-ed list with some http links
    description << wxT( "<ul>" );
    description << wxT( "<li>" )
                << HtmlHyperlink( wxT( "http://www.kicad-pcb.org" ),
                                  _( "The official KiCad site" ) )
                << wxT( "</li>" );
    description << wxT( "<li>" )
                << HtmlHyperlink( wxT( "https://launchpad.net/kicad" ),
                                  _( "Developer's website on Launchpad" ) )
                << wxT("</li>" );

    description << wxT( "<li>" )
                << HtmlHyperlink( wxT( "https://github.com/KiCad/" ),
                                  _( "Our official Repository for component and footprint libraries" ) )
                << wxT( "</li>" );

    description << wxT( "<li>" )
                << HtmlHyperlink( wxT( "https://github.com/KiCad/Footprint_Wizards" ),
                                  _( "Footprint wizards info on our official repository " ) )
                << wxT( "</li>" );

    description << wxT( "<p><u>" )
                << _( "Non official repositories" )
                << wxT( "</u>" );
    description << wxT( "<li>" )
                << HtmlHyperlink( wxT( "http://www.kicadlib.org" ),
                                  _( "Additional component libraries repository (kicadlib)" ) )
                << wxT( "</li>" );
    description << wxT( "<li>" )
                << HtmlHyperlink( wxT( "http://smisioto.no-ip.org/elettronica/kicad/kicad-en.htm" ),
                                  _( "Additional component libraries repository (smisioto)" ) )
                << wxT( "</li>" );
    description << wxT( "</ul>" );
    description << wxT( "</p>" );

    description << wxT( "<p><b><u>" )
                << _( "Bug tracker" )
                << wxT( "</u></b>" ); // bold & underlined font caption

    // bullet-ed list with some http links
    description << wxT( "<ul>" );
    description << wxT( "<li>" )
                <<HtmlHyperlink( wxT( "https://bugs.launchpad.net/kicad/+bugs?orderby=-id&start=0" ),
                                 _( "Report or examine bugs" ) )
                << wxT( "</li>" );
    description << wxT( "</ul></p>" );

    description << wxT( "<p><b><u>" )
                << _( "KiCad user group and community" )
                << wxT( "</u></b>" ); // bold & underlined font caption

    description << wxT( "<ul>" );
    description << wxT( "<li>" )
                << HtmlHyperlink( wxT( "https://groups.yahoo.com/neo/groups/kicad-users/info" ),
                                  _( "KiCad user group" ) )
                << wxT( "</li>" );

    description << wxT( "<li>" )
                << HtmlHyperlink( wxT( "https://forum.kicad.info" ),
                                  _( "KiCad forum" ) )
                << wxT( "</li>" );

    description << wxT( "</ul></p>" );

    info.SetDescription( description );


    // License information also HTML formatted:
    wxString license;
    license
        << wxT( "<div align='center'>" )
        << HtmlNewline( 4 )
        << _( "The complete KiCad EDA Suite is released under the" ) << HtmlNewline( 2 )
        << HtmlHyperlink( wxT( "http://www.gnu.org/licenses" ),
                          _( "GNU General Public License (GPL) version 3 or any later version" ) )
        << wxT( "</div>" );

    info.SetLicense( license );


    /* A contributor consists of the following information:
     * Mandatory:
     * - Name
     * - EMail address
     * Optional:
     * - Category
     * - Category specific icon
     *
     * All contributors of the same category will be enumerated under this category
     * which should be represented by the same icon.
     */

    // The core developers
    info.AddDeveloper( new Contributor( wxT( "Jean-Pierre Charras" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Dick Hollenbeck" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Wayne Stambaugh" ),
                                        wxT( "*****@*****.**" ) ) );

    // alphabetically by last name after main 3 above:
    info.AddDeveloper( new Contributor( wxT( "Frank Bennett" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Cirilo Bernardo" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Jonas Diemer" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Torsten Hüter" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Jerry Jacobs" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Mario Luzeiro" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Daniel Majewski" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Lorenzo Marcantonio" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Marco Mattila" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Chris Pavlina" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Miguel Angel Ajo Pelayo" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Jacobo Aragunde Perez" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Simon Richter" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Mark Roszko" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Marco Serantoni" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Brian Sidebotham" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Mateusz Skowroński" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Rafael Sokolowski" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Vesa Solonen" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Bernhard Stegmaier" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Orson (Maciej Sumiński)" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Tomasz Wlostowski" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Adam Wolf" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Alexander Zakamaldin" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Henner Zeller" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Andrew Zonenberg" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDeveloper( new Contributor( wxT( "Nick Østergaard" ),
                                        wxT( "*****@*****.**" ) ) );

    // The document writers
    info.AddDocWriter( new Contributor( wxT( "Jean-Pierre Charras" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDocWriter( new Contributor( wxT( "Marco Ciampa" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDocWriter( new Contributor( wxT( "Dick Hollenbeck" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDocWriter( new Contributor( wxT( "Igor Plyatov" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDocWriter( new Contributor( wxT( "Wayne Stambaugh" ),
                                        wxT( "*****@*****.**" ) ) );
    info.AddDocWriter( new Contributor( wxT( "Fabrizio Tappero" ),
                                        wxT( "*****@*****.**" ) ) );

    /* The translators
     * As category the language to which the translation was done is used
     * and as icon the national flag of the corresponding country.
     */
    info.AddTranslator( new Contributor( wxT( "Robert Buj" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Catalan (CA)" ),
                                         KiBitmapNew( lang_catalan_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Martin Kratoška" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Czech (CZ)" ),
                                         KiBitmapNew( lang_cs_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Jerry Jacobs" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Dutch (NL)" ),
                                         KiBitmapNew( lang_nl_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Vesa Solonen" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Finnish (FI)" ),
                                         KiBitmapNew( lang_fi_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Jean-Pierre Charras" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "French (FR)" ),
                                         KiBitmapNew( lang_fr_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Mateusz Skowroński" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Polish (PL)" ),
                                         KiBitmapNew( lang_pl_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Kerusey Karyu" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Polish (PL)" ),
                                         KiBitmapNew( lang_pl_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Renie Marquet" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Portuguese (PT)" ),
                                         KiBitmapNew( lang_pt_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Igor Plyatov" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Russian (RU)" ),
                                         KiBitmapNew( lang_ru_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Andrey Fedorushkov" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Russian (RU)" ),
                                         KiBitmapNew( lang_ru_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Eldar Khayrullin" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Russian (RU)" ),
                                         KiBitmapNew( lang_ru_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Pedro Martin del Valle" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Spanish (ES)" ),
                                         KiBitmapNew( lang_es_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Iñigo Zuluaga" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Spanish (ES)" ),
                                         KiBitmapNew( lang_es_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Iñigo Figuero" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Spanish (ES)" ),
                                         KiBitmapNew( lang_es_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Rafael Sokolowski" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "German (DE)" ),
                                         KiBitmapNew( lang_de_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Kenta Yonekura" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Japanese (JA)" ),
                                         KiBitmapNew( lang_jp_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Manolis Stefanis" ),
                                         wxT( "" ),
                                         wxT( "Greek (el_GR)" ),
                                         KiBitmapNew( lang_gr_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Athanasios Vlastos" ),
                                         wxT( "" ),
                                         wxT( "Greek (el_GR)" ),
                                         KiBitmapNew( lang_gr_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Milonas Kostas" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Greek (el_GR)" ),
                                         KiBitmapNew( lang_gr_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Michail Misirlis" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Greek (el_GR)" ),
                                         KiBitmapNew( lang_gr_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Massimo Cioce" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Italian (IT)" ),
                                         KiBitmapNew( lang_it_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Marco Ciampa" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Italian (IT)" ),
                                         KiBitmapNew( lang_it_xpm ) ) );
    info.AddTranslator( new Contributor( wxT( "Evgeniy Ivanov" ),
                                         wxT( "*****@*****.**" ),
                                         wxT( "Bulgarian (BG)" ),
                                         KiBitmapNew( lang_bg_xpm ) ) );

    // Maintainer who helper in translations, but not in a specific translation
    #define OTHERS_IN_TRANSLATION _( "Others" )
    info.AddTranslator( new Contributor( wxT( "Remy Halvick" ),
                                         wxEmptyString,
                                         OTHERS_IN_TRANSLATION ) );
    info.AddTranslator( new Contributor( wxT( "David Briscoe" ),
                                         wxEmptyString,
                                         OTHERS_IN_TRANSLATION ) );
    info.AddTranslator( new Contributor( wxT( "Dominique Laigle" ),
                                         wxEmptyString,
                                         OTHERS_IN_TRANSLATION ) );
    info.AddTranslator( new Contributor( wxT( "Paul Burke" ),
                                         wxEmptyString,
                                         OTHERS_IN_TRANSLATION ) );

    // Programm credits for icons
    #define ICON_CONTRIBUTION _( "Icons by" )
    info.AddArtist( new Contributor( wxT( "Iñigo Zuluaga" ),
                                     wxT( "*****@*****.**" ),
                                     ICON_CONTRIBUTION,
                                     KiBitmapNew( edit_module_xpm ) ) );
    info.AddArtist( new Contributor( wxT( "Konstantin Baranovskiy" ),
                                     wxT( "*****@*****.**" ),
                                     ICON_CONTRIBUTION,
                                     KiBitmapNew( edit_module_xpm ) ) );
    info.AddArtist( new Contributor( wxT( "Fabrizio Tappero" ),
                                     wxT( "*****@*****.**" ),
                                     ICON_CONTRIBUTION,
                                     KiBitmapNew( edit_module_xpm ) ) );

    // Programm credits for 3d models
    #define MODELS_3D_CONTRIBUTION _( "3D models by" )
    info.AddArtist( new Contributor( wxT( "Christophe Boschat" ),
                                     wxT( "*****@*****.**" ),
                                     MODELS_3D_CONTRIBUTION,
                                     KiBitmapNew( three_d_xpm ) ) );
    info.AddArtist( new Contributor( wxT( "Renie Marquet" ),
                                     wxT( "*****@*****.**" ),
                                     MODELS_3D_CONTRIBUTION,
                                     KiBitmapNew( three_d_xpm ) ) );

    // Programm credits for package developers.
    info.AddPackager( new Contributor( wxT( "Jean-Samuel Reynaud" ),
                                       wxT( "*****@*****.**" ) ) );
    info.AddPackager( new Contributor( wxT( "Bernhard Stegmaier" ),
                                       wxT( "*****@*****.**" ) ) );
    info.AddPackager( new Contributor( wxT( "Adam Wolf" ),
                                       wxT( "*****@*****.**" ) ) );
    info.AddPackager( new Contributor( wxT( "Nick Østergaard" ),
                                       wxT( "*****@*****.**" ) ) );
}
예제 #3
0
void DIALOG_ABOUT::buildVersionInfoData( wxString& aMsg, bool aFormatHtml )
{
    // DO NOT translate information in the msg_version string

    wxString eol = aFormatHtml ? "<br>" : "\n";
    wxString indent4 = aFormatHtml ? "&nbsp;&nbsp;&nbsp;&nbsp;" : "    ";

    #define ON "ON" << eol
    #define OFF "OFF" << eol

    wxPlatformInfo platform;
    aMsg << "Application: " << m_info.GetAppName() << eol;
    aMsg << "Version: " << m_info.GetBuildVersion() << eol;
    aMsg << "Libraries:" << eol;
    aMsg << indent4 << wxGetLibraryVersionInfo().GetVersionString() << eol;

#ifdef BUILD_GITHUB_PLUGIN
    aMsg << indent4 << GetKicadCurlVersion() << eol;
#endif
    aMsg << "Platform: " << wxGetOsDescription() << ", "
         << platform.GetArchName() << ", "
         << platform.GetEndiannessName() << ", "
         << platform.GetPortIdName() << eol;

    aMsg << "Build Info:" << eol;
    aMsg << indent4 << "wxWidgets: " << wxVERSION_NUM_DOT_STRING << " (";
    aMsg << __WX_BO_UNICODE __WX_BO_STL __WX_BO_WXWIN_COMPAT_2_8 ")";

    // Get the GTK+ version where possible.
#ifdef __WXGTK__
    int major, minor;

    major = wxPlatformInfo().Get().GetToolkitMajorVersion();
    minor = wxPlatformInfo().Get().GetToolkitMinorVersion();
    aMsg << " GTK+ " <<  major << "." << minor;
#endif

    aMsg << eol;

    aMsg << indent4 << "Boost: " << ( BOOST_VERSION / 100000 ) << wxT( "." )
                      << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." )
                      << ( BOOST_VERSION % 100 ) << eol;

#ifdef BUILD_GITHUB_PLUGIN
    aMsg << indent4 << "Curl: " << GetCurlLibVersion() << eol;
#endif

    aMsg << indent4 << "Compiler: ";
#if defined(__clang__)
    aMsg << "Clang " << __clang_major__ << "." << __clang_minor__ << "." << __clang_patchlevel__;
#elif defined(__GNUG__)
    aMsg << "GCC " << __GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__;
#elif defined(_MSC_VER)
    aMsg << "Visual C++ " << _MSC_VER;
#elif defined(__INTEL_COMPILER)
    aMsg << "Intel C++ " << __INTEL_COMPILER;
#else
    aMsg << "Other Compiler ";
#endif

#if defined(__GXX_ABI_VERSION)
    aMsg << " with C++ ABI " << __GXX_ABI_VERSION << eol;
#else
    aMsg << " without C++ ABI";
#endif

    aMsg << eol;

    // Add build settings config (build options):
    aMsg << "Build settings:" << eol;

    aMsg << indent4 << "USE_WX_GRAPHICS_CONTEXT=";
#ifdef USE_WX_GRAPHICS_CONTEXT
    aMsg << ON;
#else
    aMsg << OFF;
#endif

    aMsg << indent4 << "USE_WX_OVERLAY=";
#ifdef USE_WX_OVERLAY
    aMsg << ON;
#else
    aMsg << OFF;
#endif

    aMsg << indent4 << "KICAD_SCRIPTING=";
#ifdef KICAD_SCRIPTING
    aMsg << ON;
#else
    aMsg << OFF;
#endif

    aMsg << indent4 << "KICAD_SCRIPTING_MODULES=";
#ifdef KICAD_SCRIPTING_MODULES
    aMsg << ON;
#else
    aMsg << OFF;
#endif

    aMsg << indent4 << "KICAD_SCRIPTING_WXPYTHON=";
#ifdef KICAD_SCRIPTING_WXPYTHON
    aMsg << ON;
#else
    aMsg << OFF;
#endif

    aMsg << indent4 << "KICAD_SCRIPTING_ACTION_MENU=";
#ifdef KICAD_SCRIPTING_ACTION_MENU
    aMsg << ON;
#else
    aMsg << OFF;
#endif

    aMsg << indent4 << "BUILD_GITHUB_PLUGIN=";
#ifdef BUILD_GITHUB_PLUGIN
    aMsg << ON;
#else
    aMsg << OFF;
#endif

    aMsg << indent4 << "KICAD_USE_OCE=";
#ifdef KICAD_USE_OCE
    aMsg << ON;
#else
    aMsg << OFF;
#endif

    aMsg << indent4 << "KICAD_SPICE=";
#ifdef KICAD_SPICE
    aMsg << ON;
#else
    aMsg << OFF;
#endif
}