-*- mode: org -*-
#+TITLE:       spine (doc_reform) compile time info
#+DESCRIPTION: documents - structuring, publishing in multiple formats & search
#+FILETAGS:    :spine:compile:
#+AUTHOR:      Ralph Amissah
#+EMAIL:       [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]]
#+COPYRIGHT:   Copyright (C) 2015 - 2023 Ralph Amissah
#+LANGUAGE:    en
#+STARTUP:     content hideblocks hidestars noindent entitiespretty
#+PROPERTY:    header-args  :exports code
#+PROPERTY:    header-args+ :noweb yes
#+PROPERTY:    header-args+ :results no
#+PROPERTY:    header-args+ :cache no
#+PROPERTY:    header-args+ :padline no
#+PROPERTY:    header-args+ :mkdirp yes
#+OPTIONS:     H:3 num:nil toc:t \n:t ::t |:t ^:nil -:t f:t *:t

- [[./doc-reform.org][doc-reform.org]]  [[./][org/]]

* compilation info

- [[./spine_build_scaffold.org][make/build]]
- [[./doc-reform.org][doc-reform.org]]  [[./][org/]]

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

** _module template_ :module:compile_time_info:

#+HEADER: :tangle "../src/doc_reform/conf/compile_time_info.d"
#+HEADER: :noweb yes
#+BEGIN_SRC d
<<doc_header_including_copyright_and_license>>
/++
  compile_time_info
+/
module doc_reform.conf.compile_time_info;
template CompileTimeInfo() {
  <<spine_compile_time_info_0>>
  <<spine_compile_time_info_1>>
}
#+END_SRC

*** document header including copyright & license

#+NAME: doc_header_including_copyright_and_license
#+BEGIN_SRC txt
/+
- Name: Spine, Doc Reform [a part of]
  - Description: documents, structuring, processing, publishing, search
    - static content generator

  - Author: Ralph Amissah
    [ralph.amissah@gmail.com]

  - Copyright: (C) 2015 - 2023 Ralph Amissah, All Rights Reserved.

  - License: AGPL 3 or later:

    Spine (SiSU), a framework for document structuring, publishing and
    search

    Copyright (C) Ralph Amissah

    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU AFERO General Public License as published by the
    Free Software Foundation, either version 3 of the License, or (at your
    option) any later version.

    This program is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
    more details.

    You should have received a copy of the GNU General Public License along with
    this program. If not, see [https://www.gnu.org/licenses/].

    If you have Internet connection, the latest version of the AGPL should be
    available at these locations:
    [https://www.fsf.org/licensing/licenses/agpl.html]
    [https://www.gnu.org/licenses/agpl.html]

  - Spine (by Doc Reform, related to SiSU) uses standard:
    - docReform markup syntax
      - standard SiSU markup syntax with modified headers and minor modifications
    - docReform object numbering
      - standard SiSU object citation numbering & system

  - Homepages:
    [https://www.doc_reform.org]
    [https://www.sisudoc.org]

  - Git
    [https://git.sisudoc.org/projects/?p=software/spine.git;a=summary]

+/
#+END_SRC

** complile time os
OS type shows during compilation

*** set os flags

#+NAME: spine_compile_time_info_0
#+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: spine_compile_time_info_1
#+BEGIN_SRC d
version(D_LP64) {
  enum bits = "64 bit";
} else {
  enum bits = "32 bit";
}
#+END_SRC

* __END__