From e96cdbe890fe0bd19e14b5ddefe0ad70c2cbb935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fauconnier?= Date: Fri, 22 May 2020 12:45:41 +0200 Subject: [PATCH] moved dmgutil (osx) and poppler includes as to make openboard (osx) compile without OpenBoard-ThirdParty + quazip fix headers for osx (clang apparently not searching for system headers with double quotes) --- OpenBoard.pro | 13 +- plugins/cffadaptor/src/UBCFFAdaptor.cpp | 12 +- release_scripts/osx/refnum/dmgutil.pl | 728 +++++++++++++++++ .../refnum/dmgutil/Documentation/index.html | 145 ++++ .../refnum/dmgutil/Documentation/licence.html | 124 +++ .../dmgutil/Documentation/src/css/refnum.css | 380 +++++++++ .../Documentation/src/img/background.jpg | Bin 0 -> 34299 bytes .../src/img/button_thin_cell.png | Bin 0 -> 1810 bytes .../src/img/button_thin_icons.png | Bin 0 -> 1190 bytes .../Documentation/src/img/page_body.png | Bin 0 -> 437 bytes .../Documentation/src/img/page_footer.png | Bin 0 -> 1055 bytes .../src/img/page_strap_dmgutil.jpg | Bin 0 -> 36283 bytes .../src/img/page_strap_dmgutil.png | Bin 0 -> 3686 bytes .../dmgutil/Documentation/src/js/refnum.js | 34 + .../refnum/dmgutil/Documentation/version.html | 109 +++ release_scripts/osx/refnum/dmgutil/dmgutil.pl | 738 ++++++++++++++++++ release_scripts/osx/release.macx.sh | 28 +- src/adaptors/UBExportDocument.cpp | 11 +- src/adaptors/UBExportDocumentSetAdaptor.cpp | 11 +- src/adaptors/UBExportDocumentSetAdaptor.h | 2 - src/adaptors/UBExportWeb.cpp | 2 - src/adaptors/UBImportCFF.cpp | 16 +- src/adaptors/UBImportDocument.cpp | 14 +- src/adaptors/UBImportDocumentSetAdaptor.cpp | 12 +- src/frameworks/UBFileSystemUtils.cpp | 6 +- src/podcast/podcast.pri | 4 +- 26 files changed, 2335 insertions(+), 54 deletions(-) create mode 100644 release_scripts/osx/refnum/dmgutil.pl create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/index.html create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/licence.html create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/css/refnum.css create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/img/background.jpg create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/img/button_thin_cell.png create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/img/button_thin_icons.png create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/img/page_body.png create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/img/page_footer.png create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/img/page_strap_dmgutil.jpg create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/img/page_strap_dmgutil.png create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/src/js/refnum.js create mode 100644 release_scripts/osx/refnum/dmgutil/Documentation/version.html create mode 100755 release_scripts/osx/refnum/dmgutil/dmgutil.pl diff --git a/OpenBoard.pro b/OpenBoard.pro index 50a7cfa1..a1b2ee3e 100644 --- a/OpenBoard.pro +++ b/OpenBoard.pro @@ -71,11 +71,6 @@ include(src/pdf-merger/pdfMerger.pri) include(plugins/plugins.pri) INCLUDEPATH += plugins/cffadaptor/src -#ThirdParty -DEPENDPATH += $$THIRD_PARTY_PATH/quazip/ -INCLUDEPATH += $$THIRD_PARTY_PATH/quazip/ -include($$THIRD_PARTY_PATH/quazip/quazip.pri) - FORMS += resources/forms/mainWindow.ui \ resources/forms/preferences.ui \ resources/forms/brushProperties.ui \ @@ -166,11 +161,15 @@ macx { LIBS += -lcrypto LIBS += -L/usr/local/opt/openssl/lib - LIBS += -L/usr/local/opt/quazip/lib + LIBS += -L/usr/local/opt/quazip/lib -lquazip LIBS += -L/usr/local/opt/ffmpeg/lib INCLUDEPATH += /usr/local/opt/openssl/include INCLUDEPATH += /usr/local/opt/ffmpeg/include - INCLUDEPATH += /usr/local/opt/quazip/include + INCLUDEPATH += /usr/local/opt/quazip/include/quazip + + LIBS += -L/usr/local/opt/poppler/lib -lpoppler + INCLUDEPATH += /usr/local/opt/poppler/include + INCLUDEPATH += /usr/local/opt/poppler/include/poppler CONFIG(release, debug|release):CONFIG += x86_64 CONFIG(debug, debug|release):CONFIG += x86_64 diff --git a/plugins/cffadaptor/src/UBCFFAdaptor.cpp b/plugins/cffadaptor/src/UBCFFAdaptor.cpp index 45d818e8..7b3b26c6 100644 --- a/plugins/cffadaptor/src/UBCFFAdaptor.cpp +++ b/plugins/cffadaptor/src/UBCFFAdaptor.cpp @@ -34,9 +34,15 @@ #include "UBCFFConstants.h" //THIRD_PARTY_WARNINGS_DISABLE -#include "quazip.h" -#include "quazipfile.h" -#include "quazipfileinfo.h" +#ifdef Q_OS_OSX + #include + #include + #include +#else + #include "quazip.h" + #include "quazipfile.h" + #include "quazipfileinfo.h" +#endif //THIRD_PARTY_WARNINGS_ENABLE UBCFFAdaptor::UBCFFAdaptor() diff --git a/release_scripts/osx/refnum/dmgutil.pl b/release_scripts/osx/refnum/dmgutil.pl new file mode 100644 index 00000000..3d250242 --- /dev/null +++ b/release_scripts/osx/refnum/dmgutil.pl @@ -0,0 +1,728 @@ +#!/usr/bin/perl -w +#============================================================================ +# NAME: +# dmgutil.pl +# +# DESCRIPTION: +# Disk image creation utility. +# +# COPYRIGHT: +# Copyright (c) 2006-2008, refNum Software +# +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# o Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# o Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# o Neither the name of refNum Software nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================ +# Imports +#---------------------------------------------------------------------------- +use strict; +use Getopt::Long; + + + + + +#============================================================================ +# Constants +#---------------------------------------------------------------------------- +my $kLogging = "-quiet"; + +my $Rez = "/Developer/Tools/Rez"; +my $SetFile = "/Developer/Tools/SetFile"; + +my $kManPage = <$theFile") or die "Can't open $theFile for writing: $!\n"; + print OUTPUT $theScript; + close(OUTPUT); + + + + # And execute it + system("osascript", $theFile); + unlink($theFile); +} + + + + + +#============================================================================ +# isVolume : Is a path to the root of a volume? +#---------------------------------------------------------------------------- +sub isVolume +{ + + + # Retrieve our parameters + my ($thePath) = @_; + + + + # Check the state + # + # After stripping out the leading /Volumes, any further slashes + # indicate we have a folder rather than a volume. + $thePath =~ s/\/Volumes\///; + + my $isVolume = ($thePath =~ /.*\/.*/) ? 0 : 1; + + return($isVolume); +} + + + + + +#============================================================================ +# setFolderState : Set the state for a folder. +#---------------------------------------------------------------------------- +sub setFolderState +{ + + + # Retrieve our parameters + my ($thePath, $iconSize, $flagToolbar, $bgImage, $bgColor) = @_; + + + + # Initialise ourselves + my $cmdBackground = ""; + my $cmdIconSize = ""; + my $cmdToolbar = ""; + + + + # Prepare the background + # + # As of 10.5, the Finder refuses to manipulate files whose names start with + # a period (rdar://5582578). As such we need to use an underscore for the + # image, then make it invisible using SetFile. + if (-f $bgImage) + { + $bgImage =~ /.*\.(\w+)/; + my $dstImage = "$thePath/_Background.$1"; + + `cp "$bgImage" "$dstImage"`; + + $cmdBackground .= "set theImage to posix file \"$dstImage\"\n"; + $cmdBackground .= " set background picture of theOptions to theImage\n"; + $cmdBackground .= " do shell script \"/Developer/Tools/SetFile -a V '$dstImage'\"\n"; + } + + elsif ($bgColor ne "") + { + $cmdBackground = "set background color of theOptions to {$bgColor} as RGB color"; + } + + + + # Prepare the icon size + if ($iconSize != 0) + { + $cmdIconSize = "set icon size of theOptions to $iconSize"; + } + + + + # Prepare the toolbar + # + # The window must be made visible in order to change the toolbar state. + if ($flagToolbar ne "") + { + $cmdToolbar = " open theWindow \n"; + $cmdToolbar .= " set toolbar visible of theWindow to $flagToolbar \n"; + $cmdToolbar .= " close theWindow \n"; + } + + + + # Identify the target + # + # AppleScript requires the correct nomenclature for the target item. + my $theTarget = "folder \"$thePath\""; + + if (isVolume($thePath)) + { + $theTarget =~ s/folder "\/Volumes\//disk "/; + } + + + + # Set the folder state + # + # Once a change has been made, it must be flushed to disk with update. + my $theScript = ""; + + $theScript .= "tell application \"Finder\"\n"; + $theScript .= " set theTarget to $theTarget \n"; + $theScript .= " set theWindow to window of theTarget \n"; + $theScript .= "\n"; + $theScript .= " set current view of theWindow to icon view \n"; + $theScript .= " set theOptions to icon view options of theWindow \n"; + $theScript .= " set arrangement of theOptions to not arranged \n"; + $theScript .= "\n"; + $theScript .= " $cmdBackground\n"; + $theScript .= " $cmdIconSize \n"; + $theScript .= " $cmdToolbar \n"; + $theScript .= "\n"; + $theScript .= " update theTarget\n"; + $theScript .= "end tell"; + + appleScript($theScript); +} + + + + + +#============================================================================ +# setCustomIcon : Set a custom icon. +#---------------------------------------------------------------------------- +sub setCustomIcon +{ + + + # Retrieve our parameters + my ($thePath, $theIcon) = @_; + + + + # Validate our state + # + # We require several tools inside /Developer/Tools. + die("Setting an icon requires $Rez") if (! -e $Rez); + die("Setting an icon requires $SetFile") if (! -e $SetFile); + + + + # Prepare the flags + # + # Prior to Mac OS X 10.4, SetFile can only set an attribute if it is + # first cleared (rdar://3738867). + my $sysVers = `uname -r`; + my $setHidden = ($sysVers =~ /^[0-7]\./) ? "vV" : "V"; + my $setIcon = ($sysVers =~ /^[0-7]\./) ? "cC" : "C"; + + + + # Set a volume icon + # + # Volume custom icons are contained in a .VolumeIcon.icns file. + if (isVolume($thePath)) + { + my $iconFile = "$thePath/.VolumeIcon.icns"; + + `cp "$theIcon" "$iconFile"`; + + `$SetFile -a $setHidden "$iconFile"`; + `$SetFile -a $setIcon "$thePath"`; + } + + + # Set a folder icon + # + # Folder custom icons are contained in an ('icns', -16455) resource, + # placed in an invisible "Icon\r" file inside the folder. + elsif (-d $thePath) + { + my $iconFile = "$thePath/Icon\r"; + my $tmpR = "/tmp/dmgutil.r"; + + `echo "read 'icns' (-16455) \\"$theIcon\\";\n" > $tmpR`; + `cd /tmp; $Rez dmgutil.r -append -o "$iconFile"`; + + `$SetFile -a $setHidden "$iconFile"`; + `$SetFile -a $setIcon "$thePath"`; + + unlink($tmpR); + } + + + # Set a file icon + # + # File custom icons are contained in an ('icns', -16455) resource. + else + { + my $tmpR = "/tmp/dmgutil.r"; + + `echo "read 'icns' (-16455) \\"$theIcon\\";\n" > $tmpR`; + `cd /tmp; $Rez dmgutil.r -append -o "$thePath"`; + + `$SetFile -a $setIcon "$thePath"`; + + unlink($tmpR); + } +} + + + + + +#============================================================================ +# setWindowPos : Set the position of a window. +#---------------------------------------------------------------------------- +sub setWindowPos +{ + + + # Retrieve our parameters + my ($thePath, $posX, $posY, $theWidth, $theHeight) = @_; + + + + # Initialise ourselves + my $bottom = $posY + $theHeight; + my $right = $posX + $theWidth; + + + + # Identify the target + # + # AppleScript requires the correct nomenclature for the target item. + my $theTarget = "folder \"$thePath\""; + + if (isVolume($thePath)) + { + $theTarget =~ s/folder "\/Volumes\//disk "/; + } + + + + # Set the window position + # + # In theory, the "set bounds" command is all that should be necessary + # to set the bounds of a Finder window. + # + # Unfortunately, under 10.4 this will result in a window that will be + # taller than the specified size when the window is next opened. + # + # To reliably set the bounds of a window we must open the window, show + # the status bar, and set the window bounds to be 20 pixels taller (the + # height of the status bar) than necessary. + # + # The status bar can then be hidden, the window closed, and the bounds + # bounds will be the desired size when the window is next opened. + my $theScript = ""; + + $theScript .= "tell application \"Finder\"\n"; + $theScript .= " set theTarget to $theTarget \n"; + $theScript .= " set theWindow to window of theTarget \n"; + $theScript .= "\n"; + $theScript .= " open theWindow \n"; + $theScript .= " set statusbar visible of theWindow to true \n"; + $theScript .= " set bounds of theWindow to {$posX, $posY, $right, $bottom+20} \n"; + $theScript .= " set statusbar visible of theWindow to false \n"; + $theScript .= " close theWindow \n"; + $theScript .= "\n"; + $theScript .= "end tell"; + + appleScript($theScript); +} + + + + + +#============================================================================ +# setIconPos : Set the position of an icon. +#---------------------------------------------------------------------------- +sub setIconPos +{ + + + # Retrieve our parameters + my ($theFile, $posX, $posY) = @_; + + + + # Identify the target + # + # Since the 'posix file' command follows symlinks, in order to set the + # position of a symlink (vs its target) we need to use an HFS path and + # reference it as a file rather than an alias. + my $theTarget = "alias (posix file \"$theFile\")"; + + if (-l $theFile) + { + $theTarget = $theFile; + + $theTarget =~ s/\/Volumes\///; + $theTarget =~ s/\//:/g; + $theTarget = "file \"$theTarget\""; + } + + + + # Set the icon position + # + # Once a change has been made, it must be flushed to disk with update. + my $theScript = ""; + + $theScript .= "tell application \"Finder\"\n"; + $theScript .= " set theTarget to $theTarget \n"; + $theScript .= "\n"; + $theScript .= " set position of theTarget to {$posX, $posY} \n"; + $theScript .= " update theTarget\n"; + $theScript .= "end tell"; + + appleScript($theScript); +} + + + + + +#============================================================================ +# doOpen : Open a new disk image. +#---------------------------------------------------------------------------- +sub doOpen +{ + + + # Retrieve our parameters + my ($dmgFile, $volName) = @_; + + + + # Clean up any previous image + system("rm", "-f", "$dmgFile.sparseimage"); + system("rm", "-f", "$dmgFile"); + + + + # Create the image + # + # A large sparse disk image is created, which will be shrunk down + # and compressed when the disk image is finally closed. + print " creating $dmgFile\n" if ($kLogging eq "-quiet"); + + system("hdiutil", "create", $dmgFile, + "-volname", $volName, + "-megabytes", "1000", + "-type", "SPARSE", + "-fs", "HFS+", + $kLogging); + + system("hdiutil", "mount", $kLogging, "$dmgFile.sparseimage"); +} + + + + + +#============================================================================ +# doClose : Close a disk image. +#---------------------------------------------------------------------------- +sub doClose +{ + + + # Retrieve our parameters + my ($dmgFile, $volName) = @_; + + + + # Bless the volume + # + # Blessing the volume ensures that the volume always opens in the current + # view, overriding the user's "Open new windows in column view" preference. + system("bless", "--openfolder", "/Volumes/$volName"); + + + + # Compress the image + # + # On 10.5, the disk image must be ejected rather than unmounted to allow + # it to be converted from a sparse image to a compressed image. + print " compressing $dmgFile\n" if ($kLogging eq "-quiet"); + + system("hdiutil", "eject", $kLogging, "/Volumes/$volName"); + + system("hdiutil", "convert", "$dmgFile.sparseimage", + "-format", "UDZO", + "-o", $dmgFile, + "-imagekey", "zlib-level=9", + $kLogging); + + + + # Clean up + system("rm", "-f", "$dmgFile.sparseimage"); +} + + + + + +#============================================================================ +# doSet : Set a file/folder state. +#---------------------------------------------------------------------------- +sub doSet +{ + + + # Retrieve our parameters + my ($thePath, $posX, $posY, $theWidth, $theHeight, $iconSize, $theIcon, $bgImage, $bgColor, $flagToolbar) = @_; + + + + # Set the custom icon + if ($theIcon ne "") + { + setCustomIcon($thePath, $theIcon); + } + + + + # Set the folder state + if ($iconSize != 0 || $bgImage ne "" || $bgColor ne "" || $flagToolbar ne "") + { + setFolderState($thePath, $iconSize, $flagToolbar, $bgImage, $bgColor); + } + + + + # Set the position + # + # Window position must be set after applying the folder state. + if ($posX != 0 && $posY != 0) + { + if ($theWidth != 0 && $theHeight != 0) + { + setWindowPos($thePath, $posX, $posY, $theWidth, $theHeight); + } + else + { + setIconPos($thePath, $posX, $posY); + } + } +} + + + + + +#============================================================================ +# dmgUtil : Manipulate a disk image. +#---------------------------------------------------------------------------- +sub dmgUtil +{ + + + # Retrieve our parameters + my ($doOpen, $doClose, $doSet) = (0, 0, 0); + my ($posX, $posY, $theWidth, $theHeight, $iconSize) = (0, 0, 0, 0, 0); + my ($volName, $theIcon, $bgImage, $bgColor, $flagToolbar) = ("", "", "", "", ""); + + GetOptions( "--open+", => \$doOpen, + "--close+", => \$doClose, + "--set+", => \$doSet, + "--volume=s", => \$volName, + "--x=i", => \$posX, + "--y=i", => \$posY, + "--width=i", => \$theWidth, + "--height=i", => \$theHeight, + "--iconsize=i", => \$iconSize, + "--icon=s", => \$theIcon, + "--background=s", => \$bgImage, + "--bgcol=s", => \$bgColor, + "--toolbar=s", => \$flagToolbar); + + my ($thePath) = @ARGV; + + $thePath = "" if (!defined($thePath)); + + + + # Perform the action + if ($doOpen && $thePath ne "" && $volName ne "") + { + doOpen($thePath, $volName); + } + + elsif ($doClose && $thePath ne "" && $volName ne "") + { + doClose($thePath, $volName); + } + + elsif ($doSet && $thePath ne "") + { + doSet($thePath, $posX, $posY, $theWidth, $theHeight, $iconSize, $theIcon, $bgImage, $bgColor, $flagToolbar); + } + + else + { + print $kManPage; + } +} + + + + + +#============================================================================ +# Script entry point +#---------------------------------------------------------------------------- +dmgUtil(); diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/index.html b/release_scripts/osx/refnum/dmgutil/Documentation/index.html new file mode 100644 index 00000000..ee7f8f46 --- /dev/null +++ b/release_scripts/osx/refnum/dmgutil/Documentation/index.html @@ -0,0 +1,145 @@ + + + + refNum › dmgutil + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + + + + + + + +
+ + + + + +

