1{ 2 "module": "core", 3 "testDir": "../../config.tests", 4 5 "commandline": { 6 "options": { 7 "doubleconversion": { "type": "enum", "values": [ "no", "qt", "system" ] }, 8 "eventfd": "boolean", 9 "glib": "boolean", 10 "iconv": { "type": "enum", "values": [ "no", "yes", "posix", "sun", "gnu" ] }, 11 "icu": "boolean", 12 "inotify": "boolean", 13 "journald": "boolean", 14 "mimetype-database": "boolean", 15 "pcre": { "type": "enum", "values": [ "no", "qt", "system" ] }, 16 "posix-ipc": { "type": "boolean", "name": "ipc_posix" }, 17 "pps": { "type": "boolean", "name": "qqnx_pps" }, 18 "slog2": "boolean", 19 "syslog": "boolean", 20 "trace": { "type": "optionalString", "values": [ "etw", "lttng", "no", "yes" ] } 21 } 22 }, 23 24 "libraries": { 25 "doubleconversion": { 26 "label": "DoubleConversion", 27 "test": { 28 "main": "(void) double_conversion::StringToDoubleConverter::NO_FLAGS;" 29 }, 30 "headers": "double-conversion/double-conversion.h", 31 "sources": [ 32 "-ldouble-conversion" 33 ] 34 }, 35 "glib": { 36 "label": "GLib", 37 "test": { 38 "head": "typedef struct _GMainContext GMainContext;", 39 "main": [ 40 "g_thread_init(NULL);", 41 "(void) g_main_context_default();", 42 "(void) g_source_new(0, 0);", 43 "g_source_add_poll(NULL, NULL);" 44 ] 45 }, 46 "headers": "glib.h", 47 "sources": [ 48 { "type": "pkgConfig", "args": "glib-2.0 gthread-2.0" } 49 ] 50 }, 51 "posix_iconv": { 52 "label": "POSIX iconv", 53 "export": "iconv", 54 "test": { 55 "main": [ 56 "iconv_t x = iconv_open(\"\", \"\");", 57 "char *inp, *outp;", 58 "size_t inbytes, outbytes;", 59 "iconv(x, &inp, &inbytes, &outp, &outbytes);", 60 "iconv_close(x);" 61 ] 62 }, 63 "headers": "iconv.h", 64 "sources": [ 65 { "libs": "-liconv", "condition": "config.openbsd || config.haiku" }, 66 { "libs": "", "condition": "!(config.openbsd || config.haiku)" } 67 ] 68 }, 69 "gnu_iconv": { 70 "label": "GNU libiconv", 71 "export": "iconv", 72 "test": { 73 "main": [ 74 "iconv_t x = iconv_open(\"\", \"\");", 75 "const char *inp;", 76 "char *outp;", 77 "size_t inbytes, outbytes;", 78 "iconv(x, &inp, &inbytes, &outp, &outbytes);", 79 "iconv_close(x);" 80 ] 81 }, 82 "headers": "iconv.h", 83 "sources": [ 84 "-liconv" 85 ] 86 }, 87 "sun_iconv": { 88 "label": "SUN libiconv", 89 "export": "iconv", 90 "test": { 91 "inherit": "gnu_iconv" 92 }, 93 "sources": [ 94 "" 95 ] 96 }, 97 "icu": { 98 "label": "ICU", 99 "test": { 100 "main": [ 101 "UErrorCode status = U_ZERO_ERROR;", 102 "UCollator *collator = ucol_open(\"ru_RU\", &status);", 103 "if (!U_FAILURE(status))", 104 " ucol_close(collator);" 105 ] 106 }, 107 "headers": [ "unicode/utypes.h", "unicode/ucol.h", "unicode/ustring.h" ], 108 "sources": [ 109 { 110 "builds": { 111 "debug": "-lsicuind -lsicuucd -lsicudtd", 112 "release": "-lsicuin -lsicuuc -lsicudt" 113 }, 114 "condition": "config.win32 && !features.shared" 115 }, 116 { "libs": "-licuin -licuuc -licudt", "condition": "config.win32 && features.shared" }, 117 { "libs": "-licui18n -licuuc -licudata", "condition": "!config.win32" } 118 ], 119 "use": [ 120 { "lib": "libdl", "condition": "features.dlopen" } 121 ] 122 }, 123 "journald": { 124 "label": "journald", 125 "test": { 126 "main": "sd_journal_send(\"PRIORITY=%i\", LOG_INFO, NULL);" 127 }, 128 "headers": [ "systemd/sd-journal.h", "syslog.h" ], 129 "sources": [ 130 { "type": "pkgConfig", "args": "libsystemd" }, 131 { "type": "pkgConfig", "args": "libsystemd-journal" } 132 ] 133 }, 134 "libatomic": { 135 "label": "64 bit atomics", 136 "test": { 137 "tail": [ 138 "void test(volatile std::atomic<std::int64_t> &a)", 139 "{", 140 " std::int64_t v = a.load(std::memory_order_acquire);", 141 " while (!a.compare_exchange_strong(v, v + 1,", 142 " std::memory_order_acq_rel,", 143 " std::memory_order_acquire)) {", 144 " v = a.exchange(v - 1);", 145 " }", 146 " a.store(v + 1, std::memory_order_release);", 147 "}" 148 ], 149 "main": [ 150 "void *ptr = (void*)0xffffffc0; // any random pointer", 151 "test(*reinterpret_cast<std::atomic<std::int64_t> *>(ptr));" 152 ], 153 "qmake": "CONFIG += c++11" 154 }, 155 "headers": [ "atomic", "cstdint" ], 156 "sources": [ 157 "", 158 "-latomic" 159 ] 160 }, 161 "librt": { 162 "label": "clock_gettime()", 163 "test": { 164 "main": "timespec ts; clock_gettime(CLOCK_REALTIME, &ts);" 165 }, 166 "headers": [ "unistd.h", "time.h" ], 167 "sources": [ 168 "", 169 "-lrt" 170 ] 171 }, 172 "lttng-ust": { 173 "label": "lttng-ust", 174 "test": { 175 "main": "lttng_session_destroy(nullptr);" 176 }, 177 "headers": "lttng/ust-events.h", 178 "sources": [ 179 { "type": "pkgConfig", "args": "lttng-ust" }, 180 "-llttng-ust" 181 ], 182 "use": "libdl" 183 }, 184 "pcre2": { 185 "label": "PCRE2", 186 "test": { 187 "head": "#define PCRE2_CODE_UNIT_WIDTH 16", 188 "tail": [ 189 "#if (PCRE2_MAJOR < 10) || ((PCRE2_MAJOR == 10) && (PCRE2_MINOR < 20))", 190 "# error This PCRE version is not supported", 191 "#endif" 192 ] 193 }, 194 "headers": "pcre2.h", 195 "sources": [ 196 { "type": "pkgConfig", "args": "libpcre2-16" }, 197 "-lpcre2-16" 198 ] 199 }, 200 "pps": { 201 "label": "PPS", 202 "test": { 203 "main": [ 204 "pps_decoder_t decoder;", 205 "pps_decoder_initialize(&decoder, NULL);" 206 ] 207 }, 208 "headers": "sys/pps.h", 209 "sources": [ 210 "-lpps" 211 ] 212 }, 213 "slog2": { 214 "label": "slog2", 215 "test": { 216 "main": "slog2_set_default_buffer((slog2_buffer_t)-1);" 217 }, 218 "export": "", 219 "headers": "sys/slog2.h", 220 "sources": [ 221 "-lslog2" 222 ] 223 }, 224 "advapi32": { 225 "label": "advapi32", 226 "sources": [ 227 "-ladvapi32" 228 ] 229 }, 230 "gdi32": { 231 "label": "gdi32", 232 "sources": [ 233 "-lgdi32" 234 ] 235 }, 236 "kernel32": { 237 "label": "kernel32", 238 "sources": [ 239 "-lkernel32" 240 ] 241 }, 242 "netapi32": { 243 "label": "netapi32", 244 "sources": [ 245 "-lnetapi32" 246 ] 247 }, 248 "ole32": { 249 "label": "ole32", 250 "sources": [ 251 "-lole32" 252 ] 253 }, 254 "shell32": { 255 "label": "shell32", 256 "sources": [ 257 "-lshell32" 258 ] 259 }, 260 "uuid": { 261 "label": "uuid", 262 "sources": [ 263 "-luuid" 264 ] 265 }, 266 "user32": { 267 "label": "user32", 268 "sources": [ 269 "-luser32" 270 ] 271 }, 272 "winmm": { 273 "label": "winmm", 274 "sources": [ 275 "-lwinmm" 276 ] 277 }, 278 "ws2_32": { 279 "label": "ws2_32", 280 "sources": [ 281 "-lws2_32" 282 ] 283 } 284 }, 285 286 "tests": { 287 "atomicfptr": { 288 "label": "working std::atomic for function pointers", 289 "type": "compile", 290 "test": { 291 "include": "atomic", 292 "tail": [ 293 "typedef void (*fptr)(int);", 294 "typedef std::atomic<fptr> atomicfptr;", 295 "void testfunction(int) { }", 296 "void test(volatile atomicfptr &a)", 297 "{", 298 " fptr v = a.load(std::memory_order_acquire);", 299 " while (!a.compare_exchange_strong(v, &testfunction,", 300 " std::memory_order_acq_rel,", 301 " std::memory_order_acquire)) {", 302 " v = a.exchange(&testfunction);", 303 " }", 304 " a.store(&testfunction, std::memory_order_release);", 305 "}" 306 ], 307 "main": [ 308 "atomicfptr fptr(testfunction);", 309 "test(fptr);" 310 ], 311 "qmake": "CONFIG += c++11" 312 } 313 }, 314 "clock-monotonic": { 315 "label": "POSIX monotonic clock", 316 "type": "compile", 317 "test": { 318 "include": [ "unistd.h", "time.h" ], 319 "main": [ 320 "#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK-0 >= 0)", 321 "timespec ts;", 322 "clock_gettime(CLOCK_MONOTONIC, &ts);", 323 "#else", 324 "# error Feature _POSIX_MONOTONIC_CLOCK not available", 325 "#endif" 326 ] 327 }, 328 "use": "librt" 329 }, 330 "cloexec": { 331 "label": "O_CLOEXEC", 332 "type": "compile", 333 "test": { 334 "head": "#define _GNU_SOURCE 1", 335 "include": [ "sys/types.h", "sys/socket.h", "fcntl.h", "unistd.h" ], 336 "main": [ 337 "int pipes[2];", 338 "(void) pipe2(pipes, O_CLOEXEC | O_NONBLOCK);", 339 "(void) fcntl(0, F_DUPFD_CLOEXEC, 0);", 340 "(void) dup3(0, 3, O_CLOEXEC);", 341 "#if defined(__NetBSD__)", 342 "(void) paccept(0, 0, 0, NULL, SOCK_CLOEXEC | SOCK_NONBLOCK);", 343 "#else", 344 "(void) accept4(0, 0, 0, SOCK_CLOEXEC | SOCK_NONBLOCK);", 345 "#endif" 346 ] 347 } 348 }, 349 "cxx11_future": { 350 "label": "C++11 <future>", 351 "type": "compile", 352 "test": { 353 "include": "future", 354 "main": [ 355 "std::future<int> f = std::async([]() { return 42; });", 356 "(void)f.get();" 357 ], 358 "qmake": "unix:LIBS += -lpthread" 359 } 360 }, 361 "cxx11_random": { 362 "label": "C++11 <random>", 363 "type": "compile", 364 "test": { 365 "include": "random", 366 "main": "std::mt19937 mt(0);" 367 } 368 }, 369 "eventfd": { 370 "label": "eventfd", 371 "type": "compile", 372 "test": { 373 "include": "sys/eventfd.h", 374 "main": [ 375 "eventfd_t value;", 376 "int fd = eventfd(0, EFD_CLOEXEC);", 377 "eventfd_read(fd, &value);", 378 "eventfd_write(fd, value);" 379 ] 380 } 381 }, 382 "futimens": { 383 "label": "futimens()", 384 "type": "compile", 385 "test": { 386 "include": "sys/stat.h", 387 "main": "futimens(-1, 0);", 388 "qmake": [ 389 "# Block futimens() on Apple platforms unless it's available on ALL", 390 "# deployment targets. This simplifies the logic at the call site", 391 "# dramatically, as it isn't strictly needed compared to futimes().", 392 "darwin: QMAKE_CXXFLAGS += -Werror=unguarded-availability -Werror=unguarded-availability-new", 393 "CONFIG += warn_on" 394 ] 395 } 396 }, 397 "futimes": { 398 "label": "futimes()", 399 "type": "compile", 400 "test": { 401 "include": "sys/time.h", 402 "main": "futimes(-1, 0);" 403 } 404 }, 405 "getauxval": { 406 "label": "getauxval()", 407 "type": "compile", 408 "test": { 409 "include": "sys/auxv.h", 410 "main": "(void) getauxval(AT_NULL);" 411 } 412 }, 413 "getentropy": { 414 "label": "getentropy()", 415 "type": "compile", 416 "test": { 417 "include": "unistd.h", 418 "main": [ 419 "char buf[32];", 420 "(void) getentropy(buf, sizeof(buf));" 421 ] 422 } 423 }, 424 "glibc": { 425 "label": "GNU libc", 426 "type": "compile", 427 "test": { 428 "include": "stdlib.h", 429 "main": [ 430 "return __GLIBC__;" 431 ] 432 } 433 }, 434 "inotify": { 435 "label": "inotify", 436 "type": "compile", 437 "test": { 438 "include": "sys/inotify.h", 439 "main": [ 440 "inotify_init();", 441 "inotify_add_watch(0, \"foobar\", IN_ACCESS);", 442 "inotify_rm_watch(0, 1);" 443 ] 444 } 445 }, 446 "ipc_sysv": { 447 "label": "SysV IPC", 448 "type": "compile", 449 "test": { 450 "include": [ "sys/types.h", "sys/ipc.h", "sys/sem.h", "sys/shm.h", "fcntl.h" ], 451 "main": [ 452 "key_t unix_key = ftok(\"test\", 'Q');", 453 "semctl(semget(unix_key, 1, 0666 | IPC_CREAT | IPC_EXCL), 0, IPC_RMID, 0);", 454 "shmget(unix_key, 0, 0666 | IPC_CREAT | IPC_EXCL);", 455 "shmctl(0, 0, (struct shmid_ds *)(0));" 456 ] 457 } 458 }, 459 "ipc_posix": { 460 "label": "POSIX IPC", 461 "type": "compile", 462 "test": { 463 "include": [ "sys/types.h", "sys/mman.h", "semaphore.h", "fcntl.h" ], 464 "main": [ 465 "sem_close(sem_open(\"test\", O_CREAT | O_EXCL, 0666, 0));", 466 "shm_open(\"test\", O_RDWR | O_CREAT | O_EXCL, 0666);", 467 "shm_unlink(\"test\");" 468 ], 469 "qmake": "linux: LIBS += -lpthread -lrt" 470 } 471 }, 472 "linkat": { 473 "label": "linkat()", 474 "type": "compile", 475 "test": { 476 "head": "#define _ATFILE_SOURCE 1", 477 "include": [ "fcntl.h", "unistd.h" ], 478 "main": "linkat(AT_FDCWD, \"foo\", AT_FDCWD, \"bar\", AT_SYMLINK_FOLLOW);" 479 } 480 }, 481 "ppoll": { 482 "label": "ppoll()", 483 "type": "compile", 484 "test": { 485 "include": [ "signal.h", "poll.h" ], 486 "main": [ 487 "struct pollfd pfd;", 488 "struct timespec ts;", 489 "sigset_t sig;", 490 "ppoll(&pfd, 1, &ts, &sig);" 491 ] 492 } 493 }, 494 "pollts": { 495 "label": "pollts()", 496 "type": "compile", 497 "test": { 498 "include": [ "poll.h", "signal.h", "time.h" ], 499 "main": [ 500 "struct pollfd pfd;", 501 "struct timespec ts;", 502 "sigset_t sig;", 503 "pollts(&pfd, 1, &ts, &sig);" 504 ] 505 } 506 }, 507 "poll": { 508 "label": "poll()", 509 "type": "compile", 510 "test": { 511 "include": "poll.h", 512 "main": [ 513 "struct pollfd pfd;", 514 "poll(&pfd, 1, 0);" 515 ] 516 } 517 }, 518 "renameat2": { 519 "label": "renameat2()", 520 "type": "compile", 521 "test": { 522 "head": "#define _ATFILE_SOURCE 1", 523 "include": [ "fcntl.h", "stdio.h" ], 524 "main": "renameat2(AT_FDCWD, argv[1], AT_FDCWD, argv[2], RENAME_NOREPLACE | RENAME_WHITEOUT);" 525 } 526 }, 527 "statx": { 528 "label": "statx() in libc", 529 "type": "compile", 530 "test": { 531 "head": "#define _ATFILE_SOURCE 1", 532 "include": [ "sys/types.h", "sys/stat.h", "unistd.h", "fcntl.h" ], 533 "main": [ 534 "struct statx statxbuf;", 535 "unsigned int mask = STATX_BASIC_STATS;", 536 "return statx(AT_FDCWD, \"\", AT_STATX_SYNC_AS_STAT, mask, &statxbuf);" 537 ] 538 } 539 }, 540 "syslog": { 541 "label": "syslog", 542 "type": "compile", 543 "test": { 544 "include": "syslog.h", 545 "main": [ 546 "openlog(\"qt\", 0, LOG_USER);", 547 "syslog(LOG_INFO, \"configure\");", 548 "closelog();" 549 ] 550 } 551 }, 552 "xlocalescanprint": { 553 "label": "xlocale.h (or equivalents)", 554 "type": "compile", 555 "test": { 556 "files": { 557 "qglobal.h": [ 558 "#ifndef QGLOBAL_H", 559 "#define QGLOBAL_H", 560 "#endif" 561 ] 562 }, 563 "tail": [ 564 "#define QT_BEGIN_NAMESPACE", 565 "#define QT_END_NAMESPACE", 566 "", 567 "#ifdef _MSVC_VER", 568 "#define Q_CC_MSVC _MSVC_VER", 569 "#endif", 570 "", 571 "#define QT_NO_DOUBLECONVERSION", 572 "", 573 "#include QDSP_P_H" 574 ], 575 "main": [ 576 "#ifdef _MSVC_VER", 577 "_locale_t invalidLocale = NULL;", 578 "#else", 579 "locale_t invalidLocale = NULL;", 580 "#endif", 581 "double a = 3.4;", 582 "qDoubleSnprintf(argv[0], 1, invalidLocale, \"invalid format\", a);", 583 "qDoubleSscanf(argv[0], invalidLocale, \"invalid format\", &a, &argc);" 584 ], 585 "qmake": "DEFINES += QDSP_P_H=$$shell_quote(\\\"@PWD@/text/qdoublescanprint_p.h\\\")" 586 } 587 } 588 }, 589 590 "features": { 591 "clock-gettime": { 592 "label": "clock_gettime()", 593 "condition": "config.unix && libs.librt", 594 "output": [ "privateFeature" ] 595 }, 596 "clock-monotonic": { 597 "label": "POSIX monotonic clock", 598 "condition": "features.clock-gettime && tests.clock-monotonic", 599 "output": [ "feature" ] 600 }, 601 "doubleconversion": { 602 "label": "DoubleConversion", 603 "output": [ "privateFeature", "feature" ] 604 }, 605 "system-doubleconversion": { 606 "label": " Using system DoubleConversion", 607 "enable": "input.doubleconversion == 'system'", 608 "disable": "input.doubleconversion == 'qt'", 609 "condition": "features.doubleconversion && libs.doubleconversion", 610 "output": [ "privateFeature" ] 611 }, 612 "cxx11_future": { 613 "label": "C++11 <future>", 614 "condition": "tests.cxx11_future", 615 "output": [ "publicFeature" ] 616 }, 617 "eventfd": { 618 "label": "eventfd", 619 "condition": "!config.wasm && tests.eventfd", 620 "output": [ "feature" ] 621 }, 622 "futimens": { 623 "label": "futimens()", 624 "condition": "!config.win32 && tests.futimens", 625 "output": [ "privateFeature" ] 626 }, 627 "futimes": { 628 "label": "futimes()", 629 "condition": "!config.win32 && !features.futimens && tests.futimes", 630 "output": [ "privateFeature" ] 631 }, 632 "getauxval": { 633 "label": "getauxval()", 634 "condition": "config.linux && tests.getauxval", 635 "output": [ "privateFeature" ] 636 }, 637 "getentropy": { 638 "label": "getentropy()", 639 "condition": "config.unix && tests.getentropy", 640 "output": [ "privateFeature" ] 641 }, 642 "glib": { 643 "label": "GLib", 644 "autoDetect": "!config.win32", 645 "condition": "libs.glib", 646 "output": [ "privateFeature", "feature" ] 647 }, 648 "glibc": { 649 "label": "GNU libc", 650 "autoDetect": "config.linux", 651 "condition": "tests.glibc", 652 "output": [ "privateFeature" ] 653 }, 654 "iconv": { 655 "label": "iconv", 656 "purpose": "Provides internationalization on Unix.", 657 "section": "Internationalization", 658 "condition": "!features.icu && features.textcodec && (features.posix-libiconv || features.sun-libiconv || features.gnu-libiconv)", 659 "output": [ "privateFeature", "feature" ] 660 }, 661 "posix-libiconv": { 662 "label": "POSIX iconv", 663 "enable": "input.iconv == 'posix'", 664 "disable": "input.iconv == 'sun' || input.iconv == 'gnu' || input.iconv == 'no'", 665 "condition": "!config.win32 && !config.qnx && !config.android && !config.darwin && libs.posix_iconv", 666 "output": [ "privateFeature" ] 667 }, 668 "sun-libiconv": { 669 "label": "SUN iconv", 670 "enable": "input.iconv == 'sun'", 671 "disable": "input.iconv == 'posix' || input.iconv == 'gnu' || input.iconv == 'no'", 672 "condition": "!config.win32 && !config.qnx && !config.android && !config.darwin && !features.posix-libiconv && libs.sun_iconv" 673 }, 674 "gnu-libiconv": { 675 "label": "GNU iconv", 676 "enable": "input.iconv == 'gnu'", 677 "disable": "input.iconv == 'posix' || input.iconv == 'sun' || input.iconv == 'no'", 678 "condition": "!config.win32 && !config.qnx && !config.android && !config.darwin && !features.posix-libiconv && !features.sun-libiconv && libs.gnu_iconv", 679 "output": [ "privateFeature" ] 680 }, 681 "icu": { 682 "label": "ICU", 683 "autoDetect": "!config.win32", 684 "condition": "libs.icu", 685 "output": [ "privateFeature" ] 686 }, 687 "inotify": { 688 "label": "inotify", 689 "condition": "tests.inotify", 690 "output": [ "privateFeature", "feature" ] 691 }, 692 "ipc_posix": { 693 "label": "Using POSIX IPC", 694 "autoDetect": "!config.win32", 695 "condition": "!tests.ipc_sysv && tests.ipc_posix", 696 "output": [ { "type": "define", "name": "QT_POSIX_IPC" } ] 697 }, 698 "journald": { 699 "label": "journald", 700 "autoDetect": false, 701 "condition": "libs.journald", 702 "output": [ "privateFeature" ] 703 }, 704 "linkat": { 705 "label": "linkat()", 706 "comment": "Currently only used by QTemporaryFile; linkat() exists on Android, but hardlink creation fails due to security rules", 707 "autoDetect": "config.linux && !config.android", 708 "condition": "tests.linkat", 709 "output": [ "privateFeature" ] 710 }, 711 "std-atomic64": { 712 "label": "64 bit atomic operations", 713 "condition": "libs.libatomic", 714 "output": [ "publicFeature" ] 715 }, 716 "mimetype": { 717 "label": "Mimetype handling", 718 "purpose": "Provides MIME type handling.", 719 "section": "Utilities", 720 "condition": "features.textcodec", 721 "output": [ "publicFeature", "feature" ] 722 }, 723 "mimetype-database": { 724 "label": "Built-in copy of the MIME database", 725 "condition": "features.mimetype", 726 "output": [ "privateFeature" ] 727 }, 728 "pcre2": { 729 "label": "PCRE2", 730 "disable": "input.pcre == 'no'", 731 "enable": "input.pcre == 'qt' || features.system-pcre2", 732 "output": [ "privateConfig" ] 733 }, 734 "system-pcre2": { 735 "label": " Using system PCRE2", 736 "disable": "input.pcre == 'no' || input.pcre == 'qt'", 737 "enable": "input.pcre == 'system'", 738 "condition": "libs.pcre2", 739 "output": [ "privateFeature" ] 740 }, 741 "poll_ppoll": { 742 "label": "Native ppoll()", 743 "emitIf": "!config.win32", 744 "condition": "!config.wasm && tests.ppoll", 745 "output": [ "privateFeature" ] 746 }, 747 "poll_pollts": { 748 "label": "Native pollts()", 749 "emitIf": "!config.win32", 750 "condition": "!features.poll_ppoll && tests.pollts", 751 "output": [ "privateFeature" ] 752 }, 753 "poll_poll": { 754 "label": "Native poll()", 755 "emitIf": "!config.win32", 756 "condition": "!features.poll_ppoll && !features.poll_pollts && tests.poll", 757 "output": [ "privateFeature" ] 758 }, 759 "poll_select": { 760 "label": "Emulated poll()", 761 "emitIf": "!config.win32", 762 "condition": "!features.poll_ppoll && !features.poll_pollts && !features.poll_poll", 763 "output": [ 764 "privateFeature", 765 { "type": "define", "name": "QT_NO_NATIVE_POLL" } 766 ] 767 }, 768 "qqnx_pps": { 769 "label": "PPS", 770 "emitIf": "config.qnx", 771 "condition": "libs.pps", 772 "output": [ "privateFeature" ] 773 }, 774 "qeventtransition": { 775 "label": "QEventTransition class", 776 "condition": "features.statemachine", 777 "output": [ "publicFeature" ] 778 }, 779 "renameat2": { 780 "label": "renameat2()", 781 "condition": "config.linux && tests.renameat2", 782 "output": [ "privateFeature" ] 783 }, 784 "slog2": { 785 "label": "slog2", 786 "condition": "libs.slog2", 787 "output": [ "privateFeature" ] 788 }, 789 "statx": { 790 "label": "statx() in libc", 791 "condition": "config.linux && tests.statx", 792 "output": [ "privateFeature" ] 793 }, 794 "syslog": { 795 "label": "syslog", 796 "autoDetect": false, 797 "condition": "tests.syslog", 798 "output": [ "privateFeature" ] 799 }, 800 "threadsafe-cloexec": { 801 "label": "Threadsafe pipe creation", 802 "condition": "tests.cloexec", 803 "output": [ 804 "publicQtConfig", 805 { "type": "define", "name": "QT_THREADSAFE_CLOEXEC", "value": 1 } 806 ] 807 }, 808 "properties": { 809 "label": "Properties", 810 "purpose": "Supports scripting Qt-based applications.", 811 "section": "Kernel", 812 "output": [ "publicFeature", "feature" ] 813 }, 814 "regularexpression": { 815 "label": "QRegularExpression", 816 "purpose": "Provides an API to Perl-compatible regular expressions.", 817 "section": "Kernel", 818 "condition": "features.system-pcre2 || features.pcre2", 819 "output": [ "publicFeature", "feature" ] 820 }, 821 "sharedmemory": { 822 "label": "QSharedMemory", 823 "purpose": "Provides access to a shared memory segment.", 824 "section": "Kernel", 825 "condition": [ 826 "config.android || config.win32 || (!config.vxworks && (tests.ipc_sysv || tests.ipc_posix))" 827 ], 828 "output": [ "publicFeature", "feature" ] 829 }, 830 "systemsemaphore": { 831 "label": "QSystemSemaphore", 832 "purpose": "Provides a general counting system semaphore.", 833 "section": "Kernel", 834 "condition": [ 835 "!config.integrity && !config.vxworks && !config.rtems", 836 "config.android || config.win32 || tests.ipc_sysv || tests.ipc_posix" 837 ], 838 "output": [ "publicFeature", "feature" ] 839 }, 840 "xmlstream": { 841 "label": "XML Streaming APIs", 842 "purpose": "Provides a simple streaming API for XML.", 843 "section": "Kernel", 844 "output": [ "publicFeature", "feature" ] 845 }, 846 "xmlstreamreader": { 847 "label": "QXmlStreamReader", 848 "purpose": "Provides a well-formed XML parser with a simple streaming API.", 849 "section": "Kernel", 850 "condition": "features.xmlstream", 851 "output": [ "publicFeature", "feature" ] 852 }, 853 "xmlstreamwriter": { 854 "label": "QXmlStreamWriter", 855 "purpose": "Provides a XML writer with a simple streaming API.", 856 "section": "Kernel", 857 "condition": "features.xmlstream", 858 "output": [ "publicFeature", "feature" ] 859 }, 860 "textdate": { 861 "label": "Text Date", 862 "purpose": "Supports month and day names in dates.", 863 "section": "Data structures", 864 "output": [ "publicFeature", "feature" ] 865 }, 866 "datestring": { 867 "label": "QDate/QTime/QDateTime", 868 "purpose": "Provides conversion between dates and strings.", 869 "section": "Data structures", 870 "condition": "features.textdate", 871 "output": [ "publicFeature", "feature" ] 872 }, 873 "process": { 874 "label": "QProcess", 875 "purpose": "Supports external process invocation.", 876 "section": "File I/O", 877 "condition": "features.processenvironment && !config.winrt && !config.uikit && !config.integrity && !config.vxworks && !config.rtems", 878 "output": [ "publicFeature", "feature" ] 879 }, 880 "processenvironment": { 881 "label": "QProcessEnvironment", 882 "purpose": "Provides a higher-level abstraction of environment variables.", 883 "section": "File I/O", 884 "condition": "!config.winrt && !config.integrity && !config.rtems", 885 "output": [ "publicFeature" ] 886 }, 887 "temporaryfile": { 888 "label": "QTemporaryFile", 889 "purpose": "Provides an I/O device that operates on temporary files.", 890 "section": "File I/O", 891 "output": [ "publicFeature", "feature" ] 892 }, 893 "library": { 894 "label": "QLibrary", 895 "purpose": "Provides a wrapper for dynamically loaded libraries.", 896 "section": "File I/O", 897 "condition": "config.win32 || config.hpux || (!config.nacl && features.dlopen)", 898 "output": [ "publicFeature", "feature" ] 899 }, 900 "settings": { 901 "label": "QSettings", 902 "purpose": "Provides persistent application settings.", 903 "section": "File I/O", 904 "output": [ "publicFeature", "feature" ] 905 }, 906 "filesystemwatcher": { 907 "label": "QFileSystemWatcher", 908 "purpose": "Provides an interface for monitoring files and directories for modifications.", 909 "section": "File I/O", 910 "condition": "!config.winrt", 911 "output": [ "publicFeature", "feature" ] 912 }, 913 "filesystemiterator": { 914 "label": "QFileSystemIterator", 915 "purpose": "Provides fast file system iteration.", 916 "section": "File I/O", 917 "output": [ "publicFeature", "feature" ] 918 }, 919 "itemmodel": { 920 "label": "Qt Item Model", 921 "purpose": "Provides the item model for item views", 922 "section": "ItemViews", 923 "output": [ "publicFeature", "feature" ] 924 }, 925 "proxymodel": { 926 "label": "QAbstractProxyModel", 927 "purpose": "Supports processing of data passed between another model and a view.", 928 "section": "ItemViews", 929 "condition": "features.itemmodel", 930 "output": [ "publicFeature", "feature" ] 931 }, 932 "sortfilterproxymodel": { 933 "label": "QSortFilterProxyModel", 934 "purpose": "Supports sorting and filtering of data passed between another model and a view.", 935 "section": "ItemViews", 936 "condition": "features.proxymodel", 937 "output": [ "publicFeature", "feature" ] 938 }, 939 "identityproxymodel": { 940 "label": "QIdentityProxyModel", 941 "purpose": "Supports proxying a source model unmodified.", 942 "section": "ItemViews", 943 "condition": "features.proxymodel", 944 "output": [ "publicFeature", "feature" ] 945 }, 946 "transposeproxymodel": { 947 "label": "QTransposeProxyModel", 948 "purpose": "Provides a proxy to swap rows and columns of a model.", 949 "section": "ItemViews", 950 "condition": "features.proxymodel", 951 "output": [ "publicFeature", "feature" ] 952 }, 953 "concatenatetablesproxymodel": { 954 "label": "QConcatenateTablesProxyModel", 955 "purpose": "Supports concatenating source models.", 956 "section": "ItemViews", 957 "condition": "features.proxymodel", 958 "output": [ "publicFeature", "feature" ] 959 }, 960 "stringlistmodel": { 961 "label": "QStringListModel", 962 "purpose": "Provides a model that supplies strings to views.", 963 "section": "ItemViews", 964 "condition": "features.itemmodel", 965 "output": [ "publicFeature", "feature" ] 966 }, 967 "translation": { 968 "label": "Translation", 969 "purpose": "Supports translations using QObject::tr().", 970 "section": "Internationalization", 971 "output": [ "publicFeature", "feature" ] 972 }, 973 "textcodec": { 974 "label": "QTextCodec", 975 "purpose": "Supports conversions between text encodings.", 976 "section": "Internationalization", 977 "output": [ "publicFeature", "feature" ] 978 }, 979 "codecs": { 980 "label": "Codecs", 981 "purpose": "Supports non-unicode text conversions.", 982 "section": "Internationalization", 983 "condition": "features.textcodec", 984 "output": [ "publicFeature", "feature" ] 985 }, 986 "big_codecs": { 987 "label": "Big Codecs", 988 "purpose": "Supports big codecs, e.g. CJK.", 989 "section": "Internationalization", 990 "condition": "features.textcodec", 991 "output": [ "publicFeature", "feature" ] 992 }, 993 "easingcurve": { 994 "label": "Easing curve", 995 "purpose": "Provides easing curve.", 996 "section": "Utilities", 997 "output": [ "publicFeature" ] 998 }, 999 "animation": { 1000 "label": "Animation", 1001 "purpose": "Provides a framework for animations.", 1002 "section": "Utilities", 1003 "condition": "features.properties && features.easingcurve", 1004 "output": [ "publicFeature", "feature" ] 1005 }, 1006 "statemachine": { 1007 "label": "State machine", 1008 "purpose": "Provides hierarchical finite state machines.", 1009 "section": "Utilities", 1010 "condition": "features.properties", 1011 "output": [ "publicFeature", "feature" ] 1012 }, 1013 "gestures": { 1014 "label": "Gesture", 1015 "purpose": "Provides a framework for gestures.", 1016 "section": "Utilities", 1017 "output": [ "publicFeature", "feature" ] 1018 }, 1019 "sha3-fast": { 1020 "label": "Speed optimized SHA3", 1021 "purpose": "Optimizes SHA3 for speed instead of size.", 1022 "section": "Utilities", 1023 "output": [ "privateFeature" ] 1024 }, 1025 "jalalicalendar": { 1026 "label": "QJalaliCalendar", 1027 "purpose": "Support the Jalali (Persian) calendar", 1028 "section": "Utilities", 1029 "output": [ "publicFeature" ] 1030 }, 1031 "hijricalendar": { 1032 "label": "QHijriCalendar", 1033 "purpose": "Generic basis for Islamic calendars, providing shared locale data", 1034 "section": "Utilities", 1035 "output": [ "privateFeature" ] 1036 }, 1037 "islamiccivilcalendar": { 1038 "label": "QIslamicCivilCalendar", 1039 "purpose": "Support the Islamic Civil calendar", 1040 "section": "Utilities", 1041 "condition": "features.hijricalendar", 1042 "output": [ "publicFeature" ] 1043 }, 1044 "timezone": { 1045 "label": "QTimeZone", 1046 "purpose": "Provides support for time-zone handling.", 1047 "section": "Utilities", 1048 "output": [ "publicFeature" ] 1049 }, 1050 "datetimeparser": { 1051 "label": "QDateTimeParser", 1052 "purpose": "Provides support for parsing date-time texts.", 1053 "section": "Utilities", 1054 "output": [ "privateFeature" ] 1055 }, 1056 "commandlineparser": { 1057 "label": "QCommandlineParser", 1058 "purpose": "Provides support for command line parsing.", 1059 "section": "Utilities", 1060 "output": [ "publicFeature" ] 1061 }, 1062 "lttng": { 1063 "label": "LTTNG", 1064 "autoDetect": false, 1065 "enable": "input.trace == 'lttng' || (input.trace =='yes' && config.linux)", 1066 "disable": "input.trace == 'etw' || input.trace =='no'", 1067 "condition": "config.linux && libs.lttng-ust", 1068 "output": [ "privateFeature" ] 1069 }, 1070 "etw": { 1071 "label": "ETW", 1072 "autoDetect": false, 1073 "enable": "input.trace == 'etw' || (input.trace == 'yes' && config.win32)", 1074 "disable": "input.trace == 'lttng' || input.trace == 'no'", 1075 "condition": "config.win32", 1076 "output": [ "privateFeature" ] 1077 }, 1078 "topleveldomain": { 1079 "label": "QUrl::topLevelDomain()", 1080 "purpose": "Provides support for extracting the top level domain from URLs. 1081 1082If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, 1083Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie.", 1084 "section": "Utilities", 1085 "output": [ "publicFeature" ] 1086 }, 1087 "win32_system_libs": { 1088 "label": "Windows System Libraries", 1089 "condition": "config.win32 && libs.advapi32 && libs.gdi32 && libs.kernel32 && libs.netapi32 && libs.ole32 && libs.shell32 && libs.uuid && libs.user32 && libs.winmm && libs.ws2_32" 1090 }, 1091 "cborstreamreader": { 1092 "label": "CBOR stream reading", 1093 "purpose": "Provides support for reading the CBOR binary format. 1094 1095Note that this is required for plugin loading. Qt GUI needs QPA plugins for basic operation.", 1096 "section": "Utilities", 1097 "output": [ "publicFeature" ] 1098 }, 1099 "cborstreamwriter": { 1100 "label": "CBOR stream writing", 1101 "purpose": "Provides support for writing the CBOR binary format.", 1102 "section": "Utilities", 1103 "output": [ "publicFeature" ] 1104 }, 1105 "binaryjson": { 1106 "label": "Binary JSON (deprecated)", 1107 "purpose": "Provides support for the deprecated binary JSON format.", 1108 "section": "Utilities", 1109 "output": [ "publicFeature" ] 1110 } 1111 }, 1112 1113 "report": [ 1114 { 1115 "type": "note", 1116 "condition": "features.journald || features.syslog || (config.qnx && features.slog2)", 1117 "message": "journald, syslog or slog2 integration is enabled. 1118If your users intend to develop applications against this build, 1119ensure that the IDEs they use either set QT_FORCE_STDERR_LOGGING to 1 1120or are able to read the logged output from journald, syslog or slog2." 1121 }, 1122 { 1123 "type": "error", 1124 "condition": "!tests.cxx11_random", 1125 "message": "C++11 <random> is required and is missing or failed to compile." 1126 }, 1127 { 1128 "type": "error", 1129 "condition": "input.doubleconversion == 'no' && !tests.xlocalescanprint", 1130 "message": "Your C library does not provide sscanf_l or snprintf_l. 1131You need to use libdouble-conversion for double/string conversion." 1132 }, 1133 { 1134 "type": "error", 1135 "condition": "!tests.atomicfptr", 1136 "message": "detected a std::atomic implementation that fails for function pointers. 1137Please apply the patch corresponding to your Standard Library vendor, found in 1138 qtbase/config.tests/atomicfptr" 1139 }, 1140 { 1141 "type": "error", 1142 "condition": [ 1143 "config.unix || config.integrity", 1144 "!features.poll_ppoll", 1145 "!features.poll_pollts", 1146 "!features.poll_poll", 1147 "!features.poll_select" 1148 ], 1149 "message": "Qt requires poll(), ppoll(), poll_ts() or select() on this platform" 1150 } 1151 ], 1152 1153 "summary": [ 1154 { 1155 "section": "Qt Core", 1156 "entries": [ 1157 "doubleconversion", 1158 "system-doubleconversion", 1159 "glib", 1160 "iconv", 1161 "icu", 1162 "mimetype-database", 1163 { 1164 "message": "Tracing backend", 1165 "type": "firstAvailableFeature", 1166 "args": "etw lttng" 1167 }, 1168 { 1169 "section": "Logging backends", 1170 "entries": [ 1171 "journald", "syslog", "slog2" 1172 ] 1173 }, 1174 { 1175 "type": "feature", 1176 "args": "qqnx_pps", 1177 "condition": "config.qnx" 1178 }, 1179 "pcre2", 1180 "system-pcre2" 1181 ] 1182 } 1183 ] 1184} 1185