Commit 3e988bb4 authored by Mayo Roettger's avatar Mayo Roettger
Browse files

changes to build without FBC and Groups plugins

parent b4be0a89
Package: sybilSBML
Type: Package
Title: SBML Integration in Package 'Sybil'
Version: 3.0.6
Date: 2019-07-03
Version: 3.0.7
Date: 2019-08-02
Authors@R: c(person("Mayo", "Roettger", role = "cre", email = "mayo.roettger@hhu.de"),
person("Gabriel", "Gelius-Dietrich", role = c("aut", "ctb")),
person(c("C.", "Jonathan"), "Fritzemeier", role = "ctb", email = "clausjonathan.fritzemeier@uni-duesseldorf.de"),
......@@ -17,7 +17,7 @@ License: GPL-3 | file LICENSE
LazyLoad: yes
Collate: generics.R sbmlPtrClass.R sbmlErrorClass.R sybilSBML.R
uglyHack.R readSBMLmod.R zzz.R
Packaged: 2019-07-03 15:45:00 UTC; mayo
Packaged: 2019-08-02 15:05:20 UTC; mayo
Author: Mayo Roettger [cre],
Gabriel Gelius-Dietrich [aut, ctb],
C. Jonathan Fritzemeier [ctb],
......
......@@ -52,5 +52,7 @@ readSBMLmod,
writeSBML,
getSBMLFbcversion,
getSBMLmodNotes,
getSBMLmodAnnotation
getSBMLmodAnnotation,
isAvailableFbcPlugin,
isAvailableGroupsPlugin
)
......@@ -57,12 +57,13 @@ on.exit(expr = {
} )
#------------------------------------------------------------------------------#
# open the model file
# Does the model file exist?
if ( file.exists(filename) == FALSE ) {
stop("failed to open file ", sQuote(filename))
}
# set description to filename, if not set
if (missing(description)) {
mdesc <- filename
}
......@@ -96,6 +97,7 @@ entryforS <- function(X) {
CURR_MET <- character(n) # metabolites in X
t <- 0
# over all metabolite IDs:
for (i in seq(along = X[["species"]])) {
t <- t + 1
......@@ -104,21 +106,23 @@ entryforS <- function(X) {
# The metabolite id's are removed from the metabolites list,
# but not from the reactions list.
CURR_MET[t] <- X[["species"]][i]
CURR_MET[t] <- X[["species"]][i] # get current metabolite ID
if (isTRUE(mergeMet)) {
# find out, if the current metabolite is already in the list and remember matching position in CURR_MET vector:
met_indCURR <- match(CURR_MET[t], CURR_MET[-t])
}
else {
met_indCURR <- NA
}
if (is.na(met_indCURR)) {
if (is.na(met_indCURR)) {# if we don't have to merge metabolite --> check this!####
sj[t] <- match(X[["species"]][i], met_id_tmp) # the row number
s_ji[t] <- X[["stoichiometry"]][i]
remMet[t] <- ifelse(is.na(sj[t]), FALSE, TRUE)
remMet[t] <- ifelse(is.na(sj[t]), FALSE, TRUE) #
}
else {
else {# we have to merge metabolite --> check this!####
remMet[t] <- FALSE
s_ji[met_indCURR] <- s_ji[met_indCURR] + X[["stoichiometry"]][i]
msg <- paste("reaction no.", i, dQuote(react_id_tmp[i]),
......@@ -211,6 +215,8 @@ formatSBMLid <- function(idstr) {
#------------------------------------------------------------------------------#
# parse the notes field of the reactions
# (notes is a character string)
# extract gpr rules and subsystem from notes
#------------------------------------------------------------------------------#
parseNotesReact <- function(notes) {
......@@ -226,35 +232,49 @@ parseNotesReact <- function(notes) {
#split <- "\n"
fields <- strsplit(notes, split, fixed = TRUE)
# print(fields)
# print(fields)
# fields now contains a list in which each item is a vector with the strings separated by the <p> or <html:p> respectively
# we only have one element in the list here.
# extract the actual notes between the opening and closing tags:
start_tag <- paste("<", tag, ">", sep = "")
end_tag <- paste("</", tag, ">", sep = "")
regex <- paste("^(?:[\\t]*\\Q", start_tag, "\\E)?", "(.*)", "\\Q", end_tag, "\\E", "(?s).*$", sep = "")
# regex <- paste("(.*)", end_tag, "(?s).*$", sep = "")
#regex <- paste("(.*)", end_tag, "(?s).*$", sep = "")
#print(regex)
fields_str <- sub(regex, "\\1", fields[[1]], perl = TRUE)
#print(fields_str)
# fields_str should now contain a vector of the actual notes without surrounding tags
subSyst <- ""
gpr <- ""
# extract gpr rule (genes and rules) and subsystem from notes:
subSyst <- ""# no sub system
gpr <- ""# no gene to protein to reaction interaction
gene_rule <- NA
for (j in 1:length(fields_str)) {
# Do we have a "GENE_ASSOCIATION" or "GENE ASSOCIATION" or GENEASSOCIATION?
if (grepl("GENE[_ ]?ASSOCIATION", fields_str[j])) {
#if (charmatch("GENE", fields_str[j], nomatch = -1) != -1) {
gpr <- sub("GENE[_ ]?ASSOCIATION: *", "", fields_str[j])
gene_rule <- sybil:::.parseBoolean(gpr)
gpr <- sub("GENE[_ ]?ASSOCIATION: *", "", fields_str[j])# delete the text, remaining gpr
# get the unique gene names and the rule with the x[gene number] codes:
gene_rule <- sybil:::.parseBoolean(gpr)# parse gene rule
#print(gene_rule)
}#Ardalan Habil
# Or do we have a "GPR_ASSOCIATION" or "GPR ASSOCIATION" or GPRASSOCIATION?
else if (grepl("GPR[_ ]?ASSOCIATION", fields_str[j])) {
gpr <- sub("GPR[_ ]?ASSOCIATION: *", "", fields_str[j])
# get the unique gene names and the rule with the x[gene number] codes:
gene_rule <- sybil:::.parseBoolean(gpr)
}
}
# Do we have a "SUBSYSTEM"?
if (charmatch("SUBSYSTEM", fields_str[j], nomatch = -1) != -1) {
# remove SUBSYSTEM with trailing trailing spaces, then remove the S_ at the beginning, then exchange all _ by spaces:
subSyst <- sub("SUBSYSTEM: *", "", fields_str[j])
subSyst <- sub("^S_", "", subSyst, perl = TRUE)
subSyst <- gsub("[_]+", " ", subSyst)
......@@ -267,7 +287,8 @@ parseNotesReact <- function(notes) {
if (!is.list(gene_rule)) {
gene_rule <- sybil:::.parseBoolean("")
}
# return sub system, genes, and rules:
return(list(sub_system = subSyst, genes = gene_rule$gene, rules = gene_rule$rule, gpr = gpr))
}
......@@ -289,6 +310,16 @@ sbmldoc <- openSBMLfile(filename)
message("OK")
# warning, if FBC plugin is missing:
if (isAvailableFbcPlugin() == FALSE) {
warning("Missing FBC-plugin for libSBML. FBC constraints will be ignored.")
}
# warning, if Groups plugin is missing:
if (isAvailableGroupsPlugin() == FALSE) {
warning("Missing Groups-plugin for libSBML. Groups will be ignored.")
}
# warning if new Version/Level/
SBMLlevel<- getSBMLlevel(sbmldoc)
SBMLversion<- getSBMLversion(sbmldoc)
......@@ -298,6 +329,7 @@ if(SBMLlevel == 3 && SBMLversion > 1)
if (FBCversion > 2)
warning(paste("No support for Fbc Version ",FBCversion))
#------------------------------------------------------------------------------#
# check the model #
#------------------------------------------------------------------------------#
......@@ -442,24 +474,24 @@ if (is.null(metabolitesList)) {
}
missingId(metabolitesList)
metSpIds <- metabolitesList[["id"]]
metSpIds <- metabolitesList[["id"]]# Metabolites IDs
#nummet <- getSBMLnumSpecies(sbmlmod)
if (isTRUE(bndCond)) {
metSpBnd <- metabolitesList[["boundaryCondition"]]
met_id_pos <- !metSpBnd
metSpBnd <- metabolitesList[["boundaryCondition"]]# TRUE for external, FALSE for internal metabolites
met_id_pos <- !metSpBnd# TRUE for internal metabolites
}
else {
# regular expression to identify external metabolites
extMetRegEx <- paste("_", extMetFlag, "$", sep = "")
met_id_pos <- grep(extMetRegEx, metSpIds, invert = TRUE)
met_id_pos <- grep(extMetRegEx, metSpIds, invert = TRUE)# positions of internal metabolites
}
met_id_tmp <- metSpIds[met_id_pos]
met_id_tmp <- metSpIds[met_id_pos]# IDs of internal metabolites
# number of metabolites
nummet <- length(met_id_tmp)
nummet <- length(met_id_tmp)# No. internal metabolites
#------------------------------------------------------------------------------#
......@@ -515,33 +547,35 @@ for (i in 1 : numreact) {
# Notes und Annotation can be null ( @Ardalan Habil)
if(!is.null( reactionsList[["notes"]]))
if (nchar(notes) > 0) {
if (nchar(notes) > 0) {
hasNotes <- TRUE
notes_field <- parseNotesReact(notes)
#print(notes_field)
subSys[i] <- notes_field$sub_system # the reaction's sub system: glykolysis, TCA, ...
genes[[i]] <- notes_field$genes # list of genes
rules[i] <- notes_field$rules # rules
gpr[i] <- notes_field$gpr # original gpr association
#allGenes <- c(allGenes, genes[[i]])
hasNotes <- TRUE
notes_field <- parseNotesReact(notes)
#print(notes_field)
subSys[i] <- notes_field$sub_system # the reaction's sub system: glykolysis, TCA, ...
genes[[i]] <- notes_field$genes # list of genes
rules[i] <- notes_field$rules # rules
gpr[i] <- notes_field$gpr # original gpr association
#allGenes <- c(allGenes, genes[[i]])
}
else {
if(!is.null( reactionsList[["annotation"]]))
if (nchar(annot) > 0) {
hasAnnot <- TRUE
pn <- regexpr("Pathway Name: [^<]+", annot, perl = TRUE)
subSys[i] <- substr(annot, (pn+14), pn + ((attr(pn, "match.length"))-1))
}
else {
if(!is.null( reactionsList[["annotation"]]))
if (nchar(annot) > 0) {
hasAnnot <- TRUE
pn <- regexpr("Pathway Name: [^<]+", annot, perl = TRUE)
subSys[i] <- substr(annot, (pn+14), pn + ((attr(pn, "match.length"))-1))
}
}
# get flux balance constraints, if fbcgprRules not null
fbcgene_rule <- NA
if ( !is.null(fbcgprRules))
{
# get the unique gene names and the rule with the x[gene number] codes:
fbcgene_rule<- sybil:::.parseBoolean(fbcgprRules[i])
genes[[i]] <- fbcgene_rule$gene # list of genes
......@@ -549,12 +583,15 @@ for (i in 1 : numreact) {
gpr[i] <- fbcgprRules[i]
}
# Check here if reactants and products lists exist, same for the stoichiometry slot
# Entries for S -- the reactants
S_tmp <- entryforS(reactionsList[["reactants"]][[i]])
S_tmp <- entryforS(reactionsList[["reactants"]][[i]])# todo: have to give i and met_id_tmp as argument, right now they are global (confusing)
#print(S_tmp)
if (is.list(S_tmp) == TRUE) {
# set stoichiometric matrix, values are set negative (reactants)
St[S_tmp$sj, i] <- (S_tmp$s_ji * -1)
#St[S_tmp$sj, S_tmp$si] <- (S_tmp$s_ji * -1)
}
......@@ -638,10 +675,10 @@ for (i in 1 : numreact) {
}
}
#FBC Objective @Ardalan Habil
if(!is.null(fbcObjectives))
{
if(!is.null(fbcObjectives))
{
ocof[i]<-as.numeric(fbcObjectives[i])
}
}
}
......@@ -649,6 +686,8 @@ for (i in 1 : numreact) {
# get subsystem properties from the sbml groups plugin
subSysGroups <- getSBMLGroupsList(sbmlmod)
# ---------------------------------------------------------------------------- #
# search for unused metabolites and unused reactions
......@@ -699,6 +738,7 @@ if ( any(SKIP_REACTION == FALSE) ) {
warning(msg, call. = FALSE)
}
# if we do not want to remove, mark them as to skip
if (!isTRUE(remUnusedMetReact)) {
SKIP_METABOLITE[!SKIP_METABOLITE] <- TRUE
SKIP_REACTION[!SKIP_REACTION] <- TRUE
......@@ -867,6 +907,7 @@ if (isTRUE(deadEndMet)) {
# ---------------------------------------------------------------------------- #
# S
# only keep metabolites and reactions where SKIP mark is TRUE, remove the rest
St <- St[SKIP_METABOLITE, , drop = FALSE]
St <- St[ , SKIP_REACTION, drop = FALSE]
......@@ -925,33 +966,36 @@ if (isTRUE(ignoreNoAn)) {
sybil::subSys(mod) <- Matrix::Matrix(FALSE, nrow = numreact, ncol = 1, sparse = TRUE)
}
else {
subSys <- subSys[SKIP_REACTION]
genes <- genes[SKIP_REACTION]
rules <- rules[SKIP_REACTION]
gpr <- gpr[SKIP_REACTION]
# if there were fbcgprRules or notes with gpr rules,
# create reaction x nGene matrix, with TRUE for respective genes for each reaction
if (isTRUE(hasNotes) || !is.null(fbcgprRules) ) {
message("GPR mapping ... ", appendLF = FALSE)
# Vector with all gene names != "":
#allGenes <- unique(allGenes)
#allGenesTMP <- unique(allGenes)
allGenesTMP <- unique(unlist(genes))
temp <- nchar(allGenesTMP)
allGenes <- allGenesTMP[which(temp != 0)]
rxnGeneMat <- Matrix::Matrix(FALSE,
nrow = numreact,
ncol = length(allGenes),
sparse = TRUE)
for (i in 1 : numreact) {
# if genes list element i has only 1 element and that element is not equal ""
if ( (length(genes[[i]] == 1)) && (genes[[i]] != "") ) {
geneInd <- match(genes[[i]], allGenes)
geneInd <- match(genes[[i]], allGenes)# find gene in allGenes
# Mark which genes are used in reaction with TRUE
rxnGeneMat[i, geneInd] <- TRUE
# exchange x(j) with x[j] for each gene index:
for (j in 1 : length(geneInd)) {
pat <- paste("x(", j, ")", sep = "")
repl <- paste("x[", geneInd[j], "]", sep = "")
......@@ -961,6 +1005,7 @@ else {
}
}
#
sybil::genes(mod) <- genes
sybil::gpr(mod) <- gpr
sybil::allGenes(mod) <- allGenes
......@@ -979,13 +1024,15 @@ else {
message("OK")
}
else {
else {# no notes and no fbcgprRules:
sybil::rxnGeneMat(mod) <- Matrix::Matrix(NA, nrow = 0, ncol = 0)
if (isTRUE(hasAnnot)) {
# then we extracted the subsystem from annotation, so set it:
#subSys(sbml) <- subSys
sybil::subSys(mod) <- sybil:::.prepareSubSysMatrix(subSys, numreact)
}
else {
# No subsystems:
sybil::subSys(mod) <- Matrix::Matrix(FALSE,
nrow = numreact,
ncol = 1,
......@@ -1050,6 +1097,7 @@ if(newSybil)
#------------------------------------------------------------------------------#
if(!is.null(subSysGroups)){
# sub system groups for each reaction from subSysGroups:
subSysMat <- Matrix::Matrix(FALSE, nrow = numreact, ncol = length(subSysGroups), sparse = TRUE)
colnames(subSysMat) <- names(subSysGroups)
......@@ -1072,6 +1120,7 @@ modanno<-getSBMLmodAnnotation(sbmlmod)
modnotes<-getSBMLmodNotes(sbmlmod)
if(newSybil)
{
# set model annotation and notes:
sybil::mod_attr(mod) <-data.frame(row.names=1)
if(nchar(modanno)>1)sybil::mod_attr(mod)[['annotation']]<-modanno
if(nchar(modnotes)>1)sybil::mod_attr(mod)[['notes']]<-modnotes
......@@ -1082,6 +1131,7 @@ if(newSybil)
#------------------------------------------------------------------------------#
# compartments Attr @Ardalan #
#------------------------------------------------------------------------------#
# set comp_attr slot for model with 'annotation' and 'notes' from values in compartmentsList:
# Define SKIP_COMPARTMENT FALSE= HAS NO REFERENCE
met_comp_tmp <- metabolitesList[["compartment"]][met_id_pos][SKIP_METABOLITE]
SKIP_COMPARTMENT<- comp_tmp_id %in% unique(met_comp_tmp)
......@@ -1165,29 +1215,38 @@ if(newSybil)
# save attributes to met_attr slot
sybil::met_attr(mod) <-data.frame(row.names=1:nummet)
if( !is.null(metformula) && length(metformula)==nummet)
{sybil::met_attr(mod)[['chemicalFormula']]<-metformula}
{
sybil::met_attr(mod)[['chemicalFormula']]<-metformula
}
else{
if(length(metformulanote)==nummet)
{ if(max(nchar(metformulanote)) >0)
sybil::met_attr(mod)[['chemicalFormula']]<-metformulanote
{
if(max(nchar(metformulanote)) >0)
sybil::met_attr(mod)[['chemicalFormula']]<-metformulanote
}
}
if( !is.null(metcharge) && length(metcharge)==nummet && sum(metcharge)!=0)
{sybil::met_attr(mod)[['charge']]<-metcharge}
{
sybil::met_attr(mod)[['charge']]<-metcharge
}
else{
if( length(metchargenote)==nummet)
{ if(max(nchar(metchargenote)) >0)
sybil::met_attr(mod)[['charge']]<-metchargenote
{
if(max(nchar(metchargenote)) >0)
sybil::met_attr(mod)[['charge']]<-metchargenote
}
}
if( !is.null(metnotes) && length(metnotes)==nummet)sybil::met_attr(mod)[['notes']]<-metnotes
if( !is.null(metannotation) && length(metannotation)==nummet)sybil::met_attr(mod)[['annotation']]<-metannotation
if( !is.null(metnotes) && length(metnotes)==nummet)
sybil::met_attr(mod)[['notes']]<-metnotes
if( !is.null(metannotation) && length(metannotation)==nummet)
sybil::met_attr(mod)[['annotation']]<-metannotation
# Save boundaryCondition when bndCond=FALSE
if (!isTRUE(bndCond)) {
metBnd <- metabolitesList[["boundaryCondition"]][met_id_pos][SKIP_METABOLITE]
# When all metBnd = False -> metabolite removed by extMetFlag
if( !is.null(metBnd) && length(metBnd)==nummet && !all(metBnd == FALSE) )sybil::met_attr(mod)[['boundaryCondition']]<-metBnd
if( !is.null(metBnd) && length(metBnd)==nummet && !all(metBnd == FALSE) )
sybil::met_attr(mod)[['boundaryCondition']]<-metBnd
}
......
......@@ -60,7 +60,7 @@ setMethod(f = "initialize",
)
# contructor for pointers to sbml documents
# constructor for pointers to sbml documents
sbmlDocPointer <- function(pointer) {
if (is(pointer, "sbml_doc_ptr")) {
......
......@@ -346,6 +346,16 @@ writeSBML<- function(morg=NULL,level=2,version=4,fbcLevel=0,filename="export.xml
stop("morg has to be of class modelorg\n")
}
# warning, if FBC plugin is missing:
if (isAvailableFbcPlugin() == FALSE) {
warning("Missing FBC-plugin for libSBML. No SBML output will be written.")
}
# warning, if Groups plugin is missing:
if (isAvailableGroupsPlugin() == FALSE) {
warning("Missing Groups-plugin for libSBML. No SBML output will be written.")
}
###right
if(level==1)
{
......@@ -643,3 +653,27 @@ writeSBML<- function(morg=NULL,level=2,version=4,fbcLevel=0,filename="export.xml
else message(paste("Could not write file ",filename,"\n",sep=""), appendLF = FALSE);
return (success)
}
#------------------------------------------------------------------------------#
isAvailableFbcPlugin <- function() {
avail <- .Call("isAvailableFbcPlugin", PACKAGE = "sybilSBML"
)
return(avail)
}
#------------------------------------------------------------------------------#
isAvailableGroupsPlugin <- function() {
avail <- .Call("isAvailableGroupsPlugin", PACKAGE = "sybilSBML"
)
return(avail)
}
No preview for this file type
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for sybilSBML 3.0.6.
# Generated by GNU Autoconf 2.69 for sybilSBML 3.0.7.
#
# Report bugs to <mayo.roettger@hhu.de>.
#
......@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='sybilSBML'
PACKAGE_TARNAME='sybilsbml'
PACKAGE_VERSION='3.0.6'
PACKAGE_STRING='sybilSBML 3.0.6'
PACKAGE_VERSION='3.0.7'
PACKAGE_STRING='sybilSBML 3.0.7'
PACKAGE_BUGREPORT='mayo.roettger@hhu.de'
PACKAGE_URL=''
......@@ -1241,7 +1241,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures sybilSBML 3.0.6 to adapt to many kinds of systems.
\`configure' configures sybilSBML 3.0.7 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
......@@ -1303,7 +1303,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of sybilSBML 3.0.6:";;
short | recursive ) echo "Configuration of sybilSBML 3.0.7:";;
esac
cat <<\_ACEOF
......@@ -1390,7 +1390,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
sybilSBML configure 3.0.6
sybilSBML configure 3.0.7
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
......@@ -1759,7 +1759,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by sybilSBML $as_me 3.0.6, which was
It was created by sybilSBML $as_me 3.0.7, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
......@@ -3050,6 +3050,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_config_headers="$ac_config_headers src/config.h"
......@@ -3655,26 +3657,44 @@ else
fi
ac_fn_c_check_header_compile "$LINENO" "sbml/packages/fbc/common/FbcExtensionTypes.h" "ac_cv_header_sbml_packages_fbc_common_FbcExtensionTypes_h" "#include <sbml/SBMLTypes.h>
for ac_header in sbml/packages/fbc/common/FbcExtensionTypes.h
do :
ac_fn_c_check_header_compile "$LINENO" "sbml/packages/fbc/common/FbcExtensionTypes.h" "ac_cv_header_sbml_packages_fbc_common_FbcExtensionTypes_h" "#include <sbml/SBMLTypes.h>
"
if test "x$ac_cv_header_sbml_packages_fbc_common_FbcExtensionTypes_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_SBML_PACKAGES_FBC_COMMON_FBCEXTENSIONTYPES_H 1
_ACEOF
else
as_fn_error $? "Could not find specific FBC header of libSBML:
make sure your libSBML version is >= 5.16 and including the FBC package." "$LINENO" 5
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find specific FBC header of libSBML:
make sure your libSBML version is >= 5.18 and including the FBC package." >&5
$as_echo "$as_me: WARNING: Could not find specific FBC header of libSBML:
make sure your libSBML version is >= 5.18 and including the FBC package." >&2;}
fi
done
ac_fn_c_check_header_compile "$LINENO" "sbml/packages/groups/common/GroupsExtensionTypes.h" "ac_cv_header_sbml_packages_groups_common_GroupsExtensionTypes_h" "#include <sbml/SBMLTypes.h>
for ac_header in sbml/packages/groups/common/GroupsExtensionTypes.h
do :
ac_fn_c_check_header_compile "$LINENO" "sbml/packages/groups/common/GroupsExtensionTypes.h" "ac_cv_header_sbml_packages_groups_common_GroupsExtensionTypes_h" "#include <sbml/SBMLTypes.h>
"
if test "x$ac_cv_header_sbml_packages_groups_common_GroupsExtensionTypes_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_SBML_PACKAGES_GROUPS_COMMON_GROUPSEXTENSIONTYPES_H 1
_ACEOF
$as_echo "#define HAVE_GROUPS_PLUGIN 1" >>confdefs.h
else
as_fn_error $? "Could not find specific groups package header of libSBML:
make sure your libSBML version is >= 5.16 and including the groups package." "$LINENO" 5
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find specific groups package header of libSBML:
make sure your libSBML version is >= 5.18 and including the groups package." >&5