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 < - 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 - 0.0.11-3 - Clarify source tree licenses information in spec (#818401) - Preserve time stamp of installed files (#818401)