project(uppaal)
include(ExternalProject)

# prerequisites for building the uppaal libraries
find_package(BISON REQUIRED)
find_package(FLEX REQUIRED)
#find_package(GPERF REQUIRED)
find_package(PkgConfig)
pkg_search_module(LIBXML2 REQUIRED libxml-2.0>=2.6.10)

# compile setting for the uppaal libraries
set(CXXFLAGS "-O3 -DNDEBUG")
set(CFLAGS "-O3 -DNDEBUG")

# UTAP uppaal's timed automata parser library
ExternalProject_Add(libutap
  URL ${uppaal_SOURCE_DIR}/libutap-0.91.tar.gz
  INSTALL_DIR ${uppaal_BINARY_DIR}
  PATCH_COMMAND patch -p1 -i ${uppaal_SOURCE_DIR}/libutap-0.91.patch
  CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> CXXFLAGS=${CXXFLAGS} CFLAGS=${CFLAGS}
  BUILD_COMMAND make
  INSTALL_COMMAND make install
  BUILD_IN_SOURCE 1
)
set(UTAP_INCLUDE_DIR ${uppaal_BINARY_DIR}/include PARENT_SCOPE)
if(WIN32)
  set(UTAP_LIBRARY "${uppaal_BINARY_DIR}/lib/utap.lib" PARENT_SCOPE)
elseif(APPLE)
  set(UTAP_LIBRARY "${uppaal_BINARY_DIR}/lib/libutap.a" PARENT_SCOPE)
else()
  set(UTAP_LIBRARY "${uppaal_BINARY_DIR}/lib/libutap.a" PARENT_SCOPE)
endif()

# UDBM Uppaal's DBM library (2.0.8)
ExternalProject_Add(libudbm
  URL ${uppaal_SOURCE_DIR}/UPPAAL-dbm-2.0.8.tgz
  INSTALL_DIR ${uppaal_BINARY_DIR}
  CONFIGURE_COMMAND cd <SOURCE_DIR>/modules && ./configure --prefix=<INSTALL_DIR> CXXFLAGS=${CXXFLAGS} CFLAGS=${CFLAGS} AR=ar STRIP=strip
  BUILD_COMMAND make -C <SOURCE_DIR>/modules
  INSTALL_COMMAND make -C <SOURCE_DIR>/modules install
)

# UDBM Uppaal's DBM library (2.0.7)
# ExternalProject_Add(libudbm
#   URL ${uppaal_SOURCE_DIR}/UPPAAL-dbm-2.0.7.tgz
#   INSTALL_DIR ${uppaal_BINARY_DIR}
#   PATCH_COMMAND patch -p1 -i ${uppaal_SOURCE_DIR}/UPPAAL-dbm-2.0.7.patch
#   CONFIGURE_COMMAND cd <SOURCE_DIR>/modules && configure --prefix=<INSTALL_DIR> CXXFLAGS=${CXXFLAGS} CFLAGS=${CFLAGS} AR=ar STRIP=strip
#   BUILD_COMMAND make -C <SOURCE_DIR>/modules
#   INSTALL_COMMAND make -C <SOURCE_DIR>/modules install
# )


set(UDBM_INCLUDE_DIR ${uppaal_BINARY_DIR}/uppaal/include PARENT_SCOPE)
if(WIN32)
  set(UDBM_LIBRARY "${uppaal_BINARY_DIR}/uppaal/lib/udbm.lib" PARENT_SCOPE)
elseif(APPLE)
  set(UDBM_LIBRARY "${uppaal_BINARY_DIR}/uppaal/lib/libudbm.a" PARENT_SCOPE)
else()
  set(UDBM_LIBRARY "${uppaal_BINARY_DIR}/uppaal/lib/libudbm.a" PARENT_SCOPE)
endif()
