diff --git a/.gitignore b/.gitignore index ab417997..efd50b2e 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ build-* .DS_Store .idea .vscode +__pycache__ /ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailExtension/bin /ide_plugins/vs/vs2015/SourcetrailPlugin/SourcetrailExtension/obj diff --git a/CMakeLists.txt b/CMakeLists.txt index 9658f0f0..48e96cec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -482,10 +482,38 @@ else() endif() + +string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR}) +string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) + # Lib Python --------------------------------------------------------------------- if (BUILD_PYTHON_LANGUAGE_PACKAGE) + file (STRINGS "${CMAKE_SOURCE_DIR}/submodules/SourcetrailPythonIndexer/SourcetrailDB/version.txt" VERSION_STRING) + + string(REGEX REPLACE "v([0-9]+)\\..*" "\\1" INTERFACE_VERSION "${VERSION_STRING}") + string(REGEX REPLACE "v[0-9]+\\.db([0-9]+)\\..*" "\\1" DATABASE_VERSION "${VERSION_STRING}") + string(REGEX REPLACE "v[0-9]+\\.db[0-9]+\\.p([0-9]+).*" "\\1" PATCH_VERSION "${VERSION_STRING}") + set(VERSION_STRING_UNDERSCORE "v${INTERFACE_VERSION}_db${DATABASE_VERSION}_p${PATCH_VERSION}") + + message(STATUS "SourcetrailDB Version: ${VERSION_STRING}") + message(STATUS "Interface Version: ${INTERFACE_VERSION}") + message(STATUS "Database Version: ${DATABASE_VERSION}") + message(STATUS "Patch Version: ${PATCH_VERSION}") + + set(LIB_CORE_TARGET_NAME "SourcetrailDB_core_lib") + add_subdirectory( + "${CMAKE_SOURCE_DIR}/submodules/SourcetrailPythonIndexer/SourcetrailDB/core" + "${CMAKE_BINARY_DIR}/SourcetrailPythonIndexer/SourcetrailDB/core") + + set(PYTHON_BINDING_TARGET_NAME "bindings_python") + set(PYTHON_BINDING_OUTPUT_DIR "") + add_subdirectory( + "${CMAKE_SOURCE_DIR}/submodules/SourcetrailPythonIndexer/SourcetrailDB/bindings_python" + "${CMAKE_BINARY_DIR}/SourcetrailPythonIndexer/SourcetrailDB/bindings_python") + + add_library(${LIB_PYTHON_PROJECT_NAME} ${LIB_PYTHON_FILES}) create_source_groups(${LIB_PYTHON_FILES}) @@ -502,14 +530,22 @@ if (BUILD_PYTHON_LANGUAGE_PACKAGE) #link_directories(${Boost_LIBRARY_DIRS}) target_link_libraries(${LIB_PYTHON_PROJECT_NAME} ${LIB_UTILITY_PROJECT_NAME} ${LIB_PROJECT_NAME}) - + add_dependencies(${LIB_PYTHON_PROJECT_NAME} _${PYTHON_BINDING_TARGET_NAME}) + + string(REGEX REPLACE "\\\\" "/" FORWARDSLASHED_PYTHON_INCLUDE_DIR ${PYTHON_INCLUDE_DIR}) + set(PYTHON_ENVIRONMENT_DIR "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data\\python\\environment") + add_custom_command( TARGET ${LIB_PYTHON_PROJECT_NAME} PRE_BUILD - COMMAND ${PROJECT_SOURCE_DIR}/script/download_python_indexer.sh - COMMENT "download python indexer" + COMMAND ${PROJECT_SOURCE_DIR}/script/update_python_indexer.sh + COMMENT "updating python indexer scripts" ) + execute_process( + COMMAND "cmd.exe" "/k" "rmdir" "${PYTHON_ENVIRONMENT_DIR}" & "${PYTHON_INCLUDE_DIR}/../python.exe" "-m" "venv" "--clear" "--copies" "${PYTHON_ENVIRONMENT_DIR}" & "${PYTHON_ENVIRONMENT_DIR}/Scripts/pip" "install" "-r" "${CMAKE_SOURCE_DIR}/submodules/SourcetrailPythonIndexer/requirements.txt" & exit + ) + else() message(STATUS "Building the Python indexer will be skipped. You can enable building this target by setting 'BUILD_PYTHON_LANGUAGE_PACKAGE' to 'ON'.") @@ -695,9 +731,6 @@ if (WIN32) TARGET ${APP_PROJECT_NAME} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/app") - - string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR}) - string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) else () add_executable(${APP_PROJECT_NAME} ${APP_FILES}) endif () diff --git a/script/download_python_indexer.sh b/script/download_python_indexer.sh deleted file mode 100755 index d637494f..00000000 --- a/script/download_python_indexer.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/bash - -SOURCETRAIL_PYTHON_INDEXER_VERSION="v1_db25_p5" - -# Determine current platform -PLATFORM='unknown' -if [ "$(uname)" == "Darwin" ]; then - PLATFORM='osx' -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - PLATFORM='linux' -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - PLATFORM='windows' -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then - PLATFORM='windows' -elif [ "$OSTYPE" == "msys" ]; then - PLATFORM='windows' -fi - -PACKAGE_NAME="SourcetrailPythonIndexer_${SOURCETRAIL_PYTHON_INDEXER_VERSION}-${PLATFORM}" -PACKAGE_FILE_NAME="${PACKAGE_NAME}.zip" -PACKAGE_URL="https://github.com/CoatiSoftware/SourcetrailPythonIndexer/releases/download/${SOURCETRAIL_PYTHON_INDEXER_VERSION}/${PACKAGE_FILE_NAME}" -TEMP_PATH="build/temp" -TARGET_PATH="bin/app/data/python" - - -ABORT="\033[31mAbort:\033[00m" -SUCCESS="\033[32mSuccess:\033[00m" -INFO="\033[33mInfo:\033[00m" - -if [ $PLATFORM == "windows" ]; then - SCRIPT=`realpath $0` - if [ "$SCRIPT" == "" ]; then - - ORIGINAL_PATH_TO_SCRIPT="${0}" - CLEANED_PATH_TO_SCRIPT="${ORIGINAL_PATH_TO_SCRIPT//\\//}" - SCRIPT_DIR=${CLEANED_PATH_TO_SCRIPT%/*} - else - ORIGINAL_PATH_TO_SCRIPT=`dirname $SCRIPT` - SCRIPT_DIR="${ORIGINAL_PATH_TO_SCRIPT//\\//}" - fi -else - SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" -fi - -echo "This script is running in: $SCRIPT_DIR" - - -# Enter main directory -cd $SCRIPT_DIR/ -cd .. - -BINARY_PATH="$TARGET_PATH/SourcetrailPythonIndexer" -if [ $PLATFORM == "windows" ]; then - BINARY_PATH="${BINARY_PATH}.exe" -fi - -if [ -e "${BINARY_PATH}" ]; then - echo -e $INFO "SourcetrailPythonIndexer already exists, checking version..." - - INSTALLED_VERSION="$(${BINARY_PATH} --version)" - INSTALLED_VERSION=${INSTALLED_VERSION#* } - INSTALLED_VERSION="${INSTALLED_VERSION//./$'_'}" - - if [ "$INSTALLED_VERSION" == "$SOURCETRAIL_PYTHON_INDEXER_VERSION" ]; then - echo -e $INFO "Nothing to update. Target version of SourcetrailPythonIndexer is already installed." - exit - fi -fi - -mkdir -p $TEMP_PATH - -echo -e $INFO "starting to download $PACKAGE_FILE_NAME" - -if [ $PLATFORM == "linux" ]; then - wget -O $TEMP_PATH/$PACKAGE_FILE_NAME $PACKAGE_URL -elif [ $PLATFORM == "osx" ]; then - wget -O $TEMP_PATH/$PACKAGE_FILE_NAME $PACKAGE_URL -elif [ $PLATFORM == "windows" ]; then - certutil.exe -urlcache -split -f $PACKAGE_URL $TEMP_PATH/$PACKAGE_FILE_NAME -fi - -echo -e $INFO "finished downloading $PACKAGE_FILE_NAME" - - -if [ $PLATFORM == "linux" ]; then - unzip -d $TEMP_PATH $TEMP_PATH/$PACKAGE_FILE_NAME -elif [ $PLATFORM == "osx" ]; then - unzip -d $TEMP_PATH $TEMP_PATH/$PACKAGE_FILE_NAME -elif [ $PLATFORM == "windows" ]; then - 7z x $TEMP_PATH/$PACKAGE_FILE_NAME -o$TEMP_PATH -fi - - -echo -e $INFO "clearing $TARGET_PATH" -rm -rf $TARGET_PATH -mkdir -p $TARGET_PATH -cp -r $TEMP_PATH/$PACKAGE_NAME/* $TARGET_PATH - - -echo -e $INFO "clearing temporary data at $TEMP_PATH" -rm -rf $TEMP_PATH diff --git a/script/update_python_indexer.sh b/script/update_python_indexer.sh new file mode 100644 index 00000000..132990c3 --- /dev/null +++ b/script/update_python_indexer.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Determine current platform +PLATFORM='unknown' +if [ "$(uname)" == "Darwin" ]; then + PLATFORM='osx' +elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then + PLATFORM='linux' +elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then + PLATFORM='windows' +elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then + PLATFORM='windows' +elif [ "$OSTYPE" == "msys" ]; then + PLATFORM='windows' +fi + +INPUT_DIR="submodules/SourcetrailPythonIndexer" +OUTPUT_DIR="bin/app/data/python" +PYTHON_ENVIRONMENT_DIR="$OUTPUT_DIR/environment" +PYTHON_INDEXER_DIR="$OUTPUT_DIR/indexer" + +ABORT="\033[31mAbort:\033[00m" +SUCCESS="\033[32mSuccess:\033[00m" +INFO="\033[33mInfo:\033[00m" + +if [ $PLATFORM == "windows" ]; then + SCRIPT=`realpath $0` + if [ "$SCRIPT" == "" ]; then + + ORIGINAL_PATH_TO_SCRIPT="${0}" + CLEANED_PATH_TO_SCRIPT="${ORIGINAL_PATH_TO_SCRIPT//\\//}" + SCRIPT_DIR=${CLEANED_PATH_TO_SCRIPT%/*} + else + ORIGINAL_PATH_TO_SCRIPT=`dirname $SCRIPT` + SCRIPT_DIR="${ORIGINAL_PATH_TO_SCRIPT//\\//}" + fi +else + SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" +fi + +echo "This script is running in: $SCRIPT_DIR" + +# Enter main directory +cd $SCRIPT_DIR/ +cd .. + +echo "Clean $PYTHON_INDEXER_DIR" +rm -rf $PYTHON_INDEXER_DIR + +echo "Copy python indexer files to $PYTHON_INDEXER_DIR" +mkdir $PYTHON_INDEXER_DIR +cp $INPUT_DIR/_version.py $PYTHON_INDEXER_DIR +cp $INPUT_DIR/run.py $PYTHON_INDEXER_DIR +cp $INPUT_DIR/indexer.py $PYTHON_INDEXER_DIR +cp $INPUT_DIR/shallow_indexer.py $PYTHON_INDEXER_DIR + + + + + +