for Python too. It's a strange mixture of sh, csh and perl, but it works. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15584 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			284 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Tcsh
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			284 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Tcsh
		
	
	
		
			Executable File
		
	
	
	
	
| #! /bin/csh -ef
 | |
| # 
 | |
| # original script by Chris Roberts (The OS X Package Manager)
 | |
| # slightly modified by Frank Vercruesse (mainly fixed quoting issues)
 | |
| 
 | |
| set prog = `/usr/bin/basename $0`
 | |
| set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar]"
 | |
| set noglob
 | |
| 
 | |
| if (-x /usr/bin/mkbom) then
 | |
|     set mkbom=/usr/bin/mkbom
 | |
|     set lsbom=/usr/bin/lsbom
 | |
| else
 | |
|     set mkbom=/usr/etc/mkbom
 | |
|     set lsbom=/usr/etc/lsbom
 | |
| endif
 | |
| 
 | |
| if (-x /usr/bin/awk) then
 | |
|     set awk=/usr/bin/awk
 | |
| else
 | |
|     set awk=/bin/awk
 | |
| endif
 | |
| 
 | |
| set gnutar=/usr/bin/gnutar
 | |
| set tar=/usr/bin/tar
 | |
| set pax=/bin/pax
 | |
| 
 | |
| # gather parameters
 | |
