<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/162847>162847</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            feature: module map umbrella wildcard without recursing into subdirectories
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          torarnv
      </td>
    </tr>
</table>

<pre>
    I’m setting up Clang module maps for Qt, and hitting a bit of a sharp corner in that umbrella “.” will recurse into every subdirectory. Same with umbrella header “foo.h” , but resulting in a tonne of -Wincomplete-umbrella warnings.

Our setup in Qt is that our per-module include dirs have a flat list of public API headers in say QtCore, and then we have QtCore/6.11.0/QtCore/ with (semi) private headers of various sorts.

umbrella “.” results in including all these of these private headers, which fails the module build due to unexpected include paths:

```
/Users/torarne/build/qt/6.x/qtbase/lib/QtCore.framework/./Versions/A/Headers/6.11.0/QtCore/private/qabstractanimation_p.h:22:10: fatal error: 
'private/qobject_p.h' file not found
   22 | #include <private/qobject_p.h>
      |          ^~~~~~~~~~~~~~~~~~~~~
main.mm:3:9: fatal error: could not build module 'QtCore'
```

For framework builds on Apple platforms we could perhaps put the private headers in a PrivateHeaders directory inside the framework, but for non-framework builds on Apple platforms, or non-Apple platforms that would not work.

I tried exclude header “6.11.0/*" but doesn’t look like globs/wildcards can be used in modules.

Would be nice if there was some way to limit the wildcard inclusion, or to allow specifying wildcard exclusions. Thanks!


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVcuOq0YQ_Zr2pmQEjZ8LFsT3Wrmr3FEedxk1UJjKNN2kH2a8ybdH3Tw8Go2ioJEGQ9fh1Kk6VcJauinEgu1_YvsvG-Fdp03htBFG3TeVbh7FN_aVs1PKzuceLDpH6gZ-gIsU6ga9brxE6MVgodUGXhzjFxCqgY6mowIqcqBbEGA7YQaotVFogBS4TjjwfWVQSgHLZy7JcvcFRpISDNbeWARSTgPe0TzA-qohg7XT5pHAr6JHGMl1T7AORYPmidlqnXRP3ECy8g4MWi8jTVIgwGmlMHDd_iBV636Q6HC7go7CKFI3m7C0ZGn5izdBED-E4BcHZKeMtDcwoNnO2pCqpW8QGjIWOnFHENBK4UCSjcIMvpJUQ_n920zbBkArHvDiLtrgoqjrUMGIE8by6npIsixJGb-uTyYpGD9Z7InxMwyG7sLhiq5buAtD2luw2rgln_-sxKRUZDYlFGsrZWBlo2bTzYdvBe5jR3UHrSAZBMKlZypPsoHGIzgNXuHbgLXDZtVrEK6zLC8ncuyQzn9pyfj1dxvBr1OnhqwjHOPXv10U5S3eVsKGd5KqVaCkNaLHUZtXxq8J49c_0FjSKqAF5J8X4p8oOycXoEVlnRG1E4p64UirP4ekY3nJOcvLLGV5Ca1wQgIao034GYkf30Ho6i-sXYzjR2hJIijtoNVeNSwtAYBzYMcLMJ4vorD88jlC_nUKAYgh68X2X__55GJp2QtSSd-zvMxZXp4_YVxrL5vIaarVXDjGj4six4-VScurNrBKPAVa0ArKYZAIgxSu1aa3oZEn_AFNF8bH4F1sj4_dGp35fXo4FwdW8wMpSw3GwHeFndwdBpLSavs_6ISQ-fRHotHT4ypFwJkN8w2cIWwA36bifBw6awMxXjLOI6dGo1XrRHUgtX4FSa8IN6mr0HYjyaYWprFQCwUVgrfRFbP8i1t_REYVgqIagaL_DMIogqnDPBSPYCxJPU26LriTwULLz0k7HYysR7AD1tQ-grPXwzG36I8EfuuEerWMZxODTVPkzTk_iw0W2fGQZul-x3ebrsgPOzzj6XQWfHfCfbbD_Y7zQ5bneXXidb6hgqd8n6VZmu2ylO8SrOoqS-s9Nkeskadsl2IvSCZS3vtEm9uGrPVYZAd-2h03UlQobVxanCscIb5lnIcdZooQtK38zbJdGoasfcI4chKLFoXzBkOPPxfYc3msyYdBquOaCBtoWhNOv98-hHbjjSw654Y4rEKxrzdyna-SWvdh-Mj78m87GB0cy_g1Mg7lnlO6F_zfAAAA__-h7YOC">