forked from openlp/openlp
Moved OS X stuff to its own repository.
This commit is contained in:
parent
7b737a69f2
commit
b8f556678d
@ -1,125 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
|
|
||||||
<key>CFBundleDocumentTypes</key>
|
|
||||||
<array>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleTypeExtension</key>
|
|
||||||
<array>
|
|
||||||
<string>osz</string>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleTypeIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>openlp-logo-with-text.icns</string>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleTypeName</key>
|
|
||||||
<string>OpenLP Service</string>
|
|
||||||
<key>CFBundleTypeRole</key>
|
|
||||||
<string>Viewer</string>
|
|
||||||
<key>LSHandlerRank</key>
|
|
||||||
<string>Owner</string>
|
|
||||||
<key>LSItemContentTypes</key>
|
|
||||||
<array>
|
|
||||||
<string>org.openlp.osz</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleTypeExtension</key>
|
|
||||||
<array>
|
|
||||||
<string>otz</string>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleTypeIconFiles</key>
|
|
||||||
<array>
|
|
||||||
<string>openlp-logo-with-text.icns</string>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleTypeName</key>
|
|
||||||
<string>OpenLP Theme</string>
|
|
||||||
<key>CFBundleTypeRole</key>
|
|
||||||
<string>Viewer</string>
|
|
||||||
<key>LSHandlerRank</key>
|
|
||||||
<string>Owner</string>
|
|
||||||
<key>LSItemContentTypes</key>
|
|
||||||
<array>
|
|
||||||
<string>org.openlp.otz</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</array>
|
|
||||||
|
|
||||||
<key>UTExportedTypeDeclarations</key>
|
|
||||||
<array>
|
|
||||||
<dict>
|
|
||||||
<key>UTTypeIdentifier</key>
|
|
||||||
<string>org.openlp.osz</string>
|
|
||||||
<key>UTTypeDescription</key>
|
|
||||||
<string>OpenLP Service</string>
|
|
||||||
<key>UTTypeConformsTo</key>
|
|
||||||
<array>
|
|
||||||
<string>public.data</string>
|
|
||||||
<string>public.content</string>
|
|
||||||
</array>
|
|
||||||
<key>UTTypeTagSpecification</key>
|
|
||||||
<dict>
|
|
||||||
<key>public.filename-extension</key>
|
|
||||||
<array>
|
|
||||||
<string>osz</string>
|
|
||||||
</array>
|
|
||||||
<key>public.mime-type</key>
|
|
||||||
<array>
|
|
||||||
<string>application/x-openlp-service</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>UTTypeIdentifier</key>
|
|
||||||
<string>org.openlp.otz</string>
|
|
||||||
<key>UTTypeDescription</key>
|
|
||||||
<string>OpenLP Theme</string>
|
|
||||||
<key>UTTypeConformsTo</key>
|
|
||||||
<array>
|
|
||||||
<string>public.data</string>
|
|
||||||
<string>public.content</string>
|
|
||||||
</array>
|
|
||||||
<key>UTTypeTagSpecification</key>
|
|
||||||
<dict>
|
|
||||||
<key>public.filename-extension</key>
|
|
||||||
<array>
|
|
||||||
<string>otz</string>
|
|
||||||
</array>
|
|
||||||
<key>public.mime-type</key>
|
|
||||||
<array>
|
|
||||||
<string>application/x-openlp-theme</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</array>
|
|
||||||
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>org.openlp</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>%(openlp_version)s</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>%(openlp_version)s</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleDisplayName</key>
|
|
||||||
<string>%(openlp_appname)s</string>
|
|
||||||
<key>CFBundleIconFile</key>
|
|
||||||
<string>openlp-logo-with-text.icns</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>MacOS/openlp</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>%(openlp_appname)s</string>
|
|
||||||
<key>CFBundleGetInfoString</key>
|
|
||||||
<string>%(openlp_appname)s %(openlp_version)s</string>
|
|
||||||
<key>LSHasLocalizedDisplayName</key>
|
|
||||||
<false/>
|
|
||||||
<key>NSAppleScriptEnabled</key>
|
|
||||||
<false/>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>LSBackgroundOnly</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,28 +0,0 @@
|
|||||||
all:
|
|
||||||
python build.py -c openlp.cfg
|
|
||||||
|
|
||||||
view:
|
|
||||||
python build.py -c openlp.cfg --package-view --compress-view
|
|
||||||
|
|
||||||
package:
|
|
||||||
|
|
||||||
python build.py -c openlp.cfg --package --package-view
|
|
||||||
|
|
||||||
bundle:
|
|
||||||
|
|
||||||
python build.py -c openlp.cfg --compress --compress-view
|
|
||||||
|
|
||||||
clean:
|
|
||||||
# remove old configuration files
|
|
||||||
rm -f openlp.spec
|
|
||||||
rm -f Info.plist
|
|
||||||
rm -f .version
|
|
||||||
|
|
||||||
# remove old build artifacts
|
|
||||||
rm -rf build
|
|
||||||
rm -rf dist
|
|
||||||
rm -rf Macopenlp.app
|
|
||||||
rm -rf OpenLP.app
|
|
||||||
rm -f warnopenlp.txt
|
|
||||||
rm -f *dmg
|
|
||||||
|
|
@ -1,74 +0,0 @@
|
|||||||
on saveImageWithItselfAsIcon(icon_image_file)
|
|
||||||
-- save icon_image_file with itself as icon
|
|
||||||
set icon_image_file_string to icon_image_file as string
|
|
||||||
tell application "Image Events"
|
|
||||||
launch
|
|
||||||
set icon_image to open file icon_image_file_string
|
|
||||||
save icon_image with icon
|
|
||||||
close icon_image
|
|
||||||
end tell
|
|
||||||
end saveImageWithItselfAsIcon
|
|
||||||
|
|
||||||
on copyIconOfTo(aFileOrFolderWithIcon, aFileOrFolder)
|
|
||||||
tell application "Finder" to set f to aFileOrFolderWithIcon as alias
|
|
||||||
-- grab the file's icon
|
|
||||||
my CopyOrPaste(f, "c")
|
|
||||||
-- now the icon is in the clipboard
|
|
||||||
tell application "Finder" to set c to aFileOrFolder as alias
|
|
||||||
my CopyOrPaste(result, "v")
|
|
||||||
end copyIconOfTo
|
|
||||||
|
|
||||||
on CopyOrPaste(i, cv)
|
|
||||||
tell application "Finder"
|
|
||||||
activate
|
|
||||||
open information window of i
|
|
||||||
end tell
|
|
||||||
tell application "System Events" to tell process "Finder" to tell window 1
|
|
||||||
keystroke tab -- select icon button
|
|
||||||
keystroke (cv & "w") using command down (* (copy or paste) + close window *)
|
|
||||||
end tell -- window 1 then process Finder then System Events
|
|
||||||
end CopyOrPaste
|
|
||||||
|
|
||||||
on run
|
|
||||||
set icon_image_file to POSIX file "%s" as alias
|
|
||||||
set dmg_file to POSIX file "/Volumes/%s" as alias
|
|
||||||
|
|
||||||
my saveImageWithItselfAsIcon(icon_image_file)
|
|
||||||
-- wait for virus scanner
|
|
||||||
delay 2
|
|
||||||
my copyIconOfTo(icon_image_file, dmg_file)
|
|
||||||
|
|
||||||
tell application "Finder"
|
|
||||||
tell disk "%s"
|
|
||||||
open
|
|
||||||
set current view of container window to icon view
|
|
||||||
set toolbar visible of container window to false
|
|
||||||
set statusbar visible of container window to false
|
|
||||||
set the bounds of container window to {400, 100, 1100, 500}
|
|
||||||
set theViewOptions to the icon view options of container window
|
|
||||||
set arrangement of theViewOptions to not arranged
|
|
||||||
set icon size of theViewOptions to 128
|
|
||||||
set background picture of theViewOptions to file ".background:installer-background.png"
|
|
||||||
if not exists file "Applications" then
|
|
||||||
make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
|
|
||||||
end if
|
|
||||||
delay 5
|
|
||||||
set position of item "%s" of container window to {160, 200}
|
|
||||||
set position of item ".Trashes" of container window to {100, 500}
|
|
||||||
set position of item ".installer-background.png" of container window to {200, 500}
|
|
||||||
set position of item ".DS_Store" of container window to {400, 500}
|
|
||||||
set position of item "Applications" of container window to {550, 200}
|
|
||||||
set position of item ".VolumeIcon.icns" of container window to {500, 500}
|
|
||||||
set position of item ".fseventsd" of container window to {300, 500}
|
|
||||||
if exists POSIX file ".SymAVx86QSFile" then
|
|
||||||
set position of item ".SymAVx86QSFile" of container window to {600, 500}
|
|
||||||
end if
|
|
||||||
open
|
|
||||||
close
|
|
||||||
update without registering applications
|
|
||||||
-- wait until the virus scan completes
|
|
||||||
delay 5
|
|
||||||
-- eject
|
|
||||||
end tell
|
|
||||||
end tell
|
|
||||||
end run
|
|
@ -1,77 +0,0 @@
|
|||||||
on saveImageWithItselfAsIcon(icon_image_file)
|
|
||||||
-- save icon_image_file with itself as icon
|
|
||||||
set icon_image_file_string to icon_image_file as string
|
|
||||||
tell application "Image Events"
|
|
||||||
launch
|
|
||||||
set icon_image to open file icon_image_file_string
|
|
||||||
save icon_image with icon
|
|
||||||
close icon_image
|
|
||||||
end tell
|
|
||||||
end saveImageWithItselfAsIcon
|
|
||||||
|
|
||||||
on copyIconOfTo(aFileOrFolderWithIcon, aFileOrFolder)
|
|
||||||
tell application "Finder" to set f to aFileOrFolderWithIcon as alias
|
|
||||||
-- grab the file's icon
|
|
||||||
my CopyOrPaste(f, "c")
|
|
||||||
-- now the icon is in the clipboard
|
|
||||||
tell application "Finder" to set c to aFileOrFolder as alias
|
|
||||||
my CopyOrPaste(result, "v")
|
|
||||||
end copyIconOfTo
|
|
||||||
|
|
||||||
on CopyOrPaste(i, cv)
|
|
||||||
tell application "Finder"
|
|
||||||
activate
|
|
||||||
set infoWindow to open information window of i
|
|
||||||
set infoWindowName to name of infoWindow
|
|
||||||
end tell
|
|
||||||
tell application "System Events" to tell process "Finder" to tell window infoWindowName
|
|
||||||
keystroke tab -- select icon button
|
|
||||||
keystroke (cv & "w") using command down (* (copy or paste) + close window *)
|
|
||||||
end tell -- window 1 then process Finder then System Events
|
|
||||||
end CopyOrPaste
|
|
||||||
|
|
||||||
on run
|
|
||||||
set icon_image_file to POSIX file "%s" as alias
|
|
||||||
set dmg_file to POSIX file "/Volumes/%s" as alias
|
|
||||||
|
|
||||||
my saveImageWithItselfAsIcon(icon_image_file)
|
|
||||||
-- wait for virus scanner
|
|
||||||
delay 2
|
|
||||||
my copyIconOfTo(icon_image_file, dmg_file)
|
|
||||||
|
|
||||||
tell application "Finder"
|
|
||||||
tell disk "%s"
|
|
||||||
open
|
|
||||||
set current view of container window to icon view
|
|
||||||
set toolbar visible of container window to false
|
|
||||||
set statusbar visible of container window to false
|
|
||||||
set the bounds of container window to {400, 100, 1100, 500}
|
|
||||||
set theViewOptions to the icon view options of container window
|
|
||||||
set arrangement of theViewOptions to not arranged
|
|
||||||
set icon size of theViewOptions to 128
|
|
||||||
set background picture of theViewOptions to file ".background:installer-background.png"
|
|
||||||
if not exists file "Applications" then
|
|
||||||
make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
|
|
||||||
end if
|
|
||||||
delay 1
|
|
||||||
set position of item "%s" of container window to {160, 200}
|
|
||||||
set position of item ".Trashes" of container window to {100, 500}
|
|
||||||
set position of item ".background" of container window to {200, 500}
|
|
||||||
set position of item ".DS_Store" of container window to {400, 500}
|
|
||||||
set position of item "Applications" of container window to {550, 200}
|
|
||||||
if exists file ".VolumeIcon.icns" then
|
|
||||||
set position of item ".VolumeIcon.icns" of container window to {500, 500}
|
|
||||||
end if
|
|
||||||
set position of item ".fseventsd" of container window to {300, 500}
|
|
||||||
if exists POSIX file ".SymAVx86QSFile" then
|
|
||||||
set position of item ".SymAVx86QSFile" of container window to {600, 500}
|
|
||||||
end if
|
|
||||||
open
|
|
||||||
close
|
|
||||||
update without registering applications
|
|
||||||
-- wait until the virus scan completes
|
|
||||||
delay 5
|
|
||||||
-- eject
|
|
||||||
end tell
|
|
||||||
end tell
|
|
||||||
end run
|
|
@ -1,40 +0,0 @@
|
|||||||
on saveImageWithItselfAsIcon(icon_image_file)
|
|
||||||
-- save icon_image_file with itself as icon
|
|
||||||
set icon_image_file_string to icon_image_file as string
|
|
||||||
tell application "Image Events"
|
|
||||||
launch
|
|
||||||
set icon_image to open file icon_image_file_string
|
|
||||||
save icon_image with icon
|
|
||||||
close icon_image
|
|
||||||
end tell
|
|
||||||
end saveImageWithItselfAsIcon
|
|
||||||
|
|
||||||
on copyIconOfTo(aFileOrFolderWithIcon, aFileOrFolder)
|
|
||||||
tell application "Finder" to set f to aFileOrFolderWithIcon as alias
|
|
||||||
-- grab the file's icon
|
|
||||||
my CopyOrPaste(f, "c")
|
|
||||||
-- now the icon is in the clipboard
|
|
||||||
tell application "Finder" to set c to aFileOrFolder as alias
|
|
||||||
my CopyOrPaste(result, "v")
|
|
||||||
end copyIconOfTo
|
|
||||||
|
|
||||||
on CopyOrPaste(i, cv)
|
|
||||||
tell application "Finder"
|
|
||||||
activate
|
|
||||||
open information window of i
|
|
||||||
end tell
|
|
||||||
tell application "System Events" to tell process "Finder" to tell window 1
|
|
||||||
keystroke tab -- select icon button
|
|
||||||
keystroke (cv & "w") using command down (* (copy or paste) + close window *)
|
|
||||||
end tell -- window 1 then process Finder then System Events
|
|
||||||
end CopyOrPaste
|
|
||||||
|
|
||||||
on run
|
|
||||||
set icon_image_file to POSIX file "%s" as alias
|
|
||||||
set dmg_file to POSIX file "%s" as alias
|
|
||||||
|
|
||||||
my saveImageWithItselfAsIcon(icon_image_file)
|
|
||||||
-- wait for virus scanner
|
|
||||||
delay 2
|
|
||||||
my copyIconOfTo(icon_image_file, dmg_file)
|
|
||||||
end run
|
|
@ -1,41 +0,0 @@
|
|||||||
on saveImageWithItselfAsIcon(icon_image_file)
|
|
||||||
-- save icon_image_file with itself as icon
|
|
||||||
set icon_image_file_string to icon_image_file as string
|
|
||||||
tell application "Image Events"
|
|
||||||
launch
|
|
||||||
set icon_image to open file icon_image_file_string
|
|
||||||
save icon_image with icon
|
|
||||||
close icon_image
|
|
||||||
end tell
|
|
||||||
end saveImageWithItselfAsIcon
|
|
||||||
|
|
||||||
on copyIconOfTo(aFileOrFolderWithIcon, aFileOrFolder)
|
|
||||||
tell application "Finder" to set f to aFileOrFolderWithIcon as alias
|
|
||||||
-- grab the file's icon
|
|
||||||
my CopyOrPaste(f, "c")
|
|
||||||
-- now the icon is in the clipboard
|
|
||||||
tell application "Finder" to set c to aFileOrFolder as alias
|
|
||||||
my CopyOrPaste(result, "v")
|
|
||||||
end copyIconOfTo
|
|
||||||
|
|
||||||
on CopyOrPaste(i, cv)
|
|
||||||
tell application "Finder"
|
|
||||||
activate
|
|
||||||
set infoWindow to open information window of i
|
|
||||||
set infoWindowName to name of infoWindow
|
|
||||||
end tell
|
|
||||||
tell application "System Events" to tell process "Finder" to tell window infoWindowName
|
|
||||||
keystroke tab -- select icon button
|
|
||||||
keystroke (cv & "w") using command down (* (copy or paste) + close window *)
|
|
||||||
end tell -- window 1 then process Finder then System Events
|
|
||||||
end CopyOrPaste
|
|
||||||
|
|
||||||
on run
|
|
||||||
set icon_image_file to POSIX file "%s" as alias
|
|
||||||
set dmg_file to POSIX file "%s" as alias
|
|
||||||
|
|
||||||
my saveImageWithItselfAsIcon(icon_image_file)
|
|
||||||
-- wait for virus scanner
|
|
||||||
delay 2
|
|
||||||
my copyIconOfTo(icon_image_file, dmg_file)
|
|
||||||
end run
|
|
@ -1,426 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
# -*- encoding: utf-8 -*-
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
|
||||||
# --------------------------------------------------------------------------- #
|
|
||||||
# Copyright (c) 2008-2011 Raoul Snyman #
|
|
||||||
# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
|
|
||||||
# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, #
|
|
||||||
# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
|
|
||||||
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund #
|
|
||||||
# --------------------------------------------------------------------------- #
|
|
||||||
# This program is free software; you can redistribute it and/or modify it #
|
|
||||||
# under the terms of the GNU General Public License as published by the Free #
|
|
||||||
# Software Foundation; version 2 of the License. #
|
|
||||||
# #
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
|
||||||
# more details. #
|
|
||||||
# #
|
|
||||||
# You should have received a copy of the GNU General Public License along #
|
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
|
||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
"""
|
|
||||||
Mac OS X Build Script
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
This script is used to build the OS X binary and the accompanying installer.
|
|
||||||
For this script to work out of the box, it depends on a number of things:
|
|
||||||
|
|
||||||
Python 2.6/2.7
|
|
||||||
This build script only works with Python 2.6/2.7
|
|
||||||
|
|
||||||
PyQt4
|
|
||||||
You should already have this installed, OpenLP doesn't work without it.
|
|
||||||
The version the script expects is the packaged one available from River
|
|
||||||
Bank Computing.
|
|
||||||
|
|
||||||
PyInstaller
|
|
||||||
PyInstaller should be a checkout of revision 1355 of trunk, and in a
|
|
||||||
directory which is configured in the openlp.cfg. The revision is very
|
|
||||||
important as there is just included a fix for builds on OS X.
|
|
||||||
|
|
||||||
To install PyInstaller, first checkout trunk from Subversion. The
|
|
||||||
easiest way is to do a
|
|
||||||
|
|
||||||
svn co http://svn.pyinstaller.org/trunk
|
|
||||||
|
|
||||||
Then you need to copy the two hook-*.py files from the "pyinstaller"
|
|
||||||
subdirectory in OpenLP's "resources" directory into PyInstaller's
|
|
||||||
"hooks" directory.
|
|
||||||
|
|
||||||
openlp.cfg
|
|
||||||
The configuration file contains settings of the version string to include
|
|
||||||
in the bundle as well as directory and file settings for different
|
|
||||||
purposes (e.g. PyInstaller location or installer background image)
|
|
||||||
|
|
||||||
To start the build process do a
|
|
||||||
|
|
||||||
make
|
|
||||||
|
|
||||||
inside the resources/osx directory. The result should be a {openlp_dmgname}.dmg
|
|
||||||
file in the same directory. If something went wrong - this sometimes happen
|
|
||||||
with the graphical commands in the Apple script - do a
|
|
||||||
|
|
||||||
make clean
|
|
||||||
|
|
||||||
and start the build process again. If you want to execute only parts of the
|
|
||||||
build process you can specify different make targets
|
|
||||||
|
|
||||||
make view -- runs the Apple scripts to set the icons
|
|
||||||
make package -- creates the dmg file and copies the application files
|
|
||||||
make bundle -- compresses the dmg file and sets the dmg file icon
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import ConfigParser
|
|
||||||
import logging
|
|
||||||
import optparse
|
|
||||||
import sys
|
|
||||||
import glob
|
|
||||||
import platform
|
|
||||||
import re
|
|
||||||
import subprocess as subp
|
|
||||||
|
|
||||||
from shutil import copy
|
|
||||||
|
|
||||||
# set the script name
|
|
||||||
script_name = "build"
|
|
||||||
|
|
||||||
|
|
||||||
def build_application(settings, app_name_lower, app_dir):
|
|
||||||
logging.info('[%s] now building the app with pyinstaller at "%s"...',
|
|
||||||
script_name, settings['pyinstaller_basedir'])
|
|
||||||
result = os.system('arch -i386 %s %s/pyinstaller.py openlp.spec' \
|
|
||||||
% ( sys.executable,
|
|
||||||
settings['pyinstaller_basedir']) )
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] The pyinstaller build reported an error, cannot \
|
|
||||||
continue!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
dist_folder = os.getcwd() + '/dist/' + app_name_lower
|
|
||||||
|
|
||||||
logging.info('[%s] copying the new plugins...', script_name)
|
|
||||||
result = os.system('cp -R %(openlp_directory)s/openlp/plugins \
|
|
||||||
%(application_directory)s/Contents/MacOS' \
|
|
||||||
% { 'openlp_directory' : settings['openlp_basedir'],
|
|
||||||
'application_directory' : app_dir })
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not copy plugins, dmg creation failed!',
|
|
||||||
script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
logging.info('[%s] removing the presentations plugin...', script_name)
|
|
||||||
result = os.system('rm -rf \
|
|
||||||
%(application_directory)s/Contents/MacOS/plugins/presentations' \
|
|
||||||
% { 'application_directory' : app_dir })
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not remove presentations plugins, dmg \
|
|
||||||
creation failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
logging.info('[%s] copying the icons to the resource directory...',
|
|
||||||
script_name)
|
|
||||||
result = os.system('cp %(icon_file)s \
|
|
||||||
%(application_directory)s/Contents/Resources' \
|
|
||||||
% { 'icon_file' : settings['openlp_icon_file'],
|
|
||||||
'application_directory' : app_dir })
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not copy the icon, dmg creation failed!',
|
|
||||||
script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
logging.info('[%s] copying the version file...', script_name)
|
|
||||||
result = os.system('CpMac %s/.version %s/Contents/MacOS' % (os.getcwd(),
|
|
||||||
app_dir))
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not copy the version file, dmg creation \
|
|
||||||
failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
logging.info('[%s] copying the new Info.plist...', script_name)
|
|
||||||
result = os.system('cp %(target_directory)s/Info.plist \
|
|
||||||
%(application_directory)s/Contents' \
|
|
||||||
% { 'target_directory' : os.getcwd(),
|
|
||||||
'application_directory' : app_dir })
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not copy the info file, dmg creation \
|
|
||||||
failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
logging.info('[%s] copying the translations...', script_name)
|
|
||||||
os.makedirs(app_dir + '/Contents/MacOS/i18n')
|
|
||||||
for ts_file in glob.glob(os.path.join(settings['openlp_basedir']
|
|
||||||
+ '/resources/i18n/', '*ts')):
|
|
||||||
result = os.system('lconvert -i %(ts_file)s \
|
|
||||||
-o %(target_directory)s/Contents/MacOS/i18n/%(base)s.qm' \
|
|
||||||
% { 'ts_file' : ts_file, 'target_directory' : app_dir,
|
|
||||||
'base': os.path.splitext(os.path.basename(ts_file))[0] })
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not copy the translations, dmg \
|
|
||||||
creation failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Backported from windows build script.
|
|
||||||
logging.info('[%s] copying the media player...', script_name)
|
|
||||||
os.makedirs(os.path.join(app_dir, 'Contents/MacOS/core/ui/media'))
|
|
||||||
source = os.path.join(settings['openlp_basedir'], u'openlp', u'core', u'ui', u'media')
|
|
||||||
dest = os.path.join(app_dir, u'Contents/MacOS/core/ui/media')
|
|
||||||
for root, dirs, files in os.walk(source):
|
|
||||||
for filename in files:
|
|
||||||
print filename
|
|
||||||
if not filename.endswith(u'.pyc'):
|
|
||||||
dest_path = os.path.join(dest, root[len(source)+1:])
|
|
||||||
if not os.path.exists(dest_path):
|
|
||||||
os.makedirs(dest_path)
|
|
||||||
copy(os.path.join(root, filename),
|
|
||||||
os.path.join(dest_path, filename))
|
|
||||||
|
|
||||||
|
|
||||||
def create_dmg(settings):
|
|
||||||
logging.info('[%s] creating the dmg...', script_name)
|
|
||||||
dmg_file = os.getcwd() + '/' + settings['openlp_dmgname'] + '.dmg'
|
|
||||||
result = os.system('hdiutil create %(dmg_file)s~ -ov -megabytes \
|
|
||||||
%(vol_size)s -fs HFS+ -volname %(vol_name)s' \
|
|
||||||
% { 'dmg_file' : dmg_file,
|
|
||||||
'vol_size' : '250',
|
|
||||||
'vol_name' : settings['openlp_appname'] })
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not create dmg file!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
logging.info('[%s] mounting the dmg file...', script_name)
|
|
||||||
output = subp.Popen(["hdiutil", "attach", dmg_file + "~.dmg"],
|
|
||||||
stdout=subp.PIPE).communicate()[0]
|
|
||||||
logging.debug(output)
|
|
||||||
|
|
||||||
p = re.compile('Apple_HFS\s+(.+?)\s*$')
|
|
||||||
result = p.search(output, re.M)
|
|
||||||
volume_basedir = ''
|
|
||||||
if result:
|
|
||||||
volume_basedir = result.group(1)
|
|
||||||
else:
|
|
||||||
logging.error('could not mount dmg file, cannot continue!')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
logging.info('[%s] copying the app (from %s) to the dmg (at %s)...',
|
|
||||||
script_name, app_dir, volume_basedir)
|
|
||||||
result = os.system('CpMac -r %s %s' \
|
|
||||||
% ( app_dir, volume_basedir ))
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not copy application, dmg creation failed!',
|
|
||||||
script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
logging.info('[%s] copying the background image...', script_name)
|
|
||||||
os.mkdir(volume_basedir + '/.background')
|
|
||||||
result = os.system('CpMac %s %s'
|
|
||||||
% (settings['installer_backgroundimage_file'],
|
|
||||||
volume_basedir + '/.background/installer-background.png'))
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not copy the background image, dmg creation\
|
|
||||||
failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
return (volume_basedir, dmg_file)
|
|
||||||
|
|
||||||
def unmount_dmg(settings, volume_basedir):
|
|
||||||
logging.info('[%s] unmounting the dmg...', script_name)
|
|
||||||
result = os.system('hdiutil detach %s' % volume_basedir)
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not unmount the dmg file, dmg creation \
|
|
||||||
failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
def compress_view(settings, seticon_scriptname, dmg_file):
|
|
||||||
logging.info('[%s] setting icon of the dmg file...', script_name)
|
|
||||||
try:
|
|
||||||
f = open(seticon_scriptname)
|
|
||||||
p = subp.Popen(["osascript"], stdin=subp.PIPE)
|
|
||||||
p.communicate(f.read() % ((os.getcwd() + '/' +
|
|
||||||
settings['openlp_dmg_icon_file']), dmg_file))
|
|
||||||
f.close()
|
|
||||||
result = p.returncode
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not set the icon to the dmg file, \
|
|
||||||
dmg creation failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
except IOError, e:
|
|
||||||
logging.error('[%s] could not adjust the view (%s), dmg creation \
|
|
||||||
failed!', script_name, e)
|
|
||||||
sys.exit(1)
|
|
||||||
except OSError, e:
|
|
||||||
logging.error('[%s] could not set the icon to the dmg file(%s), \
|
|
||||||
dmg creation failed!', script_name, e)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
def adjust_package_view(settings, adjustview_scriptname):
|
|
||||||
logging.info('[%s] making adjustments to the view...', script_name)
|
|
||||||
try:
|
|
||||||
f = open(adjustview_scriptname)
|
|
||||||
p = subp.Popen(["osascript"], stdin=subp.PIPE)
|
|
||||||
p.communicate(f.read() % ((os.getcwd() + '/' + \
|
|
||||||
settings['openlp_dmg_icon_file']),
|
|
||||||
settings['openlp_appname'],
|
|
||||||
settings['openlp_appname'],
|
|
||||||
settings['openlp_appname']))
|
|
||||||
f.close()
|
|
||||||
result = p.returncode
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not adjust the view, dmg creation \
|
|
||||||
failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
except IOError, e:
|
|
||||||
logging.error('[%s] could not adjust the view (%s), dmg creation \
|
|
||||||
failed!', script_name, e)
|
|
||||||
sys.exit(1)
|
|
||||||
except OSError, e:
|
|
||||||
logging.error('[%s] could not adjust the view (%s), dmg creation \
|
|
||||||
failed!', script_name, e)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
def compress_dmg(settings):
|
|
||||||
logging.info('[%s] compress the dmg file...', script_name)
|
|
||||||
result = os.system('hdiutil convert %s~.dmg -format UDZO \
|
|
||||||
-imagekey zlib-level=9 -o %s' \
|
|
||||||
% (dmg_file, dmg_file))
|
|
||||||
if (result != 0):
|
|
||||||
logging.error('[%s] could not compress the dmg file, dmg creation \
|
|
||||||
failed!', script_name)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
# set default actions
|
|
||||||
do_build = True
|
|
||||||
do_compress_view = True
|
|
||||||
do_package_view = True
|
|
||||||
do_create_dmg = True
|
|
||||||
do_compress_dmg = True
|
|
||||||
|
|
||||||
parser = optparse.OptionParser()
|
|
||||||
parser.add_option('-c', '--config', dest='config', help='config file',
|
|
||||||
metavar='CONFIG')
|
|
||||||
parser.add_option('-v', '--package-view', dest='package_view',
|
|
||||||
help='triggers view adjustment scripts for package',
|
|
||||||
metavar='PACKAGEVIEWONLY', action='store_true', default=False)
|
|
||||||
parser.add_option('-y', '--compress-view', dest='compress_view',
|
|
||||||
help='triggers view adjustment scripts for dmg',
|
|
||||||
metavar='COMPRESSVIEWONLY', action='store_true', default=False)
|
|
||||||
parser.add_option('-p', '--package', dest='package',
|
|
||||||
help='package application folder to dmg', metavar='PACKAGE',
|
|
||||||
action='store_true', default=False)
|
|
||||||
parser.add_option('-z', '--compress', dest='compress',
|
|
||||||
help='compresses the existing dmg', metavar='COMPRESS',
|
|
||||||
action='store_true', default=False)
|
|
||||||
parser.add_option('-b', '--basedir', dest='basedir',
|
|
||||||
help='volume basedir like /Volumes/OpenLP', metavar='BASEDIR',
|
|
||||||
default='/Volumes/OpenLP')
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
|
||||||
|
|
||||||
# if an option is set, false all
|
|
||||||
if (options.package_view is True or options.compress_view is True
|
|
||||||
or options.package is True or options.compress is True):
|
|
||||||
do_build = False
|
|
||||||
do_package_view = options.package_view
|
|
||||||
do_compress_view = options.compress_view
|
|
||||||
do_create_dmg = options.package
|
|
||||||
do_compress_dmg = options.compress
|
|
||||||
|
|
||||||
if not options.config:
|
|
||||||
parser.error('option --config|-c is required')
|
|
||||||
|
|
||||||
logHandler = logging.StreamHandler()
|
|
||||||
logHandler.setFormatter(logging.Formatter(
|
|
||||||
'%(asctime)s %(levelname)-8s %(message)s',
|
|
||||||
'%a, %d %b %Y %H:%M:%S'))
|
|
||||||
logging.getLogger().addHandler(logHandler)
|
|
||||||
logging.getLogger().setLevel(logging.DEBUG)
|
|
||||||
|
|
||||||
config = ConfigParser.RawConfigParser()
|
|
||||||
config.readfp(open(options.config, 'r'))
|
|
||||||
|
|
||||||
if not config.has_section('openlp'):
|
|
||||||
logging.error('[%s] config file "%s" lacks an [openlp] section',
|
|
||||||
script_name, options.config)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if not sys.platform == "darwin":
|
|
||||||
logging.error('[%s] this script only works on Macintosh OS X systems,'
|
|
||||||
+ 'not on %s', script_name, sys.platform)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
version = platform.mac_ver()[0]
|
|
||||||
# we only need the differenciation between leopard and snow leopard
|
|
||||||
if version.startswith("10.6") or version.startswith("10.7"):
|
|
||||||
SNOWLEOPARD = True
|
|
||||||
logging.info('[%s] using snow leopard scripts (version = %s)',
|
|
||||||
script_name, version)
|
|
||||||
adjustview_scriptname = "applescript-adjustview-10-6.master"
|
|
||||||
seticon_scriptname = "applescript-seticon-10-6.master"
|
|
||||||
else:
|
|
||||||
SNOWLEOPARD = False
|
|
||||||
logging.info('[%s] using leopard scripts (version = %s)', script_name,
|
|
||||||
version)
|
|
||||||
adjustview_scriptname = "applescript-adjustview-10-5.master"
|
|
||||||
seticon_scriptname = "applescript-seticon-10-5.master"
|
|
||||||
|
|
||||||
if not os.path.isfile(adjustview_scriptname) \
|
|
||||||
or not os.path.isfile(seticon_scriptname):
|
|
||||||
logging.error('[%s] could not find apple scripts for given OS X '
|
|
||||||
+ 'version %s', script_name, version)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
settings = dict()
|
|
||||||
for k in config.options('openlp'):
|
|
||||||
settings[k] = config.get('openlp', k)
|
|
||||||
|
|
||||||
# prepare the configuration files
|
|
||||||
os.system('python expander.py --config %(config_file)s \
|
|
||||||
--template openlp.spec.master \
|
|
||||||
--expandto %(target_directory)s/openlp.spec' \
|
|
||||||
% { 'config_file' : options.config, 'target_directory' : os.getcwd() })
|
|
||||||
os.system('python expander.py --config %(config_file)s \
|
|
||||||
--template Info.plist.master \
|
|
||||||
--expandto %(target_directory)s/Info.plist' \
|
|
||||||
% { 'config_file' : options.config, 'target_directory' : os.getcwd() })
|
|
||||||
os.system('python get_version.py > .version')
|
|
||||||
|
|
||||||
# prepare variables
|
|
||||||
app_name_lower = settings['openlp_appname'].lower()
|
|
||||||
app_dir = os.getcwd() + '/' + settings['openlp_appname'] + '.app'
|
|
||||||
|
|
||||||
# if the view option is set, skip the building steps
|
|
||||||
if (do_build is True):
|
|
||||||
build_application(settings, app_name_lower, app_dir)
|
|
||||||
|
|
||||||
if (do_create_dmg is True):
|
|
||||||
(volume_basedir, dmg_file) = create_dmg(settings)
|
|
||||||
else:
|
|
||||||
# setting base dir
|
|
||||||
volume_basedir = options.basedir
|
|
||||||
dmg_file = os.getcwd() + '/' + settings['openlp_dmgname'] + '.dmg'
|
|
||||||
|
|
||||||
if (do_package_view is True):
|
|
||||||
adjust_package_view(settings, adjustview_scriptname)
|
|
||||||
|
|
||||||
if (do_create_dmg is True):
|
|
||||||
unmount_dmg(settings, volume_basedir)
|
|
||||||
|
|
||||||
if (do_compress_dmg is True):
|
|
||||||
compress_dmg(settings)
|
|
||||||
|
|
||||||
if (do_compress_view is True):
|
|
||||||
compress_view(settings, seticon_scriptname, dmg_file)
|
|
||||||
|
|
||||||
if (do_compress_dmg is True):
|
|
||||||
logging.info('[%s] finished creating dmg file, resulting file is "%s"',
|
|
||||||
script_name, dmg_file)
|
|
@ -1,227 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
|
||||||
# --------------------------------------------------------------------------- #
|
|
||||||
# Copyright (c) 2008-2011 Raoul Snyman #
|
|
||||||
# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
|
|
||||||
# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, #
|
|
||||||
# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
|
|
||||||
# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode #
|
|
||||||
# Woldsund #
|
|
||||||
# --------------------------------------------------------------------------- #
|
|
||||||
# This program is free software; you can redistribute it and/or modify it #
|
|
||||||
# under the terms of the GNU General Public License as published by the Free #
|
|
||||||
# Software Foundation; version 2 of the License. #
|
|
||||||
# #
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
|
||||||
# more details. #
|
|
||||||
# #
|
|
||||||
# You should have received a copy of the GNU General Public License along #
|
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
|
||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
# TODOs:
|
|
||||||
# - defaults for non-supplied expansions:
|
|
||||||
# template contains
|
|
||||||
|
|
||||||
import ConfigParser
|
|
||||||
import logging
|
|
||||||
import optparse
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# variable expansion:
|
|
||||||
# - %(dog)s --- normal python expansion
|
|
||||||
# - %(dog%)s --- no python expansion, leave as is (stripping the trailing %)
|
|
||||||
# - %(dog:cat) --- if there is an expansion for dog, dog will be used;
|
|
||||||
# otherwise if cat exists cat will be used
|
|
||||||
# - %(dog=cat) --- if there is an expansion for dog, dog will be used;
|
|
||||||
# otherwise "cat" will be used
|
|
||||||
# re_conf = re.compile(r'(?<!%)%\((?P<key>[^\(]+?)\)s')
|
|
||||||
re_conf = re.compile(r'(?P<verbatim>%?)%\((?P<key>[^+=:&\)]+?)'
|
|
||||||
+ '(?:(?P<kind>[+=:&])(?P<default>[^\)]+))?\)(?P<type>s|d)')
|
|
||||||
|
|
||||||
def expand_variable(match, expansions, errors):
|
|
||||||
key = match.group('key')
|
|
||||||
kind = match.group('kind')
|
|
||||||
default = match.group('default')
|
|
||||||
typ = match.group('type')
|
|
||||||
verbatim = match.group('verbatim')
|
|
||||||
|
|
||||||
if verbatim:
|
|
||||||
return match.group(0)[1:]
|
|
||||||
|
|
||||||
# literal default
|
|
||||||
if kind == '=':
|
|
||||||
if key in expansions:
|
|
||||||
return expansions[key]
|
|
||||||
return default
|
|
||||||
|
|
||||||
# variable default
|
|
||||||
if kind == ':' and default in expansions:
|
|
||||||
return expansions[default]
|
|
||||||
|
|
||||||
if kind == '+' and default in expansions:
|
|
||||||
if key in expansions:
|
|
||||||
key = expansions[key]
|
|
||||||
if typ == 's':
|
|
||||||
return '%s%s' % (key, expansions[default])
|
|
||||||
if typ == 'd':
|
|
||||||
try:
|
|
||||||
return str(int(key) + int(expansions[default]))
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if kind == '&' and default in expansions:
|
|
||||||
if typ == 's':
|
|
||||||
return '%s%s' % (key, expansions[default])
|
|
||||||
if typ == 'd':
|
|
||||||
try:
|
|
||||||
return str(int(key) + int(expansions[default]))
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if key in expansions:
|
|
||||||
return expansions[key]
|
|
||||||
|
|
||||||
if not match.group(0) in errors:
|
|
||||||
errors.append(match.group(0))
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
options = None
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
# get config file
|
|
||||||
parser = optparse.OptionParser()
|
|
||||||
parser.add_option('-c', '--config', dest='config',
|
|
||||||
help='config file', metavar='CONFIG')
|
|
||||||
parser.add_option('-t', '--template', dest='template',
|
|
||||||
help='template file', metavar='TEMPLATE')
|
|
||||||
parser.add_option('-x', '--expandto', dest='expanded',
|
|
||||||
help='expanded file', metavar='EXPANDED')
|
|
||||||
parser.add_option('-e', '--echo', dest='echo',
|
|
||||||
help='echo variable', metavar='ECHOVAR')
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
|
||||||
|
|
||||||
if not options.config:
|
|
||||||
parser.error('option --config|-c is required')
|
|
||||||
if not os.path.exists(options.config):
|
|
||||||
parser.error('config file "%s" does not exist' % options.config)
|
|
||||||
if not options.echo:
|
|
||||||
if not options.template:
|
|
||||||
parser.error('option --template|-t is required')
|
|
||||||
if not os.path.exists(options.template):
|
|
||||||
parser.error('template file "%s" does not exist' \
|
|
||||||
% options.template)
|
|
||||||
if not options.expanded:
|
|
||||||
parser.error('option --expandto|-e is required')
|
|
||||||
|
|
||||||
logHandler = logging.StreamHandler()
|
|
||||||
logHandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)-8s '
|
|
||||||
+ ' %(message)s', '%a, %d %b %Y %H:%M:%S'))
|
|
||||||
logging.getLogger().addHandler(logHandler)
|
|
||||||
logging.getLogger().setLevel(logging.DEBUG)
|
|
||||||
|
|
||||||
config = ConfigParser.RawConfigParser()
|
|
||||||
config.readfp(open(options.config, 'r'))
|
|
||||||
|
|
||||||
if not config.has_section('openlp'):
|
|
||||||
logging.error('[expander] %s: config file "%s" lacks an [openlp] '
|
|
||||||
+ 'section', options.template, options.config)
|
|
||||||
|
|
||||||
expansions = dict()
|
|
||||||
for k in config.options('openlp'):
|
|
||||||
expansions[k] = config.get('openlp', k)
|
|
||||||
|
|
||||||
# commandline overrides?
|
|
||||||
for override in args:
|
|
||||||
if not '=' in override:
|
|
||||||
continue
|
|
||||||
|
|
||||||
(k, v) = override.split('=', 2)
|
|
||||||
expansions[k] = v
|
|
||||||
|
|
||||||
if options.echo:
|
|
||||||
if options.echo in expansions:
|
|
||||||
print expansions[options.echo]
|
|
||||||
sys.exit(0)
|
|
||||||
else:
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# closure to capture expansions and errors variable
|
|
||||||
errors = []
|
|
||||||
expanded = []
|
|
||||||
|
|
||||||
try:
|
|
||||||
# try to expand the template
|
|
||||||
line = 0
|
|
||||||
faulty = False
|
|
||||||
|
|
||||||
template = open(options.template, 'r')
|
|
||||||
raw = template.readlines()
|
|
||||||
template.close()
|
|
||||||
|
|
||||||
def _expand(m):
|
|
||||||
return expand_variable(m, expansions = expansions, errors = errors)
|
|
||||||
|
|
||||||
for l in raw:
|
|
||||||
line += 1
|
|
||||||
exp = re_conf.sub(_expand, l)
|
|
||||||
if errors:
|
|
||||||
for key in errors:
|
|
||||||
logging.error('[expander] %s: line %d: could not expand '
|
|
||||||
+ 'key "%s"', options.template, line, key)
|
|
||||||
faulty = True
|
|
||||||
errors = []
|
|
||||||
else:
|
|
||||||
expanded.append(exp)
|
|
||||||
|
|
||||||
if faulty:
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# successfully expanded template, now backup potentially existing
|
|
||||||
# target file
|
|
||||||
targetFile = options.expanded % expansions
|
|
||||||
if os.path.exists(targetFile):
|
|
||||||
if os.path.exists('%s~' % targetFile):
|
|
||||||
os.unlink('%s~' % targetFile)
|
|
||||||
os.rename(options.expanded, '%s~' % targetFile)
|
|
||||||
logging.info('[expander] %s: backed up existing target file "%s" '
|
|
||||||
+ 'to "%s"', options.template, targetFile,
|
|
||||||
'%s~' % options.expanded)
|
|
||||||
|
|
||||||
# make sure that target directory exists
|
|
||||||
targetDir = os.path.dirname(targetFile)
|
|
||||||
if not os.path.exists(targetDir):
|
|
||||||
os.makedirs(targetDir)
|
|
||||||
|
|
||||||
# write target file
|
|
||||||
try:
|
|
||||||
target = open(targetFile, 'w')
|
|
||||||
for exp in expanded:
|
|
||||||
target.write(exp)
|
|
||||||
target.close()
|
|
||||||
except Exception, e:
|
|
||||||
logging.error('[expander] %s: could not expand to "%s"',
|
|
||||||
options.template, options.expaned, e)
|
|
||||||
|
|
||||||
# copy over file access mode from template
|
|
||||||
mode = os.stat(options.template)
|
|
||||||
os.chmod(options.expanded, mode.st_mode)
|
|
||||||
|
|
||||||
logging.info('[expander] expanded "%s" to "%s"',
|
|
||||||
options.template, options.expanded)
|
|
||||||
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
|
||||||
# --------------------------------------------------------------------------- #
|
|
||||||
# Copyright (c) 2008-2011 Raoul Snyman #
|
|
||||||
# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
|
|
||||||
# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, #
|
|
||||||
# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
|
|
||||||
# Jeffrey Smith, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode #
|
|
||||||
# Woldsund #
|
|
||||||
# --------------------------------------------------------------------------- #
|
|
||||||
# This program is free software; you can redistribute it and/or modify it #
|
|
||||||
# under the terms of the GNU General Public License as published by the Free #
|
|
||||||
# Software Foundation; version 2 of the License. #
|
|
||||||
# #
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
|
||||||
# more details. #
|
|
||||||
# #
|
|
||||||
# You should have received a copy of the GNU General Public License along #
|
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
|
||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
|
||||||
###############################################################################
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
from bzrlib.branch import Branch
|
|
||||||
|
|
||||||
def get_version(path):
|
|
||||||
b = Branch.open_containing(path)[0]
|
|
||||||
b.lock_read()
|
|
||||||
result = '0.0.0'
|
|
||||||
try:
|
|
||||||
# Get the branch's latest revision number.
|
|
||||||
revno = b.revno()
|
|
||||||
# Convert said revision number into a bzr revision id.
|
|
||||||
revision_id = b.dotted_revno_to_revision_id((revno,))
|
|
||||||
# Get a dict of tags, with the revision id as the key.
|
|
||||||
tags = b.tags.get_reverse_tag_dict()
|
|
||||||
# Check if the latest
|
|
||||||
if revision_id in tags:
|
|
||||||
result = tags[revision_id][0]
|
|
||||||
else:
|
|
||||||
result = '%s-bzr%s' % (sorted(b.tags.get_tag_dict().keys())[-1], revno)
|
|
||||||
finally:
|
|
||||||
b.unlock()
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_path():
|
|
||||||
if len(sys.argv) > 1:
|
|
||||||
return os.path.abspath(sys.argv[1])
|
|
||||||
else:
|
|
||||||
return os.path.abspath('.')
|
|
||||||
|
|
||||||
if __name__ == u'__main__':
|
|
||||||
path = get_path()
|
|
||||||
print get_version(path)
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 48 KiB |
Binary file not shown.
Before Width: | Height: | Size: 76 KiB |
Binary file not shown.
Before Width: | Height: | Size: 97 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 56 KiB |
@ -1,10 +0,0 @@
|
|||||||
[openlp]
|
|
||||||
openlp_appname = OpenLP
|
|
||||||
openlp_dmgname = OpenLP-1.9.6-bzrXXXX
|
|
||||||
openlp_version = XXXX
|
|
||||||
openlp_basedir = /Users/openlp/repo/trunk
|
|
||||||
openlp_icon_file = openlp-logo-with-text.icns
|
|
||||||
openlp_dmg_icon_file = openlp-logo-420x420.png
|
|
||||||
installer_backgroundimage_file = installation-background.png
|
|
||||||
pyinstaller_basedir = /Users/openlp/pyinstaller/trunk
|
|
||||||
qt_menu_basedir = /Library/Frameworks/QtGui.framework/Versions/4/Resources/qt_menu.nib
|
|
@ -1,24 +0,0 @@
|
|||||||
# -*- mode: python -*-
|
|
||||||
a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(CONFIGDIR,'support/useUnicode.py'), '%(openlp_basedir)s/openlp.pyw'],
|
|
||||||
pathex=['%(pyinstaller_basedir)s'], hookspath=['%(openlp_basedir)s/resources/pyinstaller'])
|
|
||||||
pyz = PYZ(a.pure)
|
|
||||||
exe = EXE(pyz,
|
|
||||||
a.scripts,
|
|
||||||
exclude_binaries=1,
|
|
||||||
name=os.path.join('build/pyi.darwin/openlp', 'openlp'),
|
|
||||||
debug=False,
|
|
||||||
strip=False,
|
|
||||||
upx=True,
|
|
||||||
console=1 )
|
|
||||||
coll = COLLECT( exe,
|
|
||||||
a.binaries,
|
|
||||||
a.zipfiles,
|
|
||||||
a.datas,
|
|
||||||
strip=False,
|
|
||||||
upx=True,
|
|
||||||
name=os.path.join('dist', 'openlp'))
|
|
||||||
import sys
|
|
||||||
if sys.platform.startswith("darwin"):
|
|
||||||
app = BUNDLE(coll,
|
|
||||||
name='%(openlp_appname)s.app',
|
|
||||||
version='%(openlp_version)s')
|
|
Loading…
Reference in New Issue
Block a user