diff --git a/.gitignore b/.gitignore index 90c2da58c..bcdbfa12d 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,9 @@ ipch *.opensdf *.suo +# Generated headers +*.h + *.user *.user.* *~ diff --git a/BuildInfo.sh b/BuildInfo.sh new file mode 100644 index 000000000..0370297df --- /dev/null +++ b/BuildInfo.sh @@ -0,0 +1,55 @@ +CURRENT_SOURCE_DIR=$1 +CURRENT_BINARY_DIR=$2 +BUILD_TYPE=$3 +BUILD_PLATFORM=$4 + +echo "Current source dir: $CURRENT_SOURCE_DIR" +echo "Current binary dir: $CURRENT_BINARY_DIR" +echo "Build type: $BUILD_TYPE" +echo "Build platform: $BUILD_PLATFORM" + +if [[ -e "$CURRENT_SOURCE_DIR/BuildInfo.h" ]] +then + echo "Using existing BuildInfo.h" + cp $CURRENT_SOURCE_DIR/BuildInfo.h $CURRENT_BINARY_DIR/BuildInfo.h.tmp +else + if [[ -e "$CURRENT_SOURCE_DIR/.git" ]] + then + ETH_COMMIT_HASH=$(git --git-dir=$CURRENT_SOURCE_DIR/.git --work-tree=$CURRENT_SOURCE_DIR rev-parse HEAD) + ETH_LOCAL_CHANGES=$(git --git-dir=$CURRENT_SOURCE_DIR/.git --work-tree=$CURRENT_SOURCE_DIR diff --shortstat) + if [[ -z "$ETH_LOCAL_CHANGES" ]] + then + ETH_CLEAN_REPO=1 + else + ETH_CLEAN_REPO=0 + fi + + echo "Commit hash: ${ETH_COMMIT_HASH} (Clean: ${ETH_CLEAN_REPO} - ${ETH_LOCAL_CHANGES})" + else + echo "Unknown repo." + ETH_COMMIT_HASH=0 + ETH_CLEAN_REPO=1 + fi + + echo "// This file was automatically generated by cmake" > $CURRENT_BINARY_DIR/BuildInfo.h.tmp + echo "" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp + echo "#pragma once" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp + echo "" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp + echo "#define ETH_COMMIT_HASH $ETH_COMMIT_HASH" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp + echo "#define ETH_CLEAN_REPO $ETH_CLEAN_REPO" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp + echo "#define ETH_BUILD_TYPE $BUILD_TYPE" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp + echo "#define ETH_BUILD_PLATFORM $BUILD_PLATFORM" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp +fi + +if [[ -e "$CURRENT_BINARY_DIR/BuildInfo.h" ]] +then + DIFF=$(diff $CURRENT_BINARY_DIR/BuildInfo.h $CURRENT_BINARY_DIR/BuildInfo.h.tmp) + if [[ -z "$DIFF" ]] + then + rm $CURRENT_BINARY_DIR/BuildInfo.h.tmp + else + mv $CURRENT_BINARY_DIR/BuildInfo.h.tmp $CURRENT_BINARY_DIR/BuildInfo.h + fi +else + mv $CURRENT_BINARY_DIR/BuildInfo.h.tmp $CURRENT_BINARY_DIR/BuildInfo.h +fi diff --git a/CMakeLists.txt b/CMakeLists.txt index b1c31b9a4..c715f1344 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -141,26 +141,8 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # Generate header file containing useful build information -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo.h) -else() - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) - execute_process(COMMAND git --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git --work-tree=${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE ETH_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND git --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git --work-tree=${CMAKE_CURRENT_SOURCE_DIR} diff --shortstat OUTPUT_VARIABLE ETH_LOCAL_CHANGES OUTPUT_STRIP_TRAILING_WHITESPACE) - if("x${ETH_LOCAL_CHANGES}" STREQUAL "x") - set(ETH_CLEAN_REPO 1) - else() - set(ETH_CLEAN_REPO 0) - endif() - message("Commit Hash: ${ETH_COMMIT_HASH} (Clean: ${ETH_CLEAN_REPO} - ${ETH_LOCAL_CHANGES})") - else() - message("Unknown repo.") - set(ETH_COMMIT_HASH 0) - set(ETH_CLEAN_REPO 1) - endif() - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/BuildInfo.h "// This file was automatically generated by cmake\n#pragma once\n\n") - file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/BuildInfo.h "#define ETH_COMMIT_HASH ${ETH_COMMIT_HASH}\n#define ETH_CLEAN_REPO ${ETH_CLEAN_REPO}\n#define ETH_BUILD_TYPE ${CMAKE_BUILD_TYPE}\n#define ETH_BUILD_PLATFORM ${ETH_BUILD_PLATFORM}\n") - include_directories(${CMAKE_CURRENT_BINARY_DIR}) -endif() +add_custom_target(BuildInfo.h ALL COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo.sh ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BUILD_TYPE} ${ETH_BUILD_PLATFORM}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_subdirectory(secp256k1) add_subdirectory(libethereum)