dmgutil

+

+dmgutil is a command line tool for creating, configuring, and compressing Mac OS X +disk images for distribution. +

+ +

+dmgutil allows you to automate your build process, preparing a release without pre-existing +templates or user interaction. +

+ +

+dmgutil can adjust the size, position, and appearance of Finder windows. It can also apply +custom icons to volumes, folders, or files and assign a license agreement. +

+ +
+Download +  +GitHub +
+ + + + + +

Using dmgutil

+

+To create a new disk image for your "MyApp 1.0" release, invoke dmgutil as: +

+ +
dmgutil.pl --open --volume="MyApp 1.0" myapp_1.0.dmg +
+ +

+Once the disk image has been populated with files, invoke dmgutil to configure it: +

+ +
dmgutil.pl --set --iconsize=128 --background=flowers.jpg "/Volumes/MyApp 1.0" +dmgutil.pl --set --x=20 --y=60 --width=300 --height=200 "/Volumes/MyApp 1.0" +
+ +

+You can also use dmgutil to set the position of file or folder icons within the window: +

+ +
dmgutil.pl --set --x=100 --y=100 "/Volumes/MyApp 1.0/Read Me.rtf" +dmgutil.pl --set --x=200 --y=100 "/Volumes/MyApp 1.0/MyApp.app" +
+ +

