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