Files
libloot-python/CMakeLists.txt
T

178 lines
5.9 KiB
CMake
Raw Normal View History

2016-08-07 21:23:23 +01:00
cmake_minimum_required (VERSION 2.8.12)
project (loot_api_python)
include(ExternalProject)
set(EXTERNAL_PROJECTS_PATH "${CMAKE_BINARY_DIR}/external/src")
make_directory(${EXTERNAL_PROJECTS_PATH})
##############################
# Get Build Revision
##############################
find_package(Git)
IF (GIT_FOUND)
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT_STRING
OUTPUT_STRIP_TRAILING_WHITESPACE)
ELSE()
SET (GIT_COMMIT_STRING "unknown")
ENDIF ()
message(STATUS "Git revision: ${GIT_COMMIT_STRING}")
# Write to file.
configure_file("${CMAKE_SOURCE_DIR}/src/wrapper_version.cpp.in" "${CMAKE_BINARY_DIR}/generated/wrapper_version.cpp" @ONLY)
2016-08-07 21:23:23 +01:00
#######################################
# pybind11
#######################################
2018-05-11 22:47:26 +01:00
set(PYBIND11_VERSION "2.1.1")
2017-10-17 19:57:42 +01:00
set(PYBIND11_URL "https://github.com/pybind/pybind11/archive/v${PYBIND11_VERSION}.tar.gz")
set(PYBIND11_DOWNLOAD_PATH "${EXTERNAL_PROJECTS_PATH}/pybind11-${PYBIND11_VERSION}.tar.gz")
set(PYBIND11_EXTRACTED_PATH "${EXTERNAL_PROJECTS_PATH}/pybind11-${PYBIND11_VERSION}")
2016-08-07 21:23:23 +01:00
if (NOT EXISTS ${PYBIND11_DOWNLOAD_PATH})
file(DOWNLOAD ${PYBIND11_URL} ${PYBIND11_DOWNLOAD_PATH})
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz ${PYBIND11_DOWNLOAD_PATH}
WORKING_DIRECTORY ${EXTERNAL_PROJECTS_PATH}
RESULT_VARIABLE result)
add_subdirectory(${PYBIND11_EXTRACTED_PATH})
#######################################
# LOOT API
#######################################
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
2018-05-02 17:55:54 +01:00
set(LOOT_API_URL "https://github.com/loot/loot-api/releases/download/0.13.2/loot_api-0.13.2-0-g5956e60_dev-win32.7z")
else()
2018-05-02 17:55:54 +01:00
set(LOOT_API_URL "https://github.com/loot/loot-api/releases/download/0.13.2/loot-api.tar.xz")
endif()
2016-09-18 20:24:04 +01:00
2016-09-18 17:00:49 +01:00
ExternalProject_Add(loot-api-c++
PREFIX "external"
URL ${LOOT_API_URL}
2016-09-18 17:00:49 +01:00
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND "")
ExternalProject_Get_Property(loot-api-c++ SOURCE_DIR)
set(LOOT_API_EXTRACTED_PATH ${SOURCE_DIR})
2016-08-07 21:23:23 +01:00
include_directories("${CMAKE_SOURCE_DIR}/src"
"${LOOT_API_EXTRACTED_PATH}/include")
2016-08-07 21:23:23 +01:00
link_directories(${LOOT_API_EXTRACTED_PATH})
2016-08-10 19:03:50 +01:00
set(LOOT_API_STATIC_LIBRARY "${CMAKE_STATIC_LIBRARY_PREFIX}loot_api${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(LOOT_API_SHARED_LIBRARY "${CMAKE_SHARED_LIBRARY_PREFIX}loot_api${CMAKE_SHARED_LIBRARY_SUFFIX}")
#######################################
# Test Masterlist
#######################################
2016-09-18 17:00:49 +01:00
ExternalProject_Add(test-masterlist
PREFIX "external"
2016-11-06 14:48:04 +00:00
URL "https://github.com/loot/oblivion/archive/09286601739c11a3a3e4552c6ddbdcaeffd1a8d3.zip"
2016-09-18 17:00:49 +01:00
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND "")
2016-08-07 21:23:23 +01:00
#######################################
# Python Module
#######################################
2017-03-25 13:50:40 +00:00
pybind11_add_module(loot_api "${CMAKE_SOURCE_DIR}/src/main.cpp"
"${CMAKE_SOURCE_DIR}/src/convenience.cpp"
"${CMAKE_BINARY_DIR}/generated/wrapper_version.cpp")
2016-08-07 21:23:23 +01:00
2016-09-18 17:00:49 +01:00
add_dependencies(loot_api loot-api-c++ test-masterlist)
2016-09-18 20:24:04 +01:00
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
target_link_libraries(loot_api PRIVATE ${LOOT_API_STATIC_LIBRARY})
else()
target_link_libraries(loot_api PRIVATE ${LOOT_API_SHARED_LIBRARY})
endif()
2016-08-07 21:23:23 +01:00
2016-08-13 13:53:28 +01:00
########################################
# Testing
########################################
find_package(PythonInterp REQUIRED)
2016-08-10 19:03:50 +01:00
# Copy the API binary to the build directory.
add_custom_command(TARGET loot_api POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${LOOT_API_EXTRACTED_PATH}/${LOOT_API_SHARED_LIBRARY}"
"$<TARGET_FILE_DIR:loot_api>/${LOOT_API_SHARED_LIBRARY}")
# Copy the test masterlist to the build directory.
2016-09-18 17:00:49 +01:00
ExternalProject_Get_Property(test-masterlist SOURCE_DIR)
2016-08-10 19:03:50 +01:00
add_custom_command(TARGET loot_api POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
2016-09-18 17:00:49 +01:00
"${SOURCE_DIR}/masterlist.yaml"
2016-08-10 19:03:50 +01:00
"$<TARGET_FILE_DIR:loot_api>/masterlist.yaml")
# Also copy the test Python script to the build directory.
add_custom_command(TARGET loot_api POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/src/test.py"
"$<TARGET_FILE_DIR:loot_api>/test.py")
2016-08-13 13:53:28 +01:00
2016-08-13 14:00:05 +01:00
########################################
# Install
########################################
install(TARGETS loot_api
2016-08-15 20:51:24 +01:00
DESTINATION "."
2018-05-02 11:38:25 +01:00
CONFIGURATIONS Release RelWithDebInfo)
2016-08-13 14:00:05 +01:00
install(FILES "${LOOT_API_EXTRACTED_PATH}/${LOOT_API_SHARED_LIBRARY}"
2016-08-15 20:51:24 +01:00
"${CMAKE_SOURCE_DIR}/docs/README.md"
DESTINATION "."
2018-05-02 11:38:25 +01:00
CONFIGURATIONS Release RelWithDebInfo)
IF (MSVC)
install(FILES $<TARGET_PDB_FILE:loot_api>
DESTINATION .
OPTIONAL
CONFIGURATIONS RelWithDebInfo
RENAME loot_api_python.pdb)
ENDIF ()
2016-08-13 14:00:05 +01:00
########################################
# CPack
########################################
# Get version info using Git if available
find_package(Git)
IF (GIT_FOUND)
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --long --always
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_DESCRIBE_STRING
OUTPUT_STRIP_TRAILING_WHITESPACE)
2016-08-13 14:30:29 +01:00
2016-11-14 08:00:37 +00:00
IF (DEFINED ENV{APPVEYOR_REPO_BRANCH})
set(GIT_DESCRIBE_STRING "${GIT_DESCRIBE_STRING}_$ENV{APPVEYOR_REPO_BRANCH}")
ELSEIF (DEFINED ENV{TRAVIS_BRANCH})
set(GIT_DESCRIBE_STRING "${GIT_DESCRIBE_STRING}_$ENV{TRAVIS_BRANCH}")
2016-08-13 14:30:29 +01:00
ENDIF()
2016-08-13 14:00:05 +01:00
ELSE()
SET (GIT_DESCRIBE_STRING "unknown-version")
ENDIF ()
2016-09-18 20:24:04 +01:00
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
set(CPACK_GENERATOR "7Z")
else()
set(CPACK_GENERATOR "TXZ")
endif()
2016-08-13 14:00:05 +01:00
set(CPACK_PACKAGE_VERSION ${GIT_DESCRIBE_STRING})
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/package")
include(CPack)