/************************************************************** * * 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 #include #include #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