-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Makefile
155 lines (127 loc) · 4.94 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
.PHONY: build buildsite check clean cleanvars coverage docs getwd initialize install installcranpkg installgithubpkg installedpkgs load removepkg render setwd start test usegit
.DEFAULT_GOAL := help
# The directory where R files are stored
R_DIR = ./R
define BROWSER_PYSCRIPT
import os, webbrowser, sys
from urllib.request import pathname2url
# The input is expected to be the full HTML filename
filename = sys.argv[1]
filepath = os.path.abspath(os.path.join("./vignettes/", filename))
webbrowser.open("file://" + pathname2url(filepath))
endef
export BROWSER_PYSCRIPT
define PRINT_HELP_PYSCRIPT
import re, sys
for line in sys.stdin:
match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line)
if match:
target, help = match.groups()
print("%-20s %s" % (target, help))
endef
export PRINT_HELP_PYSCRIPT
BROWSER := python3 -c "$$BROWSER_PYSCRIPT"
build: setwd ## build package
Rscript -e "devtools::build('.')"
buildsite: setwd ## create a website for the package
Rscript -e "pkgdown::build_site('.')"
cp -rf docs/* ~/Documents/Pro_Website/Techtonique.github.io/ahead/
check: clean setwd ## check package
@read -p "Enter options (e.g: --no-tests --no-examples) or leave empty: " pckgcheckoptions; \
if [ -z "$$pckgcheckoptions" ]; then \
Rscript -e "try(devtools::check('.'), silent=TRUE)" && exit 0; \
fi; \
Rscript -e "try(devtools::check('.', args=base::strsplit('$$pckgcheckoptions', ' ')[[1]]), silent=TRUE)";
clean: ## remove all build, and artifacts
rm -f .Rhistory
rm -f *.RData
rm -f *.Rproj
rm -rf .Rproj.user
rm -f src/*.o
rm -f src/*.so
rm -f vignettes/*.html
cleanvars: setwd ## remove all local variables
@read -p "Do you want to remove all local variables in R? (1-yes, 2-no): " choice; \
if [ $$choice -eq 1 ]; then \
echo "Removing all local variables..."; \
Rscript -e "rm(list=ls())"; \
else \
echo "Keeping the variables."; \
fi
coverage: ## get test coverage
Rscript -e "devtools::test_coverage('.')"
create: setwd ## create a new package in current directory
Rscript -e "usethis::create_package(path = getwd(), rstudio = FALSE)"
rm -f .here
docs: clean setwd ## generate docs
Rscript -e "devtools::document('.')"
getwd: ## get current directory
Rscript -e "getwd()"
install: clean setwd docs ## install current package
Rscript -e "try(devtools::install('.'), silent = FALSE)"
@read -p "Start R session? (y/n): " choice; \
if [ "$$choice" = "y" ]; then \
$(MAKE) start; \
fi
installcranpkg: setwd ## install a package
@read -p "Enter the name of package to be installed: " pckg; \
if [ -z "$$pckg" ]; then \
echo "Package name cannot be empty."; \
exit 1; \
fi; \
Rscript -e "utils::install.packages('$$pckg', repos='https://cloud.r-project.org')";
installgithubpkg: setwd ## install a package from GitHub ('repository/pkgname')
@read -p "Enter the name of package to be installed ('repository/pkgname'): " pckg; \
if [ -z "$$pckg" ]; then \
echo "Package name cannot be empty."; \
exit 1; \
fi; \
Rscript -e "devtools::install_github('$$pckg')";
installedpkgs: ## list of installed packages
Rscript -e "utils::installed.packages()[,c(10, 16)]"
initialize: setwd ## initialize: install packages devtools, usethis, pkgdown and rmarkdown
Rscript -e "utils::install.packages(c('devtools', 'remotes', 'roxygen2', 'usethis', 'pkgdown', 'rmarkdown'), repos='https://cloud.r-project.org')"
help: ## print menu with all options
@python3 -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST)
load: clean setwd docs ## load all and restart (when developing the package)
Rscript -e "devtools::load_all('.')"
@read -p "Start R session? (y/n): " choice; \
if [ "$$choice" = "y" ]; then \
$(MAKE) start; \
fi
removepkg: ## remove package
@read -p "Enter the name of package to be removed: " pckg; \
if [ -z "$$pckg" ]; then \
echo "Package name cannot be empty."; \
exit 1; \
fi; \
Rscript -e "utils::remove.packages('$$pckg')"; \
Rscript -e "base::unlink(paste0(.libPaths()[1], '/$$pckg'), recursive = TRUE, force = TRUE)"
render: ## run R markdown file in /vignettes, open rendered HTML
@files=$$(ls -1 ./vignettes/*.Rmd | sort); \
i=0; \
echo "Available Rmd files:"; \
for file in $$files; do \
echo "$$i: $$(basename $$file .Rmd)"; \
i=$$((i+1)); \
done; \
read -p "Enter the number of the Rmd file to render: " filenum; \
filename=$$(echo $$files | cut -d' ' -f$$((filenum+1))); \
filename=$$(basename $$filename .Rmd); \
Rscript -e "rmarkdown::render(paste0('./vignettes/', '$$filename', '.Rmd'))"; \
python3 -c "$$BROWSER_PYSCRIPT" "$$filename.html"
setwd: ## set working directory to current directory
Rscript -e "setwd('.')"
start: ## start or restart R session
Rscript -e "system('R')"
test: ## runs package tests
Rscript -e "devtools::test('.')"
usegit: ## initialize Git repo and initial commit
@read -p "Enter the first commit message: " message; \
if [ -z "$$message" ]; then \
echo "Commit message cannot be empty."; \
exit 1; \
fi; \
Rscript -e "usethis::use_git('$$message')"; \
git add .; \
git commit -m "$$message"