A (manual) revert of

https://github.com/NixOS/patchelf/commit/a1352e52896ee9c70c36ae7674bc5a42cf4747f5
https://github.com/NixOS/patchelf/commit/61b53ce7cfa8b10d1a33041aedec3c9103c659f3

to avoid an (as of 0.14.5 completely) unnecessary dependency on c++17
which is not available on the old build systems.

--- src/Makefile.am
+++ src/Makefile.am
@@ -1,4 +1,4 @@
-AM_CXXFLAGS = -Wall -std=c++17 -D_FILE_OFFSET_BITS=64
+AM_CXXFLAGS = -Wall -std=c++11 -D_FILE_OFFSET_BITS=64
 
 if WITH_ASAN
 AM_CXXFLAGS += -fsanitize=address -fsanitize-address-use-after-scope
--- src/Makefile.in
+++ src/Makefile.in
@@ -268,7 +268,7 @@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AM_CXXFLAGS = -Wall -std=c++17 -D_FILE_OFFSET_BITS=64 $(am__append_1) \
+AM_CXXFLAGS = -Wall -std=c++11 -D_FILE_OFFSET_BITS=64 $(am__append_1) \
 	$(am__append_2) $(am__append_3) $(am__append_4)
 SAN_FLAGS = -fno-optimize-sibling-calls -fno-omit-frame-pointer
 patchelf_SOURCES = patchelf.cc elf.h patchelf.h
--- src/patchelf.h
+++ src/patchelf.h
@@ -83,7 +83,7 @@
 
     Elf_Shdr & findSectionHeader(const SectionName & sectionName);
 
-    std::optional<std::reference_wrapper<Elf_Shdr>> tryFindSectionHeader(const SectionName & sectionName);
+    Elf_Shdr * tryFindSectionHeader(const SectionName & sectionName);
 
     unsigned int getSectionIndex(const SectionName & sectionName);
 
--- src/patchelf.cc
+++ src/patchelf.cc
@@ -26,7 +26,6 @@
 #include <string>
 #include <unordered_map>
 #include <vector>
-#include <optional>
 
 #include <cassert>
 #include <cerrno>
@@ -483,12 +482,12 @@
 
 
 template<ElfFileParams>
-std::optional<std::reference_wrapper<Elf_Shdr>> ElfFile<ElfFileParamNames>::tryFindSectionHeader(const SectionName & sectionName)
+Elf_Shdr * ElfFile<ElfFileParamNames>::tryFindSectionHeader(const SectionName & sectionName)
 {
     auto i = getSectionIndex(sectionName);
     if (i)
-        return shdrs.at(i);
-    return {};
+        return &(shdrs.at(i));
+    return nullptr;
 }
 
 
@@ -969,7 +968,7 @@
        (e.g., those produced by klibc's klcc). */
     auto shdrDynamic = tryFindSectionHeader(".dynamic");
     if (shdrDynamic) {
-        auto dyn_table = (Elf_Dyn *) (fileContents->data() + rdi((*shdrDynamic).get().sh_offset));
+        auto dyn_table = (Elf_Dyn *) (fileContents->data() + rdi(shdrDynamic->sh_offset));
         unsigned int d_tag;
         for (auto dyn = dyn_table; (d_tag = rdi(dyn->d_tag)) != DT_NULL; dyn++)
             if (d_tag == DT_STRTAB)
@@ -984,14 +983,14 @@
                 auto shdr = tryFindSectionHeader(".gnu.hash");
                 // some binaries might this section stripped
                 // in which case we just ignore the value.
-                if (shdr) dyn->d_un.d_ptr = (*shdr).get().sh_addr;
+                if (shdr) dyn->d_un.d_ptr = shdr->sh_addr;
             } else if (d_tag == DT_JMPREL) {
                 auto shdr = tryFindSectionHeader(".rel.plt");
                 if (!shdr) shdr = tryFindSectionHeader(".rela.plt");
                 /* 64-bit Linux, x86-64 */
                 if (!shdr) shdr = tryFindSectionHeader(".rela.IA_64.pltoff"); /* 64-bit Linux, IA-64 */
                 if (!shdr) error("cannot find section corresponding to DT_JMPREL");
-                dyn->d_un.d_ptr = (*shdr).get().sh_addr;
+                dyn->d_un.d_ptr = shdr->sh_addr;
             }
             else if (d_tag == DT_REL) { /* !!! hack! */
                 auto shdr = tryFindSectionHeader(".rel.dyn");
@@ -1001,14 +1000,14 @@
                 /* some programs have neither section, but this doesn't seem
                    to be a problem */
                 if (!shdr) continue;
-                dyn->d_un.d_ptr = (*shdr).get().sh_addr;
+                dyn->d_un.d_ptr = shdr->sh_addr;
             }
             else if (d_tag == DT_RELA) {
                 auto shdr = tryFindSectionHeader(".rela.dyn");
                 /* some programs lack this section, but it doesn't seem to
                    be a problem */
                 if (!shdr) continue;
-                dyn->d_un.d_ptr = (*shdr).get().sh_addr;
+                dyn->d_un.d_ptr = shdr->sh_addr;
             }
             else if (d_tag == DT_VERNEED)
                 dyn->d_un.d_ptr = findSectionHeader(".gnu.version_r").sh_addr;
@@ -1021,7 +1020,7 @@
                 if (shdr) {
                     auto rld_map_addr = findSectionHeader(".rld_map").sh_addr;
                     auto dyn_offset = ((char*)dyn) - ((char*)dyn_table);
-                    dyn->d_un.d_ptr = rld_map_addr - dyn_offset - (*shdrDynamic).get().sh_addr;
+                    dyn->d_un.d_ptr = rld_map_addr - dyn_offset - shdrDynamic->sh_addr;
                 } else {
                     /* ELF file with DT_MIPS_RLD_MAP_REL but without .rld_map
                        is broken, and it's not our job to fix it; yet, we have
