@@ -218,22 +218,37 @@ MACRO(GENERATE_GUID VarName)
218
218
OUTPUT_STRIP_TRAILING_WHITESPACE)
219
219
ENDMACRO ()
220
220
221
- SET (INC_VAR 0)
221
+ # Make sure that WIX identifier created from a path matches all the rules:
222
+ # - it is shorter than 72 characters
223
+ # - doesn't contain reserver characters ('+', '-' and '/')
224
+ # ID_SET contains a global list of all identifiers which are too long.
225
+ # Every time we use an identifier which is too long we use its index in
226
+ # ID_SET to shorten the name.
227
+ SET_PROPERTY (GLOBAL PROPERTY ID_SET)
222
228
MACRO (MAKE_WIX_IDENTIFIER str varname)
223
229
STRING (REPLACE "/" "." ${varname} "${str} " )
230
+ STRING (REPLACE "+" "p" ${varname} "${str} " )
231
+ STRING (REPLACE "-" "m" ${varname} "${str} " )
224
232
STRING (REGEX REPLACE "[^a-zA-Z_0-9.]" "_" ${varname} "${${varname} }" )
225
233
STRING (LENGTH "${${varname} }" len)
234
+ # FIXME: the prefix length has to be controlled better
226
235
# Identifier should be smaller than 72 character
227
- # We have to cut down the length to 70 chars, since we add 2 char prefix
236
+ # We have to cut down the length to 40 chars, since we add prefixes
228
237
# pretty often
229
- IF (len GREATER 70)
230
- STRING (SUBSTRING "${${varname} }" 0 67 shortstr)
231
- MATH (EXPR INC_VAR ${INC_VAR} +1)
232
- SET (${varname} "${shortstr}${INC_VAR} " )
238
+ IF (len GREATER 40)
239
+ STRING (SUBSTRING "${${varname} }" 0 37 shortstr)
240
+ GET_PROPERTY (LOCAL_LIST GLOBAL PROPERTY ID_SET)
241
+ LIST (FIND LOCAL_LIST "${${varname} }" STRING_ID)
242
+ IF (${STRING_ID} EQUAL -1)
243
+ LIST (APPEND LOCAL_LIST "${${varname} }" )
244
+ SET_PROPERTY (GLOBAL PROPERTY ID_SET "${LOCAL_LIST} " )
245
+ LIST (LENGTH LOCAL_LIST STRING_ID)
246
+ MATH (EXPR STRING_ID "${STRING_ID} -1" )
247
+ ENDIF ()
248
+ SET (${varname} "${shortstr}${STRING_ID} " )
233
249
ENDIF ()
234
250
ENDMACRO ()
235
251
236
-
237
252
FUNCTION (TRAVERSE_FILES dir topdir file file_comp dir_root)
238
253
FILE (RELATIVE_PATH dir_rel ${topdir} ${dir} )
239
254
IF (dir_rel)
0 commit comments