diff --git a/.gitignore b/.gitignore index a5f0a51..1f0fb78 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /abiword-3.*.tar.gz /abiword-docs-3.*.tar.gz +/AbiWord-release-3.0.7.tar.bz2 diff --git a/abiword-3.0.0-librevenge.patch b/abiword-3.0.0-librevenge.patch new file mode 100644 index 0000000..d85cb1e --- /dev/null +++ b/abiword-3.0.0-librevenge.patch @@ -0,0 +1,1185 @@ +Index: plugins/wpg/xp/ie_impGraphic_WPG.cpp +=================================================================== +--- plugins/wpg/xp/ie_impGraphic_WPG.cpp (revision 34460) ++++ plugins/wpg/xp/ie_impGraphic_WPG.cpp (working copy) +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include "xap_Module.h" + + using libwpg::WPGraphics; +@@ -38,30 +38,35 @@ + + ABI_PLUGIN_DECLARE("WPG") + +-class AbiWordPerfectGraphicsInputStream : public WPXInputStream ++class AbiWordPerfectGraphicsInputStream : public librevenge::RVNGInputStream + { + public: + AbiWordPerfectGraphicsInputStream(GsfInput *input); + ~AbiWordPerfectGraphicsInputStream(); + +- virtual bool isOLEStream(); +- virtual WPXInputStream * getDocumentOLEStream(); +- virtual WPXInputStream * getDocumentOLEStream(const char * name); ++ virtual bool isStructured(); ++ virtual unsigned subStreamCount(); ++ virtual const char* subStreamName(unsigned); ++ bool existsSubStream(const char*); ++ virtual librevenge::RVNGInputStream* getSubStreamByName(const char*); ++ virtual librevenge::RVNGInputStream* getSubStreamById(unsigned); + virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead); +- virtual int seek(long offset, WPX_SEEK_TYPE seekType); ++ virtual int seek(long offset, librevenge::RVNG_SEEK_TYPE seekType); + virtual long tell(); +- virtual bool atEOS(); ++ virtual bool isEnd(); + + private: + + GsfInput *m_input; + GsfInfile *m_ole; ++ std::map m_substreams; + }; + + AbiWordPerfectGraphicsInputStream::AbiWordPerfectGraphicsInputStream(GsfInput *input) : +- WPXInputStream(), ++ librevenge::RVNGInputStream(), + m_input(input), +- m_ole(NULL) ++ m_ole(NULL), ++ m_substreams() + { + g_object_ref(G_OBJECT(input)); + } +@@ -86,50 +91,120 @@ + return buf; + } + +-int AbiWordPerfectGraphicsInputStream::seek(long offset, WPX_SEEK_TYPE seekType) ++int AbiWordPerfectGraphicsInputStream::seek(long offset, librevenge::RVNG_SEEK_TYPE seekType) + { + GSeekType gsfSeekType = G_SEEK_SET; + switch(seekType) + { +- case WPX_SEEK_CUR: ++ case librevenge::RVNG_SEEK_CUR: + gsfSeekType = G_SEEK_CUR; + break; +- case WPX_SEEK_SET: ++ case librevenge::RVNG_SEEK_SET: + gsfSeekType = G_SEEK_SET; + break; ++ case librevenge::RVNG_SEEK_END: ++ gsfSeekType = G_SEEK_END; ++ break; + } + + return gsf_input_seek(m_input, offset, gsfSeekType); + } + +-bool AbiWordPerfectGraphicsInputStream::isOLEStream() ++bool AbiWordPerfectGraphicsInputStream::isStructured() + { + if (!m_ole) + m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + +- if (m_ole != NULL) ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) + return true; + + return false; + } + +-WPXInputStream * AbiWordPerfectGraphicsInputStream::getDocumentOLEStream() ++unsigned AbiWordPerfectGraphicsInputStream::subStreamCount() + { +- return getDocumentOLEStream("PerfectOffice_MAIN"); ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ int numChildren = gsf_infile_num_children(m_ole); ++ if (numChildren > 0) ++ return numChildren; ++ return 0; ++ } ++ ++ return 0; + } + +-WPXInputStream * AbiWordPerfectGraphicsInputStream::getDocumentOLEStream(const char * name) ++const char * AbiWordPerfectGraphicsInputStream::subStreamName(unsigned id) + { +- WPXInputStream *documentStream = NULL; ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + + if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ if ((int)id >= gsf_infile_num_children(m_ole)) ++ { ++ return 0; ++ } ++ std::map::iterator i = m_substreams.lower_bound(id); ++ if (i == m_substreams.end() || m_substreams.key_comp()(id, i->first)) ++ { ++ std::string name = gsf_infile_name_by_index(m_ole, (int)id); ++ i = m_substreams.insert(i, std::map::value_type(id, name)); ++ } ++ return i->second.c_str(); ++ } ++ ++ return 0; ++} ++ ++bool AbiWordPerfectGraphicsInputStream::existsSubStream(const char * name) ++{ ++ if (!m_ole) + m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ + if (m_ole) + { + GsfInput *document = gsf_infile_child_by_name(m_ole, name); + if (document) + { ++ g_object_unref(G_OBJECT (document)); ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++librevenge::RVNGInputStream * AbiWordPerfectGraphicsInputStream::getSubStreamByName(const char * name) ++{ ++ librevenge::RVNGInputStream *documentStream = NULL; ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ GsfInput *document = gsf_infile_child_by_name(m_ole, name); ++ if (document) ++ { + documentStream = new AbiWordPerfectGraphicsInputStream(document); + g_object_unref(G_OBJECT (document)); // the only reference should be encapsulated within the new stream + } +@@ -138,12 +213,35 @@ + return documentStream; + } + ++librevenge::RVNGInputStream * AbiWordPerfectGraphicsInputStream::getSubStreamById(unsigned id) ++{ ++ librevenge::RVNGInputStream *documentStream = NULL; ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ GsfInput *document = gsf_infile_child_by_index(m_ole, (int)id); ++ if (document) ++ { ++ documentStream = new AbiWordPerfectGraphicsInputStream(document); ++ g_object_unref(G_OBJECT (document)); // the only reference should be encapsulated within the new stream ++ } ++ } ++ ++ return documentStream; ++} ++ + long AbiWordPerfectGraphicsInputStream::tell() + { + return gsf_input_tell(m_input); + } + +-bool AbiWordPerfectGraphicsInputStream::atEOS() ++bool AbiWordPerfectGraphicsInputStream::isEnd() + { + return gsf_input_eof(m_input); + } +@@ -244,14 +342,24 @@ + UT_Error IE_Imp_WordPerfectGraphics::importGraphic(GsfInput *input, FG_Graphic **ppfg) + { + AbiWordPerfectGraphicsInputStream gsfInput(input); +- WPXString svgOutput; +- if (WPGraphics::generateSVG(&gsfInput, svgOutput)) ++ librevenge::RVNGString svgOutput; ++ librevenge::RVNGStringVector vec; ++ librevenge::RVNGSVGDrawingGenerator generator(vec, ""); ++ ++ if (!libwpg::WPGraphics::parse(&gsfInput, &generator) || vec.empty() || vec[0].empty()) + { +- GsfInput * svgInput = gsf_input_memory_new((const guint8*)svgOutput.cstr(), svgOutput.len(), false); +- UT_Error result = IE_ImpGraphic::loadGraphic(svgInput, IE_ImpGraphic::fileTypeForSuffix(".svg"), ppfg); +- g_object_unref(svgInput); +- return result; ++ return UT_ERROR; + } +- return UT_ERROR; ++ ++ svgOutput.append("\n"); ++ svgOutput.append("\n"); ++ svgOutput.append(vec[0]); ++ svgOutput.append("\n"); ++ ++ GsfInput * svgInput = gsf_input_memory_new((const guint8*)svgOutput.cstr(), svgOutput.len(), false); ++ UT_Error result = IE_ImpGraphic::loadGraphic(svgInput, IE_ImpGraphic::fileTypeForSuffix(".svg"), ppfg); ++ g_object_unref(svgInput); ++ return result; + } + +Index: plugins/wpg/plugin.m4 +=================================================================== +--- plugins/wpg/plugin.m4 (revision 34460) ++++ plugins/wpg/plugin.m4 (working copy) +@@ -1,5 +1,5 @@ + +-wpg_pkgs="$gsf_req libwpg-0.2 >= 0.2.0 libwpd-0.9 >= 0.9.0 libwpd-stream-0.9 >= 0.9.0" ++wpg_pkgs="libwpg-0.3 $gsf_req" + wpg_deps="no" + + if test "$enable_wpg" != ""; then +Index: plugins/wordperfect/xp/ie_imp_WordPerfect.h +=================================================================== +--- plugins/wordperfect/xp/ie_imp_WordPerfect.h (revision 34460) ++++ plugins/wordperfect/xp/ie_imp_WordPerfect.h (working copy) +@@ -30,7 +30,7 @@ + #define IE_IMP_WP_H + + #include +-#include ++#include + #include "ie_imp.h" + #include "ut_string.h" + #include "ut_string_class.h" +@@ -92,7 +92,7 @@ + IE_Imp ** ppie); + }; + +-class IE_Imp_WordPerfect : public IE_Imp, public WPXDocumentInterface ++class IE_Imp_WordPerfect : public IE_Imp, public librevenge::RVNGTextInterface + { + public: + IE_Imp_WordPerfect(PD_Document * pDocument); +@@ -101,69 +101,83 @@ + virtual void pasteFromBuffer(PD_DocumentRange * pDocRange, + UT_uint8 * pData, UT_uint32 lenData, const char * szEncoding = 0); + +- virtual void setDocumentMetaData(const WPXPropertyList &propList); ++ virtual void setDocumentMetaData(const librevenge::RVNGPropertyList &propList); + +- virtual void startDocument(); +- virtual void endDocument(); ++ virtual void startDocument(const librevenge::RVNGPropertyList &propList); ++ virtual void endDocument(); + +- virtual void openPageSpan(const WPXPropertyList &propList); +- virtual void closePageSpan() {} +- virtual void openHeader(const WPXPropertyList &propList); +- virtual void closeHeader(); +- virtual void openFooter(const WPXPropertyList &propList); +- virtual void closeFooter(); ++ virtual void defineEmbeddedFont(const librevenge::RVNGPropertyList & /* propList */) {} + +- virtual void openParagraph(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops); +- virtual void closeParagraph() {} ++ virtual void definePageStyle(const librevenge::RVNGPropertyList &) {} ++ virtual void openPageSpan(const librevenge::RVNGPropertyList &propList); ++ virtual void closePageSpan() {} ++ virtual void openHeader(const librevenge::RVNGPropertyList &propList); ++ virtual void closeHeader(); ++ virtual void openFooter(const librevenge::RVNGPropertyList &propList); ++ virtual void closeFooter(); + +- virtual void openSpan(const WPXPropertyList &propList); +- virtual void closeSpan() {} ++ virtual void defineSectionStyle(const librevenge::RVNGPropertyList &) {} ++ virtual void openSection(const librevenge::RVNGPropertyList &propList); ++ virtual void closeSection() {} + +- virtual void openSection(const WPXPropertyList &propList, const WPXPropertyListVector &columns); +- virtual void closeSection() {} ++ virtual void defineParagraphStyle(const librevenge::RVNGPropertyList &) {} ++ virtual void openParagraph(const librevenge::RVNGPropertyList &propList); ++ virtual void closeParagraph() {} + +- virtual void insertTab(); +- virtual void insertText(const WPXString &text); +- virtual void insertLineBreak(); ++ virtual void defineCharacterStyle(const librevenge::RVNGPropertyList &) {} ++ virtual void openSpan(const librevenge::RVNGPropertyList &propList); ++ virtual void closeSpan() {} + +- virtual void defineOrderedListLevel(const WPXPropertyList &propList); +- virtual void defineUnorderedListLevel(const WPXPropertyList &propList); +- virtual void openOrderedListLevel(const WPXPropertyList &propList); +- virtual void openUnorderedListLevel(const WPXPropertyList &propList); +- virtual void closeOrderedListLevel(); +- virtual void closeUnorderedListLevel(); +- virtual void openListElement(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops); +- virtual void closeListElement() {} ++ virtual void openLink(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeLink() {} + +- virtual void openFootnote(const WPXPropertyList &propList); +- virtual void closeFootnote(); +- virtual void openEndnote(const WPXPropertyList &propList); +- virtual void closeEndnote(); ++ virtual void insertTab(); ++ virtual void insertText(const librevenge::RVNGString &text); ++ virtual void insertSpace(); ++ virtual void insertLineBreak(); ++ virtual void insertField(const librevenge::RVNGPropertyList & /* propList */) {} + +- virtual void openTable(const WPXPropertyList &propList, const WPXPropertyListVector &columns); +- virtual void openTableRow(const WPXPropertyList &propList); +- virtual void closeTableRow() {} +- virtual void openTableCell(const WPXPropertyList &propList); +- virtual void closeTableCell() {} +- virtual void insertCoveredTableCell(const WPXPropertyList & /*propList*/) {} +- virtual void closeTable(); ++ virtual void openOrderedListLevel(const librevenge::RVNGPropertyList &propList); ++ virtual void openUnorderedListLevel(const librevenge::RVNGPropertyList &propList); ++ virtual void closeOrderedListLevel(); ++ virtual void closeUnorderedListLevel(); ++ virtual void openListElement(const librevenge::RVNGPropertyList &propList); ++ virtual void closeListElement() {} + +- virtual void definePageStyle(const WPXPropertyList&) {} +- virtual void defineParagraphStyle(const WPXPropertyList&, const WPXPropertyListVector&) {} +- virtual void defineCharacterStyle(const WPXPropertyList&) {} +- virtual void defineSectionStyle(const WPXPropertyList&, const WPXPropertyListVector&) {} +- virtual void insertSpace() {} +- virtual void insertField(const WPXString&, const WPXPropertyList&) {} +- virtual void openComment(const WPXPropertyList&) {} +- virtual void closeComment() {} +- virtual void openTextBox(const WPXPropertyList&) {} +- virtual void closeTextBox() {} +- virtual void openFrame(const WPXPropertyList&) {} +- virtual void closeFrame() {} +- virtual void insertBinaryObject(const WPXPropertyList&, const WPXBinaryData&) {} +- virtual void insertEquation(const WPXPropertyList&, const WPXString&) {} ++ virtual void openFootnote(const librevenge::RVNGPropertyList &propList); ++ virtual void closeFootnote(); ++ virtual void openEndnote(const librevenge::RVNGPropertyList &propList); ++ virtual void closeEndnote(); ++ virtual void openComment(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeComment() {} ++ virtual void openTextBox(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeTextBox() {} + ++ virtual void openTable(const librevenge::RVNGPropertyList &propList); ++ virtual void openTableRow(const librevenge::RVNGPropertyList &propList); ++ virtual void closeTableRow() {} ++ virtual void openTableCell(const librevenge::RVNGPropertyList &propList); ++ virtual void closeTableCell() {} ++ virtual void insertCoveredTableCell(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeTable(); + ++ virtual void openFrame(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeFrame() {} ++ ++ virtual void openGroup(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeGroup() {} ++ ++ virtual void defineGraphicStyle(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawRectangle(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawEllipse(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawPolygon(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawPolyline(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawPath(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawConnector(const librevenge::RVNGPropertyList & /* propList */) {} ++ ++ virtual void insertBinaryObject(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void insertEquation(const librevenge::RVNGPropertyList & /* propList */) {} ++ + protected: + virtual UT_Error _loadFile(GsfInput * input); + UT_Error _appendSection(int numColumns, const float, const float); +Index: plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp +=================================================================== +--- plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp (revision 34460) ++++ plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp (working copy) +@@ -35,7 +35,6 @@ + ABI_PLUGIN_DECLARE("WordPerfect") + + static IE_Imp_WordPerfect_Sniffer * m_ImpSniffer = 0; +-static IE_Exp_WordPerfect_Sniffer * m_ExpSniffer = 0; + + #ifdef HAVE_LIBWPS + static IE_Imp_MSWorks_Sniffer * m_MSWorks_ImpSniffer = 0; +@@ -49,13 +48,7 @@ + m_ImpSniffer = new IE_Imp_WordPerfect_Sniffer (); + } + +- if (!m_ExpSniffer) +- { +- m_ExpSniffer = new IE_Exp_WordPerfect_Sniffer (); +- } +- + UT_ASSERT (m_ImpSniffer); +- UT_ASSERT (m_ExpSniffer); + + #ifdef HAVE_LIBWPS + if (!m_MSWorks_ImpSniffer) +@@ -79,7 +72,7 @@ + mi->usage = "No Usage"; + + IE_Imp::registerImporter (m_ImpSniffer); +- //IE_Exp::registerExporter (m_ExpSniffer); ++ + return 1; + } + +@@ -93,18 +86,11 @@ + mi->usage = 0; + + UT_ASSERT (m_ImpSniffer); +- UT_ASSERT (m_ExpSniffer); + + IE_Imp::unregisterImporter (m_ImpSniffer); + delete m_ImpSniffer; + m_ImpSniffer = 0; + +- /* +- IE_Exp::unregisterExporter (m_ExpSniffer); +- delete m_ExpSniffer; +- m_ExpSniffer = 0; +- */ +- + #ifdef HAVE_LIBWPS + IE_Imp::unregisterImporter (m_MSWorks_ImpSniffer); + delete m_MSWorks_ImpSniffer; +Index: plugins/wordperfect/xp/ie_imp_WordPerfect.cpp +=================================================================== +--- plugins/wordperfect/xp/ie_imp_WordPerfect.cpp (revision 34460) ++++ plugins/wordperfect/xp/ie_imp_WordPerfect.cpp (working copy) +@@ -31,6 +31,8 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -60,42 +62,47 @@ + + // Stream class + +-#include ++#include ++#include + + #include + #include + #include ++#include + + #ifdef HAVE_LIBWPS + #include + #endif + +-class AbiWordperfectInputStream : public WPXInputStream ++class AbiWordperfectInputStream : public librevenge::RVNGInputStream + { + public: + AbiWordperfectInputStream(GsfInput *input); + ~AbiWordperfectInputStream(); + +- virtual bool isOLEStream(); +- virtual WPXInputStream * getDocumentOLEStream(); +- +- virtual WPXInputStream * getDocumentOLEStream(const char * name); +- ++ virtual bool isStructured(); ++ virtual unsigned subStreamCount(); ++ virtual const char* subStreamName(unsigned); ++ bool existsSubStream(const char*); ++ virtual librevenge::RVNGInputStream* getSubStreamByName(const char*); ++ virtual librevenge::RVNGInputStream* getSubStreamById(unsigned); + virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead); +- virtual int seek(long offset, WPX_SEEK_TYPE seekType); ++ virtual int seek(long offset, librevenge::RVNG_SEEK_TYPE seekType); + virtual long tell(); +- virtual bool atEOS(); ++ virtual bool isEnd(); + + private: + + GsfInput *m_input; + GsfInfile *m_ole; ++ std::map m_substreams; + }; + + AbiWordperfectInputStream::AbiWordperfectInputStream(GsfInput *input) : +- WPXInputStream(), ++ librevenge::RVNGInputStream(), + m_input(input), +- m_ole(NULL) ++ m_ole(NULL), ++ m_substreams() + { + g_object_ref(G_OBJECT(input)); + } +@@ -120,50 +127,120 @@ + return buf; + } + +-int AbiWordperfectInputStream::seek(long offset, WPX_SEEK_TYPE seekType) ++int AbiWordperfectInputStream::seek(long offset, librevenge::RVNG_SEEK_TYPE seekType) + { + GSeekType gsfSeekType = G_SEEK_SET; + switch(seekType) + { +- case WPX_SEEK_CUR: ++ case librevenge::RVNG_SEEK_CUR: + gsfSeekType = G_SEEK_CUR; + break; +- case WPX_SEEK_SET: ++ case librevenge::RVNG_SEEK_SET: + gsfSeekType = G_SEEK_SET; + break; ++ case librevenge::RVNG_SEEK_END: ++ gsfSeekType = G_SEEK_END; ++ break; + } + + return gsf_input_seek(m_input, offset, gsfSeekType); + } + +-bool AbiWordperfectInputStream::isOLEStream() ++bool AbiWordperfectInputStream::isStructured() + { + if (!m_ole) + m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + +- if (m_ole != NULL) ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) + return true; + + return false; + } + +-WPXInputStream * AbiWordperfectInputStream::getDocumentOLEStream() ++unsigned AbiWordperfectInputStream::subStreamCount() + { +- return getDocumentOLEStream("PerfectOffice_MAIN"); ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ int numChildren = gsf_infile_num_children(m_ole); ++ if (numChildren > 0) ++ return numChildren; ++ return 0; ++ } ++ ++ return 0; + } + +-WPXInputStream * AbiWordperfectInputStream::getDocumentOLEStream(const char * name) ++const char * AbiWordperfectInputStream::subStreamName(unsigned id) + { +- WPXInputStream *documentStream = NULL; ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + + if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ if ((int)id >= gsf_infile_num_children(m_ole)) ++ { ++ return 0; ++ } ++ std::map::iterator i = m_substreams.lower_bound(id); ++ if (i == m_substreams.end() || m_substreams.key_comp()(id, i->first)) ++ { ++ std::string name = gsf_infile_name_by_index(m_ole, (int)id); ++ i = m_substreams.insert(i, std::map::value_type(id, name)); ++ } ++ return i->second.c_str(); ++ } ++ ++ return 0; ++} ++ ++bool AbiWordperfectInputStream::existsSubStream(const char * name) ++{ ++ if (!m_ole) + m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ + if (m_ole) + { + GsfInput *document = gsf_infile_child_by_name(m_ole, name); + if (document) + { ++ g_object_unref(G_OBJECT (document)); ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++librevenge::RVNGInputStream * AbiWordperfectInputStream::getSubStreamByName(const char * name) ++{ ++ librevenge::RVNGInputStream *documentStream = NULL; ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ GsfInput *document = gsf_infile_child_by_name(m_ole, name); ++ if (document) ++ { + documentStream = new AbiWordperfectInputStream(document); + g_object_unref(G_OBJECT (document)); // the only reference should be encapsulated within the new stream + } +@@ -172,12 +249,35 @@ + return documentStream; + } + ++librevenge::RVNGInputStream * AbiWordperfectInputStream::getSubStreamById(unsigned id) ++{ ++ librevenge::RVNGInputStream *documentStream = NULL; ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ GsfInput *document = gsf_infile_child_by_index(m_ole, (int)id); ++ if (document) ++ { ++ documentStream = new AbiWordperfectInputStream(document); ++ g_object_unref(G_OBJECT (document)); // the only reference should be encapsulated within the new stream ++ } ++ } ++ ++ return documentStream; ++} ++ + long AbiWordperfectInputStream::tell() + { + return gsf_input_tell(m_input); + } + +-bool AbiWordperfectInputStream::atEOS() ++bool AbiWordperfectInputStream::isEnd() + { + return gsf_input_eof(m_input); + } +@@ -247,13 +347,13 @@ + { + AbiWordperfectInputStream gsfInput(input); + +- WPDConfidence confidence = WPDocument::isFileFormatSupported(&gsfInput); +- ++ libwpd::WPDConfidence confidence = libwpd::WPDocument::isFileFormatSupported(&gsfInput); ++ + switch (confidence) + { +- case WPD_CONFIDENCE_NONE: ++ case libwpd::WPD_CONFIDENCE_NONE: + return UT_CONFIDENCE_ZILCH; +- case WPD_CONFIDENCE_EXCELLENT: ++ case libwpd::WPD_CONFIDENCE_EXCELLENT: + return UT_CONFIDENCE_PERFECT; + default: + return UT_CONFIDENCE_ZILCH; +@@ -312,9 +412,9 @@ + UT_Error IE_Imp_WordPerfect::_loadFile(GsfInput * input) + { + AbiWordperfectInputStream gsfInput(input); +- WPDResult error = WPDocument::parse(&gsfInput, static_cast(this), NULL); ++ libwpd::WPDResult error = libwpd::WPDocument::parse(&gsfInput, static_cast(this), NULL); + +- if (error != WPD_OK) ++ if (error != libwpd::WPD_OK) + { + UT_DEBUGMSG(("AbiWordPerfect: ERROR: %i!\n", (int)error)); + return UT_IE_IMPORTERROR; +@@ -329,7 +429,7 @@ + // nada + } + +-void IE_Imp_WordPerfect::setDocumentMetaData(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::setDocumentMetaData(const librevenge::RVNGPropertyList &propList) + { + if (propList["dc:author"]) + getDoc()->setMetaDataProp(PD_META_KEY_CREATOR, propList["dc:author"]->getStr().cstr()); +@@ -339,15 +439,15 @@ + getDoc()->setMetaDataProp(PD_META_KEY_PUBLISHER, propList["dc:publisher"]->getStr().cstr()); + if (propList["dc:type"]) + getDoc()->setMetaDataProp(PD_META_KEY_TYPE, propList["dc:category"]->getStr().cstr()); +- if (propList["libwpd:keywords"]) +- getDoc()->setMetaDataProp(PD_META_KEY_KEYWORDS, propList["libwpd:keywords"]->getStr().cstr()); ++ if (propList["librevenge:keywords"]) ++ getDoc()->setMetaDataProp(PD_META_KEY_KEYWORDS, propList["librevenge:keywords"]->getStr().cstr()); + if (propList["dc:language"]) + getDoc()->setMetaDataProp(PD_META_KEY_LANGUAGE, propList["dc:language"]->getStr().cstr()); +- if (propList["libwpd:abstract"]) +- getDoc()->setMetaDataProp(PD_META_KEY_DESCRIPTION, propList["libwpd:abstract"]->getStr().cstr()); ++ if (propList["librevenge:abstract"]) ++ getDoc()->setMetaDataProp(PD_META_KEY_DESCRIPTION, propList["librevenge:abstract"]->getStr().cstr()); + } + +-void IE_Imp_WordPerfect::startDocument() ++void IE_Imp_WordPerfect::startDocument(const librevenge::RVNGPropertyList & /* propList */) + { + UT_DEBUGMSG(("AbiWordPerfect: startDocument\n")); + } +@@ -357,7 +457,7 @@ + UT_DEBUGMSG(("AbiWordPerfect: endDocument\n")); + } + +-void IE_Imp_WordPerfect::openPageSpan(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::openPageSpan(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openPageSpan\n")); +@@ -378,7 +478,7 @@ + + } + +-void IE_Imp_WordPerfect::openHeader(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openHeader(const librevenge::RVNGPropertyList & /*propList*/) + { + m_bHdrFtrOpenCount++; + +@@ -420,7 +520,7 @@ + */ + } + +-void IE_Imp_WordPerfect::openFooter(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openFooter(const librevenge::RVNGPropertyList & /*propList*/) + { + m_bHdrFtrOpenCount++; + // see above comments re: openHeader +@@ -432,7 +532,7 @@ + // see above comments re: closeHeader + } + +-void IE_Imp_WordPerfect::openParagraph(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops) ++void IE_Imp_WordPerfect::openParagraph(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openParagraph()\n")); +@@ -478,13 +578,15 @@ + (int)(m_topMargin*72), (int)(m_bottomMargin*72), m_leftMarginOffset, m_rightMarginOffset, m_textIndent, lineSpacing); + propBuffer += tmpBuffer; + +- if (tabStops.count() > 0) // Append the tabstop information ++ const librevenge::RVNGPropertyListVector *tabStops = propList.child("style:tab-stops"); ++ ++ if (tabStops && tabStops->count()) // Append the tabstop information + { + propBuffer += "; tabstops:"; + tmpBuffer = ""; +- WPXPropertyListVector::Iter i(tabStops); +- for (i.rewind(); i.next();) +- { ++ librevenge::RVNGPropertyListVector::Iter i(*tabStops); ++ for (i.rewind(); i.next();) ++ { + propBuffer += tmpBuffer; + if (i()["style:position"]) + { +@@ -515,8 +617,8 @@ + propBuffer += "0"; + + tmpBuffer = ","; +- } +- } ++ } ++ } + + + +@@ -543,7 +645,7 @@ + } + } + +-void IE_Imp_WordPerfect::openSpan(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::openSpan(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: Appending current text properties\n")); +@@ -614,13 +716,14 @@ + X_CheckDocumentError(appendFmt(propsArray)); + } + +-void IE_Imp_WordPerfect::openSection(const WPXPropertyList &propList, const WPXPropertyListVector &columns) ++void IE_Imp_WordPerfect::openSection(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openSection\n")); + + float marginLeft = 0.0f, marginRight = 0.0f; +- int columnsCount = ((columns.count() == 0) ? 1 : columns.count()); ++ const librevenge::RVNGPropertyListVector *columns = propList.child("style:columns"); ++ int columnsCount = ((!columns || !columns->count()) ? 1 : columns->count()); + + // TODO: support spaceAfter + if (propList["fo:start-indent"]) +@@ -647,7 +750,7 @@ + X_CheckDocumentError(appendSpan(&ucs,1)); + } + +-void IE_Imp_WordPerfect::insertText(const WPXString &text) ++void IE_Imp_WordPerfect::insertText(const librevenge::RVNGString &text) + { + if (m_bHdrFtrOpenCount) return; // HACK + if (text.len()) +@@ -658,6 +761,15 @@ + } + } + ++void IE_Imp_WordPerfect::insertSpace() ++{ ++ if (m_bHdrFtrOpenCount) return; // HACK ++ UT_DEBUGMSG(("AbiWordPerfect: insertSpace\n")); ++ ++ UT_UCS4Char ucs = UCS_SPACE; ++ X_CheckDocumentError(appendSpan(&ucs,1)); ++} ++ + void IE_Imp_WordPerfect::insertLineBreak() + { + if (m_bHdrFtrOpenCount) return; // HACK +@@ -668,12 +780,11 @@ + } + + +- +-void IE_Imp_WordPerfect::defineOrderedListLevel(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::openOrderedListLevel(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: defineOrderedListLevel\n")); +- ++ UT_DEBUGMSG(("AbiWordPerfect: openOrderedListLevel\n")); ++ + int listID = 0, startingNumber = 0, level = 1; + char listType = '1'; + UT_UTF8String textBeforeNumber, textAfterNumber; +@@ -680,12 +791,12 @@ + float listLeftOffset = 0.0f; + float listMinLabelWidth = 0.0f; + +- if (propList["libwpd:id"]) +- listID = propList["libwpd:id"]->getInt(); ++ if (propList["librevenge:id"]) ++ listID = propList["librevenge:id"]->getInt(); + if (propList["text:start-value"]) + startingNumber = propList["text:start-value"]->getInt(); +- if (propList["libwpd:level"]) +- level = propList["libwpd:level"]->getInt(); ++ if (propList["librevenge:level"]) ++ level = propList["librevenge:level"]->getInt(); + if (propList["style:num-prefix"]) + textBeforeNumber += propList["style:num-prefix"]->getStr().cstr(); + if (propList["style:num-suffix"]) +@@ -716,22 +827,38 @@ + m_pCurrentListDefinition->setListMinLabelWidth(level, listMinLabelWidth); + _updateDocumentOrderedListDefinition(m_pCurrentListDefinition, level, listType, textBeforeNumber, textAfterNumber, startingNumber); + } ++ ++ m_iCurrentListLevel++; + } + +-void IE_Imp_WordPerfect::defineUnorderedListLevel(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::closeOrderedListLevel() + { + if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: defineUnorderedListLevel\n")); ++ UT_DEBUGMSG(("AbiWordPerfect: closeOrderedListLevel (level: %i)\n", m_iCurrentListLevel)); ++ UT_ASSERT(m_iCurrentListLevel > 0); ++ ++ // every time we close a list level, the level above it is normally renumbered to start at "1" ++ // again. this code takes care of that. ++ if (m_iCurrentListLevel < (WP6_NUM_LIST_LEVELS-1)) ++ m_pCurrentListDefinition->setLevelNumber(m_iCurrentListLevel + 1, 0); ++ ++ m_iCurrentListLevel--; ++} + ++void IE_Imp_WordPerfect::openUnorderedListLevel(const librevenge::RVNGPropertyList &propList) ++{ ++ if (m_bHdrFtrOpenCount) return; // HACK ++ UT_DEBUGMSG(("AbiWordPerfect: openUNorderedListLevel\n")); ++ + int listID = 0, level = 1; +- WPXString textBeforeNumber, textAfterNumber; ++ librevenge::RVNGString textBeforeNumber, textAfterNumber; + float listLeftOffset = 0.0f; + float listMinLabelWidth = 0.0f; + +- if (propList["libwpd:id"]) +- listID = propList["libwpd:id"]->getInt(); +- if (propList["libwpd:level"]) +- level = propList["libwpd:level"]->getInt(); ++ if (propList["librevenge:id"]) ++ listID = propList["librevenge:id"]->getInt(); ++ if (propList["librevenge:level"]) ++ level = propList["librevenge:level"]->getInt(); + if (propList["text:space-before"]) + listLeftOffset = propList["text:space-before"]->getDouble(); + if (propList["text:min-label-width"]) +@@ -752,39 +879,10 @@ + m_pCurrentListDefinition->setListMinLabelWidth(level, listMinLabelWidth); + _updateDocumentUnorderedListDefinition(m_pCurrentListDefinition, level); + } +-} + +-//void IE_Imp_WordPerfect::openOrderedListLevel(const int listID) +-void IE_Imp_WordPerfect::openOrderedListLevel(const WPXPropertyList & /*propList*/) +-{ +- if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: openOrderedListLevel\n")); +- + m_iCurrentListLevel++; + } + +-void IE_Imp_WordPerfect::closeOrderedListLevel() +-{ +- if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: closeOrderedListLevel (level: %i)\n", m_iCurrentListLevel)); +- UT_ASSERT(m_iCurrentListLevel > 0); +- +- // every time we close a list level, the level above it is normally renumbered to start at "1" +- // again. this code takes care of that. +- if (m_iCurrentListLevel < (WP6_NUM_LIST_LEVELS-1)) +- m_pCurrentListDefinition->setLevelNumber(m_iCurrentListLevel + 1, 0); +- +- m_iCurrentListLevel--; +-} +- +-void IE_Imp_WordPerfect::openUnorderedListLevel(const WPXPropertyList & /*propList*/) +-{ +- if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: openUNorderedListLevel\n")); +- +- m_iCurrentListLevel++; +-} +- + void IE_Imp_WordPerfect::closeUnorderedListLevel() + { + if (m_bHdrFtrOpenCount) return; // HACK +@@ -796,7 +894,7 @@ + + // ASSUMPTION: We assume that unordered lists will always pass a number of "0". unpredictable behaviour + // may result otherwise +-void IE_Imp_WordPerfect::openListElement(const WPXPropertyList &propList, const WPXPropertyListVector & /*tabStops*/) ++void IE_Imp_WordPerfect::openListElement(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openListElement\n")); +@@ -885,7 +983,7 @@ + X_CheckDocumentError(appendSpan(&ucs,1)); + } + +-void IE_Imp_WordPerfect::openFootnote(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openFootnote(const librevenge::RVNGPropertyList & /*propList*/) + { + if (m_bHdrFtrOpenCount) return; // HACK + +@@ -934,7 +1032,7 @@ + X_CheckDocumentError(appendStrux(PTX_EndFootnote,NULL)); + } + +-void IE_Imp_WordPerfect::openEndnote(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openEndnote(const librevenge::RVNGPropertyList & /*propList*/) + { + if (m_bHdrFtrOpenCount) return; // HACK + const gchar** propsArray = NULL; +@@ -975,7 +1073,7 @@ + X_CheckDocumentError(appendStrux(PTX_EndEndnote,NULL)); + } + +-void IE_Imp_WordPerfect::openTable(const WPXPropertyList &propList, const WPXPropertyListVector &columns) ++void IE_Imp_WordPerfect::openTable(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + // TODO: handle 'marginLeftOffset' and 'marginRightOffset' +@@ -1000,14 +1098,18 @@ + } + } + +- propBuffer += "table-column-props:"; +- WPXPropertyListVector::Iter i(columns); +- for (i.rewind(); i.next();) ++ const librevenge::RVNGPropertyListVector *columns = propList.child("librevenge:table-columns"); ++ if (columns) + { +- UT_String tmpBuffer; +- if (i()["style:column-width"]) +- UT_String_sprintf(tmpBuffer, "%s/", i()["style:column-width"]->getStr().cstr()); +- propBuffer += tmpBuffer; ++ propBuffer += "table-column-props:"; ++ librevenge::RVNGPropertyListVector::Iter i(*columns); ++ for (i.rewind(); i.next();) ++ { ++ UT_String tmpBuffer; ++ if (i()["style:column-width"]) ++ UT_String_sprintf(tmpBuffer, "%s/", i()["style:column-width"]->getStr().cstr()); ++ propBuffer += tmpBuffer; ++ } + } + + const gchar* propsArray[3]; +@@ -1018,7 +1120,7 @@ + X_CheckDocumentError(appendStrux(PTX_SectionTable, propsArray)); + } + +-void IE_Imp_WordPerfect::openTableRow(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openTableRow(const librevenge::RVNGPropertyList & /*propList*/) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openRow\n")); +@@ -1030,14 +1132,14 @@ + m_bInCell = false; + } + +-void IE_Imp_WordPerfect::openTableCell(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::openTableCell(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + int col =0, row = 0, colSpan = 0, rowSpan = 0; +- if (propList["libwpd:column"]) +- col = propList["libwpd:column"]->getInt(); +- if (propList["libwpd:row"]) +- row = propList["libwpd:row"]->getInt(); ++ if (propList["librevenge:column"]) ++ col = propList["librevenge:column"]->getInt(); ++ if (propList["librevenge:row"]) ++ row = propList["librevenge:row"]->getInt(); + if (propList["table:number-columns-spanned"]) + colSpan = propList["table:number-columns-spanned"]->getInt(); + if (propList["table:number-rows-spanned"]) +@@ -1247,9 +1349,9 @@ + virtual UT_Error _loadFile(GsfInput * input) + { + AbiWordperfectInputStream gsfInput(input); +- WPSResult error = WPSDocument::parse(&gsfInput, static_cast(this)); ++ libwps::WPSResult error = libwps::WPSDocument::parse(&gsfInput, static_cast(this)); + +- if (error != WPS_OK) ++ if (error != libwps::WPS_OK) + { + UT_DEBUGMSG(("AbiMSWorks: ERROR: %i!\n", (int)error)); + return UT_IE_IMPORTERROR; +@@ -1286,13 +1388,17 @@ + { + AbiWordperfectInputStream gsfInput(input); + +- WPSConfidence confidence = WPSDocument::isFileFormatSupported(&gsfInput); ++ libwps::WPSKind kind; ++ libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&gsfInput, kind); ++ ++ if (kind != libwps::WPS_TEXT) ++ confidence = libwps::WPS_CONFIDENCE_NONE; + + switch (confidence) + { +- case WPS_CONFIDENCE_NONE: ++ case libwps::WPS_CONFIDENCE_NONE: + return UT_CONFIDENCE_ZILCH; +- case WPS_CONFIDENCE_EXCELLENT: ++ case libwps::WPS_CONFIDENCE_EXCELLENT: + return UT_CONFIDENCE_PERFECT; + default: + return UT_CONFIDENCE_ZILCH; +Index: plugins/wordperfect/xp/Makefile.am +=================================================================== +--- plugins/wordperfect/xp/Makefile.am (revision 34460) ++++ plugins/wordperfect/xp/Makefile.am (working copy) +@@ -6,8 +6,6 @@ + -DABI_BUILD_VERSION=\"$(VERSION)\" + + libxp_la_SOURCES = \ +- ie_exp_WordPerfect.cpp \ +- ie_exp_WordPerfect.h \ + ie_impexp_WordPerfect.cpp \ + ie_impexp_WordPerfect.h \ + ie_imp_WordPerfect.cpp \ +Index: plugins/wordperfect/xp/ie_impexp_WordPerfect.h +=================================================================== +--- plugins/wordperfect/xp/ie_impexp_WordPerfect.h (revision 34460) ++++ plugins/wordperfect/xp/ie_impexp_WordPerfect.h (working copy) +@@ -24,7 +24,6 @@ + */ + + #include "ie_imp_WordPerfect.h" +-#include "ie_exp_WordPerfect.h" + #include "xap_Module.h" + + #define IE_MIMETYPE_WP_51 "application/wordperfect5.1" +Index: plugins/wordperfect/plugin.m4 +=================================================================== +--- plugins/wordperfect/plugin.m4 (revision 34460) ++++ plugins/wordperfect/plugin.m4 (working copy) +@@ -1,6 +1,6 @@ + +-wordperfect_pkgs="libwpg-0.2 >= 0.2.0 libwpd-0.9 >= 0.9.0 libwpd-stream-0.9 >= 0.9.0 $gsf_req" +-wordperfect_wps_pkgs='libwps-0.2 >= 0.1.0' ++wordperfect_pkgs="libwpd-0.10 $gsf_req" ++wordperfect_wps_pkgs='libwps-0.3' + wordperfect_deps="no" + + WORDPERFECT_CFLAGS= +@@ -29,7 +29,7 @@ + + PKG_CHECK_EXISTS([ $wordperfect_wps_pkgs ], + [ +- wp_deps_pkgs="$wp_deps_pkgs $wordperfect_wps_pkgs" ++ wp_deps_pkgs="$wordperfect_wps_pkgs $wp_deps_pkgs" + WPS_DEFINE=" -DHAVE_LIBWPS" + ]) + diff --git a/abiword-3.0.2-explicit-python.patch b/abiword-3.0.2-explicit-python.patch new file mode 100644 index 0000000..49ff7b1 --- /dev/null +++ b/abiword-3.0.2-explicit-python.patch @@ -0,0 +1,8 @@ +Index: abiword-3.0.2/src/gi-overrides/Makefile.am +=================================================================== +--- abiword-3.0.2.orig/src/gi-overrides/Makefile.am ++++ abiword-3.0.2/src/gi-overrides/Makefile.am +@@ -1,2 +1,2 @@ +-overridesdir = `python -c "import gi; print gi._overridesdir"` ++overridesdir = `$(PYTHON) -c "import gi; print(gi._overridesdir)"` + overrides_PYTHON = Abi.py diff --git a/abiword-3.0.4-pygobject.patch b/abiword-3.0.4-pygobject.patch new file mode 100644 index 0000000..0926131 --- /dev/null +++ b/abiword-3.0.4-pygobject.patch @@ -0,0 +1,22 @@ +From 51787d61993cb3981c18e4cf174fc229734fba1e Mon Sep 17 00:00:00 2001 +From: Jean Brefort +Date: Sun, 6 Dec 2015 11:04:10 +0000 +Subject: [PATCH] Update python override code. Fixes #13745 and #13746, thanks + to David Gutteridge. + +git-svn-id: svn+ssh://svn.abisource.com/svnroot/abiword/trunk@35171 bcba8976-2d24-0410-9c9c-aab3bd5fdfd6 +--- + src/gi-overrides/Abi.py | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/gi-overrides/Abi.py b/src/gi-overrides/Abi.py +index 666fd61bf4..e3b61b9bf1 100644 +--- a/src/gi-overrides/Abi.py ++++ b/src/gi-overrides/Abi.py +@@ -1,4 +1,6 @@ + import sys ++import gi ++gi.require_version('Gtk', '3.0') + from gi.repository import Gtk + from ..overrides import override + from ..importer import modules diff --git a/abiword.spec b/abiword.spec index 8b2035c..58de5d6 100644 --- a/abiword.spec +++ b/abiword.spec @@ -1,31 +1,37 @@ -%define majorversion 3 -%define minorversion 0 -%define microversion 1 -%define svnver 0 +%define bigversion 3.0 + +%global forgeurl https://gitlab.gnome.org/World/AbiWord -Summary: Word processing program Name: abiword -Version: %{majorversion}.%{minorversion}.%{microversion} -Release: 1%{?dist} -Epoch: 1 -Group: Applications/Editors -License: GPLv2+ -URL: http://www.abisource.com/ +Version: 3.0.7 +Release: 3%{?dist} +%global tag release-%{version} +%forgemeta -Source0: http://abisource.com/downloads/abiword/%{version}/source/abiword-%{version}.tar.gz -Source1: http://abisource.com/downloads/abiword/%{version}/source/abiword-docs-%{version}.tar.gz +Epoch: 1 +Summary: Word processing program +License: GPL-2.0-or-later +URL: %{forgeurl} + +Source0: %{forgesource} Source11: abiword.mime Source12: abiword.keys Source13: abiword.xml + +ExcludeArch: %{ix86} + Patch0: abiword-2.6.0-windowshelppaths.patch Patch1: abiword-2.8.3-desktop.patch Patch2: abiword-2.6.0-boolean.patch +Patch3: abiword-3.0.0-librevenge.patch +Patch4: abiword-3.0.2-explicit-python.patch +Patch5: abiword-3.0.4-pygobject.patch -BuildRequires: autoconf -BuildRequires: automake BuildRequires: aiksaurus-devel BuildRequires: aiksaurus-gtk-devel BuildRequires: asio-devel +# Needed while explicit-python.patch touches gi-overrides/Makefile.am +BuildRequires: automake autoconf libtool autoconf-archive BuildRequires: bison BuildRequires: boost-devel BuildRequires: bzip2-devel @@ -35,12 +41,16 @@ BuildRequires: desktop-file-utils BuildRequires: enchant-devel BuildRequires: flex BuildRequires: fribidi-devel +BuildRequires: gcc-c++ BuildRequires: gobject-introspection-devel BuildRequires: goffice-devel BuildRequires: gtk3-devel -BuildRequires: gtkmathview-devel +# Probably because it's gtk2 based +#BuildRequires: gtkmathview-devel +BuildRequires: libgcrypt-devel BuildRequires: libgsf-devel BuildRequires: libpng-devel +BuildRequires: librevenge-devel BuildRequires: librsvg2-devel BuildRequires: libsoup-devel BuildRequires: libwmf-devel @@ -50,18 +60,23 @@ BuildRequires: libxslt-devel BuildRequires: link-grammar-devel BuildRequires: loudmouth-devel BuildRequires: ots-devel +BuildRequires: pkgconf-pkg-config +BuildRequires: pkgconfig(libwps-0.4) BuildRequires: poppler-devel BuildRequires: popt-devel -BuildRequires: pygobject3 -BuildRequires: python2-devel -BuildRequires: python-setuptools +BuildRequires: python3-gobject +BuildRequires: python3-devel +BuildRequires: python3-setuptools BuildRequires: readline-devel BuildRequires: t1lib-devel BuildRequires: telepathy-glib-devel BuildRequires: wv-devel BuildRequires: zlib-devel +BuildRequires: make +BuildRequires: libappstream-glib Requires: libabiword = %{epoch}:%{version}-%{release} +Requires: python3-gobject-base %description AbiWord is a cross-platform Open Source word processor. It is full-featured, @@ -70,7 +85,6 @@ while still remaining lean. %package -n libabiword Summary: Library for developing applications based on AbiWord's core -Group: System Environment/Libraries %description -n libabiword Library for developing applications based on AbiWord's core. @@ -78,61 +92,45 @@ Library for developing applications based on AbiWord's core. %package -n libabiword-devel Summary: Files for developing with libabiword -Group: Development/Libraries Requires: libabiword = %{epoch}:%{version}-%{release} %description -n libabiword-devel Includes and definitions for developing with libabiword. -%package -n python-abiword +%package -n python3-abiword +%{?python_provide:%python_provide python3-abiword} Summary: Python bindings for developing with libabiword -Group: Development/Libraries Requires: libabiword = %{epoch}:%{version}-%{release} -Obsoletes: pyabiword <= 0.8.0 -Provides: pyabiword > 0.8.0 -%description -n python-abiword +%description -n python3-abiword Python bindings for developing with libabiword %prep # setup abiword -%setup -q +%setup -qn AbiWord-release-%{version} # patch abiword -%patch1 -p1 -b .desktop -%patch2 -p1 -b .boolean - -# setup abiword documentation -%setup -q -T -b 1 -n abiword-docs-%{version} -%patch0 -p1 -b .windowshelppaths +%patch -P 1 -p1 -b .desktop +%patch -P 2 -p1 -b .boolean +%patch -P 3 -p0 -b .librevenge +%patch -P 4 -p1 -b .explicit_python +%patch -P 5 -p1 -b .pygo %build -aclocal -autoconf +# Needed while explicit-python.patch touches gi-overrides/Makefile.am +./autogen.sh -# build libabiword and abiword -cd $RPM_BUILD_DIR/abiword-%{version} -%configure --enable-plugins --enable-clipart --enable-templates --enable-introspection -# Build non SMP due to issues with gobject-introspection builds -# make %{?_smp_mflags} V=1 -make V=1 - -# build the documentation -cd $RPM_BUILD_DIR/abiword-docs-%{version} -ABI_DOC_PROG=$(pwd)/../%{name}-%{version}/src/abiword ./make-html.sh +export CXXFLAGS="-std=c++14 $RPM_OPT_FLAGS -DASIO_ENABLE_BOOST" +%configure \ + --enable-plugins --enable-clipart --enable-templates --enable-introspection \ + --with-gir-dir=%{_datadir}/gir-1.0 --with-typelib-dir=%{_libdir}/girepository-1.0 \ + --enable-maintainer-mode +%{make_build} V=1 %install -cd $RPM_BUILD_DIR/abiword-%{version} -make install DESTDIR=%{buildroot} - -# install the documentation -cd $RPM_BUILD_DIR/abiword-docs-%{version} -mkdir -p $RPM_BUILD_ROOT/%{_datadir}/%{name}-%{majorversion}.%{minorversion}/AbiWord/help -cp -rp help/* $RPM_BUILD_ROOT/%{_datadir}/%{name}-%{majorversion}.%{minorversion}/AbiWord/help/ -# some of the help dirs have bad perms (#109261) -find $RPM_BUILD_ROOT/%{_datadir}/%{name}-%{majorversion}.%{minorversion}/AbiWord/help/ -type d -exec chmod -c o+rx {} \; +%{make_install} overridesdir=%{python3_sitelib}/gi/overrides install -p -m 0644 -D %{SOURCE11} $RPM_BUILD_ROOT%{_datadir}/mime-info/abiword.mime install -p -m 0644 -D %{SOURCE12} $RPM_BUILD_ROOT%{_datadir}/mime-info/abiword.keys @@ -142,57 +140,253 @@ install -p -m 0644 -D %{SOURCE13} $RPM_BUILD_ROOT%{_datadir}/mime/packages/abiwo find %{buildroot} -name '*.la' -delete find %{buildroot} -name '*.a' -delete -%post -/bin/touch --no-create %{_datadir}/icons/hicolor &> /dev/null || : -/bin/touch --no-create %{_datadir}/mime/packages &> /dev/null || : -/usr/bin/update-desktop-database &> /dev/null || : +mv %{buildroot}%{_datadir}/applications/abiword.desktop %{buildroot}%{_datadir}/applications/com.abisource.AbiWord.desktop -%postun -/usr/bin/update-desktop-database &> /dev/null || : -if [ $1 -eq 0 ] ; then - /bin/touch --no-create %{_datadir}/icons/hicolor &> /dev/null || : - /bin/touch --no-create %{_datadir}/mime/packages &> /dev/null || : - /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || : - /usr/bin/update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : -fi +mkdir -p %{buildroot}%{_metainfodir}/ +mv %{buildroot}%{_datadir}/appdata/abiword.appdata.xml %{buildroot}%{_metainfodir}/ +appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/abiword.appdata.xml -%posttrans -/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || : -/usr/bin/update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : +%ldconfig_scriptlets -n libabiword %files %{_bindir}/abiword +%{_metainfodir}/abiword.appdata.xml %{_datadir}/applications/*.desktop %{_datadir}/mime-info/abiword.mime %{_datadir}/mime-info/abiword.keys %{_datadir}/mime/packages/abiword.xml %{_datadir}/icons/hicolor/*/apps/abiword.png %{_datadir}/icons/hicolor/scalable/apps/abiword.svg -# Abiword help -%{_datadir}/%{name}-%{majorversion}.%{minorversion}/AbiWord -%{_mandir}/man1/abiword.1.gz +%{_mandir}/man1/abiword.1* %files -n libabiword -%doc $RPM_BUILD_DIR/%{name}-%{version}/COPYING $RPM_BUILD_DIR/%{name}-%{version}/COPYRIGHT.TXT -%{_libdir}/libabiword-%{majorversion}.%{minorversion}.so +%license COPYING COPYRIGHT.TXT +%{_libdir}/libabiword-%{bigversion}.so %{_libdir}/libAiksaurusGtk3* -%{_libdir}/%{name}-%{majorversion}.%{minorversion} +%{_libdir}/%{name}-%{bigversion} %{_libdir}/girepository-1.0/Abi-3.0.typelib -%{_datadir}/%{name}-%{majorversion}.%{minorversion} +%{_datadir}/%{name}-%{bigversion} %{_datadir}/dbus-1/services/org.freedesktop.Telepathy.Client.AbiCollab.service %{_datadir}/telepathy/clients/AbiCollab.client -# Abiword help - included in GUI app -%exclude %{_datadir}/%{name}-%{majorversion}.%{minorversion}/AbiWord %files -n libabiword-devel -%{_includedir}/%{name}-%{majorversion}.%{minorversion} -%{_libdir}/pkgconfig/%{name}-%{majorversion}.%{minorversion}.pc +%{_includedir}/%{name}-%{bigversion} +%{_libdir}/pkgconfig/%{name}-%{bigversion}.pc %{_datadir}/gir-1.0/Abi-3.0.gir -%files -n python-abiword -%{python_sitearch}/* +%files -n python3-abiword +%pycached %{python3_sitelib}/gi/overrides/Abi.py %changelog +* Fri Jan 16 2026 Fedora Release Engineering - 1:3.0.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Fri Sep 19 2025 Python Maint - 1:3.0.7-2 +- Rebuilt for Python 3.14.0rc3 bytecode + +* Wed Sep 03 2025 Gwyn Ciesla - 1:3.0.7-1 +- 3.0.7 + +* Fri Aug 15 2025 Python Maint - 1:3.0.5-21 +- Rebuilt for Python 3.14.0rc2 bytecode + +* Wed Jul 23 2025 Fedora Release Engineering - 1:3.0.5-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Tue Jun 03 2025 Python Maint - 1:3.0.5-19 +- Rebuilt for Python 3.14 + +* Thu Jan 16 2025 Fedora Release Engineering - 1:3.0.5-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Tue Oct 22 2024 Gwyn Ciesla - 1:3.0.5-17 +- Fix desktop filename + +* Tue Sep 24 2024 Gwyn Ciesla - 1:3.0.5-16 +- Fix metainfo + +* Sun Sep 08 2024 Alexander Ploumistos - 1:3.0.5-15 +- Rebuilt for goffice-0.10.57 + +* Wed Jul 17 2024 Fedora Release Engineering - 1:3.0.5-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Sat Jun 08 2024 Python Maint - 1:3.0.5-13 +- Rebuilt for Python 3.13 + +* Wed Jan 31 2024 Gwyn Ciesla - 1:3.0.5-12 +- Add missing include + +* Mon Jan 22 2024 Fedora Release Engineering - 1:3.0.5-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 1:3.0.5-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Nov 04 2023 Gwyn Ciesla 1:3.0.5-9 +- Drop i386 on f40+ + +* Wed Jul 19 2023 Fedora Release Engineering - 1:3.0.5-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Thu Jun 15 2023 Python Maint - 1:3.0.5-7 +- Rebuilt for Python 3.12 + +* Wed Mar 08 2023 Gwyn Ciesla - 1:3.0.5-6 +- migrated to SPDX license + +* Wed Jan 18 2023 Fedora Release Engineering - 1:3.0.5-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jul 20 2022 Fedora Release Engineering - 1:3.0.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 13 2022 Python Maint - 1:3.0.5-3 +- Rebuilt for Python 3.11 + +* Wed Jan 19 2022 Fedora Release Engineering - 1:3.0.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sat Oct 23 2021 Peter Robinson - 1:3.0.5-1 +- Update to 3.0.5 + +* Wed Jul 21 2021 Fedora Release Engineering - 1:3.0.4-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 1:3.0.4-10 +- Rebuilt for Python 3.10 + +* Mon Jan 25 2021 Fedora Release Engineering - 1:3.0.4-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Fri Jul 31 2020 Fedora Release Engineering - 1:3.0.4-8 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Jeff Law - 1:3.0.4-7 +- Force C++14 as the code is not ready for C++17 + +* Mon Jul 27 2020 Fedora Release Engineering - 1:3.0.4-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue May 26 2020 Miro Hrončok - 1:3.0.4-5 +- Rebuilt for Python 3.9 + +* Sun Feb 2 2020 Peter Robinson 1:3.0.4-4 +- More packaging cleanups and fixes + +* Wed Jan 29 2020 Peter Robinson 1:3.0.4-3 +- Packaging cleanups and fixes + +* Tue Jan 28 2020 Fedora Release Engineering - 1:3.0.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Nov 29 2019 Peter Robinson 1:3.0.4-1 +- Update to 3.0.4 +- Move to python3 gobject introspection bindings +- Disable gtkmathview plugins until requires issue is fixed + +* Wed Jul 24 2019 Fedora Release Engineering - 1:3.0.2-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun Feb 17 2019 Igor Gnatenko - 1:3.0.2-20 +- Rebuild for readline 8.0 + +* Fri Feb 01 2019 Caolán McNamara - 1:3.0.2-19 +- Rebuilt for fixed libwmf soname + +* Fri Feb 01 2019 Björn Esser - 1:3.0.2-18 +- Add patch to explicitly use python2 (#1671692) + +* Fri Feb 01 2019 Björn Esser - 1:3.0.2-17 +- Rebuilt for libwmf soname bump + +* Thu Jan 31 2019 Fedora Release Engineering - 1:3.0.2-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Jul 17 2018 Miro Hrončok - 1:3.0.2-15 +- Update Python macros to new packaging standards + (See https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_package) + +* Thu Jul 12 2018 Fedora Release Engineering - 1:3.0.2-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Feb 28 2018 Caolán McNamara - 1:3.0.2-13 +- rebuild for fribidi + +* Wed Feb 07 2018 Iryna Shcherbina - 1:3.0.2-12 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Wed Feb 07 2018 Fedora Release Engineering - 1:3.0.2-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sun Jan 07 2018 Igor Gnatenko - 1:3.0.2-10 +- Remove obsolete scriptlets + +* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek - 1:3.0.2-9 +- Python 2 binary package renamed to python2-abiword + See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 + +* Wed Aug 02 2017 Fedora Release Engineering - 1:3.0.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1:3.0.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon May 15 2017 Fedora Release Engineering - 1:3.0.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 1:3.0.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jan 12 2017 Igor Gnatenko - 1:3.0.2-4 +- Rebuild for readline 7.x + +* Wed Dec 7 2016 Peter Robinson 1:3.0.2-3 +- Fix the black drawing regression with Gtk3.22 + +* Tue Nov 29 2016 Peter Robinson 1:3.0.2-2 +- Run ldconfig for libabiword + +* Tue Nov 29 2016 Peter Robinson 1:3.0.2-1 +- Update to 3.0.2 stable + +* Tue Jul 19 2016 Fedora Release Engineering - 1:3.0.1-12 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Sun Apr 10 2016 Peter Robinson 1:3.0.1-11 +- fix parallel build (thanks yselkowi) rhbz 1214395 + +* Sun Apr 10 2016 Peter Robinson 1:3.0.1-10 +- Add patches to fix building with newer gnutls and gcc6 +- Add patch to fix Wordperfect support + +* Wed Feb 03 2016 Fedora Release Engineering - 1:3.0.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jul 29 2015 Fedora Release Engineering - 1:3.0.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159 + +* Wed Jul 22 2015 David Tardon - 1:3.0.1-7 +- rebuild for Boost 1.58 + +* Tue Jun 16 2015 Fedora Release Engineering - 1:3.0.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Jun 06 2015 David Tardon - 1:3.0.1-5 +- really enable WordPerfect import +- enable MS Works import + +* Sat May 02 2015 Kalev Lember - 1:3.0.1-4 +- Rebuilt for GCC 5 C++11 ABI change + +* Thu Mar 26 2015 Richard Hughes - 1:3.0.1-3 +- Add an AppData file for the software center + +* Tue Jan 27 2015 Petr Machata - 1:3.0.1-2 +- Rebuild for boost 1.57.0 + * Wed Dec 24 2014 Peter Robinson 1:3.0.1-1 - Update to 3.0.1 stable @@ -238,108 +432,3 @@ fi * Mon Oct 14 2013 Peter Robinson 1:3.0.0-1 - Update to 3.0.0 stable - -* Sat Aug 03 2013 Fedora Release Engineering - 1:2.8.6-24 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Tue Jul 30 2013 Petr Machata - 1:2.8.6-23 -- Rebuild for boost 1.54.0 - -* Sun Feb 17 2013 Christoph Wickert - 1:2.8.6-22 -- Make desktop file --vendor conditional -- Remove obsolete category 'Applications" from desktop file - -* Sat Feb 09 2013 Rahul Sundaram - 1:2.8.6-21 -- remove vendor tag from desktop file. https://fedorahosted.org/fpc/ticket/247 -- clean up spec to follow current guidelines -- remove obsolete and unapplied boolean patch - -* Fri Jan 18 2013 Adam Tkac - 1:2.8.6-20 -- rebuild due to "jpeg8-ABI" feature drop - -* Fri Dec 21 2012 Adam Tkac - 1:2.8.6-19 -- rebuild against new libjpeg - -* Wed Jul 18 2012 Fedora Release Engineering - 1:2.8.6-18 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Mon Feb 27 2012 Tom Callaway - 1:2.8.6-17 -- fix build against modern glib, libpng - -* Thu Jan 12 2012 Fedora Release Engineering - 1:2.8.6-16 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Tue Dec 06 2011 Adam Jackson - 1:2.8.6-15 -- Rebuild for new libpng - -* Tue Aug 9 2011 Peter Robinson - 1:2.8.6-14 -- rebuild with link-grammar now its back - -* Tue Aug 2 2011 Peter Robinson - 1:2.8.6-13 -- rebuild for new asio -- drop obsolete OLPC and ARM includes - -* Tue Aug 02 2011 Marc Maurer - 1:2.8.6-12 -- Fix a typo in the previous patch - -* Tue Aug 02 2011 Marc Maurer - 1:2.8.6-11 -- Fix BZ 716005: --no-undefined is a linker flag, not a g++ flag - -* Tue Aug 02 2011 Marc Maurer - 1:2.8.6-10 -- Mixed up the microversion and the release - -* Tue Aug 02 2011 Marc Maurer - 1:2.8.6-9 -- Remove link-grammar from the BR and R until it is revived - -* Thu May 05 2011 Chris Tyler - 1:2.8.6-8 -- Excluded asio-devel from ARM builds - -* Mon Feb 07 2011 Fedora Release Engineering - 1:2.8.6-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Thu Dec 30 2010 Peter Robinson - 1:2.8.6-6 -- Rebuild for library soname bumps - -* Wed Dec 8 2010 Caolán McNamara - 1:2.8.6-5 -- Rebuild for libwpd 0.9 - -* Wed Dec 8 2010 Peter Robinson - 1:2.8.6-4 -- Rebuild for library soname bumps - -* Wed Sep 29 2010 jkeating - 1:2.8.6-3 -- Rebuilt for gcc bug 634757 - -* Wed Sep 22 2010 Peter Robinson - 1:2.8.6-2 -- Move abiword gui help from the library to the app. Fixes 578596 - -* Sat Aug 14 2010 Marc Maurer - 1:2.8.6-1 -- New upstream release - -* Sat Jun 05 2010 Marc Maurer - 1:2.8.5-1 -- New upstream release - -* Fri Apr 16 2010 Marc Maurer - 1:2.8.4-1 -- New upstream release - -* Thu Apr 08 2010 Marc Maurer - 1:2.8.3-2 -- Update .desktop patch - -* Thu Apr 08 2010 Marc Maurer - 1:2.8.3-1 -- New upstream release - -* Tue Mar 02 2010 Marc Maurer - 1:2.8.2-1 -- New upstream release -- Package the man page - -* Wed Dec 23 2009 Rahul Sundaram -1:2.8.1-4 -- Rebuild again since the wv soname bump was accidental -- Remove superflous BuildRoot definitions and removals - -* Mon Dec 21 2009 Peter Robinson - 1:2.8.1-3 -- Rebuild against new libwv - -* Sun Nov 01 2009 Marc Maurer - 1:2.8.1-2 -- Rebuild - -* Sun Nov 01 2009 Marc Maurer - 1:2.8.1-1 -- New upstream release diff --git a/sources b/sources index 5be6e78..5450106 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -f3f8052e7b4979a43b75775a381e6cb8 abiword-3.0.1.tar.gz -c9b78cb5f9c415ed63ce1cf9874fa8a4 abiword-docs-3.0.1.tar.gz +SHA512 (AbiWord-release-3.0.7.tar.bz2) = 8cd75bcef936e8db1f859a8685e44c60b6f23a61a3bd702f320fa931dd645c85e9c2e671f870b7873ed57f37f75de71888f8a261cc6c97a58edf7af2114c26b7