--- src/Makefile.orig	2012-08-08 21:21:56 UTC
+++ src/Makefile
@@ -8,12 +8,13 @@
 #the c compiler, that will generate options which are specific to the
 #compilers, optimization options depending on the chip, etc
 
+# + Patches borrowed from SageMath.
 
 # Comment out the following line to remove the use of pari's
 # elliptic curve routines. Doing so disables the -e option.
 # g++ with -DINCLUDE_PARI sends a #define INCLUDE_PARI to the preprocessor.
 
-#PARI_DEFINE = -DINCLUDE_PARI
+PARI_DEFINE = -DINCLUDE_PARI
 #PREPROCESSOR_DEFINE = -DUSE_LONG_DOUBLE
 
 #OPENMP_FLAG = -fopenmp
@@ -29,11 +30,21 @@ endif
 
 OS_NAME := $(shell uname)
 
-CC = g++
+#CC = g++
 #cc = /home/mrubinst/local/bin/gcc
 #CC = /home/mrubinst/local/bin/g++
 #LD = /home/mrubinst/local/bin/g++
 
+ifneq (,$(findstring CYGWIN,$(OS_NAME)))
+  OS_NAME := CYGWIN
+endif
+
+# Note: I've also changed various rules to use $CXX instead of $CC,
+# since we mostly compile C++, not C, and $CC is by convention
+# used for the *C* compiler.
+#CC ?= gcc
+#CXX ?= g++
+
 #CC = /Users/michaelrubinstein/math/L/packages/gcc4.3/usr/local/bin/g++
 #EXTRA= -pg
 #EXTRA = -ftree-vectorize -ftree-vectorizer-verbose=5 -funroll-loops
@@ -58,59 +69,27 @@ ifeq ($(G5),TRUE)
    #MACHINE_SPECIFIC_FLAGS = -mpowerpc -mpowerpc64 -m64
 endif
 
-CCFLAGS =  -Wa,-W -O3 $(OPENMP_FLAG) -Wno-deprecated $(PREPROCESSOR_DEFINE) $(MACHINE_SPECIFIC_FLAGS) $(EXTRA)
-#CCFLAGS =  -Wa,-W -O3 $(OPENMP_FLAG)  $(PREPROCESSOR_DEFINE) $(MACHINE_SPECIFIC_FLAGS) $(EXTRA)
-#CCFLAGS =  -Wa,-W -O2 -fno-exceptions -Wno-deprecated $(PREPROCESSOR_DEFINE) $(MACHINE_SPECIFIC_FLAGS) $(EXTRA)
+CXXFLAGS := $(OPENMP_FLAG) $(PREPROCESSOR_DEFINE) $(MACHINE_SPECIFIC_FLAGS) $(EXTRA) $(CXXFLAGS)
 
 #warning- O2 doesn't help with -DUSE_LONG_DOUBLE on mac, and actually seems to hurt, making runtime longer
 #by a factor of 1.5
 
 
-ifeq ($(PARI_DEFINE),-DINCLUDE_PARI)
-    #location of pari.h.
-    LOCATION_PARI_H = /usr/local/include/pari #usual location
 
-    #location of libpari.a or of libpari.so
-    #depending on whether static or dynamic libraries are being used.
-    #On mac os x it's the former, on linux I think usually the latter.
-    LOCATION_PARI_LIBRARY = /usr/local/lib #usual location
-else
-    #supplied as a dummy so as to avoid more ifeq's below
-    LOCATION_PARI_H = .
-    LOCATION_PARI_LIBRARY = .
-endif
-
-
-
 #INCLUDEFILES= -I../include -I../../packages/gcc4.3/usr/local/include
 INCLUDEFILES= -I../include
 
 #For Mac os x we omit shared library options
 
 ifeq ($(OS_NAME),Darwin)
-    LDFLAGS2 =
-    DYN_OPTION=dynamiclib
+    DYN_OPTION=dynamiclib -Wl,-headerpad_max_install_names
 else
-    LDFLAGS1 = -Xlinker -export-dynamic #not sure why pari calls these when linking but on the web I found
-    #'Libtool provides the `-export-dynamic' link flag (see section Link mode), which does this declaration.
-    #You need to use this flag if you are linking a shared library that will be dlopened'
-    #see notes below
-    #ifeq ($(PARI_DEFINE),-DINCLUDE_PARI)
-       LDFLAGS2 = $(LDFLAGS1) -Xlinker -rpath -Xlinker $(LOCATION_PARI_LIBRARY)
-    #else
-    #    LDFLAGS2 = $(LDFLAGS1)
-    #endif
     DYN_OPTION=shared
 endif
 
-ifeq ($(PARI_DEFINE),-DINCLUDE_PARI)
-    LDFLAGS = $(LDFLAGS2) -L$(LOCATION_PARI_LIBRARY) -lpari
-else
-    LDFLAGS = $(LDFLAGS2)
-endif
+PARI_LIBS = -L$(LOCALBASE)/lib -lpari -lgmp -lm
 
 
-
 #NOTES:
 #for caedmon: the shared pari library is in a funny location: /usr/local/pari/pari-2.1.5/lib
 #At compile time we need to specify that location with:
@@ -129,47 +108,63 @@ endif
 #become clear which libraries the computer can find.
 
 
-INSTALL_DIR= /usr/local
+INSTALL_DIR = $(STAGEDIR)$(PREFIX)
 
+#binary and library files extensions
+LIBEXT := .so
+EXEEXT :=
+
+ifeq ($(OS_NAME),Darwin)
+    LIBEXT := .dylib
+    EXEEXT :=
+endif
+
+ifeq ($(OS_NAME),CYGWIN)
+    LIBEXT := .dll
+    EXEEXT := .exe
+endif
+
 #object files for the libLfunction library
 OBJ_L = Lglobals.o Lgamma.o Lriemannsiegel.o Lriemannsiegel_blfi.o Ldokchitser.o
 
 #object files for the command line program
-OBJ2=$(OBJ_L) Lcommandline_globals.o Lcommandline_misc.o Lcommandline_numbertheory.o Lcommandline_values_zeros.o
-OBJ3=$(OBJ2) Lcommandline_elliptic.o Lcommandline_twist.o Lcommandline.o cmdline.o
+OBJ2 = $(OBJ_L) Lcommandline_globals.o Lcommandline_misc.o Lcommandline_numbertheory.o Lcommandline_values_zeros.o
+OBJ3 = $(OBJ2) Lcommandline_elliptic.o Lcommandline_twist.o Lcommandline.o cmdline.o
 OBJECTS = $(OBJ3)
 
 all:
-#	make print_vars
-	make libLfunction.so
-	make lcalc
-	make examples
-#	make find_L
-#	make test
+#	$(MAKE) print_vars
+	$(MAKE) libLfunction$(LIBEXT)
+	$(MAKE) lcalc$(EXEEXT)
+	$(MAKE) examples$(EXEEXT)
+#	$(MAKE) find_L
+#	$(MAKE) test
 
 print_vars:
 	@echo OS_NAME = $(OS_NAME)
 
-lcalc: $(OBJECTS)
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) $(OBJECTS) $(LDFLAGS) -o lcalc $(GMP_FLAGS)
+lcalc$(EXEEXT): $(OBJECTS)
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) $(LDFLAGS) $(OBJECTS) -o lcalc$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS)
 
-examples:
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) example_programs/example.cc libLfunction.so -o example_programs/example $(GMP_FLAGS)
+examples$(EXEEXT):
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) example_programs/example.cc $(LDFLAGS) libLfunction$(LIBEXT) -o example_programs/example$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS)
 
 
-proc:
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) example_programs/proc.cc libLfunction.so -o example_programs/proc $(GMP_FLAGS)
+proc$(EXEEXT):
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) example_programs/proc.cc $(LDFLAGS) libLfunction$(LIBEXT) -o example_programs/proc$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS)
 
-test:
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) example_programs/test.cc libLfunction.so -o example_programs/test $(GMP_FLAGS)
+test$(EXEEXT):
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) example_programs/test.cc $(LDFLAGS) libLfunction$(LIBEXT) -o example_programs/test$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS)
 
-find_L:
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) find_L_functions/find_L_functions.cc libLfunction.so -o find_L_functions/find_L $(GMP_FLAGS)
+find_L$(EXEEXT):
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) find_L_functions/find_L_functions.cc $(LDFLAGS) libLfunction$(LIBEXT) -o find_L_functions/find_L$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS)
 
 .cc.o:
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) -c $<
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) -c $<
+
+# Warning: We (Sage) add $CXXFLAGS to CXXFLAGS above.
 .c.o:
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) -c $<
+	$(CC) $(CFLAGS) $(INCLUDEFILES) -c $<
 
 
 Lglobals.o: ../include/Lglobals.h ../include/Lcommon.h ../include/Lcomplex.h ../include/Lnumeric.h ../include/Lint_complex.h
@@ -227,7 +222,7 @@ Lcommandline_elliptic.o: ../include/Lnumberzeros.h ../
 Lcommandline_elliptic.o: ../include/Lvalue.h ../include/Lfind_zeros.h
 Lcommandline_elliptic.o: ../include/Lcommandline_numbertheory.h
 Lcommandline_elliptic.o: ../include/Lcommandline_globals.h
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) -I$(LOCATION_PARI_H) $(PARI_DEFINE) -c Lcommandline_elliptic.cc
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) $(PARI_DEFINE) -c Lcommandline_elliptic.cc
 
 Lcommandline_twist.o: ../include/Lcommandline_twist.h ../include/L.h
 Lcommandline_twist.o: ../include/Lglobals.h ../include/Lcommon.h ../include/Lcomplex.h ../include/Lnumeric.h ../include/Lint_complex.h
@@ -239,7 +234,7 @@ Lcommandline_twist.o: ../include/Lvalue.h ../include/L
 Lcommandline_twist.o: ../include/Lcommandline_numbertheory.h
 Lcommandline_twist.o: ../include/Lcommandline_globals.h
 Lcommandline_twist.o: ../include/Lcommandline_elliptic.h
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) -I$(LOCATION_PARI_H) $(PARI_DEFINE) -c Lcommandline_twist.cc
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) $(PARI_DEFINE) -c Lcommandline_twist.cc
 
 cmdline.o: ../include/cmdline.h ../include/getopt.h
 #$(CC) $(CCFLAGS) $(INCLUDEFILES) -DHAVE_LONG_LONG -c cmdline.c
@@ -258,21 +253,21 @@ Lcommandline.o: ../include/Lcommandline_misc.h
 Lcommandline.o: ../include/Lcommandline_elliptic.h
 Lcommandline.o: ../include/Lcommandline_twist.h
 Lcommandline.o: ../include/Lcommandline_values_zeros.h
-	$(CC) $(CCFLAGS) $(INCLUDEFILES) -I$(LOCATION_PARI_H) $(PARI_DEFINE) -c Lcommandline.cc
+	$(CXX) $(CXXFLAGS) $(INCLUDEFILES) $(PARI_DEFINE) -c Lcommandline.cc
 
 
-libLfunction.so: $(OBJ_L)
-	g++ -$(DYN_OPTION)  -o libLfunction.so $(OBJ_L)
+libLfunction$(LIBEXT): $(OBJ_L)
+	$(CXX) -$(DYN_OPTION) $(CXXFLAGS) -o libLfunction$(LIBEXT) $(LDFLAGS) -Wl,-soname,$@ $(OBJ_L) $(PARI_LIBS)
 
 clean:
-	rm -f *.o lcalc libLfunction.so example_programs/example
+	rm -f *.o lcalc$(EXEEXT) libLfunction$(LIBEXT) example_programs/example$(EXEEXT)
 
 install:
-	cp -f lcalc $(INSTALL_DIR)/bin/.
-	cp -f libLfunction.so $(INSTALL_DIR)/lib/.
+	cp -f lcalc$(EXEEXT) $(INSTALL_DIR)/bin/.
+	cp -f libLfunction$(LIBEXT) $(INSTALL_DIR)/lib/.
 	cp -rf ../include $(INSTALL_DIR)/include/Lfunction
 
 
 SRCS = Lcommandline.cc Lcommandline_elliptic.cc Lcommandline_globals.cc Lcommandline_misc.cc Lcommandline_numbertheory.cc Lcommandline_twist.cc Lcommandline_values_zeros.cc Lgamma.cc Lglobals.cc Lmisc.cc Lriemannsiegel.cc Lriemannsiegel_blfi.cc cmdline.c
 depend:
-	makedepend -f depends -- $(CCFLAGS) -Y../include -- $(SRCS)
+	makedepend -f depends -- $(CXXFLAGS) -Y../include -- $(SRCS)
