1 #![allow(unused_macros)] 2 3 macro_rules! feature { 4 ( 5 #![$meta:meta] 6 $($item:item)* 7 ) => { 8 $( 9 #[cfg($meta)] 10 #[cfg_attr(docsrs, doc(cfg($meta)))] 11 $item 12 )* 13 } 14 } 15 16 /// Enables Windows-specific code. 17 /// Use this macro instead of `cfg(windows)` to generate docs properly. 18 macro_rules! cfg_windows { 19 ($($item:item)*) => { 20 $( 21 #[cfg(any(all(doc, docsrs), windows))] 22 #[cfg_attr(docsrs, doc(cfg(windows)))] 23 $item 24 )* 25 } 26 } 27 28 /// Enables unstable Windows-specific code. 29 /// Use this macro instead of `cfg(windows)` to generate docs properly. 30 macro_rules! cfg_unstable_windows { 31 ($($item:item)*) => { 32 $( 33 #[cfg(all(any(all(doc, docsrs), windows), tokio_unstable))] 34 #[cfg_attr(docsrs, doc(cfg(all(windows, tokio_unstable))))] 35 $item 36 )* 37 } 38 } 39 40 /// Enables enter::block_on. 41 macro_rules! cfg_block_on { 42 ($($item:item)*) => { 43 $( 44 #[cfg(any( 45 feature = "fs", 46 feature = "net", 47 feature = "io-std", 48 feature = "rt", 49 ))] 50 $item 51 )* 52 } 53 } 54 55 /// Enables internal `AtomicWaker` impl. 56 macro_rules! cfg_atomic_waker_impl { 57 ($($item:item)*) => { 58 $( 59 #[cfg(any( 60 feature = "net", 61 feature = "process", 62 feature = "rt", 63 feature = "signal", 64 feature = "time", 65 ))] 66 #[cfg(not(loom))] 67 $item 68 )* 69 } 70 } 71 72 macro_rules! cfg_aio { 73 ($($item:item)*) => { 74 $( 75 #[cfg(all(any(docsrs, target_os = "freebsd"), feature = "net"))] 76 #[cfg_attr(docsrs, 77 doc(cfg(all(target_os = "freebsd", feature = "net"))) 78 )] 79 $item 80 )* 81 } 82 } 83 84 macro_rules! cfg_fs { 85 ($($item:item)*) => { 86 $( 87 #[cfg(feature = "fs")] 88 #[cfg(not(target_os = "wasi"))] 89 #[cfg_attr(docsrs, doc(cfg(feature = "fs")))] 90 $item 91 )* 92 } 93 } 94 95 macro_rules! cfg_io_blocking { 96 ($($item:item)*) => { 97 $( #[cfg(any( 98 feature = "io-std", 99 feature = "fs", 100 all(windows, feature = "process"), 101 ))] $item )* 102 } 103 } 104 105 macro_rules! cfg_io_driver { 106 ($($item:item)*) => { 107 $( 108 #[cfg(any( 109 feature = "net", 110 all(unix, feature = "process"), 111 all(unix, feature = "signal"), 112 ))] 113 #[cfg_attr(docsrs, doc(cfg(any( 114 feature = "net", 115 all(unix, feature = "process"), 116 all(unix, feature = "signal"), 117 ))))] 118 $item 119 )* 120 } 121 } 122 123 macro_rules! cfg_io_driver_impl { 124 ( $( $item:item )* ) => { 125 $( 126 #[cfg(any( 127 feature = "net", 128 all(unix, feature = "process"), 129 all(unix, feature = "signal"), 130 ))] 131 $item 132 )* 133 } 134 } 135 136 macro_rules! cfg_not_io_driver { 137 ($($item:item)*) => { 138 $( 139 #[cfg(not(any( 140 feature = "net", 141 all(unix, feature = "process"), 142 all(unix, feature = "signal"), 143 )))] 144 $item 145 )* 146 } 147 } 148 149 macro_rules! cfg_io_readiness { 150 ($($item:item)*) => { 151 $( 152 #[cfg(feature = "net")] 153 $item 154 )* 155 } 156 } 157 158 macro_rules! cfg_io_std { 159 ($($item:item)*) => { 160 $( 161 #[cfg(feature = "io-std")] 162 #[cfg_attr(docsrs, doc(cfg(feature = "io-std")))] 163 $item 164 )* 165 } 166 } 167 168 macro_rules! cfg_io_util { 169 ($($item:item)*) => { 170 $( 171 #[cfg(feature = "io-util")] 172 #[cfg_attr(docsrs, doc(cfg(feature = "io-util")))] 173 $item 174 )* 175 } 176 } 177 178 macro_rules! cfg_not_io_util { 179 ($($item:item)*) => { 180 $( #[cfg(not(feature = "io-util"))] $item )* 181 } 182 } 183 184 macro_rules! cfg_loom { 185 ($($item:item)*) => { 186 $( #[cfg(loom)] $item )* 187 } 188 } 189 190 macro_rules! cfg_not_loom { 191 ($($item:item)*) => { 192 $( #[cfg(not(loom))] $item )* 193 } 194 } 195 196 macro_rules! cfg_macros { 197 ($($item:item)*) => { 198 $( 199 #[cfg(feature = "macros")] 200 #[cfg_attr(docsrs, doc(cfg(feature = "macros")))] 201 $item 202 )* 203 } 204 } 205 206 macro_rules! cfg_metrics { 207 ($($item:item)*) => { 208 $( 209 // For now, metrics is only disabled in loom tests. 210 // When stabilized, it might have a dedicated feature flag. 211 #[cfg(all(tokio_unstable, not(loom)))] 212 #[cfg_attr(docsrs, doc(cfg(tokio_unstable)))] 213 $item 214 )* 215 } 216 } 217 218 macro_rules! cfg_not_metrics { 219 ($($item:item)*) => { 220 $( 221 #[cfg(not(all(tokio_unstable, not(loom))))] 222 $item 223 )* 224 } 225 } 226 227 macro_rules! cfg_not_rt_and_metrics_and_net { 228 ($($item:item)*) => { 229 $( #[cfg(not(all(feature = "net", feature = "rt", all(tokio_unstable, not(loom)))))]$item )* 230 } 231 } 232 233 macro_rules! cfg_net_or_process { 234 ($($item:item)*) => { 235 $( 236 #[cfg(any(feature = "net", feature = "process"))] 237 #[cfg_attr(docsrs, doc(cfg(any(feature = "net", feature = "process"))))] 238 $item 239 )* 240 } 241 } 242 243 macro_rules! cfg_net { 244 ($($item:item)*) => { 245 $( 246 #[cfg(feature = "net")] 247 #[cfg_attr(docsrs, doc(cfg(feature = "net")))] 248 $item 249 )* 250 } 251 } 252 253 macro_rules! cfg_net_unix { 254 ($($item:item)*) => { 255 $( 256 #[cfg(all(unix, feature = "net"))] 257 #[cfg_attr(docsrs, doc(cfg(all(unix, feature = "net"))))] 258 $item 259 )* 260 } 261 } 262 263 macro_rules! cfg_net_windows { 264 ($($item:item)*) => { 265 $( 266 #[cfg(all(any(all(doc, docsrs), windows), feature = "net"))] 267 #[cfg_attr(docsrs, doc(cfg(all(windows, feature = "net"))))] 268 $item 269 )* 270 } 271 } 272 273 macro_rules! cfg_process { 274 ($($item:item)*) => { 275 $( 276 #[cfg(feature = "process")] 277 #[cfg_attr(docsrs, doc(cfg(feature = "process")))] 278 #[cfg(not(loom))] 279 #[cfg(not(target_os = "wasi"))] 280 $item 281 )* 282 } 283 } 284 285 macro_rules! cfg_process_driver { 286 ($($item:item)*) => { 287 #[cfg(unix)] 288 #[cfg(not(loom))] 289 cfg_process! { $($item)* } 290 } 291 } 292 293 macro_rules! cfg_not_process_driver { 294 ($($item:item)*) => { 295 $( 296 #[cfg(not(all(unix, not(loom), feature = "process")))] 297 $item 298 )* 299 } 300 } 301 302 macro_rules! cfg_signal { 303 ($($item:item)*) => { 304 $( 305 #[cfg(feature = "signal")] 306 #[cfg_attr(docsrs, doc(cfg(feature = "signal")))] 307 #[cfg(not(loom))] 308 #[cfg(not(target_os = "wasi"))] 309 $item 310 )* 311 } 312 } 313 314 macro_rules! cfg_signal_internal { 315 ($($item:item)*) => { 316 $( 317 #[cfg(any(feature = "signal", all(unix, feature = "process")))] 318 #[cfg(not(loom))] 319 $item 320 )* 321 } 322 } 323 324 macro_rules! cfg_signal_internal_and_unix { 325 ($($item:item)*) => { 326 #[cfg(unix)] 327 cfg_signal_internal! { $($item)* } 328 } 329 } 330 331 macro_rules! cfg_not_signal_internal { 332 ($($item:item)*) => { 333 $( 334 #[cfg(any(loom, not(unix), not(any(feature = "signal", all(unix, feature = "process")))))] 335 $item 336 )* 337 } 338 } 339 340 macro_rules! cfg_sync { 341 ($($item:item)*) => { 342 $( 343 #[cfg(feature = "sync")] 344 #[cfg_attr(docsrs, doc(cfg(feature = "sync")))] 345 $item 346 )* 347 } 348 } 349 350 macro_rules! cfg_not_sync { 351 ($($item:item)*) => { 352 $( #[cfg(not(feature = "sync"))] $item )* 353 } 354 } 355 356 macro_rules! cfg_rt { 357 ($($item:item)*) => { 358 $( 359 #[cfg(feature = "rt")] 360 #[cfg_attr(docsrs, doc(cfg(feature = "rt")))] 361 $item 362 )* 363 } 364 } 365 366 macro_rules! cfg_not_rt { 367 ($($item:item)*) => { 368 $( #[cfg(not(feature = "rt"))] $item )* 369 } 370 } 371 372 macro_rules! cfg_rt_multi_thread { 373 ($($item:item)*) => { 374 $( 375 #[cfg(all(feature = "rt-multi-thread", not(target_os = "wasi")))] 376 #[cfg_attr(docsrs, doc(cfg(feature = "rt-multi-thread")))] 377 $item 378 )* 379 } 380 } 381 382 macro_rules! cfg_not_rt_multi_thread { 383 ($($item:item)*) => { 384 $( #[cfg(not(feature = "rt-multi-thread"))] $item )* 385 } 386 } 387 388 macro_rules! cfg_taskdump { 389 ($($item:item)*) => { 390 $( 391 #[cfg(all( 392 tokio_unstable, 393 tokio_taskdump, 394 feature = "rt", 395 target_os = "linux", 396 any( 397 target_arch = "aarch64", 398 target_arch = "x86", 399 target_arch = "x86_64" 400 ) 401 ))] 402 $item 403 )* 404 }; 405 } 406 407 macro_rules! cfg_not_taskdump { 408 ($($item:item)*) => { 409 $( 410 #[cfg(not(all( 411 tokio_unstable, 412 tokio_taskdump, 413 feature = "rt", 414 target_os = "linux", 415 any( 416 target_arch = "aarch64", 417 target_arch = "x86", 418 target_arch = "x86_64" 419 ) 420 )))] 421 $item 422 )* 423 }; 424 } 425 426 macro_rules! cfg_test_util { 427 ($($item:item)*) => { 428 $( 429 #[cfg(feature = "test-util")] 430 #[cfg_attr(docsrs, doc(cfg(feature = "test-util")))] 431 $item 432 )* 433 } 434 } 435 436 macro_rules! cfg_not_test_util { 437 ($($item:item)*) => { 438 $( #[cfg(not(feature = "test-util"))] $item )* 439 } 440 } 441 442 macro_rules! cfg_time { 443 ($($item:item)*) => { 444 $( 445 #[cfg(feature = "time")] 446 #[cfg_attr(docsrs, doc(cfg(feature = "time")))] 447 $item 448 )* 449 } 450 } 451 452 macro_rules! cfg_not_time { 453 ($($item:item)*) => { 454 $( #[cfg(not(feature = "time"))] $item )* 455 } 456 } 457 458 macro_rules! cfg_trace { 459 ($($item:item)*) => { 460 $( 461 #[cfg(all(tokio_unstable, feature = "tracing"))] 462 #[cfg_attr(docsrs, doc(cfg(all(tokio_unstable, feature = "tracing"))))] 463 $item 464 )* 465 }; 466 } 467 468 macro_rules! cfg_unstable { 469 ($($item:item)*) => { 470 $( 471 #[cfg(tokio_unstable)] 472 #[cfg_attr(docsrs, doc(cfg(tokio_unstable)))] 473 $item 474 )* 475 }; 476 } 477 478 macro_rules! cfg_not_trace { 479 ($($item:item)*) => { 480 $( 481 #[cfg(any(not(tokio_unstable), not(feature = "tracing")))] 482 $item 483 )* 484 } 485 } 486 487 macro_rules! cfg_coop { 488 ($($item:item)*) => { 489 $( 490 #[cfg(any( 491 feature = "fs", 492 feature = "io-std", 493 feature = "net", 494 feature = "process", 495 feature = "rt", 496 feature = "signal", 497 feature = "sync", 498 feature = "time", 499 ))] 500 $item 501 )* 502 } 503 } 504 505 macro_rules! cfg_not_coop { 506 ($($item:item)*) => { 507 $( 508 #[cfg(not(any( 509 feature = "fs", 510 feature = "io-std", 511 feature = "net", 512 feature = "process", 513 feature = "rt", 514 feature = "signal", 515 feature = "sync", 516 feature = "time", 517 )))] 518 $item 519 )* 520 } 521 } 522 523 macro_rules! cfg_has_atomic_u64 { 524 ($($item:item)*) => { 525 $( 526 #[cfg(target_has_atomic = "64")] 527 $item 528 )* 529 } 530 } 531 532 macro_rules! cfg_not_has_atomic_u64 { 533 ($($item:item)*) => { 534 $( 535 #[cfg(not(target_has_atomic = "64"))] 536 $item 537 )* 538 } 539 } 540 541 macro_rules! cfg_has_const_mutex_new { 542 ($($item:item)*) => { 543 $( 544 #[cfg(not(all(loom, test)))] 545 $item 546 )* 547 } 548 } 549 550 macro_rules! cfg_not_has_const_mutex_new { 551 ($($item:item)*) => { 552 $( 553 #[cfg(all(loom, test))] 554 $item 555 )* 556 } 557 } 558 559 macro_rules! cfg_not_wasi { 560 ($($item:item)*) => { 561 $( 562 #[cfg(not(target_os = "wasi"))] 563 $item 564 )* 565 } 566 } 567 568 macro_rules! cfg_is_wasm_not_wasi { 569 ($($item:item)*) => { 570 $( 571 #[cfg(all(target_family = "wasm", not(target_os = "wasi")))] 572 $item 573 )* 574 } 575 } 576