You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/07/21 17:56:01 UTC
svn commit: r1505406 - in /subversion/trunk: build/generator/
build/generator/templates/ subversion/bindings/swig/ruby/libsvn_swig_ruby/
Author: rhuijben
Date: Sun Jul 21 15:56:00 2013
New Revision: 1505406
URL: http://svn.apache.org/r1505406
Log:
In the Windows project file generator: extend the generator and the dependency
framework to allow forcefully including an include file before the actual c
file.
This ugly hack is necessary to allow compiling the 1.9+ Swig Ruby bindings on
Windows without changing the standard swig or ruby headers, as Swig starts
its generated files with a #include <ruby.h> before any other headers :(
This change makes the project generator handle include dirs, lib dirs,
forced headers and libraries in the same way: per configuration.
* build/generator/gen_msvc_dsp.py
(write_project): Remove includes from ezt data.
* build/generator/gen_vcnet_vcproj.py
(write_project): Remove includes from ezt data.
* build/generator/gen_win.py
(get_configs): Add includes and forced headers to the per configuration data.
* build/generator/templates/msvc_dsp.ezt
Update includes reference.
* build/generator/templates/vcnet_vcproj.ezt
Update includes reference. Support forcing an include.
* build/generator/templates/vcnet_vcxproj.ezt
Update includes reference. Support forcing an include.
Remove doubled semicolon.
* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
(swigutil_rb__pre_ruby.h): Add include for dependency tracking.
Fix reference to st.h for Ruby >= 1.9.
* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
(swigutil_rb__pre_ruby.h): Add include for dependency tracking.
Fix reference to regex.h for Ruby >= 1.9.
* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h
New file
Added:
subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h (with props)
Modified:
subversion/trunk/build/generator/gen_msvc_dsp.py
subversion/trunk/build/generator/gen_vcnet_vcproj.py
subversion/trunk/build/generator/gen_win.py
subversion/trunk/build/generator/templates/msvc_dsp.ezt
subversion/trunk/build/generator/templates/vcnet_vcproj.ezt
subversion/trunk/build/generator/templates/vcnet_vcxproj.ezt
subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
Modified: subversion/trunk/build/generator/gen_msvc_dsp.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_msvc_dsp.py?rev=1505406&r1=1505405&r2=1505406&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_msvc_dsp.py (original)
+++ subversion/trunk/build/generator/gen_msvc_dsp.py Sun Jul 21 15:56:00 2013
@@ -82,7 +82,6 @@ class Generator(gen_win.WinGeneratorBase
'rootpath' : self.rootpath,
'platforms' : self.platforms,
'configs' : configs,
- 'includes' : self.get_win_includes(target),
'sources' : sources,
'default_platform' : self.platforms[0],
'default_config' : configs[0].name,
Modified: subversion/trunk/build/generator/gen_vcnet_vcproj.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_vcnet_vcproj.py?rev=1505406&r1=1505405&r2=1505406&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_vcnet_vcproj.py (original)
+++ subversion/trunk/build/generator/gen_vcnet_vcproj.py Sun Jul 21 15:56:00 2013
@@ -100,7 +100,6 @@ class Generator(gen_win.WinGeneratorBase
'platforms' : self.platforms,
'config_type' : config_type,
'configs' : configs,
- 'includes' : self.get_win_includes(target),
'sources' : sources,
'default_platform' : self.platforms[0],
'default_config' : configs[0].name,
Modified: subversion/trunk/build/generator/gen_win.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_win.py?rev=1505406&r1=1505405&r2=1505406&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_win.py (original)
+++ subversion/trunk/build/generator/gen_win.py Sun Jul 21 15:56:00 2013
@@ -323,6 +323,9 @@ class WinGeneratorBase(gen_win_dependenc
defines=self.get_win_defines(target, cfg),
libdirs=self.get_win_lib_dirs(target, cfg),
libs=self.get_win_libs(target, cfg),
+ includes=self.get_win_includes(target, cfg),
+ forced_include_files
+ =self.get_win_forced_includes(target, cfg),
))
return configs
@@ -747,7 +750,7 @@ class WinGeneratorBase(gen_win_dependenc
return fakedefines
- def get_win_includes(self, target):
+ def get_win_includes(self, target, cfg='Release'):
"Return the list of include directories for target"
fakeincludes = [ "subversion/include",
@@ -899,6 +902,24 @@ class WinGeneratorBase(gen_win_dependenc
return list(sources.values())
+ def get_win_forced_includes(self, target, cfg):
+ """Return a list of include files that need to be included before any
+ other header in every c/c++ file"""
+
+ fakeincludes = []
+
+ for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
+ if dep.external_lib:
+ for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
+ external_lib = elib.lower()
+
+ if external_lib in self._libraries:
+ lib = self._libraries[external_lib]
+
+ fakeincludes.extend(lib.forced_includes)
+
+ return gen_base.unique(fakeincludes)
+
def write_with_template(self, fname, tname, data):
fout = StringIO()
Modified: subversion/trunk/build/generator/templates/msvc_dsp.ezt
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/templates/msvc_dsp.ezt?rev=1505406&r1=1505405&r2=1505406&view=diff
==============================================================================
--- subversion/trunk/build/generator/templates/msvc_dsp.ezt (original)
+++ subversion/trunk/build/generator/templates/msvc_dsp.ezt Sun Jul 21 15:56:00 2013
@@ -42,8 +42,8 @@ RSC=rc.exe
# PROP Target_Dir ""
[if-any is_utility][else]LIB32=link.exe -lib
# ADD LIB32 /out:"[rootpath]\[configs.name]\[target.output_dir]\[target.output_name]"
-# ADD CPP /nologo /W3 /FD /Fd"[rootpath]\[configs.name]\[target.output_dir]\[target.output_pdb]" /c [is configs.name "Debug"]/MDd /Gm /Gi /GX /ZI /Od /GZ[else]/MD /GX /O2 /Zi[end][for configs.defines] /D "[configs.defines]"[end][if-any instrument_apr_pools] /D "APR_POOL_DEBUG=[instrument_apr_pools]"[end][for includes] /I "[includes]"[end]
-# ADD RSC /l [if-any is_exe]0x409[else]0x424[end][is configs.name "Debug"] /d "_DEBUG"[end][for includes] /I "[includes]"[end]
+# ADD CPP /nologo /W3 /FD /Fd"[rootpath]\[configs.name]\[target.output_dir]\[target.output_pdb]" /c [is configs.name "Debug"]/MDd /Gm /Gi /GX /ZI /Od /GZ[else]/MD /GX /O2 /Zi[end][for configs.defines] /D "[configs.defines]"[end][if-any instrument_apr_pools] /D "APR_POOL_DEBUG=[instrument_apr_pools]"[end][for configs.includes] /I "[configs.includes]"[end]
+# ADD RSC /l [if-any is_exe]0x409[else]0x424[end][is configs.name "Debug"] /d "_DEBUG"[end][for configs.includes] /I "[configs.includes]"[end]
BSC32=bscmake.exe
LINK32=link.exe
[if-any is_exe is_dll]# ADD LINK32 /nologo[if-any is_exe] /subsystem:console[end][if-any is_dll] /dll[end] /debug /machine:IX86[for configs.libs] [configs.libs][end][for configs.libdirs] /libpath:"[configs.libdirs]"[end] /out:"[rootpath]\[configs.name]\[target.output_dir]\[target.output_name]"[if-any instrument_purify_quantify] /fixed:no[end]
Modified: subversion/trunk/build/generator/templates/vcnet_vcproj.ezt
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/templates/vcnet_vcproj.ezt?rev=1505406&r1=1505405&r2=1505406&view=diff
==============================================================================
--- subversion/trunk/build/generator/templates/vcnet_vcproj.ezt (original)
+++ subversion/trunk/build/generator/templates/vcnet_vcproj.ezt Sun Jul 21 15:56:00 2013
@@ -45,7 +45,7 @@
EnableIntrinsicFunctions="TRUE"
FavorSizeOrSpeed="1"
OmitFramePointers="TRUE"
-[end] AdditionalIncludeDirectories="..\..\..\[configs.name];[for includes][includes][if-index includes last][else];[end][end]"
+[end] AdditionalIncludeDirectories="..\..\..\[configs.name];[for configs.includes][configs.includes][if-index configs.includes last][else];[end][end]"
PreprocessorDefinitions="[if-any instrument_apr_pools]APR_POOL_DEBUG=[instrument_apr_pools];[end][is platforms "x64"]WIN64;[end][for configs.defines][configs.defines][if-index configs.defines last][else];[end][end];_CRT_SECURE_NO_WARNINGS"
[is configs.name "Debug"] MinimalRebuild="TRUE"
RuntimeLibrary="3"
@@ -62,8 +62,9 @@
/we4002 /we4003 /we4013 /we4020 /we4022 /we4024 /we4028 /we4029 /we4030 /we4031 /we4033 /we4047 /we4089 /we4113 /we4115 /we4204 /we4715"
DebugInformationFormat="3"
ProgramDataBaseFileName="$(IntDir)\[target.output_pdb]"
- CompileAsManaged="0"
- CompileAs="0"[if-any is_exe][is configs.name "Release"]
+ [if-any configs.forced_include_files]ForcedIncludeFiles="[for configs.forced_include_files][configs.forced_include_files][if-index configs.forced_include_files last][else];[end][end]"
+ [end]CompileAsManaged="0"
+ CompileAs="0"[if-any configs.forced_include_file]qq"[if-any is_exe][is configs.name "Release"]
OptimizeForWindowsApplication="TRUE"[end][end]/>
<Tool
Name="VCCustomBuildTool"/>
@@ -114,7 +115,7 @@
Name="[configs.name]|[platforms]">
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="[for includes][includes][if-index includes last][else];[end][end]"
+ AdditionalIncludeDirectories="[for configs.includes][configs.includes][if-index configs.includes last][else];[end][end]"
PreprocessorDefinitions="SVN_FILE_NAME=[target.output_name];SVN_FILE_DESCRIPTION=[target.desc];[is configs.name "Debug"]_DEBUG[else]NDEBUG[end]"/>
</FileConfiguration>[end][end]
</File>[end]
Modified: subversion/trunk/build/generator/templates/vcnet_vcxproj.ezt
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/templates/vcnet_vcxproj.ezt?rev=1505406&r1=1505405&r2=1505406&view=diff
==============================================================================
--- subversion/trunk/build/generator/templates/vcnet_vcxproj.ezt (original)
+++ subversion/trunk/build/generator/templates/vcnet_vcxproj.ezt Sun Jul 21 15:56:00 2013
@@ -57,7 +57,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<StringPooling>true</StringPooling>
-[end] <AdditionalIncludeDirectories>$(SolutionDir)[configs.name];[for includes][includes];[end];%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+[end] <AdditionalIncludeDirectories>$(SolutionDir)[configs.name];[for configs.includes][configs.includes];[end]%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>[if-any instrument_apr_pools]APR_POOL_DEBUG=[instrument_apr_pools];[end][is platforms "x64"]WIN64;[end][for configs.defines][configs.defines];[end]%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
@@ -65,7 +65,8 @@
<ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
<DisableSpecificWarnings>4100;4127;4206;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<TreatSpecificWarningsAsErrors>4002;4003;4013;4020;4022;4024;4028;4029;4030;4031;4033;4047;4089;4113;4115;4204;4715;%(TreatSpecificWarningsAsErrors)</TreatSpecificWarningsAsErrors>
- </ClCompile>
+[if-any configs.forced_include_files] <ForcedIncludeFiles>[for configs.forced_include_files][configs.forced_include_files];[end]%(ForcedIncludeFiles)</ForcedIncludeFiles>
+[end] </ClCompile>
[is config_type "Application"] <Link>
<AdditionalDependencies>[for configs.libs][configs.libs];[end]%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>[for configs.libdirs][configs.libdirs];[end]%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -79,8 +80,8 @@
<AdditionalDependencies>[for configs.libs][configs.libs];[end]%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>[for configs.libdirs][configs.libdirs];[end]%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
-[is configs.name "Debug"] <IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
-[end][if-any def_file] <ModuleDefinitionFile>[def_file]</ModuleDefinitionFile>
+ <IgnoreSpecificDefaultLibraries>[is configs.name "Debug"]msvcrt.lib[end][is configs.name "Release"]msvcrtd.lib[end]</IgnoreSpecificDefaultLibraries>
+[if-any def_file] <ModuleDefinitionFile>[def_file]</ModuleDefinitionFile>
[end] </Link>
[else][is config_type "StaticLibrary"] <Lib>
<TargetMachine>[is platforms "X64"]MachineX64[else]MachineX86[end]</TargetMachine>
@@ -89,7 +90,7 @@
[end][end][end] </ItemDefinitionGroup>
[end][end][if-any target.desc] <ItemGroup>
<ResourceCompile Include="..\svn.rc">
-[for configs][for platforms] <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">[for includes][includes];[end];%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+[for configs][for platforms] <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">[for configs.includes][configs.includes];[end]%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='[configs.name]|[platforms]'">SVN_FILE_NAME=[target.output_name];SVN_FILE_DESCRIPTION=[target.desc];[is configs.name "Debug"]_DEBUG[else]NDEBUG[end];%(PreprocessorDefinitions)</PreprocessorDefinitions>
[end][end] </ResourceCompile>
</ItemGroup>
Modified: subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c?rev=1505406&r1=1505405&r2=1505406&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c (original)
+++ subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c Sun Jul 21 15:56:00 2013
@@ -23,9 +23,16 @@
/* Tell swigutil_rb.h that we're inside the implementation */
#define SVN_SWIG_SWIGUTIL_RB_C
+/* Windows hack: Allow overriding some <ruby.h> defaults */
+#include "swigutil_rb__pre_ruby.h"
#include "swig_ruby_external_runtime.swg"
#include "swigutil_rb.h"
+
+#ifdef HAVE_RUBY_ST_H
+#include <ruby/st.h>
+#else
#include <st.h>
+#endif
#undef PACKAGE_BUGREPORT
#undef PACKAGE_NAME
Modified: subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h?rev=1505406&r1=1505405&r2=1505406&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h (original)
+++ subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h Sun Jul 21 15:56:00 2013
@@ -22,8 +22,14 @@
#ifndef SVN_SWIG_SWIGUTIL_RB_H
#define SVN_SWIG_SWIGUTIL_RB_H
+/* Windows hack: Allow overriding some <ruby.h> defaults */
+#include "swigutil_rb__pre_ruby.h"
#include <ruby.h>
+#ifdef HAVE_RUBY_REGEX_H
+#include <ruby/regex.h>
+#else
#include <regex.h>
+#endif
#if SIZEOF_VOIDP == SIZEOF_LONG
# define PTR2NUM(x) (ULONG2NUM((unsigned long)(x)))
Added: subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h?rev=1505406&view=auto
==============================================================================
--- subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h (added)
+++ subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h Sun Jul 21 15:56:00 2013
@@ -0,0 +1,78 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#ifndef SVN_SWIG_SWIGUTIL_RB__PRE_RUBY_H
+#define SVN_SWIG_SWIGUTIL_RB__PRE_RUBY_H
+
+#if defined(SVN_SWIG_RUBY__CUSTOM_RUBY_CONFIG) && defined(_MSC_VER)
+/* The standard install of Ruby on Windows 1.9 expects to be build with MINGW,
+ a gcc compatible toolchain. Since 1.8 they removed much of the compatibility
+ with Visual C++, but we can't build with MingW as that would break APR
+ binary compatibility.
+ */
+
+#include <ruby/config.h>
+#ifdef _MSC_VER
+#endif
+
+#undef NORETURN
+#undef DEPRECATED
+#undef FUNC_STDCALL
+#undef FUNC_CDECL
+#undef FUNC_FASTCALL
+#undef RUBY_ALIAS_FUNCTION_TYPE
+#undef RUBY_ALIAS_FUNCTION_VOID
+#undef HAVE_GCC_ATOMIC_BUILTINS
+#undef RUBY_FUNC_EXPORTED
+#undef RUBY_FUNC_EXPORTED
+#undef RUBY_EXTERN
+
+#define NORETURN(x) __declspec(noreturn) x
+#define RUBY_EXTERN extern __declspec(dllimport)
+
+/* Yuck. But this makes ruby happy */
+#undef pid_t
+#undef uid_t
+#undef gid_t
+typedef int pid_t;
+typedef int uid_t;
+typedef int gid_t;
+
+#if !defined(__cplusplus) && !defined(inline)
+#define inline __inline
+#endif
+typedef long ssize_t;
+
+/* Don't define iovec when including APR */
+#define APR_IOVEC_DEFINED
+
+/* Undefine headers that aren't available in Visual C++, but config.h says
+ are available. */
+#undef HAVE_UNISTD_H
+
+/* Visual C++ >= 2013 has <inttypes.h> */
+#if _MSC_VER < 1800
+#undef HAVE_INTTYPES_H
+#endif
+
+#endif /* defined(SVN_SWIG_RUBY__CUSTOM_RUBY_CONFIG) && defined(_MSC_VER) */
+
+#endif /* SVN_SWIG_SWIGUTIL_RB__PRE_RUBY_H */
Propchange: subversion/trunk/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h
------------------------------------------------------------------------------
svn:eol-style = native