cd /path/to/CAFE
tar -xvf v4.2.1.tar.gz
vim CAFE.patch
输入以下内容并保存退出。
diff -Nur CAFE-4.2.1/cafe/cafe_tree.c CAFE-4.2.1_ok/cafe/cafe_tree.c --- CAFE-4.2.1/cafe/cafe_tree.c 2019-03-07 22:41:35.000000000 +0800 +++ CAFE-4.2.1_ok/cafe/cafe_tree.c 2024-01-03 10:42:25.712782050 +0800 @@ -71,14 +71,14 @@ void __cafe_tree_free_node(pTree ptree, pTreeNode ptnode, va_list ap1) { va_list ap; - if (ap1) va_copy(ap, ap1); + va_copy(ap, ap1); pCafeNode pcnode = (pCafeNode)ptnode; if (pcnode->likelihoods) memory_free(pcnode->likelihoods); pcnode->likelihoods = NULL; if (pcnode->viterbi) memory_free(pcnode->viterbi); pcnode->viterbi = NULL; __phylogeny_free_node(ptree, ptnode, ap); - if (ap1) va_end(ap1); + va_end(ap1); } @@ -89,7 +89,9 @@ int i; for ( i = 0 ; i < pcafe->super.nlist->size ; i++ ) { - __cafe_tree_free_node((pTree)pcafe, (pTreeNode)pcafe->super.nlist->array[i], NULL ); + va_list a; + va_end (a); + __cafe_tree_free_node((pTree)pcafe, (pTreeNode)pcafe->super.nlist->array[i], a ); } } else @@ -314,7 +316,9 @@ } } #pragma omp taskwait - compute_node_likelihoods(ptree, ptnode, NULL); + va_list b; + va_end (b); + compute_node_likelihoods(ptree, ptnode, b); } void compute_tree_likelihoods(pCafeTree pcafe) diff -Nur CAFE-4.2.1/cafe/viterbi.cpp CAFE-4.2.1_ok/cafe/viterbi.cpp --- CAFE-4.2.1/cafe/viterbi.cpp 2019-03-07 22:41:35.000000000 +0800 +++ CAFE-4.2.1_ok/cafe/viterbi.cpp 2024-01-03 10:47:51.962782050 +0800 @@ -500,11 +500,15 @@ int i = 0; for (i = 0; i < postfix->size; i++) { - __cafe_tree_node_compute_viterbi((pTree)pcafe, (pTreeNode)postfix->array[i], NULL); + va_list m; + va_end (m); + __cafe_tree_node_compute_viterbi((pTree)pcafe, (pTreeNode)postfix->array[i], m); } for (i = 0; i < prefix->size; i++) { - __cafe_tree_node_backtrack_viterbi((pTree)pcafe, (pTreeNode)prefix->array[i], NULL); + va_list j; + va_end (j); + __cafe_tree_node_backtrack_viterbi((pTree)pcafe, (pTreeNode)prefix->array[i], j); } } else @@ -532,7 +536,9 @@ int i = 0; for (i = 0; i < postfix->size; i++) { - __cafe_tree_node_compute_viterbi((pTree)pcafe, (pTreeNode)postfix->array[i], NULL); + va_list k; + va_end (k); + __cafe_tree_node_compute_viterbi((pTree)pcafe, (pTreeNode)postfix->array[i], k); } if (param->posterior) { pCafeNode root = (pCafeNode)postfix->array[postfix->size - 1]; @@ -546,7 +552,9 @@ } for (i = 0; i < prefix->size; i++) { - __cafe_tree_node_backtrack_viterbi((pTree)pcafe, (pTreeNode)prefix->array[i], NULL); + va_list l; + va_end (l); + __cafe_tree_node_backtrack_viterbi((pTree)pcafe, (pTreeNode)prefix->array[i], l); } } else diff -Nur CAFE-4.2.1/libtree/phylogeny.c CAFE-4.2.1_ok/libtree/phylogeny.c --- CAFE-4.2.1/libtree/phylogeny.c 2019-03-07 22:41:35.000000000 +0800 +++ CAFE-4.2.1_ok/libtree/phylogeny.c 2024-01-03 10:53:07.442782050 +0800 @@ -148,7 +148,9 @@ int i; for ( i = 0 ; i < ptree->nlist->size ; i++ ) { - __phylogeny_free_node(ptree, (pTreeNode)ptree->nlist->array[i], NULL ); + va_list c; + va_end (c); + __phylogeny_free_node(ptree, (pTreeNode)ptree->nlist->array[i], c ); } } else @@ -585,7 +587,9 @@ pTreeNode sibling = phylogeny_get_sibling(ptree,pnode); if ( tree_is_root(ptree,pnode->parent) ) { - freenode(ptree, ptree->root,NULL); + va_list d; + va_end (d); + freenode(ptree, ptree->root,d); ptree->root = sibling; ptree->root->parent = NULL; } @@ -603,7 +607,9 @@ grand->children->tail->data = sibling; } sibling->parent = grand; - freenode(ptree,parent,NULL); + va_list e; + va_end (e); + freenode(ptree,parent,e); } tree_build_node_list(ptree); tree_build_node_list(psubtree); @@ -618,7 +624,9 @@ pTreeNode sibling = phylogeny_get_sibling(ptree,pnode); if ( tree_is_root(ptree,pnode->parent) ) { - freenode(ptree, ptree->root,NULL); + va_list f; + va_end (f); + freenode(ptree, ptree->root,f); ptree->root = sibling; ptree->root->parent = NULL; } @@ -636,7 +644,9 @@ grand->children->tail->data = sibling; } sibling->parent = grand; - freenode(ptree,parent,NULL); + va_list g; + va_end (g); + freenode(ptree,parent,g); } Tree tmp; @@ -724,7 +734,9 @@ for ( i = 0 ; i < nlist->size ; i+=2 ) { pTreeNode pnode = (pTreeNode)nlist->array[i]; - filter(ptree,pnode,NULL); + va_list h; + va_end (h); + filter(ptree,pnode,h); if ( pnode->reg ) { while( pnode && pnode->reg == 0 )
patch -p0 < CAFE.patch
cd CAFE-4.2.1
autoconf CC=clang CXX=clang++ ./configure
make