cvsdist 82a5bfa
cvsdist 82a5bfa
Build subversion executables as PIEs. Requires a slight jig to 
6200cd8
ensure that executables in the test suite are *not* built using
cvsdist 82a5bfa
-pie, since that doesn't work when main() is not itself an
cvsdist 82a5bfa
object built with -pie. 
cvsdist 82a5bfa
cbe0f46
--- subversion-1.1.0/build/generator/gen_base.py.pie
cbe0f46
+++ subversion-1.1.0/build/generator/gen_base.py
cbe0f46
@@ -386,6 +386,9 @@
cvsdist 82a5bfa
     self.manpages = options.get('manpages', '')
cvsdist 82a5bfa
     self.testing = options.get('testing')
cvsdist 82a5bfa
 
cvsdist 82a5bfa
+    if self.install == 'test' or self.install == 'fs-test':
cvsdist 82a5bfa
+      self.link_cmd = '$(LINK_TEST)'
cvsdist 82a5bfa
+
cvsdist 82a5bfa
   def add_dependencies(self, graph, cfg, extmap):
cvsdist 82a5bfa
     TargetLinked.add_dependencies(self, graph, cfg, extmap)
cvsdist 82a5bfa
 
cbe0f46
@@ -426,8 +429,11 @@
cvsdist 82a5bfa
     self.msvc_fake = options.get('msvc-fake') == 'yes' # has fake target
cbe0f46
     self.msvc_export = string.split(options.get('msvc-export', ''))
cvsdist 82a5bfa
 
cvsdist 82a5bfa
-    ### hmm. this is Makefile-specific
cvsdist 82a5bfa
-    self.link_cmd = '$(LINK_LIB)'
cvsdist 82a5bfa
+    ### more Makefile-specific stuff:
cvsdist 82a5bfa
+    if self.install == 'test':
cvsdist 82a5bfa
+      self.link_cmd = '$(LINK_TEST_LIB)'
6200cd8
+    elif self.link_cmd == '$(LINK)':
cvsdist 82a5bfa
+      self.link_cmd = '$(LINK_LIB)'
cvsdist 82a5bfa
 
cvsdist 82a5bfa
 class TargetApacheMod(TargetLib):
cvsdist 82a5bfa
 
cbe0f46
--- subversion-1.1.0/Makefile.in.pie
cbe0f46
+++ subversion-1.1.0/Makefile.in
cbe0f46
@@ -140,9 +140,10 @@
cvsdist 82a5bfa
 CPPFLAGS = @CPPFLAGS@ $(EXTRA_CPPFLAGS)
cvsdist 82a5bfa
 LDFLAGS = @LDFLAGS@ $(EXTRA_LDFLAGS)
cvsdist 82a5bfa
 
cvsdist 82a5bfa
-COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) $(INCLUDES)
cvsdist 82a5bfa
+BASE_COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) $(INCLUDES)
c772272
+COMPILE = $(BASE_COMPILE) -fpie
cbe0f46
 COMPILE_CXX = $(CXX) $(CPPFLAGS) $(CFLAGS) $(CXXFLAGS) $(INCLUDES)
cbe0f46
-LT_COMPILE = $(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE)
cvsdist 82a5bfa
+LT_COMPILE = $(LIBTOOL) $(LTFLAGS) --mode=compile $(BASE_COMPILE)
cvsdist 82a5bfa
 
cvsdist 82a5bfa
 # special compilation for files destined for mod_dav_svn
cvsdist 82a5bfa
 COMPILE_APACHE_MOD = $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) $(APACHE_INCLUDES) $(INCLUDES) -o $@ -c
cbe0f46
@@ -160,8 +161,11 @@
cbe0f46
 # special compilation for files destined for SWIG/Java
cbe0f46
 COMPILE_SWIG_JAVA_JAVAC = $(JAVAC) $(JAVAC_FLAGS)
cvsdist 82a5bfa
 
cvsdist 82a5bfa
-LINK = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS)
cvsdist 5b3925e
-LINK_LIB = $(LINK) -rpath $(libdir)
cvsdist 82a5bfa
+BASE_LINK = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS)
cvsdist 82a5bfa
+LINK = $(BASE_LINK) -pie
cvsdist 82a5bfa
+LINK_TEST = $(BASE_LINK) -no-install
cvsdist 5b3925e
+LINK_LIB = $(BASE_LINK) -rpath $(libdir)
cvsdist 82a5bfa
+LINK_TEST_LIB = $(BASE_LINK)
cvsdist 82a5bfa
 
cvsdist 82a5bfa
 # special link rule for mod_dav_svn
cvsdist 82a5bfa
 LINK_APACHE_MOD = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS) -rpath $(APACHE_LIBEXECDIR) -avoid-version -module
6200cd8
--- subversion-1.1.0/build.conf.pie
6200cd8
+++ subversion-1.1.0/build.conf
6200cd8
@@ -347,7 +347,7 @@
6200cd8
 sources = swigutil_py.c
6200cd8
 libs = swig_runtime libsvn_subr libsvn_delta aprutil apriconv apr
6200cd8
 # need SWIG_LDFLAGS to be able to link swig_runtime
6200cd8
-link-cmd = $(LINK) $(SWIG_LDFLAGS) $(SWIG_PY_LIBS)
6200cd8
+link-cmd = $(LINK_LIB) $(SWIG_LDFLAGS) $(SWIG_PY_LIBS)
6200cd8
 install = swig-py-lib
6200cd8
 # need special build rule to include -DSWIGPYTHON
6200cd8
 compile-cmd = $(COMPILE_SWIG_PY)