From 8c4208224239bcff18d7840d14d23f07d580c0cd Mon Sep 17 00:00:00 2001 From: ArthurSonzogni Date: Mon, 29 Apr 2019 03:36:35 +0200 Subject: [PATCH] Fix cmake error on Linux "no LIBRARY DESTINATION" On Linux, cmake gives the error: ~~~bash CMake Error at CMakeLists.txt:79 (INSTALL): INSTALL TARGETS given no LIBRARY DESTINATION for shared library target "libglew_shared". CMake Error at CMakeLists.txt:94 (INSTALL): INSTALL TARGETS given no LIBRARY DESTINATION for shared library target "libglewmx_shared". -- Configuring incomplete, errors occurred! ~~~ This bug was caused by the merge: e4de8a77a1f91aa99088187c7b8f7ff6bd6d107c Containing: * Update library install directories in Cmake commit 5a7232fc53496fe667d53fc9c98206b644befd12 * Install directories set in single statement commit def19e7de4b34e6182e8f346cd14952424c574aa The cause is that RUNTIME DESTINATION is now defined (for Windows), but not LIBRARY DESTINATION (for Linux). See issue: https://github.com/Perlmint/glew-cmake/issues/17 --- CMakeLists.txt | 6 ++-- maintain.sh | 92 +++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 83 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aaa6d09..9c233dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,8 @@ IF ( glew-cmake_BUILD_SHARED ) TARGET_INCLUDE_DIRECTORIES( libglew_shared PUBLIC ${INCLUDE_DIR} ) TARGET_LINK_LIBRARIES( libglew_shared ${GL_LIBRARY} ${PLATFORM_SPECIFIC_LIBRARIES} ) INSTALL( TARGETS libglew_shared ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin) + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin ) ENDIF ( ) IF ( glew-cmake_BUILD_MULTI_CONTEXT ) @@ -92,7 +93,8 @@ IF ( glew-cmake_BUILD_SHARED ) TARGET_INCLUDE_DIRECTORIES( libglewmx_shared PUBLIC ${INCLUDE_DIR} ) TARGET_LINK_LIBRARIES( libglewmx_shared ${GL_LIBRARY} ${PLATFORM_SPECIFIC_LIBRARIES} ) INSTALL( TARGETS libglewmx_shared ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin ) + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin ) ENDIF ( ) ENDIF ( ) diff --git a/maintain.sh b/maintain.sh index 8da5ea5..f57aab9 100755 --- a/maintain.sh +++ b/maintain.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # This script is used for auto maintaining # - merging with original repo @@ -6,9 +6,32 @@ # - push changes to repository # ORIGINAL_REPO_URL=https://github.com/nigels-com/glew.git +absolute_path () { + local TARGET_FILE=$1 + shift + local OUT=$1 + shift + cd `dirname $TARGET_FILE` + TARGET_FILE=`basename $TARGET_FILE` + + # Iterate down a (possible) chain of symlinks + while [ -L "$TARGET_FILE" ] + do + TARGET_FILE=`readlink $TARGET_FILE` + cd `dirname $TARGET_FILE` + TARGET_FILE=`basename $TARGET_FILE` + done + + # Compute the canonicalized name by finding the physical path + # for the directory we're in and appending the target file. + PHYS_DIR=`pwd -P` + RESULT=$PHYS_DIR/$TARGET_FILE + eval "$OUT=\"${RESULT}\"" +} + if [ -z "$WORKSPACE" ]; then echo "Set WORKSPACE as default value" - SCRIPT_PATH=$(readlink -f "$0") + absolute_path "$0" SCRIPT_PATH WORKSPACE=$(dirname "$SCRIPT_PATH") echo "WORKSPACE=$WORKSPACE" fi @@ -37,7 +60,7 @@ source_update () { if [ `git branch | grep ${GIT_BRANCH_NAME} | wc -l` = 0 ]; then git checkout origin/${GIT_BRANCH_NAME} -b ${GIT_BRANCH_NAME} else - git checkout -f $GIT_BRANCH_NAME + # git checkout -f $GIT_BRANCH_NAME git pull -s recursive -X theirs --no-edit --progress origin fi echo "Pull from origin repository(${ORIGINAL_REPO_URL})" @@ -51,16 +74,6 @@ source_update () { PUSH_COUNT=$((PUSH_COUNT + 1)) fi - echo "Fetch tags from origin repository(${ORIGINAL_REPO_URL})" - BEFORE_TAG_COUNT=`git tag | wc -l` - git fetch --tags --progress original_repo - AFTER_TAG_COUNT=`git tag | wc -l` - if [ ! $BEFORE_TAG_COUNT -eq $AFTER_TAG_COUNT ]; then - echo "Tags updated" - git push ${PUSH_ARG} --tags origin - PUSH_COUNT=$((PUSH_COUNT + 1)) - fi - cd "$WORKSPACE/auto" echo "CleanUp" make clean @@ -88,6 +101,57 @@ source_update () { fi } +import_tags () { + echo "Fetch tags from origin repository(${ORIGINAL_REPO_URL})" + BEFORE_TAG_COUNT=`git tag | wc -l` + git fetch --tags --progress original_repo + AFTER_TAG_COUNT=`git tag | wc -l` + NEW_VERSION_TAGS=`diff -u <(git tag | grep glew-cmake- | sed s/glew-cmake/glew/) <(git tag | grep "glew-\d") | grep ^+ | sed 1d | sed s/^+//` + if [ ! $BEFORE_TAG_COUNT -eq $AFTER_TAG_COUNT -o ! -z "$NEW_VERSION_TAGS" ]; then + echo "Tags updated" + git push ${PUSH_ARG} --tags origin + + git checkout glew-cmake-release + for TAG in $NEW_VERSION_TAGS + do + echo "Import $TAG" + git checkout $TAG -- . + git checkout master -- CMakeLists.txt + cd "$WORKSPACE/auto" + echo "CleanUp fot tag" + make clean + echo "Generated Source Update fot tag" + cd "$WORKSPACE" + make extensions + git reset + git add --force src include doc CMakeLists.txt + if [ `git diff --cached | wc -c` -ne 0 ]; then + git commit -m"glew-cmake release from $TAG" + NEW_TAG=`echo $TAG | sed s/glew-/glew-cmake-/` + git tag $NEW_TAG + else + echo "No difference! something wrong" + fi + done + + git push ${PUSH_ARG} origin glew-cmake-release + if [ -z "$PUSH_ARG" ]; then + git push --tags ${PUSH_ARGS} origin + fi + + # when test mode, reset created commits + if [ -n "$PUSH_ARG" ]; then + echo "Reset commits for tags" + for TAG in $NEW_VERSION_TAGS + do + NEW_TAG=`echo $TAG | sed s/glew-/glew-cmake-/` + git tag -d $NEW_TAG + git reset --hard HEAD~1 + done + fi + fi +} + # add remote when original repo is not found in local repo if [ `git remote | grep original_repo | wc -l` = 0 ]; then git remote add original_repo ${ORIGINAL_REPO_URL} @@ -140,3 +204,5 @@ join () { prepare source_update master + +import_tags