#+TITLE: sdp (project) makefile
#+AUTHOR: Ralph Amissah
#+EMAIL: ralph.amissah@gmail.com
#+STARTUP: indent content
#+LANGUAGE: en
#+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+OPTIONS: author:nil email:nil creator:nil timestamp:nil
#+PROPERTY: header-args :padline no :exports code :noweb yes
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+FILETAGS: :sdp:rel:makefile:
#+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)

[[./org/sdp.org][sdp.org]]  [[./org/][org/]]

* sdp makefile                                                     :makefile:
** settings [+2]                                                  :settings:
*** git version stamp                                         :git:version:

#+BEGIN_SRC makefile :tangle makefile
PROJECT_VERSION :=$(shell echo `git describe --long --tags | sed -e "s/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g"`)
#+END_SRC

*** dub (build tool)                                                  :dub:

#+BEGIN_SRC makefile :tangle makefile
DUB=dub
DUB_FLAGS=-v --force --compiler=
#+END_SRC

*** Project Details                                           :project:sdp:

#+BEGIN_SRC makefile :tangle makefile
PRG_NAME=sdp
PRG_SRC=$(PRG_NAME).d
PRG_SRCDIR=./src
PRG_BIN=$(PRG_NAME)
PRG_BINDIR=./bin
PRG_DOCDIR=./docs
#+END_SRC

*** Emacs Org settings                          :settings:emacs:org:tangle:

#+BEGIN_SRC makefile :tangle makefile
EMACSLISP=/usr/share/emacs/site-lisp
ORG_VER_AVAILABLE=$(shell echo `ls -d ~/.emacs.d/elpa/org-???????? | cut -d '-' -f2`)
EMACSLISP_ORG=~/.emacs.d/elpa/org-$($(shell echo $(ORG_VER_AVAILABLE)))
ORG_CONTRIB_VER_AVAILABLE=$(shell echo `ls -d ~/.emacs.d/elpa/org-plus-???????? | cut -d '-' -f2`)
EMACSLISP_ORG_CONTRIB=~/.emacs.d/elpa/org-plus-contrib-$($(shell echo $(ORG_CONTRIB_VER_AVAILABLE)))
ORGFILELIST=$(shell echo `ls -1 maker.org org/*.org`)
ORGFILES=""
ORGDIR=$(shell echo `pwd`)
#+END_SRC

** _make_ commands [+2]                                        :make:commands:

- build commands
  - build
  - debug
  - release
- init, clean, distclean etc.
  - init
  - clean
  - expunge
  - distclean
  - distclean_and_init
- org babel tangle
  - tangle
- git snapshot
  - gitsnapshot

*** build commands [+1]                                     :build:compile:
**** _dub_ build rebuild                                               :dub:
***** all compiler builds                               :all:dmd:gdc:ldc:
****** all builds
******* quick                                                   :quick:
******** default                                             :default:
#+BEGIN_SRC makefile :tangle makefile
all: dmd ldc gdc
#+END_SRC

******** version                                             :version:

#+BEGIN_SRC makefile :tangle makefile
all_ver: dmd_ver ldc_ver gdc_ver
#+END_SRC

******** debug                                                 :debug:

#+BEGIN_SRC makefile :tangle makefile
all_debug: dmd_debug gdc_debug ldc_debug
#+END_SRC

******* clean & tangle                                   :clean:tangle:
******** default                                             :default:

#+BEGIN_SRC makefile :tangle makefile
all_clean: clean tangle dmd ldc gdc
#+END_SRC

******** version                                             :version:

#+BEGIN_SRC makefile :tangle makefile
all_ver_clean: clean tangle dmd_ver ldc_ver gdc_ver
#+END_SRC

******** debug                                                 :debug:

#+BEGIN_SRC makefile :tangle makefile
all_debug_ver: dmd_debug_ver gdc_debug_ver ldc_debug_ver
all_debug_clean_ver: clean tangle dmd_debug_ver gdc_debug_ver ldc_debug_ver
#+END_SRC

***** individual compiler builds                                   :each:
****** dmd                                                         :dmd:
******* quick                                                   :quick:
******** default                                             :default:

#+BEGIN_SRC makefile :tangle makefile
dmd:
	$(DUB) --compiler=dmd --config=sdp-dmd
#+END_SRC

******** version                                             :version:

