SF.net SVN: geany-plugins:[696] trunk/wscript

eht16 at users.sourceforge.net eht16 at xxxxx
Tue Jun 9 22:15:27 UTC 2009


Revision: 696
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=696&view=rev
Author:   eht16
Date:     2009-06-09 22:15:27 +0000 (Tue, 09 Jun 2009)

Log Message:
-----------
Add support (configure, build and install) for building on Windows and cross-compiling for Windows.

Modified Paths:
--------------
    trunk/wscript

Modified: trunk/wscript
===================================================================
--- trunk/wscript	2009-06-09 21:20:11 UTC (rev 695)
+++ trunk/wscript	2009-06-09 22:15:27 UTC (rev 696)
@@ -184,7 +184,8 @@
 		# try SVN
 		elif os.path.exists('.svn'):
 			try:
-				stdout = Utils.cmd_output(cmd='svn info --non-interactive', env={'LANG' : 'C'})
+				_env = None if is_win32 else {'LANG' : 'C'}
+				stdout = Utils.cmd_output(cmd='svn info --non-interactive', silent=True, env=_env)
 				lines = stdout.splitlines(True)
 				for line in lines:
 					if line.startswith('Last Changed Rev'):
@@ -208,10 +209,18 @@
 			else:
 				conf.define('LIBDIR', conf.env['PREFIX'] + '/lib', 1)
 
-	conf.check_tool('compiler_cc intltool')
+	conf.check_tool('compiler_cc')
+	# we don't require intltool on Windows (it would require Perl) though it works well
+	try:
+		conf.check_tool('intltool')
+	except:
+		pass
 
-	set_lib_dir()
+	is_win32 = target_is_win32(conf.env)
 
+	if not is_win32:
+		set_lib_dir()
+
 	conf.check_cfg(package='gtk+-2.0', atleast_version='2.6.0', uselib_store='GTK',
 		mandatory=True, args='--cflags --libs')
 	conf.check_cfg(package='geany', atleast_version='0.17', mandatory=True, args='--cflags --libs')
@@ -245,9 +254,30 @@
 						enabled_plugins.remove(p.name)
 
 
+	# Windows specials
+	if is_win32:
+		# geanygdb doesn't compile/run on Windows
+		if 'geanygdb' in enabled_plugins:
+			enabled_plugins.remove('geanygdb')
+
+		prefix = os.path.splitdrive(conf.srcdir)[1]
+		conf.env['PREFIX'] = os.path.join(prefix, '%s-%s' % (APPNAME, VERSION))
+		# hack: we add the parent directory of the first include directory as this is missing in
+		# list returned from pkg-config
+		conf.env['CPPPATH_GTK'].insert(0, os.path.dirname(conf.env['CPPPATH_GTK'][0]))
+		# we don't need -fPIC when compiling on or for Windows
+		if '-fPIC' in conf.env['shlib_CCFLAGS']:
+			conf.env['shlib_CCFLAGS'].remove('-fPIC')
+		conf.env['shlib_PATTERN'] = '%s.dll'
+		conf.env['program_PATTERN'] = '%s.exe'
+	else:
+		conf.env['shlib_PATTERN'] = '%s.so'
+
 	svn_rev = conf_get_svn_rev()
 	conf.define('REVISION', svn_rev, 1)
 
+	conf.env['G_PREFIX'] = conf.env['PREFIX']
+
 	# write a config.h for each plugin
 	for p in plugins:
 		if p.name in enabled_plugins:
@@ -256,8 +286,16 @@
 				conf.define('USE_GTKSPELL', 1);
 			conf.define('VERSION', p.version, 1)
 			conf.define('PACKAGE', p.name, 1)
-			conf.define('PREFIX', conf.env['PREFIX'], 1)
-			conf.define('DOCDIR', '%s/doc/geany-plugins/%s' % (conf.env['DATADIR'], p.name), 1)
+			if is_win32:
+				conf.define('PREFIX', '', 1)
+				conf.define('LIBDIR', '', 1)
+				conf.define('DOCDIR', 'doc/%s' % p.name, 1)
+				conf.define('LOCALEDIR', 'share/locale', 1)
+				# DATADIR is defined in objidl.h, so we remove it from config.h
+				conf.undefine('DATADIR')
+			else:
+				conf.define('PREFIX', conf.env['PREFIX'], 1)
+				conf.define('DOCDIR', '%s/doc/geany-plugins/%s' % (conf.env['DATADIR'], p.name), 1)
 			if os.path.exists(os.path.join(p.name, 'po')):
 				conf.define('GETTEXT_PACKAGE', p.gettext_package, 1)
 				conf.define('ENABLE_NLS', 1)
