# # # delete "osx_bundle.sh" # # patch "NEWS" # from [94103c517dc4f526f296170fb162792d4ebb035b] # to [c7d61fb5fd0a69145eba940db20ec281e354b867] # # patch "README" # from [989237210190016ae14a0fb7f3aec263493759ad] # to [ea3ddcd08f19e4493dcc367ca14610b39fb3d661] # # patch "guitone.pro" # from [ac8fdbbeee29559174709b8af555ceda2007212e] # to [98a47e299600cdee5c349882d5b20a23e1efca24] # ============================================================ --- NEWS 94103c517dc4f526f296170fb162792d4ebb035b +++ NEWS c7d61fb5fd0a69145eba940db20ec281e354b867 @@ -1,18 +1,22 @@ xxxx-xx-xx (1.0rc3) xxxx-xx-xx (1.0rc3) - - changed: the possibility to select branch sets like com.project* in - the changeset browser has been removed + - changed: the possibility to select branch sets like com.project* in + the changeset browser has been removed - new: drag'n'drop support in the workspace view to easily rename items - - new: show the complete revision diff against each parent in the + - new: show the complete revision diff against each parent in the changeset browser - improved: compatibility with MS Visual Studio 2008 (closes FS#48, thanks to Phil Hannent) - bugfix: crash when a branch was double-clicked in the changeset browser (closes FS#50) - bugfix: hang / crash on quit on Mac OS X (closes FS#47) - - bugfix: model-related crash under certain circumstances when a + - bugfix: model-related crash under certain circumstances when a revision diff was triggered - bugfix: file diff dialog could be opened from the revision diff dialog for added files and mtn failed to load the bogus diff + - internal: build system improvements (check README for more details): + * diagnostic messages if needed tools are not found + * lrelease is now called automatically + * include Mac OS X deploying and bundling as separate targets - internal: bind guitone's internal settings system late to the needed QSettings backend; improve the creation of Mac OS X distributable binaries and images ============================================================ --- README 989237210190016ae14a0fb7f3aec263493759ad +++ README ea3ddcd08f19e4493dcc367ca14610b39fb3d661 @@ -7,6 +7,10 @@ targeted at beginners. Guitone is copylefted under the terms of the GNU General Public License Version 3, or, at your option, any later version of this license. + +Building +======== + You need Qt >= 4.5.0 to build and monotone >= 0.46 (or a monotone with an interface version of 12.0 or greater) to run guitone. Earlier versions do not have all the infrastructure for certain functionalities available, but might @@ -14,31 +18,46 @@ file and rebuild monotone before you can actually make it work with older versions - but this is not recommended.) -To build under Linux / Mac OS X, just do +If you like to build on Windows, you either need a MingW-enabled or +Visual Studio-enabled version of Qt. Please check the docs at qt.nokia.com +for assistance how to build and / or install Qt on Windows. +To build under Windows (MingW) / Linux / Mac OS X, just do + $ cd /path/to/guitone - $ lrelease guitone.pro $ qmake -config release $ make -You can also build guitone with Xcode on Mac OS X. You should have a recent -version of Xcode installed (>= 2.2 because of gcc bugs) which is usually -found somewhere on the installation DVD. Then you can create a Xcode -project file with +The following additional build targets are available: - $ qmake -spec macx-xcode + macdeploy (Mac OS X only): + Deploy the Qt libraries and plugins in the application bundle -and open this with Xcode. If you need to tweak settings (i.e. architecture) -in the Qt project file (guitone.pro), remember to redo this step. + macdisk (Mac OS X only): + Create a distributable disk image containing the deployed + application bundle and a set of text documents -The created binary can be found in bin/. +Some influential variables (qmake VARNAME=value): -If you like to build on Windows, all you need is a working version of -Qt. Please check the docs at trolltech.com for assistance how to build and / or -install Qt on Windows. -After that get the sources of guitone, unpack them into some directory -and run qmake in it. Then start your favourite make tool and you're done. + LRELEASE (all platforms): + Path to Qt's lrelease utility + MTN (all platforms): + Path to a monotone binary to determine the base revision + of the version which is about to be built + + MACDEPLOYQT (Mac OS X only): + Path to Qt's macdeployqt utility + + HDIUTIL (Mac OS X only): + Path to Mac OS X' hdiutil disk utility + +The created binary and disk image can be found in bin/. + + +Obtaining the source +==================== + The most recent version can always be obtained from the guitone repository at thomaskeller.biz. guitone is located in the branch net.venge.monotone.guitone: @@ -51,7 +70,7 @@ ============= * If you encounter crashes, make sure that you've cleaned out any old - settings directory, usually under .config/GUITONE or under + settings directory, usually under .config/GUITONE or under .config/Thomas\ Keller. Newer versions of guitone save their settings according to the underlying platform, ie. as config file under Mac OS X (~/Library/Preferences/biz.thomaskeller.guitone.conf) or @@ -73,19 +92,6 @@ HKEY_CURRENT_USER\Software\Thomas Keller\guitone if you're using a Windows build. - -Platform Notes -============== - -* If you like to compile guitone on Mac OS X, make sure you've - updated your gcc to 4.0.1 or newer which comes with XCode - 2.2 or later. Otherwise you'll get a "Bus error" on runtime - due to a bug in gcc 4.0.0 - - -Known Bugs -========== - * If you try an anonymous pull after you tried a pull with a specific key, the anonymous one might fail with "Key 'abc...' is unknown to server" as well, because monotone 0.46 has a bug which prevents the resetting of global @@ -100,6 +106,15 @@ http://guitone.thomaskeller.biz/g/tracker +Platform Notes +============== + +* If you like to compile guitone on Mac OS X, make sure you've + updated your gcc to 4.0.1 or newer which comes with XCode + 2.2 or later. Otherwise you'll get a "Bus error" on runtime + due to a bug in gcc 4.0.0 + + Author ====== ============================================================ --- guitone.pro ac8fdbbeee29559174709b8af555ceda2007212e +++ guitone.pro 98a47e299600cdee5c349882d5b20a23e1efca24 @@ -1,15 +1,57 @@ # -# global version strings +# global definitions # GUITONE_VERSION = "1.0rc3.dev" -# this is automatically determined if we're executing qmake in a monotone +# this is automatically determined if we are executing qmake in a monotone # workspace, for source releases however we need to set it explicitely GUITONE_REVISION = "" MIN_MTN_INT_VERSION = "12.0" MAX_MTN_INT_VERSION = "12.0" APPCAST_URL = "https://guitone.thomaskeller.biz/web/appcast.xml" +DOCFILES = "README README.driver COPYING NEWS" +DEFINES += GUITONE_VERSION=\\\"$${GUITONE_VERSION}\\\" \ + MIN_MTN_INT_VERSION=\\\"$${MIN_MTN_INT_VERSION}\\\" \ + MAX_MTN_INT_VERSION=\\\"$${MAX_MTN_INT_VERSION}\\\" \ + APPCAST_URL=\\\"$${APPCAST_URL}\\\" + # +# identification and translation handling +# +shutup=">/dev/null 2>&1" +win32:shutup="1>2>NUL" + +isEmpty(LRELEASE):LRELEASE="lrelease" +!system($$LRELEASE -version $$shutup) { + error("lrelease command '$$LRELEASE' not found") +} else { + # run lrelease on the project file to ensure all translations are compiled + # before we try to reference them in the resource file + # since lrelease itself parses this file, it skips system() calls to avoid + # endless recursion and issues warnings, so we skip these warnings here + system($$LRELEASE guitone.pro $$shutup) +} + +isEmpty(GUITONE_REVISION):!exists(_MTN) { + warning("bookkeeping directory not found and GUITONE_REVISION \ + not defined will not include revision id in build") +} + +isEmpty(GUITONE_REVISION):exists(_MTN) { + isEmpty(MTN):MTN="mtn" + !system($$MTN --version $$shutup) { + warning("mtn command '$$MTN' not found - \ + will not include revision id in build") + } else { + GUITONE_REVISION = $$system($$MTN automate get_base_revision_id) + } +} + +isEmpty(GUITONE_REVISION):GUITONE_REVISION = "?" + +DEFINES += GUITONE_REVISION=\\\"$${GUITONE_REVISION}\\\" + +# # common configuration # TEMPLATE = app @@ -245,45 +287,67 @@ MOC_DIR = tmp UI_DIR = tmp OBJECTS_DIR = tmp MOC_DIR = tmp +RCC_DIR = tmp DESTDIR = bin TRANSLATIONS = res/i18n/guitone_de.ts RESOURCES = res/guitone.qrc -RCC_DIR = tmp -exists(_MTN) { - # we could (should?) check here if we have at least mtn-0.26 here since - # otherwise get_base_revision_id is not available, but since guitone only - # runs with newer versions of monotone anyways, who cares... - unix:system(which mtn >/dev/null 2>&1):GUITONE_REVISION="$$system(mtn au get_base_revision_id)" - win32:system(mtn version 1>2>NUL):GUITONE_REVISION="$$system(mtn au get_base_revision_id)" -} - -isEmpty(GUITONE_REVISION):GUITONE_REVISION = "?" - -DEFINES += GUITONE_VERSION=\\\"$${GUITONE_VERSION}\\\" \ - GUITONE_REVISION=\\\"$${GUITONE_REVISION}\\\" \ - MIN_MTN_INT_VERSION=\\\"$${MIN_MTN_INT_VERSION}\\\" \ - MAX_MTN_INT_VERSION=\\\"$${MAX_MTN_INT_VERSION}\\\" \ - APPCAST_URL=\\\"$${APPCAST_URL}\\\" - # add guitone ico resource win32:RC_FILE = res/win32/guitone.rc -# # MacOS X specific configuration -# macx { QMAKE_LFLAGS += -framework Carbon # copy i18n resources into the final app bundle and # put the current version number into Info.plist - QMAKE_POST_LINK = cp -R res/osx/Resources bin/guitone.app/Contents && \ - sed -e \'s|@@version@@|$${GUITONE_VERSION}|g\' \ - < res/osx/Info.plist.in > bin/guitone.app/Contents/Info.plist + QMAKE_POST_LINK = cp -R res/osx/Resources bin/$$TARGET.app/Contents && \ + sed -e \'s|@@version@@|$$GUITONE_VERSION|g\' \ + < res/osx/Info.plist.in > bin/$$TARGET.app/Contents/Info.plist # add x86, ppc archs for universal release builds CONFIG(release, debug|release):CONFIG += x86 ppc QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4 QMAKE_MAC_SDK = /Developer/SDKs/MacOSX10.4u.sdk + + isEmpty(MACDEPLOYQT):MACDEPLOYQT="macdeployqt" + !system($$MACDEPLOYQT $$shutup) { + warning("macdeployqt utility '$$MACDEPLOYQT' not found \ + will not create target for application bundling") + } else { + macdeploy.depends = $$DESTDIR/$${TARGET}.app/Contents/MacOS/$$TARGET + macdeploy.target = macdeploy + macdeploy.commands = \ + [ -f bin/$${TARGET}.app/Contents/Resources/qt.conf ] || \ + $$MACDEPLOYQT $$DESTDIR/$${TARGET}.app; + + QMAKE_EXTRA_TARGETS += macdeploy + } + + isEmpty(HDIUTIL):HDIUTIL="hdiutil" + !system($$HDIUTIL help $$shutup) { + warning("hdiutil utility '$$HDIUTIL' not found \ + will not create target for disk image creation") + } else { + contains(QMAKE_EXTRA_TARGETS, macdeploy) { + IMAGEROOT=$$DESTDIR/disk-image-root + IMAGEFILE=$$DESTDIR/$$TARGET-$${GUITONE_VERSION}.dmg + + macdisk.depends = macdeploy + macdisk.target = macdisk + macdisk.commands = \ + rm -rf $$IMAGEROOT; \ + mkdir $$IMAGEROOT; \ + cp -R $$DESTDIR/$${TARGET}.app $$IMAGEROOT; \ + for f in \$$(ls $$DOCFILES); do cp \$$f $$IMAGEROOT/\$$f.txt; done; \ + rm -f $$IMAGEFILE; \ + $$HDIUTIL create -srcfolder $$IMAGEROOT -format UDBZ \ + -volname \'$$TARGET $$GUITONE_VERSION\' $$IMAGEFILE; \ + rm -rf $$IMAGEROOT + + QMAKE_EXTRA_TARGETS += macdisk + } + } } +