Browse Source

support more archs than appletvos-arm64

Kevin Bradley 9 months ago
parent
commit
ba9d817827

+ 1 - 1
bootstrapTool/Classes/HelperClass.h

@@ -12,7 +12,7 @@
 + (int)runCommand:(NSString *)call environment:(NSDictionary *)env currentPath:(NSString *)currentPath verbose:(BOOL)verbose;
 + (NSString *)validLDIDPath;
 + (int)bumpPackageAtPath:(NSString *)debFile withPrefix:(NSString *)prefix sigChecks:(BOOL)skip;
-+ (int)repackagePackageAtPath:(NSString *)debFile withPrefix:(NSString *)prefix sigChecks:(BOOL)skip;
++ (int)repackagePackageAtPath:(NSString *)debFile withPrefix:(NSString *)prefix sigChecks:(BOOL)skip arch:(NSString *)arch;
 + (int)cleanBootstrapAtPath:(NSString *)bootstrapPath;
 + (int)deletePackage:(NSString *)deletePackage inBootstrap:(NSString *)bootstrapPath;
 + (int)createNewBootstrap:(NSString *)bootstrapPath withPackages:(NSString *)packagesFolder;

+ 5 - 2
bootstrapTool/Classes/HelperClass.m

@@ -169,12 +169,15 @@
     
 }
 
-+ (int)repackagePackageAtPath:(NSString *)debFile withPrefix:(NSString *)prefix sigChecks:(BOOL)skip {
++ (int)repackagePackageAtPath:(NSString *)debFile withPrefix:(NSString *)prefix sigChecks:(BOOL)skip arch:(NSString *)arch {
     DLog(@"\n [INFO] Repackaging file: %@...\n", debFile);
     InputPackage *output = [HelperClass packageForDeb:debFile];
     output.appendedPrefix = prefix;
     output.skipSignatureChecks = skip;
-    [output repackageInCurrentDirectoryWithArch:@"appletvos-arm64"];
+    if (!arch) {
+        arch = @"appletvos-arm64";
+    }
+    [output repackageInCurrentDirectoryWithArch:arch];
     return 0;
 }
 

+ 1 - 0
bootstrapTool/Classes/InputPackage.h

@@ -16,6 +16,7 @@
 @property (readwrite, assign) BOOL skipSignatureChecks;
 @property (readwrite, assign) BOOL forceOverwrite;
 @property (nonatomic, strong) NSString *validLDIDPath;
+@property (nonatomic, strong) NSString *arch; //if repackaging.
 
 
 - (void)bumpVersionInCurrentDirectory;

+ 8 - 2
bootstrapTool/Classes/InputPackage.m

@@ -221,7 +221,7 @@
             
             NSMutableString *controlFile = [[NSMutableString alloc] initWithContentsOfFile:fullPath encoding:NSASCIIStringEncoding error:nil];
             
-            [controlFile replaceOccurrencesOfString:@"iphoneos-arm" withString:@"appletvos-arm64" options:NSLiteralSearch range:NSMakeRange(0, [controlFile length])];
+            //[controlFile replaceOccurrencesOfString:@"iphoneos-arm" withString:@"appletvos-arm64" options:NSLiteralSearch range:NSMakeRange(0, [controlFile length])];
             
             [controlFile appendString:@"Status: install ok installed\n"];
             
@@ -520,7 +520,13 @@
         NSMutableString *controlFile = [[NSMutableString alloc] initWithContentsOfFile:controlPath encoding:NSASCIIStringEncoding error:nil];
         //@"appletvos-arm64"
         //this is hacky but should be fine, only one of the two should exist so only one will get overwritten.
-        [controlFile replaceOccurrencesOfString:@"iphoneos-arm" withString:newArch options:NSLiteralSearch range:NSMakeRange(0, [controlFile length])];
+        
+        NSString *findString = @"iphoneos-arm";
+        if (![controlFile containsString:findString]) {
+            findString = @"appletvos-arm64";
+        }
+        
+        [controlFile replaceOccurrencesOfString:findString withString:newArch options:NSLiteralSearch range:NSMakeRange(0, [controlFile length])];
         [controlFile replaceOccurrencesOfString:@"darwin-arm64" withString:newArch options:NSLiteralSearch range:NSMakeRange(0, [controlFile length])];
         
 #pragma clang diagnostic push

+ 10 - 3
bootstrapTool/main.m

@@ -16,7 +16,7 @@
 #import <sys/utsname.h>
 #import "HelperClass.h"
 
-#define OPTION_FLAGS "o:i:ld:hcrbp:su:yn:"
+#define OPTION_FLAGS "o:i:ld:hcrbp:su:yn:a:"
 
 char *progname;
 char *path;
@@ -35,6 +35,7 @@ static struct option longopts[] = {
     { "unique",                    required_argument,      NULL,   'u' },
     { "yes",                       no_argument,            NULL,   'y' },
     { "new",                       required_argument,      NULL,   'n' },
+    { "arch",                      required_argument,      NULL,   'a' },
     { NULL,                        0,                      NULL,    0  }
 };
 
@@ -49,6 +50,7 @@ void cmd_help(void){
     printf("  -l, --list\t\t\tlist all the packages installed on this bootstrap\n");
     printf("  -c, --clean\t\t\tclean a bad status file from duplicate entries\n");
     printf("  -r, --repackage\t\trepackage to fix bad locations and to change architecture\n");
+    printf("  -a, --arch\t\t\tonly valid for repackage, specify the architecture to use when repackaging\n");
     printf("  -b, --bump\t\t\trepackage and bump by one - number (ie 1.0-1 -> 1.0-2)\n");
     printf("  -s, --skip\t\t\tskip code signature checks when bumping and repackaging\n");
     printf("  -y, --yes\t\t\talways answer yes to prompts to overwrite files\n");
@@ -71,6 +73,7 @@ int main(int argc, char **argv) {
         NSString *deletePackage = nil;
         NSString *prefix = nil;
         NSString *packagesFolder = nil;
+        NSString *arch = nil;
         BOOL listPackage = FALSE;
         BOOL repackage = FALSE;
         BOOL skip = FALSE;
@@ -130,6 +133,11 @@ int main(int argc, char **argv) {
                 case 'u':
                     up = [NSString stringWithUTF8String:optarg];
                     break;
+                    
+                case 'a':
+                    arch = [NSString stringWithUTF8String:optarg];
+                    break;
+                    
                 case 'n':
                     new = TRUE;
                     packagesFolder = [NSString stringWithUTF8String:optarg];
@@ -148,7 +156,6 @@ int main(int argc, char **argv) {
             //yDLog(@"bootstrap path: %@?", bootstrapPath);
             //return 0;
         }
-        
         if (up) {
             NSArray *contents = [FM contentsOfDirectoryAtPath:up error:nil];
             NSString *newFile = [[up lastPathComponent] stringByAppendingPathExtension:@"plist"];
@@ -164,7 +171,7 @@ int main(int argc, char **argv) {
         }
         
         if (repackage == TRUE && debFile) {
-            return [HelperClass repackagePackageAtPath:debFile withPrefix:prefix sigChecks:skip];
+            return [HelperClass repackagePackageAtPath:debFile withPrefix:prefix sigChecks:skip arch:arch];
         }
         
         //DLog(@"folder: %@ project: %@", folder, project);