@@ -265,9 +303,11 @@
 				conf.undefine('GETTEXT_PACKAGE')
 				conf.undefine('ENABLE_NLS')
 			conf.write_config_header(os.path.join(p.name, 'config.h'))
+	if is_win32:
+		conf.env['LOCALEDIR'] = os.path.join(conf.env['G_PREFIX'], 'share/locale')
 
 	Utils.pprint('BLUE', 'Summary:')
-	print_message(conf, 'Install Geany Plugins ' + VERSION + ' in', conf.env['PREFIX'])
+	print_message(conf, 'Install Geany Plugins ' + VERSION + ' in', conf.env['G_PREFIX'])
 	print_message(conf, 'Using GTK version', gtk_version)
 	print_message(conf, 'Using Geany version', geany_version)
 	if svn_rev != '-1':
@@ -304,16 +344,17 @@
 	opt.add_option('--skip-plugins', action='store', default='',
 		help='plugins which should not be built, ignored when --enable-plugins is set, same format as --enable-plugins' % \
 		{ '1' : plugins[0].name, '2' : plugins[1].name }, dest='skip_plugins')
-	opt.add_option('--target-win32', action='store_true', default=False,
-		help='Cross-compile for Win32', dest='target_win32')
 
 
 def build(bld):
+	is_win32 = target_is_win32(bld.env)
+
 	def build_lua(bld, p, libs):
 		lua_sources = [ 'geanylua/glspi_init.c', 'geanylua/glspi_app.c', 'geanylua/glspi_dlg.c',
 						'geanylua/glspi_doc.c', 'geanylua/glspi_kfile.c', 'geanylua/glspi_run.c',
 						'geanylua/glspi_sci.c', 'geanylua/gsdlg_lua.c' ]
 
+		# FIXME this most probably won't work on Windows, untested
 		bld.new_task_gen(
 			features		= 'cc cshlib',
 			source			= lua_sources,
@@ -344,18 +385,18 @@
 		)
 
 	def install_docs(bld, pname, files):
+		ext = '.txt' if is_win32 else ''
 		for file in files:
 			if os.path.exists(os.path.join(p.name, file)):
-				bld.install_files('${DATADIR}/doc/geany-plugins/%s' % pname, '%s/%s' % (pname, file))
+				if is_win32:
+					filename = '%s/%s' % (pname, file)
+					bld.install_as(
+						'${G_PREFIX}/doc/%s%s' % (ucFirst(filename, is_win32), ext),
+						filename)
+				else:
+					bld.install_files(
+						'${DATADIR}/doc/geany-plugins/%s' % pname, '%s/%s' % (pname, file))
 
-
-	# Build the plugins
-	if Options.options.target_win32:
-		bld.env['shlib_CCFLAGS']    = '' # disable default -fPIC flag
-		bld.env['shlib_PATTERN']    = '%s.dll'
-	else:
-		bld.env['shlib_PATTERN']    = '%s.so'
-
 	for p in plugins:
 		if not p.name in bld.env['enabled_plugins']:
 			continue;
@@ -376,15 +417,17 @@
 			includes		= p.includes,
 			target			= p.name,
 			uselib			= libs,
-			install_path	= '${LIBDIR}/geany'
+			install_path	= '${G_PREFIX}/lib' if is_win32 else '${LIBDIR}/geany/'
 		)
 
-		if os.path.exists(os.path.join(p.name, 'po')):
+		if os.path.exists(os.path.join(p.name, 'po')) and bld.env['INTLTOOL']:
 			bld.new_task_gen(
 				features	= 'intltool_po',
 				podir		= os.path.join(p.name, 'po'),
-				appname		= p.gettext_package
+				appname		= p.gettext_package,
+				install_path = '${G_PREFIX}/share/locale' if is_win32 else '${LOCALEDIR}'
 			)
+
 		install_docs(bld, p.name, 'AUTHORS ChangeLog COPYING NEWS README THANKS TODO'.split())
 
 
@@ -451,3 +494,19 @@
 	conf.check_message_1(msg)
 	conf.check_message_2(result, color)
 
+
+def ucFirst(s, is_win32):
+	if is_win32:
+		return s.title()
+	return s
+
+
+def target_is_win32(env):
+	if sys.platform == 'win32':
+		return True
+	if env and 'CC' in env:
+		cc = env['CC']
+		if not isinstance(cc, str):
+			cc = ''.join(cc)
+		return cc.find('mingw') != -1
+	return False


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list