Global.pp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. //
  2. // Global.pp
  3. //
  4. // This file is read in before any of the individual Sources.pp files
  5. // are read. It defines a few global variables that are useful to all
  6. // different kinds of build_types.
  7. //
  8. // We start off by defining a number of map variables. These are
  9. // special variables that can be used to look up a particular named
  10. // scope according to a key (that is, according to the value of some
  11. // variable defined within the scope).
  12. // A named scope is defined using the #begin name .. #end name
  13. // sequence. In general, we use these sequences in the various
  14. // Sources.pp files to define the various targets to build. Each
  15. // named scope carries around its set of variable declarations. The
  16. // named scopes are associated with the dirname of the directory in
  17. // which the Sources.pp file was found.
  18. // The first map variable lets us look up a particular library target
  19. // by its target name. The syntax here indicates that we are
  20. // declaring a map variable called "all_libs" whose key is the
  21. // variable $[TARGET] as defined in each instance of a named scope
  22. // called "static_lib_target," "lib_target," and so on in every
  23. // Sources.pp file. (The */ refers to all the Sources.pp files. We
  24. // could also identify a particular file by its directory name, or
  25. // omit the slash to refer to our own Sources.pp file.)
  26. // After defining this map variable, we can look up other variables
  27. // that are defined for the corresponding target. For instances,
  28. // $[all_libs $[SOURCES],dconfig] will return the value of the SOURCES
  29. // variable as set for the dconfig library (that is, the expression
  30. // $[SOURCES] is evaluated within the named scope whose key is
  31. // "dconfig"--whose variable $[TARGET] was defined to be "dconfig").
  32. #map all_libs TARGET(*/static_lib_target */ss_lib_target */lib_target */noinst_lib_target */test_lib_target */metalib_target)
  33. // This map variable allows us to look up global variables that might
  34. // be defined in a particular Sources.pp, e.g. in the "toplevel" file.
  35. #map dir_type DIR_TYPE(*/)
  36. // These allow us to determine whether a particular local library is a
  37. // static or a dynamic library. If the library name appears in the
  38. // static_libs map, it is a static library (i.e. libname.a);
  39. // otherwise, it is a dynamic library (libname.so). The target
  40. // ss_lib_target is a special case: these libraries are dynamic where
  41. // it's easy to make them so (e.g. on Unix platforms), and static on
  42. // platforms where dynamic libraries aren't quite so robust (e.g. on
  43. // Windows).
  44. #if $[WINDOWS_PLATFORM]
  45. #map static_libs TARGET(*/static_lib_target */ss_lib_target)
  46. #map dynamic_libs TARGET(*/lib_target */noinst_lib_target */test_lib_target */metalib_target)
  47. #else
  48. #map static_libs TARGET(*/static_lib_target)
  49. #map dynamic_libs TARGET(*/lib_target */ss_lib_target */noinst_lib_target */test_lib_target */metalib_target)
  50. #endif
  51. // This lets us identify which metalib, if any, is including each
  52. // named library. That is, $[module $[TARGET],name] will return
  53. // the name of the metalib that includes library name.
  54. #map module COMPONENT_LIBS(*/metalib_target)
  55. // This lets up look up components of a particular metalib.
  56. #map components TARGET(*/lib_target */noinst_lib_target */test_lib_target)
  57. // And this lets us look up source directories by dirname.
  58. #map dirnames DIRNAME(*/)
  59. // This is used by Template.models.pp.
  60. #if $[HAVE_SOFTIMAGE]
  61. #define SOFT2EGG soft -D libsoftegg soft2egg
  62. #else
  63. // We used to use the old converter from pre-Panda days. Now this
  64. // is no longer supported.
  65. // #define SOFT2EGG soft2egg
  66. #define SOFT2EGG soft -D libsoftegg soft2egg
  67. #endif
  68. // Define some various compile flags, derived from the variables set
  69. // in Config.pp.
  70. #set INTERROGATE_PYTHON_INTERFACE $[and $[HAVE_PYTHON],$[INTERROGATE_PYTHON_INTERFACE]]
  71. #define run_interrogate $[HAVE_INTERROGATE]
  72. #define stl_ipath $[wildcard $[STL_IPATH]]
  73. #define stl_lpath $[wildcard $[STL_LPATH]]
  74. #define stl_cflags $[STL_CFLAGS]
  75. #define stl_libs $[STL_LIBS]
  76. #if $[HAVE_PYTHON]
  77. #define python_ipath $[wildcard $[PYTHON_IPATH]]
  78. #define python_lpath $[wildcard $[PYTHON_LPATH]]
  79. #define python_fpath $[wildcard $[PYTHON_FPATH]]
  80. #define python_cflags $[PYTHON_CFLAGS]
  81. #define python_lflags $[PYTHON_LFLAGS]
  82. #define python_libs $[PYTHON_LIBS]
  83. #define python_framework $[PYTHON_FRAMEWORK]
  84. #endif
  85. #if $[HAVE_NSPR]
  86. #define nspr_ipath $[wildcard $[NSPR_IPATH]]
  87. #define nspr_lpath $[wildcard $[NSPR_LPATH]]
  88. #define nspr_cflags $[NSPR_CFLAGS]
  89. #define nspr_libs $[NSPR_LIBS]
  90. #endif
  91. #if $[HAVE_SSL]
  92. #define ssl_ipath $[wildcard $[SSL_IPATH]]
  93. #define ssl_lpath $[wildcard $[SSL_LPATH]]
  94. #define ssl_cflags $[SSL_CFLAGS]
  95. #define ssl_libs $[SSL_LIBS]
  96. #endif
  97. #if $[HAVE_ZLIB]
  98. #define zlib_ipath $[wildcard $[ZLIB_IPATH]]
  99. #define zlib_lpath $[wildcard $[ZLIB_LPATH]]
  100. #define zlib_cflags $[ZLIB_CFLAGS]
  101. #define zlib_libs $[ZLIB_LIBS]
  102. #endif
  103. #if $[HAVE_GL]
  104. #define gl_ipath $[wildcard $[GL_IPATH]]
  105. #define gl_lpath $[wildcard $[GL_LPATH]]
  106. #define gl_cflags $[GL_CFLAGS]
  107. #define gl_libs $[GL_LIBS]
  108. #endif
  109. #if $[HAVE_MESA]
  110. #define mesa_ipath $[wildcard $[MESA_IPATH]]
  111. #define mesa_lpath $[wildcard $[MESA_LPATH]]
  112. #define mesa_cflags $[MESA_CFLAGS]
  113. #define mesa_libs $[MESA_LIBS]
  114. #endif
  115. #if $[HAVE_CHROMIUM]
  116. #define chromium_ipath $[wildcard $[CHROMIUM_IPATH]]
  117. #define chromium_lpath $[wildcard $[CHROMIUM_LPATH]]
  118. #define chromium_cflags $[CHROMIUM_CFLAGS]
  119. #define chromium_libs $[CHROMIUM_LIBS]
  120. #endif
  121. #if $[HAVE_GLX]
  122. #define glx_ipath $[wildcard $[GLX_IPATH]]
  123. #define glx_lpath $[wildcard $[GLX_LPATH]]
  124. #define glx_cflags $[GLX_CFLAGS]
  125. #define glx_libs $[GLX_LIBS]
  126. #endif
  127. #if $[HAVE_GLUT]
  128. #define glut_ipath $[wildcard $[GLUT_IPATH]]
  129. #define glut_lpath $[wildcard $[GLUT_LPATH]]
  130. #define glut_cflags $[GLUT_CFLAGS]
  131. #define glut_libs $[GLUT_LIBS]
  132. #endif
  133. #if $[HAVE_DX]
  134. #define dx_ipath $[wildcard $[DX_IPATH]]
  135. #define dx_lpath $[wildcard $[DX_LPATH]]
  136. #define dx_cflags $[DX_CFLAGS]
  137. #define dx_libs $[DX_LIBS]
  138. #endif
  139. #if $[HAVE_JPEG]
  140. #define jpeg_ipath $[wildcard $[JPEG_IPATH]]
  141. #define jpeg_lpath $[wildcard $[JPEG_LPATH]]
  142. #define jpeg_cflags $[JPEG_CFLAGS]
  143. #define jpeg_libs $[JPEG_LIBS]
  144. #endif
  145. #if $[HAVE_PNG]
  146. #define png_ipath $[wildcard $[PNG_IPATH]]
  147. #define png_lpath $[wildcard $[PNG_LPATH]]
  148. #define png_cflags $[PNG_CFLAGS]
  149. #define png_libs $[PNG_LIBS]
  150. #endif
  151. #if $[HAVE_TIFF]
  152. #define tiff_ipath $[wildcard $[TIFF_IPATH]]
  153. #define tiff_lpath $[wildcard $[TIFF_LPATH]]
  154. #define tiff_cflags $[TIFF_CFLAGS]
  155. #define tiff_libs $[TIFF_LIBS]
  156. #endif
  157. #if $[HAVE_FFTW]
  158. #define fftw_ipath $[wildcard $[FFTW_IPATH]]
  159. #define fftw_lpath $[wildcard $[FFTW_LPATH]]
  160. #define fftw_cflags $[FFTW_CFLAGS]
  161. #define fftw_libs $[FFTW_LIBS]
  162. #endif
  163. #if $[HAVE_NURBSPP]
  164. #define nurbspp_ipath $[wildcard $[NURBSPP_IPATH]]
  165. #define nurbspp_lpath $[wildcard $[NURBSPP_LPATH]]
  166. #define nurbspp_cflags $[NURBSPP_CFLAGS]
  167. #define nurbspp_libs $[NURBSPP_LIBS]
  168. #endif
  169. #if $[HAVE_CG]
  170. #define cg_ipath $[wildcard $[CG_IPATH]]
  171. #define cg_lpath $[wildcard $[CG_LPATH]]
  172. #define cg_cflags $[CG_CFLAGS]
  173. #define cg_libs $[CG_LIBS]
  174. #endif
  175. #if $[HAVE_CGGL]
  176. #define cggl_ipath $[wildcard $[CGGL_IPATH]]
  177. #define cggl_lpath $[wildcard $[CGGL_LPATH]]
  178. #define cggl_cflags $[CGGL_CFLAGS]
  179. #define cggl_libs $[CGGL_LIBS]
  180. #endif
  181. #if $[HAVE_VRPN]
  182. #define vrpn_ipath $[wildcard $[VRPN_IPATH]]
  183. #define vrpn_lpath $[wildcard $[VRPN_LPATH]]
  184. #define vrpn_cflags $[VRPN_CFLAGS]
  185. #define vrpn_libs $[VRPN_LIBS]
  186. #endif
  187. #if $[HAVE_HELIX]
  188. #define helix_ipath $[wildcard $[HELIX_IPATH]]
  189. #define helix_lpath $[wildcard $[HELIX_LPATH]]
  190. #define helix_cflags $[HELIX_CFLAGS]
  191. #define helix_libs $[HELIX_LIBS]
  192. #endif
  193. #if $[HAVE_MIKMOD]
  194. #define mikmod_ipath $[wildcard $[MIKMOD_IPATH]]
  195. #define mikmod_lpath $[wildcard $[MIKMOD_LPATH]]
  196. #define mikmod_cflags $[MIKMOD_CFLAGS]
  197. #define mikmod_libs $[MIKMOD_LIBS]
  198. #endif
  199. #if $[HAVE_GTKMM]
  200. #define gtkmm_ipath $[wildcard $[GTKMM_IPATH]]
  201. #define gtkmm_lpath $[wildcard $[GTKMM_LPATH]]
  202. #define gtkmm_cflags $[GTKMM_CFLAGS]
  203. #define gtkmm_libs $[GTKMM_LIBS]
  204. #endif
  205. #if $[HAVE_FREETYPE]
  206. #define freetype_ipath $[wildcard $[FREETYPE_IPATH]]
  207. #define freetype_lpath $[wildcard $[FREETYPE_LPATH]]
  208. #define freetype_cflags $[FREETYPE_CFLAGS]
  209. #define freetype_libs $[FREETYPE_LIBS]
  210. #endif
  211. #if $[and $[HAVE_MAYA],$[MAYA_LOCATION]]
  212. #define maya_ipath $[MAYA_LOCATION]/include
  213. #define maya_lpath $[MAYA_LOCATION]/lib
  214. #define maya_ld $[wildcard $[MAYA_LOCATION]/bin/mayald]
  215. #define maya_libs $[MAYA_LIBS]
  216. #endif
  217. #if $[and $[HAVE_SOFTIMAGE],$[SOFTIMAGE_LOCATION]]
  218. #define softimage_ipath $[SOFTIMAGE_LOCATION]/h
  219. #define softimage_lpath $[SOFTIMAGE_LOCATION]/dso
  220. #define softimage_libs $[SOFTIMAGE_LIBS]
  221. #endif
  222. #if $[HAVE_NET]
  223. #define net_ipath $[wildcard $[NET_IPATH]]
  224. #define net_lpath $[wildcard $[NET_LPATH]]
  225. #define net_libs $[NET_LIBS]
  226. #endif
  227. #if $[HAVE_RAD_MSS]
  228. #define rad_mss_ipath $[wildcard $[RAD_MSS_IPATH]]
  229. #define rad_mss_lpath $[wildcard $[RAD_MSS_LPATH]]
  230. #define rad_mss_libs $[RAD_MSS_LIBS]
  231. #endif
  232. #if $[HAVE_FMOD]
  233. #define fmod_ipath $[wildcard $[FMOD_IPATH]]
  234. #define fmod_lpath $[wildcard $[FMOD_LPATH]]
  235. #define fmod_libs $[FMOD_LIBS]
  236. #endif
  237. #if $[HAVE_CHROMIUM]
  238. #define chromium_ipath $[wildcard $[CHROMIUM_IPATH]]
  239. #define chromium_lpath $[wildcard $[CHROMIUM_LPATH]]
  240. #define chromium_libs $[CHROMIUM_LIBS]
  241. #endif
  242. // We define these two variables true here in the global scope; a
  243. // particular Sources.pp file can redefine these to be false to
  244. // prevent a particular directory or target from being built in
  245. // certain circumstances.
  246. #define BUILD_DIRECTORY 1
  247. #define BUILD_TARGET 1
  248. // This variable, when evaluated in the scope of a particular directory,
  249. // will indicate true (i.e. nonempty) when the directory is truly built,
  250. // or false (empty) when the directory is not to be built.
  251. #defer build_directory $[BUILD_DIRECTORY]
  252. // It maps to a direct evaluation of the user-set variable,
  253. // BUILD_DIRECTORY, for historical reasons. This also allows us to
  254. // reserve the right to extend this variable to test other conditions
  255. // as well, should the need arise.
  256. // This variable, when evaluated in the scope of a particular target,
  257. // will indicated true when the target should be built, or false when
  258. // the target is not to be built.
  259. #defer build_target $[BUILD_TARGET]
  260. // This takes advantage of the above two variables to get the actual
  261. // list of local libraries we are to link with, eliminating those that
  262. // won't be built.
  263. #defer active_local_libs \
  264. $[all_libs $[if $[and $[build_directory],$[build_target]],$[TARGET]],$[LOCAL_LIBS]]
  265. #defer active_component_libs \
  266. $[all_libs $[if $[and $[build_directory],$[build_target]],$[TARGET]],$[COMPONENT_LIBS]]
  267. #defer active_libs $[active_local_libs] $[active_component_libs]
  268. // This variable, when evaluated within a target, will either be empty
  269. // string if the target is not to be built, or the target name if it
  270. // is.
  271. #defer active_target $[if $[build_target],$[TARGET]]
  272. #defer get_combined_sources $[COMBINED_SOURCES]
  273. // This subroutine will set up the sources variable to reflect the
  274. // complete set of sources for this target, and also set the
  275. // alt_cflags, alt_libs, etc. as appropriate according to how the
  276. // various USE_* flags are set for the current target.
  277. // This variable returns the complete set of sources for the current
  278. // target.
  279. #defer get_sources \
  280. $[SOURCES] \
  281. $[if $[ne $[NO_COMBINED_SOURCES],], $[INCLUDED_SOURCES], $[get_combined_sources]]
  282. #defer included_sources $[INCLUDED_SOURCES]
  283. // This variable returns the set of sources that are to be
  284. // interrogated for the current target.
  285. #defer get_igatescan \
  286. $[if $[and $[run_interrogate],$[IGATESCAN]], \
  287. $[if $[eq $[IGATESCAN], all], \
  288. $[filter-out %.I %.T %.lxx %.yxx %.N %_src.cxx,$[get_sources]], \
  289. $[IGATESCAN]]]
  290. // This variable returns the name of the interrogate database file
  291. // that will be generated for a particular target, or empty string if
  292. // the target is not to be interrogated.
  293. #defer get_igatedb \
  294. $[if $[and $[run_interrogate],$[IGATESCAN]], \
  295. $[ODIR]/lib$[TARGET]$[dllext].in]
  296. // This variable returns the name of the interrogate code file
  297. // that will be generated for a particular target, or empty string if
  298. // the target is not to be interrogated.
  299. #defer get_igateoutput \
  300. $[if $[and $[run_interrogate],$[IGATESCAN]], \
  301. $[ODIR]/lib$[TARGET]_igate.cxx]
  302. // This variable is the set of .in files generated by all of our
  303. // component libraries. If it is nonempty, then we do need to
  304. // generate a module, and $[get_igatemout] is the name of the .cxx file
  305. // that interrogate will produce to make this module.
  306. #defer get_igatemscan $[components $[get_igatedb:%=$[RELDIR]/%],$[active_component_libs]]
  307. #defer get_igatemout $[if $[get_igatemscan],$[ODIR]/lib$[TARGET]_module.cxx]
  308. // This variable returns the set of external packages used by this
  309. // target, and by all the components shared by this target.
  310. #defer use_packages $[sort $[USE_PACKAGES] $[components $[USE_PACKAGES],$[active_component_libs]]]
  311. // This function returns the appropriate cflags for the target, based
  312. // on the various external packages this particular target claims to
  313. // require.
  314. #defun get_cflags
  315. // hack to add stl,nspr,python. should be removed
  316. #define alt_cflags $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_cflags] $[nspr_cflags] $[python_cflags]]
  317. #foreach package $[use_packages]
  318. #set alt_cflags $[alt_cflags] $[$[package]_cflags]
  319. #end package
  320. $[alt_cflags]
  321. #end get_cflags
  322. // This function returns the appropriate lflags for the target, based
  323. // on the various external packages this particular target claims to
  324. // require.
  325. #defun get_lflags
  326. // hack to add stl,nspr,python. should be removed
  327. #define alt_lflags $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_lflags] $[nspr_lflags] $[python_lflags]]
  328. #foreach package $[use_packages]
  329. #set alt_lflags $[alt_lflags] $[$[package]_lflags]
  330. #end package
  331. $[alt_lflags]
  332. #end get_lflags
  333. // This function returns the appropriate include path for the target,
  334. // based on the various external packages this particular target
  335. // claims to require. This returns a space-separated set of directory
  336. // names only; the -I switch is not included here.
  337. #defun get_ipath
  338. // hack to add stl,nspr,python. should be removed
  339. #define alt_ipath $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_ipath] $[nspr_ipath] $[python_ipath]]
  340. #foreach package $[use_packages]
  341. #set alt_ipath $[alt_ipath] $[$[package]_ipath]
  342. #end package
  343. $[alt_ipath]
  344. #end get_ipath
  345. // This function returns the appropriate library search path for the
  346. // target, based on the various external packages this particular
  347. // target claims to require. This returns a space-separated set of
  348. // directory names only; the -L switch is not included here.
  349. #defun get_lpath
  350. #define alt_lpath $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_lpath] $[nspr_lpath] $[python_lpath]]
  351. #if $[WINDOWS_PLATFORM]
  352. #set alt_lpath $[WIN32_PLATFORMSDK_LIBPATH] $[alt_lpath]
  353. #endif
  354. #foreach package $[use_packages]
  355. #set alt_lpath $[alt_lpath] $[$[package]_lpath]
  356. #end package
  357. $[alt_lpath]
  358. #end get_lpath
  359. // This function returns the appropriate framework search path for the
  360. // target, based on the various external frameworks this particular
  361. // target claims to require. This returns a space-separated set of
  362. // directory names only; the -F switch is not included here.
  363. #defun get_fpath
  364. #define alt_fpath $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_fpath] $[nspr_fpath] $[python_fpath]]
  365. #foreach package $[use_packages]
  366. #set alt_fpath $[alt_fpath] $[$[package]_fpath]
  367. #end package
  368. $[alt_fpath]
  369. #end get_fpath
  370. // This function returns the appropriate framework for the
  371. // target, based on the various external frameworks this particular
  372. // target claims to require. This returns a space-separated set of
  373. // framework names only; the -framework switch is not included here.
  374. #defun get_frameworks
  375. #define alt_framework $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_framework] $[nspr_framework] $[python_framework]]
  376. #foreach package $[use_packages]
  377. #set alt_framework $[alt_framework] $[$[package]_framework]
  378. #end package
  379. $[alt_framework]
  380. #end get_frameworks
  381. // This function returns the appropriate set of library names to link
  382. // with for the target, based on the various external packages this
  383. // particular target claims to require. This returns a
  384. // space-separated set of library names only; the -l switch is not
  385. // included here.
  386. #defun get_libs
  387. #define alt_libs $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_libs] $[nspr_libs] $[python_libs]]
  388. #if $[WINDOWS_PLATFORM]
  389. #set alt_libs $[alt_libs] $[WIN_SYS_LIBS] $[components $[WIN_SYS_LIBS],$[active_libs] $[transitive_link]]
  390. #elif $[OSX_PLATFORM]
  391. #set alt_libs $[alt_libs] $[OSX_SYS_LIBS] $[components $[OSX_SYS_LIBS],$[active_libs] $[transitive_link]]
  392. #else
  393. #set alt_libs $[alt_libs] $[UNIX_SYS_LIBS] $[components $[UNIX_SYS_LIBS],$[active_libs] $[transitive_link]]
  394. #endif
  395. #foreach package $[use_packages]
  396. #set alt_libs $[alt_libs] $[$[package]_libs]
  397. #end package
  398. $[alt_libs]
  399. #end get_libs
  400. // This function returns the appropriate value for ld for the target.
  401. #defun get_ld
  402. #if $[filter maya,$[use_packages]]
  403. $[maya_ld]
  404. #endif
  405. #end get_ld
  406. // This function determines the set of files a given source file
  407. // depends on. It is based on the setting of the $[filename]_sources
  408. // variable to indicate the sources for composite files, etc.
  409. #defun get_depends source
  410. #if $[$[source]_sources]
  411. #if $[ne $[$[source]_sources],none]
  412. $[$[source]_sources] $[dependencies $[$[source]_sources]]
  413. #endif
  414. #else
  415. $[dependencies $[source]]
  416. #endif
  417. #end get_depends
  418. // This function determines the set of libraries our various targets
  419. // depend on. This is a complicated definition. It is the union of
  420. // all of our targets' dependencies, except:
  421. // If a target is part of a metalib, it depends (a) directly on all of
  422. // its normal library dependencies that are part of the same metalib,
  423. // and (b) indirectly on all of the metalibs that every other library
  424. // dependency is part of. If a target is not part of a metalib, it is
  425. // the same as case (b) above.
  426. #defun get_depend_libs
  427. #define depend_libs
  428. #forscopes lib_target noinst_lib_target test_lib_target
  429. #define metalib $[module $[TARGET],$[TARGET]]
  430. #if $[ne $[metalib],]
  431. // This library is included on a metalib.
  432. #foreach depend $[LOCAL_LIBS]
  433. #define depend_metalib $[module $[TARGET],$[depend]]
  434. #if $[eq $[depend_metalib],$[metalib]]
  435. // Here's a dependent library in the *same* metalib.
  436. #set depend_libs $[depend_libs] $[depend]
  437. #elif $[ne $[depend_metalib],]
  438. // This dependent library is in a *different* metalib.
  439. #set depend_libs $[depend_libs] $[depend_metalib]
  440. #else
  441. // This dependent library is not in any metalib.
  442. #set depend_libs $[depend_libs] $[depend]
  443. #endif
  444. #end depend
  445. #else
  446. // This library is *not* included on a metalib.
  447. #foreach depend $[LOCAL_LIBS]
  448. #define depend_metalib $[module $[TARGET],$[depend]]
  449. #if $[ne $[depend_metalib],]
  450. // This dependent library is on a metalib.
  451. #set depend_libs $[depend_libs] $[depend_metalib]
  452. #else
  453. // This dependent library is not in any metalib.
  454. #set depend_libs $[depend_libs] $[depend]
  455. #endif
  456. #end depend
  457. #endif
  458. #end lib_target noinst_lib_target test_lib_target
  459. // These will never be part of a metalib.
  460. #forscopes static_lib_target ss_lib_target bin_target noinst_bin_target metalib_target
  461. #foreach depend $[LOCAL_LIBS]
  462. #define depend_metalib $[module $[TARGET],$[depend]]
  463. #if $[ne $[depend_metalib],]
  464. // This dependent library is on a metalib.
  465. #if $[eq $[depend_metalib],$[TARGET]]
  466. #print Warning: $[TARGET] circularly depends on $[depend].
  467. #else
  468. #set depend_libs $[depend_libs] $[depend_metalib]
  469. #endif
  470. #else
  471. // This dependent library is not in any metalib.
  472. #set depend_libs $[depend_libs] $[depend]
  473. #endif
  474. #end depend
  475. #end static_lib_target ss_lib_target bin_target noinst_bin_target metalib_target
  476. // In case we're defining any metalibs, these depend directly on
  477. // their components as well.
  478. #set depend_libs $[depend_libs] $[COMPONENT_LIBS(metalib_target)]
  479. $[depend_libs]
  480. #end get_depend_libs
  481. // dtool/pptempl/Global.pp
  482. // Define a few directories that will be useful.
  483. #define install_dir $[$[upcase $[PACKAGE]]_INSTALL]
  484. #if $[eq $[install_dir],]
  485. #error Variable $[upcase $[PACKAGE]]_INSTALL is not set! Cannot install!
  486. #endif
  487. #define other_trees
  488. #define other_trees_lib
  489. #define other_trees_include
  490. #foreach tree $[NEEDS_TREES]
  491. #define tree_install $[$[upcase $[tree]]_INSTALL]
  492. #if $[eq $[tree_install],]
  493. Warning: Variable $[upcase $[tree]]_INSTALL is not set!
  494. #else
  495. #set other_trees $[other_trees] $[tree_install]
  496. #set other_trees_lib $[other_trees_lib] $[tree_install]/lib
  497. #set other_trees_include $[other_trees_include] $[tree_install]/include
  498. #endif
  499. #end tree
  500. #define install_lib_dir $[or $[INSTALL_LIB_DIR],$[install_dir]/lib]
  501. #define other_trees_lib $[or $[INSTALL_LIB_DIR],$[other_trees_lib]]
  502. #define install_headers_dir $[or $[INSTALL_HEADERS_DIR],$[install_dir]/include]
  503. #define other_trees_include $[or $[INSTALL_HEADERS_DIR],$[other_trees_include]]
  504. #define install_bin_dir $[or $[INSTALL_BIN_DIR],$[install_dir]/bin]
  505. #define install_data_dir $[or $[INSTALL_DATA_DIR],$[install_dir]/shared]
  506. #define install_igatedb_dir $[or $[INSTALL_IGATEDB_DIR],$[install_dir]/etc]
  507. #define install_config_dir $[or $[INSTALL_CONFIG_DIR],$[install_dir]/etc]
  508. #defer install_py_dir $[install_lib_dir]/$[PACKAGE]/$[DIRNAME]
  509. #defer install_py_package_dir $[install_lib_dir]/$[PACKAGE]
  510. #if $[ne $[DTOOL_INSTALL],]
  511. #define install_parser_inc_dir $[DTOOL_INSTALL]/include/parser-inc
  512. #else
  513. #define install_parser_inc_dir $[install_headers_dir]/parser-inc
  514. #endif
  515. // Set up the correct interrogate options.
  516. // $[dllext] is redefined in the Windows Global.platform.pp files to
  517. // the string _d if we are building a debug tree. This is inserted
  518. // into the .dll and .in filenames before the extension to make a
  519. // runtime distinction between debug and non-debug builds. For now,
  520. // we make a global definition to empty string, since non-Windows
  521. // platforms will leave this empty.
  522. #define dllext
  523. // $[obj_prefix] defines the prefix that is prepended to the name of
  524. // the object files. It can be used to avoid potential collisions
  525. // when a source file is used by multiple targets but with different
  526. // compile options for each.
  527. //
  528. // $[obj_prefix] may be redefined by one of the Global.platform.pp
  529. // files.
  530. #defer obj_prefix $[TARGET]_
  531. // Caution! interrogate_ipath might be redefined in the
  532. // Global.platform.pp file.
  533. #defer interrogate_ipath $[target_ipath:%=-I%]
  534. #defer interrogate_spath $[install_parser_inc_dir:%=-S%] -S/usr/include
  535. #defer interrogate_options \
  536. -DCPPPARSER -D__STDC__=1 -D__cplusplus $[SYSTEM_IGATE_FLAGS] \
  537. $[interrogate_spath] $[interrogate_ipath] \
  538. $[CDEFINES_OPT$[OPTIMIZE]:%=-D%] \
  539. $[filter -D%,$[C++FLAGS]] \
  540. $[INTERROGATE_OPTIONS] \
  541. $[if $[INTERROGATE_PYTHON_INTERFACE],-python] \
  542. $[if $[INTERROGATE_C_INTERFACE],-c] \
  543. $[if $[TRACK_IN_INTERPRETER],-track-interpreter] \
  544. $[if $[<= $[OPTIMIZE], 1],-spam]
  545. #defer interrogate_module_options \
  546. $[if $[INTERROGATE_PYTHON_INTERFACE],-python] \
  547. $[if $[INTERROGATE_C_INTERFACE],-c] \
  548. $[if $[TRACK_IN_INTERPRETER],-track-interpreter]
  549. // The language stuff is used by model builds only.
  550. // Set language_filters to be "%_english %_castillian %_japanese %_german" etc.
  551. #if $[LANGUAGES]
  552. #define language_filters $[subst <pct>,%,$[LANGUAGES:%=<pct>_%]]
  553. #print Using language $[LANGUAGE]
  554. #else
  555. #define language_filters
  556. #endif
  557. #define language_egg_filters $[language_filters:%=%.egg]
  558. #define language_dna_filters $[language_filters:%=%.dna]
  559. // This is used for evaluating SoftImage unpack rules in Template.models.pp.
  560. #defer soft_scene_files $[matrix $[DATABASE]/SCENES/$[SCENE_PREFIX],$[MODEL] $[ANIMS],.1-0.dsc]
  561. // Include the global definitions for this particular build_type, if
  562. // the file is there.
  563. #sinclude $[GLOBAL_TYPE_FILE]