]> de.git.xonotic.org Git - xonotic/netradiant.git/commitdiff
Merge branch 'master' into 'master'
authorRudolf Polzer <divverent@gmail.com>
Mon, 21 Dec 2015 15:09:58 +0000 (15:09 +0000)
committerRudolf Polzer <divverent@gmail.com>
Mon, 21 Dec 2015 15:09:58 +0000 (15:09 +0000)
Fix OS X segmentation fault (ericwa). Fix Quetoo game detection.

See merge request !16

COMPILING
download-gamepacks.sh
libs/shaderlib.h
radiant/environment.cpp
radiant/treemodel.cpp

index 3c847ee13da6189d09f378d8a7e4fd1c2e0a053d..29a707c5917ef3dbdc40fce5dfbb2bbc92cc425e 100644 (file)
--- a/COMPILING
+++ b/COMPILING
@@ -48,16 +48,22 @@ environment:
 - OS X 10.5 or 10.6
 - Xcode developer tools installed (OSX DVD)
 - X11 (from the OS X DVD)
-- MacPorts or fink installed
+- MacPorts or fink or homebrew installed
 - the following packages installed:
   Macports:
     gtkglext pkgconfig glib2-devel libxml2 gtk2 pango atk gettext wget
   Fink:
     gtkglext1 pkgconfig glib2-dev libxml2 gtk+2 gtk+2-dev pango1-xft2-ft219-dev atk1 gettext-dev wget
+  homebrew:
+    gtk+ gtkglext
 
 build:
 run 'make'
 
+homebrew build:
+run 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/opt/X11/lib/pkgconfig
+make'
+
 run:
 Switch into the install folder, and run NetRadiant.app
 
index 1988972b801f2dec2531d2f043ee16f41b9ced02..269d8c8a0069cd1afc5d35d8c656159da93542dc 100755 (executable)
@@ -153,8 +153,8 @@ pack OpenArenaPack   unknown     zip1   http://ingar.satgnu.net/files/gtkradiant
 pack OsirionPack     GPL         zip1   http://ingar.satgnu.net/files/gtkradiant/gamepacks/OsirionPack.zip
 pack Q3Pack          proprietary svn    svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/ -r29
 pack Quake2Pack      proprietary zip1   http://ingar.satgnu.net/files/gtkradiant/gamepacks/Quake2Pack.zip
-pack Quake2WorldPack GPL         svn    svn://svn.icculus.org/gtkradiant-gamepacks/Q2WPack/branches/1.5/
 pack QuakePack       GPL         zip1   http://ingar.satgnu.net/files/gtkradiant/gamepacks/Quake1Pack.zip
+pack QuetooPack      GPL         svn    svn://svn.icculus.org/gtkradiant-gamepacks/QuetooPack/branches/1.5/
 pack TremulousPack   proprietary zip1   http://ingar.satgnu.net/files/gtkradiant/gamepacks/TremulousPack.zip
 pack UFOAIPack       proprietary svn    svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/branches/1.5/
 #pack WarsowPack     GPL         svn    https://svn.bountysource.com/wswpack/trunk/netradiant/games/WarsowPack/