| if ($#argv == 0) then
 | |
|     echo $usage
 | |
|     exit(1)
 | |
| endif
 | |
| 
 | |
| while ( $#argv > 0 )
 | |
|     switch ( "$argv[1]" )
 | |
| 	case -d:
 | |
| 	    if ( $?destDir ) then
 | |
| 		echo ${prog}: dest-dir parameter already set to ${destDir}.
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else if ( $#argv < 2 ) then
 | |
| 		echo ${prog}: -d option requires destination directory.
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else
 | |
| 		set destDir = "$argv[2]"
 | |
| 		shift; shift
 | |
| 		breaksw
 | |
| 	    endif
 | |
| 	case -f:
 | |
| 	    if ( $?rootDir ) then
 | |
| 		echo ${prog}: root-dir parameter already set to ${rootDir}.
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else if ( $#argv < 2 ) then
 | |
| 		echo ${prog}: -f option requires package root directory.
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else
 | |
| 		set rootDir = "$argv[2]"
 | |
| 		set fflag
 | |
| 		shift; shift
 | |
| 		breaksw
 | |
| 	    endif
 | |
| 	case -r:
 | |
| 	    if ( $?resDir ) then
 | |
| 		echo ${prog}: resource-dir parameter already set to ${resDir}.
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else if ( $#argv < 2 ) then
 | |
| 		echo ${prog}: -r option requires package resource directory.
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else
 | |
| 		set resDir = "$argv[2]"
 | |
| 		shift; shift
 | |
| 		breaksw
 | |
| 	    endif
 | |
| 	case -traditional:
 | |
| 	    set usetar
 | |
| 	    unset usegnutar
 | |
| 	    unset usepax
 | |
| 	    shift
 | |
| 	    breaksw
 | |
| 	case -gnutar:
 | |
| 	    set usegnutar
 | |
| 	    unset usepax
 | |
| 	    unset usetar
 | |
| 	    shift
 | |
| 	    breaksw
 | |
| 	case -B:
 | |
| 	    # We got long file names, better use bigtar instead
 | |
| 	    #set archiver = /NextAdmin/Installer.app/Resources/installer_bigtar
 | |
| 	    #echo 2>&1 ${prog}: -B flag is  longer relevant.
 | |
| 	    shift
 | |
| 	    breaksw
 | |
| 	case -*:
 | |
| 	    echo ${prog}: Unknown option: $argv[1]
 | |
| 	    echo $usage
 | |
| 	    exit(1)
 | |
| 	case *.info:
 | |
| 	    if ( $?info ) then
 | |
| 		echo ${prog}: info-file parameter already set to ${info}.
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else
 | |
| 		set info = "$argv[1]"
 | |
| 		shift
 | |
| 		breaksw
 | |
| 	    endif
 | |
| 	case *.tiff:
 | |
| 	    if ( $?tiff ) then
 | |
| 		echo ${prog}: tiff-file parameter already set to ${tiff}.
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else
 | |
| 		set tiff = "$argv[1]"
 | |
| 		shift
 | |
| 		breaksw
 | |
| 	    endif
 | |
| 	default:
 | |
| 	    if ( $?rootDir ) then
 | |
| 		echo ${prog}: unrecognized parameter: $argv[1]
 | |
| 		echo $usage
 | |
| 		exit(1)
 | |
| 	    else
 | |
| 		set rootDir = "$argv[1]"
 | |
| 		shift
 | |
| 		breaksw
 | |
| 	    endif
 | |
|     endsw
 | |
| end
 | |
| 
 | |
| # check for mandatory parameters
 | |
| if ( ! $?rootDir ) then
 | |
|     echo ${prog}: missing root-dir parameter.
 | |
|     echo $usage
 | |
|     exit(1)
 | |
| else if ( ! $?info) then
 | |
|     echo ${prog}: missing info-file parameter.
 | |
|     echo $usage
 | |
|     exit(1)
 | |
| endif
 | |
| 
 | |
| # destDir gets default value if unset on command line
 | |
| if ( $?destDir ) then
 | |
|     /bin/mkdir -p "$destDir"
 | |
| else
 | |
|     set destDir = .
 | |
| endif
 | |
| 
 | |
| # derive the root name for the package from the root name of the info file
 | |
| set root = `/usr/bin/basename $info .info`
 | |
| 
 | |
| # create package directory
 | |
| set pkg = "${destDir}/${root}.pkg"
 | |
| echo Generating Installer package $pkg ...
 | |
| if ( -e "$pkg" ) /bin/rm -rf "$pkg"
 | |
| /bin/mkdir -p -m 755 "$pkg"
 | |
| /bin/mkdir -p -m 755 "$pkg/Contents"
 | |
| /bin/mkdir -p -m 755 "$pkg/Contents/Resources"
 | |
| /bin/mkdir -p -m 755 "$pkg/Contents/Resources/English.lproj/"
 | |
| echo -n "pmkrpkg1" >"$pkg/Contents/PkgInfo"
 | |
| chmod 755 "$pkg/Contents/PkgInfo"
 | |
| # (gnu)tar/pax and compress root directory to package archive
 | |
| echo -n "	creating package archive ... "
 | |
| if ( $?fflag ) then
 | |
|     set pkgTop = "${rootDir:t}"
 | |
|     set parent = "${rootDir:h}"
 | |
|     if ( "$parent" == "$pkgTop" ) set parent = "."
 | |
| else
 | |
|     set parent = "$rootDir"
 | |
|     set pkgTop = .    
 | |
| endif
 | |
| if ( $?usetar ) then
 | |
|     set pkgArchive = "$pkg/Contents/Resources/$root.tar.Z"
 | |
|     (cd "$parent"; $tar -w "$pkgTop") | /usr/bin/tar -f -c > "$pkgArchive"
 | |
| else if ( $?usegnutar ) then
 | |
|     set pkgArchive = "$pkg/Contents/Resources/$root.tar.gz"
 | |
|     (cd "$parent"; $gnutar zcf "$pkgArchive" "$pkgTop")
 | |
| else
 | |
|     set pkgArchive = "$pkg/Contents/Resources/$root.pax.gz"
 | |
|     (cd "$parent"; $pax -w -z -x cpio "$pkgTop") > "$pkgArchive"
 | |
| endif
 | |
| /bin/chmod 755 "$pkgArchive"
 | |
| echo done.
 | |
| 
 | |
| # copy info file to package
 | |
| set pkgInfo = "$pkg/Contents/Resources/English.lproj/$root.info"
 | |
| echo -n "	copying ${info:t} ... "
 | |
| /bin/cp $info "$pkgInfo"
 | |
| /bin/chmod 755 "$pkgInfo"
 | |
| echo done.
 | |
| 
 | |
| # copy tiff file to package
 | |
| if ( $?tiff ) then
 | |
|     set pkgTiff = "$pkg/$root.tiff"
 | |
|     echo -n "	copying ${tiff:t} ... "
 | |
|     /bin/cp $tiff "$pkgTiff"
 | |
|     /bin/chmod 444 "$pkgTiff"
 | |
|     echo done.
 | |
| endif
 | |
| 
 | |
| # copy resources to package
 | |
| if ( $?resDir ) then
 | |
|     echo -n "	copying ${resDir:t} ... "
 | |
| 
 | |
|     # don't want to see push/pop output
 | |
|     pushd "$resDir" > /dev/null
 | |
| 	# get lists of resources. We'll want to change
 | |
| 	# permissions on just these things later.
 | |
|         set directoriesInResDir = `find . -type d`
 | |
|         set filesInResDir = `find . -type f`
 | |
|     popd > /dev/null
 | |
| 
 | |
|     # copy the resource directory contents into the package directory
 | |
|     foreach resFile (`ls "$resDir"`)
 | |
| 	cp -r "$resDir/$resFile" "$pkg/Contents/Resources"
 | |
|     end
 | |
| 
 | |
|     pushd "$pkg/Contents/Resources" > /dev/null
 | |
| 	# Change all directories to +r+x, except the package
 | |
| 	# directory itself
 | |
|         foreach resFileItem ($directoriesInResDir)
 | |
|             if ( "$resFileItem" != "." ) then
 | |
|                 chmod 755 $resFileItem
 | |
|             endif
 | |
|         end
 | |
| 	# change all flat files to read only
 | |
|         foreach resFileItem ($filesInResDir)
 | |
|             if ( "$resFileItem" != "./.DS_Store" ) then
 | |
|             chmod 755 $resFileItem
 | |
| 	    endif
 | |
|         end
 | |
|     popd > /dev/null
 | |
| 
 | |
|     echo done.
 | |
| endif
 | |
| 
 | |
| # generate bom file
 | |
| set pkgBom = "$pkg/Contents/Resources/$root.bom"
 | |
| echo -n "	generating bom file ... "
 | |
| /bin/rm -f "$pkgBom"
 | |
| if ( $?fflag ) then
 | |
|     $mkbom "$parent" "$pkgBom" >& /dev/null
 | |
| else
 | |
|     $mkbom "$rootDir" "$pkgBom" >& /dev/null
 | |
| endif
 | |
| /bin/chmod 444 "$pkgArchive"
 | |
| echo done.
 | |
| 	
 | |
| # generate sizes file
 | |
| set pkgSizes = "$pkg/Contents/Resources/$root.sizes"
 | |
| echo -n "	generating sizes file ... "
 | |
| 
 | |
| # compute number of files in package
 | |
| set numFiles = `$lsbom -s "$pkgBom" | /usr/bin/wc -l`
 | |
| 
 | |
| # compute package size when compressed
 | |
| @ compressedSize = `/usr/bin/du -k -s "$pkg" | $awk '{print $1}'`
 | |
| @ compressedSize += 3		# add 1KB each for sizes, location, status files
 | |
| 
 | |
| @ infoSize = `/bin/ls -s "$pkgInfo" | $awk '{print $1}'`
 | |
| @ bomSize = `/bin/ls -s "$pkgBom" | $awk '{print $1}'`
 | |
| if ( $?tiff ) then
 | |
|     @ tiffSize = `/bin/ls -s "$pkgTiff" | $awk '{print $1}'`
 | |
| else
 | |
|     @ tiffSize = 0
 | |
| endif 
 | |
| 
 | |
| @ installedSize = `/usr/bin/du -k -s "$rootDir" | $awk '{print $1}'`
 | |
| @ installedSize += $infoSize + $bomSize + $tiffSize + 3
 | |
| 
 | |
| # echo size parameters to sizes file
 | |
| echo NumFiles $numFiles             >  "$pkgSizes"
 | |
| echo InstalledSize $installedSize   >> "$pkgSizes"
 | |
| echo CompressedSize $compressedSize >> "$pkgSizes"
 | |
| echo done.
 | |
| echo " ... finished generating $pkg."
 | |
| 
 | |
| exit(0)
 | |
| 
 | |
| # end package
 |