+dmgutil can also adjust the background color or toolbar visibility of the window, and +apply custom icons to the volume or its contents. +

+ +

+Once the volume has been prepared, compress the disk image with: +

+ +
dmgutil.pl --close --volume="MyApp 1.0" myapp_1.0.dmg +
+ +

+By invoking dmgutil from a post-build shell script, builds can be automatically converted +into a user-friendly disk image for distribution. +

+ + + + + +
+ + + +
+
+ +
+ + + + + + + + diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/licence.html b/release_scripts/osx/refnum/dmgutil/Documentation/licence.html new file mode 100644 index 00000000..db3482fa --- /dev/null +++ b/release_scripts/osx/refnum/dmgutil/Documentation/licence.html @@ -0,0 +1,124 @@ + + + + refNum › dmgutil › Licence + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + + + + + + + +
+ + + + + +

Licence

+

+dmgutil is distributed under the Open Source BSD licence: +

+ +
+

+dmgutil is Copyright © 2006-2010, refNum Software
+All rights reserved. +

+ +

+Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: +

+ +
    +
  • Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer.
  • + +
  • Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution.
  • + +
  • Neither the name of refNum Software, Nano, nor the names of its contributors may be + used to endorse or promote products derived from this software without specific prior + written permission.
  • +
+ +

+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

+
+ +

+This licence allows usage in both Open Source and commercial software, and does not require any +reciprocal licencing or release of source code when incorporated into commercial software. +

