blob: bec6cd40b66e3e6f89512e70e54ec20dd8da8e3c [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_connectivity.hxx"
#include <rtl/ustring.hxx>
#include <osl/module.h>
#include <stdio.h>
#define DECLARE_FN_POINTERS 1
#include "EApi.h"
static const char *eBookLibNames[] = {
"libebook-1.2.so.9", // evolution-2.8
"libebook-1.2.so.5", // evolution-2.4 and 2.6+
"libebook-1.2.so.3", // evolution-2.2
"libebook.so.8" // evolution-2.0
};
typedef void (*SymbolFunc) (void);
#define SYM_MAP(a) { #a, (SymbolFunc *)&a }
static struct {
const char *sym_name;
SymbolFunc *ref_value;
} aApiMap[] = {
SYM_MAP( e_contact_field_name ),
SYM_MAP( e_contact_get ),
SYM_MAP( e_contact_get_type ),
SYM_MAP( e_contact_field_id ),
SYM_MAP( e_source_peek_name ),
SYM_MAP( e_source_get_property ),
SYM_MAP( e_source_list_peek_groups ),
SYM_MAP( e_source_group_peek_sources ),
SYM_MAP( e_book_new ),
SYM_MAP( e_book_open ),
SYM_MAP( e_book_get_uri ),
SYM_MAP( e_book_get_source ),
SYM_MAP( e_book_get_addressbooks ),
SYM_MAP( e_book_get_contacts ),
SYM_MAP( e_book_authenticate_user ),
SYM_MAP( e_book_query_field_test ),
SYM_MAP( e_book_query_and ),
SYM_MAP( e_book_query_or ),
SYM_MAP( e_book_query_not ),
SYM_MAP( e_book_query_ref ),
SYM_MAP( e_book_query_unref ),
SYM_MAP( e_book_query_from_string ),
SYM_MAP( e_book_query_to_string ),
SYM_MAP( e_book_query_field_exists ),
SYM_MAP( e_source_group_peek_base_uri)
};
#undef SYM_MAP
static bool
tryLink( oslModule &aModule, const char *pName )
{
for( guint i = 0; i < G_N_ELEMENTS( aApiMap ); i++ )
{
SymbolFunc aMethod;
aMethod = (SymbolFunc) osl_getFunctionSymbol
( aModule, rtl::OUString::createFromAscii ( aApiMap[ i ].sym_name ).pData );
if( !aMethod )
{
fprintf( stderr, "Warning: missing symbol '%s' in '%s'",
aApiMap[ i ].sym_name, pName );
return false;
}
* aApiMap[ i ].ref_value = aMethod;
}
return true;
}
bool EApiInit()
{
oslModule aModule;
for( guint j = 0; j < G_N_ELEMENTS( eBookLibNames ); j++ )
{
aModule = osl_loadModule( rtl::OUString::createFromAscii
( eBookLibNames[ j ] ).pData,
SAL_LOADMODULE_DEFAULT );
if( aModule)
{
if ( tryLink( aModule, eBookLibNames[ j ] ) )
return true;
osl_unloadModule( aModule );
}
}
fprintf( stderr, "Can find no compliant libebook client libraries\n" );
return false;
}
#if 0
// hjs: SOLARDEF does no longer exist please lookup the required
// defines in a regular compile line
/*
* Test code - enable &
*
* Compile with ( after source LinuxIntelEnv.Set.sh )
gcc $SOLARDEF -I $SOLARVER/$UPD/$INPATH/inc \
-I. `pkg-config --cflags --libs gobject-2.0` \
-L $SOLARVER/$UPD/$INPATH/lib -luno_sal -lstdc++ EApi.cxx
*/
int main( int argc, char **argv)
{
return EApiInit();
}
#endif