Skip to content
  • mackyle's avatar
    gettext.h: add parentheses around N_ expansion if supported · 290c8e7a
    mackyle authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The gettext N_ macro is used to mark strings for translation
    without actually translating them.  At runtime the string is
    expected to be passed to the gettext API for translation.
    
    If two N_ macro invocations appear next to each other with only
    whitespace (or nothing at all) between them, the two separate
    strings will be marked for translation, but the preprocessor
    will then silently combine the strings into one and at runtime
    the string passed to gettext will not match the strings that
    were translated so no translation will actually occur.
    
    Avoid this by adding parentheses around the expansion of the
    N_ macro so that instead of ending up with two adjacent strings
    that are then combined by the preprocessor, two adjacent strings
    surrounded by parentheses result instead which causes a compile
    error so the mistake can be quickly found and corrected.
    
    However, since these string literals are typically assigned to
    static variables and not all compilers support parenthesized
    string literal assignments, allow this to be controlled by the
    Makefile with the default only enabled when the compiler is
    known to support the syntax.
    
    For now only __GNUC__ enables this by default which covers both
    gcc and clang which should result in early detection of any
    adjacent N_ macros.
    
    Although the necessary tests make the affected files a bit less
    elegant, the benefit of avoiding propagation of a translation-
    marking error to all the translation teams thus creating extra
    work for them when the error is eventually detected and fixed
    would seem to outweigh the minor inelegance the additional
    configuration tests introduce.
    
    Helped-by: default avatarJunio C Hamano <gitster@pobox.com>
    Signed-off-by: default avatarKyle J. McKay <mackyle@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    290c8e7a