Changeset 2650

Show
Ignore:
Timestamp:
11/11/16 02:49:40 (7 years ago)
Author:
jwoithe
Message:

Add support for libxml++3.0 while retaining the option to use libxml++2.6 if that is what is available. Patch from Xavier Forestier.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/SConstruct

    r2628 r2650  
    277277 
    278278    if not env['SERIALIZE_USE_EXPAT']: 
    279         pkgs['libxml++-2.6'] = '2.13.0' 
     279        if conf.CheckPKG('libxml++-3.0'): 
     280            pkgs['libxml++-3.0'] = '3.0.0' 
     281        if not('libxml++-3.0' in pkgs): 
     282            pkgs['libxml++-2.6'] = '2.13.0' 
    280283 
    281284    # Provide a way for users to compile newer libffado which will work  
     
    359362    if conf.CheckPKG('libxml++-2.6 >= 2.39.1'): 
    360363        env.Append(CXXFLAGS = '-std=gnu++11') 
     364    if conf.CheckPKG('libxml++-3.0 >= 3.0.0'): 
     365        env.Append(CXXFLAGS = '-std=gnu++11') 
    361366 
    362367    # Check for C99 lrint() and lrintf() functions used to convert from 
  • trunk/libffado/src/libutil/serialize_libxml.cpp

    r1763 r2650  
    7676Util::XMLSerialize::writeVersion() 
    7777{ 
     78#if LIBXMLXX_MAJOR_VERSION == 3 
     79    xmlpp::Element* pElem =  m_doc.get_root_node()->add_child_element( "CacheVersion" ); 
     80#else 
    7881    xmlpp::Node* pNode = m_doc.get_root_node(); 
    7982    xmlpp::Element* pElem = pNode->add_child( "CacheVersion" ); 
     83#endif 
    8084    char* valstr; 
    8185    asprintf( &valstr, "%s", CACHE_VERSION ); 
     86#if LIBXMLXX_MAJOR_VERSION == 3 
     87    pElem->set_first_child_text( valstr ); 
     88#else 
    8289    pElem->set_child_text( valstr ); 
     90#endif 
    8391    free( valstr ); 
    8492} 
     
    100108    } 
    101109 
    102     xmlpp::Node* pNode = m_doc.get_root_node(); 
     110    xmlpp::Element* pNode = m_doc.get_root_node(); 
    103111    pNode = getNodePath( pNode, tokens ); 
    104112 
    105113    // element to be added 
     114#if LIBXMLXX_MAJOR_VERSION == 3 
     115    xmlpp::Element* pElem = pNode->add_child_element( tokens[tokens.size() - 1] ); 
     116#else 
    106117    xmlpp::Element* pElem = pNode->add_child( tokens[tokens.size() - 1] ); 
     118#endif 
    107119    char* valstr; 
    108120    asprintf( &valstr, "%lld", value ); 
     121#if LIBXMLXX_MAJOR_VERSION == 3 
     122    pElem->set_first_child_text( valstr ); 
     123#else 
    109124    pElem->set_child_text( valstr ); 
     125#endif 
    110126    free( valstr ); 
    111127 
     
    128144    } 
    129145 
    130     xmlpp::Node* pNode = m_doc.get_root_node(); 
     146    xmlpp::Element* pNode = m_doc.get_root_node(); 
    131147    pNode = getNodePath( pNode, tokens ); 
    132148 
    133149    // element to be added 
     150#if LIBXMLXX_MAJOR_VERSION == 3 
     151    xmlpp::Element* pElem = pNode->add_child_element( tokens[tokens.size() - 1] ); 
     152    pElem->set_first_child_text( str ); 
     153#else 
    134154    xmlpp::Element* pElem = pNode->add_child( tokens[tokens.size() - 1] ); 
    135155    pElem->set_child_text( str ); 
     156#endif 
    136157 
    137158    return true; 
    138159} 
    139160 
    140 xmlpp::Node
    141 Util::XMLSerialize::getNodePath( xmlpp::Node* pRootNode, 
     161xmlpp::Element
     162Util::XMLSerialize::getNodePath( xmlpp::Element* pRootNode, 
    142163                                 std::vector<string>& tokens ) 
    143164{ 
     
    150171 
    151172    unsigned int iTokenIdx = 0; 
    152     xmlpp::Node* pCurNode = pRootNode; 
     173    xmlpp::Element* pCurNode = pRootNode; 
    153174    for (bool bFound = false; 
    154175         ( iTokenIdx < tokens.size() - 1 ); 
     
    161182        { 
    162183            if ( ( *it )->get_name() == tokens[iTokenIdx] ) { 
    163                 pCurNode = *it; 
     184                pCurNode = (xmlpp::Element*) *it; 
    164185                bFound = true; 
    165186                break; 
     
    172193 
    173194    for ( unsigned int i = iTokenIdx; i < tokens.size() - 1; i++, iTokenIdx++ ) { 
     195#if LIBXMLXX_MAJOR_VERSION == 3 
     196        pCurNode = pCurNode->add_child_element( tokens[iTokenIdx] ); 
     197#else 
    174198        pCurNode = pCurNode->add_child( tokens[iTokenIdx] ); 
     199#endif 
    175200    } 
    176201    return pCurNode; 
     
    255280    debugOutput( DEBUG_LEVEL_VERY_VERBOSE, "pNode = %s\n", pNode->get_name().c_str() ); 
    256281 
     282#if LIBXMLXX_MAJOR_VERSION == 3 
     283    xmlpp::Node::NodeSet nodeSet = pNode->find( strMemberName ); 
     284    for ( xmlpp::Node::NodeSet::iterator it = nodeSet.begin(); 
     285          it != nodeSet.end(); 
     286          ++it ) 
     287#else 
    257288    xmlpp::NodeSet nodeSet = pNode->find( strMemberName ); 
    258289    for ( xmlpp::NodeSet::iterator it = nodeSet.begin(); 
    259290          it != nodeSet.end(); 
    260291          ++it ) 
     292#endif 
    261293    { 
    262294        const xmlpp::Element* pElement = 
     
    264296        if ( pElement && pElement->has_child_text() ) { 
    265297            char* tail; 
     298#if LIBXMLXX_MAJOR_VERSION == 3 
     299            value = strtoll( pElement->get_first_child_text()->get_content().c_str(), 
     300                             &tail, 0 ); 
     301#else 
    266302            value = strtoll( pElement->get_child_text()->get_content().c_str(), 
    267303                             &tail, 0 ); 
     304#endif 
    268305            debugOutput( DEBUG_LEVEL_VERY_VERBOSE, "found %s = %lld\n", 
    269306                         strMemberName.c_str(), value ); 
     
    291328    xmlpp::Node* pNode = pDoc->get_root_node(); 
    292329 
     330#if LIBXMLXX_MAJOR_VERSION == 3 
     331    xmlpp::Node::NodeSet nodeSet = pNode->find( strMemberName ); 
     332    for ( xmlpp::Node::NodeSet::iterator it = nodeSet.begin(); 
     333          it != nodeSet.end(); 
     334          ++it ) 
     335#else 
    293336    xmlpp::NodeSet nodeSet = pNode->find( strMemberName ); 
    294337    for ( xmlpp::NodeSet::iterator it = nodeSet.begin(); 
    295338          it != nodeSet.end(); 
    296339          ++it ) 
     340#endif 
    297341    { 
    298342        const xmlpp::Element* pElement = dynamic_cast< const xmlpp::Element* >( *it ); 
    299343        if ( pElement ) { 
    300344            if ( pElement->has_child_text() ) { 
     345#if LIBXMLXX_MAJOR_VERSION == 3 
     346                str = pElement->get_first_child_text()->get_content(); 
     347#else 
    301348                str = pElement->get_child_text()->get_content(); 
     349#endif 
    302350            } else { 
    303351                str = ""; 
     
    323371    } 
    324372    xmlpp::Node* pNode = pDoc->get_root_node(); 
     373#if LIBXMLXX_MAJOR_VERSION == 3 
     374    xmlpp::Node::NodeSet nodeSet = pNode->find( strMemberName ); 
     375#else 
    325376    xmlpp::NodeSet nodeSet = pNode->find( strMemberName ); 
     377#endif 
    326378    return nodeSet.size() > 0; 
    327379} 
  • trunk/libffado/src/libutil/serialize_libxml.h

    r1154 r2650  
    8181        DECLARE_DEBUG_MODULE; 
    8282 
    83         xmlpp::Node* getNodePath( xmlpp::Node* pRootNode, 
     83        xmlpp::Element* getNodePath( xmlpp::Element* pRootNode, 
    8484                                  std::vector<std::string>& tokens ); 
    8585    }; 
  • trunk/libffado/src/SConscript

    r2590 r2650  
    289289        libenv.MergeFlags( env['LIBCONFIG_FLAGS'] ) 
    290290        if not env['SERIALIZE_USE_EXPAT']: 
     291            if 'LIBXML30_FLAGS' in env : 
     292                libenv.MergeFlags( env['LIBXML30_FLAGS'] ) 
     293            if not('LIBXML30_FLAGS' in env) : 
    291294                libenv.MergeFlags( env['LIBXML26_FLAGS'] ) 
    292295        else: 
  • trunk/libffado/support/dbus/SConscript

    r2165 r2650  
    4242    env.MergeFlags( env['LIBRAW1394_FLAGS'] ) 
    4343    if not env['SERIALIZE_USE_EXPAT']: 
    44         env.MergeFlags( env['LIBXML26_FLAGS'] ) 
     44        if 'LIBXML30_FLAGS' in env : 
     45            env.MergeFlags( env['LIBXML30_FLAGS'] ) 
     46        if not('LIBXML30_FLAGS' in env) : 
     47            env.MergeFlags( env['LIBXML26_FLAGS'] ) 
    4548    else: 
    4649        env.PrependUnique( LIBS=["expat"] ) 
  • trunk/libffado/support/firmware/SConscript

    r2089 r2650  
    3434    env.MergeFlags( env['LIBIEC61883_FLAGS'] ) 
    3535    if not env['SERIALIZE_USE_EXPAT']: 
    36         env.MergeFlags( env['LIBXML26_FLAGS'] ) 
     36        if 'LIBXML30_FLAGS' in env : 
     37            env.MergeFlags( env['LIBXML30_FLAGS'] ) 
     38        if not('LIBXML30_FLAGS' in env) : 
     39            env.MergeFlags( env['LIBXML26_FLAGS'] ) 
    3740    else: 
    3841        env.PrependUnique( LIBS=["expat"] ) 
  • trunk/libffado/support/tools/SConscript

    r2321 r2650  
    3434if not e.GetOption( "clean" ): 
    3535        if not env['SERIALIZE_USE_EXPAT']: 
     36            if 'LIBXML30_FLAGS' in env : 
     37                e.MergeFlags( env['LIBXML30_FLAGS'] ) 
     38            if not('LIBXML30_FLAGS' in env) : 
    3639                e.MergeFlags( env['LIBXML26_FLAGS'] ) 
    3740        else: 
  • trunk/libffado/tests/SConscript

    r2141 r2650  
    3333        env.MergeFlags( env['LIBRAW1394_FLAGS'] ) 
    3434        if not env['SERIALIZE_USE_EXPAT']: 
     35            if 'LIBXML30_FLAGS' in env : 
     36                env.MergeFlags( env['LIBXML30_FLAGS'] ) 
     37            if not('LIBXML30_FLAGS' in env) : 
    3538                env.MergeFlags( env['LIBXML26_FLAGS'] ) 
    3639        else: