From ebd7850fa359cd824730384a6522d5c897ba0857 Mon Sep 17 00:00:00 2001
From: Brad Barber <bradb@shore.net>
Date: Sun, 27 Mar 2011 23:21:42 -0400
Subject: [PATCH] Fix so files for libqhull and libqhull-p

Fix shadowed variable 'facets'
Fix gitignore for sln/vcproj
---
 .gitignore                |  4 ++++
 Makefile                  | 24 ++++++++++++++++--------
 src/Changes.txt           |  2 +-
 src/qhull-all.pro         |  4 +++-
 src/user_eg3/user_eg3.cpp |  6 +++---
 5 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/.gitignore b/.gitignore
index 893d27e..2b68dfc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,12 +20,14 @@ r?
 bin/*
 lib/*
 tmp/*
+build/*
 *.a
 *.dll
 *.lib
 *.exe
 *.o
 *.md5sum
+src/road/RoadTest.h.cpp
 
 # Out-of-date directories
 config/*
@@ -44,6 +46,8 @@ working/*/*
 *.suo
 *.user
 *.ilk
+!build/*.sln
+!build/*/*.vcproj
 
 # CVS files
 CVS/*
diff --git a/Makefile b/Makefile
index 13370a1..387ba27 100644
--- a/Makefile
+++ b/Makefile
@@ -74,12 +74,13 @@ PRINTC = enscript -2r
 #   -fno-strict-aliasing not needed for gcc 4.4+ (segfault in qset.c)
 #for CXX_OPTS1, libqhullcpp must be before libqhull
 CC        = gcc
-CC_OPTS1  = -O2 -ansi -fno-strict-aliasing -Isrc/libqhull $(CC_WARNINGS)
+CC_OPTS1  = -O2 -fPIC -ansi -fno-strict-aliasing -Isrc/libqhull $(CC_WARNINGS)
 CXX       = g++
 CXX_OPTS1 = -O2 -Dqh_QHpointer -Isrc/ -Isrc/libqhullcpp -Isrc/libqhull $(CXX_WARNINGS)
-SO	  = so  # Extension for shared libraries
+CC_OPTS3  = 
+SO  = so.5.1
 # On MinGW, 
-#   SO= dll  # make SO=dll
+#   SO = 5.1.dll
 #   CC_OPTS3= -Wl,-s -Wl,--out-implib,bin/libqhull.a -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
 
 # for Sun's cc compiler, -fast or O2 for optimization, -g for debugging, -Xc for ANSI
@@ -114,9 +115,12 @@ CXX_WARNINGS = -Wall -Wcast-qual -Wextra -Wwrite-strings -Wno-sign-conversion -W
 
 # Default targets for make
      
-all: bin/rbox bin/qconvex bin/qdelaunay bin/qhalf bin/qvoronoi bin/qhull qtest \
-     bin/user_eg bin/user_eg2 bin/user_eg3 bin/qhull-p.$(SO) qhull-prompt
+all: bin-lib bin/rbox bin/qconvex bin/qdelaunay bin/qhalf bin/qvoronoi bin/qhull qtest \
+     bin/user_eg bin/user_eg3 bin/user_eg2 bin/qhull-p.$(SO) qhull-prompt
 
+bin-lib:
+	mkdir -p bin lib
+     
 # LIBQHULL_OBJS ordered by frequency of execution with small files at end.  Better locality.
 
 L=    src/libqhull
@@ -405,6 +409,7 @@ clean:
 	rm -f src/libqhullstatic/*.o src/libqhullstaticp/*.o src/qconvex/*.o
 	rm -f src/qdelaunay/*.o src/qhalf/*.o src/qvoronoi/*.o src/qhull/*.o src/rbox/*.o
 	rm -f src/road/*.o src/user_eg/*.o src/user_eg2/*.o src/user_eg3/*.o
+	rm -f src/road/RoadTest.h.cpp
 
 cleanall: clean
 	rm -f bin/qconvex bin/qdelaunay bin/qhalf bin/qvoronoi bin/qhull bin/*.exe
@@ -452,11 +457,13 @@ lib/libqhullstatic-p.a: $(LIBQHULLP_OBJS)
 	ar -rs $@ $^
 	#ranlib $@
 
-bin/qhull.$(SO): $(LIBQHULL_OBJS)
+bin/libqhull.$(SO): $(LIBQHULL_OBJS)
 	$(CC) -shared -o $@ $(CC_OPTS2) $^
+	ln $@ bin/libqhull.so
 
-bin/qhull-p.$(SO): $(LIBQHULLP_OBJS)
+bin/libqhull-p.$(SO): $(LIBQHULLP_OBJS)
 	$(CC) -shared -o $@ $(CC_OPTS2) $^
+	ln $@ bin/libqhull-p.so
 
 lib/libqhullcpp.a: $(LIBQHULLCPP_OBJS)
 	ar -rs $@ $^
@@ -485,7 +492,8 @@ bin/rbox: src/rbox/rbox.o lib/libqhullstatic.a
 bin/user_eg: src/user_eg/user_eg.o lib/libqhullstatic.a 
 	$(CC) -o $@ $< $(CC_OPTS2) -Llib -lqhullstatic -lm
 
-bin/user_eg2: src/user_eg2/user_eg2.o bin/qhull.$(SO)
+bin/user_eg2: src/user_eg2/user_eg2.o bin/libqhull.$(SO)
+	echo -e '\n== If user_eg2 fails to link, switch to -lqhullstatic.\n== On MinGW/Cygwin, use "make SO=dll"'
 	$(CC) -o $@ $< $(CC_OPTS2) -Lbin -lqhull -lm
 
 bin/user_eg3: src/user_eg3/user_eg3.o lib/libqhullstatic-p.a lib/libqhullcpp.a
diff --git a/src/Changes.txt b/src/Changes.txt
index 4063554..412918b 100644
--- a/src/Changes.txt
+++ b/src/Changes.txt
@@ -61,7 +61,7 @@ To do
 gitorious.org/qhull 2011/03/27
  - Fixed QhullFacet::PrintRidges to check hasNextRidge3d()
  - Cleaned up project files
- - Fixed Makefile for shared libraries
+ - Fixed Makefile for shared libraries, but does not work on all platforms
  - Moved libqhull to libqhullstatic, as done in CMakeLists
  - Made libqhull a shared library
    The msvc build does not generate a valid dll
diff --git a/src/qhull-all.pro b/src/qhull-all.pro
index 8a6e29c..e132936 100644
--- a/src/qhull-all.pro
+++ b/src/qhull-all.pro
@@ -24,12 +24,14 @@ SUBDIRS += qhalf
 SUBDIRS += qvoronoi
 SUBDIRS += rbox
 SUBDIRS += user_eg         #user program linked to libqhullstatic
-SUBDIRS += user_eg2        #user program linked to libqhull
 
 SUBDIRS += libqhullcpp     #static library for C++ interface to libqhullstaticp
 SUBDIRS += user_eg3        #user program with libqhullcpp and libqhullstaticp
 SUBDIRS += qhulltest       #test program with Qt, libqhullcpp, and libqhullstaticp
 
+# user_eg2 does not link in DevStudio 2005 -lqhull not found
+SUBDIRS += user_eg2        #user program linked to libqhull
+
 OTHER_FILES += CMakeLists.txt
 OTHER_FILES += Make-config.sh
 OTHER_FILES += ../Announce.txt
diff --git a/src/user_eg3/user_eg3.cpp b/src/user_eg3/user_eg3.cpp
index 77ea9d3..9698b04 100644
--- a/src/user_eg3/user_eg3.cpp
+++ b/src/user_eg3/user_eg3.cpp
@@ -65,7 +65,7 @@ int main(int argc, char **argv) {
 
 int user_eg3(int argc, char **argv)
 {
-    bool facets= false;
+    bool printFacets= false;
     if(strcmp(argv[1], "eg-100")==0){
         RboxPoints rbox;
         rbox.appendPoints("100");
@@ -98,7 +98,7 @@ int user_eg3(int argc, char **argv)
                 qhull.setOutputStream(&cout);
             }
         }else if(strcmp(argv[i], "facets")==0){
-            facets= true;
+            printFacets= true;
         }else if(readingRbox){
             readingRbox++;
             cerr << "rbox " << argv[i] << endl;
@@ -146,7 +146,7 @@ int user_eg3(int argc, char **argv)
     if(qhull.useOutputStream){
         return 0;
     }
-    if(facets){
+    if(printFacets){
         QhullFacetList facets= qhull.facetList();
         cout << "\nFacets created by Qhull::runQhull()\n" << facets;
     }
-- 
GitLab