From: Michael R. Crusoe <crusoe@debian.org>
Subject: Make build system more flexible
Forwarded: https://github.com/benedictpaten/sonLib/pull/46
https://github.com/benedictpaten/sonLib/pull/42
https://github.com/vgteam/gfakluge/pull/6
https://github.com/yoheirosen/sublinear-Li-Stephens/pull/7
https://github.com/vgteam/vg/pull/3168
https://github.com/vgteam/cpp_progress_bar/pull/2

So that Debian can pass hardening flags
--- a/deps/sdsl-lite/install.sh
+++ b/deps/sdsl-lite/install.sh
@@ -53,7 +53,7 @@ if [ $? != 0 ]; then
 	exit 1
 fi
 
-cmake -DCMAKE_INSTALL_PREFIX="${SDSL_INSTALL_PREFIX}" .. # run cmake 
+cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_INSTALL_PREFIX="${SDSL_INSTALL_PREFIX}" .. # run cmake 
 if [ $? != 0 ]; then
 	echo "ERROR: CMake build failed."
 	exit 1
@@ -92,10 +92,6 @@ echo "The sdsl include files are located
 echo "The library files are located in '${SDSL_INSTALL_PREFIX}/lib'."
 echo " "
 echo "Sample programs can be found in the examples-directory."
-echo "A program 'example.cpp' can be compiled with the command: "
-echo "g++ -std=c++11 -DNDEBUG -O3 [-msse4.2] \\"
-echo "   -I${SDSL_INSTALL_PREFIX}/include -L${SDSL_INSTALL_PREFIX}/lib \\"
-echo "   example.cpp -lsdsl -ldivsufsort -ldivsufsort64"
 echo " "
 echo "Tests in the test-directory"
 echo "A cheat sheet in the extras/cheatsheet-directory."
--- a/deps/sonLib/externalTools/quicktree_1.1/Makefile
+++ b/deps/sonLib/externalTools/quicktree_1.1/Makefile
@@ -22,7 +22,7 @@ all: $(BIN)/quicktree
 quicktree : $(BIN)/quicktree
 
 $(BIN)/quicktree : $(QUICKTREEOBJ)
-	$(CC) $(DLFLAGS) -o $@ $(QUICKTREEOBJ) -lm
+	$(CC) $(LDFLAGS) -o $@ $(QUICKTREEOBJ) -lm
 
 $(OBJ)/quicktree.o : $(SRC)/quicktree.c 
 	$(CC) $(CFLAGS) $(CPPFLAGS) -o $(OBJ)/quicktree.o $(SRC)/quicktree.c
--- a/deps/gfakluge/Makefile
+++ b/deps/gfakluge/Makefile
@@ -1,5 +1,5 @@
 CXX?=g++
-CXXFLAGS:=-O3 -pipe -fPIC -march=native -mtune=native -std=c++11 -g -ggdb
+CXXFLAGS += -O3 -pipe -fPIC -Wall -std=c++11 -ggdb
 PREFIX=/usr/local
 
 # We want to pass -Wa,-q to GCC use the Clang assembler, but Apple Clang can't take that
@@ -21,10 +21,10 @@ LD_LIB_FLAGS=-L./src/ -L./
 LD_INC_FLAGS=-I./src/ -I./ -I./src/tinyFA -I./$(BUILD_DIR)
 
 gfak: $(BUILD_DIR)/main.o src/gfakluge.hpp src/tinyFA/pliib.hpp src/tinyFA/tinyfa.hpp | $(BUILD_DIR) $(BIN_DIR)
-	+$(CXX) $(CXXFLAGS) -o $@ $< $(LD_LIB_FLAGS) $(LD_INC_FLAGS)
+	+$(CXX) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) -o $@ $< $(LD_LIB_FLAGS) $(LD_INC_FLAGS)
 
 $(BUILD_DIR)/main.o: src/main.cpp src/gfakluge.hpp src/tinyFA/pliib.hpp src/tinyFA/tinyfa.hpp | $(BUILD_DIR) $(BIN_DIR)
-	+$(CXX) $(CXXFLAGS) -c -o $@ $< $(LD_LIB_FLAGS) $(LD_INC_FLAGS)
+	+$(CXX) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< $(LD_LIB_FLAGS) $(LD_INC_FLAGS)
 
 $(BUILD_DIR):
 	mkdir -p $(BUILD_DIR)
--- a/deps/sonLib/C/Makefile
+++ b/deps/sonLib/C/Makefile
@@ -52,8 +52,8 @@ ${libPath}/%.h: inc/%.h
 
 ${libPath}/sonLib.a : ${libSources} ${cppSources} $(foreach l, ${libHeaders}, ${libPath}/$(notdir $l)) ${libInternalHeaders}
 	@mkdir -p $(dir $@)
-	${cxx} $(CPPFLAGS) ${cflags} -I inc -I ${libPath}/  -c ${libSources}
-	${cpp} $(CPPFLAGS) ${cppflags} -I inc -I ${libPath}/ -c ${cppSources}
+	${cxx} $(CPPFLAGS) ${cflags} $(CXXFLAGS) -I inc -I ${libPath}/  -c ${libSources}
+	${cpp} $(CPPFLAGS) ${cppflags} $(CXXFLAGS) $(LDFLAGS) -I inc -I ${libPath}/ -c ${cppSources}
 	ar rc sonLib.a *.o ${quickTreeObjects}
 	ranlib sonLib.a 
 	rm *.o
--- a/deps/sublinear-Li-Stephens/makefile
+++ b/deps/sublinear-Li-Stephens/makefile
@@ -9,7 +9,7 @@ LIB_DIR:= $(CWD)/lib
 DEP_DIR:= $(CWD)/deps
 
 CXX:=g++
-CXXFLAGS:=-std=c++11 -g
+CXXFLAGS += -std=c++11 -g
 
 ifeq ($(INCLUDE_FLAGS),)
 	# Include flags may be set by library user