#+BEGIN_SRC makefile :tangle makefile
dmd_ver:
	$(DUB) --compiler=dmd --config=sdp-dmd-version
	mv bin/sdp-dmd-ver bin/sdp-dmd-$(PROJECT_VERSION)
	notify-send -t 0 'D dmd compiled test release executable ready' 'sdp-dmd-$(PROJECT_VERSION)'
#+END_SRC

******** debug                                                 :debug:

#+BEGIN_SRC makefile :tangle makefile
dmd_debug:
	$(DUB) --compiler=dmd --config=sdp-dmd-debug
#+END_SRC

******* clean & tangle                                   :clean:tangle:

#+BEGIN_SRC makefile :tangle makefile
dmd_rel: expunge skel tangle
	$(DUB) --compiler=dmd --config=sdp-release
dmd_rel_tangle: tangle
	$(DUB) --compiler=dmd --config=sdp-dmd
dmd_rel_expunge_tangle: expunge skel tangle dmd_rel_tangle
dmd_debug_tangle: tangle
	$(DUB) --compiler=dmd --config=sdp-dmd-debug
dmd_debug_docs: clean_docs tangle
	$(DUB) --compiler=dmd --config=sdp-dmd-debug-docs
dmd_debug_unittest: tangle
	$(DUB) --compiler=dmd --config=sdp-dmd-debug-unittest
dmd_debug_clean: tangle
	$(DUB) --compiler=dmd --config=sdp-debug-clean
dmd_debug_ver:
	$(DUB) --compiler=dmd --config=sdp-dmd-debug-version
	mv bin/sdp-dmd-debug-ver bin/sdp-dmd-debug-$(PROJECT_VERSION)
	notify-send -t 0 'D dmd compiled test release executable ready' 'sdp-dmd-debug-$(PROJECT_VERSION)'
dmd_debug_clean_ver: clean tangle dmd_debug_clean_ver
#+END_SRC

****** gdc                                                         :gdc:
******* quick                                                   :quick:
******** default                                             :default:

#+BEGIN_SRC makefile :tangle makefile
gdc:
	$(DUB) --compiler=gdc --config=sdp-gdc
#+END_SRC

******** version                                             :version:

#+BEGIN_SRC makefile :tangle makefile
gdc_ver:
	$(DUB) --compiler=gdc --config=sdp-gdc-version
	mv bin/sdp-gdc-ver bin/sdp-gdc-$(PROJECT_VERSION)
	notify-send -t 0 'D gdc compiled test release executable ready' 'sdp-gdc-$(PROJECT_VERSION)'
#+END_SRC

******** debug                                                 :debug:

#+BEGIN_SRC makefile :tangle makefile
gdc_debug:
	$(DUB) --compiler=gdc --config=sdp-gdc-debug
#+END_SRC

******* clean & tangle                                   :clean:tangle:

#+BEGIN_SRC makefile :tangle makefile
gdc_rel: expunge skel tangle
	$(DUB) --compiler=gdc --config=sdp-release
gdc_rel_tangle: tangle
	$(DUB) --compiler=gdc --config=sdp-gdc
gdc_rel_expunge_tangle: expunge skel tangle gdc_rel_tangle
gdc_debug_tangle: tangle
	$(DUB) --compiler=gdc --config=sdp-gdc-debug
gdc_debug_docs: clean_docs tangle
	$(DUB) --compiler=gdc --config=sdp-gdc-debug-docs
gdc_debug_unittest: tangle
	$(DUB) --compiler=gdc --config=sdp-gdc-debug-unittest
gdc_debug_clean: tangle
	$(DUB) --compiler=gdc --config=sdp-debug-clean
gdc_debug_ver:
	$(DUB) --compiler=gdc --config=sdp-dmd-debug-version
	mv bin/sdp-gdc-debug-ver bin/sdp-gdc-debug-$(PROJECT_VERSION)
	notify-send -t 0 'D gdc compiled test release executable ready' 'sdp-gdc-debug-$(PROJECT_VERSION)'
gdc_debug_clean_ver: clean tangle gdc_debug_ver
#+END_SRC

****** ldc                                                         :ldc:
******* quick                                                   :quick:
******** default                                             :default:

#+BEGIN_SRC makefile :tangle makefile
ldc:
	$(DUB) --compiler=ldc2 --config=sdp-ldc
