diff --git a/build_w32.bat b/build_w32.bat index abe66359..16aa9a44 100755 --- a/build_w32.bat +++ b/build_w32.bat @@ -38,6 +38,12 @@ set O=obj set ARCH=x64 set DEBUG=N +if exist maintMakefile ( + set MAINT=Y +) else ( + set MAINT=N +) + :ParseSW if "%1" == "--debug" goto SetDebug if "%1" == "--without-guile" goto NoGuile @@ -72,6 +78,8 @@ shift goto ParseSW :DoneSW +if "%MAINT%" == "Y" echo - Enabling maintainer mode + if "%COMPILER%" == "gcc" goto FindGcc :: Find a compiler. Visual Studio requires a lot of effort to locate :-/. @@ -151,6 +159,7 @@ set LINKOPTS= if "%DEBUG%" == "Y" set OUTDIR=.\WinDebug if "%DEBUG%" == "Y" set "OPTS=/Zi /Od /D _DEBUG" if "%DEBUG%" == "Y" set LINKOPTS=/DEBUG +if "%MAINT%" == "Y" set "OPTS=%OPTS% /D MAKE_MAINTAINER_MODE" :: Show the compiler version that we found :: Unfortunately this also shows a "usage" note; I can't find anything better. echo. @@ -162,6 +171,7 @@ set OUTDIR=.\GccRel set OPTS=-O2 if "%DEBUG%" == "Y" set OPTS=-O0 if "%DEBUG%" == "Y" set OUTDIR=.\GccDebug +if "%MAINT%" == "Y" set "OPTS=%OPTS% -DMAKE_MAINTAINER_MODE" :: Show the compiler version that we found echo. %COMPILER% --version diff --git a/src/main.c b/src/main.c index afc7fd97..3e9a9056 100644 --- a/src/main.c +++ b/src/main.c @@ -192,12 +192,6 @@ int db_level = 0; char *output_sync_option = 0; -#ifdef WINDOWS32 -/* Suspend make in main for a short time to allow debugger to attach */ - -int suspend_flag = 0; -#endif - /* Environment variables override makefile definitions. */ int env_overrides = 0; @@ -425,9 +419,6 @@ static const struct command_switch switches[] = { 'b', ignore, 0, 0, 0, 0, 0, 0, 0 }, { 'B', flag, &always_make_set, 1, 1, 0, 0, 0, "always-make" }, { 'd', flag, &debug_flag, 1, 1, 0, 0, 0, 0 }, -#ifdef WINDOWS32 - { 'D', flag, &suspend_flag, 1, 1, 0, 0, 0, "suspend-for-debug" }, -#endif { 'e', flag, &env_overrides, 1, 1, 0, 0, 0, "environment-overrides", }, { 'E', strlist, &eval_strings, 1, 0, 0, 0, 0, "eval" }, { 'h', flag, &print_usage_flag, 0, 0, 0, 0, 0, "help" }, @@ -1081,6 +1072,9 @@ main (int argc, char **argv, char **envp) no_default_sh_exe = 1; #endif + /* Useful for attaching debuggers, etc. */ + SPIN ("main-entry"); + output_init (&make_sync); initialize_stopchar_map(); @@ -1337,6 +1331,9 @@ main (int argc, char **argv, char **envp) #endif #ifdef MAKE_LOAD " load" +#endif +#ifdef MAKE_MAINTAINER_MODE + " maintainer" #endif ; @@ -1523,16 +1520,6 @@ main (int argc, char **argv, char **envp) makelevel = 0; } -#ifdef WINDOWS32 - if (suspend_flag) - { - fprintf (stderr, "%s (pid = %ld)\n", argv[0], GetCurrentProcessId ()); - fprintf (stderr, _("%s is suspending for 30 seconds..."), argv[0]); - Sleep (30 * 1000); - fprintf (stderr, _("done sleep(30). Continuing.\n")); - } -#endif - /* Set always_make_flag if -B was given and we've not restarted already. */ always_make_flag = always_make_set && (restarts == 0); diff --git a/src/makeint.h b/src/makeint.h index dd6e894f..3b0f1f19 100644 --- a/src/makeint.h +++ b/src/makeint.h @@ -598,6 +598,14 @@ typedef int (*load_func_t)(const floc *flocp); int load_file (const floc *flocp, const char **filename, int noerror); void unload_file (const char *name); +/* Maintainer mode support */ +#ifdef MAKE_MAINTAINER_MODE +# define SPIN(_s) spin (_s) +void spin (const char* suffix); +#else +# define SPIN(_s) +#endif + /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION, because such systems often declare them in header files anyway. */ @@ -726,7 +734,6 @@ extern unsigned int commands_started; extern int handling_fatal_signal; - #ifndef MIN #define MIN(_a,_b) ((_a)<(_b)?(_a):(_b)) #endif @@ -734,7 +741,6 @@ extern int handling_fatal_signal; #define MAX(_a,_b) ((_a)>(_b)?(_a):(_b)) #endif - #define MAKE_SUCCESS 0 #define MAKE_TROUBLE 1 #define MAKE_FAILURE 2 diff --git a/src/misc.c b/src/misc.c index 7a1b9d9c..a0f88980 100644 --- a/src/misc.c +++ b/src/misc.c @@ -405,6 +405,28 @@ free_ns_chain (struct nameseq *ns) } +#ifdef MAKE_MAINTAINER_MODE + +void spin(const char* type) +{ + char filenm[256]; + struct stat dummy; + + sprintf (filenm, ".make-spin-%s", type); + + if (stat (filenm, &dummy) == 0) + { + fprintf (stderr, "SPIN on %s\n", filenm); + do + sleep (1); + while (stat (filenm, &dummy) == 0); + } +} + +#endif + + + /* Provide support for temporary files. */ #ifndef HAVE_STDLIB_H