编译和安装

操作步骤

  1. 使用PuTTY工具,以root用户登录服务器。
  2. 执行以下命令进入“/path/to/CAFE”目录。

    cd /path/to/CAFE

  3. 执行以下命令解压安装包。

    tar -xvf v4.2.1.tar.gz

  4. 执行以下命令创建补丁。

    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 )
    

  5. 执行以下命令打入补丁。

    patch -p0 < CAFE.patch

  6. 执行以下命令进入解压后的目录。

    cd CAFE-4.2.1

  7. 执行以下命令生成编译文件。

    autoconf
    CC=clang CXX=clang++ ./configure

  8. 执行以下命令进行编译。

    make