#+END_SRC

******** version                                             :version:

#+BEGIN_SRC makefile :tangle makefile
ldc_ver:
	$(DUB) --compiler=ldc2 --config=sdp-ldc-version
	mv bin/sdp-ldc-ver bin/sdp-ldc-$(PROJECT_VERSION)
	notify-send -t 0 'D ldc2 compiled test release executable ready' 'sdp-ldc-$(PROJECT_VERSION)'
#+END_SRC

******** debug                                                 :debug:

#+BEGIN_SRC makefile :tangle makefile
ldc_debug:
	$(DUB) --compiler=ldc2 --config=sdp-ldc-debug
#+END_SRC

******* clean & tangle                                   :clean:tangle:

#+BEGIN_SRC makefile :tangle makefile
ldc_rel: expunge skel tangle
	$(DUB) --compiler=ldc2 --config=sdp-release
ldc_rel_tangle: tangle
	$(DUB) --compiler=ldc2 --config=sdp-ldc
ldc_rel_expunge_tangle: expunge skel tangle ldc_rel_tangle
ldc_debug_tangle: tangle
	$(DUB) --compiler=ldc2 --config=sdp-ldc-debug
ldc_debug_docs: clean_docs tangle
	$(DUB) --compiler=ldc2 --config=sdp-ldc-debug-docs
ldc_debug_unittest: tangle
	$(DUB) --compiler=ldc2 --config=sdp-ldc-debug-unittest
ldc_debug_clean: tangle
	$(DUB) --compiler=ldc2 --config=sdp-debug-clean
ldc_debug_ver:
	$(DUB) --compiler=ldc2 --config=sdp-ldc-debug-version
	mv bin/sdp-ldc-debug-ver bin/sdp-ldc-debug-$(PROJECT_VERSION)
	notify-send -t 0 'D ldc2 compiled test release executable ready' 'sdp-ldc-debug-$(PROJECT_VERSION)'
ldc_debug_clean_ver: clean tangle ldc_debug_ver
#+END_SRC

***** generic
****** init clean distclean etc.                                 :clean:

#+BEGIN_SRC makefile :tangle makefile
skel:
	mkdir -p $(PRG_SRCDIR)/$(PRG_NAME)/meta; \
	mkdir -p $(PRG_SRCDIR)/$(PRG_NAME)/conf; \
	mkdir -p $(PRG_SRCDIR)/$(PRG_NAME)/output; \
	mkdir -p $(PRG_SRCDIR)/$(PRG_NAME); \
	mkdir -p $(PRG_BINDIR);
init: skel
clean:
	rm -rf $(PRG_SRCDIR); \
	rm -rf $(PRG_DOCDIR);
clean_bin:
	rm $(PRG_BINDIR)/*
clean_src:
	rm -rf $(PRG_SRCDIR);
clean_docs:
	rm -rf $(PRG_DOCDIR)
expunge:
	rm -f dub.selections.json; \
	rm -rf $(PRG_SRCDIR); \
	rm -rf $(PRG_BINDIR); \
	rm -rf $(PRG_DOCDIR);
distclean: expunge
distclean_and_init: expunge
	mkdir -p $(PRG_SRCDIR)/$(PRG_NAME); \
	mkdir -p $(PRG_BINDIR);
#+END_SRC

****** version                                                 :version:

#+BEGIN_SRC makefile :tangle makefile
ver:
	echo sdp-$(PROJECT_VERSION)
#+END_SRC

****** tangle build rebuild                         :clean:tangle:build:

#+BEGIN_SRC makefile :tangle makefile
clean_tangle_build: clean tangle build
tangle_build: tangle build
build: $(PRG_SRCDIR)/$(PRG_SRC)
	$(DC) $(DC_FLAGS) \
	$(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \
	$(PRG_SRCDIR)/$(PRG_SRC)
rebuild: $(PRG_SRCDIR)/$(PRG_SRC) $(PRG_BINDIR)/$(PRG_BIN).o clean build
makefile_new:
	make -k tangle_maker
restart: clean tangle
#+END_SRC

*** org babel tangle batch process command                         :tangle:
**** tangle: org babel tangle *.org

#+BEGIN_SRC makefile :tangle makefile
tangle: skel
	for f in $(ORGFILELIST); do \
		ORGFILES="$$ORGFILES \"$$f\""; \
	done; \
	emacs --batch -Q -q \
	--eval "(progn \
		(add-to-list 'load-path \
			(expand-file-name \"$(EMACSLISP)\")) \
		(add-to-list 'load-path \
			(expand-file-name \"$(EMACSLISP_ORG)\" t)) \
		(add-to-list 'load-path \
			(expand-file-name \"$(EMACSLISP_ORG_CONTRIB)\" t)) \
		(require 'org)(require 'ob)(require 'ob-tangle) \
		(mapc (lambda (file) \
			(find-file (expand-file-name file \"$(ORGDIR)\")) \
				(setq-local org-src-preserve-indentation t) \
			(org-babel-tangle) \
			(kill-buffer)) '($$ORGFILES)))" 2>&1
#+END_SRC

**** tangle maker: org babel tangle maker.org, makefile new

#+BEGIN_SRC makefile :tangle makefile
tangle_maker:
	for f in $(ORGFILELIST); do \
		ORGFILES="\"maker.org\""; \
	done; \
	emacs --batch -Q -q \
	--eval "(progn \
		(add-to-list 'load-path \
			(expand-file-name \"$(EMACSLISP)\")) \
		(add-to-list 'load-path \
			(expand-file-name \"$(EMACSLISP_ORG)\" t)) \
		(add-to-list 'load-path \
			(expand-file-name \"$(EMACSLISP_ORG_CONTRIB)\" t)) \
		(require 'org)(require 'ob)(require 'ob-tangle) \
		(mapc (lambda (file) \
			(find-file (expand-file-name file \".\")) \
				(setq-local org-src-preserve-indentation t) \
			(org-babel-tangle) \
			(kill-buffer)) '($$ORGFILES)))" 2>&1
#+END_SRC

*** git snapshot

#+BEGIN_SRC makefile :tangle makefile
gitsnapshot: distclean tangle
	git commit -a
#+END_SRC

** phony                                                             :phony:

#+BEGIN_SRC makefile :tangle makefile
.PHONY : all build rebuild debug release \
	distclean init \
	tangle gitsnapshot
#+END_SRC

* dub (configuration)                                            :dub:config:

Every DUB package should contain a [[http://code.dlang.org/package-format?lang=json][dub.json]] (or [[http://code.dlang.org/package-format?lang=sdl][dub.sdl]])

** dub.sdl                                                         :sdl:sdp:
*** header                                                         :header:

#+BEGIN_SRC sh  :tangle dub.sdl
name              "sdp"
description       "sisu document parser"
homepage          "http://sisudoc.org"
authors           "Ralph Amissah"
copyright         "Copyright © 2016 Ralph Amissah"
license           "AGPL-3+"
targetPath        "./bin"
#sourcePath        "./src/sdp"
stringImportPaths "./views"
buildRequirements "allowWarnings"
dependency        "sdlang-d"  version="~>0.10.1"
dependency        "d2sqlite3" version="~>0.13.1"  # https://code.dlang.org/packages/d2sqlite3  http://biozic.github.io/d2sqlite3/d2sqlite3.html
subconfiguration  "d2sqlite3" "all-included"
dependency        "archive"   version="~>0.6.0"   # http://code.dlang.org/packages/archive     https://github.com/rcythr/archive
#+END_SRC

*** generic                                                       :generic:
**** sdp-release (sdp)                                           :release:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-release" {
  name                 "release"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp"
  dflags               "-J=views" "-I=src/sdp"
  buildOptions         "verbose" "releaseMode" "optimize" "inline"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D release executable ready' 'sdp'"
}
#+END_SRC

**** sdp-debug                                                     :debug:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-debug" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-debug"
  dflags               "-g" "-J=views" "-I=src/sdp"
  #lflags               "ld.gold"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  debugVersions        "dumpdoc"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-debug'"
}
#+END_SRC

**** sdp-tmp

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-tmp" {
  name                 "tmp"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-tmp"
  dflags               "-J=views" "-I=src/sdp"
  #lflags               "ld.gold"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  debugVersions        "tmp"
  debugVersions        "crap"
  debugVersions        "header"
  debugVersions        "header1"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-tmp'"
}
#+END_SRC

**** sdp-debug-clean                                         :debug:clean:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-debug-clean" {
  name                 "debug-clean"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-debug-clean"
  dflags               "-J=views" "-I=src/sdp"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-debug-clean'"
}
#+END_SRC

*** dmd                                                               :dmd:
**** sdp-dmd                                                     :default:
***** sdp-dmd

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-dmd" {
  name                 "dmd"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-dmd"
  dflags               "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" # "releaseMode"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D dmd compiled test release executable ready' 'sdp-dmd'"
}
#+END_SRC

***** sdp-dmd-version

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-dmd-version" {
  name                 "dmd"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-dmd-ver"
  dflags               "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" # "releaseMode"
}
#+END_SRC

***** sdp-dmd-release

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-dmd-release" {
  name                 "dmd"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-dmd"
  dflags               "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" "releaseMode"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D dmd compiled test release executable ready' 'sdp-dmd'"
}
#+END_SRC

**** sdp-dmd-debug                                                 :debug:
***** sdp-dmd-debug

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-dmd-debug" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-dmd-debug"
  dflags               "-g" "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  debugVersions        "dumpdoc"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-dmd-debug'"
}
#+END_SRC

***** sdp-dmd-debug-version                                     :version:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-dmd-debug-version" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-dmd-debug-ver"
  dflags               "-g" "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  debugVersions        "dumpdoc"
}
#+END_SRC

***** sdp-dmd-debug-unittest                                   :unittest:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-dmd-debug-unittest" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-dmd-debug"
  dflags               "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "unittests" "optimize"
  debugVersions        "checkdoc" "summary"
  debugVersions        "dumpdoc"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-dmd-debug'"
}
#+END_SRC

***** sdp-dmd-debug-docs                                           :docs:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-dmd-debug-docs" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-dmd-debug"
  dflags               "-J=views" "-I=src/sdp"
  #lflags               "ld.gold"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  debugVersions        "dumpdoc"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-dmd-debug'"
}
#+END_SRC

*** ldc                                                               :ldc:
**** sdp-ldc                                                     :default:
***** sdp-ldc

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-ldc" {
  name                 "ldc"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-ldc"
  dflags               "-O2" "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" # "releaseMode"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D ldc2 compiled test release executable ready' 'sdp-ldc'"
}
#+END_SRC

***** sdp-ldc-version

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-ldc-version" {
  name                 "ldc"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-ldc-ver"
  dflags               "-O2" "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" # "releaseMode"
}
#+END_SRC

***** sdp-ldc-release

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-ldc-release" {
  name                 "ldc"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-ldc"
  dflags               "-O2" "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" "releaseMode"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D ldc2 compiled test release executable ready' 'sdp-ldc'"
}
#+END_SRC

**** sdp-ldc-debug                                                 :debug:
***** sdp-ldc-debug

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-ldc-debug" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-ldc-debug"
  dflags               "-g" "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-ldc-debug'"
}
#+END_SRC

***** sdp-ldc-debug-version                                     :version:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-ldc-debug-version" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-ldc-debug-ver"
  dflags               "-g" "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
}
#+END_SRC

***** sdp-ldc-debug-unittest                                   :unittest:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-ldc-debug-unittest" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-ldc-debug"
  dflags               "-J=views" "-I=src/sdp"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "unittests" "optimize"
  debugVersions        "checkdoc" "summary"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-ldc-debug'"
}
#+END_SRC

***** sdp-ldc-debug-docs                                           :docs:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-ldc-debug-docs" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-ldc-debug"
  dflags               "-J=views" "-I=src/sdp" "-Dddocs"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-ldc-debug'"
}
#+END_SRC

*** gdc                                                               :gdc:
**** sdp-gdc                                                     :default:
***** sdp-gdc

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-gdc" {
  name                 "gdc"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-gdc"
  dflags               "-O2" "-J=views" "-I=src/sdp"
  lflags               "-lz"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" # "releaseMode"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D gdc compiled test release executable ready' 'sdp-gdc'"
}
#+END_SRC

***** sdp-gdc-version

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-gdc-version" {
  name                 "gdc"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-gdc-ver"
  dflags               "-O2" "-J=views" "-I=src/sdp"
  lflags               "-lz"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" # "releaseMode"
}
#+END_SRC

***** sdp-gdc-release

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-gdc-release" {
  name                 "gdc"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-gdc"
  dflags               "-O2" "-J=views" "-I=src/sdp"
  lflags               "-lz"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "optimize" "inline" "releaseMode"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D gdc compiled test release executable ready' 'sdp-gdc'"
}
#+END_SRC

**** sdp-gdc-debug                                                 :debug:
***** sdp-gdc-debug

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-gdc-debug" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-gdc-debug"
  dflags               "-O2" "-fbuiltin" "-Wall" "-Werror" "-Wformat=2" "-g" "-J=views" "-I=src/sdp"
  lflags               "-lz"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D gdc compiled (debug with -g) executable ready' 'sdp-gdc-debug'"
}
#+END_SRC

***** sdp-gdc-debug-version                                     :version:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-gdc-debug-version" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-gdc-debug-ver"
  dflags               "-O2" "-fbuiltin" "-Wall" "-Werror" "-Wformat=2" "-g" "-J=views" "-I=src/sdp"
  lflags               "-lz"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
}
#+END_SRC

***** sdp-gdc-debug-unittest                                   :unittest:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-gdc-debug-unittest" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-gdc-debug"
  dflags               "-J=views" "-I=src/sdp" "-Dddocs"
  lflags               "-lz"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "unittests" "optimize"
  debugVersions        "checkdoc" "summary"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-gdc-debug'"
}
#+END_SRC

***** sdp-gdc-debug-docs                                           :docs:

#+BEGIN_SRC sh  :tangle dub.sdl
configuration "sdp-gdc-debug-docs" {
  name                 "debuging"
  targetType           "executable"
  platforms            "posix"
  targetName           "sdp-gdc-debug"
  dflags               "-J=views" "-I=src/sdp" "-Dddocs"
  lflags               "-lz"
  buildRequirements    "allowWarnings"
  buildOptions         "verbose" "debugMode" "debugInfo" "optimize"
  debugVersions        "checkdoc" "summary"
  postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-gdc-debug'"
}
#+END_SRC

*** +dub.json+                                                         :json:

**** +sdp+
#+BEGIN_SRC json  :tangle no
#+BEGIN_SRC json  :tangle dub.json
{
  "name"        : "sdp",
  "targetType"  : "executable",
  "targetName"  : "sdp",
  "targetPath"  : "bin",
  "description" : "sisu document parser.",
  "authors"     : ["Ralph Amissah"],
  "homepage"    : "http://sisudoc.org",
  "license"     : "AGPL-3+",
  "add-path"    : "./src/sdp",
  "dependencies": {
  }
}
** dub zfunc                                                         :zfunc:
*** ,dubdmd                                                           :dmd:

#+BEGIN_SRC sh  :tangle no
time dub --compiler=dmd -v --force
#+END_SRC

*** ,dubldc                                                           :ldc:

#+BEGIN_SRC sh  :tangle no
time dub --compiler=ldc2 -v --force
#+END_SRC

*** ,dubgdc                                                           :gdc:

#+BEGIN_SRC sh  :tangle no
time dub --compiler=gdc -v --force
#+END_SRC

* .gitignore                                                      :gitignore:

#+BEGIN_SRC sh :tangle .gitignore
# git ls-files --others --exclude-from=.git/info/exclude
#./.dub/**
*
!.gitignore
!makefile
!version.txt
!dub*.json
!dub.sdl
.dub/**
!tangle
!*.org
!*.d
!*.txt
!*.sst
!conf.sdl
!sisu_document_make
!org
!src
!src/*
!sisudoc
!views
!docs/*.html
!**/
**/.#*
#!*/
#*~
#\#*
#*.\#*
#+END_SRC

