Add CMake based build and install.
authorMikko Värri <vmj@linuxbox.fi>
Sat, 11 Jun 2016 11:02:47 +0000 (14:02 +0300)
committerMikko Värri <vmj@linuxbox.fi>
Sat, 11 Jun 2016 11:02:47 +0000 (14:02 +0300)
.gitignore
.travis.yml
CMakeLists.txt [new file with mode: 0644]
README.adoc

index af14ec1..f35a3f3 100644 (file)
@@ -1,8 +1,3 @@
-genmac
-genmac-*.tar.gz
-genmac.1
-*.html
-genmac.1.xml
-genmac.o
+build
 .idea
 *.iml
index 65b0730..4abd9eb 100644 (file)
@@ -1,6 +1,11 @@
 language: c
 compiler: gcc
-script: make
+script:
+  - mkdir build
+  - cd build
+  - cmake -DCMAKE_INSTALL_PREFIX=/usr ..
+  - cmake --build .
+  - make install DESTDIR=/tmp/package-genmac
 addons:
   apt:
     packages:
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..27ed0c7
--- /dev/null
@@ -0,0 +1,68 @@
+cmake_minimum_required (VERSION 2.8.12)
+
+project (genmac C)
+
+macro (install_path _DIR _DEFAULT)
+  if (NOT ${_DIR})
+    set (${_DIR} ${_DEFAULT})
+  endif ()
+endmacro ()
+
+install_path (BINDIR bin)
+install_path (MANDIR man)
+install_path (MAN1DIR ${MANDIR}/man1)
+
+# TODO: add -Wall -Wshadow to CFLAGS, if it is not already defined
+# TODO: add -std=c89 -D_GNU_SOURCE to FLAGS (regardless of its current value)
+
+find_program (ASCIIDOC asciidoc DOC "Full path to AsciiDoc executable; required for building the manual page")
+find_program (XMLTO xmlto DOC "Full path to xmlto executable; required for building the manual page")
+
+# TODO: check what cmake does with clean/distclean
+
+# TODO: check whether cpack can be used instead of my own dist target
+
+# TODO: add custom command/target indent
+
+# Executable
+add_executable(genmac genmac.c)
+install (TARGETS genmac DESTINATION "${BINDIR}")
+
+# Manual page
+add_custom_command(
+  OUTPUT ${PROJECT_BINARY_DIR}/genmac.1
+  DEPENDS ${PROJECT_BINARY_DIR}/genmac.1.xml
+  COMMAND ${XMLTO}
+  ARGS -o ${PROJECT_BINARY_DIR} man ${PROJECT_BINARY_DIR}/genmac.1.xml
+  COMMENT "Converting genmac.1.xml to genmac.1 (DocBook to troff)"
+  )
+add_custom_command(
+  OUTPUT ${PROJECT_BINARY_DIR}/genmac.1.xml
+  DEPENDS ${PROJECT_SOURCE_DIR}/genmac.1.txt
+  COMMAND ${ASCIIDOC}
+  ARGS -b docbook -d manpage -o ${PROJECT_BINARY_DIR}/genmac.1.xml ${PROJECT_SOURCE_DIR}/genmac.1.txt
+  COMMENT "Converting genmac.1.txt to genmac.1.xml (AsciiDoc to DocBook)"
+  )
+add_custom_target(man ALL
+  DEPENDS ${PROJECT_BINARY_DIR}/genmac.1
+  )
+install (FILES ${PROJECT_BINARY_DIR}/genmac.1 DESTINATION "${MAN1DIR}")
+
+# HTML documentation
+add_custom_command(
+  OUTPUT ${PROJECT_BINARY_DIR}/index.html
+  DEPENDS ${PROJECT_SOURCE_DIR}/README.adoc
+  COMMAND ${ASCIIDOC}
+  ARGS -b html -o ${PROJECT_BINARY_DIR}/index.html ${PROJECT_SOURCE_DIR}/README.adoc
+  COMMENT "Converting README.adoc to index.html (AsciiDoc to HTML)"
+  )
+add_custom_command(
+  OUTPUT ${PROJECT_BINARY_DIR}/genmac.1.html
+  DEPENDS ${PROJECT_SOURCE_DIR}/genmac.1.txt
+  COMMAND ${ASCIIDOC}
+  ARGS -b html -d manpage -o ${PROJECT_BINARY_DIR}/genmac.1.html ${PROJECT_SOURCE_DIR}/genmac.1.txt
+  COMMENT "Converting genmac.1.txt to genmac.1.html (AsciiDoc to HTML)"
+  )
+add_custom_target(html ALL
+  DEPENDS ${PROJECT_BINARY_DIR}/index.html ${PROJECT_BINARY_DIR}/genmac.1.html
+  )
index a387b2c..af6ac91 100644 (file)
@@ -1,8 +1,7 @@
 = genmac -- Generate a random MAC address\r
 :toc: left\r
