diff --git a/SCons/Config/default b/SCons/Config/default index 410bf4db..5cd58dca 100644 --- a/SCons/Config/default +++ b/SCons/Config/default @@ -11,6 +11,7 @@ defenv['NODEFLIBS_FLAG'] = '' defenv['C_FLAG'] = '' defenv['CPP_FLAG'] = '' defenv['CPP_REQUIRES_STDLIB'] = 0 +defenv['SUBSYS_CON'] = '' ### stub environment diff --git a/SCons/Config/gnu b/SCons/Config/gnu index f2cb3697..ae3449df 100644 --- a/SCons/Config/gnu +++ b/SCons/Config/gnu @@ -29,6 +29,7 @@ defenv['C_FLAG'] = '-x c' defenv['CPP_FLAG'] = '-x c++' defenv['ALIGN_FLAG'] = '-Wl,--file-alignment,512' defenv['CPP_REQUIRES_STDLIB'] = 1 +defenv['SUBSYS_CON'] = '-Wl,--subsystem,console' ### debug diff --git a/SCons/Config/ms b/SCons/Config/ms index 91c466ff..9502b5e1 100644 --- a/SCons/Config/ms +++ b/SCons/Config/ms @@ -11,6 +11,7 @@ defenv['NODEFLIBS_FLAG'] = '/NODEFAULTLIB' defenv['C_FLAG'] = '/TC' defenv['CPP_FLAG'] = '/TP' defenv['CPP_REQUIRES_STDLIB'] = 0 +defenv['SUBSYS_CON'] = '/subsystem:console' ### debug diff --git a/SCons/config.py b/SCons/config.py index 42c60e6d..24cd2a26 100644 --- a/SCons/config.py +++ b/SCons/config.py @@ -141,6 +141,14 @@ cfg.Add( ) ) +cfg.Add( + BoolOption( + 'NSIS_CONFIG_LOG_STDOUT', + 'makes the logging facility use stdout instead of a file.', + 'no' + ) +) + cfg.Add( BoolOption( 'NSIS_SUPPORT_BGBG', @@ -443,6 +451,7 @@ AddBoolDefine('NSIS_CONFIG_CRC_SUPPORT') AddBoolDefine('NSIS_CONFIG_CRC_ANAL') AddBoolDefine('NSIS_CONFIG_LOG') AddBoolDefine('NSIS_CONFIG_LOG_ODS') +AddBoolDefine('NSIS_CONFIG_LOG_STDOUT') AddBoolDefine('NSIS_SUPPORT_BGBG') AddBoolDefine('NSIS_SUPPORT_CODECALLBACKS') AddBoolDefine('NSIS_SUPPORT_MOVEONREBOOT') diff --git a/Source/build.cpp b/Source/build.cpp index ce09d18f..2d6cae20 100644 --- a/Source/build.cpp +++ b/Source/build.cpp @@ -130,6 +130,9 @@ CEXEBuild::CEXEBuild() : #ifdef NSIS_CONFIG_LOG_ODS definedlist.add("NSIS_CONFIG_LOG_ODS"); #endif +#ifdef NSIS_CONFIG_LOG_STDOUT + definedlist.add("NSIS_CONFIG_LOG_STDOUT"); +#endif #ifdef NSIS_CONFIG_PLUGIN_SUPPORT definedlist.add("NSIS_CONFIG_PLUGIN_SUPPORT"); #endif diff --git a/Source/exehead/Main.c b/Source/exehead/Main.c index 562bedc2..3e27a499 100644 --- a/Source/exehead/Main.c +++ b/Source/exehead/Main.c @@ -272,9 +272,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, ret = ui_doinstall(); #ifdef NSIS_CONFIG_LOG -#ifndef NSIS_CONFIG_LOG_ODS +#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) log_write(1); -#endif//!NSIS_CONFIG_LOG_ODS +#endif//!NSIS_CONFIG_LOG_ODS && !NSIS_CONFIG_LOG_STDOUT #endif//NSIS_CONFIG_LOG end: diff --git a/Source/exehead/SConscript b/Source/exehead/SConscript index 3146dfd5..d8e61a8e 100644 --- a/Source/exehead/SConscript +++ b/Source/exehead/SConscript @@ -76,6 +76,11 @@ env.Append(CPPDEFINES = ['WIN32_LEAN_AND_MEAN']) env.Append(CPPDEFINES = ['_WIN32_IE=0x0500']) env.Append(CPPDEFINES = env['NSIS_CPPDEFINES']) +### Some other settings + +if 'NSIS_CONFIG_LOG_STDOUT' in env['NSIS_CPPDEFINES']: + env.Append(LINKFLAGS = env['SUBSYS_CON']) + ### Compression specific configuration if compression == 'bzip2': diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c index 17f41472..b86d7ac4 100644 --- a/Source/exehead/Ui.c +++ b/Source/exehead/Ui.c @@ -165,7 +165,7 @@ static BOOL NSISCALL _HandleStaticBkColor(UINT uMsg, WPARAM wParam, LPARAM lPara #endif//!NSIS_CONFIG_ENHANCEDUI_SUPPORT #ifdef NSIS_CONFIG_LOG -#ifndef NSIS_CONFIG_LOG_ODS +#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) void NSISCALL build_g_logfile() { mystrcat(addtrailingslash(mystrcpy(g_log_file,state_install_directory)),"install.log"); @@ -329,7 +329,7 @@ FORCE_INLINE int NSISCALL ui_doinstall(void) #ifdef NSIS_CONFIG_LOG if (g_flags & CH_FLAGS_SILENT_LOG && !g_is_uninstaller) { -#ifndef NSIS_CONFIG_LOG_ODS +#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) build_g_logfile(); #endif log_dolog=1; @@ -882,7 +882,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar GetUIText(IDC_DIR,dir); validate_filename(dir); #ifdef NSIS_CONFIG_LOG -#ifndef NSIS_CONFIG_LOG_ODS +#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) build_g_logfile(); #endif if (GetUIItem(IDC_CHECK1) != NULL) diff --git a/Source/exehead/config.h b/Source/exehead/config.h index ca19974a..8993a477 100644 --- a/Source/exehead/config.h +++ b/Source/exehead/config.h @@ -30,6 +30,12 @@ #endif #endif +#ifdef NSIS_CONFIG_LOG_STDOUT + #ifndef NSIS_CONFIG_LOG + #error NSIS_CONFIG_LOG_STDOUT relies on NSIS_CONFIG_LOG, but NSIS_CONFIG_LOG is not defined + #endif +#endif + #if defined(NSIS_CONFIG_CRC_SUPPORT) && defined(NSIS_CONFIG_VISIBLE_SUPPORT) #define _NSIS_CONFIG_VERIFYDIALOG #endif diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index 8621020b..7c8365f8 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -1482,7 +1482,7 @@ static int NSISCALL ExecuteEntry(entry *entry_) log_printf2("settings logging to %d",parm1); log_dolog=parm1; log_printf2("logging set to %d",parm1); -#ifndef NSIS_CONFIG_LOG_ODS +#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) if (parm1) build_g_logfile(); #endif } diff --git a/Source/exehead/util.c b/Source/exehead/util.c index ab17b554..afca54bb 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -9,7 +9,7 @@ #include "ui.h" #ifdef NSIS_CONFIG_LOG -#ifndef NSIS_CONFIG_LOG_ODS +#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) char g_log_file[1024]; #endif #endif @@ -730,7 +730,7 @@ void NSISCALL validate_filename(char *in) { int log_dolog; char log_text[NSIS_MAX_STRLEN*4]; -#ifndef NSIS_CONFIG_LOG_ODS +#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) void NSISCALL log_write(int close) { static HANDLE fp=INVALID_HANDLE_VALUE; @@ -759,7 +759,7 @@ void NSISCALL log_write(int close) } } } -#endif//!NSIS_CONFIG_LOG_ODS +#endif//!NSIS_CONFIG_LOG_ODS && !NSIS_CONFIG_LOG_STDOUT const char * _RegKeyHandleToName(HKEY hKey) { @@ -817,7 +817,16 @@ void log_printf(char *format, ...) #ifdef NSIS_CONFIG_LOG_ODS if (log_dolog) OutputDebugString(log_text); -#else +#endif +#ifdef NSIS_CONFIG_LOG_STDOUT + if (GetStdHandle(STD_OUTPUT_HANDLE) != INVALID_HANDLE_VALUE) + { + DWORD dwBytes; + WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), log_text, lstrlen(log_text), &dwBytes, NULL); + WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), "\n", 1, &dwBytes, NULL); + } +#endif +#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT) log_write(0); #endif }