diff --git a/CMakeLists.txt b/CMakeLists.txt index 6567943c..5c641f0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -170,38 +170,23 @@ if(GCC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") endif(GCC) -# ---------------------------------------------------------------------------- -# Create svn version information -# ---------------------------------------------------------------------------- -set(HAVE_SVN 0) -if(EXISTS "${PROJECT_SOURCE_DIR}/.svn/") - find_host_package(Subversion) - if(Subversion_FOUND) - set(HAVE_SVN true) - endif(Subversion_FOUND) -endif(EXISTS "${PROJECT_SOURCE_DIR}/.svn/") - -if(${HAVE_SVN}) - Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project) - - message(STATUS "Current svn revision is ${Project_WC_REVISION}") - set(VERSION_REVISION ${Project_WC_REVISION}) - set(VERSION_LAST_AUTHOR ${Project_WC_LAST_CHANGED_AUTHOR}) - set(VERSION_LAST_DATE ${Project_WC_LAST_CHANGED_DATE}) - set(VERSION_ONE_LINE "${VERSION_REVISION} author: ${VERSION_LAST_AUTHOR} date: ${VERSION_LAST_DATE}") - set(VERSION_VER_NUM ${VERSION_REVISION}) -else() - set(VERSION_REVISION -1) -endif() - # ---------------------------------------------------------------------------- # Create git version information # ---------------------------------------------------------------------------- +set(VERSION_CNT 0) +set(VERSION_MAX_CNT 10) +set(VERSION_INFO "\"unknown mpp version for missing VCS info\"") +foreach (CNT RANGE ${VERSION_MAX_CNT}) + set(VERSION_HISTORY_${CNT} "NULL") +endforeach(CNT) + if(EXISTS "${PROJECT_SOURCE_DIR}/.git") find_host_package(Git) if(GIT_FOUND) - # get author - execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%an + # get current version info + set(GIT_LOG_FORMAT "%h author: %<|(30)%an %cd %s") + + execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --date=short --pretty=format:${GIT_LOG_FORMAT} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE EXEC_OUT ERROR_VARIABLE EXEC_ERROR @@ -210,12 +195,19 @@ if(EXISTS "${PROJECT_SOURCE_DIR}/.git") ERROR_STRIP_TRAILING_WHITESPACE) if (NOT EXEC_RET) - message(STATUS "author: ${EXEC_OUT}") - set(VERSION_LAST_AUTHOR ${EXEC_OUT}) + set(VERSION_INFO ${EXEC_OUT}) + message(STATUS "current version:") + message(STATUS "${VERSION_INFO}") + set(VERSION_INFO "\"${VERSION_INFO}\"") + else() + message(STATUS "git ret ${EXEC_RET}") + message(STATUS "${EXEC_ERROR}") endif() - # get date - execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%ad + set(GIT_LOG_FORMAT "%h author: %<|(30)%an %cd %s %d") + + # get history version information + execute_process(COMMAND ${GIT_EXECUTABLE} log -${VERSION_MAX_CNT} --oneline --date=short --pretty=format:${GIT_LOG_FORMAT} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE EXEC_OUT ERROR_VARIABLE EXEC_ERROR @@ -224,42 +216,23 @@ if(EXISTS "${PROJECT_SOURCE_DIR}/.git") ERROR_STRIP_TRAILING_WHITESPACE) if (NOT EXEC_RET) - message(STATUS "date : ${EXEC_OUT}") - set(VERSION_LAST_DATE ${EXEC_OUT}) + set(VERSION_HISTORY ${EXEC_OUT}) + string(REPLACE "\n" ";" VERSION_HISTORY ${VERSION_HISTORY}) + + list(LENGTH VERSION_HISTORY VERSION_CNT) + message(STATUS "${VERSION_CNT} git history:") + + # setup logs + set(CNT 0) + foreach(VERSION_LOG ${VERSION_HISTORY}) + message(STATUS ${VERSION_LOG}) + set(VERSION_HISTORY_${CNT} "\"${VERSION_LOG}\"") + math(EXPR CNT "${CNT}+1") + endforeach(VERSION_LOG) + else() + message(STATUS "git ret ${EXEC_RET}") + message(STATUS "${EXEC_ERROR}") endif() - - # get version hash - execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%H - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - OUTPUT_VARIABLE EXEC_OUT - ERROR_VARIABLE EXEC_ERROR - RESULT_VARIABLE EXEC_RET - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE) - - if (NOT EXEC_RET) - set(VERSION_REVISION ${EXEC_OUT}) - endif() - - # get one line version information - execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:"%h author: %an %s" - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - OUTPUT_VARIABLE EXEC_OUT - ERROR_VARIABLE EXEC_ERROR - RESULT_VARIABLE EXEC_RET - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE) - - if (NOT EXEC_RET) - message(STATUS "git version: ${EXEC_OUT}") - set(VERSION_ONE_LINE ${EXEC_OUT}) - string(REPLACE "\"" "" VERSION_ONE_LINE ${VERSION_ONE_LINE}) - endif() - - set(VERSION_VER_NUM -1) - else(GIT_FOUND) - set(VERSION_ONE_LINE "Missing VCS info") - set(VERSION_LAST_AUTHOR "Unknown") endif() # add git hooks @@ -271,10 +244,6 @@ if(EXISTS "${PROJECT_SOURCE_DIR}/.git") message(STATUS "Install git hooks done") endif(EXISTS "${PROJECT_SOURCE_DIR}/.git/hooks") endif(EXISTS "${PROJECT_SOURCE_DIR}/tools/hooks/") - -else(EXISTS "${PROJECT_SOURCE_DIR}/.git") - set(VERSION_ONE_LINE "Without VCS info") - set(VERSION_LAST_AUTHOR "Unknown") endif(EXISTS "${PROJECT_SOURCE_DIR}/.git") configure_file( diff --git a/build/cmake/version.in b/build/cmake/version.in index 1dce0688..5f1e4a73 100644 --- a/build/cmake/version.in +++ b/build/cmake/version.in @@ -17,11 +17,17 @@ #ifndef __VERSION_H__ #define __VERSION_H__ -#define MPP_VERSION "@VERSION_REVISION@" -#define MPP_AUTHOR "@VERSION_LAST_AUTHOR@" -#define MPP_DATE "@VERSION_LAST_DATA@" -#define MPP_ONE_LINE "@VERSION_ONE_LINE@" -#define MPP_VER_NUM "@VERSION_VER_NUM@" +#define MPP_VERSION @VERSION_INFO@ +#define MPP_VER_HIST_CNT @VERSION_CNT@ +#define MPP_VER_HIST_0 @VERSION_HISTORY_0@ +#define MPP_VER_HIST_1 @VERSION_HISTORY_1@ +#define MPP_VER_HIST_2 @VERSION_HISTORY_2@ +#define MPP_VER_HIST_3 @VERSION_HISTORY_3@ +#define MPP_VER_HIST_4 @VERSION_HISTORY_4@ +#define MPP_VER_HIST_5 @VERSION_HISTORY_5@ +#define MPP_VER_HIST_6 @VERSION_HISTORY_6@ +#define MPP_VER_HIST_7 @VERSION_HISTORY_7@ +#define MPP_VER_HIST_8 @VERSION_HISTORY_8@ +#define MPP_VER_HIST_9 @VERSION_HISTORY_9@ #endif /*__VERSION_H__*/ - diff --git a/mpp/inc/mpp_info.h b/mpp/inc/mpp_info.h index 8af07cf7..ce14d84a 100644 --- a/mpp/inc/mpp_info.h +++ b/mpp/inc/mpp_info.h @@ -17,31 +17,11 @@ #ifndef __MPP_INFO_H__ #define __MPP_INFO_H__ -typedef enum RK_CHIP_TYPE { - NONE, - RK29, - RK30, - RK31, - - RK_CHIP_NUM = 0x100, -} RK_CHIP_TYPE; - -typedef enum MPP_INFO_TYPE { - INFO_ALL, - INFO_REVISION, - INFO_DATE, - INFO_AUTHOR, - - INFO_BUTT, -} MPP_INFO_TYPE; - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -RK_CHIP_TYPE get_chip_type(); -const char *mpp_info_get(MPP_INFO_TYPE type); -int mpp_info_get_revision(); +void show_mpp_version(void); #ifdef __cplusplus } diff --git a/mpp/mpi.cpp b/mpp/mpi.cpp index df698622..d8b7d44d 100644 --- a/mpp/mpi.cpp +++ b/mpp/mpi.cpp @@ -455,14 +455,14 @@ MPP_RET mpp_create(MppCtx *ctx, MppApi **mpi) break; } - mpp_api.version = mpp_info_get_revision(); + mpp_api.version = 0; p->api = &mpp_api; p->check = p; *ctx = p; *mpi = p->api; } while (0); - mpp_log("mpp version: %s\n", mpp_info_get(INFO_ALL)); + show_mpp_version(); mpi_dbg_func("leave ret %d ctx %p mpi %p\n", ret, *ctx, *mpi); return ret; diff --git a/mpp/mpp_info.cpp b/mpp/mpp_info.cpp index dd3ce396..20e3efab 100644 --- a/mpp/mpp_info.cpp +++ b/mpp/mpp_info.cpp @@ -29,75 +29,33 @@ * To avoid string | grep author getting multiple results * use commit to replace author */ -static char mpp_version_revision[] = MPP_VERSION; -static char mpp_version_commit[] = MPP_AUTHOR; -static char mpp_version_date[] = MPP_DATE; -static char mpp_version_one_line[] = MPP_ONE_LINE; -static char mpp_version_number[] = MPP_VER_NUM; +static const char mpp_version[] = MPP_VERSION; +static const RK_S32 mpp_history_cnt = MPP_VER_HIST_CNT; +static const char *mpp_history[] = { + MPP_VER_HIST_0, + MPP_VER_HIST_1, + MPP_VER_HIST_2, + MPP_VER_HIST_3, + MPP_VER_HIST_4, + MPP_VER_HIST_5, + MPP_VER_HIST_6, + MPP_VER_HIST_7, + MPP_VER_HIST_8, + MPP_VER_HIST_9, +}; -static RK_CHIP_TYPE chip_version(void) +void show_mpp_version(void) { - RK_CHIP_TYPE type = NONE; - const char *value = NULL; - RK_S32 ret = mpp_env_get_str("ro.product.board", &value, NULL); + RK_U32 show_history = 0; - if (0 == ret) { - if (strstr(value, "rk29")) { - mpp_log("rk29 board found in board property"); - type = RK29; - } else if (strstr(value, "rk30")) { - mpp_log("rk30 board found in board property"); - type = RK30; - } - } - if (NONE == type) { - ret = mpp_env_get_str("ro.board.platform", &value, NULL); - if (0 == ret) { - if (strstr(value, "rk29")) { - mpp_log("rk29 board found in platform property"); - type = RK29; - } else if (strstr(value, "rk30")) { - mpp_log("rk30 board found in platform property"); - type = RK30; - } - } - } + mpp_env_get_u32("mpp_show_history", &show_history, 0); - if (NONE == type) { - mpp_log("can not found matched chip type"); - } - return type; + if (show_history) { + RK_S32 i; + + mpp_log("mpp version history %d:\n", mpp_history_cnt); + for (i = 0; i < mpp_history_cnt; i++) + mpp_log("%s\n", mpp_history[i]); + } else + mpp_log("mpp version: %s\n", mpp_version); } - -const char *mpp_info_get(MPP_INFO_TYPE type) -{ - switch (type) { - case INFO_ALL : { - return mpp_version_one_line; - } break; - case INFO_REVISION : { - return mpp_version_revision; - } break; - case INFO_DATE : { - return mpp_version_date; - } break; - case INFO_AUTHOR : { - return mpp_version_commit; - } break; - default : { - mpp_err_f("invalid info type %d\n", type); - } break; - } - return NULL; -} - -RK_CHIP_TYPE get_chip_type() -{ - return chip_version(); -} - -int mpp_info_get_revision() -{ - return atoi(mpp_version_number); -} - diff --git a/test/mpp_info_test.c b/test/mpp_info_test.c index d26205da..702bac6c 100644 --- a/test/mpp_info_test.c +++ b/test/mpp_info_test.c @@ -17,15 +17,21 @@ #define MODULE_TAG "mpp_info_test" #include "mpp_log.h" +#include "mpp_env.h" #include "mpp_info.h" int main() { - mpp_log("mpp revision is %d\n", mpp_info_get_revision()); - mpp_log("mpp info all:\n%s\n", mpp_info_get(INFO_ALL)); - mpp_log("mpp info revision: %s\n", mpp_info_get(INFO_REVISION)); - mpp_log("mpp info date : %s\n", mpp_info_get(INFO_DATE)); - mpp_log("mpp info author : %s\n", mpp_info_get(INFO_AUTHOR)); + mpp_env_set_u32("mpp_show_history", 0); + + mpp_log("normal version log:\n"); + show_mpp_version(); + + mpp_env_set_u32("mpp_show_history", 1); + mpp_log("history version log:\n"); + + show_mpp_version(); + mpp_env_set_u32("mpp_show_history", 0); return 0; }