@@ -42,89 +42,89 @@ clean:
 	rm -f $(BIN_DIR)/* $(OBJ_DIR)/*.o $(TEST_OBJ_DIR)/*.o $(LIB_DIR)/*
 
 tests : $(TEST_OBJ_DIR)/test.o $(CORE_OBJ) $(LIBHTS)
-	$(CXX) $(CXXFLAGS) $^ -o $(BIN_DIR)/tests $(LIBS)
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $(BIN_DIR)/tests $(LIBS)
 
 tree_tests : $(TEST_OBJ_DIR)/tree_tests.o $(CORE_OBJ) $(TREE_OBJ) $(LIBHTS)
-	$(CXX) $(CXXFLAGS) $^ -o $(BIN_DIR)/tree_tests $(LIBS)
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $(BIN_DIR)/tree_tests $(LIBS)
 
 speed_tree : $(TEST_OBJ_DIR)/speed_tree.o $(CORE_OBJ) $(TREE_OBJ) $(LIBHTS)
-	$(CXX) $(CXXFLAGS) $^ -o $(BIN_DIR)/speed_tree $(LIBS)
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $(BIN_DIR)/speed_tree $(LIBS)
 
 interface : $(OBJ_DIR)/linhapexample.o $(OBJ_DIR)/interface.o $(CORE_OBJ) $(TREE_OBJ) $(LIBHTS)
-	$(CXX) $(CXXFLAGS) $^ -o $(BIN_DIR)/linhapexample $(LIBS)
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $(BIN_DIR)/linhapexample $(LIBS)
 	
 serializer : $(OBJ_DIR)/serialize_index.o $(CORE_OBJ) $(LIBHTS)
-	$(CXX) $(CXXFLAGS) $^ -o $(BIN_DIR)/serializer $(LIBS)
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $(BIN_DIR)/serializer $(LIBS)
 
 profiler : $(OBJ_DIR)/profiler.o $(CORE_OBJ)
-	$(CXX) $(CXXFLAGS) $^ -o $(BIN_DIR)/profiler $(LIBS)
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $(BIN_DIR)/profiler $(LIBS)
 
 $(LIB_DIR)/libsublinearLS.a : $(CORE_OBJ) $(TREE_OBJ)
 	ar rc $@ $^
 	ranlib $@
 
 $(OBJ_DIR)/allele.o : $(SRC_DIR)/allele.cpp $(SRC_DIR)/allele.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -Wno-error=return-type $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/linhapexample.o : $(SRC_DIR)/linhapexample.c $(SRC_DIR)/interface.h $(SRC_DIR)/haplotype_manager.hpp $(SRC_DIR)/reference_sequence.hpp $(SRC_DIR)/set_of_extensions.hpp $(SRC_DIR)/haplotype_state_tree.hpp $(SRC_DIR)/haplotype_state_node.hpp $(PROBABILITY_DEPS)
 	gcc -std=c11 $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/interface.o : $(SRC_DIR)/interface.cpp $(SRC_DIR)/interface.h $(SRC_DIR)/haplotype_manager.hpp $(SRC_DIR)/reference_sequence.hpp $(SRC_DIR)/set_of_extensions.hpp $(SRC_DIR)/haplotype_state_tree.hpp $(SRC_DIR)/haplotype_state_node.hpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/haplotype_state_node.o : $(SRC_DIR)/haplotype_state_node.cpp $(SRC_DIR)/haplotype_state_node.hpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -Wno-error=return-type $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/haplotype_state_tree.o : $(SRC_DIR)/haplotype_state_tree.cpp $(SRC_DIR)/haplotype_state_tree.hpp $(SRC_DIR)/haplotype_state_node.hpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/haplotype_manager.o : $(SRC_DIR)/haplotype_manager.cpp $(SRC_DIR)/haplotype_manager.hpp $(SRC_DIR)/reference_sequence.hpp $(SRC_DIR)/set_of_extensions.hpp $(SRC_DIR)/haplotype_state_tree.hpp $(SRC_DIR)/haplotype_state_node.hpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(TEST_OBJ_DIR)/speed_tree.o : $(TEST_SRC_DIR)/speed_tree.cpp $(SRC_DIR)/haplotype_manager.hpp $(SRC_DIR)/reference_sequence.hpp $(SRC_DIR)/set_of_extensions.hpp $(SRC_DIR)/haplotype_state_tree.hpp $(SRC_DIR)/haplotype_state_node.hpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/delay_multiplier.o : $(SRC_DIR)/delay_multiplier.cpp $(SRC_DIR)/delay_multiplier.hpp $(SRC_DIR)/math.hpp $(SRC_DIR)/DP_map.hpp $(SRC_DIR)/row_set.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/DP_map.o : $(SRC_DIR)/DP_map.cpp $(SRC_DIR)/math.hpp $(SRC_DIR)/DP_map.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/input_haplotype.o : $(SRC_DIR)/input_haplotype.cpp $(SRC_DIR)/input_haplotype.hpp $(SRC_DIR)/reference.hpp $(SRC_DIR)/allele.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/math.o : $(SRC_DIR)/math.cpp $(SRC_DIR)/math.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/probability.o : $(SRC_DIR)/probability.cpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/penalty_set.o : $(SRC_DIR)/penalty_set.cpp $(SRC_DIR)/penalty_set.hpp $(SRC_DIR)/math.hpp $(SRC_DIR)/DP_map.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/reference.o : $(SRC_DIR)/reference.cpp $(SRC_DIR)/reference.hpp $(SRC_DIR)/allele.hpp $(SRC_DIR)/row_set.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/reference_sequence.o : $(SRC_DIR)/reference_sequence.cpp $(SRC_DIR)/reference_sequence.hpp $(SRC_DIR)/reference.hpp $(SRC_DIR)/allele.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/row_set.o : $(SRC_DIR)/row_set.cpp $(SRC_DIR)/row_set.hpp $(SRC_DIR)/allele.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/set_of_extensions.o : $(SRC_DIR)/set_of_extensions.cpp $(SRC_DIR)/set_of_extensions.hpp  $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(TEST_OBJ_DIR)/test.o : $(TEST_SRC_DIR)/test.cpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(TEST_OBJ_DIR)/tree_tests.o : $(TEST_SRC_DIR)/tree_tests.cpp $(SRC_DIR)/haplotype_manager.hpp $(SRC_DIR)/reference_sequence.hpp $(SRC_DIR)/set_of_extensions.hpp $(SRC_DIR)/haplotype_state_tree.hpp $(SRC_DIR)/haplotype_state_node.hpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/serialize_index.o : $(SRC_DIR)/serialize_index.cpp $(SRC_DIR)/reference.hpp $(SRC_DIR)/allele.hpp $(SRC_DIR)/row_set.hpp
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@
 
 $(OBJ_DIR)/profiler.o : $(SRC_DIR)/test/profiler.cpp $(PROBABILITY_DEPS)
-	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@	
+	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDE_FLAGS) $(LIBS) -c $< -o $@	
 
 $(LIBHTS) :
 	cd deps/htslib && make
--- a/deps/libvgio/CMakeLists.txt
+++ b/deps/libvgio/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.9)
 project(libvgio VERSION 0.0.0 LANGUAGES CXX)
 
 # Optimize by default, but also include debug info
-set(CMAKE_CXX_FLAGS "-O3 -g ${CMAKE_CXX_FLAGS}")
+#set(CMAKE_CXX_FLAGS "-O3 -g ${CMAKE_CXX_FLAGS}")
 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
 
   # assumes clang build
--- a/deps/sdsl-lite/CMakeLists.txt
+++ b/deps/sdsl-lite/CMakeLists.txt
@@ -118,7 +118,6 @@ else()
     message(WARNING "git not found. Cloning of submodules will not work.")
 endif()
 
-add_subdirectory(external)
 add_subdirectory(include)
 add_subdirectory(lib)
 
--- a/deps/sdsl-lite/lib/CMakeLists.txt
+++ b/deps/sdsl-lite/lib/CMakeLists.txt
@@ -1,6 +1,5 @@
 include_directories(#"${CMAKE_CURRENT_SOURCE_DIR}/../include"
         "${CMAKE_CURRENT_BINARY_DIR}/../include"
-        "${CMAKE_CURRENT_BINARY_DIR}/../external/libdivsufsort/include"
         )
 
 
--- a/deps/sdsl-lite/lib/structure_tree.cpp.cmake
+++ b/deps/sdsl-lite/lib/structure_tree.cpp.cmake
@@ -45,7 +45,7 @@ std::string create_html_header(const cha
             << "   <head>\n"
             << "    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">\n"
             << "    <title>" << file_name << "</title>\n"
-            << "    <script src=\"file://@PROJECT_SOURCE_DIR@/external/d3/d3.min.js\"></script>"
+            << "    <script src=\"file:///usr/share/javascript/d3/d3.min.js\"></script>"
             << "    <script src=\"http://d3js.org/d3.v2.js\"></script>\n"
             << "    <style type=\"text/css\">\n"
             << "      path { stroke: #000; stroke-width: 0.8; cursor: pointer; }\n"
--- a/deps/DYNAMIC/CMakeLists.txt
+++ b/deps/DYNAMIC/CMakeLists.txt
@@ -34,7 +34,7 @@ include_directories(${INSTALL_DIR}/src/h
 
 message("Building in ${CMAKE_BUILD_TYPE} mode")
 
-set(CMAKE_CXX_FLAGS "--std=c++11")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11")
 
 if(XXSDS_DYN_MULTI_THREADED)
   find_package(OpenMP REQUIRED)
@@ -42,9 +42,9 @@ if(XXSDS_DYN_MULTI_THREADED)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
 endif(XXSDS_DYN_MULTI_THREADED)
 
-set(CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb")
-set(CMAKE_CXX_FLAGS_RELEASE "-ggdb -Ofast -fstrict-aliasing -DNDEBUG -march=native")
-set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -ggdb -Ofast -fstrict-aliasing -march=native")
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3 -ggdb")
+set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ggdb -Ofast -fstrict-aliasing -DNDEBUG -march=native")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g -ggdb -Ofast -fstrict-aliasing -march=native")
 
 add_executable(debug debug.cpp)
 add_executable(rle_lz77_v1 rle_lz77_v1.cpp)
--- a/deps/progress_bar/makefile
+++ b/deps/progress_bar/makefile
@@ -1,5 +1,5 @@
 CC = g++
-CPPFLAGS = -std=c++11
+CPPFLAGS += -std=c++11
 TARGET = progress_bar
 OBJ = main.o progress_bar.o
 
