--- a/SConstruct
+++ b/SConstruct
@@ -12,19 +12,8 @@
 	def get(self,name,value=None):
 		return self.ARGUMENTS.get('%s_%s' % (self.prefix, name), self.ARGUMENTS.get(name,value))
 
-# endianess-checker
-def checkEndian():
-    import struct
-    array = struct.pack('cccc', '\x01', '\x02', '\x03', '\x04')
-    i = struct.unpack('i', array)
-    if i == struct.unpack('<i', array):
-        return "little"
-    elif i == struct.unpack('>i', array):
-        return "big"
-    return "unknown"
-
 class DXXCommon:
-	__endian = checkEndian()
+	__endian = sys.byteorder
 	class UserSettings:
 		def __init__(self,ARGUMENTS):
 			# Paths for the Videocore libs/includes on the Raspberry Pi
@@ -57,7 +46,7 @@
 			builddir_suffix = ARGUMENTS.get('builddir_suffix', None)
 			default_builddir = builddir_prefix or ''
 			if builddir_prefix is not None or builddir_suffix is not None:
-				if os.environ.has_key('CC'):
+				if 'CC' in os.environ:
 					default_builddir += '%s-' % os.path.basename(os.environ['CC'])
 				for a in (
 					('debug', 'dbg'),
@@ -131,7 +120,7 @@
 				flags = self.__pkg_config_sdl[cmd]
 			except KeyError as e:
 				if (program.user_settings.verbosebuild != 0):
-					print "%s: reading SDL settings from `%s`" % (program.PROGRAM_NAME, cmd)
+					print("%s: reading SDL settings from `%s`" % (program.PROGRAM_NAME, cmd))
 				self.__pkg_config_sdl[cmd] = env.backtick(cmd)
 				flags = self.__pkg_config_sdl[cmd]
 			env.MergeFlags(flags)
@@ -156,31 +145,31 @@
 		self.env.Append(CPPDEFINES = ['NETWORK'])
 		# Get traditional compiler environment variables
 		for cc in ['CC', 'CXX']:
-			if os.environ.has_key(cc):
+			if cc in os.environ:
 				self.env[cc] = os.environ[cc]
 		for flags in ['CFLAGS', 'CXXFLAGS']:
-			if os.environ.has_key(flags):
+			if flags in os.environ:
 				self.env[flags] += SCons.Util.CLVar(os.environ[flags])
 
 	def check_endian(self):
 		# set endianess
 		if (self.__endian == "big"):
-			print "%s: BigEndian machine detected" % self.PROGRAM_NAME
+			print("%s: BigEndian machine detected" % self.PROGRAM_NAME)
 			self.asm = 0
 			self.env.Append(CPPDEFINES = ['WORDS_BIGENDIAN'])
 		elif (self.__endian == "little"):
-			print "%s: LittleEndian machine detected" % self.PROGRAM_NAME
+			print("%s: LittleEndian machine detected" % self.PROGRAM_NAME)
 
 	def check_platform(self):
 		# windows or *nix?
 		if sys.platform == 'win32':
-			print "%s: compiling on Windows" % self.PROGRAM_NAME
+			print("%s: compiling on Windows" % self.PROGRAM_NAME)
 			platform = self.Win32PlatformSettings
 		elif sys.platform == 'darwin':
-			print "%s: compiling on Mac OS X" % self.PROGRAM_NAME
+			print("%s: compiling on Mac OS X" % self.PROGRAM_NAME)
 			platform = self.DarwinPlatformSettings
 		else:
-			print "%s: compiling on *NIX" % self.PROGRAM_NAME
+			print("%s: compiling on *NIX" % self.PROGRAM_NAME)
 			platform = self.LinuxPlatformSettings
 		self.platform_settings = platform(self.user_settings)
 		# Acquire environment object...
@@ -194,15 +183,15 @@
 		# opengl or software renderer?
 		if (self.user_settings.opengl == 1) or (self.user_settings.opengles == 1):
 			if (self.user_settings.opengles == 1):
-				print "%s: building with OpenGL ES" % self.PROGRAM_NAME
+				print("%s: building with OpenGL ES" % self.PROGRAM_NAME)
 				env.Append(CPPDEFINES = ['OGLES'])
 			else:
-				print "%s: building with OpenGL" % self.PROGRAM_NAME
+				print("%s: building with OpenGL" % self.PROGRAM_NAME)
 			env.Append(CPPDEFINES = ['OGL'])
 
 		# assembler code?
 		if (self.user_settings.asm == 1) and (self.user_settings.opengl == 0):
-			print "%s: including: ASSEMBLER" % self.PROGRAM_NAME
+			print("%s: including: ASSEMBLER" % self.PROGRAM_NAME)
 			env.Replace(AS = 'nasm')
 			env.Append(ASCOM = ' -f ' + str(self.platform_settings.osasmdef) + ' -d' + str(self.platform_settings.osdef) + ' -Itexmap/ ')
 			self.common_sources += asm_sources
@@ -211,12 +200,12 @@
 
 		# SDL_mixer support?
 		if (self.user_settings.sdlmixer == 1):
-			print "%s: including SDL_mixer" % self.PROGRAM_NAME
+			print("%s: including SDL_mixer" % self.PROGRAM_NAME)
 			env.Append(CPPDEFINES = ['USE_SDLMIXER'])
 
 		# debug?
 		if (self.user_settings.debug == 1):
-			print "%s: including: DEBUG" % self.PROGRAM_NAME
+			print("%s: including: DEBUG" % self.PROGRAM_NAME)
 			env.Append(CPPFLAGS = ['-g'])
 		else:
 			env.Append(CPPDEFINES = ['NDEBUG', 'RELEASE'])
@@ -244,7 +233,7 @@
 
 		# Raspberry Pi?
 		if (self.user_settings.raspberrypi == 1):
-			print "using Raspberry Pi vendor libs in %s" % self.user_settings.rpi_vc_path
+			print("using Raspberry Pi vendor libs in %s" % self.user_settings.rpi_vc_path)
 			env.Append(CPPDEFINES = ['RPI', 'WORDS_NEED_ALIGNMENT'])
 			env.Append(CPPPATH = [
 				self.user_settings.rpi_vc_path+'/include',
@@ -317,7 +306,7 @@
 		self.env.Append(CPPDEFINES = [('DXX_VERSION_MAJORi', str(self.VERSION_MAJOR)), ('DXX_VERSION_MINORi', str(self.VERSION_MINOR)), ('DXX_VERSION_MICROi', str(self.VERSION_MICRO))])
 
 	def banner(self):
-		print '\n===== ' + self.PROGRAM_NAME + self.VERSION_STRING + ' =====\n'
+		print('\n===== ' + self.PROGRAM_NAME + self.VERSION_STRING + ' =====\n')
 
 	def process_user_settings(self):
 		DXXCommon.process_user_settings(self)
@@ -330,7 +319,7 @@
 			else:
 				env.Append(FRAMEWORKS = ['OpenGL'])
 		else:
-			print "%s: building with Software Renderer" % self.PROGRAM_NAME
+			print("%s: building with Software Renderer" % self.PROGRAM_NAME)
 			self.common_sources += self.arch_sdl_sources
 
 		# SDL_mixer support?
@@ -587,10 +576,10 @@
 ]
 		DXXProgram.__init__(self)
 
-	sources_use_udp = [os.path.join(srcdir, 'main/net_udp.c')]
+	sources_use_udp = [os.path.join('', 'main/net_udp.c')]
 
 	# SDL_mixer sound implementation
-	arch_sdlmixer = [os.path.join(srcdir, f) for f in [
+	arch_sdlmixer = [os.path.join('', f) for f in [
 'arch/sdl/digi_mixer.c',
 'arch/sdl/digi_mixer_music.c',
 'arch/sdl/jukebox.c'
@@ -598,21 +587,21 @@
 ]
 
 	# for opengl
-	arch_ogl_sources = [os.path.join(srcdir, f) for f in [
+	arch_ogl_sources = [os.path.join('', f) for f in [
 'arch/ogl/gr.c',
 'arch/ogl/ogl.c',
 ]
 ]
 
 	# for non-ogl
-	arch_sdl_sources = [os.path.join(srcdir, f) for f in [
+	arch_sdl_sources = [os.path.join('', f) for f in [
 'arch/sdl/gr.c',
 'texmap/tmapflat.c'
 ]
 ]
 
 	# assembler related
-	asm_sources = [os.path.join(srcdir, f) for f in [
+	asm_sources = [os.path.join('', f) for f in [
 'texmap/tmap_ll.asm',
 'texmap/tmap_flt.asm',
 'texmap/tmapfade.asm',
