summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-09-09 18:16:21 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-09-09 18:16:21 +0200
commitd759a33273f9a9c74e770571b4b4713fed1f9b29 (patch)
tree247a8203362dfc3f2d114d0c0ad23b0869ae95ce
parent3e7a3ce3c07ba831c4522b6119d049ba9c1fd703 (diff)
Add minimal cmake based build setup
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--CMakeLists.txt10
-rw-r--r--Makefile9
-rw-r--r--default.nix24
-rw-r--r--src/CMakeLists.txt12
-rw-r--r--src/main.cpp24
5 files changed, 79 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..3b36448
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required(VERSION 3.2)
+
+project(getif)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2")
+set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR})
+set(GETIF_INSTALL_BIN_DIR ${PROJECT_SOURCE_DIR}/bin)
+
+add_subdirectory(src)
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..8dadd5e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,9 @@
+BUILD_DIR=build
+
+all: compile
+
+compile: ${BUILD_DIR}
+ make -C ${BUILD_DIR}
+
+${BUILD_DIR}:
+ mkdir -p ${BUILD_DIR}
diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000..8fc5d24
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,24 @@
+{ pkgs ? (import <nixpkgs> {}) }:
+
+let
+ filterSource = builtins.filterSource
+ (p: t: pkgs.lib.cleanSourceFilter p t && baseNameOf p != "build");
+in
+pkgs.stdenv.mkDerivation {
+ name = "getif";
+ src = filterSource ./.;
+
+ nativeBuildInputs = with pkgs; [ cmake pkg-config ];
+ buildInputs = with pkgs; [ docopt_cpp ];
+
+ buildPhase = ''
+ mkdir build
+ cmake ..
+ make
+ '';
+
+ installPhase = ''
+ mkdir -p $out/bin
+ cp src/getif $out/bin/
+ '';
+}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..da2131d
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 3.2)
+project(getif)
+
+set(SOURCE_FILES main.cpp)
+
+find_package(docopt COMPONENTS CXX REQUIRED)
+include_directories(${DOCOPT_INCLUDE_DIRS})
+
+add_executable(getif ${SOURCE_FILES})
+target_link_libraries(${PROJECT_NAME} docopt)
+
+install(TARGETS getif DESTINATION ${GETIF_INSTALL_BIN_DIR})
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..c62d284
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,24 @@
+#include <iostream>
+
+#include "docopt.h"
+
+static const char USAGE[] =
+R"(Usage: getif [INTERFACE ...]
+
+-h --help Show this help text.
+--version Show version.
+)";
+
+int main(int argc, const char** argv) {
+ std::map<std::string, docopt::value> args
+ = docopt::docopt(USAGE,
+ { argv + 1, argv + argc },
+ true, // show help if requested
+ "getif 1.0"); // version string
+
+ for(auto const& arg : args) {
+ std::cout << arg.first << arg.second << std::endl;
+ }
+
+ return 0;
+}