Skip to content

Commit

Permalink
Merge pull request #5 from sys-bio/enable-azure-build
Browse files Browse the repository at this point in the history
Enable builds on azure.
  • Loading branch information
luciansmith authored Mar 7, 2023
2 parents a07d429 + 8d35057 commit f14ffbf
Show file tree
Hide file tree
Showing 32 changed files with 1,775 additions and 837 deletions.
85 changes: 85 additions & 0 deletions .azurepipelines/getCheck.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
"""
Get check from url.
Usage:
python getCheck.py <check_download_link> <check_install_prefix?
For example:
python getcheck.py https://github.com/sys-bio/check-13.x/releases/download/checkorg-13.0.0/check13-ubuntu-gcc10-rel.tar.gz /mnt/d/roadrunner/roadrunner/check-download-test/ubuntu
"""


import glob
import argparse
import os
from os.path import join, splitext, isdir, isfile
import zipfile
import tarfile
import requests
import io
import shutil

# command line arguments
parser = argparse.ArgumentParser()
parser.add_argument("check_download_link", type=str, help="Url to compressed check link to download")
parser.add_argument("check_install_prefix", type=str, help="Where to install check (directory that will contain bin, include, lib etc")
args = parser.parse_args()

# filename of downloaded zip, check-[debug|release].zip
compressed_check_filename = args.check_download_link.split('/')[-1]

# absolute path to compressed_check_filename
abs_compressed_check_filename = join(args.check_install_prefix, compressed_check_filename)

# e.g. ('check--[debug|release]', '.zip')
downloaded_check_folder, ext = splitext(compressed_check_filename)
# when link is tar.gz, get rid of extra .tar
if ".tar" in downloaded_check_folder:
downloaded_check_folder = downloaded_check_folder.replace(".tar", "")

# make install prefix if not exists
if not isdir(args.check_install_prefix):
os.makedirs(args.check_install_prefix)

print("compressed_check_filename".ljust(20), compressed_check_filename)
print("abs_compressed_check_filename".ljust(20), abs_compressed_check_filename)
print("downloaded_check_folder".ljust(20), downloaded_check_folder)
print("args.check_download_link".ljust(20), args.check_download_link)
print("downloaded_check_folder, ext".ljust(20), downloaded_check_folder, ext)

# we expect a folder called bin in
abs_downloaded_check_folder = join(args.check_install_prefix, downloaded_check_folder)

# Don't download if we already have it
if not isdir(join(abs_downloaded_check_folder, "bin")):
print("downloading check from {}".format(args.check_download_link))
r = requests.get(args.check_download_link, stream=True)
if ext == ".zip":
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall(args.check_install_prefix)
elif ext == ".gz":
z = tarfile.open(fileobj=r.raw, mode="r|gz")
z.extractall(args.check_install_prefix)
else:
raise ValueError("Unsupported extension")
else :
print("Found existing check, not downloading check")

# move from unzip dir to check_install_prefix
folders = glob.glob(join(abs_downloaded_check_folder, "*"))
print(folders)
for f in folders:
shutil.move(f, args.check_install_prefix)


if isfile(abs_compressed_check_filename):
os.remove(abs_compressed_check_filename)






