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})
|
|
|
|
|
|
2018-12-12 19:33:21 +00:00
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
2016-09-18 17:43:04 +01:00
|
|
|
##############################
|
|
|
|
|
# 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-12-12 19:59:14 +00:00
|
|
|
set(PYBIND11_VERSION "2.2.4")
|
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
|
|
|
|
|
#######################################
|
|
|
|
|
|
2017-10-17 20:34:15 +01:00
|
|
|
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
2018-12-13 08:05:01 +00:00
|
|
|
if (NOT "${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
|
2019-01-27 14:51:36 +00:00
|
|
|
set(LIBLOOT_URL "https://github.com/loot/libloot/releases/download/0.14.3/libloot-0.14.3-0-g56d8f78_dev-win32.7z")
|
2018-12-13 08:05:01 +00:00
|
|
|
else()
|
2019-01-27 14:51:36 +00:00
|
|
|
set(LIBLOOT_URL "https://github.com/loot/libloot/releases/download/0.14.3/libloot-0.14.3-0-g56d8f78_dev-win64.7z")
|
2018-12-13 08:05:01 +00:00
|
|
|
endif()
|
2017-10-17 20:34:15 +01:00
|
|
|
else()
|
2019-01-27 14:51:36 +00:00
|
|
|
set(LIBLOOT_URL "https://github.com/loot/libloot/releases/download/0.14.3/libloot.tar.xz")
|
2017-10-17 20:34:15 +01:00
|
|
|
endif()
|
2016-09-18 20:24:04 +01:00
|
|
|
|
2018-12-12 19:33:21 +00:00
|
|
|
ExternalProject_Add(libloot
|
2016-09-18 17:00:49 +01:00
|
|
|
PREFIX "external"
|
2018-12-12 19:33:21 +00:00
|
|
|
URL ${LIBLOOT_URL}
|
2016-09-18 17:00:49 +01:00
|
|
|
CONFIGURE_COMMAND ""
|
|
|
|
|
BUILD_COMMAND ""
|
|
|
|
|
INSTALL_COMMAND "")
|
2018-12-12 19:33:21 +00:00
|
|
|
ExternalProject_Get_Property(libloot SOURCE_DIR)
|
|
|
|
|
set(LIBLOOT_EXTRACTED_PATH ${SOURCE_DIR})
|
2016-08-07 21:23:23 +01:00
|
|
|
|
2016-09-18 17:43:04 +01:00
|
|
|
include_directories("${CMAKE_SOURCE_DIR}/src"
|
2018-12-12 19:33:21 +00:00
|
|
|
"${LIBLOOT_EXTRACTED_PATH}/include")
|
|
|
|
|
link_directories(${LIBLOOT_EXTRACTED_PATH})
|
|
|
|
|
set(LIBLOOT_STATIC_LIBRARY "${CMAKE_STATIC_LIBRARY_PREFIX}loot${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
|
|
|
|
set(LIBLOOT_SHARED_LIBRARY "${CMAKE_SHARED_LIBRARY_PREFIX}loot${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
2016-08-10 19:03:50 +01:00
|
|
|
|
|
|
|
|
#######################################
|
|
|
|
|
# Test Masterlist
|
|
|
|
|
#######################################
|
|
|
|
|
|
2016-09-18 17:00:49 +01:00
|
|
|
ExternalProject_Add(test-masterlist
|
|
|
|
|
PREFIX "external"
|
2018-12-12 19:57:34 +00:00
|
|
|
URL "https://github.com/loot/oblivion/archive/7f125ae4464224ff785111c7667c2cff85c896ec.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
|
|
|
|
2018-12-12 19:33:21 +00:00
|
|
|
add_dependencies(loot_api libloot test-masterlist)
|
2016-09-18 20:24:04 +01:00
|
|
|
|
|
|
|
|
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
2018-12-12 19:33:21 +00:00
|
|
|
target_link_libraries(loot_api PRIVATE ${LIBLOOT_STATIC_LIBRARY})
|
2016-09-18 20:24:04 +01:00
|
|
|
else()
|
2018-12-12 19:33:21 +00:00
|
|
|
target_link_libraries(loot_api PRIVATE ${LIBLOOT_SHARED_LIBRARY})
|
2016-09-18 20:24:04 +01:00
|
|
|
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
|
2018-12-12 19:33:21 +00:00
|
|
|
"${LIBLOOT_EXTRACTED_PATH}/${LIBLOOT_SHARED_LIBRARY}"
|
|
|
|
|
"$<TARGET_FILE_DIR:loot_api>/${LIBLOOT_SHARED_LIBRARY}")
|
2016-08-10 19:03:50 +01:00
|
|
|
|
|
|
|
|
# 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
|
|
|
|
2018-12-12 19:33:21 +00:00
|
|
|
install(FILES "${LIBLOOT_EXTRACTED_PATH}/${LIBLOOT_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()
|
|
|
|
|
|
2018-12-13 08:12:04 +00:00
|
|
|
set(CPACK_PACKAGE_VERSION "${GIT_DESCRIBE_STRING}-python$ENV{PYTHON_VERSION}")
|
2016-08-13 14:00:05 +01:00
|
|
|
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/package")
|
|
|
|
|
|
|
|
|
|
include(CPack)
|