diff --git a/CMakeLists.txt b/CMakeLists.txt index 644a1c89..85430629 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,6 +181,70 @@ if(Qt5Widgets_FOUND) endif() +# Setup --------------------------------------------------------------------------- + +if (WIN32) + get_filename_component(QT_BINARY_DIR "${QT_MOC_EXECUTABLE}" PATH) + set(QT_PLUGINS_DIR "${QT_BINARY_DIR}/../plugins") + + function(COPY_QT_BINARIES IS_DEBUG IS_APP) + set(SUFFIX "") + if (IS_DEBUG) + set(SUFFIX "d") + endif() + + set(CONFIGURATION "Release") + if (IS_DEBUG) + set(CONFIGURATION "Debug") + endif() + + if(CMAKE_CL_64) + set(BITS "64") + else() + set(BITS "32") + endif() + + set(TARGET "test") + if (IS_APP) + set(TARGET "app") + + file(GLOB MY_PUBLIC_HEADERS + "${CMAKE_SOURCE_DIR}/setup/dynamic_libraries/win${BITS}/app/${CONFIGURATION}/*" + ) + file(COPY ${MY_PUBLIC_HEADERS} DESTINATION "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/") + + endif() + + configure_file("${QT_BINARY_DIR}/Qt5Core${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/Qt5Core${SUFFIX}.dll" COPYONLY) + configure_file("${QT_BINARY_DIR}/Qt5Gui${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/Qt5Gui${SUFFIX}.dll" COPYONLY) + configure_file("${QT_BINARY_DIR}/Qt5Network${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/Qt5Network${SUFFIX}.dll" COPYONLY) + configure_file("${QT_BINARY_DIR}/Qt5Svg${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/Qt5Svg${SUFFIX}.dll" COPYONLY) + configure_file("${QT_BINARY_DIR}/Qt5Widgets${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/Qt5Widgets${SUFFIX}.dll" COPYONLY) + configure_file("${QT_BINARY_DIR}/Qt5WinExtras${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/Qt5WinExtras${SUFFIX}.dll" COPYONLY) + + configure_file("${QT_PLUGINS_DIR}/platforms/qwindows${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/platforms/qwindows${SUFFIX}.dll" COPYONLY) + + configure_file("${QT_PLUGINS_DIR}/imageformats/qgif${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qgif${SUFFIX}.dll" COPYONLY) + configure_file("${QT_PLUGINS_DIR}/imageformats/qicns${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qicns${SUFFIX}.dll" COPYONLY) + configure_file("${QT_PLUGINS_DIR}/imageformats/qico${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qico${SUFFIX}.dll" COPYONLY) + configure_file("${QT_PLUGINS_DIR}/imageformats/qjpeg${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qjpeg${SUFFIX}.dll" COPYONLY) + configure_file("${QT_PLUGINS_DIR}/imageformats/qsvg${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qsvg${SUFFIX}.dll" COPYONLY) + configure_file("${QT_PLUGINS_DIR}/imageformats/qtga${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qtga${SUFFIX}.dll" COPYONLY) + configure_file("${QT_PLUGINS_DIR}/imageformats/qtiff${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qtiff${SUFFIX}.dll" COPYONLY) + configure_file("${QT_PLUGINS_DIR}/imageformats/qwbmp${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qwbmp${SUFFIX}.dll" COPYONLY) + configure_file("${QT_PLUGINS_DIR}/imageformats/qwebp${SUFFIX}.dll" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/${TARGET}/imageformats/qwebp${SUFFIX}.dll" COPYONLY) + endfunction(COPY_QT_BINARIES) + + COPY_QT_BINARIES(True True) + COPY_QT_BINARIES(True False) + COPY_QT_BINARIES(False True) + COPY_QT_BINARIES(False False) + + configure_file("${CMAKE_SOURCE_DIR}/setup/icon/windows/sourcetrail.ico" "${CMAKE_BINARY_DIR}/${CONFIGURATION}/sourcetrail.ico" COPYONLY) + +endif() + + add_subdirectory(src/app) add_subdirectory(src/external) add_subdirectory(src/indexer) @@ -352,6 +416,15 @@ set_property( target_link_libraries(${LIB_PYTHON_PROJECT_NAME} ${LIB_UTILITY_PROJECT_NAME} ${LIB_PROJECT_NAME}) +if (WIN32) + add_custom_command( + TARGET ${LIB_PYTHON_PROJECT_NAME} + POST_BUILD + COMMAND ${PROJECT_SOURCE_DIR}/script/download_python_indexer.sh + COMMENT "download python indexer" + ) +endif () + # Lib Gui ---------------------------------------------------------------------- @@ -514,6 +587,19 @@ if (WIN32) # generate pdb for release build set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") + + string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR}) + string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) + + add_custom_command( + TARGET ${APP_PROJECT_NAME} + POST_BUILD + COMMAND rmdir "${BACKSLASHED_CMAKE_BINARY_DIR}\\Debug\\app\\data" & mklink /d /j "${BACKSLASHED_CMAKE_BINARY_DIR}\\Debug\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" + COMMAND rmdir "${BACKSLASHED_CMAKE_BINARY_DIR}\\Debug\\app\\user" & mklink /d /j "${BACKSLASHED_CMAKE_BINARY_DIR}\\Debug\\app\\user" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\user" + COMMAND rmdir "${BACKSLASHED_CMAKE_BINARY_DIR}\\Release\\app\\data" & mklink /d /j "${BACKSLASHED_CMAKE_BINARY_DIR}\\Release\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" + COMMAND rmdir "${BACKSLASHED_CMAKE_BINARY_DIR}\\Release\\app\\user" & mklink /d /j "${BACKSLASHED_CMAKE_BINARY_DIR}\\Release\\app\\user" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\user" + COMMENT "create symbolic links for data" + ) else () add_executable(${APP_PROJECT_NAME} ${APP_FILES}) endif () diff --git a/README.md b/README.md index 9bb1edc8..dc3b6bbe 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,6 @@ * QT 5.10.1 * Clang & LLVM 7.0 (doesn't quite work for windows, use unix setup below and skip all the ninja stuff)(installation guide http://clang.llvm.org/docs/LibASTMatchersTutorial.html) * Boost 1.68 -* Image Magick 7.0.6 * ccache (Unix) * Visual Leak Detector (Windows) * Wix 3.11 (Windows) diff --git a/script/create_windows_icon.sh b/script/create_windows_icon.sh deleted file mode 100644 index 844dbfab..00000000 --- a/script/create_windows_icon.sh +++ /dev/null @@ -1,13 +0,0 @@ -MY_PATH=`dirname "$0"` - -ICON_INPUT_PATH=$MY_PATH/../bin/app/data/gui/icon -ICON_BUILD_PATH=$ICON_INPUT_PATH/build - -mkdir -p $ICON_BUILD_PATH - -magick convert $ICON_INPUT_PATH/logo_1024_1024.png -define icon:auto-resize=256,128,64,48,40,32,24,16 $ICON_BUILD_PATH/sourcetrail.ico - -cp $ICON_BUILD_PATH/sourcetrail.ico $MY_PATH/../build/win32 -cp $ICON_BUILD_PATH/sourcetrail.ico $MY_PATH/../build/win64 - -rm -rf $ICON_BUILD_PATH diff --git a/script/setup.sh b/script/setup.sh index 5c92c91f..e346babc 100755 --- a/script/setup.sh +++ b/script/setup.sh @@ -42,60 +42,6 @@ fi # Create Debug and Release folders echo -e $INFO "create build folders" if [ $PLATFORM == "Windows" ]; then - - copy_dynamic_libraries() # Parameters: bit {32, 64}, mode {Debug, Release}, target {app, test} - { - mkdir -p build/win$1/$2/$3/platforms - mkdir -p build/win$1/$2/$3/styles - mkdir -p build/win$1/$2/$3/imageformats - - local QT_DIR=${QT_WIN32_DIR} - - if [[ "$1" == "64" ]] - then - QT_DIR=${QT_WIN64_DIR} - fi - - local SUFFIX="" - if [[ "$2" == "Debug" ]] - then - SUFFIX="d" - fi - - echo -e $INFO "copy dynamic libraries for Win$1 $2 $3" - - if [[ "$3" == "app" ]] - then - cp -u -r setup/dynamic_libraries/win$1/$3/$2/* build/win$1/$2/$3 - fi - - cp -u -r ${QT_DIR}/bin/Qt5Core$SUFFIX.dll build/win$1/$2/$3 - cp -u -r ${QT_DIR}/bin/Qt5Gui$SUFFIX.dll build/win$1/$2/$3 - cp -u -r ${QT_DIR}/bin/Qt5Network$SUFFIX.dll build/win$1/$2/$3 - cp -u -r ${QT_DIR}/bin/Qt5Svg$SUFFIX.dll build/win$1/$2/$3 - cp -u -r ${QT_DIR}/bin/Qt5Widgets$SUFFIX.dll build/win$1/$2/$3 - cp -u -r ${QT_DIR}/bin/Qt5WinExtras$SUFFIX.dll build/win$1/$2/$3 - cp -u -r ${QT_DIR}/plugins/platforms/qwindows$SUFFIX.dll build/win$1/$2/$3/platforms - cp -u -r ${QT_DIR}/plugins/styles/qwindowsvistastyle$SUFFIX.dll build/win$1/$2/$3/styles - cp -u -r ${QT_DIR}/plugins/imageformats/qgif$SUFFIX.dll build/win$1/$2/$3/imageformats - cp -u -r ${QT_DIR}/plugins/imageformats/qicns$SUFFIX.dll build/win$1/$2/$3/imageformats - cp -u -r ${QT_DIR}/plugins/imageformats/qico$SUFFIX.dll build/win$1/$2/$3/imageformats - cp -u -r ${QT_DIR}/plugins/imageformats/qjpeg$SUFFIX.dll build/win$1/$2/$3/imageformats - cp -u -r ${QT_DIR}/plugins/imageformats/qsvg$SUFFIX.dll build/win$1/$2/$3/imageformats - cp -u -r ${QT_DIR}/plugins/imageformats/qtga$SUFFIX.dll build/win$1/$2/$3/imageformats - cp -u -r ${QT_DIR}/plugins/imageformats/qtiff$SUFFIX.dll build/win$1/$2/$3/imageformats - cp -u -r ${QT_DIR}/plugins/imageformats/qwbmp$SUFFIX.dll build/win$1/$2/$3/imageformats - cp -u -r ${QT_DIR}/plugins/imageformats/qwebp$SUFFIX.dll build/win$1/$2/$3/imageformats - } - - copy_dynamic_libraries "32" "Debug" "app" - copy_dynamic_libraries "32" "Debug" "test" - copy_dynamic_libraries "32" "Release" "app" - copy_dynamic_libraries "32" "Release" "test" - copy_dynamic_libraries "64" "Debug" "app" - copy_dynamic_libraries "64" "Debug" "test" - copy_dynamic_libraries "64" "Release" "app" - copy_dynamic_libraries "64" "Release" "test" else mkdir -p build/Debug/app mkdir -p build/Debug/test @@ -104,31 +50,11 @@ else fi if [ $PLATFORM == "Windows" ]; then - sh script/download_python_indexer.sh else MY_PATH=`dirname "$0"` $MY_PATH/download_python_indexer.sh fi -if [ $PLATFORM == "Windows" ]; then - echo -e $INFO "creating program icon" - sh script/create_windows_icon.sh -fi - - -echo -e $INFO "create symbolic links for data" -if [ $PLATFORM == "Windows" ]; then - BACKSLASHED_ROOT_DIR="${ROOT_DIR//\//\\}" - cmd //c 'mklink /d /j '$BACKSLASHED_ROOT_DIR'\build\win32\Debug\app\data '$BACKSLASHED_ROOT_DIR'\bin\app\data' & - cmd //c 'mklink /d /j '$BACKSLASHED_ROOT_DIR'\build\win32\Debug\app\user '$BACKSLASHED_ROOT_DIR'\bin\app\user' & - cmd //c 'mklink /d /j '$BACKSLASHED_ROOT_DIR'\build\win32\Release\app\data '$BACKSLASHED_ROOT_DIR'\bin\app\data' & - cmd //c 'mklink /d /j '$BACKSLASHED_ROOT_DIR'\build\win32\Release\app\user '$BACKSLASHED_ROOT_DIR'\bin\app\user' & - - cmd //c 'mklink /d /j '$BACKSLASHED_ROOT_DIR'\build\win64\Debug\app\data '$BACKSLASHED_ROOT_DIR'\bin\app\data' & - cmd //c 'mklink /d /j '$BACKSLASHED_ROOT_DIR'\build\win64\Debug\app\user '$BACKSLASHED_ROOT_DIR'\bin\app\user' & - cmd //c 'mklink /d /j '$BACKSLASHED_ROOT_DIR'\build\win64\Release\app\data '$BACKSLASHED_ROOT_DIR'\bin\app\data' & - cmd //c 'mklink /d /j '$BACKSLASHED_ROOT_DIR'\build\win64\Release\app\user '$BACKSLASHED_ROOT_DIR'\bin\app\user' & -fi # Setup both Debug and Release configuration if [ $PLATFORM == "Linux" ] || [ $PLATFORM == "MacOS" ]; then @@ -140,14 +66,6 @@ if [ $PLATFORM == "Linux" ] || [ $PLATFORM == "MacOS" ]; then echo -e $INFO "run cmake with Release configuration" cd ../Release && cmake -G Ninja -DCMAKE_BUILD_TYPE="Release" ../.. -else - echo -e $INFO "run cmake with 32 bit configuration" - - cd build/win32 - cmake -G "Visual Studio 14 2015" ../.. - - cd ../win64 - cmake -G "Visual Studio 14 2015 Win64" ../.. fi echo -e $SUCCESS "setup complete" diff --git a/setup/icon/windows/sourcetrail.ico b/setup/icon/windows/sourcetrail.ico new file mode 100644 index 00000000..2326f3b5 Binary files /dev/null and b/setup/icon/windows/sourcetrail.ico differ