diff --git a/version.cmake b/version.cmake index ed8fdb3..1bcc885 100644 --- a/version.cmake +++ b/version.cmake @@ -17,10 +17,13 @@ endfunction() # Fonction pour incrémenter la version SemVer function(increment_version CURRENT_VERSION TYPE OUT_VAR) - string(REPLACE "." ";" VERSION_LIST ${CURRENT_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - list(GET VERSION_LIST 2 PATCH) + if(CURRENT_VERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)") + set(MAJOR ${CMAKE_MATCH_1}) + set(MINOR ${CMAKE_MATCH_2}) + set(PATCH ${CMAKE_MATCH_3}) + else() + message(FATAL_ERROR "Format de version invalide: ${CURRENT_VERSION}. Attendu: X.Y.Z") + endif() if("${TYPE}" STREQUAL "MAJOR") math(EXPR MAJOR "${MAJOR} + 1") @@ -70,40 +73,42 @@ function(set_new_version NEW_VERSION) endif() endforeach() - # Demander à l'utilisateur s'il veut tagger (ou le faire par défaut si spécifié) + # Créer le tag git create_git_tag(${NEW_VERSION}) endfunction() # Logique principale -set(ARG_OFFSET 0) -while(ARG_OFFSET LESS CMAKE_ARGC) - if("${CMAKE_ARGV${ARG_OFFSET}}" STREQUAL "-P") - math(EXPR COMMAND_INDEX "${ARG_OFFSET} + 2") - math(EXPR VERSION_INDEX "${ARG_OFFSET} + 3") - break() +if(CMAKE_SCRIPT_MODE_FILE STREQUAL CMAKE_CURRENT_LIST_FILE) + set(ARG_OFFSET 0) + while(ARG_OFFSET LESS CMAKE_ARGC) + if("${CMAKE_ARGV${ARG_OFFSET}}" STREQUAL "-P") + math(EXPR COMMAND_INDEX "${ARG_OFFSET} + 2") + math(EXPR VERSION_INDEX "${ARG_OFFSET} + 3") + break() + endif() + math(EXPR ARG_OFFSET "${ARG_OFFSET} + 1") + endwhile() + + if(NOT DEFINED COMMAND_INDEX OR COMMAND_INDEX GREATER_EQUAL CMAKE_ARGC) + message(FATAL_ERROR "Usage: cmake -P version.cmake [GET|SET|PATCH|MINOR|MAJOR] [new_version]") endif() - math(EXPR ARG_OFFSET "${ARG_OFFSET} + 1") -endwhile() - -if(NOT DEFINED COMMAND_INDEX OR COMMAND_INDEX GREATER_EQUAL CMAKE_ARGC) - message(FATAL_ERROR "Usage: cmake -P version.cmake [GET|SET|PATCH|MINOR|MAJOR] [new_version]") -endif() - -set(COMMAND "${CMAKE_ARGV${COMMAND_INDEX}}") - -if("${COMMAND}" STREQUAL "GET") - get_current_version(VERSION) - message("${VERSION}") -elseif("${COMMAND}" STREQUAL "SET") - if(VERSION_INDEX GREATER_EQUAL CMAKE_ARGC) - message(FATAL_ERROR "Veuillez spécifier la nouvelle version: cmake -P version.cmake SET 0.0.0") + + set(COMMAND "${CMAKE_ARGV${COMMAND_INDEX}}") + + if("${COMMAND}" STREQUAL "GET") + get_current_version(VERSION) + message("${VERSION}") + elseif("${COMMAND}" STREQUAL "SET") + if(VERSION_INDEX GREATER_EQUAL CMAKE_ARGC) + message(FATAL_ERROR "Veuillez spécifier la nouvelle version: cmake -P version.cmake SET 0.0.0") + endif() + set(NEW_VERSION "${CMAKE_ARGV${VERSION_INDEX}}") + set_new_version("${NEW_VERSION}") + elseif("${COMMAND}" MATCHES "^(PATCH|MINOR|MAJOR)$") + get_current_version(CURRENT_VERSION) + increment_version("${CURRENT_VERSION}" "${COMMAND}" NEW_VERSION) + set_new_version("${NEW_VERSION}") + else() + message(FATAL_ERROR "Commande inconnue: ${COMMAND}. Utilisez GET, SET, PATCH, MINOR ou MAJOR.") endif() - set(NEW_VERSION "${CMAKE_ARGV${VERSION_INDEX}}") - set_new_version("${NEW_VERSION}") -elseif("${COMMAND}" MATCHES "^(PATCH|MINOR|MAJOR)$") - get_current_version(CURRENT_VERSION) - increment_version("${CURRENT_VERSION}" "${COMMAND}" NEW_VERSION) - set_new_version("${NEW_VERSION}") -else() - message(FATAL_ERROR "Commande inconnue: ${COMMAND}. Utilisez GET, SET, PATCH, MINOR ou MAJOR.") endif()