34 changes: 34 additions & 0 deletions .azurepipelines/renameWheel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""
Finds and renames the local phraSED-ML wheel file to work with any Python version.
Usage:
python renameWheel.py
For example:
python renameWheel.py
"""


from os import walk, rename

wfiles = []
for __, _, files in walk("."):
wfiles += files

for file in wfiles:
if ".whl" not in file:
continue
fvec = file.split("-")
fvec[2] = "py3"
fvec[3] = "none"
if "linux_" in fvec[4]:
fvec[4] = fvec[4].replace("linux_", "manylinux2014_")
newname = ""
for fpart in fvec:
newname += "-" + fpart
newname = newname[1:]
rename(file, newname)

62 changes: 51 additions & 11 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# CMake Build Script for libphrasedml
#

cmake_minimum_required(VERSION 2.8)
cmake_minimum_required(VERSION 3.0)
project(libphrasedml)

####################################################################
Expand Down Expand Up @@ -50,9 +50,10 @@ option(WITH_PYTHON "Generate Python language bindings." OFF)
option(WITH_EXAMPLES "Generate example programs, including translator." ON)
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: None (CMAKE_CXX_FLAGS or CMAKE_C_FLAGS are used), Debug, Release, RelWithDebInfo, MinSizeRel" )
if (WITH_PYTHON)
option(PYTHON_SYSTEM_INSTALL "Install the python bindings using setup.py and distutils. May require admin privileges." ON )
option(PYTHON_LOCAL_INSTALL "Install the python bindings in ${CMAKE_INSTALL_PREFIX}/bindings/python/. Will probably require the use of PYTHONPATH." OFF )
option(WITH_CONDA_BUILDER "Install files required to build Anaconda packages" OFF)
option(PYTHON_SYSTEM_INSTALL "Install the python bindings using setup.py and distutils. May require admin privileges." OFF )
option(PYTHON_LOCAL_INSTALL "Install the python bindings in ${CMAKE_INSTALL_PREFIX}/bindings/python/. Will probably require the use of PYTHONPATH." ON )
# There's no conda builder for phrasedml.
# option(WITH_CONDA_BUILDER "Install files required to build Anaconda packages" OFF)
option(WITH_PYTHON_EXAMPLES "Install Python example files" OFF)
endif()

Expand Down Expand Up @@ -119,10 +120,14 @@ if (WIN32)
set(SBML_TARGET_NAME "libsbml-static")
set(SEDML_TARGET_NAME "libsedml-static")
set(NUML_TARGET_NAME "libnuml-static")
set(NUML_TARGET_NAME_NS "libnuml")
set(SBML_TARGET_NAME_NS "libsbml")
else ()
set(SBML_TARGET_NAME "sbml-static")
set(SEDML_TARGET_NAME "sedml-static")
set(NUML_TARGET_NAME "numl-static")
set(NUML_TARGET_NAME_NS "numl")
set(SBML_TARGET_NAME_NS "sbml")
endif (WIN32)


Expand All @@ -132,7 +137,7 @@ find_package(zlib CONFIG REQUIRED)
#find_package(bzip2 CONFIG REQUIRED)
#find_package(iconv CONFIG REQUIRED)

find_package(expat CONFIG REQUIRED)
find_package(EXPAT CONFIG REQUIRED)

## https://stackoverflow.com/questions/32183975/how-to-print-all-the-properties-of-a-target-in-cmake/56738858#56738858
## https://stackoverflow.com/a/56738858/3743145
Expand Down Expand Up @@ -204,11 +209,45 @@ if(NOT TARGET zlibstatic)
INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIR}")
endif()


find_package(${SBML_TARGET_NAME} CONFIG REQUIRED)
find_package(${SEDML_TARGET_NAME} CONFIG REQUIRED)

#Tell libnuml and libsedml not to look for libsbml on their own (since we install the static but not the dynamic versions):
set(VERBOSE ON)
set(FIND_LIBSBML CACHE BOOL "Look for the shared version of libsbml (should be OFF if using libroadrunner-deps" FORCE)
set(FIND_LIBNUML CACHE BOOL "Look for the shared version of libnuml (should be OFF if using libroadrunner-deps" FORCE)


# Now fool sedml into thinking libsbml-static is libsbml.
get_target_property(SBML_INCLUDE_DIR ${SBML_TARGET_NAME} INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(SBML_LIBRARY ${SBML_TARGET_NAME} LOCATION)

if(NOT TARGET ${SBML_TARGET_NAME_NS})
add_library(${SBML_TARGET_NAME_NS} UNKNOWN IMPORTED)
set_target_properties(${SBML_TARGET_NAME} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${SBML_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${SBML_INCLUDE_DIR}")
endif()

set(LIBSBML_LIBRARY ${SBML_LIBRARY})
set(LIBSBML_INCLUDE_DIR ${SBML_INCLUDE_DIR})

find_package(${NUML_TARGET_NAME} CONFIG REQUIRED)

#Now we need to fool sedml into thinking libnuml-static is libnuml.
get_target_property(NUML_INCLUDE_DIR ${NUML_TARGET_NAME} INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(NUML_LIBRARY ${NUML_TARGET_NAME} LOCATION)

if(NOT TARGET ${NUML_TARGET_NAME_NS})
add_library(${NUML_TARGET_NAME_NS} UNKNOWN IMPORTED)
set_target_properties(${NUML_TARGET_NAME} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${NUML_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${NUML_INCLUDE_DIR}")
endif()

find_package(${SEDML_TARGET_NAME} CONFIG REQUIRED)


set(LIBPHRASEDML_LIBS ${LIBPHRASEDML_LIBS} ${SBML_TARGET_NAME} )
set(LIBPHRASEDML_LIBS ${LIBPHRASEDML_LIBS} ${SEDML_TARGET_NAME} )
Expand Down Expand Up @@ -335,16 +374,17 @@ file(GLOB LIBPHRASEDML_HEADERS

##### Build the main library #####
add_library(${LIBPHRASEDML_LIBRARY} ${LIBPHRASEDML_HEADERS} ${LIBPHRASEDML_SOURCES})
if (WIN32 AND NOT CYGWIN)
# don't decorate static library
set_target_properties(${LIBPHRASEDML_LIBRARY} PROPERTIES COMPILE_DEFINITIONS "LIBLAX_STATIC=1;LIBSEDML_STATIC=1;LIBNUML_STATIC=1;LIBSBML_STATIC=1")
endif(WIN32 AND NOT CYGWIN)

target_link_libraries(${LIBPHRASEDML_LIBRARY} ${LIBPHRASEDML_LIBS})
# message(STATUS " Target link libraries = ${LIBPHRASEDML_LIBS}")
add_definitions(-DLIB_EXPORTS)
install(TARGETS ${LIBPHRASEDML_LIBRARY} DESTINATION lib)
install(FILES ${LIBPHRASEDML_HEADERS} DESTINATION include)

if (WIN32 AND NOT CYGWIN)
# don't decorate static library
set_target_properties(${LIBPHRASEDML_LIBRARY} PROPERTIES COMPILE_DEFINITIONS "LIBLAX_STATIC=1;LIBSEDML_STATIC=1;LIBSBML_STATIC=1")
endif(WIN32 AND NOT CYGWIN)

if (NOT UNIX)
add_definitions(-DWIN32 -DLIBSBML_EXPORTS -DLIBLAX_EXPORTS)
Expand Down
Loading

0 comments on commit f14ffbf

Please sign in to comment.