index 54057ac01b082c2521294b8aca0c4d7af7bfed67..1d9f5e0a7983216b7660f698ae2e28980b829701 100644 (file)
@@ -52,19 +52,17 @@ bool operator()( const CopiedString& shader, const CopiedString& other ) const {
 
 static inline bool shader_is_diffuse( const char *shader ){
        return
-               /* Quake2World */
-               !string_equal_suffix( shader, "_bump" )
-               && !string_equal_suffix( shader, "_glow" )
-               && !string_equal_suffix( shader, "_h" )
+               /* Quetoo */
+               !string_equal_suffix( shader, "_h" )
                && !string_equal_suffix( shader, "_local" )
-               && !string_equal_suffix( shader, "_luma" )
                && !string_equal_suffix( shader, "_nm" )
                && !string_equal_suffix( shader, "_s" )
                /* DarkPlaces */
-               && !string_equal_suffix( shader, "_norm" )
-               // (already in Quake2World) && !string_equal_suffix( shader, "_bump" )
-               // (already in Quake2World) && !string_equal_suffix( shader, "_glow" )
+               && !string_equal_suffix( shader, "_bump" )
+               && !string_equal_suffix( shader, "_glow" )
                && !string_equal_suffix( shader, "_gloss" )
+               && !string_equal_suffix( shader, "_luma" )
+               && !string_equal_suffix( shader, "_norm" )
                && !string_equal_suffix( shader, "_pants" )
                && !string_equal_suffix( shader, "_shirt" )
                && !string_equal_suffix( shader, "_reflect" )
index 9583b90fbc3761fff1e41f25be173f376aec0401..954847eba3bbb0a6e8ca0f582a579676e440f483 100644 (file)
@@ -136,8 +136,8 @@ void gamedetect(){
 #endif
                        { return; }
 
-                       // try to detect Q2World installs
-                       if ( gamedetect_check_game( "q2w.game", "default/quake2world.version", NULL, buf, p - buf ) ) {
+                       // try to detect Quetoo installs
+                       if ( gamedetect_check_game( "quetoo.game", "default/icons/quetoo.png", NULL, buf, p - buf ) ) {
                                return;
                        }
 
index 4d2f82384d8e62415ca44f9ac41644701bf063d6..d36e492a753077eeba8e26cfe67f526d7bb0f58a 100644 (file)
@@ -647,7 +647,13 @@ void detach( const NameCallback& callback ){
 };
 
 void node_attach_name_changed_callback( scene::Node& node, const NameCallback& callback ){
-       if ( &node != 0 ) {
+       // Reference cannot be bound to dereferenced null pointer in well-defined
+       // C++ code, and Clang will assume that comparison below always evaluates
+       // to true, resulting in a segmentation fault.  Use a dirty hack to force
+       // Clang to check those "bad" references for null nonetheless.
+       volatile intptr_t n = (intptr_t)&node;
+
+       if ( n != 0 ) {
                Nameable* nameable = Node_getNameable( node );
                if ( nameable != 0 ) {
                        nameable->attach( callback );
@@ -655,7 +661,9 @@ void node_attach_name_changed_callback( scene::Node& node, const NameCallback& c
        }
 }
 void node_detach_name_changed_callback( scene::Node& node, const NameCallback& callback ){
-       if ( &node != 0 ) {
+       volatile intptr_t n = (intptr_t)&node;  // see the comment on line 650
+
+       if ( n != 0 ) {
                Nameable* nameable = Node_getNameable( node );
                if ( nameable != 0 ) {
                        nameable->detach( callback );
@@ -1124,7 +1132,8 @@ void graph_tree_model_row_deleted( GraphTreeModel& model, GraphTreeNode::iterato
 const char* node_get_name( scene::Node& node );
 
 const char* node_get_name_safe( scene::Node& node ){
-       if ( &node == 0 ) {
+       volatile intptr_t n = (intptr_t)&node;  // see the comment on line 650
+       if ( n == 0 ) {
                return "";
        }
        return node_get_name( node );
@@ -1142,7 +1151,8 @@ GraphTreeNode* graph_tree_model_find_parent( GraphTreeModel* model, const scene:
 }
 
 void node_attach_name_changed_callback( scene::Node& node, const NameCallback& callback ){
-       if ( &node != 0 ) {
+       volatile intptr_t n = (intptr_t)&node;  // see the comment on line 650
+       if ( n != 0 ) {
                Nameable* nameable = Node_getNameable( node );
                if ( nameable != 0 ) {
                        nameable->attach( callback );
@@ -1150,7 +1160,8 @@ void node_attach_name_changed_callback( scene::Node& node, const NameCallback& c
        }
 }
 void node_detach_name_changed_callback( scene::Node& node, const NameCallback& callback ){
-       if ( &node != 0 ) {
+       volatile intptr_t n = (intptr_t)&node;  // see the comment on line 650
+       if ( n != 0 ) {
                Nameable* nameable = Node_getNameable( node );
                if ( nameable != 0 ) {
                        nameable->detach( callback );