[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/bksys
From:       Thomas Nagy <tnagyemail-mail () yahoo ! fr>
Date:       2005-09-18 20:18:57
Message-ID: 1127074737.722822.28618.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 461836 by tnagy:

Moved more KDE specific code to kde4, improved the dcop processing


 M  +1 -1      generic.py  
 M  +0 -5      kde3.py  
 M  +147 -3    kde4.py  
 M  +3 -0      unix/detect_kde4.py  


--- trunk/KDE/kdelibs/bksys/generic.py #461835:461836
@@ -431,7 +431,7 @@
 	# This avoids recompiling the same files over and over again: 
 	# very handy when working with cvs
 	# TODO: not portable so add a win32 ifdef
-	if os.getuid() != 0: env.CacheDir( env.join(os.getcwd(),'cache','objects') )
+	#if os.getuid() != 0: env.CacheDir( env.join(os.getcwd(),'cache','objects') )
 
 	#  Avoid spreading .sconsign files everywhere - keep this line
 	env.SConsignFile( env['CACHEDIR']+'scons_signatures' )
--- trunk/KDE/kdelibs/bksys/kde3.py #461835:461836
@@ -435,9 +435,6 @@
 		It also makes custom checks against double includes like : ['file.ui', 'file.cpp']
 		(file.cpp is already included because of file.ui) """
 
-		# ITA
-		#print "kdefiles"
-
 		q_object_search = re.compile(r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]')
 		def scan_moc(cppfile):
 			addfile=None
@@ -527,8 +524,6 @@
 				if ofile == file:
 					env.pprint('RED',"WARNING: You have included %s.kcfg and another file of the \
                same prefix"%file)
 					print "Files generated by kconfig_compiler (settings.h, settings.cpp) must not \
                be included"
-		# ITA
-		#print "end kdefiles"
 		return src
 
 
--- trunk/KDE/kdelibs/bksys/kde4.py #461835:461836
@@ -29,6 +29,8 @@
                 ('KDEXDG', ''), ('KDEXDGDIR', ''), ('KDEMENU', ''),
                 ('KDEMIME', ''), ('KDEICONS', ''), ('KDESERV', ''),
                 ('KDESERVTYPES', ''), ('KDEAPPS', ''),
+
+		('DCOPIDL', ''), ('DCOPIDL2CPP', ''),
         )
         opts.Update(env)
 
@@ -53,13 +55,13 @@
 	Builder=SCons.Builder.Builder
 
         ## KIDL file
-        env['BUILDERS']['Kidl']=Builder(action= 'dcopidl $SOURCE > $TARGET || (rm -f \
$TARGET ; false)', +        env['BUILDERS']['Kidl']=Builder(action='$DCOPIDL $SOURCE \
> $TARGET || (rm -f $TARGET ; false)',  suffix='.kidl', src_suffix='.h')
         ## DCOP
-        env['BUILDERS']['Dcop']=Builder(action='dcopidl2cpp --c++-suffix cpp \
--no-signals --no-stub $SOURCE', +        \
env['BUILDERS']['Dcop']=Builder(action='$DCOPIDL2CPP --c++-suffix cpp --no-signals \
--no-stub $SOURCE',  suffix='_skel.cpp', src_suffix='.kidl')
         ## STUB
-        env['BUILDERS']['Stub']=Builder(action= 'dcopidl2cpp --c++-suffix cpp \
--no-signals --no-skel $SOURCE', +        \
env['BUILDERS']['Stub']=Builder(action='$DCOPIDL2CPP --c++-suffix cpp --no-signals \
--no-skel $SOURCE',  suffix='_stub.cpp', src_suffix='.kidl')
 
 	## DOCUMENTATION
@@ -155,6 +157,148 @@
                                 continue
                         lenv.bksys_install(destdir, iconfile, icon_filename)
 
+	ui_ext = [".ui"]
+	kcfg_ext = ['.kcfgc']
+	header_ext = [".h", ".hxx", ".hpp", ".hh"]
+	cpp_ext = [".cpp", ".cxx", ".cc"]
+	skel_ext = [".skel", ".SKEL"]
+	stub_ext = [".stub", ".STUB"]
+
+	def KDEfiles(lenv, target, source):
+		""" Returns a list of files for scons (handles kde tricks like .skel) 
+		It also makes custom checks against double includes like : ['file.ui', 'file.cpp']
+		(file.cpp is already included because of file.ui) """
+
+		q_object_search = re.compile(r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]')
+		def scan_moc(cppfile):
+			addfile=None
+
+			# try to find the header
+			orifile=cppfile.srcnode().name
+			bs=SCons.Util.splitext(orifile)[0]
+
+			h_file=''
+			dir=cppfile.dir
+			for n_h_ext in header_ext:
+				afile=dir.File(bs+n_h_ext)
+				if afile.rexists():
+					#h_ext=n_h_ext
+					h_file=afile
+					break
+			# We have the header corresponding to the cpp file
+			if h_file:
+				h_contents = h_file.get_contents()
+				if q_object_search.search(h_contents):
+					# we know now there is Q_OBJECT macro
+					reg = '\n\s*#include\s*("|<)'+str(bs)+'.moc("|>)'
+					meta_object_search = re.compile(reg)
+					#cpp_contents = open(file_cpp, 'rb').read()
+					cpp_contents=cppfile.get_contents()
+					if meta_object_search.search(cpp_contents):
+						lenv.Moc(h_file)
+					else:
+						lenv.Moccpp(h_file)
+						addfile=bs+'_moc.cpp'
+						print "WARNING: moc.cpp for "+h_file.name+" consider using #include <file.moc> \
instead" +			return addfile
+		src=[]
+		ui_files=[]
+		kcfg_files=[]
+		other_files=[]
+		kidl=[]
+
+		source_=lenv.make_list(source)
+
+		# For each file, check wether it is a dcop file or not, and create the complete \
list of sources +		for file in source_:
+
+			sfile=SCons.Node.FS.default_fs.File(str(file)) # why str(file) ? because ordinal \
not in range issues +			bs  = SCons.Util.splitext(file)[0]
+			ext = SCons.Util.splitext(file)[1]
+			if ext in skel_ext:
+				if not bs in kidl:
+					kidl.append(bs)
+				lenv.Dcop(bs+'.kidl')
+				src.append(bs+'_skel.cpp')
+			elif ext in stub_ext:
+				if not bs in kidl:
+					kidl.append(bs)
+				lenv.Stub(bs+'.kidl')
+				src.append(bs+'_stub.cpp')
+			elif ext == ".moch":
+				lenv.Moccpp(bs+'.h')
+				src.append(bs+'_moc.cpp')
+			elif ext in cpp_ext:
+				src.append(file)
+				if not env.has_key('NOMOCFILE'):
+					ret = scan_moc(sfile)
+					if ret: src.append( sfile.dir.File(ret) )
+			elif ext in ui_ext:
+				lenv.Uic(file)
+				src.append(bs+'.cpp')
+			elif ext in kcfg_ext:
+				name=SCons.Util.splitext(sfile.name)[0]
+				hfile=lenv.Kcfg(file)
+				cppkcfgfile=sfile.dir.File(bs+'.cpp')
+				src.append(bs+'.cpp')
+			else:
+				src.append(file)
+
+		for base in kidl: lenv.Kidl(base+'.h')
+		
+		# Now check against typical newbie errors
+		for file in ui_files:
+			for ofile in other_files:
+				if ofile == file:
+					env.pprint('RED',"WARNING: You have included %s.ui and another file of the same \
prefix"%file) +					print "Files generated by uic (file.h, file.cpp must not be \
included" +		for file in kcfg_files:
+			for ofile in other_files:
+				if ofile == file:
+					env.pprint('RED',"WARNING: You have included %s.kcfg and another file of the \
same prefix"%file) +					print "Files generated by kconfig_compiler (settings.h, \
settings.cpp) must not be included" +		return src
+
+	#valid_targets = "program convenience shlib kioslave staticlib".split()
+	import generic
+	class kobject(generic.genobj):
+		def __init__(self, val, senv=None):
+			if senv: generic.genobj.__init__(self, val, senv)
+			else: generic.genobj.__init__(self, val, env)
+			self.iskdelib=0
+		def it_is_a_kdelib(self): self.iskdelib=1
+		def execute(self):
+			if self.executed: return
+			if self.orenv.has_key('DUMPCONFIG'):
+				self.executed=1
+				self.xml()
+				return
+			if (self.type=='shlib' or self.type=='kioslave'):
+				install_dir = 'KDEMODULE'
+				if self.iskdelib==1: install_dir = 'KDELIB'
+				self.instdir=getInstDirForResType(self.orenv, install_dir)
+			elif self.type=='program':
+				self.instdir=getInstDirForResType(self.orenv, 'KDEBIN')
+				self.perms=0755
+
+			# ITA
+			#print self.source
+			#print "hallo"
+			self.p_localsource=KDEfiles(env, self.joinpath(self.target), \
self.joinpath(self.source)) +			# ITA
+			#print self.p_localsource
+			generic.genobj.execute(self)
+
+		def xml(self):
+			dirprefix = reldir('.')
+			if not dirprefix: dirprefix=self.dirprefix
+			ret='<compile type="%s" dirprefix="%s" target="%s" cxxflags="%s" cflags="%s" \
includes="%s" linkflags="%s" libpaths="%s" libs="%s" vnum="%s" iskdelib="%s" \
libprefix="%s">\n' % (self.type, dirprefix, self.target, self.cxxflags, self.cflags, \
self.includes, self.linkflags, self.libpaths, self.libs, self.vnum, self.iskdelib, \
self.libprefix) +			if self.source:
+				for i in self.orenv.make_list(self.source): ret+='    <source file="%s"/>\n' % i
+			ret+="</compile>\n"
+			self.orenv.add_dump(ret)
+
+
 	from SCons.Script.SConscript import SConsEnvironment
 	SConsEnvironment.KDEicon = KDEicon
 
--- trunk/KDE/kdelibs/bksys/unix/detect_kde4.py #461835:461836
@@ -27,6 +27,9 @@
 	env['KDEDATA']='/usr/share'
 	env['KDEMIME']='/usr/share/mimelnk'
 
+	env['DCOPIDL']='build/dcop/dcopidl/dcopidlold'
+	env['DCOPIDL2CPP']='build/dcop/dcopidl2cpp/dcopidl2cpp'
+
 def detect(env):
 	"""
 	def getpath(varname):


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic