site_archiver@lists.apple.com Delivered-To: installer-dev@lists.apple.com /////// SNIP use strict; use POSIX qw(ceil floor); die "$0: Must be run from Xcode" unless $ENV{"BUILT_PRODUCTS_DIR"}; my $version = $REV; $version =~ s/([\d]*:)([\d]+).*/$2/; $version =~ s/([\d]+).*/$1/; # Removes trailing letters die "$0: No Subversion revision found" unless $version; $pointVersion =~ s/[^\d]//g; $pointVersion = ".$pointVersion"; my $base10Version = int( 100 * ( $baseVersion + $pointVersion ) ); # # Compute the build date (days elapsed since 1/1/1900 -- see SSTime.h) # my @currentTime; @currentTime = localtime( time ); my $yearDays = $currentTime[ 7 ]; my $year = $currentTime[ 5 ] - 100; my $DAYS_1900_TO_2000 = 36524; # # Generate the new header string # # # Write out the new header # my $HEADER = "$ENV{SRCROOT}/src/BUILD_NUMBER.h"; my $curFileStr = ""; /////// SNIP # /usr/bin/perl -w # LAST UPDATED: 22MAR06 # Xcode auto-versioning script for Subversion # Replaces BUILD_NUMBER with the subversion rev number in Info.plist use strict; die "$0: Must be run from Xcode" unless $ENV{"BUILT_PRODUCTS_DIR"}; my $version = $REV; $version =~ s/([\d]*:)([\d]+).*/$2/; $version =~ s/([\d]+).*/$1/; # Removes trailing letters die "$0: No Subversion revision found" unless $version; # Read in Info.plist open(FH, "$INFO") or die "$0: $INFO: $!"; my $info = join("", <FH>); close(FH); # Find and replace BUILD_NUMBER with a real value $info =~ s/BUILD_NUMBER/$version/g; # Write out the new plist file open(FH, ">$INFO") or die "$0: $INFO: $!"; print FH $info; close(FH); /////// SNIP On Jan 24, 2007, at 5:00 PM, Walter wrote: Is there a better way to do version numbering that I'm not finding? Does anyone know how the installer actually compares version numbers? Thanks, Walter This email sent to andy@soundspectrum.com _______________________________________________ Do not post admin requests to the list. They will be ignored. Installer-dev mailing list (Installer-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/installer-dev/site_archiver%40lists.a... Here's two perl scripts that may serve as a good starting point for you that we use in Xcode's script run phase. The first is the first run-phase script that writes a a simple C .h file containing a couple #defines, and it gets its info from subversion and the current time stamp. The second script is the last phase the execute and simply does a find/replace for the token BUILD_NUMBER in Info.plist. Credit goes to Daniel Jalkut for help developing these scripts. # /usr/bin/perl -w # Xcode auto-versioning script for Subversion # This script generates BUILD_NUMBER.h based on the subversion rev and the current timestamp. # Last modified: 12OCT06 # Get the current subversion revision number and use it to set the CFBundleVersion value my $REV = `/usr/local/bin/svnversion -n ./`; # Separate the version into the value before the first point, and the value after my ( $baseVersion, $pointVersion ); ( $baseVersion, $pointVersion ) = ( $ENV{APPLICATION_VERSION} =~ /(\d +)([^\d][\d\.]*)/ ); my $BUILD_DATE = $DAYS_1900_TO_2000 + $yearDays + ( 365 * $year + floor( ( $year + 3 ) / 4 ) ); my $newFileStr = "#define BUILD_NUMBER \"$version\"\n#define BUILD_VERSION \"$ENV{APPLICATION_VERSION}\"\n#define BUILD_VERSION_BASE10 $base10Version\n#define BUILD_DATE $BUILD_DATE\n"; # Read in the current BUILD_NUMBER.h so we can see if it's different (below) if ( open(FH, "$HEADER") ) { $curFileStr = join("", <FH>); close(FH); } # Only write a new one if the contents aren't what we want (otherwise, we'll cause the project to rebuilt each time!) if ( $curFileStr ne $newFileStr ) { open(FH, ">$HEADER") or die "$0: $HEADER: $!"; print FH $newFileStr; close(FH); } # Get the current subversion revision number and use it to set the CFBundleVersion value my $REV = `/usr/local/bin/svnversion -n ./`; my $INFO = "$ENV{BUILT_PRODUCTS_DIR}/$ENV{WRAPPER_NAME}/Contents/ Info.plist"; Does anyone else have problems with the Apple version numbering scheme? My software business model works in a different manner than Apple's and I don't find the version numbering sufficient. Each and every build that we make is a release candidate. Every bug fix needs to be built individually. I can't go back and change the version numbers after a build has been verified by QA. This leaves 100 bug fixes before I need to increment the major version number. Since not every bug is truly fixed the first time, the number of bug fixes between major releases is even smaller. Currently we don't worry about it and our current version is 5.13.59, however I've noticed issues with the installer where some components are not properly updated. I'm assuming that the installer is getting confused with attempting to store 13 & 59 as a BCD and then shoveling that value into a byte. _______________________________________________ Do not post admin requests to the list. They will be ignored. Installer-dev mailing list (Installer-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/installer-dev/andy% 40soundspectrum.com This email sent to site_archiver@lists.apple.com