git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16803 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| #
 | |
| # make disk image from folder
 | |
| #
 | |
| # usage: makedmg src dst name
 | |
| #
 | |
| # (C)opyright 2002 Frank Vercruesse
 | |
| 
 | |
| 
 | |
| $hdiUtilExec = "/usr/bin/hdiutil";
 | |
| $hdiDrvExec = "/usr/bin/hdid";
 | |
| $newfsExec = "/sbin/newfs_hfs";
 | |
| $duExec = "/usr/bin/du";
 | |
| $dittoExec = "/usr/bin/ditto";
 | |
| 
 | |
| if ( $#ARGV != 2 ) {
 | |
| 	die "Wrong number of arguments.\nUsage: makedmg src dst name\n";
 | |
| }
 | |
| 
 | |
| &make_dmg( $ARGV[0], $ARGV[1], $ARGV[2]);
 | |
| 
 | |
| 
 | |
| sub make_dmg
 | |
| {
 | |
| 	my $src = $_[0];
 | |
| 	my $dst = $_[1];
 | |
| 	my $name = $_[2];
 | |
| 
 | |
| 	# check dirs
 | |
| 	if( not -d $dst && -d $src ) {
 | |
| 		die "src and dst must be directories\n";
 | |
| 	}
 | |
| 
 | |
| 	# calc disk image size
 | |
| 	if( not open( MYPIPE, "$duExec -sk \"${src}\" |") ) {
 | |
| 		die "couldn't open pipe\n";
 | |
| 	}
 | |
| 	(my $dmgsize) = split( /\s+/, <MYPIPE>);
 | |
| 	close( MYPIPE);
 | |
| 	$dmgsize /= 1024;
 | |
| 	$dmgsize = int($dmgsize + 4);
 | |
| 	if( $dmgsize < 5 ) {
 | |
| 		$dmgsize = 5
 | |
| 	}
 | |
| 
 | |
| 	# create disk image
 | |
| 	system "cd \"$dst\"; $hdiUtilExec create -megabytes $dmgsize -ov \"_${name}\"";
 | |
| 	if( $? ) { die "couldn't create disk image\n"; }
 | |
| 
 | |
| 	# format disk image
 | |
| 	if( not open( MYPIPE, "cd \"$dst\"; $hdiDrvExec -nomount \"_${name}.dmg\" |") ) {
 | |
| 		die "couldn't open pipe\n";
 | |
| 	}
 | |
| 	(my $dev) = split( /\t/, <MYPIPE>);
 | |
| 	$dev =~ s/^(.*\S)\s*$/$1/;
 | |
| 	my( $part, $raw, $pname);
 | |
| 	while( <MYPIPE> ) {
 | |
| 		($part,$pname) = split /\t/;
 | |
| 		if( $pname =~ m/^Apple_HFS/ ) {
 | |
| 			$part =~ s/^\s*(.*\S)\s*$/$1/;
 | |
| 			$raw = $part;
 | |
| 			$raw =~ s/^(\/dev\/)(.+)/$1r$2/;
 | |
| 			last;
 | |
| 		}
 | |
| 	}
 | |
| 	close( MYPIPE);
 | |
| 	system "cd \"$dst\" ; $newfsExec -v \"$name\" $raw";
 | |
| 	if( $? ) { system "$hdiUtilExec eject $dev"; die "couldn't format disk image\n"; }
 | |
| 	system "$hdiUtilExec eject $dev";
 | |
| 	if( $? ) { die "couldn't eject disk image\n"; }
 | |
| 
 | |
| 	# copy files
 | |
| 	if( not open( MYPIPE, "cd \"$dst\"; $hdiDrvExec \"_${name}.dmg\" |") ) {
 | |
| 		die "couldn't open pipe\n";
 | |
| 	}
 | |
| 	($dev) = split( /\t/, <MYPIPE>);
 | |
| 	$dev =~ s/^(.*\S)\s*$/$1/;
 | |
| 	my $vname;
 | |
| 	while( <MYPIPE> ) {
 | |
| 		($part,$pname,$vname) = split /\t/;
 | |
| 		if( $pname =~ m/^Apple_HFS/ ) {
 | |
| 			$vname =~ s/^(.*\S)\s*$/$1/;
 | |
| 			last;
 | |
| 		}
 | |
| 	}
 | |
| 	close( MYPIPE);
 | |
| 	system "$dittoExec \"${src}\" \"${vname}\"";
 | |
| 	if( $? ) { system "$hdiUtilExec eject $dev"; die "couldn't copy files\n"; }
 | |
| 	system "$hdiUtilExec eject $dev";
 | |
| 	if( $? ) { die "couldn't eject disk image\n"; }
 | |
| 
 | |
| 	# convert disk image
 | |
| 	system "cd \"$dst\"; $hdiUtilExec convert \"_${name}.dmg\" -format UDCO -o \"${name}\"";
 | |
| 	if( $? ) { die "couldn't convert disk image\n"; }
 | |
| }
 |