Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-22655

qmake uses dereferenced symlink paths for some files

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • P3: Somewhat important
    • None
    • 4.7.4
    • Build tools: qmake
    • 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

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

          Activity

            People

              qtbuildsystem Qt Build System Team
              jalexander Jonathan Alexander
              Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:

                Gerrit Reviews

                  There are no open Gerrit changes