+ + + + + +
+ + + +
+
+ +
+ + + + + + + + diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/src/css/refnum.css b/release_scripts/osx/refnum/dmgutil/Documentation/src/css/refnum.css new file mode 100644 index 00000000..0f5923dd --- /dev/null +++ b/release_scripts/osx/refnum/dmgutil/Documentation/src/css/refnum.css @@ -0,0 +1,380 @@ +/* Global */ +html { + overflow-y: scroll; +} +body { + background: #600d0d url("../img/background.jpg") no-repeat fixed center top; + font: 12px "Lucida Grande", "Arial", sans-serif; +} + +#content { + width: 820px; + min-height: 500px; + margin: 75px auto 10px auto; +} + +#footer { + color: #eeeeee; + font: 9px "Monaco", "Courier", monospace; + text-align: center; + text-shadow: #444444 0px 2px 2px; +} + +#footer a { + color: #eeeeee; + border-bottom: none; + text-decoration: none; +} + +.caption { + color: #cccccc; + font: italic 11px "Lucida Grande", "Arial", sans-serif; +} + +h1, h2, h3, h4, h5 { + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.05); +} + +a img { border: none; } +a:focus { outline: none; } +a:link { border-bottom: 1px dotted; text-decoration: none; } +a:visited { border-bottom: 1px dotted; text-decoration: none; } +a:active { border-bottom: 1px dotted; text-decoration: none; } +a:hover { border-bottom: 1px dotted; text-decoration: none; } +a.plain { border-bottom: none; } + +h1 { font-size: x-large; } +h2 { font-size: large; } +h3 { font-size: medium; } +h4 { font-size: small; } +h5 { font-size: x-small; } +h6 { font-size: xx-small; } + + + + + +/* Navigation */ +#nav { + width: 820px; + height: 45px; + margin-top: 20px; + margin-bottom: 10px; +} + +#nav_bar { + float: right; + padding-right: 15px; +} + +#nav a { + display: -moz-inline-stack; + display: inline-block; + height: 45px; + border-bottom: none; +} + +#nav a#apps { width:78px; } +#nav a#apps { background-image:url("../img/nav_apps_normal.png"); } +#nav a#apps:hover { background-image:url("../img/nav_apps_hover.png"); } +#nav a#apps.selected { background-image:url("../img/nav_apps_selected.png"); } + +#nav a#projects { width:90px; } +#nav a#projects { background-image:url("../img/nav_projects_normal.png"); } +#nav a#projects:hover { background-image:url("../img/nav_projects_hover.png"); } +#nav a#projects.selected { background-image:url("../img/nav_projects_selected.png"); } + +#nav a#contact { width:86px; } +#nav a#contact { background-image:url("../img/nav_contact_normal.png"); } +#nav a#contact:hover { background-image:url("../img/nav_contact_hover.png"); } +#nav a#contact.selected { background-image:url("../img/nav_contact_selected.png"); } + +#nav a#dev { width:78px; } +#nav a#dev { background-image:url("../img/nav_dev_normal.png"); } +#nav a#dev:hover { background-image:url("../img/nav_dev_hover.png"); } +#nav a#dev.selected { background-image:url("../img/nav_dev_selected.png"); } + + + + + +/* Menu */ +#menu { + margin: 0px; + padding: 0px; + width: 140px; + font-size: 11px; + line-height: 17px; + list-style-type: none; +} + +#menu .subtitle { + margin-top: 10px; + font-weight: bold; + color: #222222; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.05); +} + +#menu a { + color: #444444; + text-decoration: none; + border-bottom: none; +} + +#menu li a:hover, +#menu li a:active { + border-bottom: 1px dotted; + text-decoration: none; +} + + + + + +/* Page */ +#page_strap_frame { + width: 820px; + height: 215px; +} + +#page_strap_content { + width: 820px; + height: 215px; +} + +#page_body { + background: url("../img/page_body.png") repeat-y; + width: 820px; + min-height: 190px; +} + +#page_content { + padding: 5px 40px; +} + +#page_footer { + background: url("../img/page_footer.png"); + width: 820px; + height: 30px; +} + + + + + +/* Home */ +#logo { + width: 440px; + height: 620px; + margin: auto; +} + +#logo_offset { + height: 120px; +} + + + + + +/* Tables */ +table.icons { + border-spacing: 40px 5px; +} + +table.icons td { + vertical-align: top; + text-align: center; + width: 128px; +} + +table.icons img { + width: 128px; + height: 128px; +} + +table.badges { + margin: 40px auto 20px auto; + width: 80%; +} + +table.list_header { + background: #ddddff; + font-weight: bold; + line-height: 200%; + margin: 20px 10px 0px 10px; + padding-left: 10px; + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); + width: 95%; + + -moz-border-radius-topright: 5px; + -moz-border-radius-topleft: 5px; + + -webkit-border-top-right-radius: 5px; + -webkit-border-top-left-radius: 5px; +} + +table.list { + background: #eeeeff; + background: -webkit-gradient(linear, left top, left bottom, from(#eeeeff), to(#fcfcff)); + margin: 0px 10px 0px 10px; + padding-left: 10px; + width: 95%; + + -moz-border-radius-bottomright: 5px; + -moz-border-radius-bottomleft: 5px; + + -webkit-border-bottom-right-radius: 5px; + -webkit-border-bottom-left-radius: 5px; +} + +table.list th { + font-weight: normal; + text-align: left; + width: 150px; +} + + + + + +/* Boxes */ +.box { + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +.box_image { + border: 1px solid #888888; +} + +.box_button { + text-align: center; + margin: 24px; +} + +.box_code_yellow { + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + font-family: monospace; + white-space: pre; + font-size: 12px; + border: 1px solid #bbbbbb; + padding: 10px; + background: #ffffe0; + background: -webkit-gradient(linear, left top, right top, from(#fffff0), to(#fffffd)); +} + +.box_licence { + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + font-family: monospace; + font-size: 12px; + background-color: #eeeeff; + border: 1px solid #bbbbbb; + padding: 10px; + background: -webkit-gradient(linear, left top, right top, from(#eeeeff), to(#fefeff)); +} + + + + + +/* Layout */ +.padding20 { + padding: 20px; +} + +.width450 { + width: 450px; + height: auto; +} + + + + + +/* Buttons */ +a.button { + display: inline-block; + height: 23px; + padding: 0 0 0 3px; + font-size: 11px; + font-weight: bold; + color: #333333; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.9); + background: url('../img/button_thin_cell.png') 0 0 no-repeat; + white-space: nowrap; + border: none; + overflow: visible; + cursor: pointer; + text-decoration: none; +} + +a.button>span { + display: block; + height: 23px; + padding: 0 10px 0 8px; + line-height: 23px; + background: url('../img/button_thin_cell.png') 100% 0 no-repeat; +} + +a.button:hover, +a.button:focus { + color: #ffffff; + text-decoration: none; + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3); + background-position: 0 -30px; +} +a.button:hover>span, +a.button:focus>span { + background-position: 100% -30px; +} + +a.button:active { + background-position: 0 -60px; +} + +a.button:active>span { + background-position: 100% -60px; +} + + +a.icon_download .icon, +a.icon_github .icon { + float: left; + margin-left: -4px; + width: 18px; + height: 22px; + background: url('../img/button_thin_icons.png') 0 0 no-repeat; +} + + +a.icon_download .icon { + background-position: -0px 0; +} + +a.icon_download:hover .icon, +a.icon_download:focus .icon { + background-position: -0px -25px; +} + + +a.icon_github .icon { + background-position: -20px 0; +} + +a.icon_github:hover .icon, +a.icon_github:focus .icon { + background-position: -20px -25px; +} + + + + + + + + + + \ No newline at end of file diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/src/img/background.jpg b/release_scripts/osx/refnum/dmgutil/Documentation/src/img/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d810a3a29a5884f0e2314fc980b3ac433aa241f GIT binary patch literal 34299 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 ZR^XQv_+$OJm% zbue~6eX%byl0groM;=UxZ>GCL5c-PmX0P4JUGKVY#y*#sVLoWnr(Z~Jof0fvd5E^h zAurE!$xilh+vaTrf3?hiR@3=wuubifo5Jdnj?$Ii(dNW-m@TmW`Bc_viAT}eB(-+( zyl>$2F@TT91Ep7lm~V8 zb2uD1ZJM)o3%k(_g6_L>h0U^!ROA!-C@Tm#s91(#3gRK@h^M~uvn3f3?}iOY*HG_& zGYQFNNTrWXBxG*{TlFi|ap)!@q)LR-566QY(h9j^g(_}KJq`#DD>Fb;>#SHouaS2| zouU`VSpE(=8isj0xPXm_%00s?@7Gvj{yo&C3Lc$BLUta<7Bet(m{ROt=5K+l2VWQY zO~c%+iW0qEZ`ZIo$JGgiO(?Je=Xj)KUC8~Ik&&^GUZf4G3{9ErZx+M|n)}c9@z%dr ztH~D8&ogH)v^Q5JM(~!FfMUOVaXqN9{Tm|UxsVbr1Q?+~x)Cr6NrMN%wg!Y5*HG-+ zR(`l%-4-$->%KSjMz+CW)@>(-LhI~(Ie|?rLuwlw-1lLUBaI#MU!+~cof-yB?2-g* znW*OBu&G0h_u^(ku#DGYB@|R#E(lL&5ht`s%0Zd#^s}dvg8|g*F%%YAT7EhTX9j7= zJI=mJj7-#1C-_A2D;?Jfuenj1psvXK<-xG$bsv`=;ObCCF=ylUx=F4G@60@p?mk0| zu5KEz1J;~7GM!^-9@;VMs?enmDF1$jsVsBrr_?3cN?EVy_CQN`>q%?Y!%VlCBsYg7 z8w^y7+wCFk7~y%`@k5_mW;B~&qpGa;>WeG@-M?>crMW0Rmfq_IN4nwwPh5D2sl*R# z>J81zkYtBS%n+FOFyvVeA9OA@+P4Vx2K8RNKT(|YJ)d}CjO=d{m z-0+mAeN*3NUJe@eNlz^^4D}o_Xlk{i;YEZ}PA;ZP^P&*Mj>OkiQIz@teZ|y>`rhhh8(o+fDI zH64w5&S=j)`vb|`!=&7CimgftSFfKkIDmc?Ic8P}1RvVl`zUQdhJd z!&RItVGF^nIwagpn4ro^+ckT-oKa~UdJVqaBP%J}-GyWUE_G>s!6qVkI#pz)c~Utq zVMjkO8WfC-7giMT2$y&`CML|(2ENAHA9FWIdXZ^tLvS9CAX5J1+4^4}Tr5eqw;Ppb zuaRyHdINvD(P|t8<2+?%-N=4b{&D+#CX8By-Dz6KcyAmti)OS~_t7yvZg0Jb%}Gq^ zLSP?nYPh=`LFA?wQ>){39R144y6ln=#haYtCi6WEooLi+G`|?__9X&WDGfoe!Q{}# zT18V`%G=a>(8#&YbF`)GPGjwyhNzswXLwN!>b*ozj6VZyy_JKQwDZIGa6c_2l*Vbi zhTJZ-xjmRE`>3l7A@zEgzeYhS&WSy~I>-C(8Ub%Xws^$e94NRp#Ldmc8Rp@f!o|zw zVuSobx=xe9r__EPkI;g_lQ!{)fipYzX)P7ZhfvYP*m6noNY#<4C&a6#?Pnp-JU**C v02uNFzb`8m@>neeqZsAzb^Y4UFfRfsV(0wP(|0NckwU&c{+lbkBaZz8Jzhws literal 0 HcmV?d00001 diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/src/img/button_thin_icons.png b/release_scripts/osx/refnum/dmgutil/Documentation/src/img/button_thin_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..15ca7ef4dcfa6916a64ea5f23ef5d120b8ca07f6 GIT binary patch literal 1190 zcmV;X1X=ruP)#2P#=DA_hWQM3~VZ)tCj@6?%ky~d|wWtQiIk9$4uzW3mK-gC~q?~W3Q zL`;JDg9LGb2qF+cL=b@p@_!(4u3l7CRh2R^G4a~raP+jbwH=4)H8>#>{G}OUu~?R& zv8AV{uSL5TTrTeaOEaXpx;lAsa`F=Ob8>PNG^;_YxIcy2!KaOH1Fw6ru5GN5C8Jp|Yb3k%%{FM;R)o6Qz#YHIRAj4c#qAfCeGtH3oz4|luWOOZEj zK#ZLbqu=FnQQo-69255&=MZvuGQx`&&TEMp>+9>)?Ck6?x->KVnynTZpJJ561A)Nx zs2F8sWut%>m#%}u;3sjvaSox_PTuyFmzSS`BOPgJY1?yibKk;t73>G!&1CP3#0Un1 z9?i^n-_X#oT~*a}&CSg>kk~1I1o?e}X{xLc_@<(w;#7Wq{z>%D^MCa#zBVl&+I|wF zprBv?V)$UXpOlpJ05fEBZ*OlS{@y4_J-)J61)qbrz?+=B)tNl7va)ie)oRV6er9Io zVxQ0V65{k_WMo|a^1_6K^_V>r?v{%C4MG;GtvzV={OSYEW^?iQ`1lFxcXoDev)k>D zhlYkW3=R&qk_}bdCJ1y83I8EiT0xOPGeb}`h2yya5=RnCk z77m9U9L}hmqtHhSM4L#U^Di8F$ao$T6QwO(NSciv)osEr+yT|_#C_i^#JH*vgT9~NF@62{!9K3G1hEkL4wHr!FpFu? zU5hndPZy6lrm>x3Tg^20E@&DZlzYll+k+!Ye{$F8!>?6i0}-9k`b zG(-r;B4qMcmtqjRFl0BCH4II|@mrOgNaS zQov@JQot0*a@EAsB)?2_TioSMaew#JHx#~!p8a~U8*kQ?1wbNTF`H>tK(mzTioj;6 zD=Qp(XXRjuNr9DKNeM<$2NhcY(!N-2Hdrr;7#r9~)0+^z5Oq*7pfy1Coy);`QN$d< z&hoW`=!K|*h{2q?*bSr?XaLAwG`B zcErY-X>-lA!RBIf%`f6e8*HXcHc!va&c436x%vL$;^MpW^Yd?iy&6G^G}DHfpW=9FKEHYs*4bEdY|ykt(A1*lG>e;eairIz_oXmu z(;=L0001~RwcAlrn50no7)Oej=Yg2XgC?vSG}DojZ7UQ0@9So95}%4#$-j~|jjs_j z003~DK{L++C6Ai&N=$h#O{jeCO4AJ{T)TH>G7u_d%$&rLzfQ~m0Kj2KO&K)Hq9#4x zH9NSMW;$Y$Z6#{*Nw;xgt77J)h#5fx004&{G@%HZTGR|(p{d2pT46KYV$xlVk$ELb zR>e&1>Wr`f0D!{^nKEj+B~g>dO&&F?Hrd>1(1a{L(t(>ekzDzQOa@}c6&e5lIQ*~~ z`W9EdNI>~mUZKf9Yi~hQhE0B@ru=;uBW9k3Oo|x`0ssKO@dQoY07DCil~-<-ecf!Y zL6aY-i*YiqRM|=M`Jw@N$h3k60053IXu^uH=_)a^Rn%;{Y;!*G6g6G;{3LrmkC@t( z89@U80LKwDO(jyg=Ksqx*J7sjnL7=dTHNGO(`GRfvY=_3`aLs(1^@t#GiYk})zp3t zmG_Ub$)W)5K-A=uPvO#y3>k3)004&*F=N9fH1!1lHriBklc1?ZO;ZV+GGJ;EBVGUi z;5Z{^C|bfm{A?66n+8o8HA52_6EWfj000gW%r1gv*#z1x{vZGV;B5uZ#@Z0H1pokWm?r)O004lX0RR9HGynhqf(8HpIC6gr ZFaTgP3gBO&^$7p~002ovPDHLkV1g#c)VKfu literal 0 HcmV?d00001 diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/src/img/page_strap_dmgutil.jpg b/release_scripts/osx/refnum/dmgutil/Documentation/src/img/page_strap_dmgutil.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81a576c27c3d7eba0f25b65e5ef49718e1bbd031 GIT binary patch literal 36283 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%0AdYKQYwuUWn0S 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 literal 0 HcmV?d00001 diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/src/img/page_strap_dmgutil.png b/release_scripts/osx/refnum/dmgutil/Documentation/src/img/page_strap_dmgutil.png new file mode 100644 index 0000000000000000000000000000000000000000..5424b893bfe79ce735844df6efeda6eec0dbba7d GIT binary patch literal 3686 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 literal 0 HcmV?d00001 diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/src/js/refnum.js b/release_scripts/osx/refnum/dmgutil/Documentation/src/js/refnum.js new file mode 100644 index 00000000..cf70b435 --- /dev/null +++ b/release_scripts/osx/refnum/dmgutil/Documentation/src/js/refnum.js @@ -0,0 +1,34 @@ +function loadImage(theURL) +{ + theImage = new Image; + theImage.src = theURL; +} + + +function navSelect(theID) +{ + document.getElementById(theID).setAttribute("class", "selected"); +} + + +var prevOnLoad = window.onload; +window.onload = function() +{ + if (prevOnLoad) + prevOnLoad(); + + + // Preload images + if (document.domain != "") + { + loadImage("/src/img/nav_apps_hover.png"); + loadImage("/src/img/nav_apps_selected.png"); + loadImage("/src/img/nav_projects_hover.png"); + loadImage("/src/img/nav_projects_selected.png"); + loadImage("/src/img/nav_contact_hover.png"); + loadImage("/src/img/nav_contact_selected.png"); + loadImage("/src/img/nav_dev_hover.png"); + loadImage("/src/img/nav_dev_selected.png"); + } +} + diff --git a/release_scripts/osx/refnum/dmgutil/Documentation/version.html b/release_scripts/osx/refnum/dmgutil/Documentation/version.html new file mode 100644 index 00000000..f7177a49 --- /dev/null +++ b/release_scripts/osx/refnum/dmgutil/Documentation/version.html @@ -0,0 +1,109 @@ + + + + refNum › dmgutil › Version History + + + + + + + + + + + + + + + + + + + + + + + diff --git a/release_scripts/osx/refnum/dmgutil/dmgutil.pl b/release_scripts/osx/refnum/dmgutil/dmgutil.pl new file mode 100755 index 00000000..9904b5e5 --- /dev/null +++ b/release_scripts/osx/refnum/dmgutil/dmgutil.pl @@ -0,0 +1,738 @@ +#!/usr/bin/perl -w +#============================================================================ +# NAME: +# dmgutil.pl +# +# DESCRIPTION: +# Disk image creation utility. +# +# COPYRIGHT: +# Copyright (c) 2006-2009, refNum Software +# +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# o Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# o Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# o Neither the name of refNum Software nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================ +# Imports +#---------------------------------------------------------------------------- +use strict; +use Getopt::Long; + + + + + +#============================================================================ +# Constants +#---------------------------------------------------------------------------- +my $kLogging = "-quiet"; + +my $Rez = "/Developer/Tools/Rez"; +my $SetFile = "/Developer/Tools/SetFile"; + +my $kManPage = <$theFile") or die "Can't open $theFile for writing: $!\n"; + print OUTPUT $theScript; + close(OUTPUT); + + + + # And execute it + system("osascript", $theFile); + unlink($theFile); +} + + + + + +#============================================================================ +# isVolume : Is a path to the root of a volume? +#---------------------------------------------------------------------------- +sub isVolume +{ + + + # Retrieve our parameters + my ($thePath) = @_; + + + + # Check the state + # + # After stripping out the leading /Volumes, any further slashes + # indicate we have a folder rather than a volume. + $thePath =~ s/\/Volumes\///; + + my $isVolume = ($thePath =~ /.*\/.*/) ? 0 : 1; + + return($isVolume); +} + + + + + +#============================================================================ +# setFolderState : Set the state for a folder. +#---------------------------------------------------------------------------- +sub setFolderState +{ + + + # Retrieve our parameters + my ($thePath, $iconSize, $flagToolbar, $bgImage, $bgColor) = @_; + + + + # Initialise ourselves + my $cmdBackground = ""; + my $cmdIconSize = ""; + my $cmdToolbar = ""; + + + + # Prepare the background + # + # As of 10.5, the Finder refuses to manipulate files whose names start with + # a period (rdar://5582578). As such we need to use an underscore for the + # image, then make it invisible using SetFile. + if (-f $bgImage) + { + $bgImage =~ /.*\.(\w+)/; + my $dstImage = "$thePath/_Background.$1"; + + `cp "$bgImage" "$dstImage"`; + + $cmdBackground .= "set theImage to posix file \"$dstImage\"\n"; + $cmdBackground .= " set background picture of theOptions to theImage\n"; + $cmdBackground .= " do shell script \"/Developer/Tools/SetFile -a V '$dstImage'\"\n"; + } + + elsif ($bgColor ne "") + { + $cmdBackground = "set background color of theOptions to {$bgColor} as RGB color"; + } + + + + # Prepare the icon size + if ($iconSize != 0) + { + $cmdIconSize = "set icon size of theOptions to $iconSize"; + } + + + + # Prepare the toolbar + # + # The window must be made visible in order to change the toolbar state. + if ($flagToolbar ne "") + { + $cmdToolbar = " open theWindow \n"; + $cmdToolbar .= " set toolbar visible of theWindow to $flagToolbar \n"; + $cmdToolbar .= " close theWindow \n"; + } + + + + # Identify the target + # + # AppleScript requires the correct nomenclature for the target item. + my $theTarget = "folder \"$thePath\""; + + if (isVolume($thePath)) + { + $theTarget =~ s/folder "\/Volumes\//disk "/; + } + + + + # Set the folder state + # + # Once a change has been made, it must be flushed to disk with update. + my $theScript = ""; + + $theScript .= "tell application \"Finder\"\n"; + $theScript .= " set theTarget to $theTarget \n"; + $theScript .= " set theWindow to window of theTarget \n"; + $theScript .= "\n"; + $theScript .= " set current view of theWindow to icon view \n"; + $theScript .= " set theOptions to icon view options of theWindow \n"; + $theScript .= " set arrangement of theOptions to not arranged \n"; + $theScript .= "\n"; + $theScript .= " $cmdBackground\n"; + $theScript .= " $cmdIconSize \n"; + $theScript .= " $cmdToolbar \n"; + $theScript .= "\n"; + $theScript .= " update theTarget\n"; + $theScript .= "end tell"; + + appleScript($theScript); +} + + + + + +#============================================================================ +# setCustomIcon : Set a custom icon. +#---------------------------------------------------------------------------- +sub setCustomIcon +{ + + + # Retrieve our parameters + my ($thePath, $theIcon) = @_; + + + + # Validate our state + # + # We require several tools inside /Developer/Tools. + die("Setting an icon requires $Rez") if (! -e $Rez); + die("Setting an icon requires $SetFile") if (! -e $SetFile); + + + + # Prepare the flags + # + # Prior to Mac OS X 10.4, SetFile can only set an attribute if it is + # first cleared (rdar://3738867). + my $sysVers = `uname -r`; + my $setHidden = ($sysVers =~ /^[0-7]\./) ? "vV" : "V"; + my $setIcon = ($sysVers =~ /^[0-7]\./) ? "cC" : "C"; + + + + # Set a volume icon + # + # Volume custom icons are contained in a .VolumeIcon.icns file. + if (isVolume($thePath)) + { + my $iconFile = "$thePath/.VolumeIcon.icns"; + + `cp "$theIcon" "$iconFile"`; + + `$SetFile -a $setHidden "$iconFile"`; + `$SetFile -a $setIcon "$thePath"`; + } + + + # Set a folder icon + # + # Folder custom icons are contained in an ('icns', -16455) resource, + # placed in an invisible "Icon\r" file inside the folder. + elsif (-d $thePath) + { + my $iconFile = "$thePath/Icon\r"; + my $tmpR = "/tmp/dmgutil.r"; + + `echo "read 'icns' (-16455) \\"$theIcon\\";\n" > $tmpR`; + `cd /tmp; $Rez dmgutil.r -append -o "$iconFile"`; + + `$SetFile -a $setHidden "$iconFile"`; + `$SetFile -a $setIcon "$thePath"`; + + unlink($tmpR); + } + + + # Set a file icon + # + # File custom icons are contained in an ('icns', -16455) resource. + else + { + my $tmpR = "/tmp/dmgutil.r"; + + `echo "read 'icns' (-16455) \\"$theIcon\\";\n" > $tmpR`; + `cd /tmp; $Rez dmgutil.r -append -o "$thePath"`; + + `$SetFile -a $setIcon "$thePath"`; + + unlink($tmpR); + } +} + + + + + +#============================================================================ +# setWindowPos : Set the position of a window. +#---------------------------------------------------------------------------- +sub setWindowPos +{ + + + # Retrieve our parameters + my ($thePath, $posX, $posY, $theWidth, $theHeight) = @_; + + + + # Initialise ourselves + my $bottom = $posY + $theHeight; + my $right = $posX + $theWidth; + + + + # Identify the target + # + # AppleScript requires the correct nomenclature for the target item. + my $theTarget = "folder \"$thePath\""; + + if (isVolume($thePath)) + { + $theTarget =~ s/folder "\/Volumes\//disk "/; + } + + + + # Set the window position + # + # In theory, the "set bounds" command is all that should be necessary + # to set the bounds of a Finder window. + # + # Unfortunately, under 10.4 this will result in a window that will be + # taller than the specified size when the window is next opened. + # + # To reliably set the bounds of a window we must open the window, show + # the status bar, and set the window bounds to be 20 pixels taller (the + # height of the status bar) than necessary. + # + # The status bar can then be hidden, the window closed, and the bounds + # bounds will be the desired size when the window is next opened. + my $theScript = ""; + + $theScript .= "tell application \"Finder\"\n"; + $theScript .= " set theTarget to $theTarget \n"; + $theScript .= " set theWindow to window of theTarget \n"; + $theScript .= "\n"; + $theScript .= " open theWindow \n"; + $theScript .= " set statusbar visible of theWindow to true \n"; + $theScript .= " set bounds of theWindow to {$posX, $posY, $right, $bottom+20} \n"; + $theScript .= " set statusbar visible of theWindow to false \n"; + $theScript .= " close theWindow \n"; + $theScript .= "\n"; + $theScript .= "end tell"; + + appleScript($theScript); +} + + + + + +#============================================================================ +# setIconPos : Set the position of an icon. +#---------------------------------------------------------------------------- +sub setIconPos +{ + + + # Retrieve our parameters + my ($theFile, $posX, $posY) = @_; + + + + # Identify the target + # + # Since the 'posix file' command follows symlinks, in order to set the + # position of a symlink (vs its target) we need to use an HFS path and + # reference it as a file rather than an alias. + my $theTarget = "alias (posix file \"$theFile\")"; + + if (-l $theFile) + { + $theTarget = $theFile; + + $theTarget =~ s/\/Volumes\///; + $theTarget =~ s/\//:/g; + $theTarget = "file \"$theTarget\""; + } + + + + # Set the icon position + # + # Once a change has been made, it must be flushed to disk with update. + my $theScript = ""; + + $theScript .= "tell application \"Finder\"\n"; + $theScript .= " set theTarget to $theTarget \n"; + $theScript .= "\n"; + $theScript .= " set position of theTarget to {$posX, $posY} \n"; + $theScript .= " update theTarget\n"; + $theScript .= "end tell"; + + appleScript($theScript); +} + + + + + +#============================================================================ +# doOpen : Open a new disk image. +#---------------------------------------------------------------------------- +sub doOpen +{ + + + # Retrieve our parameters + my ($dmgFile, $volName) = @_; + + + + # Clean up any previous image + system("rm", "-f", "$dmgFile.sparseimage"); + system("rm", "-f", "$dmgFile"); + + + + # Create the image + # + # A large sparse disk image is created, which will be shrunk down + # and compressed when the disk image is finally closed. + print " creating $dmgFile\n" if ($kLogging eq "-quiet"); + + system("hdiutil", "create", $dmgFile, + "-volname", $volName, + "-megabytes", "1000", + "-type", "SPARSE", + "-fs", "HFS+", + $kLogging); + + system("hdiutil", "mount", $kLogging, "$dmgFile.sparseimage"); +} + + + + + +#============================================================================ +# doClose : Close a disk image. +#---------------------------------------------------------------------------- +sub doClose +{ + + + # Retrieve our parameters + my ($dmgFile, $volName, $theLicense) = @_; + + + + # Bless the volume + # + # Blessing the volume ensures that the volume always opens in the current + # view, overriding the user's "Open new windows in column view" preference. + system("bless", "--openfolder", "/Volumes/$volName"); + + + + # Compress the image + # + # On 10.5, the disk image must be ejected rather than unmounted to allow + # it to be converted from a sparse image to a compressed image. + print " compressing $dmgFile\n" if ($kLogging eq "-quiet"); + + system("hdiutil", "eject", $kLogging, "/Volumes/$volName"); + + if ($theLicense ne "") + { + system("hdiutil", "unflatten", $kLogging, "$dmgFile.sparseimage"); + `$Rez -a "$theLicense" -o "$dmgFile.sparseimage"`; + system("hdiutil", "flatten", $kLogging, "$dmgFile.sparseimage"); + } + + system("hdiutil", "convert", "$dmgFile.sparseimage", + "-format", "UDZO", + "-o", $dmgFile, + "-imagekey", "zlib-level=9", + $kLogging); + + + + # Clean up + system("rm", "-f", "$dmgFile.sparseimage"); +} + + + + + +#============================================================================ +# doSet : Set a file/folder state. +#---------------------------------------------------------------------------- +sub doSet +{ + + + # Retrieve our parameters + my ($thePath, $posX, $posY, $theWidth, $theHeight, $iconSize, $theIcon, $bgImage, $bgColor, $flagToolbar) = @_; + + + + # Set the custom icon + if ($theIcon ne "") + { + setCustomIcon($thePath, $theIcon); + } + + + + # Set the folder state + if ($iconSize != 0 || $bgImage ne "" || $bgColor ne "" || $flagToolbar ne "") + { + setFolderState($thePath, $iconSize, $flagToolbar, $bgImage, $bgColor); + } + + + + # Set the position + # + # Window position must be set after applying the folder state. + if ($posX != 0 && $posY != 0) + { + if ($theWidth != 0 && $theHeight != 0) + { + setWindowPos($thePath, $posX, $posY, $theWidth, $theHeight); + } + else + { + setIconPos($thePath, $posX, $posY); + } + } +} + + + + + +#============================================================================ +# dmgUtil : Manipulate a disk image. +#---------------------------------------------------------------------------- +sub dmgUtil +{ + + + # Retrieve our parameters + my ($doOpen, $doClose, $doSet) = (0, 0, 0); + my ($posX, $posY, $theWidth, $theHeight, $iconSize) = (0, 0, 0, 0, 0); + my ($volName, $theIcon, $bgImage, $bgColor, $flagToolbar, $theLicense) = ("", "", "", "", "", ""); + + GetOptions( "--open+", => \$doOpen, + "--close+", => \$doClose, + "--set+", => \$doSet, + "--volume=s", => \$volName, + "--x=i", => \$posX, + "--y=i", => \$posY, + "--width=i", => \$theWidth, + "--height=i", => \$theHeight, + "--iconsize=i", => \$iconSize, + "--icon=s", => \$theIcon, + "--background=s", => \$bgImage, + "--bgcol=s", => \$bgColor, + "--toolbar=s", => \$flagToolbar, + "--license=s", => \$theLicense); + + my ($thePath) = @ARGV; + + $thePath = "" if (!defined($thePath)); + + + + # Perform the action + if ($doOpen && $thePath ne "" && $volName ne "") + { + doOpen($thePath, $volName); + } + + elsif ($doClose && $thePath ne "" && $volName ne "") + { + doClose($thePath, $volName, $theLicense); + } + + elsif ($doSet && $thePath ne "") + { + doSet($thePath, $posX, $posY, $theWidth, $theHeight, $iconSize, $theIcon, $bgImage, $bgColor, $flagToolbar); + } + + else + { + print $kManPage; + } +} + + + + + +#============================================================================ +# Script entry point +#---------------------------------------------------------------------------- +dmgUtil(); diff --git a/release_scripts/osx/release.macx.sh b/release_scripts/osx/release.macx.sh index 5e5fc161..1e602c7f 100755 --- a/release_scripts/osx/release.macx.sh +++ b/release_scripts/osx/release.macx.sh @@ -1,4 +1,4 @@ -#!/bin/bash +:#!/bin/bash # -------------------------------------------------------------------- # 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 @@ -19,11 +19,11 @@ PROJECT_ROOT="$SCRIPT_PATH/../.." APPLICATION_NAME="OpenBoard" -BASE_QT_DIR=~/qt/5.5/clang_64 +BASE_QT_DIR=~/Qt/5.13.1/clang_64 # Executables QMAKE=$BASE_QT_DIR/bin/qmake MACDEPLOYQT=$BASE_QT_DIR/bin/macdeployqt -DMGUTIL="$PROJECT_ROOT/../OpenBoard-ThirdParty/refnum/dmgutil/dmgutil.pl" +DMGUTIL="$PROJECT_ROOT/release_scripts/osx/refnum/dmgutil/dmgutil.pl" DSYMUTIL=/usr/bin/dsymutil STRIP=/usr/bin/strip PLISTBUDDY=/usr/libexec/PlistBuddy @@ -201,30 +201,30 @@ $MACDEPLOYQT "`pwd`/$APPLICATION_NAME.app" cd - # make sure libs installed via homebrew 2.0 refer to in-app libs -# notify "relinking libs ..." + notify "relinking libs ..." # libavformat -# install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavcodec.58.dylib @executable_path/../Frameworks/libavcodec.58.dylib -# install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libswresample.3.dylib @executable_path/../Frameworks/libswresample.3.dylib -# install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib +install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.2.1/lib/libavcodec.58.dylib @executable_path/../Frameworks/libavcodec.58.dylib +install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.2.1/lib/libswresample.3.dylib @executable_path/../Frameworks/libswresample.3.dylib +install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.2.1/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib # libavcodec -# install_name_tool "$APP/Contents/Frameworks/libavcodec.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libswresample.3.dylib @executable_path/../Frameworks/libswresample.3.dylib -# install_name_tool "$APP/Contents/Frameworks/libavcodec.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib +install_name_tool "$APP/Contents/Frameworks/libavcodec.58.dylib" -change /usr/local/Cellar/ffmpeg/4.2.1/lib/libswresample.3.dylib @executable_path/../Frameworks/libswresample.3.dylib +install_name_tool "$APP/Contents/Frameworks/libavcodec.58.dylib" -change /usr/local/Cellar/ffmpeg/4.2.1/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib #libswresample -# install_name_tool "$APP/Contents/Frameworks/libswresample.3.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib +install_name_tool "$APP/Contents/Frameworks/libswresample.3.dylib" -change /usr/local/Cellar/ffmpeg/4.2.1/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib #libswscale -# install_name_tool "$APP/Contents/Frameworks/libswscale.5.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib +install_name_tool "$APP/Contents/Frameworks/libswscale.5.dylib" -change /usr/local/Cellar/ffmpeg/4.2.1/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib # libhogweed -# install_name_tool "$APP/Contents/Frameworks/libhogweed.4.dylib" -change /usr/local/Cellar/nettle/3.4.1/lib/libnettle.6.dylib @executable_path/../Frameworks/libnettle.6.dylib +install_name_tool "$APP/Contents/Frameworks/libhogweed.4.dylib" -change /usr/local/Cellar/nettle/3.4.1/lib/libnettle.6.dylib @executable_path/../Frameworks/libnettle.6.dylib # libssl -# install_name_tool "$APP/Contents/Frameworks/libssl.1.1.dylib" -change /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.1.1.dylib @executable_path/../Frameworks/libcrypto.1.1.dylib +install_name_tool "$APP/Contents/Frameworks/libssl.1.1.dylib" -change /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.1.1.dylib @executable_path/../Frameworks/libcrypto.1.1.dylib # libvorbis -# install_name_tool "$APP/Contents/Frameworks/libvorbisenc.2.dylib" -change /usr/local/Cellar/libvorbis/1.3.6/lib/libvorbis.0.dylib @executable_path/../Frameworks/libvorbis.0.dylib +install_name_tool "$APP/Contents/Frameworks/libvorbisenc.2.dylib" -change /usr/local/Cellar/libvorbis/1.3.6/lib/libvorbis.0.dylib @executable_path/../Frameworks/libvorbis.0.dylib notify "Extracting debug information ..." $DSYMUTIL "$APP/Contents/MacOS/$APPLICATION_NAME" -o "$DSYM" diff --git a/src/adaptors/UBExportDocument.cpp b/src/adaptors/UBExportDocument.cpp index 069baebc..3d5abadc 100644 --- a/src/adaptors/UBExportDocument.cpp +++ b/src/adaptors/UBExportDocument.cpp @@ -39,10 +39,13 @@ #include "globals/UBGlobals.h" -THIRD_PARTY_WARNINGS_DISABLE -#include "quazip.h" -#include "quazipfile.h" -THIRD_PARTY_WARNINGS_ENABLE +#ifdef Q_OS_OSX + #include + #include +#else + #include "quazip.h" + #include "quazipfile.h" +#endif #include "core/memcheck.h" diff --git a/src/adaptors/UBExportDocumentSetAdaptor.cpp b/src/adaptors/UBExportDocumentSetAdaptor.cpp index b3a72d54..a54f4641 100644 --- a/src/adaptors/UBExportDocumentSetAdaptor.cpp +++ b/src/adaptors/UBExportDocumentSetAdaptor.cpp @@ -40,10 +40,13 @@ #include "core/UBPersistenceManager.h" #include "core/UBForeignObjectsHandler.h" -THIRD_PARTY_WARNINGS_DISABLE -#include "quazip.h" -#include "quazipfile.h" -THIRD_PARTY_WARNINGS_ENABLE +#ifdef Q_OS_OSX + #include + #include +#else + #include "quazip.h" + #include "quazipfile.h" +#endif #include "core/memcheck.h" diff --git a/src/adaptors/UBExportDocumentSetAdaptor.h b/src/adaptors/UBExportDocumentSetAdaptor.h index 144ff8f2..9c7a0f0b 100644 --- a/src/adaptors/UBExportDocumentSetAdaptor.h +++ b/src/adaptors/UBExportDocumentSetAdaptor.h @@ -33,10 +33,8 @@ #include "frameworks/UBFileSystemUtils.h" #include "globals/UBGlobals.h" -THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" -THIRD_PARTY_WARNINGS_ENABLE class UBDocumentProxy; class UBDocumentTreeModel; diff --git a/src/adaptors/UBExportWeb.cpp b/src/adaptors/UBExportWeb.cpp index 01442e77..a69d5a14 100644 --- a/src/adaptors/UBExportWeb.cpp +++ b/src/adaptors/UBExportWeb.cpp @@ -39,10 +39,8 @@ #include "globals/UBGlobals.h" -THIRD_PARTY_WARNINGS_DISABLE #include "quazip.h" #include "quazipfile.h" -THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/adaptors/UBImportCFF.cpp b/src/adaptors/UBImportCFF.cpp index 83497abd..ddfeba87 100644 --- a/src/adaptors/UBImportCFF.cpp +++ b/src/adaptors/UBImportCFF.cpp @@ -43,11 +43,17 @@ #include "globals/UBGlobals.h" -THIRD_PARTY_WARNINGS_DISABLE -#include "quazip.h" -#include "quazipfile.h" -#include "quazipfileinfo.h" -THIRD_PARTY_WARNINGS_ENABLE +//THIRD_PARTY_WARNINGS_DISABLE +#ifdef Q_OS_OSX + #include + #include + #include +#else + #include "quazip.h" + #include "quazipfile.h" + #include "quazipfileinfo.h" +#endif +//THIRD_PARTY_WARNINGS_ENABLE #include "core/memcheck.h" diff --git a/src/adaptors/UBImportDocument.cpp b/src/adaptors/UBImportDocument.cpp index 5e632f36..b99b6d85 100644 --- a/src/adaptors/UBImportDocument.cpp +++ b/src/adaptors/UBImportDocument.cpp @@ -38,11 +38,15 @@ #include "globals/UBGlobals.h" -THIRD_PARTY_WARNINGS_DISABLE -#include "quazip.h" -#include "quazipfile.h" -#include "quazipfileinfo.h" -THIRD_PARTY_WARNINGS_ENABLE +#ifdef Q_OS_WIN + #include + #include + #include +#else + #include "quazip.h" + #include "quazipfile.h" + #include "quazipfileinfo.h" +#endif #include "core/memcheck.h" diff --git a/src/adaptors/UBImportDocumentSetAdaptor.cpp b/src/adaptors/UBImportDocumentSetAdaptor.cpp index a2397b21..cdc9250b 100644 --- a/src/adaptors/UBImportDocumentSetAdaptor.cpp +++ b/src/adaptors/UBImportDocumentSetAdaptor.cpp @@ -36,11 +36,15 @@ #include "globals/UBGlobals.h" -THIRD_PARTY_WARNINGS_DISABLE +#ifdef Q_OS_WIN + #include + #include + #include +#else #include "quazip.h" -#include "quazipfile.h" -#include "quazipfileinfo.h" -THIRD_PARTY_WARNINGS_ENABLE + #include "quazipfile.h" + #include "quazipfileinfo.h" +#endif #include "core/memcheck.h" diff --git a/src/frameworks/UBFileSystemUtils.cpp b/src/frameworks/UBFileSystemUtils.cpp index 99f53453..59c72aad 100644 --- a/src/frameworks/UBFileSystemUtils.cpp +++ b/src/frameworks/UBFileSystemUtils.cpp @@ -36,7 +36,11 @@ #include "globals/UBGlobals.h" THIRD_PARTY_WARNINGS_DISABLE -#include "quazipfile.h" +#ifdef Q_OS_OSX + #include +#else + #include "quazipfile.h" +#endif #include THIRD_PARTY_WARNINGS_ENABLE diff --git a/src/podcast/podcast.pri b/src/podcast/podcast.pri index e96263fa..873658c9 100644 --- a/src/podcast/podcast.pri +++ b/src/podcast/podcast.pri @@ -32,7 +32,7 @@ macx { src/podcast/ffmpeg/UBMicrophoneInput.h LIBS += -lavformat -lavcodec -lswscale -lswresample -lavutil \ - -lpthread -lvpx -lvorbisenc -lfreetype -llzma -lbz2 -lz -ldl -lavutil -lm + -lpthread -lvpx -lvorbisenc -llzma -lbz2 -lz -ldl -lavutil -lm # (ffmpeg-4.0 with all options (to clean)) # brew install ffmpeg --with-chromaprint --with-fdk-aac --with-libass --with-librsvg --with-libsoxr --with-libssh --with-tesseract @@ -41,14 +41,12 @@ macx { # brew install opus LIBS += -L/usr/local/opt/x264/lib - LIBS += -L/usr/local/opt/sdl/lib LIBS += -L/usr/local/opt/libvorbis/lib LIBS += -L/usr/local/opt/libvpx/lib LIBS += -L/usr/local/opt/theora/lib LIBS += -L/usr/local/opt/libogg/lib LIBS += -L/usr/local/opt/opus/lib LIBS += -L/usr/local/opt/lame/lib - LIBS += -L/usr/local/opt/fdk-aac/lib LIBS += -L/usr/local/opt/libass/lib }
+ + + + +
+
+
+
+ + + + + + + + +
+ + + + + +

Version History

+

dmgutil 1.3

+
    +
  • Released 2008/05/01 +
  • Added workaround for Finder bug when setting background image on 10.5 +
  • Added workaround for hdiutil bug when closing disk image on 10.5 +
+ + +

dmgutil 1.2

+
    +
  • Released 2007/03/07 +
  • Fixed typo in zlib-level flag, was defaulting to 1 not 9 +
+ + +

dmgutil 1.1

+
    +
  • Released 2006/07/31 +
  • Added --icon parameter to set custom icons +
  • Added --bgcol parameter to set background color +
  • Added --toolbar flag to control toolbar visibility +
+ + +

dmgutil 1.0

+
    +
  • Released 2006/07/22 +
  • Initial release +
+ + + + + +
+ + + +
+
+ +