[Libreoffice-commits] core.git: 4 commits - desktop/Library_libreoffice.mk desktop/source smoketest/Executable_libtest.mk smoketest/libtest.cxx
Michael Meeks
michael.meeks at collabora.com
Thu Nov 7 12:50:24 CET 2013
desktop/Library_libreoffice.mk | 10 +++---
desktop/source/lib/init.cxx | 66 +++++++++++++++++++++++++++-------------
smoketest/Executable_libtest.mk | 1
smoketest/libtest.cxx | 54 ++++++++++++++++++++++++++++++--
4 files changed, 103 insertions(+), 28 deletions(-)
New commits:
commit b9bbd847876cd7b23861c862af510da8244aef18
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Thu Nov 7 11:46:08 2013 +0000
liblibo: improve the libtest sample app.
Add command-line help, validate arguments more, better error reporting.
Change-Id: Ia092895d0d116b003bb6c2a252f68ae9b6ba6d35
diff --git a/smoketest/libtest.cxx b/smoketest/libtest.cxx
index ffacd18..39a0098 100644
--- a/smoketest/libtest.cxx
+++ b/smoketest/libtest.cxx
@@ -8,6 +8,7 @@
*/
#include <stdio.h>
+#include <string.h>
#include <malloc.h>
#include <assert.h>
#include <math.h>
@@ -16,17 +17,35 @@
long getTimeMS();
+static int help()
+{
+ fprintf( stderr, "Usage: libtest <absolute-path-to-libreoffice-install> [path to load document] [path to save document].\n" );
+ return 1;
+}
+
int main (int argc, char **argv)
{
long start, end;
start = getTimeMS();
- if( argc < 2 )
- return -1;
+ if( argc < 2 ||
+ ( argc > 1 && ( !strcmp( argv[1], "--help" ) || !strcmp( argv[1], "-h" ) ) ) )
+ return help();
+
+ if (argv[1][0] != '/')
+ {
+ fprintf( stderr, "Absolute path required to libreoffice install\n" );
+ return 1;
+ }
+
LibLibreOffice *pOffice = lo_init( argv[1] );
if( !pOffice )
+ {
+ fprintf( stderr, "Failed to initialize\n" );
return -1;
+ }
+
// This separate init is lame I think.
if( !pOffice->initialize( argv[1] ) )
{
@@ -80,7 +99,8 @@ int main (int argc, char **argv)
return 0;
}
-long getTimeMS() {
+long getTimeMS()
+{
struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t);
long ms = round(t.tv_nsec / 1.0e6) + t.tv_sec * 1000;
commit 3c608eb38150f3b11919adf6eca6eff0fdfdb0cd
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Thu Nov 7 11:37:19 2013 +0000
liblibo: share crude URL absolutization, and clean.
Change-Id: I559eac8626a011644f68f8391631447f15c643eb
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 6c6b9f5..d26d5b8 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -135,24 +135,33 @@ static OUString getUString( const char *str )
RTL_TEXTENCODING_UTF8 );
}
+// Try to convert a relative URL to an absolute one
+static OUString getAbsoluteURL( const char *pURL )
+{
+ OUString aURL( getUString( pURL ) );
+ OUString sAbsoluteDocUrl, sWorkingDir, sDocPathUrl;
+
+ // FIXME: this would appear to kill non-file URLs.
+ osl_getProcessWorkingDir(&sWorkingDir.pData);
+ osl::FileBase::getFileURLFromSystemPath( aURL, sDocPathUrl );
+ osl::FileBase::getAbsoluteFileURL(sWorkingDir, sDocPathUrl, sAbsoluteDocUrl);
+
+ return sAbsoluteDocUrl;
+}
+
LODocument *
LibLibreOffice_Impl::documentLoad( const char *docUrl )
{
- OUString sUrl = getUString( docUrl );
- OUString sAbsoluteDocUrl, sWorkingDir, sDocPathUrl;
+ OUString aURL = getAbsoluteURL( docUrl );
uno::Reference < css::frame::XDesktop2 > xComponentLoader =
css::frame::Desktop::create(xContext);
- osl_getProcessWorkingDir(&sWorkingDir.pData);
- osl::FileBase::getFileURLFromSystemPath( sUrl, sDocPathUrl );
- osl::FileBase::getAbsoluteFileURL(sWorkingDir, sDocPathUrl, sAbsoluteDocUrl);
-
maLastExceptionMsg = "";
try {
uno::Reference < css::lang::XComponent > xComponent =
xComponentLoader->loadComponentFromURL(
- sAbsoluteDocUrl, OUString("_blank"), 0,
+ aURL, OUString("_blank"), 0,
uno::Sequence < css::beans::PropertyValue >());
if( xComponentLoader.is() )
return new LibLODocument_Impl( xComponent );
@@ -168,12 +177,7 @@ bool LibLODocument_Impl::saveAs (const char *url, const char *format)
{
OUString sFormat = getUString( format );
- OUString sUrl = getUString( url );
- OUString sAbsoluteDocUrl, sWorkingDir, sDocPathUrl;
-
- osl_getProcessWorkingDir(&sWorkingDir.pData);
- osl::FileBase::getFileURLFromSystemPath( sUrl, sDocPathUrl );
- osl::FileBase::getAbsoluteFileURL(sWorkingDir, sDocPathUrl, sAbsoluteDocUrl);
+ OUString aURL = getAbsoluteURL( url );
try {
uno::Reference< frame::XModel > xDocument( mxComponent, uno::UNO_QUERY_THROW );
@@ -205,10 +209,10 @@ bool LibLODocument_Impl::saveAs (const char *url, const char *format)
if( ! format )
{
// sniff from the extension
- sal_Int32 idx = sUrl.lastIndexOf( "." );
+ sal_Int32 idx = aURL.lastIndexOf( "." );
if( idx > 0 )
{
- sFormat = sUrl.copy( idx + 1 );
+ sFormat = aURL.copy( idx + 1 );
}
else
{
@@ -239,7 +243,7 @@ bool LibLODocument_Impl::saveAs (const char *url, const char *format)
aSeq[1].Value <<= aFilterName;
uno::Reference< frame::XStorable > xStorable( mxComponent, uno::UNO_QUERY_THROW );
- xStorable->storeToURL( sAbsoluteDocUrl, aSeq );
+ xStorable->storeToURL( aURL, aSeq );
return true;
} catch (const uno::Exception &ex) {
commit d324745fe95c7f0fad56f146e1e33f994a0d5de6
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Thu Nov 7 11:36:44 2013 +0000
liblibo: make liblibreoffice static as it should be.
The whole purpose of this tiny library is to break dependencies,
so requiring it in our library path is a bit silly.
Change-Id: Ie0e000b97db87afd57f693e19341eadf97323335
diff --git a/desktop/Library_libreoffice.mk b/desktop/Library_libreoffice.mk
index dbe3e81..b35c75d 100644
--- a/desktop/Library_libreoffice.mk
+++ b/desktop/Library_libreoffice.mk
@@ -7,25 +7,25 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
-$(eval $(call gb_Library_Library,libreoffice))
+$(eval $(call gb_StaticLibrary_StaticLibrary,libreoffice))
-$(eval $(call gb_Library_set_include,libreoffice,\
+$(eval $(call gb_StaticLibrary_set_include,libreoffice,\
$$(INCLUDE) \
-I$(SRCDIR)/desktop/inc \
))
-$(eval $(call gb_Library_add_libs,libreoffice,\
+$(eval $(call gb_StaticLibrary_add_libs,libreoffice,\
$(if $(filter $(OS),LINUX), \
-ldl \
-lpthread \
) \
))
-$(eval $(call gb_Library_use_libraries,libreoffice,\
+$(eval $(call gb_StaticLibrary_use_libraries,libreoffice,\
$(gb_UWINAPI) \
))
-$(eval $(call gb_Library_add_exception_objects,libreoffice,\
+$(eval $(call gb_StaticLibrary_add_exception_objects,libreoffice,\
desktop/source/lib/shim \
))
diff --git a/smoketest/Executable_libtest.mk b/smoketest/Executable_libtest.mk
index 14bf342..3d8ec63 100644
--- a/smoketest/Executable_libtest.mk
+++ b/smoketest/Executable_libtest.mk
@@ -20,6 +20,7 @@ $(eval $(call gb_Executable_use_libraries,libtest,\
))
$(eval $(call gb_Executable_add_libs,libtest,\
+ -ldl \
-pthread \
))
commit 49112ec909ef465ecb1aa2786a283b57034e6af4
Author: Christoph Lutz <christoph.lutz at cib.de>
Date: Tue Nov 5 23:34:37 2013 +0100
liblibo: fixes and improvements for liblibreoffice
fixes for liblibreoffice-Impl (init.cxx): determine outputfilter from file
suffix if no filter is provided; ensure that url provided to
XStorable.storeToUrl is really an url; improved error handling
small improvements in somektest/libtest.cxx: output times required for init,
load and save.
Change-Id: Ic8b2c0d34cbeae3250c43cac02690e6ec1954ed7
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 5d7e8c0..6c6b9f5 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -166,19 +166,23 @@ LibLibreOffice_Impl::documentLoad( const char *docUrl )
bool LibLODocument_Impl::saveAs (const char *url, const char *format)
{
- OUString sURL = getUString( url );
OUString sFormat = getUString( format );
+ OUString sUrl = getUString( url );
+ OUString sAbsoluteDocUrl, sWorkingDir, sDocPathUrl;
+
+ osl_getProcessWorkingDir(&sWorkingDir.pData);
+ osl::FileBase::getFileURLFromSystemPath( sUrl, sDocPathUrl );
+ osl::FileBase::getAbsoluteFileURL(sWorkingDir, sDocPathUrl, sAbsoluteDocUrl);
+
try {
uno::Reference< frame::XModel > xDocument( mxComponent, uno::UNO_QUERY_THROW );
uno::Sequence< beans::PropertyValue > aSeq = xDocument->getArgs();
- OUString aFilterName, aDocumentService;
+ OUString aDocumentService;
for( sal_Int32 i = 0; i < aSeq.getLength(); ++i )
{
- if( aSeq[i].Name == "FilterName" )
- aSeq[i].Value >>= aFilterName;
- else if( aSeq[i].Name == "DocumentService" )
+ if( aSeq[i].Name == "DocumentService" )
aSeq[i].Value >>= aDocumentService;
OUString aValue;
aSeq[i].Value >>= aValue;
@@ -198,17 +202,35 @@ bool LibLODocument_Impl::saveAs (const char *url, const char *format)
else // for the sake of argument only writer documents ...
pMap = (const ExtensionMap *)aWriterExtensionMap;
- if( format )
+ if( ! format )
+ {
+ // sniff from the extension
+ sal_Int32 idx = sUrl.lastIndexOf( "." );
+ if( idx > 0 )
+ {
+ sFormat = sUrl.copy( idx + 1 );
+ }
+ else
+ {
+ gImpl->maLastExceptionMsg = "input filename without a suffix";
+ return false;
+ }
+ }
+
+ OUString aFilterName;
+ for( sal_Int32 i = 0; pMap[i].extn; i++ )
{
- for( sal_Int32 i = 0; pMap[i].extn; i++ )
+ if( sFormat.equalsIgnoreAsciiCaseAscii( pMap[i].extn ) )
{
- if( sFormat.equalsIgnoreAsciiCaseAscii( pMap[i].extn ) )
- {
- aFilterName = getUString( pMap[i].filterName );
- break;
- }
+ aFilterName = getUString( pMap[i].filterName );
+ break;
}
}
+ if( ! aFilterName.getLength() )
+ {
+ gImpl->maLastExceptionMsg = "no output filter found for provided suffix";
+ return false;
+ }
aSeq.realloc(2);
aSeq[0].Name = "Overwrite";
@@ -217,7 +239,7 @@ bool LibLODocument_Impl::saveAs (const char *url, const char *format)
aSeq[1].Value <<= aFilterName;
uno::Reference< frame::XStorable > xStorable( mxComponent, uno::UNO_QUERY_THROW );
- xStorable->storeToURL( sURL, aSeq );
+ xStorable->storeToURL( sAbsoluteDocUrl, aSeq );
return true;
} catch (const uno::Exception &ex) {
diff --git a/smoketest/libtest.cxx b/smoketest/libtest.cxx
index 4b9d1b3..ffacd18 100644
--- a/smoketest/libtest.cxx
+++ b/smoketest/libtest.cxx
@@ -10,10 +10,18 @@
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
+#include <math.h>
+#include <time.h>
#include <liblibreoffice.hxx>
+long getTimeMS();
+
int main (int argc, char **argv)
{
+ long start, end;
+
+ start = getTimeMS();
+
if( argc < 2 )
return -1;
LibLibreOffice *pOffice = lo_init( argv[1] );
@@ -25,6 +33,11 @@ int main (int argc, char **argv)
fprintf( stderr, "failed to initialize\n" );
return -1;
}
+
+ end = getTimeMS();
+ fprintf( stderr, "init time: %ld ms\n", (end-start) );
+ start = end;
+
fprintf( stderr, "start to load document '%s'\n", argv[2] );
LODocument *pDocument = pOffice->documentLoad( argv[2] );
if( !pDocument )
@@ -36,6 +49,10 @@ int main (int argc, char **argv)
return -1;
}
+ end = getTimeMS();
+ fprintf( stderr, "load time: %ld ms\n", (end-start) );
+ start = end;
+
if( argc > 3 )
{
const char *pFilter = NULL;
@@ -49,9 +66,13 @@ int main (int argc, char **argv)
free (pError);
}
else
+ {
fprintf( stderr, "Save succeeded\n" );
+ end = getTimeMS();
+ fprintf( stderr, "save time: %ld ms\n", (end-start) );
+ }
}
- fprintf( stderr, "all tests passed." );
+ fprintf( stderr, "all tests passed.\n" );
delete pDocument;
delete pOffice;
@@ -59,4 +80,11 @@ int main (int argc, char **argv)
return 0;
}
+long getTimeMS() {
+ struct timespec t;
+ clock_gettime(CLOCK_MONOTONIC, &t);
+ long ms = round(t.tv_nsec / 1.0e6) + t.tv_sec * 1000;
+ return ms;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list