#+TITLE: Emacs config file written in org-mode #+AUTHOR: Ralph Amissah #+EMAIL: ralph.amissah@gmail.com #+STARTUP: indent #+LANGUAGE: en #+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^: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 #+OPTIONS: ^:nil _:nil#+OPTIONS: ^:nil _:nil #+EXPORT_SELECT_TAGS: export #+EXPORT_EXCLUDE_TAGS: noexport #+TAGS: Amissah(A) Class(c) WEB(W) noexport(n) * makefile :makefile: ** settings [+2] *** alternative compilers [+1] **** dmd #+name: makefile #+BEGIN_SRC makefile :exports none DMD=dmd DMD_FLAGS=-de -w DMD_FLAGS_RELEASE=-release DMD_FLAG_BINOF=-of #+end_src **** ldc2 #+name: makefile #+BEGIN_SRC makefile :exports none LDC=ldc2 LDC_FLAGS=-w LDC_FLAGS_RELEASE=-release LDC_FLAG_BINOF=-of= #+end_src **** gdc #+name: makefile #+BEGIN_SRC makefile :exports none GDC=gdc #GDC=gdc-5 GDC_FLAGS= GDC_FLAGS_RELEASE=-frelease GDC_FLAG_BINOF=-o #+end_src *** set/select: ~compiler~ & ~debug flags~ [+1] [2/2] Set flags: - [X] Set D_COMPILER (one of DMD LDC or GDC) - [X] Set debug flags (using DMD standard flag -debug=) **** SET compiler: "SET_D_COMPILER=": Set D_COMPILER one of DMD LDC or GDC e.g.: SET_D_COMPILER=DMD #+name: makefile #+BEGIN_SRC makefile :exports none # set D_COMPILER one of DMD LDC or GDC: SET_D_COMPILER=LDC #+end_src **** SET debug flags: "SET_DC_FLAGS_DEBUG_EXTRA=-debug=": Set debug flags using DMD standard flag -debug= e.g.: SET_DC_FLAGS_DEBUG_EXTRA=-debug=headings -debug=bookindex #+name: makefile #+BEGIN_SRC makefile :exports none SET_DC_FLAGS_DEBUG_EXTRA=-debug=headings -debug=bookindex #+end_src *** compiler settings [+1] **** compiler settings #+name: makefile #+BEGIN_SRC makefile :exports none DC=$($(SET_D_COMPILER)) DC_FLAGS=$($(shell echo $(SET_D_COMPILER)_FLAGS)) DC_FLAGS_RELEASE=$($(shell echo $(SET_D_COMPILER)_FLAGS_RELEASE)) DC_FLAG_BINOF=$($(shell echo $(SET_D_COMPILER)_FLAG_BINOF)) DC_FLAGS_DEBUG_DEFAULT_SET=-unittest -debug=checkdoc -debug=summary DC_FLAGS_DEBUG_SET=\ $(shell echo $(DC_FLAGS_DEBUG_DEFAULT_SET) $(SET_DC_FLAGS_DEBUG_EXTRA)) #+end_src **** compiler conditional settings #+name: makefile #+BEGIN_SRC makefile :exports none ifeq ($(DC), $(DMD)) DC_FLAGS_DEBUG :=$(shell echo $(DC_FLAGS_DEBUG_SET)) endif ifeq ($(DC) ,$(LDC)) DC_FLAGS_DEBUG :=$(shell echo $(DC_FLAGS_DEBUG_SET)| sed -e "s/-debug=/-d-debug=/g") endif ifeq ($(DC), $(GDC)) DC_FLAGS_DEBUG :=$(shell echo $(DC_FLAGS_DEBUG_SET)| sed -e "s/-debug/-fdebug/g") endif #+end_src *** program name #+name: makefile #+BEGIN_SRC makefile :exports none PRG_NAME=sdp PRG_SRC=$(PRG_NAME).d PRG_SRCDIR=./lib/$(PRG_NAME) PRG_BIN=$(PRG_NAME) PRG_BINDIR=bin #+end_src *** emacs org settings #+name: makefile #+BEGIN_SRC makefile :exports none # ORG EMACSLISP=/usr/share/emacs/site-lisp EMACSLISP_ORG=~/.emacs.d/elpa/org-20151005 EMACSLISP_ORG_CONTRIB=~/.emacs.d/elpa/org-plus-contrib-20151005 ORGFILELIST=$(shell echo `ls -1 maker.org org/*.org`) ORGFILES="" ORGDIR=$(shell echo `pwd`) #+end_src ** make commands [+2] *** build commands [+1] **** build rebuild #+name: makefile #+BEGIN_SRC makefile :exports none all: 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 #+end_src **** debug #+name: makefile #+BEGIN_SRC makefile :exports none debug: $(PRG_SRCDIR)/$(PRG_SRC) $(DC) $(DC_FLAGS) $(DC_FLAGS_DEBUG) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) debug_dmd: $(PRG_SRCDIR)/$(PRG_SRC) $(DMD) $(DMD_FLAGS) $(DMD_FLAGS_DEBUG) \ $(DMD_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) debug_ldc: $(PRG_SRCDIR)/$(PRG_SRC) $(LDC) $(LDC_FLAGS) $(LDC_FLAGS_DEBUG) \ $(LDC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) debug_gdc: $(PRG_SRCDIR)/$(PRG_SRC) $(GDC) $(GDC_FLAGS) $(GDC_FLAGS_DEBUG) \ $(GDC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) #+end_src **** release #+name: makefile #+BEGIN_SRC makefile :exports none release: distclean_and_init tangle $(PRG_SRCDIR)/$(PRG_SRC) $(DC) $(DC_FLAGS) $(DC_FLAGS_RELEASE) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) #+end_src *** init clean distclean etc. #+name: makefile #+BEGIN_SRC makefile :exports none init: mkdir -p $(PRG_SRCDIR); \ mkdir -p $(PRG_BINDIR); clean: $(PRG_BINDIR)/$(PRG_BIN).o rm $(PRG_BINDIR)/$(PRG_NAME).o expunge: init $(PRG_BINDIR) rm -rf $(PRG_BINDIR); \ rm -rf $(PRG_SRCDIR); distclean: init $(PRG_BINDIR) expunge distclean_and_init: init $(PRG_BINDIR) expunge mkdir -p $(PRG_SRCDIR); \ mkdir -p $(PRG_BINDIR); #+end_src *** org babel tangle batch process command #+name: makefile #+BEGIN_SRC makefile :exports none tangle: 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 *** git snapshot #+name: makefile #+BEGIN_SRC makefile :exports none gitsnapshot: distclean_and_init tangle git commit -a #+end_src ** phony #+name: makefile #+BEGIN_SRC makefile :exports none .PHONY : all build rebuild debug release \ clean distclean init \ tangle #+end_src * sh script to batch process emacs org babel tangle :tangle: [http://orgmode.org/manual/Batch-execution.html] #+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 EMACSLISP_ORG=~/.emacs.d/elpa/org-20151005 EMACSLISP_ORG_CONTRIB=~/.emacs.d/elpa/org-plus-contrib-20151005 # 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 * tangle ** makefile: :makefile: #+name: tangle_ao_rgx #+BEGIN_SRC makefile :tangle makefile :exports none :noweb yes <> #+end_src