2 * This file is part of the LibreOffice project.
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 * This file incorporates work covered by the following license notice:
10 * Licensed to the Apache Software Foundation (ASF) under one or more
11 * contributor license agreements. See the NOTICE file distributed
12 * with this work for additional information regarding copyright
13 * ownership. The ASF licenses this file to you under the Apache
14 * License, Version 2.0 (the "License"); you may not use this file
15 * except in compliance with the License. You may obtain a copy of
16 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 /* =====================================================
22 * global helper macros
23 * =====================================================*/
25 #define DOSTRING( x ) #x
26 #define STRING( x ) DOSTRING( x )
27 #define DOCONCAT2( x, y ) x##y
28 #define CONCAT2( x, y) DOCONCAT2(x,y)
29 #define DOCONCAT3( x, y, z ) x##y##z
30 #define CONCAT3( x, y, z ) DOCONCAT3(x,y,z)
31 #define DOCONCAT4( x, y, z, a ) x##y##z##a
32 #define CONCAT4( x, y, z, a ) DOCONCAT4(x,y,z,a)
33 #define DOCONCAT5( x, y, z, a, b ) x##y##z##a##b
34 #define CONCAT5( x, y, z, a, b ) DOCONCAT5(x,y,z,a,b)
35 #define DOCONCAT6( x, y, z, a, b, c ) x##y##z##a##b##c
36 #define CONCAT6( x, y, z, a, b, c ) DOCONCAT6(x,y,z,a,b,c)
37 #define DOCONCAT7( x, y, z, a, b, c, u) x##y##z##a##b##c##u
38 #define CONCAT7( x, y, z, a, b, c, u) DOCONCAT7(x,y,z,a,b,c,u)
39 #define DOCONCAT8( x, y, z, a, b, c, u, v) x##y##z##a##b##c##u##v
40 #define CONCAT8( x, y, z, a, b, c, u, v) DOCONCAT8(x,y,z,a,b,c,u,v)
41 #define DOCONCAT9( x, y, z, a, b, c, u, v, w) x##y##z##a##b##c##u##v##w
42 #define CONCAT9( x, y, z, a, b, c, u, v, w) DOCONCAT9(x,y,z,a,b,c,u,v,w)
44 #define MOD_NAME_DESC(id) \
45 ALL_LANG(Name,STR_NAME_##id); \
46 ALL_LANG(Description,STR_DESC_##id)
48 #define REG_VALUE_LNG(id) \
49 ALL_LANG(Value,STR_REG_VAL_##id);
53 #define UNXSUFFIX .dylib
60 #define EXENAME(name) STRING(name)
61 #define PROFILENAME(name) STRING(CONCAT2(name,rc))
63 #define EXENAME(name) STRING(CONCAT2(name,.exe))
64 #define PROFILENAME(name) STRING(CONCAT2(name,.ini))
68 #define GID_BRAND_DIR_ETC gid_Brand_Dir_Share
69 #define GID_DIR_PY gid_Brand_Dir_Share
70 #define GID_DIR_URE gid_Dir_Bundle_Contents
71 #define GID_DIR_URE_BIN gid_Brand_Dir_Program
72 #define GID_DIR_URE_JAVA gid_Dir_Classes
73 #define GID_DIR_URE_LIB gid_Dir_Frameworks
74 #define GID_DIR_URE_SHARE gid_Brand_Dir_Share_Ure
76 #define GID_BRAND_DIR_ETC gid_Brand_Dir_Program
77 #define GID_DIR_PY gid_Brand_Dir_Program
78 #define GID_DIR_URE gid_Dir_Common_Ure
79 #define GID_DIR_URE_BIN gid_Dir_Ure_Bin
80 #define GID_DIR_URE_JAVA gid_Dir_Ure_Java
81 #define GID_DIR_URE_LIB gid_Dir_Ure_Lib
82 #define GID_DIR_URE_SHARE gid_Dir_Ure_Share
85 #define RESFILENAME(name,lang) STRING(CONCAT3(name,lang,.res))
86 #define READMETXTFILENAME(name,lang,ext) STRING(CONCAT4(name,lang,.,ext))
87 #define READMEFILENAME(name,lang) STRING(CONCAT2(name,lang))
88 #define EXTRAFILENAME(name,lang) STRING(CONCAT3(name,lang,.zip))
89 #define EXTRAFILELISTNAME(prefix,name,lang) STRING(CONCAT4(prefix,name,lang,.filelist))
90 #define CONFIGLANGFILENAME(name,lang,ext) STRING(CONCAT4(name,lang,.,ext))
92 #define SCP2_OOO_BIN_DIR gid_Brand_Dir_Program
95 #define SCP2_OOO_LIB_DIR gid_Dir_Frameworks
97 #define SCP2_OOO_LIB_DIR SCP2_OOO_BIN_DIR
100 #define BIN_FILE_BODY \
103 #define LIB_FILE_BODY \
106 #define TXT_FILE_BODY \
109 #define USER_FILE_BODY \
112 #define PACKED_TXT_FILE_BODY \
116 #define ARCHIVE_TXT_FILE_BODY \
120 #ifdef WITH_HELPPACK_INTEGRATION
121 #define FILELIST_TXT_FILE_BODY_HELPPACK \
123 Styles = (FILELIST,FORCEHELPPACK,LANGUAGEMODULE)
125 #define FILELIST_TXT_FILE_BODY_HELPPACK \
127 Styles = (FILELIST,HELPPACK,LANGUAGEMODULE)
130 #define PACKAGE_FILELIST(id,name) \
132 Dir = FILELIST_DIR; \
134 Styles = (FILELIST, USE_INTERNAL_RIGHTS, PACKED); \
137 #define PACKED_LIB_FILE_BODY \
140 Dir = SCP2_OOO_LIB_DIR
142 #define LIBO_LIB_FILE(id,name) \
145 PACKED_LIB_FILE_BODY; \
148 #define LIBO_LIB_FILE_BINARYTABLE(id,name) \
151 PACKED_LIB_FILE_BODY; \
152 Styles = (PACKED, BINARYTABLE, BINARYTABLE_ONLY); \
155 #define LIBO_LIB_FILE_COMPONENTCONDITION(id,name,cond) \
158 PACKED_LIB_FILE_BODY; \
159 ComponentCondition = cond; \
162 #define SHLXTHDL_LIB_FILE(id,name) \
167 Dir = gid_Dir_Shlxthdl; \
170 #define SHLXTHDL_LIB_FILE_COMPONENTCONDITION(id,name,cond) \
175 Dir = gid_Dir_Shlxthdl; \
176 ComponentCondition = cond; \
180 // links are craeted at configure time by odk/config/setsdkenv_unix.sh.in
181 #define SDK_LIBRARY_LINK(id,name,target)
183 #define SDK_LIBRARY_LINK(id,name,target) \
187 Dir = gid_Dir_Lib_Sdk; \
191 #define SDK_LIBRARY_LINK(id,name,target) \
195 Dir = gid_Dir_Lib_Sdk; \
201 #define STD_RES_FILE(id,name) \
204 RESFILE_ALL_LANG(name); \
205 Dir = gid_Dir_Resource; \
209 #define STD_FONTWIN_FILE(id,name,fontname) \
212 Dir = gid_Dir_Fonts_Truetype; \
213 Styles = (PACKED,FONT,DONT_DELETE,FONT_WARN_IF_EXISTS); \
214 Name = STRING(name) ; \
215 NetDir = gid_Dir_Winfonts; \
219 #define STD_FONT_FILELIST(id,name) \
222 Dir = FILELIST_DIR; \
223 Styles = (FILELIST, PACKED, FONT_WARN_IF_EXISTS); \
229 #define STD_FONT_FILELIST(id,name) \
232 Dir = FILELIST_DIR; \
233 Styles = (FILELIST,PACKED,FONT,DONT_DELETE,FONT_WARN_IF_EXISTS); \
238 #define LIBO_JAR_FILE(id,name) \
242 Dir = gid_Dir_Classes; \
246 #define URE_JAR_FILE(id,name) \
250 Dir = GID_DIR_URE_JAVA; \
254 #define STD_PY_FILE(id,name) \
256 PACKED_TXT_FILE_BODY; \
262 #define CONDITIONAL_MODULE_ENTRY(name,modid) \
263 Module gid_Module_Root_Reg_##name \
265 Name = STRING(CONCAT2(gid_Module_Root_,name)); \
266 Description = STRING(CONCAT2(gid_Module_Root_,name)); \
268 Styles = (HIDDEN_ROOT); \
271 #define REGISTRY_ENTRY_OPEN_WITH(name,cond,doc_type,modid,key) \
272 RegistryItem gid_Regitem_OpenOffice_##cond##_OpenWith_##doc_type \
273 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
275 Subkey = STRING(CONCAT3(.,key,\OpenWithProgIDs)); \
276 Name = STRING(CONCAT2(LibreOffice.,name)); \
280 #define REGISTRY_ENTRY_OPEN_WITH_TMPL(name,cond,doc_type,modid,key) \
281 RegistryItem gid_Regitem_OpenOffice_##cond##_OpenWith_##doc_type \
282 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
284 Subkey = STRING(CONCAT3(.,key,\OpenWithProgIDs)); \
285 Name = STRING(CONCAT2(LibreOffice.,name)); \
289 #define CONDITIONAL_REGISTRY_ENTRY_EXT(name,cond,key) \
290 RegistryItem gid_Regitem__##name \
291 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
292 ModuleID = gid_Module_Root_Reg_##name; \
293 Subkey = STRING(CONCAT2(.,key)); \
294 Value = STRING(CONCAT2(LibreOffice.,name)); \
295 ComponentCondition = STRING(CONCAT3(REGISTER_,cond,=1)); \
298 #define REGISTRY_ENTRY_DOC(name,modid,disp_name) \
299 RegistryItem CONCAT2(gid_Regitem_Openoffice_,name) \
300 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
302 Subkey = STRING(CONCAT2(LibreOffice.,name)); \
303 REG_VALUE_LNG(disp_name) \
306 #define REGISTRY_ENTRY_APPUSERMODELID(name,modid,doc_type) \
307 RegistryItem CONCAT3(gid_Regitem_Openoffice_,name,_AppUserModelID) \
308 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
310 ComponentCondition = STRING(VersionNT >= 601); \
311 Subkey = STRING(CONCAT2(LibreOffice.,name)); \
312 Name = STRING(AppUserModelID); \
313 Value = STRING(CONCAT2(TheDocumentFoundation.LibreOffice.,doc_type)); \
316 #define REGISTRY_ENTRY_ICON(name,modid,icon_id) \
317 RegistryItem CONCAT3(gid_Regitem_Openoffice_,name,_Defaulticon) \
318 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
320 Subkey = STRING(CONCAT3(LibreOffice.,name,\DefaultIcon)); \
321 Value = "<progpath>\program\soffice.bin," STRING(icon_id); \
324 #define REGISTRY_ENTRY_SHELL(name,default,modid) \
325 RegistryItem CONCAT3(gid_Regitem_Openoffice_,name,_Shell) \
326 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
328 Subkey = STRING(CONCAT3(LibreOffice.,name,\shell)); \
329 Value = STRING(default); \
332 #define REGISTRY_ENTRY_NEW_CMD(name,modid,app) \
333 RegistryItem CONCAT3(gid_Regitem_Openoffice_,name,_Shell_New) \
334 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
336 Subkey = STRING(CONCAT3(LibreOffice.,name,\shell\new)); \
339 RegistryItem CONCAT3(gid_Regitem_Openoffice_,name,_Shell_New_Command) \
340 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
342 Subkey = STRING(CONCAT3(LibreOffice.,name,\shell\new\command)); \
343 Value = "\"<progpath>\program\\" STRING(app) "\" -n \"%1\""; \
346 #define REGISTRY_ENTRY_OPEN_CMD(name,modid,app) \
347 RegistryItem CONCAT3(gid_Regitem_Openoffice_,name,_Shell_Open_Command) \
348 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
350 Subkey = STRING(CONCAT3(LibreOffice.,name,\shell\open\command)); \
351 Value = "\"<progpath>\program\\" STRING(app) "\" -o \"%1\""; \
354 #define REGISTRY_ENTRY_PRINT_CMD(name,modid,app) \
355 RegistryItem CONCAT3(gid_Regitem_Openoffice_,name,_Shell_Print_Command) \
356 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
358 Subkey = STRING(CONCAT3(LibreOffice.,name,\shell\print\command)); \
359 Value = "\"<progpath>\program\\" STRING(app) "\" -p \"%1\""; \
362 #define REGISTRY_ENTRY_PRINTTO_CMD(name,modid,app) \
363 RegistryItem CONCAT3(gid_Regitem_Openoffice_,name,_Shell_Printto_Command) \
364 ParentID = PREDEFINED_HKEY_CLASSES_ROOT; \
366 Subkey = STRING(CONCAT3(LibreOffice.,name,\shell\printto\command)); \
367 Value = "\"<progpath>\program\\" STRING(app) "\" -pt \"%2\" \"%1\""; \
370 #define REGISTRY_ENTRY_CAPABILITIES(name,modid,key,doc_type) \
371 RegistryItem CONCAT2(gid_Regitem_Software_Manufacturer_Productname_Productversion_Capabilities_FileAssociations_,name) \
372 ParentID = PREDEFINED_HKEY_LOCAL_MACHINE; \
374 Subkey = STRING(Software\%MANUFACTURER\%PRODUCTNAME%PRODUCTADDON\%PRODUCTVERSION\Capabilities\FileAssociations); \
375 Name = STRING(CONCAT2(.,key)); \
376 Value = STRING(CONCAT2(LibreOffice.,name)); \
380 #define REGISTRY_ENTRY_TEMPLATE_CAPABILITIES(name,modid,key,doc_type) \
381 RegistryItem CONCAT2(gid_Regitem_Software_Manufacturer_Productname_Productversion_Capabilities_FileAssociations_,name) \
382 ParentID = PREDEFINED_HKEY_LOCAL_MACHINE; \
384 Subkey = STRING(Software\%MANUFACTURER\%PRODUCTNAME%PRODUCTADDON\%PRODUCTVERSION\Capabilities\FileAssociations); \
385 Name = STRING(CONCAT2(.,key)); \
386 Value = STRING(CONCAT2(LibreOffice.,name)); \
390 #define REGISTRY_ENTRY_KINDMAP(name, modid, key) \
391 RegistryItem CONCAT2(gid_Regitem_Software_Manufacturer_Productname_Productversion_Explorer_KindMap_,name) \
392 ParentID = PREDEFINED_HKEY_LOCAL_MACHINE; \
394 ComponentCondition = STRING(VersionNT >= 600); \
395 Subkey = STRING(SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap); \
396 Name = STRING(CONCAT2(.,key)); \
397 Value = STRING(document); \
400 #define CONDITIONAL_REGISTER_DOC_EXTENSION(name,modid,key,cond,disp_name,icon_id,app,default,doc_type) \
401 CONDITIONAL_MODULE_ENTRY(name,modid) \
402 REGISTRY_ENTRY_OPEN_WITH(name,cond,doc_type,modid,key) \
403 CONDITIONAL_REGISTRY_ENTRY_EXT(name,cond,key) \
404 REGISTRY_ENTRY_DOC(name,modid,disp_name) \
405 REGISTRY_ENTRY_APPUSERMODELID(name,modid,doc_type) \
406 REGISTRY_ENTRY_ICON(name,modid,icon_id) \
407 REGISTRY_ENTRY_SHELL(name,default,modid) \
408 REGISTRY_ENTRY_NEW_CMD(name,modid,app) \
409 REGISTRY_ENTRY_OPEN_CMD(name,modid,app) \
410 REGISTRY_ENTRY_PRINT_CMD(name,modid,app) \
411 REGISTRY_ENTRY_PRINTTO_CMD(name,modid,app) \
412 REGISTRY_ENTRY_CAPABILITIES(name,modid,key,doc_type) \
414 #define CONDITIONAL_REGISTER_DOCTEMPLATE_EXTENSION(name,modid,key,cond,disp_name,icon_id,app,default,doc_type) \
415 CONDITIONAL_MODULE_ENTRY(name,modid) \
416 REGISTRY_ENTRY_OPEN_WITH_TMPL(name,cond,doc_type,modid,key) \
417 CONDITIONAL_REGISTRY_ENTRY_EXT(name,cond,key) \
418 REGISTRY_ENTRY_DOC(name,modid,disp_name) \
419 REGISTRY_ENTRY_APPUSERMODELID(name,modid,doc_type) \
420 REGISTRY_ENTRY_ICON(name,modid,icon_id) \
421 REGISTRY_ENTRY_SHELL(name,default,modid) \
422 REGISTRY_ENTRY_NEW_CMD(name,modid,app) \
423 REGISTRY_ENTRY_OPEN_CMD(name,modid,app) \
424 REGISTRY_ENTRY_PRINT_CMD(name,modid,app) \
425 REGISTRY_ENTRY_PRINTTO_CMD(name,modid,app) \
426 REGISTRY_ENTRY_TEMPLATE_CAPABILITIES(name,modid,key,doc_type) \
432 #define REGISTER_PROPERTY_HANDLER_FOR_EXTENSION(extension) \
433 RegistryItem CONCAT2(gid_Regitem_Software_Microsoft_Windows_CurrentVersion_PropertySystem_PropertyHandlers_,extension) \
434 ParentID = PREDEFINED_HKEY_LOCAL_MACHINE; \
435 ModuleID = gid_Module_Optional_Winexplorerext; \
436 ComponentCondition = "VersionNT >= 600"; \
437 Subkey = STRING(CONCAT2(SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers\.,extension)); \
438 Value = "{AE424E85-F6DF-4910-A6A9-438797986431}"; \
441 RegistryItem CONCAT3(gid_Regitem_Software_Microsoft_Windows_CurrentVersion_PropertySystem_PropertyHandlers_,extension,_x64) \
442 ParentID = PREDEFINED_HKEY_LOCAL_MACHINE; \
443 ModuleID = gid_Module_Optional_Winexplorerext_x64; \
444 ComponentCondition = "VersionNT64 >= 600"; \
445 Subkey = STRING(CONCAT2(SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers\.,extension)); \
446 Value = "{AE424E85-F6DF-4910-A6A9-438797986431}"; \
452 #define REGISTER_PROPERTY_HANDLER_FOR_EXTENSION(extension) \
453 RegistryItem CONCAT2(gid_Regitem_Software_Microsoft_Windows_CurrentVersion_PropertySystem_PropertyHandlers_,extension) \
454 ParentID = PREDEFINED_HKEY_LOCAL_MACHINE; \
455 ModuleID = gid_Module_Optional_Winexplorerext; \
456 ComponentCondition = "VersionNT >= 600"; \
457 Subkey = STRING(CONCAT2(SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers\.,extension)); \
458 Value = "{AE424E85-F6DF-4910-A6A9-438797986431}"; \
462 #define REGISTER_PROPERTY_HANDLER_FOR_EXTENSION(extension) // empty
468 #define SCP2_URE_DL_DIR gid_Dir_Ure_Bin
469 #define SCP2_URE_DL_NORMAL(n) n ".dll"
470 #define SCP2_URE_DL_BARE(n) n ".dll"
471 #define SCP2_URE_DL_VER(n, v) n v ".dll"
472 #define SCP2_URE_DL_COMID_VER(n, v) n v STRING(COMID) ".dll"
473 #define SCP2_URE_DL_COMID_NORMAL(n) n STRING(COMID) ".dll"
474 #define SCP2_URE_DL_UNO_VER(n, v) n v ".dll"
475 #define SCP2_URE_DL_UNO_COMID_VER(n, v) n v STRING(COMID) ".dll"
476 #define SCP2_URE_SHARE_DIR gid_Dir_Common_Ure
478 #define SCP2_URE_DL_DIR GID_DIR_URE_LIB
479 #define SCP2_URE_DL_NORMAL(n) "lib" n STRING(UNXSUFFIX)
480 #define SCP2_URE_DL_BARE(n) n STRING(UNXSUFFIX)
481 #define SCP2_URE_DL_VER(n, v) "lib" n STRING(UNXSUFFIX) "." v
482 #define SCP2_URE_DL_COMID_VER(n, v) \
483 "lib" n STRING(COMID) STRING(UNXSUFFIX) "." v
484 #define SCP2_URE_DL_COMID_NORMAL(n) \
485 "lib" n STRING(COMID) STRING(UNXSUFFIX)
486 #define SCP2_URE_DL_UNO_VER(n, v) "libuno_" n STRING(UNXSUFFIX) "." v
487 #define SCP2_URE_DL_UNO_NORMAL(n) "libuno_" n STRING(UNXSUFFIX)
488 #define SCP2_URE_DL_UNO_COMID_VER(n, v) \
489 "libuno_" n STRING(COMID) STRING(UNXSUFFIX) "." v
490 #define SCP2_URE_DL_UNO_COMID_NORMAL(n) \
491 "libuno_" n STRING(COMID) STRING(UNXSUFFIX)
492 #define SCP2_URE_SHARE_DIR GID_DIR_URE_SHARE
495 #define SCP2_URE_JDL_NORMAL(n) "lib" n ".jnilib"
497 #define SCP2_URE_JDL_NORMAL(n) SCP2_URE_DL_NORMAL(n)
501 #define FILELIST_DIR PREDEFINED_PROGDIR
502 #define FILELIST_SDK_DIR PREDEFINED_PROGDIR
504 #define FILELIST_DIR gid_Dir_Brand_Root
506 #define FILELIST_SDK_DIR gid_Dir_Sdkoo_Root
508 #define FILELIST_SDK_DIR PREDEFINED_PROGDIR
512 #define UI_FILELIST(name, file) \
513 File CONCAT2(gid_File_Share_Config_Sofficecfg_uiconfig_, name) \
515 Styles = (FILELIST); \
516 Dir = FILELIST_DIR; \
520 #include <langmacros.inc>
522 #define UI_FILELIST_ALL_LANG(name, file) \
523 File CONCAT3(gid_File_Share_Config_Sofficecfg_uiconfig_, name, _Lang) \
526 Dir = gid_Dir_Share_Config_Sofficecfg; \
527 UI_ALL_LANG_BUT_EN_US(file); \
530 #define URE_PRIVATE_LIB(id,name) \
533 Dir = SCP2_URE_DL_DIR; \
538 #define URE_EXECUTABLE(id,name) \
541 Dir = GID_DIR_URE_BIN; \
546 #define LIBO_EXECUTABLE(id,name) \
549 Dir = gid_Brand_Dir_Program; \
554 #define SDK_EXECUTABLE(id,name) \
557 Dir = gid_Dir_Sdkoo_Bin; \
562 #define GALLERY_NAME(id) \
564 #define GALLERY_FILELIST(id) \
565 File gid_File_Extra_Gall##id \
566 Dir = FILELIST_DIR; \
568 Styles = (FILELIST, WORKSTATION); \
569 Name = STRING(CONCAT3(Gallery/,id,.filelist)); \
571 File gid_File_Extra_GallFiles##id \
572 Dir = FILELIST_DIR; \
574 Styles = (FILELIST, WORKSTATION); \
575 Name = STRING(CONCAT3(Gallery/Files/,id,.filelist)); \