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

qmake uses dereferenced symlink paths for some files

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P3: Somewhat important 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)

      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).

        1. test.tgz
          3 kB
          Jonathan Alexander
        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

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

              Created:
              Updated:

                There are no open Gerrit changes