[0ad/f16] Add maintainer debug build and better editor error handling

pcpa pcpa at fedoraproject.org
Sat Nov 3 20:50:14 UTC 2012


commit 879053ecfa378779bb0dda876f716d0cc5dccb30
Author: pcpa <paulo.cesar.pereira.de.andrade at gmail.com>
Date:   Sat Nov 3 16:34:49 2012 -0200

    Add maintainer debug build and better editor error handling
    
      Now only in debug build it will build fcollada debug library, that is
    not used, but when built, assume x86, and generates "int 0x3" do break
    to the debugger in it's assert like function.

 0ad-debug.patch  |  110 ++++++++++++++++++++++++++++++++++++++++++++
 0ad-saveas.patch |  134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 0ad.spec         |   51 ++++++++++++++++++---
 3 files changed, 288 insertions(+), 7 deletions(-)
---
diff --git a/0ad-debug.patch b/0ad-debug.patch
new file mode 100644
index 0000000..181dadd
--- /dev/null
+++ b/0ad-debug.patch
@@ -0,0 +1,110 @@
+diff -up 0ad-0.0.11-alpha/libraries/fcollada/src/Makefile.orig 0ad-0.0.11-alpha/libraries/fcollada/src/Makefile
+--- 0ad-0.0.11-alpha/libraries/fcollada/src/Makefile.orig	2012-11-03 09:57:05.310706564 -0200
++++ 0ad-0.0.11-alpha/libraries/fcollada/src/Makefile	2012-11-03 09:58:41.665710254 -0200
+@@ -9,10 +9,7 @@ endif
+ 
+ CXX ?= g++
+ CXXFLAGS += -fvisibility=hidden -W -Wall -Wno-unused-parameter -Wno-unused-function $(OS_DEFINE) $(PIC_FLAGS) $(CPPFLAGS)
+-CXXFLAGS_DEBUG := -O0 -g -D_DEBUG -DRETAIL
+ CXXFLAGS_RELEASE := -O1 -DNDEBUG -DRETAIL
+-# (-O2 with gcc 4.3 causes linker errors when using this library, for unknown reasons, so stick with -O1)
+-CXXFLAGS_TEST := -O0 -g -D_DEBUG
+ LIBS += `pkg-config libxml-2.0 --libs`
+ INCLUDES += -IFCollada `pkg-config libxml-2.0 --cflags`
+ INCLUDES_TEST := -IFCollada/FColladaTest $(INCLUDES)
+@@ -181,72 +178,19 @@ SOURCE = \
+ 	FColladaPlugins/FArchiveXML/FAXSceneExport.cpp \
+ 	FColladaPlugins/FArchiveXML/FAXSceneImport.cpp \
+ 
+-TEST_SOURCE = \
+-	FCollada/FMath/FMArrayTest.cpp \
+-	FCollada/FMath/FMQuaternionTest.cpp \
+-	FCollada/FMath/FMTreeTest.cpp \
+-	FCollada/FUtils/FUBoundingTest.cpp \
+-	FCollada/FUtils/FUCrc32Test.cpp \
+-	FCollada/FUtils/FUEventTest.cpp \
+-	FCollada/FUtils/FUFileManagerTest.cpp \
+-	FCollada/FUtils/FUFunctorTest.cpp \
+-	FCollada/FUtils/FUObjectTest.cpp \
+-	FCollada/FUtils/FUStringBuilderTest.cpp \
+-	FCollada/FUtils/FUStringConversionTest.cpp \
+-	FCollada/FUtils/FUStringTest.cpp \
+-	FCollada/FUtils/FUTestBed.cpp \
+-	FCollada/FUtils/FUUniqueStringMapTest.cpp \
+-	FCollada/FColladaTest/FCTest.cpp \
+-	FCollada/FColladaTest/FCTestAnimation.cpp \
+-	FCollada/FColladaTest/FCTestArchiving.cpp \
+-	FCollada/FColladaTest/FCTestController.cpp \
+-	FCollada/FColladaTest/FCTestGeometryPolygonsTools.cpp \
+-	FCollada/FColladaTest/FCTestParameters.cpp \
+-	FCollada/FColladaTest/FCTestSceneGraph.cpp \
+-	FCollada/FColladaTest/FCTestAssetManagement/FCTAMCrossCloning.cpp \
+-	FCollada/FColladaTest/FCTestAssetManagement/FCTAssetManagement.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEIAnimation.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEICamera.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEIEmitter.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEIExtra.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEIGeometry.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEILight.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEIMaterial.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEIPhysics.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTEIVisualScene.cpp \
+-	FCollada/FColladaTest/FCTestExportImport/FCTestExportImport.cpp \
+-	FCollada/FColladaTest/FCTestXRef/FCTestXRef.cpp \
+-	FCollada/FColladaTest/FCTestXRef/FCTestXRefAcyclic.cpp \
+-	FCollada/FColladaTest/FCTestXRef/FCTestXRefSimple.cpp \
+-	FCollada/FColladaTest/FCTestXRef/FCTestXRefTree.cpp \
+-
+-OBJECTS_DEBUG = $(addprefix output/debug/,$(SOURCE:.cpp=.o))
+ OBJECTS_RELEASE = $(addprefix output/release/,$(SOURCE:.cpp=.o))
+-OBJECTS_TEST = $(addprefix output/test/,$(SOURCE:.cpp=.o) $(TEST_SOURCE:.cpp=.o))
+-OBJECTS_ALL = $(OBJECTS_DEBUG) $(OBJECTS_RELEASE) $(OBJECTS_TEST)
++OBJECTS_ALL = $(OBJECTS_RELEASE)
+ 
+-all: output_dirs output/libFColladaSD.a output/libFColladaSR.a install
++all: output_dirs output/libFColladaSR.a install
+ 
+ output_dirs:
+-	bash -c 'mkdir -p output/{debug,release,test}/{FCollada/{FCDocument,FMath,FUtils,FColladaTest/{FCTestAssetManagement,FCTestExportImport,FCTestXRef}},FColladaPlugins/FArchiveXML}'
+-
+-test: FCollada/FColladaTest/ output/FColladaTest
+-	( cd FCollada/FColladaTest/ ; ../../output/FColladaTest )
+-	cat FCollada/FColladaTest/FColladaTestLog.txt
++	bash -c 'mkdir -p output/release/{FCollada/{FCDocument,FMath,FUtils,FColladaTest/{FCTestAssetManagement,FCTestExportImport,FCTestXRef}},FColladaPlugins/FArchiveXML}'
+ 
+-output/libFColladaSD.a: $(OBJECTS_DEBUG)
+-	@echo "$@"
+-	@ar -cr $@ $(OBJECTS_DEBUG); ranlib $@
+-
+ output/libFColladaSR.a: $(OBJECTS_RELEASE)
+ 	@echo "$@"
+ 	@ar -cr $@ $(OBJECTS_RELEASE); ranlib $@
+ 
+-output/FColladaTest: $(OBJECTS_TEST)
+-	$(CXX) -o $@ $(LDFLAGS) $(OBJECTS_TEST) $(LIBS)
+-
+-install: output/libFColladaSD.a output/libFColladaSR.a
+-	cp output/libFColladaSD.a ../lib/libFColladaSD.a
++install: output/libFColladaSR.a
+ 	cp output/libFColladaSR.a ../lib/libFColladaSR.a
+ 
+ dfile = $(@:.o=.d)
+@@ -256,18 +200,10 @@ gendep = \
+ 		sed -e 's/\#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
+ 		    -e '/^$$/ d' -e 's/$$/ :/' < $(dfile) >> $(Pfile) && \
+ 		rm -f $(dfile)
+-output/debug/%.o: %.cpp
+-	@echo "$<"
+-	$(CXX) $(CXXFLAGS) $(CXXFLAGS_DEBUG) $(INCLUDES) -MD -MF $(dfile) -c $< -o $@
+-	$(gendep)
+ output/release/%.o: %.cpp
+ 	@echo "$<"
+ 	$(CXX) $(CXXFLAGS) $(CXXFLAGS_RELEASE) $(INCLUDES) -MD -MF $(dfile) -c $< -o $@
+ 	$(gendep)
+-output/test/%.o: %.cpp
+-	@echo "$<"
+-	$(CXX) $(CXXFLAGS) $(CXXFLAGS_TEST) $(INCLUDES_TEST) -MD -MF $(dfile) -c $< -o $@
+-	$(gendep)
+ 
+ clean:
+ 	rm -rf output
diff --git a/0ad-saveas.patch b/0ad-saveas.patch
new file mode 100644
index 0000000..1cfce91
--- /dev/null
+++ b/0ad-saveas.patch
@@ -0,0 +1,134 @@
+diff -up 0ad-0.0.11-alpha/source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp.orig 0ad-0.0.11-alpha/source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp
+--- 0ad-0.0.11-alpha/source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp.orig	2012-11-03 13:31:29.921199195 -0200
++++ 0ad-0.0.11-alpha/source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp	2012-11-03 15:57:00.017533500 -0200
+@@ -691,30 +691,20 @@ bool ScenarioEditor::OpenFile(const wxSt
+ 
+ void ScenarioEditor::OnOpen(wxCommandEvent& WXUNUSED(event))
+ {
+-	wxFileDialog dlg (NULL, wxFileSelectorPromptStr,
+-		Datafile::GetDataDirectory() + _T("/mods/public/maps/scenarios"), m_OpenFilename,
+-		_T("PMP files (*.pmp)|*.pmp|All files (*.*)|*.*"),
+-		wxFD_OPEN);
+-	// Set default filter
+-	dlg.SetFilterIndex(0);
+-
+-	wxString cwd = wxFileName::GetCwd();
+-
+-	if (dlg.ShowModal() == wxID_OK)
+-	{
+-		// TODO: Handle maps in subdirectories of maps/scenarios
+-		wxFileName filename(dlg.GetFilename());
+-		if (!OpenFile(filename.GetName(), filename.GetFullName()))
+-		{
+-			wxLogError(_("Map '%ls' does not exist"), filename.GetName().c_str());
+-		}
+-		
+-		// paranoia - MSDN says OFN_NOCHANGEDIR (used when we don't give wxCHANGE_DIR)
+-		// "is ineffective for GetOpenFileName", but it seems to work anyway
+-		wxCHECK_RET(cwd == wxFileName::GetCwd(), _T("cwd changed"));
++    wxFileName filename(m_OpenFilename);
++    wxFileName dirname(_T("/usr/share/0ad/mods/public/maps/scenarios"));
++    wxString string = wxGetTextFromUser(dirname.GetFullPath() + _T("/"),
++					_T("Choose filename"),
++					filename.GetName());
++    if (!string.IsEmpty()) {
++	filename.Assign(dirname.GetFullPath() + _("/") + string);
++	filename.SetExt(_T("pmp"));
++
++	if (!OpenFile(filename.GetName(), filename.GetFullName())) {
++	    wxLogError(_("Map '%ls' does not exist"),
++		       filename.GetName().c_str());
+ 	}
+-
+-	// TODO: Make this a non-undoable command
++    }
+ }
+ 
+ void ScenarioEditor::OnImportHeightmap(wxCommandEvent& WXUNUSED(event))
+@@ -778,40 +768,57 @@ void ScenarioEditor::OnSave(wxCommandEve
+ 
+ void ScenarioEditor::OnSaveAs(wxCommandEvent& WXUNUSED(event))
+ {
+-	wxFileDialog dlg (NULL, wxFileSelectorPromptStr,
+-		Datafile::GetDataDirectory() + _T("/mods/public/maps/scenarios"), m_OpenFilename,
+-		_T("PMP files (*.pmp)|*.pmp|All files (*.*)|*.*"),
+-		wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
+-	// Set default filter
+-	dlg.SetFilterIndex(0);
+-
+-	if (dlg.ShowModal() == wxID_OK)
+-	{
+-		// On wxMSW the extension is automatically set to pmp if that filter is selected
+-		// but not on wxGTK or wxOSX. Set it explicitly since it's the only possible format.
+-		wxFileName filename(dlg.GetFilename());
+-		filename.SetExt(_T("pmp"));
+-		if (!filename.IsOk())
+-		{	// Shouldn't happen
+-			wxLogError(_("Invalid filename '%ls'"), filename.GetFullName().c_str());
+-			return;
+-		}
++    wxFileName filename(m_OpenFilename);
++    wxFileName dirname(_T("/usr/share/0ad/mods/public/maps/scenarios"));
++    wxString string = wxGetTextFromUser(dirname.GetFullPath() + _T("/"),
++					_T("Choose filename"),
++					filename.GetName());
++    if (!string.IsEmpty()) {
++	filename.Assign(dirname.GetFullPath() + _("/") + string);
++	filename.SetExt(_T("pmp"));
++
++	if (!dirname.DirExists(dirname.GetFullPath())) {
++	    wxLogError(_("Directory '%ls' does not exist"),
++		       dirname.GetFullPath().c_str());
++	    return;
++	}
++	if (!dirname.IsDirWritable(dirname.GetFullPath())) {
++	    wxLogError(_("Directory '%ls' is not writable"),
++		       dirname.GetFullPath().c_str());
++	    return;
++	}
++	if (!filename.IsOk()) {
++	    wxLogError(_("Invalid filename '%ls'"),
++		       filename.GetFullName().c_str());
++	    return;
++	}
++	if (filename.FileExists(filename.GetFullPath())) {
++	    if (wxMessageBox(_("File ") + filename.GetFullPath() +
++			     _(" exists, overwrite?"),
++			     _("Confirm"), wxOK | wxCANCEL) != wxOK)
++		return;
++	    if (!filename.IsFileWritable(filename.GetFullPath())) {
++		wxLogError(_("File '%ls' is not writable"),
++			   filename.GetFullPath().c_str());
++		return;
++	    }
++	}
+ 
+-		wxBusyInfo busy(_("Saving ") + filename.GetFullName());
+-		wxBusyCursor busyc;
++	wxBusyInfo busy(_("Saving ") + filename.GetFullName());
++	wxBusyCursor busyc;
+ 
+-		m_ToolManager.SetCurrentTool(_T(""));
++	m_ToolManager.SetCurrentTool(_T(""));
+ 
+-		// TODO: Handle maps in subdirectories of maps/scenarios
+-		std::wstring map(filename.GetFullName().wc_str());
+-		POST_MESSAGE(SaveMap, (map));
++	// TODO: Handle maps in subdirectories of maps/scenarios
++	std::wstring map(filename.GetFullName().wc_str());
++	POST_MESSAGE(SaveMap, (map));
+ 
+-		SetOpenFilename(filename.GetFullName());
++	SetOpenFilename(filename.GetFullName());
+ 
+-		// Wait for it to finish saving
+-		qPing qry;
+-		qry.Post();
+-	}
++	// Wait for it to finish saving
++	qPing qry;
++	qry.Post();
++    }
+ }
+ 
+ void ScenarioEditor::SetOpenFilename(const wxString& filename)
diff --git a/0ad.spec b/0ad.spec
index 612178f..332dd82 100644
--- a/0ad.spec
+++ b/0ad.spec
@@ -1,5 +1,15 @@
 # http://trac.wildfiregames.com/wiki/BuildInstructions#Linux
 
+# enable special maintainer debug build ?
+%define		with_debug		0
+%if %{with_debug}
+%define		config			debug
+%define		dbg			_dbg
+%else
+%define		config			release
+%define		dbg			%{nil}
+%endif
+
 # Remember to rerun licensecheck after every update:
 #	https://bugzilla.redhat.com/show_bug.cgi?id=818401#c46
 #	http://trac.wildfiregames.com/ticket/1682
@@ -17,7 +27,7 @@
 
 Name:		0ad
 Version:	0.0.11
-Release:	3%{?dist}
+Release:	4%{?dist}
 # BSD License:
 #	build/premake/*
 #	libraries/valgrind/*		(not built/used)
@@ -94,6 +104,19 @@ Patch1:		%{name}-rpath.patch
 # Build with newer libxml2
 Patch2:		%{name}-libxml2.patch
 
+# Display more clear error messages when creating custom scenarios
+# The suggested usage is:
+#	$ sudo mkdir /usr/share/0ad/public/maps
+#	$ sudo chmod 7777 /usr/share/0ad/public/maps
+#	$ 0ad -editor
+# Supposing saved the map as mymap, can test it with:
+#	$ 0ad -autostart=mymap
+Patch3:		%{name}-saveas.patch
+
+# Only do fcollada debug build with enabling debug maintainer mode
+# It also prevents assumption there that it is building in x86
+Patch4:		%{name}-debug.patch
+
 %description
 0 A.D. (pronounced "zero ey-dee") is a free, open-source, cross-platform
 real-time strategy (RTS) game of ancient warfare. In short, it is a
@@ -115,6 +138,11 @@ hobbyist game developers, since 2001.
 # 0ad <= 0.0.11 && libxml2 >= 2.9
 %patch2 -p1
 %endif
+%patch3 -p1
+%if !%{with_debug}
+# disable debug build, and "int 0x3" to trap to debugger (x86 only)
+%patch4 -p1
+%endif
 
 #-----------------------------------------------------------------------
 %build
@@ -137,22 +165,22 @@ build/workspaces/update-workspaces.sh	\
 %endif
     %{?_smp_mflags}
 
-make %{?_smp_mflags} -C build/workspaces/gcc config=release verbose=1
+make %{?_smp_mflags} -C build/workspaces/gcc config=%{config} verbose=1
 
 #-----------------------------------------------------------------------
 # Depends on availablity of nvtt
 %if !%{without_nvtt}
 %check
-LD_LIBRARY_PATH=binaries/system binaries/system/test -libdir binaries/system
+LD_LIBRARY_PATH=binaries/system binaries/system/test%{dbg} -libdir binaries/system
 %endif
 
 #-----------------------------------------------------------------------
 %install
 install -d -m 755 %{buildroot}%{_bindir}
-install -p -m 755 binaries/system/pyrogenesis %{buildroot}%{_bindir}/pyrogenesis
+install -p -m 755 binaries/system/pyrogenesis%{dbg} %{buildroot}%{_bindir}/pyrogenesis%{dbg}
 
 install -d -m 755 %{buildroot}%{_libdir}/%{name}
-for name in AtlasUI Collada; do
+for name in AtlasUI%{dbg} Collada%{dbg}; do
     install -p -m 755 binaries/system/lib${name}.so %{buildroot}%{_libdir}/%{name}/lib${name}.so
 done
 
@@ -185,16 +213,20 @@ cat > %{buildroot}%{_bindir}/0ad <<EOF
 #!/bin/sh
 
 cd %{_datadir}/0ad
-LD_LIBRARY_PATH=%{_libdir}/0ad %{_bindir}/pyrogenesis "\$@"
+LD_LIBRARY_PATH=%{_libdir}/0ad %{_bindir}/pyrogenesis%{dbg} "\$@"
 EOF
 chmod +x %{buildroot}%{_bindir}/0ad
 
+%if %{with_debug}
+export STRIP=/bin/true
+%endif
+
 #-----------------------------------------------------------------------
 %files
 %doc README.txt LICENSE.txt
 %doc license_gpl-2.0.txt license_lgpl-2.1.txt
 %{_bindir}/0ad
-%{_bindir}/pyrogenesis
+%{_bindir}/pyrogenesis%{dbg}
 %{_libdir}/%{name}
 %{_datadir}/pixmaps/%{name}.png
 %{_datadir}/applications/%{name}.desktop
@@ -202,6 +234,11 @@ chmod +x %{buildroot}%{_bindir}/0ad
 %{_mandir}/man6/*.6*
 
 %changelog
+* Sat Nov 3 2012 pcpa <paulo.cesar.pereira.de.andrade at gmail.com> - 0.0.11-4
+- Add %%with_debug maintainer mode build
+- Disable fcollada debug build if %%with_debug is false
+- Add patch to not crash and display helful messages in editor (#872801)
+
 * Tue Sep 11 2012 pcpa <paulo.cesar.pereira.de.andrade at gmail.com> - 0.0.11-3
 - Clarify source tree licenses information in spec (#818401)
 - Preserve time stamp of installed files (#818401)


More information about the scm-commits mailing list