From 8b50a13b56cc9ac53dd7c6770432e1b2155bdc79 Mon Sep 17 00:00:00 2001 From: Justin Lecher Date: Fri, 14 Apr 2017 19:35:30 +0100 Subject: sci-chemistry/threeV: Bump EAPI to 6 fix format-security problems Package-Manager: Portage-2.3.5, Repoman-2.3.2 Signed-off-by: Justin Lecher --- sci-chemistry/threeV/files/1.2-gentoo.patch | 107 ----------- .../threeV/files/threeV-1.2-format-security.patch | 198 +++++++++++++++++++++ sci-chemistry/threeV/files/threeV-1.2-gentoo.patch | 107 +++++++++++ sci-chemistry/threeV/threeV-1.2-r1.ebuild | 40 +++++ sci-chemistry/threeV/threeV-1.2.ebuild | 33 ---- 5 files changed, 345 insertions(+), 140 deletions(-) delete mode 100644 sci-chemistry/threeV/files/1.2-gentoo.patch create mode 100644 sci-chemistry/threeV/files/threeV-1.2-format-security.patch create mode 100644 sci-chemistry/threeV/files/threeV-1.2-gentoo.patch create mode 100644 sci-chemistry/threeV/threeV-1.2-r1.ebuild delete mode 100644 sci-chemistry/threeV/threeV-1.2.ebuild diff --git a/sci-chemistry/threeV/files/1.2-gentoo.patch b/sci-chemistry/threeV/files/1.2-gentoo.patch deleted file mode 100644 index 0827551599ba..000000000000 --- a/sci-chemistry/threeV/files/1.2-gentoo.patch +++ /dev/null @@ -1,107 +0,0 @@ -diff --git a/src/Makefile b/src/Makefile -index a58462c..616f51a 100644 ---- a/src/Makefile -+++ b/src/Makefile -@@ -1,7 +1,7 @@ --CC = g++ --EXT=$(shell ./cpuflags.pl --opt ) --FLAGS = -Wall $(EXT) --#FLAGS = -O3 -Wall -ffast-math -+CXX ?= g++ -+#EXT=$(shell ./cpuCXXFLAGS.pl --opt ) -+#CXXFLAGS = -Wall $(EXT) -+#CXXFLAGS = -O3 -Wall -ffast-math - OBJS = utils-main.o utils-output.o utils-mrc.o - - all: cav chan fsv sol tun vdw vol -@@ -17,54 +17,65 @@ volume: vol - objects: utils-main.o utils-output.o utils-mrc.o - - cav: objects cavities.cpp -- $(CC) $(FLAGS) -o Cavities.exe $(OBJS) cavities.cpp -- chmod 777 Cavities.exe -- mv Cavities.exe ../bin -+ $(CXX) $(CXXFLAGS) -c -o cavities.o cavities.cpp -+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Cavities $(OBJS) cavities.o -+ chmod 755 Cavities -+ mv Cavities ../bin - - chan: objects channel.cpp -- $(CC) $(FLAGS) -o Channel.exe $(OBJS) channel.cpp -- chmod 777 Channel.exe -- mv Channel.exe ../bin -+ $(CXX) $(CXXFLAGS) -c -o channel.o channel.cpp -+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Channel $(OBJS) channel.o -+ chmod 755 Channel -+ mv Channel ../bin - - fsv: objects fsv_calc.cpp -- $(CC) $(FLAGS) -o FsvCalc.exe $(OBJS) fsv_calc.cpp -- chmod 777 FsvCalc.exe -- mv FsvCalc.exe ../bin -+ $(CXX) $(CXXFLAGS) -c -o fsv_calc.o fsv_calc.cpp -+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o FsvCalc $(OBJS) fsv_calc.o -+ chmod 755 FsvCalc -+ mv FsvCalc ../bin - - sol: objects solvent.cpp -- $(CC) $(FLAGS) -o Solvent.exe $(OBJS) solvent.cpp -- chmod 777 Solvent.exe -- mv Solvent.exe ../bin -+ $(CXX) $(CXXFLAGS) -c -o solvent.o solvent.cpp -+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Solvent $(OBJS) solvent.o -+ chmod 755 Solvent -+ mv Solvent ../bin - - tun: objects tunnel.cpp -- $(CC) $(FLAGS) -o Tunnel.exe $(OBJS) tunnel.cpp -- chmod 777 Tunnel.exe -- mv Tunnel.exe ../bin -+ $(CXX) $(CXXFLAGS) -c -o tunnel.o tunnel.cpp -+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Tunnel $(OBJS) tunnel.o -+ chmod 755 Tunnel -+ mv Tunnel ../bin - - vdw: objects vdw.cpp -- $(CC) $(FLAGS) -o VDW.exe $(OBJS) vdw.cpp -- chmod 777 VDW.exe -- mv VDW.exe ../bin -+ $(CXX) $(CXXFLAGS) -c -o vdw.o vdw.cpp -+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o VDW $(OBJS) vdw.o -+ chmod 755 VDW -+ mv VDW ../bin - - vol: objects volume.cpp -- $(CC) $(FLAGS) -o Volume.exe $(OBJS) volume.cpp -- chmod 777 Volume.exe -- mv Volume.exe ../bin -+ $(CXX) $(CXXFLAGS) -c -o volume.o volume.cpp -+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Volume $(OBJS) volume.o -+ chmod 755 Volume -+ mv Volume ../bin - - utils-main.o: utils-main.cpp -- $(CC) $(FLAGS) -c -o utils-main.o utils-main.cpp -+ $(CXX) $(CXXFLAGS) -c -o utils-main.o utils-main.cpp - - utils-output.o: utils-main.o utils-output.cpp -- $(CC) $(FLAGS) -c -o utils-output.o utils-output.cpp -+ $(CXX) $(CXXFLAGS) -c -o utils-output.o utils-output.cpp - - utils-mrc.o: utils-mrc.cpp -- $(CC) $(FLAGS) -c -o utils-mrc.o utils-mrc.cpp -+ $(CXX) $(CXXFLAGS) -c -o utils-mrc.o utils-mrc.cpp -+ -+install: -+ install -d $(DESTDIR)/usr/bin -+ install ../bin/* $(DESTDIR)/usr/bin/ - - clean: - rm -fv *.o *~ - - distclean: -- rm -fv *.o ../bin/*.exe *~ -+ rm -fv *.o ../bin/* *~ - - none: - echo "Please type make xxx, where xxx = cav, cha, fsv, sol, tun, vdw, or vol" diff --git a/sci-chemistry/threeV/files/threeV-1.2-format-security.patch b/sci-chemistry/threeV/files/threeV-1.2-format-security.patch new file mode 100644 index 000000000000..b693559900ad --- /dev/null +++ b/sci-chemistry/threeV/files/threeV-1.2-format-security.patch @@ -0,0 +1,198 @@ + cavities.cpp | 8 ++++---- + channel.cpp | 10 +++++----- + fsv_calc.cpp | 8 ++++---- + solvent.cpp | 8 ++++---- + tunnel.cpp | 8 ++++---- + vdw.cpp | 8 ++++---- + volume.cpp | 8 ++++---- + 7 files changed, 29 insertions(+), 29 deletions(-) + +diff --git a/cavities.cpp b/cavities.cpp +index 418a1a7..96b6a15 100644 +--- a/cavities.cpp ++++ b/cavities.cpp +@@ -35,7 +35,7 @@ int main(int argc, char *argv[]) { + + while(argc > 1 && argv[1][0] == '-') { + if(argv[1][1] == 'i') { +- sprintf(file,&argv[2][0]); ++ sprintf(file,"%s",&argv[2][0]); + } else if(argv[1][1] == 'g') { + GRID = atof(&argv[2][0]); + } else if(argv[1][1] == 's') { +@@ -45,11 +45,11 @@ int main(int argc, char *argv[]) { + } else if(argv[1][1] == 't') { + trim_rad = atof(&argv[2][0]); + } else if(argv[1][1] == 'e') { +- sprintf(ezdfile,&argv[2][0]); ++ sprintf(ezdfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'm') { +- sprintf(mrcfile,&argv[2][0]); ++ sprintf(mrcfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'o') { +- sprintf(pdbfile,&argv[2][0]); ++ sprintf(pdbfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'h') { + cerr << "./Cavities.exe -i -g -s " << endl + << "\t-p -t " << endl +diff --git a/channel.cpp b/channel.cpp +index c5acd20..9040631 100644 +--- a/channel.cpp ++++ b/channel.cpp +@@ -35,7 +35,7 @@ int main(int argc, char *argv[]) { + + while(argc > 1 && argv[1][0] == '-') { + if(argv[1][1] == 'i') { +- sprintf(file,&argv[2][0]); ++ sprintf(file,"%s",&argv[2][0]); + } else if(argv[1][1] == 'b') { + BIGPROBE = atof(&argv[2][0]); + } else if(argv[1][1] == 's') { +@@ -49,13 +49,13 @@ int main(int argc, char *argv[]) { + } else if(argv[1][1] == 'z') { + z = atof(&argv[2][0]); + } else if(argv[1][1] == 'i') { +- sprintf(file,&argv[2][0]); ++ sprintf(file,"%s",&argv[2][0]); + } else if(argv[1][1] == 'o') { +- sprintf(pdbfile,&argv[2][0]); ++ sprintf(pdbfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'e') { +- sprintf(ezdfile,&argv[2][0]); ++ sprintf(ezdfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'm') { +- sprintf(mrcfile,&argv[2][0]); ++ sprintf(mrcfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'g') { + GRID = atof(&argv[2][0]); + } else if(argv[1][1] == 'h') { +diff --git a/fsv_calc.cpp b/fsv_calc.cpp +index 9f81347..ef765b8 100644 +--- a/fsv_calc.cpp ++++ b/fsv_calc.cpp +@@ -34,7 +34,7 @@ int main(int argc, char *argv[]) { + + while(argc > 1 && argv[1][0] == '-') { + if(argv[1][1] == 'i') { +- sprintf(file,&argv[2][0]); ++ sprintf(file,"%s",&argv[2][0]); + } else if(argv[1][1] == 's') { + SMPROBE = atof(&argv[2][0]); + } else if(argv[1][1] == 'b') { +@@ -44,11 +44,11 @@ int main(int argc, char *argv[]) { + } else if(argv[1][1] == 'g') { + GRID = atof(&argv[2][0]); + } else if(argv[1][1] == 'o') { +- sprintf(pdbfile,&argv[2][0]); ++ sprintf(pdbfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'e') { +- sprintf(ezdfile,&argv[2][0]); ++ sprintf(ezdfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'm') { +- sprintf(mrcfile,&argv[2][0]); ++ sprintf(mrcfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'h') { + cerr << "./FsvCalc.exe -i -b -s " << endl + << "\t-t -g " << endl +diff --git a/solvent.cpp b/solvent.cpp +index d857696..bc9d67f 100644 +--- a/solvent.cpp ++++ b/solvent.cpp +@@ -34,7 +34,7 @@ int main(int argc, char *argv[]) { + + while(argc > 1 && argv[1][0] == '-') { + if(argv[1][1] == 'i') { +- sprintf(file,&argv[2][0]); ++ sprintf(file,"%s",&argv[2][0]); + } else if(argv[1][1] == 's') { + SMPROBE = atof(&argv[2][0]); + } else if(argv[1][1] == 'b') { +@@ -42,11 +42,11 @@ int main(int argc, char *argv[]) { + } else if(argv[1][1] == 't') { + TRIMPROBE = atof(&argv[2][0]); + } else if(argv[1][1] == 'e') { +- sprintf(ezdfile,&argv[2][0]); ++ sprintf(ezdfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'm') { +- sprintf(mrcfile,&argv[2][0]); ++ sprintf(mrcfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'o') { +- sprintf(pdbfile,&argv[2][0]); ++ sprintf(pdbfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'g') { + GRID = atof(&argv[2][0]); + } else if(argv[1][1] == 'h') { +diff --git a/tunnel.cpp b/tunnel.cpp +index 0094d05..7472aaa 100644 +--- a/tunnel.cpp ++++ b/tunnel.cpp +@@ -40,7 +40,7 @@ int main(int argc, char *argv[]) { + + while(argc > 1 && argv[1][0] == '-') { + if(argv[1][1] == 'i') { +- sprintf(file,&argv[2][0]); ++ sprintf(file,"%s",&argv[2][0]); + } else if(argv[1][1] == 'g') { + GRID = atof(&argv[2][0]); + } else if(argv[1][1] == 's') { +@@ -50,11 +50,11 @@ int main(int argc, char *argv[]) { + } else if(argv[1][1] == 't') { + trim_prb = atof(&argv[2][0]); + } else if(argv[1][1] == 'e') { +- sprintf(ezdfile,&argv[2][0]); ++ sprintf(ezdfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'm') { +- sprintf(mrcfile,&argv[2][0]); ++ sprintf(mrcfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'o') { +- sprintf(pdbfile,&argv[2][0]); ++ sprintf(pdbfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'h') { + cerr << "./Tunnel.exe -i -g -p " << endl + << "\t-e -o -m " << endl +diff --git a/vdw.cpp b/vdw.cpp +index 4df73f5..0e26edc 100644 +--- a/vdw.cpp ++++ b/vdw.cpp +@@ -32,13 +32,13 @@ int main(int argc, char *argv[]) { + + while(argc > 1 && argv[1][0] == '-') { + if(argv[1][1] == 'i') { +- sprintf(file,&argv[2][0]); ++ sprintf(file,"%s",&argv[2][0]); + } else if(argv[1][1] == 'o') { +- sprintf(pdbfile,&argv[2][0]); ++ sprintf(pdbfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'e') { +- sprintf(ezdfile,&argv[2][0]); ++ sprintf(ezdfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'm') { +- sprintf(mrcfile,&argv[2][0]); ++ sprintf(mrcfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'g') { + GRID = atof(&argv[2][0]); + } else if(argv[1][1] == 'h') { +diff --git a/volume.cpp b/volume.cpp +index a2ca9ad..c304b94 100644 +--- a/volume.cpp ++++ b/volume.cpp +@@ -32,15 +32,15 @@ int main(int argc, char *argv[]) { + + while(argc > 1 && argv[1][0] == '-') { + if(argv[1][1] == 'i') { +- sprintf(file,&argv[2][0]); ++ sprintf(file,"%s",&argv[2][0]); + } else if(argv[1][1] == 'p') { + PROBE = atof(&argv[2][0]); + } else if(argv[1][1] == 'o') { +- sprintf(pdbfile,&argv[2][0]); ++ sprintf(pdbfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'e') { +- sprintf(ezdfile,&argv[2][0]); ++ sprintf(ezdfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'm') { +- sprintf(mrcfile,&argv[2][0]); ++ sprintf(mrcfile,"%s",&argv[2][0]); + } else if(argv[1][1] == 'g') { + GRID = atof(&argv[2][0]); + } else if(argv[1][1] == 'h') { diff --git a/sci-chemistry/threeV/files/threeV-1.2-gentoo.patch b/sci-chemistry/threeV/files/threeV-1.2-gentoo.patch new file mode 100644 index 000000000000..556e928d5818 --- /dev/null +++ b/sci-chemistry/threeV/files/threeV-1.2-gentoo.patch @@ -0,0 +1,107 @@ +diff --git a/Makefile b/Makefile +index a58462c..616f51a 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ +-CC = g++ +-EXT=$(shell ./cpuflags.pl --opt ) +-FLAGS = -Wall $(EXT) +-#FLAGS = -O3 -Wall -ffast-math ++CXX ?= g++ ++#EXT=$(shell ./cpuCXXFLAGS.pl --opt ) ++#CXXFLAGS = -Wall $(EXT) ++#CXXFLAGS = -O3 -Wall -ffast-math + OBJS = utils-main.o utils-output.o utils-mrc.o + + all: cav chan fsv sol tun vdw vol +@@ -17,54 +17,65 @@ volume: vol + objects: utils-main.o utils-output.o utils-mrc.o + + cav: objects cavities.cpp +- $(CC) $(FLAGS) -o Cavities.exe $(OBJS) cavities.cpp +- chmod 777 Cavities.exe +- mv Cavities.exe ../bin ++ $(CXX) $(CXXFLAGS) -c -o cavities.o cavities.cpp ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Cavities $(OBJS) cavities.o ++ chmod 755 Cavities ++ mv Cavities ../bin + + chan: objects channel.cpp +- $(CC) $(FLAGS) -o Channel.exe $(OBJS) channel.cpp +- chmod 777 Channel.exe +- mv Channel.exe ../bin ++ $(CXX) $(CXXFLAGS) -c -o channel.o channel.cpp ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Channel $(OBJS) channel.o ++ chmod 755 Channel ++ mv Channel ../bin + + fsv: objects fsv_calc.cpp +- $(CC) $(FLAGS) -o FsvCalc.exe $(OBJS) fsv_calc.cpp +- chmod 777 FsvCalc.exe +- mv FsvCalc.exe ../bin ++ $(CXX) $(CXXFLAGS) -c -o fsv_calc.o fsv_calc.cpp ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o FsvCalc $(OBJS) fsv_calc.o ++ chmod 755 FsvCalc ++ mv FsvCalc ../bin + + sol: objects solvent.cpp +- $(CC) $(FLAGS) -o Solvent.exe $(OBJS) solvent.cpp +- chmod 777 Solvent.exe +- mv Solvent.exe ../bin ++ $(CXX) $(CXXFLAGS) -c -o solvent.o solvent.cpp ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Solvent $(OBJS) solvent.o ++ chmod 755 Solvent ++ mv Solvent ../bin + + tun: objects tunnel.cpp +- $(CC) $(FLAGS) -o Tunnel.exe $(OBJS) tunnel.cpp +- chmod 777 Tunnel.exe +- mv Tunnel.exe ../bin ++ $(CXX) $(CXXFLAGS) -c -o tunnel.o tunnel.cpp ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Tunnel $(OBJS) tunnel.o ++ chmod 755 Tunnel ++ mv Tunnel ../bin + + vdw: objects vdw.cpp +- $(CC) $(FLAGS) -o VDW.exe $(OBJS) vdw.cpp +- chmod 777 VDW.exe +- mv VDW.exe ../bin ++ $(CXX) $(CXXFLAGS) -c -o vdw.o vdw.cpp ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o VDW $(OBJS) vdw.o ++ chmod 755 VDW ++ mv VDW ../bin + + vol: objects volume.cpp +- $(CC) $(FLAGS) -o Volume.exe $(OBJS) volume.cpp +- chmod 777 Volume.exe +- mv Volume.exe ../bin ++ $(CXX) $(CXXFLAGS) -c -o volume.o volume.cpp ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o Volume $(OBJS) volume.o ++ chmod 755 Volume ++ mv Volume ../bin + + utils-main.o: utils-main.cpp +- $(CC) $(FLAGS) -c -o utils-main.o utils-main.cpp ++ $(CXX) $(CXXFLAGS) -c -o utils-main.o utils-main.cpp + + utils-output.o: utils-main.o utils-output.cpp +- $(CC) $(FLAGS) -c -o utils-output.o utils-output.cpp ++ $(CXX) $(CXXFLAGS) -c -o utils-output.o utils-output.cpp + + utils-mrc.o: utils-mrc.cpp +- $(CC) $(FLAGS) -c -o utils-mrc.o utils-mrc.cpp ++ $(CXX) $(CXXFLAGS) -c -o utils-mrc.o utils-mrc.cpp ++ ++install: ++ install -d $(DESTDIR)/usr/bin ++ install ../bin/* $(DESTDIR)/usr/bin/ + + clean: + rm -fv *.o *~ + + distclean: +- rm -fv *.o ../bin/*.exe *~ ++ rm -fv *.o ../bin/* *~ + + none: + echo "Please type make xxx, where xxx = cav, cha, fsv, sol, tun, vdw, or vol" diff --git a/sci-chemistry/threeV/threeV-1.2-r1.ebuild b/sci-chemistry/threeV/threeV-1.2-r1.ebuild new file mode 100644 index 000000000000..1d4a1e1f3466 --- /dev/null +++ b/sci-chemistry/threeV/threeV-1.2-r1.ebuild @@ -0,0 +1,40 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit toolchain-funcs + +DESCRIPTION="3V: Voss Volume Voxelator" +HOMEPAGE="http://geometry.molmovdb.org/3v/" +SRC_URI="http://geometry.molmovdb.org/3v/3v-${PV}.tgz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" +IUSE="" + +PDEPEND="sci-chemistry/msms-bin" +# sci-chemistry/usf-rave" + +S="${WORKDIR}/3v-${PV}/src" + +PATCHES=( + "${FILESDIR}"/${P}-gentoo.patch + "${FILESDIR}"/${P}-format-security.patch +) + +src_prepare() { + default + tc-export CXX + emake distclean + + export MAKEOPTS+=" V=1" +} + +src_install() { + emake DESTDIR="${ED}" install + + cd .. || die + dodoc AUTHORS ChangeLog QUICKSTART README TODO VERSION +} diff --git a/sci-chemistry/threeV/threeV-1.2.ebuild b/sci-chemistry/threeV/threeV-1.2.ebuild deleted file mode 100644 index 8ed375a4876a..000000000000 --- a/sci-chemistry/threeV/threeV-1.2.ebuild +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright 1999-2010 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -EAPI="3" - -inherit eutils toolchain-funcs - -DESCRIPTION="3V: Voss Volume Voxelator" -HOMEPAGE="http://geometry.molmovdb.org/3v/" -SRC_URI="http://geometry.molmovdb.org/3v/3v-${PV}.tgz" - -LICENSE="GPL-2" -SLOT="0" -KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" -IUSE="" - -PDEPEND="sci-chemistry/msms-bin" -# sci-chemistry/usf-rave" - -S="${WORKDIR}/3v-${PV}/src" - -src_prepare() { - epatch "${FILESDIR}"/${PV}-gentoo.patch - tc-export CXX - emake distclean || die -} - -src_install() { - emake DESTDIR="${ED}" install || die - - cd .. - dodoc AUTHORS ChangeLog QUICKSTART README TODO VERSION || die -} -- cgit v1.2.3-65-gdbad