Browse Source

Merge pull request #3686 from wavexx/lang_checks

Add targets for language checking
Yuri D'Elia 2 years ago
parent
commit
990f585312
4 changed files with 52 additions and 8 deletions
  1. 12 0
      .github/travis/cmake-lang.sh
  2. 5 0
      .travis.yml
  3. 27 7
      CMakeLists.txt
  4. 8 1
      lang/lang-check.py

+ 12 - 0
.github/travis/cmake-lang.sh

@@ -0,0 +1,12 @@
+#!/bin/sh
+set -xe
+rm -rf build
+mkdir build
+cd build
+cmake .. \
+    -DCMAKE_TOOLCHAIN_FILE="../cmake/AvrGcc.cmake" \
+    -DCMAKE_BUILD_TYPE=Release \
+    -G Ninja
+
+# ignore all failures in order to show as much output as possible
+ninja -k0 check_lang || true

+ 5 - 0
.travis.yml

@@ -37,7 +37,12 @@ jobs:
     - stage: tests
       script: ./.github/travis/cmake-test.sh
 
+    # language checks
+    - stage: lang
+      script: ./.github/travis/cmake-lang.sh
+
 stages:
   - cmake
+  - lang
   - legacy
   - tests

+ 27 - 7
CMakeLists.txt

@@ -294,8 +294,7 @@ function(add_base_binary variant_name)
   target_include_directories(
     ${variant_name}
     PRIVATE ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/
-            ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/
-            ${CMAKE_SOURCE_DIR}/Firmware
+            ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/ ${CMAKE_SOURCE_DIR}/Firmware
     )
 
   target_link_libraries(${variant_name} avr_core)
@@ -373,20 +372,34 @@ function(fw_add_variant variant_name)
     COMMENT "Generating ${variant_name} language map"
     )
 
+  # Base targets for language checks
+  add_custom_target(check_lang_${variant_name})
+  add_dependencies(check_lang check_lang_${variant_name})
+
   # Build language catalogs
   set(LANG_BINS "")
   foreach(LANG IN LISTS SELECTED_LANGUAGES)
     set(LANG_BIN ${LANG_TMP_DIR}/${variant_name}_${LANG}.bin)
     set(PO_FILE "${CMAKE_SOURCE_DIR}/lang/po/Firmware_${LANG}.po")
 
+    # Full language checks
+    add_custom_target(
+      check_lang_${variant_name}_${LANG}
+      COMMENT "Checking ${variant_name} language ${LANG}"
+      COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-check.py --map ${LANG_MAP} ${PO_FILE}
+      DEPENDS ${LANG_MAP} ${PO_FILE}
+      USES_TERMINAL
+      )
+    add_dependencies(check_lang_${variant_name} check_lang_${variant_name}_${LANG})
+    add_dependencies(check_lang_${LANG} check_lang_${variant_name}_${LANG})
+
     add_custom_command(
       OUTPUT ${LANG_BIN}
-      #[[
-      # Check po file:
-      #COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lang/lang-check.py --no-warning --map ${LANG_MAP} ${PO_FILE}
-      #]]
+      # Check po file for errors _only_
+      COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-check.py --errors-only --map ${LANG_MAP} ${PO_FILE}
+      # Build the catalog
       COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-build.py ${LANG_MAP} ${PO_FILE} ${LANG_BIN}
-      # Check bin size:
+      # Check bin size
       COMMAND ${CMAKE_COMMAND} -DLANG_MAX_SIZE=${LANG_MAX_SIZE} -DLANG_FILE=${LANG_BIN} -P
               ${PROJECT_CMAKE_DIR}/Check_lang_size.cmake
       DEPENDS ${LANG_MAP} ${PO_FILE}
@@ -471,6 +484,13 @@ endfunction()
 
 if(CMAKE_CROSSCOMPILING)
 
+  # Main target for language checks
+  add_custom_target(check_lang)
+  foreach(LANG IN LISTS SELECTED_LANGUAGES)
+    add_custom_target(check_lang_${LANG})
+    add_dependencies(check_lang check_lang_${LANG})
+  endforeach()
+
   # build a list of all supported variants
   file(
     GLOB ALL_VARIANTS

+ 8 - 1
lang/lang-check.py

@@ -211,7 +211,7 @@ def check_translation(entry, msgids, is_pot, no_warning, no_suggest, warn_empty,
         return (errors == 0)
 
     # Missing translation
-    if len(translation) == 0 and (known_msgid or warn_empty):
+    if len(translation) == 0 and (warn_empty or (not no_warning and known_msgid)):
         errors += 1
         if rows == 1:
             print(yellow("[W]: Empty translation for \"%s\" on line %d" % (source, line)))
@@ -307,6 +307,9 @@ def main():
     parser.add_argument(
         "--no-suggest", action="store_true",
         help="Disable suggestions")
+    parser.add_argument(
+        "--errors-only", action="store_true",
+        help="Only check errors")
     parser.add_argument(
         "--pot", action="store_true",
         help="Do not check translations")
@@ -331,6 +334,10 @@ def main():
         print("{}: file does not exist or is not a regular file".format(args.po), file=stderr)
         return 1
 
+    if args.errors_only:
+        args.no_warning = True
+        args.no_suggest = True
+
     # load the symbol map to supress empty (but unused) translation warnings
     msgids = None
     if args.map: