From 1ef65e1b66f2ea90d336b4df045e949c2dadab3c Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Tue, 31 Jan 2017 14:55:03 +0100
Subject: [PATCH] Add makefiles and license.

---
 .gitignore   | 13 +++++++++++++
 LICENSE      | 29 +++++++++++++++++++++++++++++
 Makefile     | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 _CoqProject  | 40 ++++++++++++++++++++++++++++++++++++++++
 awk.Makefile | 35 +++++++++++++++++++++++++++++++++++
 5 files changed, 163 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 LICENSE
 create mode 100644 Makefile
 create mode 100644 _CoqProject
 create mode 100644 awk.Makefile

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..81e7db3d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,13 @@
+*.vo
+*.vio
+*.v.d
+*.glob
+*.cache
+*.aux
+\#*\#
+.\#*
+*~
+*.bak
+.coq-native/
+Makefile.coq
+*.crashcoqide
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..0b9458c2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,29 @@
+All files in this development are distributed under the terms of the BSD
+license, included below.
+
+------------------------------------------------------------------------------
+
+                            BSD LICENCE
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the <organization> nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..db003e17
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,46 @@
+# Process flags
+ifeq ($(Y), 1)
+	YFLAG=-y
+endif
+
+# Determine Coq version
+COQ_VERSION=$(shell coqc --version | egrep -o 'version 8.[0-9]' | egrep -o '8.[0-9]')
+COQ_MAKEFILE_FLAGS ?=
+
+ifeq ($(COQ_VERSION), 8.6)
+	COQ_MAKEFILE_FLAGS += -arg -w -arg -notation-overridden,-redundant-canonical-projection,-several-object-files
+endif
+
+# Forward most targets to Coq makefile (with some trick to make this phony)
+%: Makefile.coq phony
+	+@make -f Makefile.coq $@
+
+all: Makefile.coq
+	+@make -f Makefile.coq all
+
+clean: Makefile.coq
+	+@make -f Makefile.coq clean
+	find theories \( -name "*.v.d" -o -name "*.vo" -o -name "*.aux" -o -name "*.cache" -o -name "*.glob" -o -name "*.vio" \) -print -delete
+	rm -f Makefile.coq
+
+# Create Coq Makefile. POSIX awk can't do in-place editing, but coq_makefile wants the real filename, so we do some file gymnastics.
+Makefile.coq: _CoqProject Makefile awk.Makefile
+	coq_makefile $(COQ_MAKEFILE_FLAGS) -f _CoqProject -o Makefile.coq
+	mv Makefile.coq Makefile.coq.tmp && awk -f awk.Makefile Makefile.coq.tmp > Makefile.coq && rm Makefile.coq.tmp
+
+# Install build-dependencies
+build-dep:
+	build/opam-pins.sh < opam.pins
+	opam upgrade $(YFLAG) # it is not nice that we upgrade *all* packages here, but I found no nice way to upgrade only those that we pinned
+	opam pin add coq-prelude "$$(pwd)#HEAD" -k git -n -y
+	opam install coq-prelude --deps-only $(YFLAG)
+	opam pin remove coq-prelude
+
+# Some files that do *not* need to be forwarded to Makefile.coq
+Makefile: ;
+_CoqProject: ;
+awk.Makefile: ;
+
+# Phony targets (i.e. targets that should be run no matter the timestamps of the involved files)
+phony: ;
+.PHONY: all clean phony
diff --git a/_CoqProject b/_CoqProject
new file mode 100644
index 00000000..a7869b13
--- /dev/null
+++ b/_CoqProject
@@ -0,0 +1,40 @@
+-Q theories stdpp
+theories/option.v
+theories/fin_map_dom.v
+theories/bset.v
+theories/fin_maps.v
+theories/vector.v
+theories/pmap.v
+theories/stringmap.v
+theories/fin_collections.v
+theories/mapset.v
+theories/proof_irrel.v
+theories/hashset.v
+theories/pretty.v
+theories/countable.v
+theories/orders.v
+theories/natmap.v
+theories/strings.v
+theories/relations.v
+theories/collections.v
+theories/listset.v
+theories/streams.v
+theories/gmap.v
+theories/gmultiset.v
+theories/base.v
+theories/tactics.v
+theories/prelude.v
+theories/listset_nodup.v
+theories/finite.v
+theories/numbers.v
+theories/nmap.v
+theories/zmap.v
+theories/coPset.v
+theories/lexico.v
+theories/set.v
+theories/decidable.v
+theories/list.v
+theories/functions.v
+theories/hlist.v
+theories/sorting.v
+
diff --git a/awk.Makefile b/awk.Makefile
new file mode 100644
index 00000000..09ded0aa
--- /dev/null
+++ b/awk.Makefile
@@ -0,0 +1,35 @@
+# awk program that patches the Makefile generated by Coq.
+
+# Detect the name this project will be installed under.
+/\$\(COQLIBINSTALL\)\/.*\/\$\$i/ {
+# Wow, POSIX awk is really broken.  I mean, isn't it supposed to be a text processing language?
+# And there is not even a way to access the matched groups of a regexp...?!? Lucky enough,
+# we can just split the string at '/' here.
+	split($0, PIECES, /\//);
+	PROJECT=PIECES[2];
+}
+
+# Patch the uninstall target to work properly, and to also uninstall stale files.
+# Also see <https://coq.inria.fr/bugs/show_bug.cgi?id=4907>.
+/^uninstall:/ {
+	print "uninstall:";
+	print "\tif [ -d \"$(DSTROOT)\"$(COQLIBINSTALL)/"PROJECT"/ ]; then find \"$(DSTROOT)\"$(COQLIBINSTALL)/"PROJECT"/ \\( -name \"*.vo\" -o -name \"*.v\" -o -name \"*.glob\" -o \\( -type d -empty \\) \\) -print -delete; fi";
+	getline;
+	next
+}
+
+# Patch vio2vo to (a) run "make quick" with the same number of jobs, ensuring
+# that the .vio files are up-to-date, and (b) only schedule vio2vo for those
+# files where the .vo is *older* than the .vio.
+/^vio2vo:/ {
+	print "vio2vo:";
+	print "\t@make -j $(J) quick"
+	print "\t@VIOFILES=$$(for file in $(VOFILES:%.vo=%.vio); do vofile=\"$$(echo \"$$file\" | sed \"s/\\.vio/.vo/\")\"; if [ \"$$vofile\" -ot \"$$file\" -o ! -e \"$$vofile\" ]; then echo -n \"$$file \"; fi; done); \\"
+	print "\t echo \"VIO2VO: $$VIOFILES\"; \\"
+	print "\t if [ -n \"$$VIOFILES\" ]; then $(COQC) $(COQDEBUG) $(COQFLAGS) -schedule-vio2vo $(J) $$VIOFILES; fi"
+	getline;
+	next
+}
+
+# This forwards all unchanged lines
+1
-- 
GitLab