-
-
Save grassator/11405930 to your computer and use it in GitHub Desktop.
| # If there is no version tag in git this one will be used | |
| VERSION = 0.1.0 | |
| # Need to discard STDERR so get path to NULL device | |
| win32 { | |
| NULL_DEVICE = NUL # Windows doesn't have /dev/null but has NUL | |
| } else { | |
| NULL_DEVICE = /dev/null | |
| } | |
| # Need to call git with manually specified paths to repository | |
| BASE_GIT_COMMAND = git --git-dir $$PWD/.git --work-tree $$PWD | |
| # Trying to get version from git tag / revision | |
| GIT_VERSION = $$system($$BASE_GIT_COMMAND describe --always --tags 2> $$NULL_DEVICE) | |
| # Check if we only have hash without version number | |
| !contains(GIT_VERSION,\d+\.\d+\.\d+) { | |
| # If there is nothing we simply use version defined manually | |
| isEmpty(GIT_VERSION) { | |
| GIT_VERSION = $$VERSION | |
| } else { # otherwise construct proper git describe string | |
| GIT_COMMIT_COUNT = $$system($$BASE_GIT_COMMAND rev-list HEAD --count 2> $$NULL_DEVICE) | |
| isEmpty(GIT_COMMIT_COUNT) { | |
| GIT_COMMIT_COUNT = 0 | |
| } | |
| GIT_VERSION = $$VERSION-$$GIT_COMMIT_COUNT-g$$GIT_VERSION | |
| } | |
| } | |
| # Turns describe output like 0.1.5-42-g652c397 into "0.1.5.42.652c397" | |
| GIT_VERSION ~= s/-/"." | |
| GIT_VERSION ~= s/g/"" | |
| # Now we are ready to pass parsed version to Qt | |
| VERSION = $$GIT_VERSION | |
| win32 { # On windows version can only be numerical so remove commit hash | |
| VERSION ~= s/\.\d+\.[a-f0-9]{6,}// | |
| } | |
| # Adding C preprocessor #DEFINE so we can use it in C++ code | |
| # also here we want full version on every system so using GIT_VERSION | |
| DEFINES += GIT_VERSION=\\\"$$GIT_VERSION\\\" | |
| # By default Qt only uses major and minor version for Info.plist on Mac. | |
| # This will rewrite Info.plist with full version | |
| macx { | |
| INFO_PLIST_PATH = $$shell_quote($${OUT_PWD}/$${TARGET}.app/Contents/Info.plist) | |
| QMAKE_POST_LINK += /usr/libexec/PlistBuddy -c \"Set :CFBundleShortVersionString $${VERSION}\" $${INFO_PLIST_PATH} | |
| } |
It seems, instead of CFBundleShortVersionString, I can also use CFBundleGetInfoString; this is set to "Created by Qt/QMake" by default and is displayed as the contents of the 'Version' field in the Mac OS X info dialog (the one displayed by right-clicking the .app application file and selecting 'Get Info').
I realize this is a couple of years old, but if anyone else lands here this might be useful.
You can replace the whole !contains(GIT_VERSION,\d+\.\d+\.\d+) { section that is recreating the tag-num-ghash format if you simply change the initial git command from:
git describe --always --tagsto:
git describe --longThis will result in git describe always returning it in the tag-num-ghash format. (Reference: the git docs)
Qual o melhor script?
Hi.
Please, check my repo. Set Qt App version from git.
Thanks for your effort, this is a great start to getting version info from git into my application! :-)
Out of the box, the ante-last step seems to fail on Mac OS X 10.8 / XCode Version 5.1.1 (5B1008) with
Has this entry possible been introduced only in a later version ? What Mac OS X version was this written on ?