aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Makefile8
-rw-r--r--TODO2
-rw-r--r--mk/build.mk59
-rw-r--r--mk/config.mk51
-rw-r--r--src/libmdsserver/config.h.in (renamed from src/libmdsserver/config.h)100
6 files changed, 128 insertions, 94 deletions
diff --git a/.gitignore b/.gitignore
index 4f7dd78..ef6dc6f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,5 +11,7 @@ obj/
*.su
*.gch
*.out
+*.so
*.o
+/src/libmdsserver/config.h
diff --git a/Makefile b/Makefile
index 28bf9eb..b01123d 100644
--- a/Makefile
+++ b/Makefile
@@ -30,6 +30,12 @@ OBJ_mds-registry_ = mds-registry util globals reexec registry signals \
OBJ_mds-server = $(foreach O,$(OBJ_mds-server_),obj/mds-server/$(O).o)
OBJ_mds-registry = $(foreach O,$(OBJ_mds-registry_),obj/mds-registry/$(O).o)
+ifneq ($(LIBMDSSERVER_IS_INSTALLED),y)
+SEDED = src/libmdsserver/config.h
+else
+SEDED =
+endif
+
# Build rules.
@@ -51,5 +57,5 @@ perms: all
.PHONY: clean
clean:
- -rm -rf obj bin
+ -rm -rf obj bin $(SEDED)
diff --git a/TODO b/TODO
index 0659653..3c1d7bd 100644
--- a/TODO
+++ b/TODO
@@ -54,7 +54,5 @@ A facility is needed to lookup available compose sequences to any character,
Servers should be stored in LIBEXECDIR.
Implement reconnect_to_display()
-src/libmdsserver/config.h should be sed:ed rather than use #ifndef
-
Something is up with the test, it does not exit on Control+C
diff --git a/mk/build.mk b/mk/build.mk
index 7e2f8ac..c74d93c 100644
--- a/mk/build.mk
+++ b/mk/build.mk
@@ -14,9 +14,9 @@ servers: $(foreach S,$(SERVERS),bin/$(S))
# Link large servers.
ifneq ($(LIBMDSSERVER_IS_INSTALLED),y)
-bin/mds-server: $(OBJ_mds-server) obj/mds-base.o src/mds-server/*.h bin/libmdsserver.so
+bin/mds-server: $(OBJ_mds-server) obj/mds-base.o src/mds-server/*.h bin/libmdsserver.so $(SEDED)
else
-bin/mds-server: $(OBJ_mds-server) obj/mds-base.o src/mds-server/*.h
+bin/mds-server: $(OBJ_mds-server) obj/mds-base.o src/mds-server/*.h $(SEDED)
endif
mkdir -p $(shell dirname $@)
$(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_mds-server) $(OBJ_mds-server) obj/mds-base.o
@@ -27,51 +27,45 @@ endif
ifneq ($(LIBMDSSERVER_IS_INSTALLED),y)
-bin/mds-registry: $(OBJ_mds-registry) obj/mds-base.o src/mds-registry/*.h bin/libmdsserver.so
+bin/mds-registry: $(OBJ_mds-registry) obj/mds-base.o src/mds-registry/*.h bin/libmdsserver.so $(SEDED)
else
-bin/mds-registry: $(OBJ_mds-registry) obj/mds-base.o src/mds-registry/*.h
+bin/mds-registry: $(OBJ_mds-registry) obj/mds-base.o src/mds-registry/*.h $(SEDED)
endif
mkdir -p $(shell dirname $@)
$(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_mds-registry) $(OBJ_mds-registry) obj/mds-base.o
- mkdir -p $(shell dirname $@)
- $(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_mds-registry) $(OBJ_mds-registry) obj/mds-base.o
# Link small servers.
ifneq ($(LIBMDSSERVER_IS_INSTALLED),y)
-bin/%: obj/%.o obj/mds-base.o bin/libmdsserver.so
+bin/%: obj/%.o obj/mds-base.o bin/libmdsserver.so $(SEDED)
else
-bin/%: obj/%.o obj/mds-base.o
+bin/%: obj/%.o obj/mds-base.o $(SEDED)
endif
mkdir -p $(shell dirname $@)
$(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_$*) $< obj/mds-base.o
- mkdir -p $(shell dirname $@)
- $(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_$*) $< obj/mds-base.o
# Link kernel.
ifneq ($(LIBMDSSERVER_IS_INSTALLED),y)
-bin/mds: obj/mds.o bin/libmdsserver.so
+bin/mds: obj/mds.o bin/libmdsserver.so $(SEDED)
else
-bin/mds: obj/mds.o
+bin/mds: obj/mds.o $(SEDED)
endif
mkdir -p $(shell dirname $@)
$(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_mds) $<
- mkdir -p $(shell dirname $@)
- $(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_mds) $<
# Build object files for kernel/servers.
ifneq ($(LIBMDSSERVER_IS_INSTALLED),y)
-obj/%.o: src/%.c $(shell dirname src/%)/*.h src/mds-base.h src/libmdsserver/*.h
+obj/%.o: src/%.c $(shell dirname src/%)/*.h src/mds-base.h src/libmdsserver/*.h $(SEDED)
mkdir -p $(shell dirname $@)
$(CC) $(C_FLAGS) -Isrc -c -o $@ $<
else
-obj/%.o: src/%.c $(shell dirname src/%)/*.h src/mds-base.h
+obj/%.o: src/%.c $(shell dirname src/%)/*.h src/mds-base.h $(SEDED)
mkdir -p $(shell dirname $@)
$(CC) $(C_FLAGS) -c -o $@ $<
endif
@@ -83,7 +77,38 @@ bin/libmdsserver.so: $(foreach O,$(LIBOBJ),obj/libmdsserver/$(O).o)
mkdir -p $(shell dirname $@)
$(CC) $(C_FLAGS) -shared -o $@ $^
-obj/libmdsserver/%.o: src/libmdsserver/%.c src/libmdsserver/*.h
+obj/libmdsserver/%.o: src/libmdsserver/%.c src/libmdsserver/*.h $(SEDED)
mkdir -p $(shell dirname $@)
$(CC) $(C_FLAGS) -fPIC -c -o $@ $<
+
+# sed header files.
+ifneq ($(LIBMDSSERVER_IS_INSTALLED),y)
+src/libmdsserver/config.h: src/libmdsserver/config.h.in
+ cp $< $@
+ sed -i 's:@PKGNAME@:$(PKGNAME):g' $@
+ sed -i 's:@LIBEXECDIR@:$(LIBEXECDIR):g' $@
+ sed -i 's:@TMPDIR@:$(TMPDIR):g' $@
+ sed -i 's:@RUNDIR@:$(RUNDIR):g' $@
+ sed -i 's:@SYSCONFDIR@:$(SYSCONFDIR):g' $@
+ sed -i 's:@DEVDIR@:$(DEVDIR):g' $@
+ sed -i 's:@ROOT_USER_UID@:$(ROOT_USER_UID):g' $@
+ sed -i 's:@ROOT_GROUP_GID@:$(ROOT_GROUP_GID):g' $@
+ sed -i 's:@NOBODY_GROUP_GID@:$(NOBODY_GROUP_GID):g' $@
+ sed -i 's:@TOKEN_LENGTH@:$(TOKEN_LENGTH):g' $@
+ sed -i 's:@ARGC_LIMIT@:$(ARGC_LIMIT):g' $@
+ sed -i 's:@LIBEXEC_ARGC_EXTRA_LIMIT@:$(LIBEXEC_ARGC_EXTRA_LIMIT):g' $@
+ sed -i 's:@DISPLAY_MAX@:$(DISPLAY_MAX):g' $@
+ sed -i 's:@RESPAWN_TIME_LIMIT_SECONDS@:$(RESPAWN_TIME_LIMIT_SECONDS):g' $@
+ sed -i 's:@DISPLAY_ENV@:$(DISPLAY_ENV):g' $@
+ sed -i 's:@PGROUP_ENV@:$(PGROUP_ENV):g' $@
+ sed -i 's:@INITRC_FILE@:$(INITRC_FILE):g' $@
+ sed -i 's:@SELF_EXE@:$(SELF_EXE):g' $@
+ sed -i 's:@SELF_FD@:$(SELF_FD):g' $@
+ sed -i 's:@TOKEN_RANDOM@:$(TOKEN_RANDOM):g' $@
+ sed -i 's:@VT_PATH_PATTERN@:$(VT_PATH_PATTERN):g' $@
+ sed -i 's:@SHM_PATH_PATTERN@:$(SHM_PATH_PATTERN):g' $@
+ sed -i 's:@MDS_RUNTIME_ROOT_DIRECTORY@:$(MDS_RUNTIME_ROOT_DIRECTORY):g' $@
+ sed -i 's:@MDS_STORAGE_ROOT_DIRECTORY@:$(MDS_STORAGE_ROOT_DIRECTORY):g' $@
+endif
+
diff --git a/mk/config.mk b/mk/config.mk
index a961a53..d824b73 100644
--- a/mk/config.mk
+++ b/mk/config.mk
@@ -28,10 +28,61 @@ DOCDIR ?= $(DATADIR)/doc
INFODIR ?= $(DATADIR)/info
# The license base path including prefix.
LICENSEDIR ?= $(DATADIR)/licenses
+# The transient directory for temporary files.
+TMPDIR ?= /tmp
+# The transient directory for runtime files.
+RUNDIR ?= /run
+# The directory for site-specific configurations.
+SYSCONFDIR ?= /etc
+# The directory for pseudo-devices.
+DEVDIR ?= /dev
+# The /proc directory
+PROCDIR ?= /proc
+# The /proc/self directory
+SELFPROCDIR ?= $(PROCDIR)/self
# The name of the package as it should be installed.
PKGNAME ?= mds
+# The user ID for the root user.
+ROOT_USER_UID = 0
+# The group ID for the root group.
+ROOT_GROUP_GID = 0
+# The group ID for the nobody group.
+NOBODY_GROUP_GID = $(ROOT_GROUP_GID)
+# The path of the symlink to the executed command
+SELF_EXE = $(SELFPROCDIR)/exe
+# The path to the directory with symlinks to each file that is open
+SELF_FD = $(SELFPROCDIR)/fd
+# Random number generator to use for generating a token.
+TOKEN_RANDOM = $(DEVDIR)/urandom
+# Pathname pattern for virtual terminals.
+VT_PATH_PATTERN = $(DEVDIR)/tty%i
+
+# The byte length of the authentication token.
+TOKEN_LENGTH = 1024
+# The maximum number of command line arguments to allow.
+ARGC_LIMIT = 50
+# The number of additional arguments a libexec server may have.
+LIBEXEC_ARGC_EXTRA_LIMIT = 5
+# The maximum number of display allowed on the system.
+DISPLAY_MAX = 1000
+# The minimum time that most have elapsed for respawning to be allowed.
+RESPAWN_TIME_LIMIT_SECONDS = 5
+# Pattern for the names of shared object to which states are marshalled.
+SHM_PATH_PATTERN = /.proc-pid-%ji
+
+# The name of the environment variable that indicates the index of the display.
+DISPLAY_ENV = MDS_DISPLAY
+# The name of the environment variable that indicates the display server's process group.
+PGROUP_ENV = MDS_PGROUP
+# The dot-prefixless basename of the initrc file that the master server executes.
+INITRC_FILE = mdsinitrc
+# The root directory of all runtime data stored by mds.
+MDS_RUNTIME_ROOT_DIRECTORY = $(RUNDIR)/$(PKGNAME)
+# The root directory of temporarily stored data stored by mds servers.
+MDS_STORAGE_ROOT_DIRECTORY = $(TMPDIR)/.{system-directory}.$(PKGNAME)
+
# Optimisation level (and debug flags.)
OPTIMISE = -Og -g
diff --git a/src/libmdsserver/config.h b/src/libmdsserver/config.h.in
index b4a0087..ceb6043 100644
--- a/src/libmdsserver/config.h
+++ b/src/libmdsserver/config.h.in
@@ -22,97 +22,73 @@
/**
* The name under which this package is installed
*/
-#ifndef PKGNAME
-#define PKGNAME "mds"
-#endif
+#define PKGNAME "@PKGNAME@"
/**
* The directory where all servers are installed
*/
-#ifndef LIBEXECDIR
-#define LIBEXECDIR "/usr/libexec"
-#endif
+#define LIBEXECDIR "@LIBEXECDIR@"
/**
* The system's directory for non-persistent temporary files
*/
-#ifndef TMPDIR
-#define TMPDIR "/tmp"
-#endif
+#define TMPDIR "@TMPDIR@"
/**
* The system's directory for runtime data
*/
-#ifndef RUNDIR
-#define RUNDIR "/run"
-#endif
+#define RUNDIR "@RUNDIR@"
/**
* The system's directory for site-specific configurations
*/
-#ifndef SYSCONFDIR
-#define SYSCONFDIR "/etc"
-#endif
+#define SYSCONFDIR "@SYSCONFDIR@"
/**
* The system's directory for pseudo-devices
*/
-#ifndef DEVDIR
-#define DEVDIR "/dev"
-#endif
+#define DEVDIR "@DEVDIR@"
/**
* Pathname pattern for virtual terminals
*/
-#ifndef VT_PATH_PATTERN
-#define VT_PATH_PATTERN DEVDIR "/tty%i"
-#endif
+#define VT_PATH_PATTERN "@VT_PATH_PATTERN@"
/**
- * The root directory of all runtime data stored by MDS
+ * The root directory of all runtime data stored by mds
*/
-#ifndef MDS_RUNTIME_ROOT_DIRECTORY
-#define MDS_RUNTIME_ROOT_DIRECTORY RUNDIR "/" PKGNAME
-#endif
+#define MDS_RUNTIME_ROOT_DIRECTORY "@MDS_RUNTIME_ROOT_DIRECTORY@"
/**
- * The root directory of temporarily stored data stored by MDS servers
+ * The root directory of temporarily stored data stored by mds servers
*/
-#ifndef MDS_STORAGE_ROOT_DIRECTORY
-#define MDS_STORAGE_ROOT_DIRECTORY TMPDIR "/.{system-directory}." PKGNAME
-#endif
+#define MDS_STORAGE_ROOT_DIRECTORY "@MDS_STORAGE_ROOT_DIRECTORY@"
/**
* The user ID for the root user
*/
-#ifndef ROOT_USER_UID
-#define ROOT_USER_UID 0
-#endif
+#define ROOT_USER_UID @ROOT_USER_UID@
/**
* The group ID for the root group
*/
-#ifndef ROOT_GROUP_GID
-#define ROOT_GROUP_GID 0
-#endif
+#define ROOT_GROUP_GID @ROOT_GROUP_GID@
/**
* The group ID for the nobody group
*/
-#ifndef NOBODY_GROUP_GID
-#define NOBODY_GROUP_GID ROOT_GROUP_GID
-#endif
+#define NOBODY_GROUP_GID @NOBODY_GROUP_GID@
/* These three names above are redundant, but that is to avoid errors. */
@@ -120,101 +96,77 @@
/**
* The byte length of the authentication token
*/
-#ifndef TOKEN_LENGTH
-#define TOKEN_LENGTH 1024
-#endif
+#define TOKEN_LENGTH @TOKEN_LENGTH@
/**
* Random number generator to use for generating a token
*/
-#ifndef TOKEN_RANDOM
-#define TOKEN_RANDOM "/dev/urandom"
-#endif
+#define TOKEN_RANDOM "@TOKEN_RANDOM@"
/**
* The path of the symlink to the executed command
*/
-#ifndef SELF_EXE
-#define SELF_EXE "/proc/self/exe"
-#endif
+#define SELF_EXE "@SELF_EXE@"
/**
* The path to the directory with symlinks to each file that is open
*/
-#ifndef SELF_FD
-#define SELF_FD "/proc/self/fd"
-#endif
+#define SELF_FD "@SELF_FD@"
/**
* Pattern for the names of shared object to which states are marshalled
*/
-#ifndef SHM_PATH_PATTERN
-#define SHM_PATH_PATTERN "/.proc-pid-%ji"
-#endif
+#define SHM_PATH_PATTERN "@SHM_PATH_PATTERN@"
/**
* The maximum number of command line arguments to allow
*/
-#ifndef ARGC_LIMIT
-#define ARGC_LIMIT 50
-#endif
+#define ARGC_LIMIT @ARGC_LIMIT@
/**
* The number of additional arguments a libexec server may have
*/
-#ifndef LIBEXEC_ARGC_EXTRA_LIMIT
-#define LIBEXEC_ARGC_EXTRA_LIMIT 5
-#endif
+#define LIBEXEC_ARGC_EXTRA_LIMIT @LIBEXEC_ARGC_EXTRA_LIMIT@
/**
* The maximum number of display allowed on the system
*/
-#ifndef DISPLAY_MAX
-#define DISPLAY_MAX 1000
-#endif
+#define DISPLAY_MAX @DISPLAY_MAX@
/**
* The name of the environment variable that
* indicates the index of the display
*/
-#ifndef DISPLAY_ENV
-#define DISPLAY_ENV "MDS_DISPLAY"
-#endif
+#define DISPLAY_ENV "@DISPLAY_ENV@"
/**
* The name of the environment variable that
* indicates the display server's process group
*/
-#ifndef PGROUP_ENV
-#define PGROUP_ENV "MDS_PGROUP"
-#endif
+#define PGROUP_ENV "@PGROUP_ENV@"
/**
* The minimum time that most have elapsed
* for respawning to be allowed
*/
-#ifndef RESPAWN_TIME_LIMIT_SECONDS
-#define RESPAWN_TIME_LIMIT_SECONDS 5
-#endif
+#define RESPAWN_TIME_LIMIT_SECONDS @RESPAWN_TIME_LIMIT_SECONDS@
/**
* The dot-prefixless basename of the initrc
* file that the master server executes
*/
-#ifndef INITRC_FILE
-#define INITRC_FILE "mdsinitrc"
-#endif
+#define INITRC_FILE "@INITRC_FILE@"
#endif