# Routine to "compile" a .py file to a .pyc file.
# This has intimate knowledge of how Python/import.c does it.
# By Sjoerd Mullender (I forced him to write it :-).

import imp
MAGIC = imp.get_magic()

def wr_long(f, x):
	f.write(chr( x        & 0xff))
	f.write(chr((x >> 8)  & 0xff))
	f.write(chr((x >> 16) & 0xff))
	f.write(chr((x >> 24) & 0xff))

def compile(file, cfile = None):
	import os, marshal, __builtin__
	f = open(file)
	codestring = f.read()
	f.close()
	timestamp = long(os.stat(file)[8])
	codeobject = __builtin__.compile(codestring, file, 'exec')
	if not cfile:
		cfile = file + (__debug__ and 'c' or 'o')
	fc = open(cfile, 'wb')
	fc.write(MAGIC)
	wr_long(fc, timestamp)
	marshal.dump(codeobject, fc)
	fc.close()
	if os.name == 'mac':
		import macfs
		macfs.FSSpec(cfile).SetCreatorType('Pyth', 'PYC ')
		macfs.FSSpec(file).SetCreatorType('Pyth', 'TEXT')