* sh script to batch process emacs org babel tangle     :shell_script:tangle:
  [[http://orgmode.org/manual/Batch-execution.html]]
creates a shell batch script called "tangle", that will tangle (emacs org
babel tangle) org files in ./org/ to create .d source files in ./src/sdp/
(similar functionality is contained within the "makefile" created by this
"maker.org" file make tangle)

#+BEGIN_SRC sh :tangle tangle :tangle-mode (identity #o755) :shebang #!/bin/sh
# -*- mode: shell-script -*-
# tangle files with org-mode
DIR=`pwd`
ORGFILES=""
EMACSLISP=/usr/share/emacs/site-lisp
ORG_VER_AVAILABLE=$(shell echo `ls -d ~/.emacs.d/elpa/org-???????? | cut -d '-' -f2`)
EMACSLISP_ORG=~/.emacs.d/elpa/org-$($(shell echo $(ORG_VER_AVAILABLE)))
ORG_CONTRIB_VER_AVAILABLE=$(shell echo `ls -d ~/.emacs.d/elpa/org-plus-???????? | cut -d '-' -f2`)
EMACSLISP_ORG_CONTRIB=~/.emacs.d/elpa/org-plus-contrib-$($(shell echo $(ORG_CONTRIB_VER_AVAILABLE)))
# wrap each argument in the code required to call tangle on it
for i in $@; do
  ORGFILES="$ORGFILES \"$i\""
done
emacs --batch -Q -q \
--eval "(progn
(add-to-list 'load-path (expand-file-name \"$EMACSLISP\"))
(add-to-list 'load-path (expand-file-name \"$EMACSLISP_ORG\" t))
(add-to-list 'load-path (expand-file-name \"$EMACSLISP_ORG_CONTRIB\" t))
(require 'org)(require 'ob)(require 'ob-tangle)
(mapc (lambda (file)
  (find-file (expand-file-name file \"$DIR\"))
  (setq-local org-src-preserve-indentation t)
  (org-babel-tangle)
  (kill-buffer)) '($ORGFILES)))" 2>&1 #|grep tangled
#+END_SRC

* __END__
** D build notes                                                     :notes:
*** compilers

- [X] Set D_COMPILER (one of DMD LDC or GDC)
- [X] Set debug flags (using DMD standard flag -deb

[[http://wiki.dlang.org/Compilers][D Compilers wiki https://wiki.dlang.org/Compilers]]
[[http://dlang.org/download.html][D Compilers download http://dlang.org/download.html]]

*** dub                                                               :dub:

https://github.com/dlang/dub/
http://code.dlang.org/getting_started
http://code.dlang.org/docs/commandline

**** setup
***** dub json or sdlang

Every DUB package should contain a [[http://code.dlang.org/package-format?lang=json][dub.json]] or [[http://code.dlang.org/package-format?lang=sdl][dub.sdl]]
https://code.dlang.org/package-format?lang=sdl
https://code.dlang.org/packages/sdlang-d
https://github.com/Abscissa/SDLang-D/blob/master/HOWTO.md

https://code.dlang.org/docs/commandline

***** dub dependencies

dub list
dub upgrade
dub fetch sdlang-d
dub fetch taggedalgebraic
dub fetch libinputvisitor
dub fetch unit-threaded ?

sdp ~master: /home/ralph/grotto/repo/git.repo/utils/sdp-x/
/home/ralph/.dub/packages/*

**** TODO build
***** call dub directly

#+BEGIN_SRC sh  :tangle no
dub build -h
#+END_SRC

#+BEGIN_SRC sh
time (dub --compiler=ldc2 --config=sdp-ldc --debug=checkdoc --debug=summary --debug=dumpdoc)
time (dub --compiler=ldc2 --config=sdp-ldc --debug=io)
time (dub --compiler=ldc2 --config=sdp-ldc --debug=checkdoc --debug=summary --debug=dumpdoc --debug=io)
time (dub --compiler=ldc2 --config=sdp-ldc-debug --debug=io)
time (dub --compiler=gdc --config=sdp-gdc-debug --debug=io)
time (dub --compiler=dmd --config=sdp-dmd-debug --debug=io)
#+END_SRC

***** debug flags

#+BEGIN_SRC sh
biblio
biblio_sorted
bibliosorted
block
bookindex
bookindexmatch
bookindexraw
check
checkdoc
code
comment
dumpdoc                    write out document contents, with object type and ocn
endnotes
endnotes_build
footnotes
footnotesdone
group
header
header_and_content
header1
headerjson
headermakejson
headermetadatajson
heading
headings
headingsfound
insert
io
munge
node
objectrelated1
objectrelated2
objects
ocnoff
para
parabullet
parabulletindent
paraindent
paraindenthang
parent
poem
quote
raw
sdlang
source
srclines
structattrib
summary
table
toc
#+END_SRC

*** make
**** TODO build

#+BEGIN_SRC sh
time make dmd
time make gdc
time make ldc
time make gdc ldc
time make all
time make all_ver
time make restart
time make restart ldc
time make tangle ldc
#+END_SRC

** git
*** project version

echo $(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g')