aboutsummaryrefslogtreecommitdiff
path: root/cmake/Modules/FindGettextLib.cmake
Commit message (Collapse)AuthorAge
* Clean up and tweak build systemShadowNinja2015-03-27
| | | | | | | | | | | | | | | | * Combine client and server man pages. * Update unit test options and available databases in man page. * Add `--worldname` to man page. * Fix a bunch of places where `"Minetest"` was used directly instead of `PROJECT_NAME`. * Disable server build by default on all operating systems. * Make `ENABLE_FREETYPE` not fail if FreeType isn't found. * Enable LevelDB, Redis, and FreeType detection by default. * Remove the `VERSION_PATCH_ORIG` hack. * Add option to search for and use system JSONCPP. * Remove broken LuaJIT version detection. * Rename `DISABLE_LUAJIT` to `ENABLE_LUAJIT`. * Rename `minetest_*` variables in `version.{h,cpp}` to `g_*`. * Clean up style of CMake files.
* Fix cmake po detection bugest312015-03-23
| | | | Previously, cmake po detection would treat the "timestamp" file created by building for android as own language directory.
* OS X compatibility fixesMartin Doege2014-06-29
|
* Flatten share/ and user/ in the source and for the RUN_IN_PLACE buildPerttu Ahola2012-03-20
|
* Gettext fix for *BSD - require special linkage as glibc is not usedq662011-08-11
|
* Locale dir should be parallel to global data dirGiuseppe Bilotta2011-07-24
|
* Bring po update out of cmake againGiuseppe Bilotta2011-07-24
| | | | | | | | | | | | | | This solves two issues at once: * CMake would delete po files during ‘make clean’ because it thought they were autogenerated and not just managed * the only gettext tools readily available in Windows are so old they don't support options like --package-name The change also moves minetest.pot down one level, so we don't need to special case ‘en’ anymore. The downside is of course that you need some sane POSIX shell to update the po files.
* updated cmakerules to autodetect if gettext can be usedConstantin Wenger2011-07-23
| | | fixed error if gettext is disabled
* updatepo cmake ruleGiuseppe Bilotta2011-07-22
| | | | | | | | | | Get rid of the system-specific updatelocales.sh and introduce an updatepo cmake rule. po files are also updated before creating the mo files, and we now keep the .pot file (in the po/en directory). To stabilize the po file creation, file contents are sorted by source filename. Update po files in the process.
* Refactor mo creation/installationGiuseppe Bilotta2011-07-22
|
* fixed not finding dll for gettext in MSVCConstantin Wenger2011-07-21
|
* Find correct library for MSVC vs MingW in WinowsGiuseppe Bilotta2011-07-21
|
* updated some path because the dlls are mostly under bin not libConstantin Wenger2011-07-21
| | | added explanation why libintl must not belinked under some oses
* Refactor and clean up gettext managementGiuseppe Bilotta2011-07-21
="hl com">*/ #ifndef DEBUG_HEADER #define DEBUG_HEADER #include <stdio.h> #include <jmutex.h> #include <jmutexautolock.h> #include <iostream> #include "common_irrlicht.h" #include "threads.h" #include "gettime.h" #include "constants.h" #include "exceptions.h" #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include <windows.h> #ifdef _MSC_VER #include <eh.h> #endif #else #endif /* Debug output */ #define DTIME (getTimestamp()+": ") #define DEBUGSTREAM_COUNT 2 extern FILE *g_debugstreams[DEBUGSTREAM_COUNT]; extern void debugstreams_init(bool disable_stderr, const char *filename); extern void debugstreams_deinit(); #define DEBUGPRINT(...)\ {\ for(int i=0; i<DEBUGSTREAM_COUNT; i++)\ {\ if(g_debugstreams[i] != NULL){\ fprintf(g_debugstreams[i], __VA_ARGS__);\ fflush(g_debugstreams[i]);\ }\ }\ } class Debugbuf : public std::streambuf { public: Debugbuf(bool disable_stderr) { m_disable_stderr = disable_stderr; } int overflow(int c) { for(int i=0; i<DEBUGSTREAM_COUNT; i++) { if(g_debugstreams[i] == stderr && m_disable_stderr) continue; if(g_debugstreams[i] != NULL) (void)fwrite(&c, 1, 1, g_debugstreams[i]); //TODO: Is this slow? fflush(g_debugstreams[i]); } return c; } std::streamsize xsputn(const char *s, std::streamsize n) { for(int i=0; i<DEBUGSTREAM_COUNT; i++) { if(g_debugstreams[i] == stderr && m_disable_stderr) continue; if(g_debugstreams[i] != NULL) (void)fwrite(s, 1, n, g_debugstreams[i]); //TODO: Is this slow? fflush(g_debugstreams[i]); } return n; } private: bool m_disable_stderr; }; // This is used to redirect output to /dev/null class Nullstream : public std::ostream { public: Nullstream(): std::ostream(0) { } private: }; extern Debugbuf debugbuf; extern std::ostream dstream; extern std::ostream dstream_no_stderr; extern Nullstream dummyout; /* Assert */ __NORETURN extern void assert_fail( const char *assertion, const char *file, unsigned int line, const char *function); #define ASSERT(expr)\ ((expr)\ ? (void)(0)\ : assert_fail(#expr, __FILE__, __LINE__, __FUNCTION_NAME)) #define assert(expr) ASSERT(expr) /* DebugStack */ #define DEBUG_STACK_SIZE 50 #define DEBUG_STACK_TEXT_SIZE 300 struct DebugStack { DebugStack(threadid_t id); void print(FILE *file, bool everything); void print(std::ostream &os, bool everything); threadid_t threadid; char stack[DEBUG_STACK_SIZE][DEBUG_STACK_TEXT_SIZE]; int stack_i; // Points to the lowest empty position int stack_max_i; // Highest i that was seen }; extern core::map<threadid_t, DebugStack*> g_debug_stacks; extern JMutex g_debug_stacks_mutex; extern void debug_stacks_init(); extern void debug_stacks_print_to(std::ostream &os); extern void debug_stacks_print(); class DebugStacker { public: DebugStacker(const char *text); ~DebugStacker(); private: DebugStack *m_stack; bool m_overflowed; }; #define DSTACK(msg)\ DebugStacker __debug_stacker(msg); #define DSTACKF(...)\ char __buf[DEBUG_STACK_TEXT_SIZE];\ snprintf(__buf,\ DEBUG_STACK_TEXT_SIZE, __VA_ARGS__);\ DebugStacker __debug_stacker(__buf); /* Packet counter */ class PacketCounter { public: PacketCounter() { } void add(u16 command) { core::map<u16, u16>::Node *n = m_packets.find(command); if(n == NULL) { m_packets[command] = 1; } else { n->setValue(n->getValue()+1); } } void clear() { for(core::map<u16, u16>::Iterator i = m_packets.getIterator(); i.atEnd() == false; i++) { i.getNode()->setValue(0); } } void print(std::ostream &o) { for(core::map<u16, u16>::Iterator i = m_packets.getIterator(); i.atEnd() == false; i++) { o<<"cmd "<<i.getNode()->getKey() <<" count "<<i.getNode()->getValue() <<std::endl; } } private: // command, count core::map<u16, u16> m_packets; }; /* These should be put into every thread */ #if CATCH_UNHANDLED_EXCEPTIONS == 1 #define BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER try{ #define END_PORTABLE_DEBUG_EXCEPTION_HANDLER(logstream)\ }catch(std::exception &e){\ logstream<<"ERROR: An unhandled exception occurred: "\ <<e.what()<<std::endl;\ assert(0);\ } #ifdef _WIN32 // Windows #ifdef _MSC_VER // MSVC void se_trans_func(unsigned int, EXCEPTION_POINTERS*); class FatalSystemException : public BaseException { public: FatalSystemException(const char *s): BaseException(s) {} }; #define BEGIN_DEBUG_EXCEPTION_HANDLER \ BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER\ _set_se_translator(se_trans_func); #define END_DEBUG_EXCEPTION_HANDLER(logstream) \ END_PORTABLE_DEBUG_EXCEPTION_HANDLER(logstream) #else // Probably mingw #define BEGIN_DEBUG_EXCEPTION_HANDLER\ BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER #define END_DEBUG_EXCEPTION_HANDLER(logstream)\ END_PORTABLE_DEBUG_EXCEPTION_HANDLER(logstream) #endif #else // Posix #define BEGIN_DEBUG_EXCEPTION_HANDLER\ BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER #define END_DEBUG_EXCEPTION_HANDLER(logstream)\ END_PORTABLE_DEBUG_EXCEPTION_HANDLER(logstream) #endif #else // Dummy ones #define BEGIN_DEBUG_EXCEPTION_HANDLER #define END_DEBUG_EXCEPTION_HANDLER(logstream) #endif #endif // DEBUG_HEADER