Library.tmpl revision 11d341ca
1/* 2 * Library imakefile info - this contains any special redefinitions, etc. 3 * that Imakefiles in the various library subtrees will need. 4 * 5 * Before including this, you must set the following boolean variables: 6 * DoNormalLib, DoSharedLib, DoDebugLib, DoProfileLib 7 * 8 * To get automatic generation of standard rules, also set the variables: 9 * LibName, SoRev, HasSharedData, and optionally HugeLibrary and IncSubdir. 10 * 11 * To suppress installation of the library define LibInstall NO. 12 * To suppress creating (and installing) the library define LibCreate NO. 13 * To suppress installing headers define LibHeaders NO. 14 * Define LargePICTable YES if large (32-bit) PIC tables are needed. 15 */ 16 17XCOMM $Xorg: Library.tmpl,v 1.3 2000/08/17 19:41:46 cpqbld Exp $ 18 19 20 21 22XCOMM $XFree86: xc/config/cf/Library.tmpl,v 3.23tsi Exp $ 23 24#ifndef DoNormalLib 25#define DoNormalLib NO 26#endif 27#ifndef DoSharedLib 28#define DoSharedLib NO 29#endif 30#ifndef DoDebugLib 31#define DoDebugLib NO 32#endif 33#ifndef DoProfileLib 34#define DoProfileLib NO 35#endif 36#ifndef DoExtraLib 37#define DoExtraLib NO 38#endif 39 40#ifndef HasSharedData 41#define HasSharedData NO 42#endif 43#ifndef HugeLibrary 44#define HugeLibrary NO 45#endif 46 47#ifndef ShlibBindGlobals 48#define ShlibBindGlobals NO 49#endif 50 51#if ShlibBindGlobals && defined(ShlibGlobalsFlags) 52SHLIBGLOBALSFLAGS = ShlibGlobalsFlags 53#endif 54 55#ifndef LibraryCplusplusOptions 56# if DoSharedLib && defined(SharedLibraryCplusplusOptions) 57# define LibraryCplusplusOptions SharedLibraryCplusplusOptions 58# else 59# define LibraryCplusplusOptions DefaultCplusplusOptions 60# endif 61#endif 62#ifndef LibraryDefines 63# define LibraryDefines StandardDefines 64#endif 65#ifndef LibraryDebugOpt 66# define LibraryDebugOpt /**/ 67#endif 68/* Note: Changing LibraryCDebugFlags has no effect because CDEBUGFLAGS is over- 69 ridden by PassCDebugFlags in the parent Makefile or toplevel xmakefile. */ 70#ifndef LibraryCDebugFlags 71# define LibraryCDebugFlags DefaultCDebugFlags 72#endif 73#ifndef LibraryCplusplusDebugFlags 74# define LibraryCplusplusDebugFlags DefaultCplusplusDebugFlags 75#endif 76#ifndef SeparateSharedCompile 77# define SeparateSharedCompile YES 78#endif 79 80#ifdef CrossCompileDir 81# ifndef StripPath 82# define StripPath(x) `echo x|sed "s%.*/%%"` 83# endif 84#endif 85 86#ifndef CplusplusSource 87# ifndef LibraryCcCmd 88# if DoSharedLib && defined(SharedLibraryCcCmd) 89# define LibraryCcCmd SharedLibraryCcCmd 90# else 91# define LibraryCcCmd CcCmd 92# endif 93# endif 94# ifndef LibraryCCOptions 95# if DoSharedLib && defined(SharedLibraryCCOptions) 96# define LibraryCCOptions SharedLibraryCCOptions 97# else 98# define LibraryCCOptions DefaultCCOptions 99# endif 100# endif 101 102#ifdef CrossCompileDir 103# ifndef CrossLibraryCcCmd 104# define CrossLibraryCcCmd Concat3(CrossCompileDir,/,StripPath(LibraryCcCmd)) 105# endif 106#endif 107 108#ifdef CrossCompileDir 109 CC = CrossLibraryCcCmd 110#else 111 CC = LibraryCcCmd 112#endif 113 CCOPTIONS = LibraryCCOptions 114STD_DEFINES = LibraryDefines $(PROJECT_DEFINES) 115CDEBUGFLAGS = LibraryCDebugFlags 116CLIBDEBUGFLAGS = LibraryDebugOpt 117 CFLAGS = $(CDEBUGFLAGS) $(CLIBDEBUGFLAGS) $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES) 118# if defined(LargePICTable) && LargePICTable && defined(LargePositionIndependentCFlags) 119 PICFLAGS = LargePositionIndependentCFlags 120# endif 121#else 122# ifndef CrossCompileDir 123# ifndef LibraryCplusplusCmd 124# if DoSharedLib && defined(SharedLibraryCplusplusCmd) 125# define LibraryCplusplusCmd SharedLibraryCplusplusCmd 126# else 127# define LibraryCplusplusCmd CplusplusCmd 128# endif 129# endif 130# else 131# ifndef CrossLibraryCplusplusCmd 132# if DoSharedLib && defined(SharedLibraryCplusplusCmd) 133# define CrossLibraryCplusplusCmd Concat3(CrossCompileDir,/,StripPath(SharedLibraryCplusplusCmd)) 134# else 135# define CrossLibraryCplusplusCmd Concat3(CrossCompileDir,/,StripPath(CplusplusCmd)) 136# endif 137# endif 138# endif 139 140# ifndef LibraryCplusplusOptions 141# if DoSharedLib && defined(SharedLibraryCplusplusOptions) 142# define LibraryCplusplusOptions SharedLibraryCplusplusOptions 143# else 144# define LibraryCplusplusOptions DefaultCplusplusOptions 145# endif 146# endif 147 148#ifdef CrossCompileDir 149 CXX = CrossLibraryCplusplusCmd 150#else 151 CXX = LibraryCplusplusCmd 152#endif 153 CXXOPTIONS = LibraryCplusplusOptions 154 STD_DEFINES = LibraryDefines $(PROJECT_DEFINES) 155CXXDEBUGFLAGS = LibraryCplusplusDebugFlags 156CXXLIBDEBUGFLAGS = LibraryDebugOpt 157 CXXFLAGS = $(CXXDEBUGFLAGS) $(CXXLIBDEBUGFLAGS) $(CXXOPTIONS) $(THREADS_CXXFLAGS) $(CXXDEFINES) 158# if defined(LargePICTable) && LargePICTable 159# ifdef LargePositionIndependentCplusplusFlags 160 CXXPICFLAGS = LargePositionIndependentCplusplusFlags 161# elif defined(LargePositionIndependentCFlags) 162 CXXPICFLAGS = LargePositionIndependentCFlags 163# endif 164# endif 165#endif 166 167#ifdef LibraryMTDefines 168LIB_MT_DEFINES = LibraryMTDefines 169#endif 170 171#if defined(IHaveSubdirs) && HasSymLinks && !defined(NoLibSubdirs) 172#define _LibMkdir LibMkdirLinkSubdirs 173#else 174#define _LibMkdir LibMkdir 175#endif 176 177#if DoDebugLib 178# define _DebuggedLibMkdir() _LibMkdir(debugger) 179# define _DebuggedObjCompile(options) DebuggedLibObjCompile(options) 180# define _DebuggedObjCplusplusCompile(options) DebuggedLibObjCplusplusCompile(options) 181# define _DebuggedCleanDir() LibCleanDir(debugger) 182#else 183# define _DebuggedLibMkdir() $(_NULLCMD_) 184# define _DebuggedObjCompile(options) $(_NULLCMD_) 185# define _DebuggedObjCplusplusCompile(options) $(_NULLCMD_) 186# define _DebuggedCleanDir() $(_NULLCMD_) 187#endif 188 189#if DoProfileLib 190# define _ProfiledLibMkdir() _LibMkdir(profiled) 191# define _ProfiledObjCompile(options) ProfiledLibObjCompile(options) 192# define _ProfiledObjCplusplusCompile(options) ProfiledLibObjCplusplusCompile(options) 193# define _ProfiledCleanDir() LibCleanDir(profiled) 194#else 195# define _ProfiledLibMkdir() $(_NULLCMD_) 196# define _ProfiledObjCompile(options) $(_NULLCMD_) 197# define _ProfiledObjCplusplusCompile(options) $(_NULLCMD_) 198# define _ProfiledCleanDir() $(_NULLCMD_) 199#endif 200 201#if !DoNormalLib 202# define _NormalLibMkdir() $(_NULLCMD_) 203# define _NormalObjCompile(options) $(_NULLCMD_) 204# define _NormalObjCplusplusCompile(options) $(_NULLCMD_) 205# define _NormalCleanDir() $(_NULLCMD_) 206#else 207# if DoSharedLib && SeparateSharedCompile 208# define _NormalLibMkdir() _LibMkdir(unshared) 209# define _NormalObjCompile(options) UnsharedLibObjCompile(options) 210# define _NormalObjCplusplusCompile(options) UnsharedLibObjCplusplusCompile(options) 211# define _NormalCleanDir() LibCleanDir(unshared) 212# else 213# define _NormalLibMkdir() $(_NULLCMD_) 214# if !DoSharedLib && defined(IncludeSharedObjectInNormalLib) 215# define _NormalObjCompile(options) NormalRelocLibObjCompile(options) 216# else 217# define _NormalObjCompile(options) NormalLibObjCompile(options) 218# endif 219# define _NormalObjCplusplusCompile(options) NormalLibObjCplusplusCompile(options) 220# define _NormalCleanDir() $(_NULLCMD_) 221# endif 222#endif 223 224#if !DoSharedLib || (DoNormalLib && !SeparateSharedCompile) 225# define _SharedObjCompile(options) $(_NULLCMD_) 226# define _SharedObjCplusplusCompile(options) $(_NULLCMD_) 227#else 228# if SeparateSharedCompile 229# define _SharedObjCompile(options) NormalSharedLibObjCompile(options) 230# define _SharedObjCplusplusCompile(options) NormalSharedLibObjCplusplusCompile(options) 231#else 232# define _SharedObjCompile(options) NormalLibObjCompile(options) 233# define _SharedObjCplusplusCompile(options) NormalLibObjCplusplusCompile(options) 234#endif 235#endif 236 237#ifndef LibInstallBuild 238#define LibInstallBuild NO 239#endif 240 241#if DoExtraLib && defined(ExtraLibRules) 242# define _ExtraLibMkdir() ExtraLibMkdir() 243# define _ExtraObjCompile(options) ExtraObjCompile(options) 244# define _ExtraObjCplusplusCompile(options) ExtraObjCplusplusCompile(options) 245# define _ExtraCleanDir() ExtraCleanDir() 246#else 247# define _ExtraLibMkdir() $(_NULLCMD_) 248# define _ExtraObjCompile(options) $(_NULLCMD_) 249# define _ExtraObjCplusplusCompile(options) $(_NULLCMD_) 250# define _ExtraCleanDir() $(_NULLCMD_) 251#endif 252 253#ifndef CplusplusSource 254# define SRCsuf c 255# define Isuf i 256#else 257# define SRCsuf CCsuf 258# define Isuf ii 259# ifdef SunArchitecture 260.SUFFIXES: Concat(.,CCsuf) 261# endif 262#endif 263 264#define _CompileObj(target, options) @@\ 265target @@\ 266 _DebuggedObjCompile(options) @@\ 267 _ProfiledObjCompile(options) @@\ 268 _NormalObjCompile(options) @@\ 269 _ExtraObjCompile(options) @@\ 270 _SharedObjCompile(options) 271 272#ifndef SeparateSharedCompile 273# define _CompileObjSeparateOpts(target,staticopts,sharedopts) \ 274 _CompileObj(target,sharedopts) 275#else 276# define _CompileObjSeparateOpts(target,staticopts,sharedopts) @@\ 277target @@\ 278 _DebuggedObjCompile(staticopts) @@\ 279 _ProfiledObjCompile(staticopts) @@\ 280 _NormalObjCompile(staticopts) @@\ 281 _ExtraObjCompile(staticopts) @@\ 282 _SharedObjCompile(sharedopts) 283#endif 284 285#ifdef CplusplusSource 286# define _CompileObjCplusplus(target, options) @@\ 287target @@\ 288 _DebuggedObjCplusplusCompile(options) @@\ 289 _ProfiledObjCplusplusCompile(options) @@\ 290 _NormalObjCplusplusCompile(options) @@\ 291 _ExtraObjCplusplusCompile(options) @@\ 292 _SharedObjCplusplusCompile(options) 293#else 294# define _CompileObjCplusplus(target, options) 295#endif 296 297#ifndef LibraryObjectRule 298# define LibraryObjectRule() @@\ 299all:: @@\ 300 _DebuggedLibMkdir() @@\ 301 _ProfiledLibMkdir() @@\ 302 _NormalLibMkdir() @@\ 303 _ExtraLibMkdir() @@\ 304 @@\ 305includes:: @@\ 306 _DebuggedLibMkdir() @@\ 307 _ProfiledLibMkdir() @@\ 308 _NormalLibMkdir() @@\ 309 _ExtraLibMkdir() @@\ 310 @@\ 311_CompileObj(.c.Osuf:,$(_NOOP_)) @@\ 312_CompileObjCplusplus(.SRCsuf.Osuf:,$(_NOOP_)) @@\ 313 @@\ 314clean:: @@\ 315 _DebuggedCleanDir() @@\ 316 _ProfiledCleanDir() @@\ 317 _NormalCleanDir() @@\ 318 _ExtraCleanDir() @@\ 319 320#endif /* LibraryObjectRule */ 321 322#ifndef SpecialLibObjectRule 323# define SpecialLibObjectRule(objs,depends,options) @@\ 324_CompileObj(objs: depends,options) 325#endif /* SpecialLibObjectRule */ 326 327#ifndef SpecialCLibObjectRule 328# define SpecialCLibObjectRule(basename,depends,options) @@\ 329_CompileObj(basename.Osuf: basename.SRCsuf depends,options) @@\ 330 @@\ 331basename.Isuf: basename.SRCsuf depends @@\ 332 CPPOnlyCompile(basename.SRCsuf,options) @@\ 333 @@\ 334CenterLoadTarget(debug_src,basename.SRCsuf,NullParameter,$(ALLDEFINES) options) 335#endif /* SpecialCLibObjectRule */ 336 337#ifndef SpecialCLibObjectRuleSeparateOpts 338# define SpecialCLibObjectRuleSeparateOpts(basename,depends,staticopts,shopts) @@\ 339_CompileObjSeparateOpts(basename.Osuf: basename.SRCsuf depends,staticopts,shopts) @@\ 340 @@\ 341basename.Isuf: basename.SRCsuf depends @@\ 342 CPPOnlyCompile(basename.SRCsuf,sharedopts) @@\ 343 @@\ 344CenterLoadTarget(debug_src,basename.SRCsuf,NullParameter,$(ALLDEFINES) options) 345#endif /* SpecialCLibObjectRuleSepareateOpts */ 346 347#ifndef SpecialCplusplusLibObjectRule 348# define SpecialCplusplusLibObjectRule(basename,depends,options) @@\ 349_CompileObjCplusplus(basename.Osuf: basename.SRCsuf depends,options) @@\ 350 @@\ 351CenterLoadTarget(debug_src,basename.SRCsuf,NullParameter,$(ALLDEFINES) options) 352#endif /* SpecialCplusplusLibObjectRule */ 353 354/* 355 * ToolkitMakeStrings generates a string-table, i.e., a C source 356 * file and the matching header(s), e.g., Xt's StringDefs.c, StringDefs.h, 357 * and Shell.h files; or Motif's XmStrDefs.c and XmStrDefs.h files. 358 * 359 * The 'files' argument is the list of files that will be produced by 360 * this rule, e.g., for Xt they would be "Shell.h StringDefs.c StringDefs.h" 361 * and for Motif they would be "XmStrDefs.c XmStrDefs.h". 362 * 363 * The 'source' argument is the string-list file to be parsed, e.g., in 364 * Xt that would be "util/string.list". For Motif 2.0 it would be 365 * "../../tools/makestr/xmstring.list", and for Motif-CDE1 it would be 366 * "util/xmstring.list". 367 * 368 * The 'options' argument is passed by the library's Imakefile, see the 369 * Xt Imakefile for an example. Typically this would be nothing, -intelabi, 370 * or -sparcabi; there are other choices, but these are typical. 371 * 372 * The 'depends' argument names additional files the target files 373 * depend on. It should name the #ctmpl and #htmpl files from the 374 * 'source' file. 375 * 376 * The 'dest' argument is the C source output file. For Xt this should 377 * be "StringDefs.c", and for all versions of Motif it would be "XmStrDefs.c" 378 * 379 * Headers are generated and named according to data in the 'source' 380 * file. 381 */ 382/* 383 * The NoCmpScript 384 * prevents clearmake from trying to remake makestrs if it exists. 385 * Including both $(MAKESTRS) and $(MAKESTRS).o as primary targets 386 * prevents clearmake from trying to recompile makestrs from here. 387 * We have includes, not files, depend on makestrs to try to get 388 * clearmake to wink in the files. Bug in clearmake 2.0.2? 389 */ 390 391#ifndef MakeStringsDependency 392# ifndef UseInstalled 393# define MakeStringsDependency @@\ 394MAKESTRS = $(CONFIGSRC)/util/makestrs @@\ 395NoCmpScript(HostProgramTargetName($(MAKESTRS)) $(MAKESTRS).Osuf) @@\ 396 @@\ 397HostProgramTargetName($(MAKESTRS)) $(MAKESTRS).Osuf: @@\ 398 cd $(CONFIGSRC)/util && $(MAKE) HostProgramTargetName(makestrs) @@\ 399 @@\ 400includes:: HostProgramTargetName($(MAKESTRS)) 401# else 402# define MakeStringsDependency /**/ 403# endif 404#endif 405 406#ifndef ToolkitMakeStrings 407# if defined(LibTookitMakeStringsDependency) && LibTookitMakeStringsDependency 408# define ToolkitMakeStrings(files,source,options,depends,dest) @@\ 409files: source depends @@\ 410 RemoveFiles(files) @@\ 411 RunProgram(MAKESTRS,options < source > dest) @@\ 412 @@\ 413AllTarget(files) @@\ 414 @@\ 415includes:: files @@\ 416 @@\ 417depend:: files @@\ 418 @@\ 419clean:: @@\ 420 RemoveFiles(files) 421# else 422# define ToolkitMakeStrings(files,source,options,depends,dest) @@\ 423MakeStringsDependency @@\ 424 @@\ 425files: source depends @@\ 426 RemoveFiles(files) @@\ 427 RunProgram(MAKESTRS,options < source > dest) @@\ 428 @@\ 429AllTarget(files) @@\ 430 @@\ 431includes:: files @@\ 432 @@\ 433depend:: files @@\ 434 @@\ 435clean:: @@\ 436 RemoveFiles(files) 437# endif 438#endif /* ToolkitMakeStrings */ 439 440#ifdef LibName 441 442LIBNAME = LibName 443 444# if defined(LibTookitMakeStringsDependency) && LibTookitMakeStringsDependency 445/* 446 * Do ToolkitMakeStrings() before BuildIncludes so makestrs is still 447 * built first, even if the generated header will be installed. 448 */ 449MakeStringsDependency 450# endif 451 452LibraryObjectRule() 453 454# undef _LinkBuildLibrary 455# if !defined(LibInstall) || LibInstall || LibInstallBuild 456# define _LinkBuildLibrary(lib) LinkBuildLibrary(lib) 457# else 458# define _LinkBuildLibrary(lib) $(_NULLCMD_) 459# endif 460 461# if defined(LibBuild) && !LibBuild 462# define LibCreate NO 463# endif 464 465# if !defined(LibCreate) || LibCreate 466# if DoSharedLib 467# if HugeLibrary && defined(SharedLibraryTarget3) 468SharedLibraryTarget3($(LIBNAME),$(SoRev),$(OBJS1),$(OBJS2),$(OBJS3) $(EXTRASHAREDOBJS),.,.) 469# else 470# if defined(SharedLibtoolRev) && defined(SharedLibtoolLibraryTarget) 471SharedLibtoolLibraryTarget($(LIBNAME),SharedLibtoolRev,$(OBJS) $(EXTRASHAREDOBJS),.,.) 472# else 473SharedLibraryTarget($(LIBNAME),$(SoRev),$(OBJS) $(EXTRASHAREDOBJS),.,.) 474# endif 475# endif 476# if !defined(LibInstall) || LibInstall 477# if defined(SharedLibtoolRev) && defined(InstallSharedLibtoolLibrary) 478InstallSharedLibtoolLibrary($(LIBNAME),SharedLibtoolRev,$(SHLIBDIR)) 479# else 480InstallSharedLibrary($(LIBNAME),$(SoRev),$(SHLIBDIR)) 481# endif 482# endif 483# if HasSharedData 484SharedLibraryDataTarget($(LIBNAME),$(SoRev),$(UNSHAREDOBJS)) 485# if !defined(LibInstall) || LibInstall 486InstallSharedLibraryData($(LIBNAME),$(SoRev),$(SHLIBDIR)) 487# endif 488# endif 489# endif 490# if DoNormalLib 491# if HugeLibrary 492# if DoSharedLib && SeparateSharedCompile 493UnsharedLibraryTarget3($(LIBNAME),$(OBJS1),$(OBJS2),$(OBJS3) $(EXTRAUNSHAREDOBJS),unshared,..) 494# else 495NormalLibraryTarget3($(LIBNAME),$(OBJS1),$(OBJS2),$(OBJS3) $(EXTRAUNSHAREDOBJS)) 496# endif 497# else 498# if DoSharedLib && SeparateSharedCompile 499UnsharedLibraryTarget($(LIBNAME),$(OBJS) $(EXTRAUNSHAREDOBJS),unshared,..) 500# else 501NormalLibraryTarget($(LIBNAME),$(OBJS) $(EXTRAUNSHAREDOBJS)) 502# endif 503# endif 504# if !defined(LibInstall) || LibInstall 505InstallLibrary($(LIBNAME),$(USRLIBDIR)) 506# endif 507# endif 508# if DoProfileLib 509ProfiledLibraryTarget($(LIBNAME),$(OBJS) $(EXTRAUNSHAREDOBJS)) 510# if !defined(LibInstall) || LibInstall 511InstallLibrary($(LIBNAME)_p,$(USRLIBDIR)) 512# endif 513# endif 514# if DoDebugLib 515DebuggedLibraryTarget($(LIBNAME),$(OBJS) $(EXTRAUNSHAREDOBJS)) 516# if !defined(LibInstall) || LibInstall 517InstallLibrary($(LIBNAME)_d,$(USRLIBDIR)) 518# endif 519# endif 520# if DoExtraLib && defined(ExtraLibRules) 521ExtraLibraryTarget($(LIBNAME),$(SoRev),$(OBJS) $(EXTRAUNSHAREDOBJS)) 522# if !defined(LibInstall) || LibInstall 523ExtraInstallLibrary($(LIBNAME),$(SoRev)) 524# endif 525# endif 526 527LintLibraryTarget($(LIBNAME),$(SRCS)) 528# if !defined(LibInstall) || LibInstall 529InstallLintLibrary($(LIBNAME),$(LINTLIBDIR)) 530# endif 531# else /* not LibCreate */ 532# if LibBuild 533# if HugeLibrary 534AllTarget($(OBJS1)) 535AllTarget($(OBJS2)) 536AllTarget($(OBJS3)) 537# else 538AllTarget($(OBJS)) 539# endif 540# if DoSharedLib 541AllTarget($(EXTRASHAREDOBJS)) 542# endif 543# if DoNormalLib 544AllTarget($(EXTRAUNSHAREDOBJS)) 545# endif 546# endif /* LibBuild */ 547# endif /* LibCreate */ 548# ifdef IncSubdir 549# ifdef IncSubSubdir 550# if !defined(LibHeaders) || LibHeaders 551BuildIncludes($(HEADERS),IncSubdir/IncSubSubdir,../..) 552# if BuildLibraries 553InstallMultipleFlags($(HEADERS),$(INCDIR)/IncSubdir/IncSubSubdir,$(INSTINCFLAGS)) 554# endif 555# endif 556# else 557# if !defined(LibHeaders) || LibHeaders 558BuildIncludes($(HEADERS),IncSubdir,..) 559# if BuildLibraries 560InstallMultipleFlags($(HEADERS),$(INCDIR)/IncSubdir,$(INSTINCFLAGS)) 561# endif 562# endif 563# endif 564# else 565# ifndef CplusplusSource 566# if !defined(LibHeaders) || LibHeaders 567BuildIncludesTop($(HEADERS)) 568# if BuildLibraries 569InstallMultipleFlags($(HEADERS),$(INCDIR),$(INSTINCFLAGS)) 570# endif 571# endif 572# endif 573# endif 574 575NormalLintTarget($(SRCS)) 576#endif /* defined(LibName) */ 577 578#ifdef NoSoSymlink 579SOSYMLINK = false 580#else 581SOSYMLINK = true 582#endif 583