-! Copyright (C) 2007, 2009 Slava Pestov.
+! Copyright (C) 2007, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: io io.files io.files.info.unix io.pathnames
io.directories io.directories.hierarchy kernel namespaces make
tools.deploy.config.editor assocs hashtables prettyprint
io.backend.unix cocoa io.encodings.utf8 io.backend
cocoa.application cocoa.classes cocoa.plists
-combinators ;
+combinators vocabs.metadata vocabs.loader ;
IN: tools.deploy.macosx
: bundle-dir ( -- dir )
- vm parent-directory parent-directory ;
+ running.app?
+ [ vm parent-directory parent-directory ]
+ [ "resource:Factor.app" ]
+ if ;
: copy-bundle-dir ( bundle-name dir -- )
[ bundle-dir prepend-path swap ] keep
- "Contents" prepend-path append-path copy-tree ;
+ append-path copy-tree ;
-: app-plist ( executable bundle-name -- assoc )
+: app-plist ( icon? executable bundle-name -- assoc )
[
"6.0" "CFBundleInfoDictionaryVersion" set
"APPL" "CFBundlePackageType" set
[ "CFBundleExecutable" set ]
[ "org.factor." prepend "CFBundleIdentifier" set ] bi
+
+ [ "Icon.icns" "CFBundleIconFile" set ] when
] H{ } make-assoc ;
-: create-app-plist ( executable bundle-name -- )
+: create-app-plist ( icon? executable bundle-name -- )
[ app-plist ] keep
"Contents/Info.plist" append-path
write-plist ;
-: copy-dll ( bundle-name -- )
- "Frameworks/libfactor.dylib" copy-bundle-dir ;
-
: copy-nib ( bundle-name -- )
deploy-ui? get [
- "Resources/English.lproj/MiniFactor.nib" copy-bundle-dir
+ "Contents/Resources/English.lproj/MiniFactor.nib" copy-bundle-dir
] [ drop ] if ;
+: copy-icns ( vocab bundle-name -- icon? )
+ swap dup vocab-mac-icon-path vocab-append-path dup exists?
+ [ swap "Contents/Resources/Icon.icns" append-path copy-file t ]
+ [ 2drop f ] if ;
+
: create-app-dir ( vocab bundle-name -- vm )
- [
- nip {
- [ copy-dll ]
+ {
+ [
+ nip
[ copy-nib ]
[ "Contents/Resources" append-path make-directories ]
- } cleave
- ]
- [ create-app-plist ]
- [ "Contents/MacOS/" append-path copy-vm ] 2tri
- dup OCT: 755 set-file-permissions ;
+ [ "Contents/Frameworks" append-path make-directories ] tri
+ ]
+ [ copy-icns ]
+ [ create-app-plist ]
+ [ "Contents/MacOS/" append-path copy-vm ]
+ } 2cleave
+ dup 0o755 set-file-permissions ;
: deploy.app-image ( vocab bundle-name -- str )
[ % "/Contents/Resources/" % % ".image" % ] "" make ;
-> selectFile:inFileViewerRootedAtPath: drop ;
M: macosx deploy* ( vocab -- )
- ".app deploy tool" assert.app
"resource:" [
dup deploy-config [
bundle-name dup exists? [ delete-tree ] [ drop ] if
[ bundle-name create-app-dir ] keep
[ bundle-name deploy.app-image ] keep
namespace make-deploy-image
- bundle-name "Contents/Resources" copy-resources
+ bundle-name
+ [ "Contents/Resources" copy-resources ]
+ [ "Contents/Frameworks" copy-libraries ] 2bi
bundle-name show-in-finder
] bind
] with-directory ;