Replace logo and clean up packaging

This commit is contained in:
Martin Natano
2022-05-21 10:05:44 +02:00
parent f5682cfdac
commit ee65b7b0c4
262 changed files with 79 additions and 79117 deletions
+2 -2
View File
@@ -12,7 +12,7 @@
<string>smzip</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>smicon.icns</string>
<string>logo.icns</string>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/zip</string>
@@ -32,7 +32,7 @@
<key>CFBundleGetInfoString</key>
<string>${SM_EXE_NAME} ${SM_VERSION_TRADITIONAL}</string>
<key>CFBundleIconFile</key>
<string>smicon.icns</string>
<string>logo.icns</string>
<key>CFBundleIdentifier</key>
<string>com.${SM_EXE_NAME}-${SM_VERSION_MAJOR}</string>
<key>CFBundleInfoDictionaryVersion</key>
-30
View File
@@ -1,30 +0,0 @@
#import <Cocoa/Cocoa.h>
BOOL NeedsPrivs( NSString *path );
NSString *CopyWithPrivs( NSString *src, NSString *dest );
NSString *Copy( NSString *src, NSString *dest );
/*
* (c) 2006 Steve Checkoway
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
-163
View File
@@ -1,163 +0,0 @@
#import "CopyFiles.h"
#include <Security/Authorization.h>
#include <Security/AuthorizationTags.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
static NSString *COPY_FAILED;
static NSString *EXECUTE_FAILED;
static NSString *AUTH_FAILED;
static void LoadStrings()
{
static bool bLoaded = false;
if( bLoaded )
return;
COPY_FAILED = NSLocalizedString( @"Copy failed.", nil );
EXECUTE_FAILED = NSLocalizedString( @"Execute failed.", nil );
AUTH_FAILED = NSLocalizedString( @"Authentication failed. File not patched.", nil );
bLoaded = true;
}
static BOOL CheckDir( const char *path )
{
DIR *dir = opendir( path );
int fd = dirfd( dir );
struct dirent entry, *ep;
int err;
fchdir( fd );
for( err = readdir_r(dir, &entry, &ep); ep && !err; err = readdir_r(dir, &entry, &ep) )
{
if( !strcmp(".", entry.d_name) || !strcmp("..", entry.d_name) )
continue;
if( access(entry.d_name, W_OK|R_OK) )
{
closedir( dir );
return YES;
}
if( entry.d_type == DT_DIR )
{
if( CheckDir(entry.d_name) )
{
closedir( dir );
return YES;
}
fchdir( fd );
}
}
closedir( dir );
return err;
}
BOOL NeedsPrivs( NSString *path )
{
const char *p = [path UTF8String];
struct stat sb;
if( stat(p, &sb) )
return YES;
if( access(p, W_OK|R_OK) ) // I don't care to parse stat output.
return YES;
if( (sb.st_mode & S_IFDIR) && CheckDir(p) )
return YES;
return NO;
}
NSString *CopyWithPrivs( NSString *src, NSString *dest )
{
LoadStrings();
OSStatus error;
static AuthorizationRef authRef;
static BOOL bCreated = false;
if( !bCreated )
{
AuthorizationFlags flags = kAuthorizationFlagDefaults;
AuthorizationItem item = { kAuthorizationRightExecute, 0, NULL, 0 };
AuthorizationRights rights = { 1, &item };
error = AuthorizationCreate( NULL, kAuthorizationEmptyEnvironment, flags, &authRef );
if (error != errAuthorizationSuccess)
return @"Failed to create authorization.";
flags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
error = AuthorizationCopyRights( authRef, &rights, NULL, flags, NULL );
if (error != errAuthorizationSuccess)
return AUTH_FAILED;
bCreated = YES;
}
// Don't pass path as the first argument. AuthorizationExecuteWithPrivileges must do it.
char path[] = "/bin/cp";
const char *argv[] = { "-Rf", [src UTF8String], [dest UTF8String], NULL };
NSString *result = nil;
error = AuthorizationExecuteWithPrivileges( authRef, path, kAuthorizationFlagDefaults, (char **)argv, NULL );
if (error == errAuthorizationSuccess)
{
int status = 0;
pid_t pid = wait( &status );
if( pid == -1 )
result = [NSString stringWithUTF8String:strerror(errno)];
else if( !WIFEXITED(status) || WEXITSTATUS(status) )
result = COPY_FAILED;
}
else
{
result = EXECUTE_FAILED;
}
return result;
}
NSString *Copy( NSString *src, NSString *dest )
{
LoadStrings();
// Again, don't pass the path.
NSArray *argv = [NSArray arrayWithObjects:@"-Rf", src, dest, nil];
NSTask *task = [NSTask launchedTaskWithLaunchPath:@"/bin/cp" arguments:argv];
[task waitUntilExit];
return [task terminationStatus] ? COPY_FAILED : nil;
}
/*
* (c) 2006 Steve Checkoway
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
-11
View File
@@ -1,11 +0,0 @@
# The format of this file is:
# Application name
# Bundle ID
# version1
# version2
# ...
# The version key -ALL- or no version keys matches all versions.
StepMania
com.StepMania
-ALL-
-28
View File
@@ -1,28 +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>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string>smicon</string>
<key>CFBundleIdentifier</key>
<string>com.StepMania.Patcher</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>ITGp</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
@@ -1,337 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
AA2BF5C30A4F6E1B00A21643 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AA2BF5C10A4F6E1B00A21643 /* Localizable.strings */; };
AAD7D8740A36C53E0073BAC6 /* Identification.txt in Resources */ = {isa = PBXBuildFile; fileRef = AAD7D8730A36C53E0073BAC6 /* Identification.txt */; };
AAD7D8BF0A36CC020073BAC6 /* smicon.icns in Resources */ = {isa = PBXBuildFile; fileRef = AAD7D8BE0A36CC020073BAC6 /* smicon.icns */; };
AAF586BC0A27D9300046D33E /* CopyFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = AAF586BB0A27D9300046D33E /* CopyFiles.m */; };
AAF586BF0A27D9410046D33E /* Upgrader.m in Sources */ = {isa = PBXBuildFile; fileRef = AAF586BE0A27D9410046D33E /* Upgrader.m */; };
AAF586CC0A27DA7F0046D33E /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = AAF586CA0A27DA7F0046D33E /* MainMenu.nib */; };
AAF586CF0A27DA900046D33E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AAF586CD0A27DA900046D33E /* InfoPlist.strings */; };
AAF587560A2826240046D33E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAF587550A2826240046D33E /* Security.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
32CA4F630368D1EE00C91783 /* Patcher_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Patcher_Prefix.pch; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* Patcher.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Patcher.app; sourceTree = BUILT_PRODUCTS_DIR; };
AA2BF5C20A4F6E1B00A21643 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
AAD7D8730A36C53E0073BAC6 /* Identification.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Identification.txt; sourceTree = "<group>"; };
AAD7D8BE0A36CC020073BAC6 /* smicon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = smicon.icns; path = ../smicon.icns; sourceTree = SOURCE_ROOT; };
AAF586BA0A27D9300046D33E /* CopyFiles.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; path = CopyFiles.h; sourceTree = "<group>"; };
AAF586BB0A27D9300046D33E /* CopyFiles.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CopyFiles.m; sourceTree = "<group>"; };
AAF586BD0A27D9410046D33E /* Upgrader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Upgrader.h; sourceTree = "<group>"; };
AAF586BE0A27D9410046D33E /* Upgrader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Upgrader.m; sourceTree = "<group>"; };
AAF586CB0A27DA7F0046D33E /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en; path = en.lproj/MainMenu.nib; sourceTree = "<group>"; };
AAF586CE0A27DA900046D33E /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
AAF587550A2826240046D33E /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
AAF587560A2826240046D33E /* Security.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
AAF586BD0A27D9410046D33E /* Upgrader.h */,
AAF586BE0A27D9410046D33E /* Upgrader.m */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* Patcher.app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* Patcher */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = Patcher;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
AAF586BA0A27D9300046D33E /* CopyFiles.h */,
AAF586BB0A27D9300046D33E /* CopyFiles.m */,
32CA4F630368D1EE00C91783 /* Patcher_Prefix.pch */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
AA2BF5C10A4F6E1B00A21643 /* Localizable.strings */,
AAD7D8BE0A36CC020073BAC6 /* smicon.icns */,
AAD7D8730A36C53E0073BAC6 /* Identification.txt */,
8D1107310486CEB800E47090 /* Info.plist */,
AAF586CD0A27DA900046D33E /* InfoPlist.strings */,
AAF586CA0A27DA7F0046D33E /* MainMenu.nib */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
AAF587550A2826240046D33E /* Security.framework */,
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* Patcher */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Patcher" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Patcher;
productInstallPath = "$(HOME)/Applications";
productName = Patcher;
productReference = 8D1107320486CEB800E47090 /* Patcher.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Patcher" */;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
en,
);
mainGroup = 29B97314FDCFA39411CA2CEA /* Patcher */;
projectDirPath = "";
targets = (
8D1107260486CEB800E47090 /* Patcher */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AAF586CC0A27DA7F0046D33E /* MainMenu.nib in Resources */,
AAF586CF0A27DA900046D33E /* InfoPlist.strings in Resources */,
AAD7D8740A36C53E0073BAC6 /* Identification.txt in Resources */,
AAD7D8BF0A36CC020073BAC6 /* smicon.icns in Resources */,
AA2BF5C30A4F6E1B00A21643 /* Localizable.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
AAF586BC0A27D9300046D33E /* CopyFiles.m in Sources */,
AAF586BF0A27D9410046D33E /* Upgrader.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
AA2BF5C10A4F6E1B00A21643 /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
AA2BF5C20A4F6E1B00A21643 /* en */,
);
name = Localizable.strings;
sourceTree = SOURCE_ROOT;
};
AAF586CA0A27DA7F0046D33E /* MainMenu.nib */ = {
isa = PBXVariantGroup;
children = (
AAF586CB0A27DA7F0046D33E /* en */,
);
name = MainMenu.nib;
sourceTree = "<group>";
};
AAF586CD0A27DA900046D33E /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
AAF586CE0A27DA900046D33E /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_CPP_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_MODEL_TUNING = G4;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = Patcher;
WRAPPER_EXTENSION = app;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
);
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_CPP_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G4;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
PRODUCT_NAME = Patcher;
WRAPPER_EXTENSION = app;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/..";
GCC_VERSION = 3.3;
GCC_VERSION_i386 = 4.0;
GCC_VERSION_ppc = 3.3;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
MACOSX_DEPLOYMENT_TARGET_ppc = 10.2;
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk;
SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk;
SDKROOT_ppc = /Developer/SDKs/MacOSX10.2.8.sdk;
ZERO_LINK = NO;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/..";
GCC_VERSION = 3.3;
GCC_VERSION_i386 = 4.0;
GCC_VERSION_ppc = 3.3;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
MACOSX_DEPLOYMENT_TARGET_ppc = 10.2;
PREBINDING = NO;
SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk;
SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk;
SDKROOT_ppc = /Developer/SDKs/MacOSX10.2.8.sdk;
ZERO_LINK = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Patcher" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Patcher" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}
-28
View File
@@ -1,28 +0,0 @@
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
/*
* (c) 2006 Steve Checkoway
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
-56
View File
@@ -1,56 +0,0 @@
/* Upgrader */
#import <Cocoa/Cocoa.h>
@interface Upgrader : NSObject
{
IBOutlet NSButton *m_Choose;
IBOutlet NSButton *m_Okay;
IBOutlet NSPanel *m_Panel;
IBOutlet NSProgressIndicator *m_ProgressBar;
IBOutlet NSProgressIndicator *m_Searching;
IBOutlet NSTextField *m_StatusText;
IBOutlet NSTextField *m_SelectionText;
IBOutlet NSTextField *m_PatchingText;
IBOutlet NSWindow *m_Window;
NSString *m_sAppID;
NSArray *m_vVersions;
NSString *m_sName;
NSString *m_sError;
NSString *m_sPath;
}
- (IBAction) chooseFile:(id)sender;
- (IBAction) upgrade:(id)sender;
- (void) findApp:(id)obj;
- (void) foundApp:(id)obj;
- (void) upgradeFile:(id)path;
- (void) sheetEnded:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
- (BOOL) panel:(id)sender isValidFilename:(NSString *)filename;
- (BOOL) panel:(id)sender shouldShowFilename:(NSString *)filename;
- (BOOL) checkPath:(NSString *)path;
@end
/*
* (c) 2006 Steve Checkoway
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
-364
View File
@@ -1,364 +0,0 @@
#import "Upgrader.h"
#import "CopyFiles.h"
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
@implementation Upgrader
// Generate English strings using: genstring -o en.lproj Upgrader.m
static NSString *CHOOSE_FILE;
static NSString *PATCH_FILE;
static NSString *PATCH_COMPLETE;
static NSString *QUIT;
static NSString *ERROR;
static NSString *ERROR_MESSAGE;
static NSString *PATCH_FILES_MISSING;
static NSString *PATCHER_CORRUPTED;
static NSString *CORRUPT_TITLE;
static NSString *PATCHING;
static NSString *SEARCHING;
static NSString *SELECTION;
static NSString *WINDOW_TITLE;
static NSOpenPanel *panel = nil;
- (void)awakeFromNib
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"Identification" ofType:@"txt"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSString *stringData = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
CHOOSE_FILE = NSLocalizedString( @"Choose file to patch.", nil );
PATCH_FILE = NSLocalizedString( @"Patch file.", nil );
PATCH_COMPLETE = NSLocalizedString( @"Patch complete.", nil );
QUIT = NSLocalizedString( @"Quit", nil );
ERROR = NSLocalizedString( @"Error", nil );
ERROR_MESSAGE = NSLocalizedString( @"Patching failed:\n%@", nil );
PATCH_FILES_MISSING = NSLocalizedString( @"Patch files missing.", nil );
PATCHER_CORRUPTED = NSLocalizedString( @"This patcher has become corrupted.", nil );
CORRUPT_TITLE = NSLocalizedString( @"Corrupt Patcher", nil );
PATCHING = NSLocalizedString( @"Patching", nil );
SEARCHING = NSLocalizedString( @"Searching for %@...", nil );
SELECTION = NSLocalizedString( @"You have chosen to patch \"%@\" in the folder:\n%@", nil );
WINDOW_TITLE = NSLocalizedString( @"StepMania Patcher", nil );
if( !data )
{
NSRunCriticalAlertPanel( CORRUPT_TITLE, PATCHER_CORRUPTED, @"OK", nil, nil );
[NSApp terminate:self];
}
m_sName = nil;
m_sAppID = nil;
m_vVersions = nil;
NSArray *lines = [stringData componentsSeparatedByString:@"\n"];
NSEnumerator *iter = [lines objectEnumerator];
NSString *line;
NSMutableArray *versions = [NSMutableArray array];
while( (line = [iter nextObject]) )
{
line = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if( [line length] == 0 || [line characterAtIndex:0] == '#' )
continue;
if( m_sName == nil )
{
m_sName = [line retain];
}
else if( m_sAppID == nil )
{
m_sAppID = [line retain];
}
else if( [line isEqualToString:@"-ALL-"] )
{
versions = nil;
break;
}
else
{
[versions addObject:line];
}
}
if( !m_sName || !m_sAppID )
{
NSRunCriticalAlertPanel( CORRUPT_TITLE, PATCHER_CORRUPTED, @"OK", nil, nil );
[NSApp terminate:self];
}
if( versions && [versions count] )
m_vVersions = [versions retain];
// Set strings.
[m_StatusText setStringValue:[NSString stringWithFormat:SEARCHING, m_sName]];
[m_SelectionText setStringValue:@""];
[m_PatchingText setStringValue:PATCHING];
[m_Searching setUsesThreadedAnimation:YES];
[m_ProgressBar setUsesThreadedAnimation:YES];
[m_Window setTitle:WINDOW_TITLE];
[NSThread detachNewThreadSelector:@selector(findApp:) toTarget:self withObject:nil];
[m_Choose setEnabled:YES];
}
- (void) dealloc
{
[m_sName release];
[m_sAppID release];
[m_vVersions release];
[super dealloc];
}
- (IBAction) chooseFile:(id)sender
{
if( !panel )
{
panel = [[NSOpenPanel openPanel] retain];
[panel setCanChooseDirectories:YES];
[panel setAllowsMultipleSelection:NO];
[panel setDelegate:self];
[panel setDirectory:@"/Applications"];
}
if( [panel runModal] == NSFileHandlingPanelOKButton )
{
NSString *dir, *app;
[m_StatusText setStringValue:PATCH_FILE];
[m_Okay setEnabled:YES];
[m_sPath release];
m_sPath = [[panel filename] retain];
dir = [m_sPath stringByDeletingLastPathComponent];
app = [[m_sPath lastPathComponent] stringByDeletingPathExtension];
[m_SelectionText setStringValue:[NSString stringWithFormat:SELECTION, app, dir]];
[m_Okay setTitle:@"OK"];
[m_Okay setAction:@selector(upgrade:)];
[m_Okay setTarget:self];
}
}
- (IBAction) upgrade:(id)sender
{
[NSApp beginSheet:m_Panel
modalForWindow:[sender window]
modalDelegate:self
didEndSelector:@selector(sheetEnded:returnCode:contextInfo:)
contextInfo:NULL];
[NSThread detachNewThreadSelector:@selector(upgradeFile:) toTarget:self withObject:m_sPath];
}
- (void) findApp:(id)obj
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[m_Searching startAnimation:self];
// Find ITG
CFStringRef key = CFSTR( "ApplicationBundlePath" );
CFPropertyListRef list = CFPreferencesCopyAppValue( key, (CFStringRef)m_sAppID );
NSString *sPath = nil;
if( list && CFGetTypeID(list) != CFDictionaryGetTypeID() )
{
CFRelease( list );
list = NULL;
}
if( list )
{
CFTypeRef value;
CFDictionaryRef dict = (CFDictionaryRef)list;
if( m_vVersions )
{
NSEnumerator *iter = [m_vVersions objectEnumerator];
id version;
while( (version = [iter nextObject]) )
{
if( CFDictionaryGetValueIfPresent(dict, (CFStringRef)version, &value) &&
CFGetTypeID(value) == CFStringGetTypeID() &&
[self checkPath:(NSString *)value] )
{
sPath = (NSString *)CFRetain( value );
[sPath autorelease];
}
}
}
else
{
NSDictionary *dict = (NSDictionary *)list;
NSEnumerator *iter = [dict objectEnumerator];
id path;
while( (path = [iter nextObject]) )
{
if( ![path isKindOfClass:[NSString class]] || ![self checkPath:path] )
continue;
sPath = [[path retain] autorelease];
break;
}
}
CFRelease( list );
}
if( !sPath )
{
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
[ws findApplications];
sPath = [ws fullPathForApplication:m_sName];
if( ![self checkPath:sPath] )
sPath = nil;
}
[self performSelectorOnMainThread:@selector(foundApp:) withObject:sPath waitUntilDone:YES];
[m_Searching stopAnimation:self];
[pool release];
}
- (void) foundApp:(id)obj
{
NSString *path = (NSString *)obj;
if( path ) // found
{
NSString *dir = [path stringByDeletingLastPathComponent];
NSString *app = [[path lastPathComponent] stringByDeletingPathExtension];
[m_sPath release];
m_sPath = [path retain];
[m_Okay setEnabled:YES];
[m_StatusText setStringValue:PATCH_FILE];
[m_SelectionText setStringValue:[NSString stringWithFormat:SELECTION, app, dir]];
}
else
{
m_sPath = @"";
[m_StatusText setStringValue:CHOOSE_FILE];
}
[m_Choose setEnabled:YES];
[m_Choose setNeedsDisplay:YES];
[m_Okay setNeedsDisplay:YES];
[m_StatusText setNeedsDisplay:YES];
[m_SelectionText setNeedsDisplay:YES];
}
- (void) upgradeFile:(id)path
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSBundle *bundle = [NSBundle mainBundle];
NSString *patch = [bundle pathForResource:@"Contents" ofType:@"" inDirectory:@"Patch"];
NSArray *parentFiles = [bundle pathsForResourcesOfType:@"" inDirectory:@"Patch/ParentContents"];
if( patch && parentFiles)
{
[m_ProgressBar startAnimation:self];
if( NeedsPrivs(path) )
m_sError = CopyWithPrivs( patch, path );
else
m_sError = Copy( patch, path );
path = [path stringByDeletingLastPathComponent];
NSEnumerator *enumerator = [parentFiles objectEnumerator];
while( !m_sError && (patch = [enumerator nextObject]) )
{
if( NeedsPrivs(path) )
m_sError = CopyWithPrivs( patch, path );
else
m_sError = Copy( patch, path );
}
[m_ProgressBar stopAnimation:self];
}
else
{
m_sError = PATCH_FILES_MISSING;
}
[NSApp performSelectorOnMainThread:@selector(endSheet:) withObject:m_Panel waitUntilDone:YES];
[pool release];
}
- (void) sheetEnded:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
[m_Panel orderOut:self];
if( m_sError )
{
NSRunCriticalAlertPanel( ERROR, ERROR_MESSAGE, @"OK", nil, nil, m_sError );
return;
}
[m_StatusText setStringValue:PATCH_COMPLETE];
[m_Okay setTitle:QUIT];
[m_Okay setAction:@selector(terminate:)];
[m_Okay setTarget:NSApp];
}
- (BOOL) panel:(id)sender isValidFilename:(NSString *)filename
{
return [filename hasSuffix:@".app"] && [self checkPath:filename];
}
- (BOOL) panel:(id)sender shouldShowFilename:(NSString *)filename
{
if( [filename hasSuffix:@".app"] )
return [self checkPath:filename];
struct stat sb;
if( stat([filename UTF8String], &sb) )
return NO;
return (sb.st_mode & S_IFDIR) == S_IFDIR;
}
- (BOOL) checkPath:(NSString *)path
{
NSBundle *b = [NSBundle bundleWithPath:path];
if( !b )
return NO;
if( ![[b objectForInfoDictionaryKey:@"CFBundleIdentifier"] isEqualToString:m_sAppID] )
return NO;
if( m_vVersions == nil )
return YES;
NSString *bundleVersion = [b objectForInfoDictionaryKey:@"CFBundleVersion"];
NSEnumerator *iter = [m_vVersions objectEnumerator];
NSString *version;
while( (version = [iter nextObject]) )
if( [bundleVersion isEqualToString:version] )
return YES;
return NO;
}
@end
/*
* (c) 2006 Steve Checkoway
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
Binary file not shown.
Binary file not shown.
-23
View File
@@ -1,23 +0,0 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {chooseFile = id; upgrade = id; };
CLASS = Upgrader;
LANGUAGE = ObjC;
OUTLETS = {
"m_Choose" = NSButton;
"m_Okay" = NSButton;
"m_Panel" = NSPanel;
"m_PatchingText" = NSTextField;
"m_ProgressBar" = NSProgressIndicator;
"m_Searching" = NSProgressIndicator;
"m_SelectionText" = NSTextField;
"m_StatusText" = NSTextField;
"m_Window" = NSWindow;
};
SUPERCLASS = NSObject;
}
);
IBVersion = 1;
}
-34
View File
@@ -1,34 +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>IBDocumentLocation</key>
<string>39 98 356 240 0 0 1920 1178 </string>
<key>IBEditorPositions</key>
<dict>
<key>29</key>
<string>207 529 151 44 0 0 1920 1178 </string>
</dict>
<key>IBFramework Version</key>
<string>446.1</string>
<key>IBOpenObjects</key>
<array>
<integer>29</integer>
<integer>217</integer>
</array>
<key>IBSystem Version</key>
<string>8J135</string>
<key>IBUserGuides</key>
<dict>
<key>21</key>
<dict>
<key>guideLocations</key>
<array>
<string>Horizontal:180.000000</string>
</array>
<key>guidesLocked</key>
<false/>
</dict>
</dict>
</dict>
</plist>
Binary file not shown.
-29
View File
@@ -1,29 +0,0 @@
int main( int argc, const char *argv[] )
{
return NSApplicationMain( argc, argv );
}
/*
* (c) 2006 Steve Checkoway
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
-17
View File
@@ -1,17 +0,0 @@
StepMania Xcode Project
=======================
There used to be an Xcode project that lived here. However, it is no longer.
Please use CMake to generate an Xcode project.
SDK Selection
-----------------
Any Mac OS X SDK that is 10.6 or higher will work. However, the 10.6 SDK is needed to offer full screen support at this time.
Please see this [comment](https://github.com/stepmania/stepmania/issues/224#issuecomment-48857894) on how to install 10.6 SDK in Xcode if this feature is necessary for your setup.
Please note that you must restart Xcode after installing the SDK, in case Xcode is running, for it to detect the new SDKs.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
PRODUCT_NAME = sm-ssc
-35
View File
@@ -1,35 +0,0 @@
StepMania Scripts For OS X
=========
These scripts can be used to bundle a .dmg installer of StepMania.
It assumes you have already built a StepMania.app using Xcode and
that your *stepmania* directory structure is intact as you cloned it.
Bundling a Release:
-------------------
To bundle a release version of StepMania open a terminal and cd to
your *stepmania* directory, then run the following commands:
```
cd Xcode/scripts
ruby mkrelease.rb
```
This will create a disk image like *StepMania-v5.0-beta-4-mac.dmg*
in the root of your *stepmania* directory.
Bundling a Nightly:
-------------------
To bundle an intermediate or "nightly" .dmg installer, cd to your
*stepmania* directory, and run the following commands:
```
cd Xcode/scripts
ruby mkrelease.rb nightly
```
This will create a disk image like *StepMania-v5.0-31-8-2014-mac.dmg*
in the root of your *stepmania* directory.
-20
View File
@@ -1,20 +0,0 @@
#!/usr/bin/perl -w
use File::Copy;
$ver = 0;
if( open FH, '<ver.cpp' )
{
<FH> =~ /version_num = (\d+);/ and $ver = $1 + 1;
close FH;
}
chop( $date = `date` );
chop( $time = `time` );
open FH, '>.ver.tmp' or die $!;
print FH <<"EOF";
extern const unsigned long version_num = $ver;
extern const char *const version_date = "$date";
extern const char *const version_time = "$time";
extern char const * const product_version = "5.0-git-UNKNOWN";
EOF
close FH;
move '.ver.tmp', 'ver.cpp';
-92
View File
@@ -1,92 +0,0 @@
# 'fileutils' is used to recursively copy directories
# 'tmpdir' is used to create and work with temporary directories
require 'fileutils'
require 'tmpdir'
# cd to the StepMania 5 src directory
Dir.chdir "../../src"
# check the command line for the presence of the "nightly" option, used
# if we are bundling a nightly build as opposed to an official release
nightly = (true and ARGV[0] == "nightly") or false
# initialize empty strings
family, version, date = ""
# if this is to be a nightly build, store the system date;
# we'll use it below to name the bundle
if nightly
time = time = Time.new
date = "#{time.day}-#{time.month}-#{time.year}"
end
# open ProductInfo.h in read-only mode
File.open("#{Dir.pwd}/ProductInfo.h", "r") do |f|
# read each line, matching for product family
f.each do |line|
if line.match( /^#define\s+PRODUCT_FAMILY_BARE\s+(.*?)\s*$/ )
family = $1
end
end
end
# Determine if the Cmake generated verstub.cpp is available.
File.open("#{Dir.pwd}/verstub.cpp", "r") do |verFile|
verFile.each do |verLine|
if verLine.match( /^extern char const \* const product_version \= "(.*?)"/ )
version = $1
end
end
end
if (version.length == 0)
# open ver.h in read-only mode
File.open("#{Dir.pwd}/ver.h", "r") do |f|
# read each line, matching for product version
f.each do |line|
if line.match( /^#define\s+product_version\s+"(.*?)"/ )
version = $1
end
end
end
end
# replace whitespace with hyphens in the version string
version.gsub!(/\s+/,"-")
# the name of what we are bundling
if nightly
version = version.partition("-")[0]
name = "#{family}-#{version}-#{date}"
else
name = "#{family}-#{version}"
end
# a list of directories we want to include in our .dmg
directories = [ "Announcers", "BackgroundEffects", "BackgroundTransitions",
"BGAnimations", "Characters", "Courses", "Data", "Docs", "Manual",
"NoteSkins", "Scripts", "Songs", "StepMania.app", "Themes" ]
# cd back to the root of the StepMania 5 directory
Dir.chdir ".."
# create a temp directory; this will be automatically deleted when the block completes
Dir.mktmpdir {|temp|
# nest two directories named by family and version within the temp directory
# the outer will become the root of the dmg
# the inner will neatly tidy all the contents together so users can easily drag/drop everything at once
FileUtils.mkdir_p("#{temp}/#{name}/#{name}/")
# loop through the directories array
directories.each do |directory|
# recursively copy each directory into our temp directory
FileUtils.cp_r directory, "#{temp}/#{name}/#{name}/", :verbose => true
end
#construct the shell command that will create the dmg
cmd = "hdiutil create #{Dir.pwd}/#{name}-mac.dmg -srcfolder #{temp}/#{name} -ov"
#execute the command in a subshell
system( cmd )
}
BIN
View File
Binary file not shown.