-:sectnums:\r
 :icons: font\r
-:source-highlighter: coderay\r
+:source-highlighter: pygments\r
 \r
 genmac provides a program for producing a random MAC address.\r
 You can specify, via command line options, what kind of address to generate.\r
@@ -16,6 +15,7 @@ You can specify, via command line options, what kind of address to generate.
 The program http://www.linuxbox.fi/~vmj/genmac/genmac.1.html[genmac(1)] produces a single MAC address.\r
 Following shows a typical invocation:\r
 \r
+[source,sh]\r
 ----\r
 $ genmac --local --unicast --eui48\r
 ----\r
@@ -28,14 +28,41 @@ To compile, GNU Make, AsciiDoc, and xmlto are required.
 On Debian based systems, you can install `asciidoc` and `xmlto` packages.\r
 On Slackware, `linuxdoc-tools` contains both the `asciidoc` and `xmlto` tools.\r
 \r
-== Installation\r
+== Installation (from source)\r
 \r
-Type `make install` to install the binary into '/usr/local/bin' and\r
-manual page to '/usr/local/man/man1'.\r
+Download and extract the source distribution.\r
+This project is using CMake as the build tool.\r
+To build and install the project, issue the following commands:\r
 \r
-You can also define `PREFIX` to install genmac in a different prefix:\r
-`make install PREFIX=/usr` for example.\r
-Similarly, there's `DESTDIR`, `BINDIR`, `MANDIR`, and `MAN1DIR` for those who need them.\r
+[source,sh]\r
+----\r
+$ mkdir build     # <1>\r
+$ cd build        # <2>\r
+$ cmake ../       # <3>\r
+$ cmake --build . # <4>\r
+$ make install    # <5>\r
+----\r
+<1> Create an out-of-source build directory\r
+<2> Change the current working directory to the new directory\r
+<3> Generate the platform specific build files (the '../' is the path to the extracted source; it does not have to be the parent directory as in the example above)\r
+<4> Build the project\r
+<5> Install the binaries and documentation\r
+\r
+By default, the binaries are installed in '/usr/local/bin'\r
+and the manual is installed in '/usr/local/man/man1'.\r
+\r
+In order to install in some other prefix than '/usr/local',\r
+use the `CMAKE_INSTALL_PREFIX` cache variable in step 3 like so:\r
+`cmake -DCMAKE_INSTALL_PREFIX=/usr ../`.\r
+The 'bin' and 'man' paths under the installation prefix can also be changed\r
+using the `BINDIR`, `MANDIR`, and `MAN1DIR` cache variables.\r
+Their value must be relative to the installation prefix.\r
+\r
+During the installation (step 5),\r
+a staged installation can be achieved by defining the `DESTDIR` environment variable.\r
+For example: `make install DESTDIR=/tmp/package-genmac`.\r
+\r
+For more details, read the CMake manuals.\r
 \r
 == Authors\r
 \r