WAF support for OpenBSD

Brad Smith brad at comstyle.com
Sun Jan 19 23:44:09 MST 2014


Looking for any assistance with trying to fix WAF on OpenBSD...


----- Forwarded message from Brad Smith <brad at comstyle.com> -----

Date: Fri, 13 Dec 2013 02:48:43 -0500
From: Brad Smith <brad at comstyle.com>
To: mat at matws.net
Subject: WAF support for OpenBSD
User-Agent: Mutt/1.5.22 (2013-10-16)

Hi Matthieu,

I came across this post while looking through the Samba mailing lists.

http://marc.info/?l=samba-technical&m=137961606432749&w=2

I was working with Thomas to try and fix WAF building shared libraries on OpenBSD
as we ran into issues with WAF not properly building and installing shared libs
when I was trying to update Samba and some of the other componnents like talloc,
tevent, and tdb. As far as I know of all of the issues I had run into have been
fixed upstream with WAF 1.7, but Samba uses WAF 1.5 still. Would you be able to
assist with backporting the functional changes from the diff below which is
against WAF 1.7?


diff -upr ./Tools/ccroot.py /home/brad/waf/waflib/Tools/ccroot.py
--- ./Tools/ccroot.py	Sat May 25 08:55:40 2013
+++ /home/brad/waf/waflib/Tools/ccroot.py	Thu Dec 12 22:16:12 2013
@@ -146,11 +146,14 @@ class link_task(Task.Task):
 				pattern = '%s'
 			folder, name = os.path.split(target)
 
-			if self.__class__.__name__.find('shlib') > 0:
-				if self.env.DEST_BINFMT == 'pe' and getattr(self.generator, 'vnum', None):
+			if self.__class__.__name__.find('shlib') > 0 and getattr(self.generator, 'vnum', None):
+				nums = self.generator.vnum.split('.')
+				if self.env.DEST_BINFMT == 'pe':
 					# include the version in the dll file name,
 					# the import lib file name stays unversionned.
-					name = name + '-' + self.generator.vnum.split('.')[0]
+					name = name + '-' + nums[0]
+				elif self.env.DEST_OS == 'openbsd':
+					pattern = '%s.%s.%s' % (pattern, nums[0], nums[1])
 
 			tmp = folder + os.sep + pattern % name
 			target = self.generator.path.find_or_declare(tmp)
@@ -499,16 +502,23 @@ def apply_vnum(self):
 		self.env.append_value('LINKFLAGS', v.split())
 
 	# the following task is just to enable execution from the build dir :-/
-	self.create_task('vnum', node, [node.parent.find_or_declare(name2), node.parent.find_or_declare(name3)])
 
+	if self.env.DEST_OS != 'openbsd':
+		self.create_task('vnum', node, [node.parent.find_or_declare(name2), node.parent.find_or_declare(name3)])
+
 	if getattr(self, 'install_task', None):
 		self.install_task.hasrun = Task.SKIP_ME
 		bld = self.bld
 		path = self.install_task.dest
-		t1 = bld.install_as(path + os.sep + name3, node, env=self.env, chmod=self.link_task.chmod)
-		t2 = bld.symlink_as(path + os.sep + name2, name3)
-		t3 = bld.symlink_as(path + os.sep + libname, name3)
-		self.vnum_install_task = (t1, t2, t3)
+		if self.env.DEST_OS == 'openbsd':
+			libname = self.link_task.outputs[0].name
+			t1 = bld.install_as('%s%s%s' % (path, os.sep, libname), node, env=self.env, chmod=self.link_task.chmod)
+			self.vnum_install_task = (t1,)
+		else:
+			t1 = bld.install_as(path + os.sep + name3, node, env=self.env, chmod=self.link_task.chmod)
+			t2 = bld.symlink_as(path + os.sep + name2, name3)
+			t3 = bld.symlink_as(path + os.sep + libname, name3)
+			self.vnum_install_task = (t1, t2, t3)
 
 	if '-dynamiclib' in self.env['LINKFLAGS']:
 		# this requires after(propagate_uselib_vars)
diff -upr ./Tools/gcc.py /home/brad/waf/waflib/Tools/gcc.py
--- ./Tools/gcc.py	Sun Apr 28 04:11:17 2013
+++ /home/brad/waf/waflib/Tools/gcc.py	Thu Dec 12 22:16:12 2013
@@ -8,8 +8,6 @@
 gcc/llvm detection.
 """
 
-import os, sys
-from waflib import Configure, Options, Utils
 from waflib.Tools import ccroot, ar
 from waflib.Configure import conf
 
@@ -126,6 +124,10 @@ def gcc_modifier_hpux(conf):
 	v['STLIB_MARKER']        = '-Bstatic'
 	v['CFLAGS_cshlib']       = ['-fPIC','-DPIC']
 	v['cshlib_PATTERN']      = 'lib%s.sl'
+
+ at conf
+def gcc_modifier_openbsd(conf):
+	conf.env.SONAME_ST = []
 
 @conf
 def gcc_modifier_platform(conf):
diff -upr ./Tools/gxx.py /home/brad/waf/waflib/Tools/gxx.py
--- ./Tools/gxx.py	Sun Apr 28 04:11:17 2013
+++ /home/brad/waf/waflib/Tools/gxx.py	Thu Dec 12 22:16:12 2013
@@ -8,8 +8,6 @@
 g++/llvm detection.
 """
 
-import os, sys
-from waflib import Configure, Options, Utils
 from waflib.Tools import ccroot, ar
 from waflib.Configure import conf
 
@@ -127,6 +125,10 @@ def gxx_modifier_hpux(conf):
 	v['STLIB_MARKER']        = '-Bstatic'
 	v['CFLAGS_cxxshlib']     = ['-fPIC','-DPIC']
 	v['cxxshlib_PATTERN']    = 'lib%s.sl'
+
+ at conf
+def gxx_modifier_openbsd(conf):
+	conf.env.SONAME_ST = []
 
 @conf
 def gxx_modifier_platform(conf):

----- End forwarded message -----

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



More information about the samba-technical mailing list