#+TITLE: sdp compile time info
#+AUTHOR: Ralph Amissah
#+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]]
#+DESCRIPTION for documents - structuring, publishing in multiple formats and search
#+KEYWORDS
#+LANGUAGE: en
#+STARTUP: indent content
#+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:niu:compile:info:
#+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)

[[./sdp.org][sdp]]  [[./][org/]]
* compilation info                             :module:sdp:compile_time_info:
[[../maker.org][maker.org makefile]]
[[./sdp.org][sdp hub]]  [[./][org/]]

e.g. do on linux bsd osx not windows:
version(Windows) {} else { ... }

** 0. module template

#+begin_src d  :tangle ../src/sdp/conf/compile_time_info.d
/++
  compile_time_info
+/
module sdp.conf.compile_time_info;
template CompileTimeInfo() {
  <<sdp_compile_time_info>>
}
#+end_src

** complile time os
OS type shows during compilation

*** set os flags

#+name: sdp_compile_time_info
#+BEGIN_SRC d
version(Windows) {
  pragma(msg, "[ Windows compilation ]");
  enum os = "Windows";
} else version(OSX) {
  pragma(msg, "[ Mac OS X POSIX System compilation ]");
  enum os = "OSX";
} else version(linux) {
  pragma(msg, "[ Linux POSIX System compilation ]");
  enum os = "Linux";
} else version(FreeBSD) {
  pragma(msg, "[ FreeBSD POSIX System compilation ]");
  enum os = "FreeBSD";
} else version(OpenBSD) {
  pragma(msg, "[ OpenBSD POSIX System compilation ]");
  enum os = "OpenBSD";
} else version(NetBSD) {
  pragma(msg, "[ NetBSD POSIX System compilation ]");
  enum os = "NetBSD";
} else version(DragonFlyBSD) {
  pragma(msg, "[ DragonFlyBSD POSIX System compilation ]");
  enum os = "DragonFlyBSD";
} else version(POSIX) {
  pragma(msg, "[ POSIX System compilation ]");
  enum os = "POSIX";
} else {
  static assert(0, "OS not listed");
}
#+END_SRC

** complile time static if os
OS type compiled in and shows during program run

*** report os flag (set) (not used here)

#+BEGIN_SRC d
static if(sysWindows) {
  writeln("Windows");
} else static if(sysOSX) {
  writeln("OSX");
} else static if(sysLinux) {
  writeln("Linux");
} else static if(sysFreeBSD) {
  writeln("FreeBSD");
} else static if(sysOpenBSD) {
  writeln("OpenBSD");
} else static if(sysNetBSD) {
  writeln("NetBSD");
} else static if(sysDragonFlyBSD) {
  writeln("DragonFlyBSD");
} else {
  writeln("other");
}
#+END_SRC

** 64 bit compilation?

#+name: sdp_compile_time_info
#+BEGIN_SRC d
version(D_LP64) {
  enum bits = "64 bit";
} else {
  enum bits = "32 bit";
}
#+END_SRC