[Interest] Deploying on Mac permissions and automation

2014-04-07 Thread Sensei
Dear all,

I am experimenting with MacOS X (Qt 4.8.5), and I am finding it quite 
unusual. The application is built by Xcode, and Qt comes from homebrew.

The first question: does macdeployqt need special permissions? If I run 
it as a standard user, I get errors, if I sudo it, everything is fine:


sensei:Debug% macdeployqt MyApp.app
ERROR: error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip:
 
file: 
/Users/sensei/Documents/Projects/MyApp/MyApp/DerivedData/MyApp/Build/Products/Debug/MyApp.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore
 
is not writable (Permission denied)

ERROR: 
ERROR: error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't open input file: 
MyApp.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore for 
writing (Permission denied)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't lseek to offset: 0 in file: 
MyApp.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore for 
writing (Bad file descriptor)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't write new headers in file: 
MyApp.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore (Bad 
file descriptor)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't close written on input file: 
MyApp.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore (Bad 
file descriptor)

ERROR: 
ERROR: error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip:
 
file: 
/Users/sensei/Documents/Projects/MyApp/MyApp/DerivedData/MyApp/Build/Products/Debug/MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui
 
is not writable (Permission denied)

ERROR: 
ERROR: error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't open input file: 
MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui for 
writing (Permission denied)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't lseek to offset: 0 in file: 
MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui for 
writing (Bad file descriptor)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't write new headers in file: 
MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui (Bad file 
descriptor)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't close written on input file: 
MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui (Bad file 
descriptor)

ERROR: 
ERROR: error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't open input file: 
MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui for 
writing (Permission denied)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't lseek to offset: 0 in file: 
MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui for 
writing (Bad file descriptor)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't write new headers in file: 
MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui (Bad file 
descriptor)
error: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:
 
can't close written on input file: 
MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui (Bad file 
descriptor)

ERROR: 





However, with sudo it works:

sensei:Debug% sudo macdeployqt MyApp.app -verbose=3
Log: Using otool:
Log:  inspecting MyApp.app/Contents/MacOS/MyApp
Log: Adding framework:
Log: Framework name QtCore.framework
  Framework directory /usr/local/lib/
  Framework path /usr/local/lib/QtCore.framework
  Binary directory Versions/4
  Binary name QtCore
  Binary path /Versions/4/QtCore
  Version 4
  Install name /usr/local/lib/QtCore.framework/Versions/4/QtCore
  Deployed install name 
@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore
  Source file Path /usr/local/lib/QtCore.framework/Versions/4/QtCore
  Destination Directory (relative to bundle) 
Contents/Frameworks/QtCore.framework/Versions/4

Log: Adding framework:
Log: Framework name QtGui.framework
  Framework directory /usr/local/lib/
  Framework path /usr/local/lib/QtGui.framework
  Binary directory Versions/4
  Binary name QtGui
  Binary path /Versions/4/QtGui
  Version 4
  Install name /usr/local/lib/QtGui.framework/Versions/4/QtGui
  Deployed install name 

Re: [Interest] Deploying on Mac permissions and automation

2014-04-07 Thread Thiago Macieira
Em seg 07 abr 2014, às 13:22:08, Portale Alessandro escreveu:
 Hi,
 
 I had this happening with homebrew's Qt as-well. Perhaps it is because
 homebrew sets the owner of the Qt files to root (but not 100% sure). Anyway
 although it is great that homebrew ships Qt, I would not suggest deploying
 applications with their Qt binaries. It may result in a package that won't
 run on lower versions of OSX than your development machine has, because of
 a high macosx-version-min (happened to me).
 
 Using a binary Qt package or building Qt yourself with a low
 macosx-version-min is safer, and won't require sudo for macdeployqt.

It happens because Homebrew installs the Qt libraries as read-only for all 
users and QFile::copy helpfully sets the permission when it copies. Then otool 
can't change the file because it's read-only.

I've fixed this for Qt 4.8.6.
-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center

___
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest