diff --git a/.clang-format b/.clang-format index 19acc21..bc877c6 100644 --- a/.clang-format +++ b/.clang-format @@ -6,3 +6,6 @@ AllowShortIfStatementsOnASingleLine: WithoutElse AlignAfterOpenBracket: Align BinPackParameters: true AllowAllParametersOfDeclarationOnNextLine: true + +IndentPPDirectives: BeforeHash +IndentGotoLabels: true diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..915d06c --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,130 @@ +name: Build + +on: + workflow_call: + +jobs: + build-linux-amd64: + name: amd64 + runs-on: ubuntu-24.04 + permissions: write-all + steps: + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "git libpam0g-dev" + version: 1.0 + - uses: actions/checkout@v4 + - id: build + run: ARCH=amd64 assets/github_scripts/build.sh + + - uses: actions/upload-artifact@v4 + with: + name: build-amd64 + path: lidm-amd64 + retention-days: 1 + + build-linux-i386: + name: i386 + runs-on: ubuntu-24.04 + permissions: write-all + + steps: + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "git libpam0g-dev gcc-multilib" + version: 1.0 + - uses: actions/checkout@v4 + - run: | + sudo dpkg --add-architecture i386 + sudo apt-get update -y + sudo apt-get install -y libpam0g-dev:i386 + + - id: build + run: ARCH=i386 assets/github_scripts/build.sh CFLAGS="-O3 -Wall -m32" + + - uses: actions/upload-artifact@v4 + with: + name: build-i386 + path: lidm-i386 + retention-days: 1 + + build-linux-aarch64: + name: aarch64 + runs-on: ubuntu-24.04 + permissions: write-all + steps: + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "git" + version: 1.0 + - uses: actions/checkout@v4 + - uses: uraimo/run-on-arch-action@v2 + with: + arch: aarch64 + distro: ubuntu22.04 + githubToken: ${{ github.token }} + install: | + apt-get update && \ + apt-get install -y make gcc libpam0g-dev + run: ARCH=aarch64 GITHUB_STEP_SUMMARY=gss.out GITHUB_OUTPUT=go.out assets/github_scripts/build.sh + - run: set +e; cat gss.out >>"$GITHUB_STEP_SUMMARY"; cat go.out >>"$GITHUB_OUTPUT" + + - uses: actions/upload-artifact@v4 + with: + name: build-aarch64 + path: lidm-aarch64 + retention-days: 1 + + build-linux-armv7: + name: armv7 + runs-on: ubuntu-24.04 + permissions: write-all + steps: + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "git" + version: 1.0 + - uses: actions/checkout@v4 + - uses: uraimo/run-on-arch-action@v2 + with: + arch: armv7 + distro: ubuntu22.04 + githubToken: ${{ github.token }} + install: | + apt-get update && \ + apt-get install -y make gcc libpam0g-dev + run: ARCH=armv7 GITHUB_STEP_SUMMARY=gss.out GITHUB_OUTPUT=go.out assets/github_scripts/build.sh + - run: set +e; cat gss.out >>"$GITHUB_STEP_SUMMARY"; cat go.out >>"$GITHUB_OUTPUT" + + - uses: actions/upload-artifact@v4 + with: + name: build-armv7 + path: lidm-armv7 + retention-days: 1 + + build-linux-riscv64: + name: riscv64 + runs-on: ubuntu-24.04 + permissions: write-all + steps: + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "git" + version: 1.0 + - uses: actions/checkout@v4 + - uses: uraimo/run-on-arch-action@v2 + with: + arch: riscv64 + distro: ubuntu22.04 + githubToken: ${{ github.token }} + install: | + apt-get update && \ + apt-get install -y make gcc libpam0g-dev + run: ARCH=riscv64 GITHUB_STEP_SUMMARY=gss.out GITHUB_OUTPUT=go.out assets/github_scripts/build.sh + - run: set +e; cat gss.out >>"$GITHUB_STEP_SUMMARY"; cat go.out >>"$GITHUB_OUTPUT" + + - uses: actions/upload-artifact@v4 + with: + name: build-riscv64 + path: lidm-riscv64 + retention-days: 1 diff --git a/.github/workflows/check-and-build.yml b/.github/workflows/check-and-build.yml deleted file mode 100644 index 36d1ed0..0000000 --- a/.github/workflows/check-and-build.yml +++ /dev/null @@ -1,291 +0,0 @@ -name: Check and Build - -on: - workflow_call: - inputs: - set-statuses: - required: false - default: true - type: boolean - -jobs: - spellcheck: - name: Check Grammar - runs-on: ubuntu-24.04 - - steps: - - uses: actions/checkout@v4 - - uses: awalsh128/cache-apt-pkgs-action@latest - with: - packages: "codespell" - version: 1.0 - - run: codespell - - shellcheck: - name: Shell Check - runs-on: ubuntu-24.04 - - steps: - - uses: actions/checkout@v4 - - uses: awalsh128/cache-apt-pkgs-action@latest - with: - packages: "shellcheck" - version: 1.0 - - run: find . -type f -name '*.sh' -not -path './assets/pkg/aur/*/src/*' | xargs shellcheck - - clangcheck: - name: Clang Check - runs-on: ubuntu-24.04 - - steps: - - uses: actions/checkout@v4 - - uses: awalsh128/cache-apt-pkgs-action@latest - with: - packages: "clang-format clang-tidy" - version: 1.0 - - run: clang-format -ni src/*.c include/*.h - # TODO: include when the errors/warnings are bearable - #- run: clang-tidy src/*.c include/*.h - - build-linux-amd64: - name: Build for amd64 - runs-on: ubuntu-24.04 - permissions: write-all - needs: [spellcheck, shellcheck, clangcheck] - - steps: - - uses: actions/checkout@v4 - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: pending - description: ${{ steps.build.outputs.DESCR }} - context: Build for amd64 - - uses: awalsh128/cache-apt-pkgs-action@latest - with: - packages: "libpam0g-dev" - version: 1.0 - - id: build - run: | - make -j$(nproc) 2> /tmp/stderr || (ERR=$?; cat /tmp/stderr >&2; exit $ERR) - cat /tmp/stderr >&2 - - HSIZE="$(stat --printf="%s" lidm | numfmt --to=iec-i)B" - WARNS="$(cat /tmp/stderr | grep '^[^ ]*\.[ch]:' | wc -l)" - mv lidm lidm-amd64 - - echo "DESCR='$HSIZE, $WARNS warnings'" >> "$GITHUB_OUTPUT" - - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: ${{ job.status }} - description: ${{ steps.build.outputs.DESCR }} - context: Build for amd64 - - - uses: actions/upload-artifact@v4 - with: - name: build-amd64 - path: lidm-amd64 - retention-days: 1 - - build-linux-i386: - name: Build for i386 - runs-on: ubuntu-24.04 - permissions: write-all - needs: [spellcheck, shellcheck, clangcheck] - - steps: - - uses: actions/checkout@v4 - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: pending - description: ${{ steps.build.outputs.DESCR }} - context: Build for i386 - - uses: awalsh128/cache-apt-pkgs-action@latest - with: - packages: "libpam0g-dev gcc-multilib" - version: 1.0 - - run: | - sudo dpkg --add-architecture i386 - sudo apt-get update -y - sudo apt-get install -y libpam0g-dev:i386 - - - id: build - run: | - make -j$(nproc) CFLAGS="-O3 -Wall -m32" 2> /tmp/stderr || (ERR=$?; cat /tmp/stderr >&2; exit $ERR) - cat /tmp/stderr >&2 - - HSIZE="$(stat --printf="%s" lidm | numfmt --to=iec-i)B" - WARNS="$(cat /tmp/stderr | grep '^[^ ]*\.[ch]:' | wc -l)" - mv lidm lidm-i386 - - echo "DESCR='$HSIZE, $WARNS warnings'" >> "$GITHUB_OUTPUT" - - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: ${{ job.status }} - description: ${{ steps.build.outputs.DESCR }} - context: Build for i386 - - - uses: actions/upload-artifact@v4 - with: - name: build-i386 - path: lidm-i386 - retention-days: 1 - - build-linux-aarch64: - name: Build for aarch64 - runs-on: ubuntu-24.04 - permissions: write-all - needs: [spellcheck, shellcheck, clangcheck] - steps: - - uses: actions/checkout@v4 - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: pending - description: ${{ steps.status.outputs.DESCR }} - context: Build for aarch64 - - uses: uraimo/run-on-arch-action@v2 - with: - arch: aarch64 - distro: ubuntu22.04 - githubToken: ${{ github.token }} - install: | - apt-get update && \ - apt-get install -y make gcc libpam0g-dev - run: | - make -j$(nproc) 2> /tmp/stderr || (ERR=$?; cat /tmp/stderr >&2; exit $ERR) - - cat /tmp/stderr >&2 - mv lidm lidm-aarch64 - - - if: inputs.set-statuses - id: status - run: | - HSIZE="$(stat --printf="%s" lidm-aarch64 | numfmt --to=iec-i)B" - WARNS="$(cat /tmp/stderr | grep '^[^ ]*\.[ch]:' | wc -l)" - - echo "DESCR='$HSIZE, $WARNS warnings'" >> "$GITHUB_OUTPUT" - - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: ${{ job.status }} - description: ${{ steps.status.outputs.DESCR }} - context: Build for aarch64 - - - uses: actions/upload-artifact@v4 - with: - name: build-aarch64 - path: lidm-aarch64 - retention-days: 1 - - build-linux-armv7: - name: Build for armv7 - runs-on: ubuntu-24.04 - permissions: write-all - needs: [spellcheck, shellcheck, clangcheck] - steps: - - uses: actions/checkout@v4 - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: pending - description: ${{ steps.status.outputs.DESCR }} - context: Build for armv7 - - uses: uraimo/run-on-arch-action@v2 - with: - arch: armv7 - distro: ubuntu22.04 - githubToken: ${{ github.token }} - install: | - apt-get update && \ - apt-get install -y make gcc libpam0g-dev - run: | - make -j$(nproc) 2> /tmp/stderr || (ERR=$?; cat /tmp/stderr >&2; exit $ERR) - - cat /tmp/stderr >&2 - mv lidm lidm-armv7 - - - if: inputs.set-statuses - id: status - run: | - HSIZE="$(stat --printf="%s" lidm-armv7 | numfmt --to=iec-i)B" - WARNS="$(cat /tmp/stderr | grep '^[^ ]*\.[ch]:' | wc -l)" - - echo "DESCR='$HSIZE, $WARNS warnings'" >> "$GITHUB_OUTPUT" - - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: ${{ job.status }} - description: ${{ steps.status.outputs.DESCR }} - context: Build for armv7 - - - uses: actions/upload-artifact@v4 - with: - name: build-armv7 - path: lidm-armv7 - retention-days: 1 - - build-linux-riscv64: - name: Build for riscv64 - runs-on: ubuntu-24.04 - permissions: write-all - needs: [spellcheck, shellcheck, clangcheck] - steps: - - uses: actions/checkout@v4 - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: pending - description: ${{ steps.status.outputs.DESCR }} - context: Build for riscv64 - - uses: uraimo/run-on-arch-action@v2 - with: - arch: riscv64 - distro: ubuntu22.04 - githubToken: ${{ github.token }} - install: | - apt-get update && \ - apt-get install -y make gcc libpam0g-dev - run: | - make -j$(nproc) 2> /tmp/stderr || (ERR=$?; cat /tmp/stderr >&2; exit $ERR) - - cat /tmp/stderr >&2 - mv lidm lidm-riscv64 - - - if: inputs.set-statuses - id: status - run: | - HSIZE="$(stat --printf="%s" lidm-riscv64 | numfmt --to=iec-i)B" - WARNS="$(cat /tmp/stderr | grep '^[^ ]*\.[ch]:' | wc -l)" - - echo "DESCR='$HSIZE, $WARNS warnings'" >> "$GITHUB_OUTPUT" - - - uses: myrotvorets/set-commit-status-action@master - if: inputs.set-statuses - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: ${{ job.status }} - description: ${{ steps.status.outputs.DESCR }} - context: Build for riscv64 - - - uses: actions/upload-artifact@v4 - with: - name: build-riscv64 - path: lidm-riscv64 - retention-days: 1 diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..0a15b44 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,43 @@ +name: Check + +on: + workflow_call: + +jobs: + spellcheck: + name: Grammar + runs-on: ubuntu-24.04 + + steps: + - uses: actions/checkout@v4 + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "codespell" + version: 1.0 + - run: codespell + + shellcheck: + name: Shellcheck + runs-on: ubuntu-24.04 + + steps: + - uses: actions/checkout@v4 + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "shellcheck" + version: 1.0 + - run: find . -type f -name '*.sh' -not -path './assets/pkg/aur/*/src/*' | xargs shellcheck + + clangcheck: + name: Clang + runs-on: ubuntu-24.04 + + steps: + - uses: actions/checkout@v4 + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "clang-format clang-tidy bear libpam0g-dev" + version: 1.0 + - run: bear -- make + - run: clang-format -ni src/*.c include/*.h + - run: clang-tidy -p . src/*.c include/*.h diff --git a/.github/workflows/make-release.yml b/.github/workflows/make-release.yml index c0daa81..87bb98c 100644 --- a/.github/workflows/make-release.yml +++ b/.github/workflows/make-release.yml @@ -2,25 +2,51 @@ name: Check and Build Release on: workflow_dispatch: - inputs: - version: - required: true - default: '' - type: string jobs: - build: - name: Check and Build - uses: ./.github/workflows/check-and-build.yml - permissions: write-all - with: - set-statuses: false - - release: - name: Make Release v${{ inputs.version }} + release-checks: + name: Release Checks runs-on: ubuntu-24.04 permissions: write-all - needs: build + outputs: + VERSION: ${{ steps.check-ver-changed.outputs.VERSION }} + steps: + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: "git" + version: 1.0 + - uses: actions/checkout@v4 + + - name: Check Version Changed + id: check-ver-changed + run: | + GIT_TAG=$(git describe --no-long --abbrev=0 --tags --always) + MAKE_TAG=$(make print-version) + + if [[ "$GIT_TAG" == "v$MAKE_TAG" ]]; then + echo "ERR: Git tag matches makefile, did you bump Makefile up?" >&2 + exit 1 + fi + echo "VERSION=$MAKE_TAG" >> "$GITHUB_OUTPUT" + + + check: + name: Check + needs: release-checks + uses: ./.github/workflows/check.yml + permissions: write-all + + build: + name: Build + needs: release-checks + uses: ./.github/workflows/build.yml + permissions: write-all + + release: + name: Make Release v${{ needs.release-checks.outputs.VERSION }} + runs-on: ubuntu-24.04 + permissions: write-all + needs: [ release-checks, check, build ] steps: - uses: actions/download-artifact@v4 with: @@ -30,7 +56,7 @@ jobs: - uses: ncipollo/release-action@v1 with: - tag: v${{ inputs.version }} + tag: v${{ needs.release-checks.outputs.VERSION }} commit: ${{ github.sha }} artifacts: builds/lidm-* artifactErrorsFailBuild: true @@ -41,7 +67,7 @@ jobs: runs-on: ubuntu-24.04 container: archlinux:latest permissions: write-all - needs: release + needs: [ release-checks, release ] steps: - run: pacman -Sy --noconfirm git github-cli base-devel pacman-contrib @@ -53,7 +79,7 @@ jobs: cd "assets/pkg/aur" chown nobody:nobody . -R - su - -s /bin/bash nobody -c "$PWD/update-pkgs.sh ${{ inputs.version }}" + su - -s /bin/bash nobody -c "$PWD/update-pkgs.sh ${{ needs.release-checks.outputs.VERSION }}" su - -s /bin/bash nobody -c "$PWD/test-makepkg.sh" # This will also update -git pkgver chown $UID:$(id -g) . -R diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 427d926..a6b85b4 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -1,5 +1,4 @@ -# Kinda based by https://github.com/myrotvorets/set-commit-status-action/actions/runs/12344741285/workflow -name: Push Checks +name: _ on: push: @@ -9,7 +8,11 @@ on: workflow_dispatch: jobs: - check-and-build: - name: Check and Build - uses: ./.github/workflows/check-and-build.yml + check: + name: Check + uses: ./.github/workflows/check.yml + permissions: write-all + build: + name: Build + uses: ./.github/workflows/build.yml permissions: write-all diff --git a/.gitignore b/.gitignore index 097f96e..34588b2 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ valgrind-out.txt # nix build result result + +include/version.h diff --git a/Makefile b/Makefile index 5929207..ff9ef8b 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +VERSION = 1.2.0 +.DEFAULT_GOAL := lidm + CDIR=src LDIR=lib IDIR=include @@ -7,17 +10,27 @@ PREFIX=/usr CC?=gcc CFLAGS?=-O3 -Wall -_CFLAGS=-I$(DIR) ALLFLAGS=$(CFLAGS) -I$(IDIR) LIBS=-lpam -_DEPS = log.h util.h ui.h ui_state.h config.h desktop.h auth.h ofield.h efield.h keys.h users.h sessions.h chvt.h macros.h launch_state.h +_DEPS = version.h log.h util.h ui.h ui_state.h config.h desktop.h auth.h ofield.h efield.h keys.h users.h sessions.h chvt.h macros.h launch_state.h DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) _OBJ = main.o log.o util.o ui.o ui_state.o config.o desktop.o auth.o ofield.o efield.o users.o sessions.o chvt.o launch_state.o OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) +$(IDIR)/version.h: Makefile .git/HEAD + @tmp=$$(mktemp); \ + printf '' > $$tmp; \ + echo '#define LIDM_VERSION "'$(VERSION)'"' >> $$tmp; \ + echo '#define LIDM_GIT_REV "'$$(git describe --long --tags --always)'"' >> $$tmp; \ + echo '#define LIDM_BUILD_TS '$$(date +%s) >> $$tmp; \ + if ! cmp -s $$tmp $@; then \ + mv $$tmp $@; \ + fi; \ + rm -f $$tmp; + $(ODIR)/%.o: $(CDIR)/%.c $(DEPS) @mkdir -p $(ODIR) $(CC) -c -o $@ $< $(ALLFLAGS) @@ -25,7 +38,6 @@ $(ODIR)/%.o: $(CDIR)/%.c $(DEPS) lidm: $(OBJ) $(CC) -o $@ $^ $(ALLFLAGS) $(LIBS) -.PHONY: clean clean: rm -f $(ODIR)/*.o lidm @@ -78,3 +90,17 @@ pre-commit: find . -type f -name '*.sh' -not -path './assets/pkg/aur/*/src/*' | xargs shellcheck clang-format -i $$(git ls-files "*.c" "*.h") clang-tidy -p . $$(git ls-files "*.c" "*.h") + +print-version: + @echo $(VERSION) + +.PHONY: clean \ + install uninstall \ + install-service \ + install-service-s6 \ + install-service-dinit \ + install-service-runit \ + install-service-openrc \ + install-service-systemd \ + pre-commit \ + print-version diff --git a/assets/github_scripts/build.sh b/assets/github_scripts/build.sh new file mode 100755 index 0000000..8536363 --- /dev/null +++ b/assets/github_scripts/build.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [ -z "$ARCH" ]; then + echo "\$ARCH not present" >&2 + exit 1 +fi + +ERR=0 +# shellcheck disable=SC2034 +make -j"$(nproc)" "$@" 2> /tmp/stderr || ERR=$? + +BSIZE=$(stat --printf="%s" lidm) +HSIZE=$(numfmt --to=iec-i<<<"$BSIZE")B +WARNS=$( + { grep -E '^[^ ]+\.[ch]:[0-9]+:[0-9]+: [a-z]+:' /tmp/stderr || :; } \ + | sed -E 's/^([^ ]+\.[ch]):([0-9]+):([0-9]+): ([a-z]+): (.*)$/::\4 file=\1,line=\2,col=\3::\5/' +) +WARNS_NUM=$({ [[ "$WARNS" == "" ]] && echo 0; } || wc -l <<<"$WARNS") + +echo "$WARNS" + +{ + echo "# Build for $ARCH" + echo "" + if [ -s "/tmp/stderr" ]; then + echo "
stderr" + echo "" + echo "\`\`\`" + cat "/tmp/stderr" + echo "\`\`\`" + echo "" + echo "
" + else + echo "*no \`stderr\` to show*" + fi + echo "" + echo "## Stats" + echo "* **Filesize:** $HSIZE ($BSIZE B)" + echo "* **Warnings & Errors:** $WARNS_NUM" +} >> "$GITHUB_STEP_SUMMARY" + +if [ "$ERR" -ne 0 ]; then exit "$ERR"; fi + +mv lidm lidm-"$ARCH" + +echo "DESCR='$HSIZE, $WARNS_NUM warnings'" >> "$GITHUB_OUTPUT" diff --git a/include/macros.h b/include/macros.h index c549cf1..56f3fb3 100644 --- a/include/macros.h +++ b/include/macros.h @@ -3,21 +3,31 @@ // Do we just replace the compiler with clang?? #if defined(__clang__) -#define NULLABLE _Nullable + #define NULLABLE _Nullable #else -#define NULLABLE + #define NULLABLE #endif #if defined(__clang__) -#define NNULLABLE _Nonnull + #define NNULLABLE _Nonnull #else -#define NNULLABLE + #define NNULLABLE #endif #if defined(__clang__) -#define UNULLABLE _Null_unspecified + #define UNULLABLE _Null_unspecified #else -#define UNULLABLE + #define UNULLABLE +#endif + +#if defined(__clang__) + #define COMPILER_VERSION __VERSION__ +#elif defined(__GNUC__) + #define xstr(s) str(s) + #define str(s) #s + + #define COMPILER_VERSION \ + "GCC " xstr(__GNUC__) "." xstr(__GNUC_MINOR__) "." xstr(__GNUC_PATCHLEVEL__) #endif #define LEN(X) (sizeof(X) / sizeof((X)[0])) diff --git a/src/main.c b/src/main.c index 3ec6f92..c67072c 100644 --- a/src/main.c +++ b/src/main.c @@ -1,18 +1,23 @@ #include #include #include +#include #include #include +#include #include #include "chvt.h" #include "config.h" #include "log.h" +#include "macros.h" #include "sessions.h" #include "ui.h" #include "users.h" #include "util.h" +#include "version.h" +#define DATESTR_MAXBUFSIZE 0x20 int main(int argc, char* argv[]) { // Logger char* log_output = getenv("LIDM_LOG"); @@ -27,8 +32,45 @@ int main(int argc, char* argv[]) { log_init(log_fd); } - // Chvt - if (argc == 2) chvt_str(argv[1]); + if (argc == 2) { + if (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "--version") == 0) { + // NOLINTBEGIN(clang-analyzer-deadcode.DeadStores) + char* version = "?"; + char* revision = "?"; + char* builddate = "?"; + char* compilever = "?"; + // NOLINTEND(clang-analyzer-deadcode.DeadStores) +#ifdef LIDM_VERSION + version = LIDM_VERSION; +#endif +#ifdef LIDM_GIT_REV + revision = LIDM_GIT_REV; +#endif +#ifdef LIDM_BUILD_TS + time_t ts = LIDM_BUILD_TS; + char date_buf[DATESTR_MAXBUFSIZE]; + builddate = date_buf; + if (strftime(date_buf, 0xff, "%Y-%m-%dT%H:%M:%SZ", localtime(&ts)) > 0) + builddate = date_buf; +#endif +#ifdef COMPILER_VERSION + compilever = COMPILER_VERSION; +#endif + printf("lidm version %s (git %s, build date %s, compiler %s)\n", version, + revision, builddate, compilever); + return 0; + } + if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { + printf( + "Usage: lidm [vt number]\n" + "Options:\n" + " -h, --help Display help menu\n" + " -v, --version Display version information\n"); + return 0; + } + // Chvt + chvt_str(argv[1]); + } struct config config = DEFAULT_CONFIG; char* conf_override = getenv("LIDM_CONF");