summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>2012-04-23 20:38:41 +0200
committerQt by Nokia <qt-info@nokia.com>2012-06-28 03:14:24 +0200
commitbb6251a7a0e1ff7d0c628a6e3420bf7bac59cfdb (patch)
tree51b1860a3703c1478e7bc8edc7b16b08ec720934
parenta4628855ee95ef359e3ea66fcdb47dc03f14a9c4 (diff)
revamp the build/install targets of auxilliary files
files will now always be copied to the build dir, and install targets will be created always as well. Change-Id: I42a57d7fb6536ec3e5ade088f02872484891507e Reviewed-by: Sarah Jane Smith <sarah.j.smith@nokia.com>
-rw-r--r--README50
-rw-r--r--pkg.pri100
-rw-r--r--src/imports/threed/threed.pro22
-rw-r--r--src/quick3d/quick3d.pro22
4 files changed, 65 insertions, 129 deletions
diff --git a/README b/README
index f304eef07..0b5cc8dd5 100644
--- a/README
+++ b/README
@@ -81,44 +81,18 @@ This section is only for those developing Qt3D. Read on to discover how
the building of packages works. This section is also important if you want to
change how the structure of the Qt3D pro files work.
-Qt3D is intended to be built in one of two ways:
-
-1) Normal developer way:
- qmake && make
-2) Package creation way:
- qmake CONFIG+=package && INSTALL_ROOT=tmp make install
-
-In 1) the .pro files will cause the toolchain to place the libraries, plugins
-header files and other components of Qt3D directly into place, as part of
-the compile process. What does "in place" mean? Run "qmake -query" to see
-the paths where the files are placed - QML plugins go in $$[QT_INSTALL_IMPORTS]
-for example. In this mode, there is no need to run "make install" because the
-files are already in their target destination. Here the "target destination"
-means the Qt which is being built against.
-
-First note that Qt3D has to be installed into the target Qt. This is because
-Qt3D has QML plugins and resources, as well as shared libraries, all of which
-must be resolved by the QMLViewer of the target Qt at runtime. Here where "qmake"
-is referred to it means the qmake inside the target Qt. Since QtQml
-recommends using QMLViewer when developing and debugging QML Apps, in the developer
-case - which is what Qt3D is for - it has to install directly into the target Qt.
-
-In this mode 1) after the main library is compiled subsequent targets can simply
-resolve includes and link time dependencies by use of qt3d.prf and qtquick3d.prf.
-These two files are installed into the target Qt's makespecs/features directory
-during the processing of the qt3d.pro file.
-
-In 2) the libraries, plugins and so on are sitting inside the build tree after
-the compile step. As a result in order to resolve includes and dependencies
-the build system has to navigate the build tree with paths like "-L../../../threed"
-to locate the Qt3D libraries.
-
-Actually there is one build artifact that is not just left where it lands in the
-build tree - the header files. These are actually copied into an "include"
-directory inside the build root directory. This is because at present the header
-files all live inside their own seperate subdirectories under "threed" and would
-be too cumbersome to path in explicitly.
+To build Qt3D, run:
+
+ qmake && make
+
+The .pro files will cause the toolchain to place the libraries, QML files and
+meshes of Qt3D directly into place, as part of the compile process. The files
+go into the bin/ directory, and the executables can be run directly from there.
+If you are doing a developer build, plugins will be installed in such a way
+that Qt will find them.
After building the tree the install step is invoked using the INSTALL_ROOT environment
export to cause the installation rules to place all the files into a sandboxed
-install tree, ready for packaging.
+install tree, ready for packaging:
+
+ INSTALL_ROOT=tmp make install
diff --git a/pkg.pri b/pkg.pri
index 73c021640..bd214eb0f 100644
--- a/pkg.pri
+++ b/pkg.pri
@@ -3,26 +3,16 @@
# qmlres.cpp. Once Qt5 is stable and deployment is clear this will be
# removed. Also check the README file.
-package {
- # default install path for packaging qml resources - package case
- resource_dir = $$[QT_INSTALL_DATA]/qt3d/resources/$$CATEGORY/$${TARGET}
-} else {
- # if we're not packaging, build all our demos/examples/etc and supporting files
- # into $BUILD_DIR/bin
- DESTDIR = ../../../bin
+# package the binary wrapper that launches the QML
+target.path = $$[QT_INSTALL_DATA]/qt3d
+INSTALLS += target
- # default install path for packaging qml resources - developer case
- resource_dir = $$DESTDIR/resources/$$CATEGORY/$${TARGET}
-}
+macx: \
+ resource_dir = $${TARGET}.app/Contents/Resources
+else: \
+ resource_dir = resources/$$CATEGORY/$${TARGET}
-# package the binary wrapper that launches the QML
-package {
- macx: resource_dir = $$[QT_INSTALL_DATA]/qt3d/$${TARGET}.app/Contents/Resources
- target.path = $$[QT_INSTALL_DATA]/qt3d
- INSTALLS += target
-} else {
- macx: resource_dir = $$DESTDIR/$${TARGET}.app/Contents/Resources
-}
+DESTDIR = $$shadowed($$PWD)/bin
# The QML_INFRA_FILES and QML_MESHES_FILES are both about QML based
# applications, so we'll install them into QT_INSTALL_DATA instead of
@@ -38,57 +28,33 @@ package {
!isEmpty(QML_INFRA_FILES) {
# rules to copy files from the *base level* of $$PWD/qml into the right place
- package {
- copyqmlinfra_install.files = $$QML_INFRA_FILES
- copyqmlinfra_install.path = $$resource_dir/qml
- INSTALLS += copyqmlinfra_install
- } else {
- # if we're not packaging, put all our demos/examples and supporting files
- # into $BUILD_DIR/bin
- target_dir = $$resource_dir/qml
- target_dir ~= s,/,$$QMAKE_DIR_SEP,
- # create extra qmake compiler to copy files across during build step
- copyqmlinfra.input = QML_INFRA_FILES
- copyqmlinfra.output = $$target_dir/${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
- !win32|if(win32-g++:!isEmpty(QMAKE_SH)) {
- # in mac, linux, and windows-with-mingw $$QMAKE_MKDIR has -p so this will always work
- copyqmlinfra.commands = $$QMAKE_MKDIR $$target_dir && $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
- } else {
- # If we are in windows, and not a mingw shell, then the mkdir binary does not handle
- # the -p switch, and will fail if the directory already exists, so make it subject to
- # an "exists" test. The parens are necessary otherwise the copy won't occur when the
- # test fails, since $$QMAKE_CHK_DIR_EXISTS is "IF NOT EXISTS"
- copyqmlinfra.commands = ($$QMAKE_CHK_DIR_EXISTS $$target_dir $$QMAKE_MKDIR $$target_dir) && $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
- }
- copyqmlinfra.CONFIG += no_link_no_clean
- copyqmlinfra.variable_out = POST_TARGETDEPS
- QMAKE_EXTRA_COMPILERS += copyqmlinfra
- }
+ copyqmlinfra_install.files = $$QML_INFRA_FILES
+ copyqmlinfra_install.path = $$target.path/$$resource_dir/qml
+ INSTALLS += copyqmlinfra_install
+
+ # put all our demos/examples and supporting files into $BUILD_DIR/bin
+ target_dir = $$DESTDIR/$$resource_dir/qml
+ # create extra qmake compiler to copy files across during build step
+ copyqmlinfra.input = QML_INFRA_FILES
+ copyqmlinfra.output = $$target_dir/${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
+ copyqmlinfra.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+ copyqmlinfra.CONFIG += no_link no_clean
+ copyqmlinfra.variable_out = POST_TARGETDEPS
+ QMAKE_EXTRA_COMPILERS += copyqmlinfra
}
!isEmpty(QML_MESHES_FILES) {
+
# rules to copy files from the *base level* of $$PWD/qml/meshes into the right place
- package {
- copyqmlmeshes_install.files = $$QML_MESHES_FILES
- copyqmlmeshes_install.path = $$resource_dir/qml/meshes
- INSTALLS += copyqmlmeshes_install
- } else {
- target_dir = $$resource_dir/qml/meshes
- target_dir ~= s,/,$$QMAKE_DIR_SEP,
- copyqmlmeshes.input = QML_MESHES_FILES
- copyqmlmeshes.output = $$target_dir/${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
- !win32|if(win32-g++:!isEmpty(QMAKE_SH)) {
- # in mac, linux, and windows-with-mingw $$QMAKE_MKDIR has -p so this will always work
- copyqmlmeshes.commands = $$QMAKE_MKDIR $$target_dir && $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
- } else {
- # If we are in windows, and not a mingw shell, then the mkdir binary does not handle
- # the -p switch, and will fail if the directory already exists, so make it subject to
- # an "exists" test. The parens are necessary otherwise the copy won't occur when the
- # test fails, since $$QMAKE_CHK_DIR_EXISTS is "IF NOT EXISTS"
- copyqmlmeshes.commands = ($$QMAKE_CHK_DIR_EXISTS $$target_dir $$QMAKE_MKDIR $$target_dir) && $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
- }
- copyqmlmeshes.CONFIG += no_link_no_clean
- copyqmlmeshes.variable_out = POST_TARGETDEPS
- QMAKE_EXTRA_COMPILERS += copyqmlmeshes
- }
+ copyqmlmeshes_install.files = $$QML_MESHES_FILES
+ copyqmlmeshes_install.path = $$target.path/$$resource_dir/qml/meshes
+ INSTALLS += copyqmlmeshes_install
+
+ target_dir = $$DESTDIR/$$resource_dir/qml/meshes
+ copyqmlmeshes.input = QML_MESHES_FILES
+ copyqmlmeshes.output = $$target_dir/${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
+ copyqmlmeshes.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+ copyqmlmeshes.CONFIG += no_link no_clean
+ copyqmlmeshes.variable_out = POST_TARGETDEPS
+ QMAKE_EXTRA_COMPILERS += copyqmlmeshes
}
diff --git a/src/imports/threed/threed.pro b/src/imports/threed/threed.pro
index 06a2ffb05..5d31a9287 100644
--- a/src/imports/threed/threed.pro
+++ b/src/imports/threed/threed.pro
@@ -33,18 +33,16 @@ QML_INFRA_FILES = \
library.xml \
plugins.qmltypes
-package {
- copyqmlinfra_install.files = $$QML_INFRA_FILES
- copyqmlinfra_install.path = $$[QT_INSTALL_IMPORTS]/Qt3D
- INSTALLS += copyqmlinfra_install
-} else {
- copyqmlinfra.input = QML_INFRA_FILES
- copyqmlinfra.output = $$[QT_INSTALL_IMPORTS]/Qt3D/${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
- copyqmlinfra.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
- copyqmlinfra.CONFIG += no_link_no_clean
- copyqmlinfra.variable_out = PRE_TARGETDEPS
- QMAKE_EXTRA_COMPILERS += copyqmlinfra
-}
+copyqmlinfra_install.files = $$QML_INFRA_FILES
+copyqmlinfra_install.path = $$[QT_INSTALL_IMPORTS]/Qt3D
+INSTALLS += copyqmlinfra_install
+
+copyqmlinfra.input = QML_INFRA_FILES
+copyqmlinfra.output = $$DESTDIR/${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
+copyqmlinfra.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+copyqmlinfra.CONFIG += no_link no_clean
+copyqmlinfra.variable_out = PRE_TARGETDEPS
+QMAKE_EXTRA_COMPILERS += copyqmlinfra
OTHER_FILES += \
README.plugins_types \
diff --git a/src/quick3d/quick3d.pro b/src/quick3d/quick3d.pro
index 95e9e7ffb..5e6ea12a4 100644
--- a/src/quick3d/quick3d.pro
+++ b/src/quick3d/quick3d.pro
@@ -59,18 +59,16 @@ QML_INFRA_FILES += \
teapot.bez
# see the file README.library_xml for more on library.xml
-package {
- copyqmlinfra_install.files = $$QML_INFRA_FILES
- copyqmlinfra_install.path = $$[QT_INSTALL_IMPORTS]/Qt3D/Shapes
- INSTALLS += copyqmlinfra_install
-} else {
- copyqmlinfra.input = QML_INFRA_FILES
- copyqmlinfra.output = $$[QT_INSTALL_IMPORTS]/Qt3D/Shapes/${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
- copyqmlinfra.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
- copyqmlinfra.CONFIG += no_link_no_clean
- copyqmlinfra.variable_out = PRE_TARGETDEPS
- QMAKE_EXTRA_COMPILERS += copyqmlinfra
-}
+copyqmlinfra_install.files = $$QML_INFRA_FILES
+copyqmlinfra_install.path = $$[QT_INSTALL_IMPORTS]/Qt3D/Shapes
+INSTALLS += copyqmlinfra_install
+
+copyqmlinfra.input = QML_INFRA_FILES
+copyqmlinfra.output = $$QT.3dquick.imports/Qt3D/Shapes/${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
+copyqmlinfra.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+copyqmlinfra.CONFIG += no_link no_clean
+copyqmlinfra.variable_out = PRE_TARGETDEPS
+QMAKE_EXTRA_COMPILERS += copyqmlinfra
OTHER_FILES += \
README.plugins_types \