Details
-
Bug
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
4.7.4
-
None
-
QMake version 2.01a
Using Qt version 4.7.4
GNU Make 3.81
Red Hat Enterprise Linux Server release 5.7 (Tikanga)
Description
Qmake uses the target file paths of some of the input files in its produced makefiles. i.e. It probably uses QFileInfo::canonicalFilePath() and not QFileInfo::absoluteFilePath().
This is an issue for us because we use Rational's synergy source control system which creates symlinked working copy checkouts to a central cache of currently worked on files by default on unix.
So for instance all our working copy files look something like this:
main.cpp -> /ccmdb_data/main/st_root/cache/source/#20/36320
From a quick bit of testing .pri,.pro and .h files (but not .cpp) have their symlinks transformed when qmake runs. For the above synergy paths the # characters in the synergy path then break the make as follows.
test> ls -g total 4.0K drwxrwxr-x 3 dev 4.0K Nov 10 09:41 cache lrwxrwxrwx 1 dev 17 Nov 10 09:42 main.cpp -> cache/#20/foo.cpp lrwxrwxrwx 1 dev 23 Nov 10 09:42 MainWindow.cpp -> cache/#20/fooWindow.cpp lrwxrwxrwx 1 dev 21 Nov 10 09:42 MainWindow.h -> cache/#20/fooWindow.h lrwxrwxrwx 1 dev 22 Nov 10 09:43 MainWindow.ui -> cache/#20/fooWindow.ui lrwxrwxrwx 1 dev 17 Nov 10 09:46 test.pri -> cache/#20/foo.pri lrwxrwxrwx 1 dev 17 Nov 10 09:43 test.pro -> cache/#20/foo.pro test> qmake test.pro test> make Makefile:137: *** missing separator. Stop. test> grep foo Makefile # Project: cache/#20/foo.pro # Command: /usr/local/Trolltech/Qt-4.7.4/bin/qmake -o Makefile cache/#20/foo.pro cache/#20/foo.pri \ cache/#20/foo.pro Makefile: cache/#20/foo.pro /usr/local/Trolltech/Qt-4.7.4/mkspecs/linux-g++-64/qmake.conf /usr/local/Trolltech/Qt-4.7.4/mkspecs/common/g++.conf \ cache/#20/foo.pri \ $(QMAKE) -o Makefile cache/#20/foo.pro cache/#20/foo.pri: @$(QMAKE) -o Makefile cache/#20/foo.pro main.o: main.cpp cache/#20/fooWindow.h MainWindow.o: MainWindow.cpp cache/#20/fooWindow.h \
The make fails at the line below:
cache/#20/foo.pri: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/release.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/default_post.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/warn_on.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/qt.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/unix/thread.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/moc.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/resources.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/uic.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/yacc.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/lex.prf: /usr/local/Trolltech/Qt-4.7.4/mkspecs/features/include_source_dir.prf: /usr/local/Trolltech/Qt-4.7.4/lib/libQtGui.prl: /usr/local/Trolltech/Qt-4.7.4/lib/libQtCore.prl: qmake: FORCE @$(QMAKE) -o Makefile cache/#20/foo.pro
For us dereferencing the symlinks also means we cannot use gmake --check-symlink-times to get dependancy checking correct (synergy sets the modifed timestamp to the time of the checkin not the checkout as it shares the checked out but locked files between developer working copies).
Attachments
Issue Links
- is duplicated by
-
QTBUG-61687 $$PWD returns the target path of NTFS symlink instead of the source one
- Closed