diff options
Diffstat (limited to 'crawl-ref')
-rw-r--r-- | crawl-ref/.gitignore | 2 | ||||
-rw-r--r-- | crawl-ref/source/acr.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/debug.cc | 32 | ||||
-rw-r--r-- | crawl-ref/source/initfile.cc | 14 | ||||
-rw-r--r-- | crawl-ref/source/makefile | 35 | ||||
-rwxr-xr-x | crawl-ref/source/util/gen_ver.pl | 12 | ||||
-rw-r--r-- | crawl-ref/source/version.cc | 69 | ||||
-rw-r--r-- | crawl-ref/source/version.h | 47 |
8 files changed, 206 insertions, 6 deletions
diff --git a/crawl-ref/.gitignore b/crawl-ref/.gitignore index cbc37c3f7a..2dc2260a9d 100644 --- a/crawl-ref/.gitignore +++ b/crawl-ref/.gitignore @@ -39,6 +39,8 @@ mapgen.log # Makefile-generated junk makefile.dep /source/.contrib-ok +/source/compflag.h +/source/.compflag.h # The Crawl executable. /source/crawl diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc index 1dea38d6ad..6d576bb76d 100644 --- a/crawl-ref/source/acr.cc +++ b/crawl-ref/source/acr.cc @@ -302,6 +302,7 @@ static void _show_commandline_options_help() puts(" -rcdir <dir> directory that contains (included) rc files"); puts(" -morgue <dir> directory to save character dumps"); puts(" -macro <dir> directory to save/find macro.txt"); + puts(" -version Crawl version (and compilation info)"); puts(""); puts("Command line options override init file options, which override"); puts("environment options (CRAWL_NAME, CRAWL_DIR, CRAWL_RC)."); diff --git a/crawl-ref/source/debug.cc b/crawl-ref/source/debug.cc index 42abd42203..52c28e0dbc 100644 --- a/crawl-ref/source/debug.cc +++ b/crawl-ref/source/debug.cc @@ -6040,6 +6040,18 @@ static void _dump_levgen() mpr(""); } +static void _dump_compilation_info(FILE* file) +{ + std::string comp_info = compilation_info(); + if (!comp_info.empty()) + { + fprintf(file, "Compilation info:" EOL); + fprintf(file, "<<<<<<<<<<<" EOL); + fprintf(file, "%s", comp_info.c_str()); + fprintf(file, ">>>>>>>>>>>" EOL EOL); + } +} + static void _dump_level_info(FILE* file) { CrawlHashTable &props = env.properties; @@ -6506,8 +6518,23 @@ void do_crash_dump() fprintf(file, "Version: %s %s" EOL, CRAWL, Version::Long().c_str()); #if defined(UNIX) - fprintf(file, "Platform: unix" EOL); + fprintf(file, "Platform: unix"); +# if defined(TARGET_OS_MACOSX) + fprintf(file, " (OS X)"); +# endif + fprintf(file, EOL); +#elif defined(TARGET_OS_WINDOWS) + fprintf(file, "Platform: Windows" EOL); +#elif defined(TARGET_OS_DOS) + fprintf(file, "Platform: DOS" EOL); +#endif // UNIX + +#if TARGET_CPU_BITS == 64 + fprintf(file, "Bits: 64" EOL); +#else + fprintf(file, "Bits: 32" EOL); #endif + #ifdef USE_TILE fprintf(file, "Tiles: yes" EOL EOL); #else @@ -6522,6 +6549,9 @@ void do_crash_dump() fprintf(file, EOL); + // Next information on how the binary was compiled + _dump_compilation_info(file); + // Next information about the level the player is on, plus level // generation info if the crash happened during level generation. _dump_level_info(file); diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc index 162b97fd2f..6c9072505a 100644 --- a/crawl-ref/source/initfile.cc +++ b/crawl-ref/source/initfile.cc @@ -3514,6 +3514,7 @@ enum commandline_option_type { CLO_ARENA, CLO_TEST, CLO_HELP, + CLO_VERSION, CLO_NOPS }; @@ -3521,7 +3522,7 @@ enum commandline_option_type { static const char *cmd_ops[] = { "scores", "name", "species", "job", "plain", "dir", "rc", "rcdir", "tscores", "vscores", "scorefile", "morgue", "macro", - "mapstat", "arena", "test", "help" + "mapstat", "arena", "test", "help", "version" }; const int num_cmd_ops = CLO_NOPS; @@ -3554,6 +3555,13 @@ std::string find_executable_path() return std::string(tempPath); } +static void _print_version() +{ + printf("Crawl version %s" EOL, Version::Long().c_str()); + + printf("%s", compilation_info().c_str()); +} + bool parse_args( int argc, char **argv, bool rc_only ) { COMPILE_CHECK(ARRAYSZ(cmd_ops) == CLO_NOPS, c1); @@ -3798,6 +3806,10 @@ bool parse_args( int argc, char **argv, bool rc_only ) case CLO_HELP: // Shouldn't happen. return (false); + + case CLO_VERSION: + _print_version(); + end(0); } // Update position. diff --git a/crawl-ref/source/makefile b/crawl-ref/source/makefile index e9d5421bc0..0d30dddc9d 100644 --- a/crawl-ref/source/makefile +++ b/crawl-ref/source/makefile @@ -34,7 +34,6 @@ CFOTHERS_L := -fsigned-char CFWARN := -Wall MAKEFLAGS := --no-print-directory - # # The GCC and GXX variables are set later. # @@ -591,12 +590,12 @@ ifneq ($(MAKECMDGOALS),distclean) endif endif -.INTERMEDIATE: build.h +.INTERMEDIATE: build.h compflag.h build.h: $(QUIET_GEN)util/gen_ver.pl $@ -version.cc: build.h +version.cc: build.h compflag.h ########################################################################## # The level compiler @@ -682,7 +681,35 @@ distclean: clean clean-contrib clean-rltiles done @touch .contrib-ok -$(GAME): $(GAME_DEPENDS) +# This information is included in crash reports, and is printed with +# "crawl -version" +compile-flags: + @echo "// Automatically generated by makefile" > .compflag.h + @echo "#ifndef __included_crawl_compiler_flags_h" >> .compflag.h + @echo "#define __included_crawl_compiler_flags_h" >> .compflag.h + + @echo -n "#define CRAWL_CFLAGS \"" >> .compflag.h + @echo -n $(CFLAGS) | sed s/\"/\\\"/g >> .compflag.h + @echo "\"" >> .compflag.h + + @echo -n "#define CRAWL_CFLAGS_L \"" >> .compflag.h + @echo -n $(CFLAGS_L) | sed s/\"/\\\"/g >> .compflag.h + @echo "\"" >> .compflag.h + + @echo -n "#define CRAWL_LDFLAGS \"" >> .compflag.h + @echo -n $(LDFLAGS) | sed s/\"/\\\"/g >> .compflag.h + @echo "\"" >> .compflag.h + + @echo "#endif" >> .compflag.h + + @if [ "`diff -N -q .compflag.h compflag.h`" ]; then \ + echo Updating compflag.h; \ + mv .compflag.h compflag.h; \ + fi + +compflag.h: compile-flags + +$(GAME): $(GAME_DEPENDS) compile-flags $(QUIET_LINK)$(CXX) $(LDFLAGS) $(EXTRA_OBJECTS) $(OBJECTS) -o $(GAME) $(LIB) debug: $(GAME) diff --git a/crawl-ref/source/util/gen_ver.pl b/crawl-ref/source/util/gen_ver.pl index b6ace87a15..bccb73f5b2 100755 --- a/crawl-ref/source/util/gen_ver.pl +++ b/crawl-ref/source/util/gen_ver.pl @@ -106,6 +106,14 @@ if ( $verstring ne $tag || !$pretyp ) { } } +my $OS = `uname -o`; +my $machine = `uname -m`; +my $processor = `uname -p`; + +chomp($OS); +chomp($machine); +chomp($processor); + unlink("$outfile.tmp"); my $prefix = "CRAWL"; @@ -128,6 +136,10 @@ print OUT <<__eof__; #define ${prefix}_RESOURCE_VERSION ${major},${minor},${revis},${build} #define ${prefix}_RESOURCE_VERSION_STRING "${major}, ${minor}, ${revis}, ${build}" +#define ${prefix}_BUILD_OS "${OS}" +#define ${prefix}_BUILD_MACHINE "${machine}" +#define ${prefix}_BUILD_PROCESSOR "${processor}" + #endif __eof__ diff --git a/crawl-ref/source/version.cc b/crawl-ref/source/version.cc index 0805bb5c8e..6d9ee55797 100644 --- a/crawl-ref/source/version.cc +++ b/crawl-ref/source/version.cc @@ -7,6 +7,7 @@ #include "AppHdr.h" #include "build.h" +#include "compflag.h" namespace Version { @@ -49,5 +50,73 @@ namespace Version { return CRAWL_VERSION_PREREL_NUM; } + + std::string Compiler() + { +#if defined(__GNUC__) && defined(__VERSION__) + return make_stringf("GCC %s", __VERSION__); +#elif defined(__GNUC__) + return ("GCC (unknown version)"); +#elif defined(TARGET_COMPILER_MINGW) + return ("MINGW"); +#elif defined(TARGET_COMPILER_CYGWIN) + return ("CYGWIN"); +#elif defined(TARGET_COMPILER_VC) + return ("Visual C++"); +#elif defined(TARGET_COMPILER_ICC) + return ("Intel C++"); +#else + return ("Unknown compiler"); +#endif + } + + std::string BuildOS() + { + return CRAWL_BUILD_OS; + } + + std::string BuildMachine() + { + return CRAWL_BUILD_MACHINE; + } + + std::string BuildProcessor() + { + return CRAWL_BUILD_PROCESSOR; + } + + std::string CFLAGS() + { + return CRAWL_CFLAGS; + } + + std::string CFLAGS_L() + { + return CRAWL_CFLAGS_L; + } + + std::string LDFLAGS() + { + return CRAWL_LDFLAGS; + } } +std::string compilation_info() +{ + std::string out = ""; + + out += make_stringf("Compiled with %s on %s at %s" EOL, + Version::Compiler().c_str(), __DATE__, __TIME__); + out += make_stringf("Compiled on OS: %s" EOL, + Version::BuildOS().c_str()); + out += make_stringf("Compiled on machine type: %s" EOL, + Version::BuildMachine().c_str()); + out += make_stringf("Compiled on processor type: %s" EOL, + Version::BuildProcessor().c_str()); + + out += make_stringf("CLFAGS: %s" EOL, Version::CFLAGS().c_str()); + out += make_stringf("CFLAGS_L: %s" EOL, Version::CFLAGS_L().c_str()); + out += make_stringf("LDFLAGS: %s" EOL, Version::LDFLAGS().c_str()); + + return (out); +} diff --git a/crawl-ref/source/version.h b/crawl-ref/source/version.h index 8b8341b2a3..660b38ff92 100644 --- a/crawl-ref/source/version.h +++ b/crawl-ref/source/version.h @@ -85,6 +85,53 @@ namespace Version * will return the alpha/beta/rc number. Otherwise, this returns 0. */ int ReleaseID(); + + //! The compiler used. + /*! + * Names the compiler used to genrate the executable. + */ + std::string Compiler(); + + //! The operating system. + /*! + * Names the operating system that the executable was compiled on. + */ + std::string BuildOS(); + + //! The machine type. + /*! + * Names the machine type (e.g., "i686") the executable was compiled on. + */ + std::string BuildMachine(); + + //! The processor type. + /*! + * Names the processor type the executable was compiled on. + */ + std::string BuildProcessor(); + + //! The CFLAGS. + /*! + * Returns the CFLAGS the executable was compiled with. + */ + std::string CFLAGS(); + + //! The CFLAGS_L. + /*! + * Returns the CFLAGS_L the executable was compiled with. + */ + std::string CFLAGS_L(); + + //! The LDFLAGS. + /*! + * Returns the flags the executable was linked with. + */ + std::string LDFLAGS(); } +/* *********************************************************************** + * called from: initfile debug + * *********************************************************************** */ +std::string compilation_info(); + #endif |