Uploaded image for project: 'Qbs ("Cubes")'
  1. Qbs ("Cubes")
  2. QBS-584

Depends inside Export is bogus as-is

    XMLWordPrintable

    Details

      Description

      currently, Depends inside Export represent the link-time dependencies of the exported module literally. this is suboptimal:

      • the specification is a redundant subset of the Product's Depends, which is unnecessarily verbose, and harder to maintain and tool
      • it actually doesn't work: for the product type to be easily switchable (say, choosing on the command line whether to build a library statically or dynamically), the declaration of the dependencies of the Product itself must be complete, irrespective of how the linker needs to be invoked to build it.
        • static libraries don't actually use their Depends, but forward them directly to their Export
        • dynamic libraries link against their Depends
          • there must be a flag to specify how these are forwarded to the Export
            • public dependencies on other dynamic libs (which become part of the library's link interface) are exported, so they are added as an -L/-l pair by the user
            • private dependencies on other dynamic libs also need to be exported, because some platforms (linux and bb10 at least) may need -rpath-link to resolve transitive dependencies
        • applications also export their dependencies on dlls (privately), as they must be known when launching the application (see QBS-583)

      one possible approach is to "tag" dependencies with a property:

      Product {
          Depends {
              name: "foo"
              //exported: false // the default
          }
          Depends {
              name: "bar"
              exported: true   // "export" is a reserved word
          }
      }
      

      a probably better approach is to nest the exported dependencies into the exports themselves. this mixes well with products that export multiple sub-products, we we do in qt itself:

      Product {
          // equivalent of QT_PRIVATE += multimedia
          Depends {
              name: "multimedia"
          }
          Export {
              name: "qt.location"
              // equivalent of QT += gui
              Depends {
                  name: "qt.gui"
              }
          }
          Export {
              name: "qt.location_private"
              // equivalent of QT_FOR_PRIVATE += quick
              Depends {
                  name: "qt.quick"
              }
          }
      }
      

        Attachments

          Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            Activity

              People

              Assignee:
              Unassigned
              Reporter:
              buddenha Oswald Buddenhagen
              Votes:
              7 Vote for this issue
              Watchers:
              9 Start watching this issue

                Dates

                Created:
                Updated:

                  Gerrit Reviews

                  There are no open Gerrit changes