Skip to content

Commit

Permalink
boilerplate for enabling packaging using coq_makefile (#34)
Browse files Browse the repository at this point in the history
  • Loading branch information
palmskog authored Jan 17, 2025
1 parent ab2d6c5 commit 8ff85ab
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 14 deletions.
17 changes: 3 additions & 14 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,15 +1,4 @@
all: default doc
default: Makefile.coq
make -f Makefile.coq
# -*- Makefile -*-

clean: Makefile.coq
make -f Makefile.coq clean
rm -f Makefile.coq

install: Makefile.coq
make -f Makefile.coq install

Makefile.coq: _CoqProject
coq_makefile -f _CoqProject -o Makefile.coq

.PHONY: coq clean install doc
# --------------------------------------------------------------------
include Makefile.common
99 changes: 99 additions & 0 deletions Makefile.common
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# -*- Makefile -*-

######################################################################
# USAGE: #
# The rules this-config::, this-build::, this-distclean::, #
# pre-makefile::, this-clean:: and __always__:: may be extended #
# Additionally, the following variables may be customized: #
SUBDIRS?=
COQBIN?=$(dir $(shell which coqtop))
COQMAKEFILE?=$(COQBIN)coq_makefile
COQDEP?=$(COQBIN)coqdep
COQPROJECT?=_CoqProject
COQMAKEOPTIONS?=
COQMAKEFILEOPTIONS?=
V?=
VERBOSE?=V
######################################################################

# local context: -----------------------------------------------------
.PHONY: all config build clean distclean __always__
.SUFFIXES:

H:= $(if $(VERBOSE),,@) # not used yet
TOP = $(dir $(lastword $(MAKEFILE_LIST)))
COQMAKE = $(MAKE) -f Makefile.coq $(COQMAKEOPTIONS)
BRANCH_coq:= $(shell $(COQBIN)coqtop -v | head -1 | grep -E '(trunk|master)' \
| wc -l | sed 's/ *//g')

# coq version:
ifneq "$(BRANCH_coq)" "0"
COQVVV:= dev
else
COQVVV:=$(shell $(COQBIN)coqtop --print-version | cut -d" " -f1)
endif

COQV:= $(shell echo $(COQVVV) | cut -d"." -f1)
COQVV:= $(shell echo $(COQVVV) | cut -d"." -f1-2)

# all: ---------------------------------------------------------------
all: config build

# Makefile.coq: ------------------------------------------------------
.PHONY: pre-makefile

Makefile.coq: pre-makefile $(COQPROJECT) Makefile
$(COQMAKEFILE) $(COQMAKEFILEOPTIONS) -f $(COQPROJECT) -o Makefile.coq

# Global config, build, clean and distclean --------------------------
config: sub-config this-config

build: sub-build this-build

clean: sub-clean this-clean

distclean: sub-distclean this-distclean

# Local config, build, clean and distclean ---------------------------
.PHONY: this-config this-build this-distclean this-clean

this-config:: __always__

this-build:: this-config Makefile.coq
+$(COQMAKE)

this-distclean:: this-clean
rm -f Makefile.coq Makefile.coq.conf Makefile.coq

this-clean:: __always__
@if [ -f Makefile.coq ]; then $(COQMAKE) cleanall; fi

# Install target -----------------------------------------------------
.PHONY: install

install: __always__ Makefile.coq
$(COQMAKE) install
# counting lines of Coq code -----------------------------------------
.PHONY: count

COQFILES = $(shell grep '.v$$' $(COQPROJECT))

count:
@coqwc $(COQFILES) | tail -1 | \
awk '{printf ("%d (spec=%d+proof=%d)\n", $$1+$$2, $$1, $$2)}'
# Additionally cleaning backup (*~) files ----------------------------
this-distclean::
rm -f $(shell find . -name '*~')

# Make in SUBDIRS ----------------------------------------------------
ifdef SUBDIRS
sub-%: __always__
@set -e; for d in $(SUBDIRS); do +$(MAKE) -C $$d $(@:sub-%=%); done
else
sub-%: __always__
@true
endif

# Make of individual .vo ---------------------------------------------
%.vo: __always__ Makefile.coq
+$(COQMAKE) $@
29 changes: 29 additions & 0 deletions examples/Make
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
-Q . htt

-arg -w -arg -notation-overridden
-arg -w -arg -redundant-canonical-projection

# release-specific arguments
-arg -w -arg -notation-incompatible-prefix # specific to coq8.20.0
-arg -w -arg -deprecated-from-Coq # specific to coq8.21
-arg -w -arg -deprecated-dirpath-Coq # specific to coq8.21

exploit.v
gcd.v
counter.v
llist.v
dlist.v
array.v
queue.v
cyclic.v
stack.v
bintree.v
bst.v
kvmaps.v
hashtab.v
bubblesort.v
quicksort.v
congmath.v
congprog.v
tree.v
union_find.v
7 changes: 7 additions & 0 deletions examples/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# -*- Makefile -*-

# setting variables
COQPROJECT?=Make

# Main Makefile
include ../Makefile.common
14 changes: 14 additions & 0 deletions htt/Make
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
-Q . htt

-arg -w -arg -notation-overridden
-arg -w -arg -redundant-canonical-projection

# release-specific arguments
-arg -w -arg -notation-incompatible-prefix # specific to coq8.20.0
-arg -w -arg -deprecated-from-Coq # specific to coq8.21
-arg -w -arg -deprecated-dirpath-Coq # specific to coq8.21

options.v
domain.v
model.v
heapauto.v
7 changes: 7 additions & 0 deletions htt/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# -*- Makefile -*-

# setting variables
COQPROJECT?=Make

# Main Makefile
include ../Makefile.common

0 comments on commit 8ff85ab

Please sign in to comment.