diff --git a/doc/meson.build b/doc/meson.build index 01738d43..66a9b183 100644 --- a/doc/meson.build +++ b/doc/meson.build @@ -1,3 +1,5 @@ +sh = find_program('sh', native: true) + scdoc = dependency('scdoc', native: true) scdoc_prog = find_program(scdoc.get_pkgconfig_variable('scdoc'), native: true) diff --git a/generate-version.sh b/generate-version.sh new file mode 100755 index 00000000..1aa167d0 --- /dev/null +++ b/generate-version.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +set -e + +default_version=${1} +src_dir=${2} +out_file=${3} + +# echo "default version: ${default_version}" +# echo "source directory: ${src_dir}" +# echo "output file: ${out_file}" + +if command -v git > /dev/null; then + workdir=$(pwd) + cd "${src_dir}" + git_version=$(git describe --always --tags) + git_branch=$(git rev-parse --abbrev-ref HEAD) + cd "${workdir}" + + new_version="${git_version} ($(env LC_TIME=C date "+%b %d %Y"), branch '${git_branch}')" +else + new_version="${default_version}" +fi + +new_version="#define FOOT_VERSION \"${new_version}\"" + +if [ -f "${out_file}" ]; then + old_version=$(cat "${out_file}") +else + old_version="" +fi + +# echo "old version: ${old_version}" +# echo "new version: ${new_version}" + +if [ "${old_version}" != "${new_version}" ]; then + echo "${new_version}" > "${out_file}" +fi diff --git a/main.c b/main.c index e81d2395..dfb1982d 100644 --- a/main.c +++ b/main.c @@ -39,6 +39,7 @@ #include "slave.h" #include "terminal.h" #include "tokenize.h" +#include "version.h" #include "vt.h" #define min(x, y) ((x) < (y) ? (x) : (y)) diff --git a/meson.build b/meson.build index 2b9d2b1e..d86ed199 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,7 @@ project('foot', 'c', version: '0.9.0', license: 'MIT', + meson_version: '>=0.47.0', default_options: [ 'c_std=c11', 'warning_level=1', @@ -9,32 +10,8 @@ project('foot', 'c', is_debug_build = get_option('buildtype').startswith('debug') -version = '"@0@"'.format(meson.project_version()) - -sh = find_program('sh', native: true) -git = find_program('git', required: false, native: true) - -if git.found() - commit_hash = run_command( - [sh.path(), '-c', - '@0@ --git-dir="$MESON_SOURCE_ROOT/.git" describe --always --tags'.format( - git.path())]) - - branch = run_command( - [sh.path(), '-c', - '@0@ --git-dir="$MESON_SOURCE_ROOT/.git" rev-parse --abbrev-ref HEAD'.format( - git.path())]) - - if commit_hash.returncode() == 0 and branch.returncode() == 0 - version = '"@0@ (" __DATE__ ", branch \'@1@\')"'.format( - commit_hash.stdout().strip(), branch.stdout().strip()) - endif -endif - add_project_arguments( - ['-D_GNU_SOURCE=200809L', - '-DFOOT_VERSION=@0@'.format(version)] + - (is_debug_build ? ['-D_DEBUG'] : []), + ['-D_GNU_SOURCE=200809L'] + (is_debug_build ? ['-D_DEBUG'] : []), language: 'c', ) @@ -78,6 +55,13 @@ foreach prot : [ command: [wscanner_prog, 'private-code', '@INPUT@', '@OUTPUT@']) endforeach +generate_version_sh = files('generate-version.sh') +version = custom_target( + 'generate_version', + build_always_stale: true, + output: 'version.h', + command: [generate_version_sh, meson.project_version(), '@SOURCE_DIR@', '@OUTPUT@']) + executable( 'foot', 'base64.c', 'base64.h', @@ -99,7 +83,7 @@ executable( 'tokenize.c', 'tokenize.h', 'tllist.h', 'vt.c', 'vt.h', - wl_proto_src + wl_proto_headers, + wl_proto_src + wl_proto_headers, version, dependencies: [threads, math, freetype, fontconfig, pixman, wayland_client, wayland_cursor, xkb], install: true)