> Please stop saying that to fuel your argument just because I disagree with 
> some of your points; it sounds kind of rude. Also, I am one of these 
> "stakeholders", though I'm not sure what definition you're going off of, 
> because the dictionary's definition "a person with an interest or concern in 
> something" would include you as well, now, wouldn't it? ;)

Well this is generic definition, but from perspective of project management 
"stakeholder" is someone going to be (maybe seriously) affected by the changes. 
Maybe I assumed incorrectly that you are not running some commercial or OSS 
projects based on Qt. Do you?

> Also, believe it or not, but I agree with not copying frameworks by default 
> (see below)...

Okay. From me it simply does not matter as long it can be turned on/off with 
simple switch like CONFIG -= .... I just said I don't want start again 
discussion about performance, speed, etc. etc. I am sorry if that has sounded 
rude.

> This falls apart in the face of third party libraries. Who says a particular 
> application is even using Qt with qmake?

Nobody. But give me some real example of project using qmake but not using Qt.

> Yes, cp is a very slow way of copying, and is especially intolerable for 
> incremental builds. Using rsync is much better as you get instantaneous (< 
> 70ms) incremental builds (and makes your speed argument about making copying 
> non-default, totally pointless).

I explicitly wrote this is just sketch, a rough example, not actual 
implementation. So please don't bash me for mentioning "cp".

> So, this is all wrong; the biggest problem is that it's too Qt centric.

That's not the point. Point is that if we change something it should work for 
Qt apps out of the box, w/o any need to change existing projects. Unless these 
changes gonna land in some major release i.e. Qt 6.

> Also, it's extremely inflexible (as is macdeployqt). In the real world, 
> people use more libraries than just Qt and may want to customize their bundle 
> layout, the locations of embedded frameworks, etc. So let's summarize what 
> must be done:

I agree that such facility should be provided internally while implementing 
Phase II changes.

> (1) Add qmake options QMAKE_EMBEDDED_FRAMEWORKS, QMAKE_EMBEDDED_LIBRARIES, 
> QMAKE_EMBEDDED_PLUGINS, each taking a list of absolute paths and/or objects; 
> applies to any qmake bundle target, app, framework, etc. Does nothing for 
> non-bundle targets. Does nothing outside of OS X and iOS.

Makes sense.

> (1a) "objects" (don't know what this is called in qmake but INSTALLS works 
> similarly) meaning:
> 
> weirdlib.src = /Library/Frameworks/WeirdLib.framework
> weirdlib.dst = $$join($$QMAKE_EMBEDDED_FRAMEWORKS_LOCATION, 
> SubFolderForSomeReason)
> weirdlib.headers = true
> weirdlib.variants = debug release
> QMAKE_EMBEDDED_FRAMEWORKS += weirdlib /Library/Frameworks/Sparkle.framework

Thumbs up. Good idea.

> (4) User's OWN responsibility (NOT qmake's) to set QMAKE_RPATHDIR for their 
> application/library/framework to whatever they like - 
> @executable_path/../Frameworks, $$[QT_INSTALL_LIBS], /Library/Application 
> Support/FooBar/Frameworks, etc.

I disagree here. This should work out of the box for any simple or existing Qt 
app, regardless what Qt modules it uses. Requiring changes to existing projects 
is bad idea.

> (1) NO changes are made to USER targets by qmake, ever. That means qmake MUST 
> NOT set any rpaths in user targets unless EXPLICITLY given by the user with 
> QMAKE_RPATHDIR (currently you are doing this but only as a transitionary 
> measure and it will be removed once support for copying frameworks is added).

Correct me if I am wrong, but changes are needed to all existing projects 
or/and user environment (DYLD_...), otherwise their freshly built app won't 
start and we get plenty of post "why may app no longer starts with new Qt 
release".

> Now, if some people don't like the standard way of doing things... scenario: 
> user doesn't want to copy frameworks (note that your no-default-copy idea 
> falls apart for third party libraries so you'd need to end up adding 
> additional rpaths to your app ANYWAYS):
> 
> <code>
> CONFIG(debug, debug|release) {
>    QMAKE_EMBEDDED_FRAMEWORKS =  # empty
>    QMAKE_RPATHDIR = $$[QT_INSTALL_LIBS]
> }
> <code>

So what's the tradeoff here? Forcing changes to existing (possible abandoned, 
non-maintained anymore) projects in favor of not running install_name_tool on 
bundle step?

> (1) No need for `install_name_tool -delete_rpath` when you want to release.

Frankly I completely don't get your arguments that install_name_tool 
-delete_rpath is evil. Anyway in most of the cases you will require to codesign 
the executable within the bundle, which does also modify macho-o.

> (2) Doesn't bother anyone else or engineer qmake completely for one single 
> non-standard use case (i.e. yours).

But does bother everyone using standard use cases.

> Discuss. Keep in mind that I am very much in favour of solutions that will 
> serve all parties' use cases. Flexibility here is key.

As long as it does not impact majority of existing users & projects.

--Adam
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to