xsecurelock-1.5.1/0000755061501702575230000000000013536475523011105 500000000000000xsecurelock-1.5.1/env_info.h0000644061501702575230000000225113420106751012763 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef ENV_INFO_H #define ENV_INFO_H #include /*! \brief Loads the current host name. * * \param hostname_buf The buffer to write the host name to. * \param hostname_buflen The size of the buffer. * \return Whether fetching the host name succeeded. */ int GetHostName(char* hostname_buf, size_t hostname_buflen); /*! \brief Loads the current user name. * * \param username_buf The buffer to write the user name to. * \param username_buflen The size of the buffer. * \return Whether fetching the user name succeeded. */ int GetUserName(char* username_buf, size_t username_buflen); #endif xsecurelock-1.5.1/version.c0000644061501702575230000000005213536475523012653 00000000000000const char *const git_version = "v1.5.1"; xsecurelock-1.5.1/helpers/0000755061501702575230000000000013536475523012547 500000000000000xsecurelock-1.5.1/helpers/monitors.c0000644061501702575230000002310313420106751014466 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include "monitors.h" #include // for XWindowAttributes, Display, XGetW... #include // for qsort #include // for memcmp, memset #ifdef HAVE_XRANDR_EXT #include // for XRRMonitorInfo, XRRCrtcInfo, XRRO... #include // for RANDR_MAJOR, RRNotify, RANDR_MINOR #if RANDR_MAJOR > 1 || (RANDR_MAJOR == 1 && RANDR_MINOR >= 5) #define HAVE_XRANDR15_EXT #endif #endif #include "../env_settings.h" // for GetIntSetting #include "../logging.h" // for Log #ifdef HAVE_XRANDR_EXT static Display* initialized_for = NULL; static int have_xrandr12_ext; #ifdef HAVE_XRANDR15_EXT static int have_xrandr15_ext; #endif static int event_base; static int error_base; static int MaybeInitXRandR(Display* dpy) { if (dpy == initialized_for) { return have_xrandr12_ext; } have_xrandr12_ext = 0; #ifdef HAVE_XRANDR15_EXT have_xrandr15_ext = 0; #endif if (XRRQueryExtension(dpy, &event_base, &error_base)) { int major, minor; if (XRRQueryVersion(dpy, &major, &minor)) { // XRandR before 1.2 can't connect multiple screens to one, so the // default root window size tracking is sufficient for that. if (major > 1 || (major == 1 && minor >= 2)) { if (!GetIntSetting("XSECURELOCK_NO_XRANDR", 0)) { have_xrandr12_ext = 1; } } #ifdef HAVE_XRANDR15_EXT if (major > 1 || (major == 1 && minor >= 5)) { if (!GetIntSetting("XSECURELOCK_NO_XRANDR15", 0)) { have_xrandr15_ext = 1; } } #endif } } initialized_for = dpy; return have_xrandr12_ext; } #endif #define CLAMP(x, mi, ma) ((x) < (mi) ? (mi) : (x) > (ma) ? (ma) : (x)) static int CompareMonitors(const void* a, const void* b) { return memcmp(a, b, sizeof(Monitor)); } static int IntervalsOverlap(int astart, int asize, int bstart, int bsize) { // Compute exclusive bounds. int aend = astart + asize; int bend = bstart + bsize; // If one interval starts at or after the other, there's no overlap. if (astart >= bend || bstart >= aend) { return 0; } // Otherwise, there must be an overlap. return 1; } static void AddMonitor(Monitor* out_monitors, size_t* num_monitors, size_t max_monitors, int x, int y, int w, int h) { #ifdef DEBUG_EVENTS Log("AddMonitor %d %d %d %d", x, y, w, h); #endif // Too many monitors? Stop collecting them. if (*num_monitors >= max_monitors) { #ifdef DEBUG_EVENTS Log("Skip (too many)"); #endif return; } // Skip empty "monitors". if (w <= 0 || h <= 0) { #ifdef DEBUG_EVENTS Log("Skip (zero)"); #endif return; } // Skip overlapping "monitors" (typically in cloned display setups). size_t i; for (i = 0; i < *num_monitors; ++i) { if (IntervalsOverlap(x, w, out_monitors[i].x, out_monitors[i].width) && IntervalsOverlap(y, h, out_monitors[i].y, out_monitors[i].height)) { #ifdef DEBUG_EVENTS Log("Skip (overlap with %d)", (int)i); #endif return; } } #ifdef DEBUG_EVENTS Log("Monitor %d = %d %d %d %d", (int)*num_monitors, x, y, w, h); #endif out_monitors[*num_monitors].x = x; out_monitors[*num_monitors].y = y; out_monitors[*num_monitors].width = w; out_monitors[*num_monitors].height = h; ++*num_monitors; } #ifdef HAVE_XRANDR_EXT static int GetMonitorsXRandR12(Display* dpy, Window window, int wx, int wy, int ww, int wh, Monitor* out_monitors, size_t* out_num_monitors, size_t max_monitors) { XRRScreenResources* screenres = XRRGetScreenResources(dpy, window); if (screenres == NULL) { return 0; } int i; for (i = 0; i < screenres->noutput; ++i) { XRROutputInfo* output = XRRGetOutputInfo(dpy, screenres, screenres->outputs[i]); if (output == NULL) { continue; } if (output->connection == RR_Connected) { // NOTE: If an output has multiple Crtcs (i.e. if the screen is // cloned), we only look at the first. Let's assume that the center // of that one should always be onscreen anyway (even though they // may not be, as cloned displays can have different panning // settings). RRCrtc crtc = (output->crtc ? output->crtc : output->ncrtc ? output->crtcs[0] : 0); XRRCrtcInfo* info = (crtc ? XRRGetCrtcInfo(dpy, screenres, crtc) : 0); if (info != NULL) { int x = CLAMP(info->x, wx, wx + ww) - wx; int y = CLAMP(info->y, wy, wy + wh) - wy; int w = CLAMP(info->x + (int)info->width, wx + x, wx + ww) - (wx + x); int h = CLAMP(info->y + (int)info->height, wy + y, wy + wh) - (wy + y); AddMonitor(out_monitors, out_num_monitors, max_monitors, x, y, w, h); XRRFreeCrtcInfo(info); } } XRRFreeOutputInfo(output); } XRRFreeScreenResources(screenres); return *out_num_monitors != 0; } #ifdef HAVE_XRANDR15_EXT static int GetMonitorsXRandR15(Display* dpy, Window window, int wx, int wy, int ww, int wh, Monitor* out_monitors, size_t* out_num_monitors, size_t max_monitors) { if (!have_xrandr15_ext) { return 0; } int num_rrmonitors; XRRMonitorInfo* rrmonitors = XRRGetMonitors(dpy, window, 1, &num_rrmonitors); if (rrmonitors == NULL) { return 0; } int i; for (i = 0; i < num_rrmonitors; ++i) { XRRMonitorInfo* info = &rrmonitors[i]; int x = CLAMP(info->x, wx, wx + ww) - wx; int y = CLAMP(info->y, wy, wy + wh) - wy; int w = CLAMP(info->x + info->width, wx + x, wx + ww) - (wx + x); int h = CLAMP(info->y + info->height, wy + y, wy + wh) - (wy + y); AddMonitor(out_monitors, out_num_monitors, max_monitors, x, y, w, h); } XRRFreeMonitors(rrmonitors); return *out_num_monitors != 0; } #endif static int GetMonitorsXRandR(Display* dpy, Window window, const XWindowAttributes* xwa, Monitor* out_monitors, size_t* out_num_monitors, size_t max_monitors) { if (!MaybeInitXRandR(dpy)) { return 0; } // Translate to absolute coordinates so we can compare them to XRandR data. int wx, wy; Window child; if (!XTranslateCoordinates(dpy, window, DefaultRootWindow(dpy), xwa->x, xwa->y, &wx, &wy, &child)) { Log("XTranslateCoordinates failed"); wx = xwa->x; wy = xwa->y; } #ifdef HAVE_XRANDR15_EXT if (GetMonitorsXRandR15(dpy, window, wx, wy, xwa->width, xwa->height, out_monitors, out_num_monitors, max_monitors)) { return 1; } #endif return GetMonitorsXRandR12(dpy, window, wx, wy, xwa->width, xwa->height, out_monitors, out_num_monitors, max_monitors); } #endif static void GetMonitorsGuess(const XWindowAttributes* xwa, Monitor* out_monitors, size_t* out_num_monitors, size_t max_monitors) { // XRandR-less dummy fallback. size_t guessed_monitors = CLAMP((size_t)(xwa->width * 9 + xwa->height * 8) / (size_t)(xwa->height * 16), // 1, max_monitors); size_t i; for (i = 0; i < guessed_monitors; ++i) { int x = xwa->width * i / guessed_monitors; int y = 0; int w = (xwa->width * (i + 1) / guessed_monitors) - (xwa->width * i / guessed_monitors); int h = xwa->height; AddMonitor(out_monitors, out_num_monitors, max_monitors, x, y, w, h); } } size_t GetMonitors(Display* dpy, Window window, Monitor* out_monitors, size_t max_monitors) { if (max_monitors < 1) { return 0; } size_t num_monitors = 0; // As outputs will be relative to the window, we have to query its attributes. XWindowAttributes xwa; XGetWindowAttributes(dpy, window, &xwa); do { #ifdef HAVE_XRANDR_EXT if (GetMonitorsXRandR(dpy, window, &xwa, out_monitors, &num_monitors, max_monitors)) { break; } #endif GetMonitorsGuess(&xwa, out_monitors, &num_monitors, max_monitors); } while (0); // Sort the monitors in some deterministic order. qsort(out_monitors, num_monitors, sizeof(*out_monitors), CompareMonitors); // Fill the rest with zeros. if (num_monitors < max_monitors) { memset(out_monitors + num_monitors, 0, (max_monitors - num_monitors) * sizeof(*out_monitors)); } return num_monitors; } void SelectMonitorChangeEvents(Display* dpy, Window window) { #ifdef HAVE_XRANDR_EXT if (MaybeInitXRandR(dpy)) { XRRSelectInput(dpy, window, RRScreenChangeNotifyMask | RRCrtcChangeNotifyMask | RROutputChangeNotifyMask); } #else (void)dpy; (void)window; #endif } int IsMonitorChangeEvent(Display* dpy, int type) { #ifdef HAVE_XRANDR_EXT if (MaybeInitXRandR(dpy)) { switch (type - event_base) { case RRScreenChangeNotify: case RRNotify + RRNotify_CrtcChange: case RRNotify + RRNotify_OutputChange: return 1; default: return 0; } } #else (void)dpy; (void)type; #endif // XRandR-less dummy fallback. return 0; } xsecurelock-1.5.1/helpers/saver_blank0000755061501702575230000000132213533470677014704 00000000000000#!/bin/sh # # Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Just sleep for an arbitrary long time. The main process is already # taking care of blanking. exec sleep 86400 xsecurelock-1.5.1/helpers/saver_xscreensaver.in0000755061501702575230000001054113533470677016735 00000000000000#!/bin/sh # # Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. : ${XSECURELOCK_XSCREENSAVER_PATH:=@path_to_xscreensaver@} TAB=' ' # Note: the following logic is somewhat derived from parse_screenhack in # XScreenSaver. convert_xscreensaver_programs() { i=0 while IFS= read -r line; do skipwhite() { while :; do case "$line" in $TAB*) line=${line#$TAB} ;; \ *) line=${line# } ;; *) break ;; esac done } skipwhite # Read disabled field. case "$line" in -*) enabled=false; line=${line#-}; skipwhite ;; *) enabled=true ;; esac # Strip visual name (VISUAL:, where VISUAL can't contain " or whitespace). case "${line%%[\" $TAB]*}" in *:*) line=${line#*:}; skipwhite ;; esac # Strip textual description ("description"). case "$line" in '"'*) line=${line#\"*\"}; skipwhite ;; esac # What's remaining is the program name with its options. echo "$i $enabled $line" i=$((i+1)) done } convert_program_list() { i=0 while IFS= read -r line; do echo "$i true $line -root" i=$((i+1)) done } list_savers() { want_all=$1 if [ -f ~/.xscreensaver ]; then printf "%b" "$( xrdb -n ~/.xscreensaver 2>/dev/null |\ grep ^programs: |\ cut -d : -f 2- )" | convert_xscreensaver_programs else ls "$XSECURELOCK_XSCREENSAVER_PATH" | convert_program_list fi | while read -r number enabled saver flags; do $want_all || $enabled || continue [ -x "$XSECURELOCK_XSCREENSAVER_PATH/$saver" ] || continue printf '%d\t%s/%s\n' "$number" "$XSECURELOCK_XSCREENSAVER_PATH" "$saver $flags" done } mode= # Debug mode to list all savers. case "$1" in --list_savers) list_savers false exit 0 ;; --list_all_savers) list_savers true exit 0 ;; --internal-override-mode=*) mode=${1#*=} ;; esac if [ -z "$mode" ]; then mode=$( xrdb -n ~/.xscreensaver 2>/dev/null |\ grep ^mode: |\ cut -f 2 ) fi selected= case "$mode" in one) selected=$( xrdb -n ~/.xscreensaver 2>/dev/null |\ grep ^selected: |\ cut -f 2 ) ;; random) # NOT random-same. # Try bash's $RANDOM, but if it's not there, just use the PID. selected=${RANDOM:-$$} ;; esac if [ -z "$selected" ]; then # Note: random-same hits this. # We're using the parent process ID here, which may be a saver_multiplex # instance. This ensures that multiple instances of this always spawn the same # saver on each screen. selected=$PPID fi # Prepare the saver list so we only parse once. case "$mode" in one) savers=$(list_savers true) count=$(printf '%s\n' "$savers" | wc -l) ;; *) savers=$(list_savers false) count=$(printf '%s\n' "$savers" | wc -l) ;; esac select_saver() { case "$mode" in one) printf '%s\n' "$savers" | grep "^$selected$(printf '\t')" ;; *) printf '%s\n' "$savers" | tail -n +$((selected % count + 1)) ;; esac | head -n 1 | cut -f 2- } # On SIGUSR1, we exit the saver and retry the selection. sigusr1_caught=false trap 'sigusr1_caught=true' USR1 while :; do saver=$(select_saver) if [ -z "$saver" ]; then echo >&2 "xsecurelock: No saver selected. Giving up." exec ./saver_blank fi sigusr1_caught=false eval $saver status=$? if [ $status -eq 0 ] || $sigusr1_caught; then # Immediately try the next saver. case "$mode" in one) ;; *) selected=$((selected + 1)) ;; esac else # Saver failed entirely. Just give up. echo >&2 "xsecurelock: Screen saver failed with status $status: $saver." sleep 2 # Anti-spam delay. if [ x"$mode" != x"random" ]; then # As a fallback, when the saver failed, try random. exec "$0" --internal-override-mode=random fi exit $status fi done xsecurelock-1.5.1/helpers/saver_mpv.in0000755061501702575230000000237213533470677015032 00000000000000#!/bin/sh # # Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. : ${XSECURELOCK_LIST_VIDEOS_COMMAND:=find ~/Videos -type f} : ${XSECURELOCK_IMAGE_DURATION_SECONDS:=1} # Run mpv in a loop so we can quickly restart mpv in case it exits (has shown # the last picture/video). while true; do sh -c "$XSECURELOCK_LIST_VIDEOS_COMMAND" | shuf | head -n 256 |\ @path_to_mpv@ \ --no-input-terminal \ --really-quiet \ --no-stop-screensaver \ --wid="${XSCREENSAVER_WINDOW}" \ --no-audio \ --image-display-duration="${XSECURELOCK_IMAGE_DURATION_SECONDS}" \ --shuffle \ --playlist=- & # Avoid spinning if mpv exits immediately, but don't wait to restart mpv in # the common case. sleep 1 wait done xsecurelock-1.5.1/helpers/saver_mplayer.in0000755061501702575230000000164313533470677015701 00000000000000#!/bin/sh # # Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. : ${XSECURELOCK_LIST_VIDEOS_COMMAND:=find ~/Videos -type f} sh -c "$XSECURELOCK_LIST_VIDEOS_COMMAND" | shuf | head -n 256 |\ @path_to_mplayer@ \ -noconsolecontrols \ -really-quiet \ -nostop-xscreensaver \ -heartbeat-cmd "" \ -wid "${XSCREENSAVER_WINDOW}" \ -fixed-vo \ -nosound \ -shuffle \ -playlist - xsecurelock-1.5.1/helpers/dimmer.c0000644061501702575230000003130313533470677014112 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /*! *\brief Screen dimmer. * *A simple tool to dim the screen, then wait a little so a screen locker can *take over. * *Sample usage: * xset s 300 2 * xss-lock -n dim-screen -l xsecurelock */ #include // for Window, Atom, CopyFromParent, GCForegr... #include // for XA_CARDINAL #include // for Display, XColor, XSetWindowAttributes #include // for pow, ceil, frexp, nextafter, sqrt #include // for NULL, snprintf #include // for abort #include // for nanosleep, timespec #include "../env_settings.h" // for GetIntSetting, GetDoubleSetting, GetSt... #include "../logging.h" // for Log #include "../wm_properties.h" // for SetWMProperties // Get the entry of value index of the Bayer matrix for n = 2^power. void Bayer(int index, int power, int *x, int *y) { // M_1 = [1]. if (power == 0) { *x = 0; *y = 0; return; } // M_{2n} = [[4Mn 4M_n+2] [4M_n+3 4M_n+1]] int subx, suby; Bayer(index >> 2, power - 1, &subx, &suby); int n = 1 << (power - 1); switch (index & 3) { case 0: *x = subx; *y = suby; break; case 1: *x = subx + n; *y = suby + n; break; case 2: *x = subx + n; *y = suby; break; case 3: *x = subx; *y = suby + n; break; default: // Logically impossible, but clang-analyzer needs help here. abort(); break; } } int HaveCompositor(Display *display) { char buf[64]; int buflen = snprintf(buf, sizeof(buf), "_NET_WM_CM_S%d", (int)DefaultScreen(display)); if (buflen <= 0 || buflen >= (size_t)sizeof(buf)) { Log("Wow, pretty long screen number you got there"); return 0; } Atom atom = XInternAtom(display, buf, False); return XGetSelectionOwner(display, atom) != None; } int dim_time_ms; int wait_time_ms; double dim_fps; double dim_alpha; XColor dim_color; struct DimEffect { void (*PreCreateWindow)(void *self, Display *display, XSetWindowAttributes *dimattrs, unsigned long *dimmask); void (*PostCreateWindow)(void *self, Display *display, Window dim_window); void (*DrawFrame)(void *self, Display *display, Window dim_window, int frame, int w, int h); int frame_count; }; struct DitherEffect { struct DimEffect super; int pattern_power; int pattern_frames; Pixmap pattern; XGCValues gc_values; GC dim_gc, pattern_gc; }; void DitherEffectPreCreateWindow(void *unused_self, Display *unused_display, XSetWindowAttributes *unused_dimattrs, unsigned long *unused_dimmask) { (void)unused_self; (void)unused_display; (void)unused_dimattrs; *unused_dimmask = *unused_dimmask; // Shut up clang-analyzer. } void DitherEffectPostCreateWindow(void *self, Display *display, Window dim_window) { struct DitherEffect *dimmer = self; // Create a pixmap to define the pattern we want to set as the window shape. dimmer->gc_values.foreground = 0; dimmer->pattern = XCreatePixmap(display, dim_window, 1 << dimmer->pattern_power, 1 << dimmer->pattern_power, 1); dimmer->pattern_gc = XCreateGC(display, dimmer->pattern, GCForeground, &dimmer->gc_values); XFillRectangle(display, dimmer->pattern, dimmer->pattern_gc, 0, 0, 1 << dimmer->pattern_power, 1 << dimmer->pattern_power); XSetForeground(display, dimmer->pattern_gc, 1); // Create a pixmap to define the shape of the screen-filling window (which // will increase over time). dimmer->gc_values.fill_style = FillStippled; dimmer->gc_values.foreground = dim_color.pixel; dimmer->gc_values.stipple = dimmer->pattern; dimmer->dim_gc = XCreateGC(display, dim_window, GCFillStyle | GCForeground | GCStipple, &dimmer->gc_values); } void DitherEffectDrawFrame(void *self, Display *display, Window dim_window, int frame, int w, int h) { struct DitherEffect *dimmer = self; // Move the pattern forward to the next display frame. One display frame can // have multiple pattern frames. int start_pframe = frame * dimmer->pattern_frames / dimmer->super.frame_count; int end_pframe = (frame + 1) * dimmer->pattern_frames / dimmer->super.frame_count; int pframe; for (pframe = start_pframe; pframe < end_pframe; ++pframe) { int x, y; Bayer(pframe, dimmer->pattern_power, &x, &y); XDrawPoint(display, dimmer->pattern, dimmer->pattern_gc, x, y); } // Draw the pattern on the window. XChangeGC(display, dimmer->dim_gc, GCStipple, &dimmer->gc_values); XFillRectangle(display, dim_window, dimmer->dim_gc, 0, 0, w, h); } void DitherEffectInit(struct DitherEffect *dimmer, Display *unused_display) { (void)unused_display; // Ensure dimming at least at a defined frame rate. dimmer->pattern_power = 3; // Total time of effect if we wouldn't stop after dim_alpha of fading out. double total_time_ms = dim_time_ms / dim_alpha; // Minimum "total" frame count of the animation. double total_frames_min = total_time_ms / 1000.0 * dim_fps; // This actually computes ceil(log2(sqrt(total_frames_min))) but cannot fail. (void)frexp(sqrt(total_frames_min), &dimmer->pattern_power); // Clip extreme/unsupported values. if (dimmer->pattern_power < 2) { dimmer->pattern_power = 2; } if (dimmer->pattern_power > 8) { dimmer->pattern_power = 8; } // Generate the frame count and vtable. dimmer->pattern_frames = ceil(pow(1 << dimmer->pattern_power, 2) * dim_alpha); dimmer->super.frame_count = ceil(dim_time_ms * dim_fps / 1000.0); dimmer->super.PreCreateWindow = DitherEffectPreCreateWindow; dimmer->super.PostCreateWindow = DitherEffectPostCreateWindow; dimmer->super.DrawFrame = DitherEffectDrawFrame; } struct OpacityEffect { struct DimEffect super; Atom property_atom; double dim_color_brightness; }; void OpacityEffectPreCreateWindow(void *unused_self, Display *unused_display, XSetWindowAttributes *dimattrs, unsigned long *dimmask) { (void)unused_self; (void)unused_display; dimattrs->background_pixel = dim_color.pixel; *dimmask |= CWBackPixel; } void OpacityEffectPostCreateWindow(void *self, Display *display, Window dim_window) { struct OpacityEffect *dimmer = self; long value = 0; XChangeProperty(display, dim_window, dimmer->property_atom, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&value, 1); } double sRGBToLinear(double value) { return (value <= 0.04045) ? value / 12.92 : pow((value + 0.055) / 1.055, 2.4); } double LinearTosRGB(double value) { return (value <= 0.0031308) ? 12.92 * value : 1.055 * pow(value, 1.0 / 2.4) - 0.055; } void OpacityEffectDrawFrame(void *self, Display *display, Window dim_window, int frame, int unused_w, int unused_h) { struct OpacityEffect *dimmer = self; (void)unused_w; (void)unused_h; // Calculate the linear-space alpha we want to be fading to. double linear_alpha = (frame + 1) * dim_alpha / dimmer->super.frame_count; double linear_min = linear_alpha * dimmer->dim_color_brightness; double linear_max = linear_alpha * dimmer->dim_color_brightness + (1.0 - linear_alpha); // Calculate the sRGB-space alpha we thus must select to get the same color // range. double srgb_min = LinearTosRGB(linear_min); double srgb_max = LinearTosRGB(linear_max); double srgb_alpha = 1.0 - (srgb_max - srgb_min); // Note: this may have a different brightness level, here we're simply // solving for the same contrast as the "dither" mode. // Log("Got: [%f..%f], want: [%f..%f]", // srgb_alpha * LinearTosRGB(dimmer->dim_color_brightness), // srgb_alpha * LinearTosRGB(dimmer->dim_color_brightness) + // (1.0 - srgb_alpha), // srgb_min, srgb_max); // Convert to an opacity value. long value = nextafter(0xffffffff, 0) * srgb_alpha; XChangeProperty(display, dim_window, dimmer->property_atom, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&value, 1); } void OpacityEffectInit(struct OpacityEffect *dimmer, Display *display) { dimmer->property_atom = XInternAtom(display, "_NET_WM_WINDOW_OPACITY", False); dimmer->dim_color_brightness = sRGBToLinear(dim_color.red / 65535.0) * 0.2126 + sRGBToLinear(dim_color.green / 65535.0) * 0.7152 + sRGBToLinear(dim_color.blue / 65535.0) * 0.0722; // Generate the frame count and vtable. dimmer->super.frame_count = ceil(dim_time_ms * dim_fps / 1000.0); dimmer->super.PreCreateWindow = OpacityEffectPreCreateWindow; dimmer->super.PostCreateWindow = OpacityEffectPostCreateWindow; dimmer->super.DrawFrame = OpacityEffectDrawFrame; } int main(int argc, char **argv) { Display *display = XOpenDisplay(NULL); if (display == NULL) { Log("Could not connect to $DISPLAY"); return 1; } Window root_window = DefaultRootWindow(display); // Load global settings. dim_time_ms = GetIntSetting("XSECURELOCK_DIM_TIME_MS", 2000); wait_time_ms = GetIntSetting("XSECURELOCK_WAIT_TIME_MS", 5000); dim_fps = GetDoubleSetting( "XSECURELOCK_DIM_FPS", GetDoubleSetting("XSECURELOCK_" /* REMOVE IN v2 */ "DIM_MIN_FPS", 60)); dim_alpha = GetDoubleSetting("XSECURELOCK_DIM_ALPHA", 0.875); int have_compositor = GetIntSetting( "XSECURELOCK_DIM_OVERRIDE_COMPOSITOR_DETECTION", HaveCompositor(display)); if (dim_alpha <= 0 || dim_alpha > 1) { Log("XSECURELOCK_DIM_ALPHA must be in ]0..1] - using default"); dim_alpha = 0.875; } // Prepare the background color. Colormap colormap = DefaultColormap(display, DefaultScreen(display)); const char *color_name = GetStringSetting("XSECURELOCK_DIM_COLOR", "black"); XParseColor(display, colormap, color_name, &dim_color); if (XAllocColor(display, colormap, &dim_color)) { // Log("Allocated color %lu = %d %d %d", dim_color.pixel, dim_color.red, // dim_color.green, dim_color.blue); } else { dim_color.pixel = BlackPixel(display, DefaultScreen(display)); XQueryColor(display, colormap, &dim_color); Log("Could not allocate color or unknown color name: %s", color_name); } // Set up the filter. struct DitherEffect dither_dimmer; struct OpacityEffect opacity_dimmer; struct DimEffect *dimmer; if (have_compositor) { OpacityEffectInit(&opacity_dimmer, display); dimmer = &opacity_dimmer.super; } else { DitherEffectInit(&dither_dimmer, display); dimmer = &dither_dimmer.super; } // Create a simple screen-filling window. int w = DisplayWidth(display, DefaultScreen(display)); int h = DisplayHeight(display, DefaultScreen(display)); XSetWindowAttributes dimattrs = {0}; dimattrs.save_under = 1; dimattrs.override_redirect = 1; unsigned long dimmask = CWSaveUnder | CWOverrideRedirect; dimmer->PreCreateWindow(dimmer, display, &dimattrs, &dimmask); Window dim_window = XCreateWindow(display, root_window, 0, 0, w, h, 0, CopyFromParent, InputOutput, CopyFromParent, dimmask, &dimattrs); // Not using the xsecurelock WM_CLASS here as this window shouldn't prevent // forcing grabs. SetWMProperties(display, dim_window, "xsecurelock-dimmer", "dim", argc, argv); dimmer->PostCreateWindow(dimmer, display, dim_window); // Precalculate the sleep time per step. unsigned long long sleep_time_ns = (dim_time_ms * 1000000ULL) / dimmer->frame_count; struct timespec sleep_ts; sleep_ts.tv_sec = sleep_time_ns / 1000000000; sleep_ts.tv_nsec = sleep_time_ns % 1000000000; XMapRaised(display, dim_window); int i; for (i = 0; i < dimmer->frame_count; ++i) { // Advance the dim pattern by one step. dimmer->DrawFrame(dimmer, display, dim_window, i, w, h); // Draw it! XFlush(display); // Sleep a while. Yes, even at the end now - we want the user to see this // after all. nanosleep(&sleep_ts, NULL); } // Wait a bit at the end (to hand over to the screen locker without // flickering). sleep_ts.tv_sec = wait_time_ms / 1000; sleep_ts.tv_nsec = (wait_time_ms % 1000) * 1000000L; nanosleep(&sleep_ts, NULL); return 0; } xsecurelock-1.5.1/helpers/until_nonidle.c0000644061501702575230000001616713536220740015476 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /*! * \brief Screen dimmer helper. * * A simple tool to run a tool to dim the screen, and - depending on which comes * first: * - On leaving idle status, kill the dimming tool and exit with success status. * - On dimming tool exiting, exit with error status. * * Sample usage: * until_nonidle dim-screen || xsecurelock */ #include // for Window #include // for Display, XOpenDisplay, Default... #include // for sigaction, raise, sigemptyset #include // for uint64_t #include // for NULL, size_t, EXIT_FAILURE #include // for memcpy, NULL, strcmp, strcspn #include // for gettimeofday, timeval #include // for nanosleep, timespec #include // for _exit, execvp, fork, setsid #ifdef HAVE_XSCREENSAVER_EXT #include // for XScreenSaverAllocInfo, XScreen... #endif #ifdef HAVE_XSYNC_EXT #include // for XSyncSystemCounter, XSyncListS... #include // for XSyncValue #endif #include "../env_settings.h" // for GetIntSetting, GetStringSetting #include "../logging.h" // for Log, LogErrno #include "../wait_pgrp.h" // for KillPgrp, WaitPgrp #ifdef HAVE_XSCREENSAVER_EXT int have_xscreensaver_ext; XScreenSaverInfo *saver_info; #endif #ifdef HAVE_XSYNC_EXT int have_xsync_ext; int num_xsync_counters; XSyncSystemCounter *xsync_counters; #endif pid_t childpid = 0; static void HandleSIGTERM(int signo) { if (childpid != 0) { KillPgrp(childpid, signo); // Dirty, but quick. } raise(signo); } uint64_t GetIdleTimeForSingleTimer(Display *display, Window w, const char *timer) { if (*timer == 0) { #ifdef HAVE_XSCREENSAVER_EXT if (have_xscreensaver_ext) { XScreenSaverQueryInfo(display, w, saver_info); return saver_info->idle; } #endif } else { #ifdef HAVE_XSYNC_EXT if (have_xsync_ext) { int i; for (i = 0; i < num_xsync_counters; ++i) { if (!strcmp(timer, xsync_counters[i].name)) { // I know this is inefficient. XSyncValue value; XSyncQueryCounter(display, xsync_counters[i].counter, &value); return (((uint64_t)XSyncValueHigh32(value)) << 32) | (uint64_t)XSyncValueLow32(value); } } } #endif } Log("Timer \"%s\" not supported", timer); (void)display; (void)w; return (uint64_t)-1; } uint64_t GetIdleTime(Display *display, Window w, const char *timers) { uint64_t min_idle_time = (uint64_t)-1; for (;;) { size_t len = strcspn(timers, ","); if (timers[len] == 0) { // End of string. uint64_t this_idle_time = GetIdleTimeForSingleTimer(display, w, timers); if (this_idle_time < min_idle_time) { min_idle_time = this_idle_time; } return min_idle_time; } char this_timer[64]; if (len < sizeof(this_timer)) { memcpy(this_timer, timers, len); this_timer[len] = 0; uint64_t this_idle_time = GetIdleTimeForSingleTimer(display, w, this_timer); if (this_idle_time < min_idle_time) { min_idle_time = this_idle_time; } } else { Log("Too long timer name - skipping: %s", timers); } timers += len + 1; } } int main(int argc, char **argv) { if (argc <= 1) { Log("Usage: %s program args... - runs the given program until non-idle", argv[0]); Log("Meant to be used with dimming tools, like: %s dimmer || xsecurelock", argv[0]); Log("Returns 0 when no longer idle, and 1 when still idle"); return 1; } int dim_time_ms = GetIntSetting("XSECURELOCK_DIM_TIME_MS", 2000); int wait_time_ms = GetIntSetting("XSECURELOCK_WAIT_TIME_MS", 5000); const char *timers = GetStringSetting("XSECURELOCK_IDLE_TIMERS", #ifdef HAVE_XSCREENSAVER_EXT "" #else "IDLETIME" #endif ); Display *display = XOpenDisplay(NULL); if (display == NULL) { Log("Could not connect to $DISPLAY."); return 1; } Window root_window = DefaultRootWindow(display); // Initialize the extensions. #ifdef HAVE_XSCREENSAVER_EXT have_xscreensaver_ext = 0; int scrnsaver_event_base, scrnsaver_error_base; if (XScreenSaverQueryExtension(display, &scrnsaver_event_base, &scrnsaver_error_base)) { have_xscreensaver_ext = 1; saver_info = XScreenSaverAllocInfo(); } #endif #ifdef HAVE_XSYNC_EXT have_xsync_ext = 0; int sync_event_base, sync_error_base; if (XSyncQueryExtension(display, &sync_event_base, &sync_error_base)) { have_xsync_ext = 1; xsync_counters = XSyncListSystemCounters(display, &num_xsync_counters); } #endif // Capture the initial idle time. uint64_t prev_idle = GetIdleTime(display, root_window, timers); if (prev_idle == (uint64_t)-1) { Log("Could not initialize idle timers. Bailing out."); return 1; } // Start the subprocess. childpid = ForkWithoutSigHandlers(); if (childpid == -1) { LogErrno("fork"); return 1; } if (childpid == 0) { // Child process. StartPgrp(); execvp(argv[1], argv + 1); LogErrno("execvp"); _exit(EXIT_FAILURE); } // Parent process. struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESETHAND; // It re-raises to suicide. sa.sa_handler = HandleSIGTERM; // To kill children. if (sigaction(SIGTERM, &sa, NULL) != 0) { LogErrno("sigaction(SIGTERM)"); } InitWaitPgrp(); struct timeval start_time; gettimeofday(&start_time, NULL); int still_idle = 1; while (childpid != 0) { nanosleep(&(const struct timespec){0, 10000000L}, NULL); // 10ms. uint64_t cur_idle = GetIdleTime(display, root_window, timers); still_idle = cur_idle >= prev_idle; prev_idle = cur_idle; // Also exit when both dim and wait time expire. This allows using // xss-lock's dim-screen.sh without changes. struct timeval current_time; gettimeofday(¤t_time, NULL); int active_ms = (current_time.tv_sec - start_time.tv_sec) * 1000 + (current_time.tv_usec - start_time.tv_usec) / 1000; int should_be_running = still_idle && (active_ms <= dim_time_ms + wait_time_ms); if (!should_be_running) { KillPgrp(childpid, SIGTERM); } int status; WaitPgrp("idle", &childpid, !should_be_running, !should_be_running, &status); } // This is the point where we can exit. return still_idle ? 1 // Dimmer exited - now it's time to lock. : 0; // No longer idle - don't lock. } xsecurelock-1.5.1/helpers/authproto.c0000644061501702575230000001076013420106751014646 00000000000000/* Copyright 2014 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include "authproto.h" #include // for errno #include // for snprintf #include // for malloc, size_t #include // for strlen #include // for read, write, ssize_t #include "../logging.h" // for LogErrno, Log #include "../mlock_page.h" // for MLOCK_PAGE static size_t WriteChars(int fd, const char *buf, size_t n) { size_t total = 0; while (total < n) { ssize_t got = write(fd, buf + total, n - total); if (got < 0) { LogErrno("write"); return 0; } if (got == 0) { Log("write: could not write anything, send buffer full"); return 0; } if ((size_t)got > n - total) { Log("write: overlong write (should never happen)"); } total += got; } return total; } void WritePacket(int fd, char type, const char *message) { size_t len_s = strlen(message); if (len_s >= 0xFFFF) { Log("overlong message, cannot write (hardcoded limit)"); return; } int len = len_s; if (len < 0 || (size_t)len != len_s) { Log("overlong message, cannot write (does not fit in int)"); return; } char prefix[16]; int prefixlen = snprintf(prefix, sizeof(prefix), "%c %d\n", type, len); if (prefixlen <= 0 || (size_t)prefixlen >= sizeof(prefix)) { Log("overlong prefix, cannot write"); return; } // Yes, we're wasting syscalls here. This doesn't need to be fast though, and // this way we can avoid an extra buffer. if (!WriteChars(fd, prefix, prefixlen)) { return; } if (len != 0 && !WriteChars(fd, message, len)) { return; } if (!WriteChars(fd, "\n", 1)) { return; } } static size_t ReadChars(int fd, char *buf, size_t n, int eof_permitted) { size_t total = 0; while (total < n) { ssize_t got = read(fd, buf + total, n - total); if (got < 0) { LogErrno("read"); return 0; } if (got == 0) { if (!eof_permitted) { Log("read: unexpected end of file"); return 0; } break; } if ((size_t)got > n - total) { Log("read: overlong read (should never happen)"); } total += got; } return total; } char ReadPacket(int fd, char **message, int eof_permitted) { char type; if (!ReadChars(fd, &type, 1, eof_permitted)) { return 0; } if (type == 0) { Log("invalid packet type 0"); return 0; } char c; if (!ReadChars(fd, &c, 1, 0)) { return 0; } if (c != ' ') { Log("invalid character after packet type, expecting space"); return 0; } int len = 0; for (;;) { errno = 0; if (!ReadChars(fd, &c, 1, 0)) { return 0; } switch (c) { case '\n': goto have_len; case '0': len = len * 10 + 0; break; case '1': len = len * 10 + 1; break; case '2': len = len * 10 + 2; break; case '3': len = len * 10 + 3; break; case '4': len = len * 10 + 4; break; case '5': len = len * 10 + 5; break; case '6': len = len * 10 + 6; break; case '7': len = len * 10 + 7; break; case '8': len = len * 10 + 8; break; case '9': len = len * 10 + 9; break; default: Log("invalid character during packet length, expecting 0-9 or newline"); return 0; } } have_len: if (len < 0 || len >= 0xFFFF) { Log("invalid length %d", len); return 0; } *message = malloc((size_t)len + 1); if ((type == PTYPE_RESPONSE_LIKE_PASSWORD) && MLOCK_PAGE(*message, len + 1) < 0) { // We continue anyway, as the user being unable to unlock the screen is // worse. LogErrno("mlock"); } if (len != 0 && !ReadChars(fd, *message, len, 0)) { return 0; } (*message)[len] = 0; if (!ReadChars(fd, &c, 1, 0)) { return 0; } if (c != '\n') { Log("invalid character after packet message, expecting newline"); return 0; } return type; } xsecurelock-1.5.1/helpers/authproto_pamtester.in0000644061501702575230000000225213420106751017113 00000000000000#!/bin/sh # # Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. echo "P 15" echo "Enter password:" read -r ptype len case "$ptype" in p) # Trick: reading len+1 characters get the password and the terminating # newline - just what we need here. if head -c "$((len+1))" |\ @path_to_pamtester@ @pam_service_name@ "$USER" authenticate \ >/dev/null 2>&1; then echo "i 11" echo "I know you." exit 0 else echo "e 17" echo "Invalid password." exit 1 fi ;; x) exit 1 ;; *) echo >&2 "Unexpected packet type." exit 1 ;; esac # Shouldn't get here. exit 42 xsecurelock-1.5.1/helpers/authproto.h0000644061501702575230000000414313420106751014651 00000000000000/* Copyright 2014 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef AUTHPROTO_H #define AUTHPROTO_H // Packet format: // // // // where // // ptype = one of the below characters. // len = message length encoded in decimal ASCII. // message = len bytes that shall be shown to the user. // // By convention, uppercase packet types expect a reply and lowercase packet // types are "terminal". // PAM-to-user messages: #define PTYPE_INFO_MESSAGE 'i' #define PTYPE_ERROR_MESSAGE 'e' #define PTYPE_PROMPT_LIKE_USERNAME 'U' #define PTYPE_PROMPT_LIKE_PASSWORD 'P' // Note: there's no specific message type for successful authentication or // similar; the caller shall use the exit status of the helper only. // User-to-PAM messages: #define PTYPE_RESPONSE_LIKE_USERNAME 'u' #define PTYPE_RESPONSE_LIKE_PASSWORD 'p' #define PTYPE_RESPONSE_CANCELLED 'x' /** * \brief Writes a packet in above form. * * \param fd The file descriptor to write to. * \param type The packet type from above macros. * \param message The message to include with the packet (NUL-terminated). */ void WritePacket(int fd, char type, const char *message); /** * \brief Reads a packet in above form. * * \param fd The file descriptor to write to. * \param message A pointer to store the message (will be mlock()d). * \param eof_permitted If enabled, encountering EOF at the beginning will not * count as an error but return 0 silently. * \return The packet type, or 0 if no packet has been read. Errors are logged. */ char ReadPacket(int fd, char **message, int eof_permitted); #endif xsecurelock-1.5.1/helpers/auth_x11.c0000644061501702575230000015204713536221742014266 00000000000000/* Copyright 2014 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include // for Success, None, Atom, KBBellPitch #include // for DefaultScreen, Screen, XFree, True #include // for NULL, setlocale, LC_CTYPE, LC_TIME #include #include // for free, rand, mblen, size_t, EXIT_... #include // for strlen, memcpy, memset, strcspn #include // for timeval, select, fd_set, FD_SET #include // for gettimeofday, timeval #include // for time, nanosleep, localtime_r #include // for close, _exit, dup2, pipe, dup #if __STDC_VERSION__ >= 199901L #include #include #endif #ifdef HAVE_XFT_EXT #include // for XftColorAllocValue, XftColorFree #include // for XRenderColor, XGlyphInfo #include // for FcChar8 #endif #ifdef HAVE_XKB_EXT #include // for XkbFreeKeyboard, XkbGetControls #include // for XkbUseCoreKbd, XkbGroupsWrapMask #include // for _XkbDesc, XkbStateRec, _XkbControls #endif #include "../env_info.h" // for GetHostName, GetUserName #include "../env_settings.h" // for GetIntSetting, GetStringSetting #include "../logging.h" // for Log, LogErrno #include "../mlock_page.h" // for MLOCK_PAGE #include "../util.h" // for explicit_bzero #include "../wait_pgrp.h" // for WaitPgrp #include "../wm_properties.h" // for SetWMProperties #include "../xscreensaver_api.h" // for ReadWindowID #include "authproto.h" // for WritePacket, ReadPacket, PTYPE_R... #include "monitors.h" // for Monitor, GetMonitors, IsMonitorC... #if __STDC_VERSION__ >= 201112L #define STATIC_ASSERT(state, message) _Static_assert(state, message) #else #define STATIC_ASSERT(state, message) \ extern int statically_asserted(int assertion[(state) ? 1 : -1]); #endif //! Number of args. int argc; //! Args. char *const *argv; //! The authproto helper to use. const char *authproto_executable; //! The blinking interval in microseconds. #define BLINK_INTERVAL (250 * 1000) //! The maximum time to wait at a prompt for user input in seconds. int prompt_timeout; //! Number of dancers in the disco password display #define DISCO_PASSWORD_DANCERS 5 //! Length of the "paranoid password display". #define PARANOID_PASSWORD_LENGTH (1 << DISCO_PASSWORD_DANCERS) //! Minimum distance the cursor shall move on keypress. #define PARANOID_PASSWORD_MIN_CHANGE 4 //! Border of the window around the text. #define WINDOW_BORDER 16 //! Draw border rectangle (mainly for debugging). #undef DRAW_BORDER //! Extra line spacing. #define LINE_SPACING 4 //! Actual password prompt selected enum PasswordPrompt { PASSWORD_PROMPT_CURSOR, PASSWORD_PROMPT_ASTERISKS, PASSWORD_PROMPT_HIDDEN, PASSWORD_PROMPT_DISCO, PASSWORD_PROMPT_EMOJI, PASSWORD_PROMPT_EMOTICON, PASSWORD_PROMPT_KAOMOJI, #if __STDC_VERSION__ >= 199901L PASSWORD_PROMPT_TIME, PASSWORD_PROMPT_TIME_HEX, #endif PASSWORD_PROMPT_COUNT, }; const char *PasswordPromptStrings[] = { /* PASSWORD_PROMPT_CURSOR= */ "cursor", /* PASSWORD_PROMPT_ASTERISKS= */ "asterisks", /* PASSWORD_PROMPT_HIDDEN= */ "hidden", /* PASSWORD_PROMPT_DISCO= */ "disco", /* PASSWORD_PROMPT_EMOJI= */ "emoji", /* PASSWORD_PROMPT_EMOTICON= */ "emoticon", /* PASSWORD_PROMPT_KAOMOJI= */ "kaomoji", #if __STDC_VERSION__ >= 199901L /* PASSWORD_PROMPT_TIME= */ "time", /* PASSWORD_PROMPT_TIME_HEX= */ "time_hex", #endif }; enum PasswordPrompt password_prompt; // A disco password is composed of multiple disco_dancers (each selected at // random from the array), joined by the disco_combiner const char *disco_combiner = " ♪ "; // Note: the disco_dancers MUST all have the same length const char *disco_dancers[] = { "┏(・o・)┛", "┗(・o・)┓", }; // Emoji to display in emoji mode. The length of the array must be equal to // PARANOID_PASSWORD_LENGTH. List taken from the top items in // http://emojitracker.com/ The first item is always display in an empty prompt // (before typing in the password) const char *emoji[] = { "_____", "😂", "❤", "♻", "😍", "♥", "😭", "😊", "😒", "💕", "😘", "😩", "☺", "👌", "😔", "😁", "😏", "😉", "👍", "⬅", "😅", "🙏", "😌", "😢", "👀", "💔", "😎", "🎶", "💙", "💜", "🙌", "😳", }; STATIC_ASSERT(sizeof(emoji) / sizeof(*emoji) == PARANOID_PASSWORD_LENGTH, "Emoji array size must be equal to PARANOID_PASSWORD_LENGTH"); // Emoticons to display in emoji mode. The length of the array must be equal to // PARANOID_PASSWORD_LENGTH. The first item is always display in an empty prompt // (before typing in the password) const char *emoticons[] = { ":-)", ":-p", ":-O", ":-\\", "(-:", "d-:", "O-:", "/-:", "8-)", "8-p", "8-O", "8-\\", "(-8", "d-8", "O-8", "/-8", "X-)", "X-p", "X-O", "X-\\", "(-X", "d-X", "O-X", "/-X", ":'-)", ":-S", ":-D", ":-#", "(-':", "S-:", "D-:", "#-:", }; STATIC_ASSERT(sizeof(emoticons) / sizeof(*emoticons) == PARANOID_PASSWORD_LENGTH, "Emoticons array size must be equal to PARANOID_PASSWORD_LENGTH"); // Kaomoji to display in kaomoji mode. The length of the array must be equal to // PARANOID_PASSWORD_LENGTH. The first item is always display in an empty prompt // (before typing in the password) const char *kaomoji[] = { "(͡°͜ʖ͡°)", "(>_<)", "O_ם", "(^_-)", "o_0", "o.O", "0_o", "O.o", "(°o°)", "^m^", "^_^", "((d[-_-]b))", "┏(・o・)┛", "┗(・o・)┓", "(゚Д゚)", "(°◇°)", "\\o/", "\\o|", "|o/", "|o|", "(●^o^●)", "(^v^)", "(^u^)", "(^◇^)", "¯\\_(ツ)_/¯", "(^0_0^)", "(☞゚∀゚)☞", "(-■_■)", "(┛ಠ_ಠ)┛彡┻━┻", "┬─┬ノ(º_ºノ)", "(˘³˘)♥", "❤(◍•ᴗ•◍)", }; STATIC_ASSERT(sizeof(kaomoji) / sizeof(*kaomoji) == PARANOID_PASSWORD_LENGTH, "Kaomoji array size must be equal to PARANOID_PASSWORD_LENGTH"); //! If set, we can start a new login session. int have_switch_user_command; //! If set, the prompt will be fixed by @. int show_username; //! If set, the prompt will be fixed by . If >1, the hostname will be // shown in full and not cut at the first dot. int show_hostname; //! If set, data and time will be shown. int show_datetime; //! The date format to display. const char *datetime_format = "%c"; //! The local hostname. char hostname[256]; //! The username to authenticate as. char username[256]; //! The X11 display. Display *display; //! The X11 window provided by main. Provided from $XSCREENSAVER_WINDOW. Window main_window; //! main_window's parent. Used to create per-monitor siblings. Window parent_window; //! The X11 core font for the PAM messages. XFontStruct *core_font; #ifdef HAVE_XFT_EXT //! The Xft font for the PAM messages. XftColor xft_color_foreground; XftColor xft_color_warning; XftFont *xft_font; #endif //! The background color. XColor xcolor_background; //! The foreground color. XColor xcolor_foreground; //! The warning color (used as foreground). XColor xcolor_warning; //! The cursor character displayed at the end of the masked password input. static const char cursor[] = "_"; //! The x offset to apply to the entire display (to mitigate burn-in). static int x_offset = 0; //! The y offset to apply to the entire display (to mitigate burn-in). static int y_offset = 0; //! Maximum offset value when dynamic changes are enabled. static int burnin_mitigation_max_offset = 0; //! How much the offsets are allowed to change dynamically, and if so, how high. static int burnin_mitigation_max_offset_change = 0; //! Whether to play sounds during authentication. static int auth_sounds = 0; //! Whether we only want a single auth window. static int single_auth_window = 0; //! If set, we need to re-query monitor data and adjust windows. int per_monitor_windows_dirty = 1; #define MAIN_WINDOW 0 #define MAX_WINDOWS 16 //! The number of active X11 per-monitor windows. size_t num_windows = 0; //! The X11 per-monitor windows to draw on. Window windows[MAX_WINDOWS]; //! The X11 graphics contexts to draw with. GC gcs[MAX_WINDOWS]; //! The X11 graphics contexts to draw warnings with. GC gcs_warning[MAX_WINDOWS]; #ifdef HAVE_XFT_EXT //! The Xft draw contexts to draw with. XftDraw *xft_draws[MAX_WINDOWS]; #endif int have_xkb_ext; enum Sound { SOUND_PROMPT, SOUND_INFO, SOUND_ERROR, SOUND_SUCCESS }; #define NOTE_DS3 156 #define NOTE_A3 220 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_B4 494 #define NOTE_E5 659 int sounds[][2] = { /* SOUND_PROMPT= */ {NOTE_B4, NOTE_E5}, // V|I I /* SOUND_INFO= */ {NOTE_E5, NOTE_E5}, // I 2x /* SOUND_ERROR= */ {NOTE_A3, NOTE_DS3}, // V7 2x /* SOUND_SUCCESS= */ {NOTE_DS4, NOTE_E4}, // V I }; #define SOUND_SLEEP_MS 125 #define SOUND_TONE_MS 100 /*! \brief Play a sound sequence. */ void PlaySound(enum Sound snd) { XKeyboardState state; XKeyboardControl control; struct timespec sleeptime; if (!auth_sounds) { return; } XGetKeyboardControl(display, &state); // bell_percent changes note length on Linux, so let's use the middle value // to get a 1:1 mapping. control.bell_percent = 50; control.bell_duration = SOUND_TONE_MS; control.bell_pitch = sounds[snd][0]; XChangeKeyboardControl(display, KBBellPercent | KBBellDuration | KBBellPitch, &control); XBell(display, 0); XFlush(display); sleeptime.tv_sec = SOUND_SLEEP_MS / 1000; sleeptime.tv_nsec = 1000000L * (SOUND_SLEEP_MS % 1000); nanosleep(&sleeptime, NULL); control.bell_pitch = sounds[snd][1]; XChangeKeyboardControl(display, KBBellPitch, &control); XBell(display, 0); control.bell_percent = state.bell_percent; control.bell_duration = state.bell_duration; control.bell_pitch = state.bell_pitch; XChangeKeyboardControl(display, KBBellPercent | KBBellDuration | KBBellPitch, &control); XFlush(display); nanosleep(&sleeptime, NULL); } /*! \brief Switch to the next keyboard layout. */ void SwitchKeyboardLayout(void) { #ifdef HAVE_XKB_EXT if (!have_xkb_ext) { return; } XkbDescPtr xkb; xkb = XkbGetMap(display, 0, XkbUseCoreKbd); if (XkbGetControls(display, XkbGroupsWrapMask, xkb) != Success) { Log("XkbGetControls failed"); XkbFreeKeyboard(xkb, 0, True); return; } if (xkb->ctrls->num_groups < 1) { Log("XkbGetControls returned less than 1 group"); XkbFreeKeyboard(xkb, 0, True); return; } XkbStateRec state; if (XkbGetState(display, XkbUseCoreKbd, &state) != Success) { Log("XkbGetState failed"); XkbFreeKeyboard(xkb, 0, True); return; } XkbLockGroup(display, XkbUseCoreKbd, (state.group + 1) % xkb->ctrls->num_groups); XkbFreeKeyboard(xkb, 0, True); #endif } /*! \brief Check which modifiers are active. * * \param warning Will be set to 1 if something's "bad" with the keyboard * layout (e.g. Caps Lock). * \param have_multiple_layouts Will be set to 1 if more than one keyboard * layout is available for switching. * * \return The current modifier mask as a string. */ const char *GetIndicators(int *warning, int *have_multiple_layouts) { #ifdef HAVE_XKB_EXT static char buf[128]; char *p; if (!have_xkb_ext) { return ""; } XkbDescPtr xkb; xkb = XkbGetMap(display, 0, XkbUseCoreKbd); if (XkbGetControls(display, XkbGroupsWrapMask, xkb) != Success) { Log("XkbGetControls failed"); XkbFreeKeyboard(xkb, 0, True); return ""; } if (XkbGetNames( display, XkbIndicatorNamesMask | XkbGroupNamesMask | XkbSymbolsNameMask, xkb) != Success) { Log("XkbGetNames failed"); XkbFreeKeyboard(xkb, 0, True); return ""; } XkbStateRec state; if (XkbGetState(display, XkbUseCoreKbd, &state) != Success) { Log("XkbGetState failed"); XkbFreeKeyboard(xkb, 0, True); return ""; } unsigned int istate; if (XkbGetIndicatorState(display, XkbUseCoreKbd, &istate) != Success) { Log("XkbGetIndicatorState failed"); XkbFreeKeyboard(xkb, 0, True); return ""; } // Detect Caps Lock. // Note: in very pathological cases the modifier might be set without an // XkbIndicator for it; then we show the line in red without telling the user // why. Such a situation has not been observd yet though. if (state.mods & LockMask) { *warning = 1; } // Provide info about multiple layouts. if (xkb->ctrls->num_groups > 1) { *have_multiple_layouts = 1; } p = buf; const char *word = "Keyboard: "; size_t n = strlen(word); if (n >= sizeof(buf) - (p - buf)) { Log("Not enough space to store intro '%s'", word); XkbFreeKeyboard(xkb, 0, True); return ""; } memcpy(p, word, n); p += n; int have_output = 0; Atom layouta = xkb->names->groups[state.group]; // Human-readable. if (layouta == None) { layouta = xkb->names->symbols; // Machine-readable fallback. } if (layouta != None) { char *layout = XGetAtomName(display, layouta); n = strlen(layout); if (n >= sizeof(buf) - (p - buf)) { Log("Not enough space to store layout name '%s'", layout); XFree(layout); XkbFreeKeyboard(xkb, 0, True); return ""; } memcpy(p, layout, n); XFree(layout); p += n; have_output = 1; } int i; for (i = 0; i < XkbNumIndicators; i++) { if (!(istate & (1U << i))) { continue; } Atom namea = xkb->names->indicators[i]; if (namea == None) { continue; } if (have_output) { if (2 >= sizeof(buf) - (p - buf)) { Log("Not enough space to store another modifier name"); break; } memcpy(p, ", ", 2); p += 2; } char *name = XGetAtomName(display, namea); size_t n = strlen(name); if (n >= sizeof(buf) - (p - buf)) { Log("Not enough space to store modifier name '%s'", name); XFree(name); break; } memcpy(p, name, n); XFree(name); p += n; have_output = 1; } *p = 0; XkbFreeKeyboard(xkb, 0, True); return have_output ? buf : ""; #else *warning = *warning; // Shut up clang-analyzer. *have_multiple_layouts = *have_multiple_layouts; // Shut up clang-analyzer. return ""; #endif } void DestroyPerMonitorWindows(size_t keep_windows) { size_t i; for (i = keep_windows; i < num_windows; ++i) { #ifdef HAVE_XFT_EXT XftDrawDestroy(xft_draws[i]); #endif XFreeGC(display, gcs_warning[i]); XFreeGC(display, gcs[i]); if (i == MAIN_WINDOW) { XUnmapWindow(display, windows[i]); } else { XDestroyWindow(display, windows[i]); } } if (num_windows > keep_windows) { num_windows = keep_windows; } } void CreateOrUpdatePerMonitorWindow(size_t i, const Monitor *monitor, int region_w, int region_h, int x_offset, int y_offset) { // Desired box. int w = region_w; int h = region_h; int x = monitor->x + (monitor->width - w) / 2 + x_offset; int y = monitor->y + (monitor->height - h) / 2 + y_offset; // Clip to monitor. if (x < 0) { w += x; x = 0; } if (y < 0) { h += y; y = 0; } if (x + w > monitor->x + monitor->width) { w = monitor->x + monitor->width - x; } if (y + h > monitor->y + monitor->height) { h = monitor->y + monitor->height - y; } if (i < num_windows) { // Move the existing window. XMoveResizeWindow(display, windows[i], x, y, w, h); return; } if (i > num_windows) { // Need to add windows in ]num_windows..i[ first. Log("Unreachable code - can't create monitor sequences with holes"); abort(); } // Add a new window. XSetWindowAttributes attrs = {0}; attrs.background_pixel = xcolor_background.pixel; if (i == MAIN_WINDOW) { // Reuse the main_window (so this window gets protected from overlap by // main). XMoveResizeWindow(display, main_window, x, y, w, h); XChangeWindowAttributes(display, main_window, CWBackPixel, &attrs); windows[i] = main_window; } else { // Create a new window. windows[i] = XCreateWindow(display, parent_window, x, y, w, h, 0, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel, &attrs); SetWMProperties(display, windows[i], "xsecurelock", "auth_x11_screen", argc, argv); // We should always make sure that main_window stays on top of all others. // I.e. our auth sub-windows shall between "sandwiched" between auth and // saver window. That way, main.c's protections of the auth window can stay // effective. Window stacking_order[2]; stacking_order[0] = main_window; stacking_order[1] = windows[i]; XRestackWindows(display, stacking_order, 2); } // Create its data structures. XGCValues gcattrs; gcattrs.function = GXcopy; gcattrs.foreground = xcolor_foreground.pixel; gcattrs.background = xcolor_background.pixel; if (core_font != NULL) { gcattrs.font = core_font->fid; } gcs[i] = XCreateGC(display, windows[i], GCFunction | GCForeground | GCBackground | (core_font != NULL ? GCFont : 0), &gcattrs); gcattrs.foreground = xcolor_warning.pixel; gcs_warning[i] = XCreateGC(display, windows[i], GCFunction | GCForeground | GCBackground | (core_font != NULL ? GCFont : 0), &gcattrs); #ifdef HAVE_XFT_EXT xft_draws[i] = XftDrawCreate( display, windows[i], DefaultVisual(display, DefaultScreen(display)), DefaultColormap(display, DefaultScreen(display))); #endif // This window is now ready to use. XMapWindow(display, windows[i]); num_windows = i + 1; } void UpdatePerMonitorWindows(int monitors_changed, int region_w, int region_h, int x_offset, int y_offset) { static size_t num_monitors = 0; static Monitor monitors[MAX_WINDOWS]; if (monitors_changed) { num_monitors = GetMonitors(display, parent_window, monitors, MAX_WINDOWS); } if (single_auth_window) { Window unused_root, unused_child; int unused_root_x, unused_root_y, x, y; unsigned int unused_mask; XQueryPointer(display, parent_window, &unused_root, &unused_child, &unused_root_x, &unused_root_y, &x, &y, &unused_mask); size_t i; for (i = 0; i < num_monitors; ++i) { if (x >= monitors[i].x && x < monitors[i].x + monitors[i].width && y >= monitors[i].y && y < monitors[i].y + monitors[i].height) { CreateOrUpdatePerMonitorWindow(0, &monitors[i], region_w, region_h, x_offset, y_offset); return; } } if (num_monitors > 0) { CreateOrUpdatePerMonitorWindow(0, &monitors[0], region_w, region_h, x_offset, y_offset); DestroyPerMonitorWindows(1); } else { DestroyPerMonitorWindows(0); } return; } // 1 window per monitor. size_t new_num_windows = num_monitors; // Update or create everything. size_t i; for (i = 0; i < new_num_windows; ++i) { CreateOrUpdatePerMonitorWindow(i, &monitors[i], region_w, region_h, x_offset, y_offset); } // Kill all the old stuff. DestroyPerMonitorWindows(new_num_windows); if (num_windows != new_num_windows) { Log("Unreachable code - expected to get %d windows, got %d", (int)new_num_windows, (int)num_windows); } } int TextAscent(void) { #ifdef HAVE_XFT_EXT if (xft_font != NULL) { return xft_font->ascent; } #endif return core_font->max_bounds.ascent; } int TextDescent(void) { #ifdef HAVE_XFT_EXT if (xft_font != NULL) { return xft_font->descent; } #endif return core_font->max_bounds.descent; } #ifdef HAVE_XFT_EXT // Returns the amount of pixels to expand the logical box in extents so it // covers the visible box. int XGlyphInfoExpandAmount(XGlyphInfo *extents) { // Use whichever is larger - visible bounding box (bigger if font is italic) // or spacing to next character (bigger if last character is a space). // Best reference I could find: // https://keithp.com/~keithp/render/Xft.tutorial // Visible bounding box: [-x, -x + width[ // Logical bounding box: [0, xOff[ // For centering we should always use the logical bounding box, however for // erasing we should use the visible bounding box. Thus our goal is to // expand the _logical_ box to fully cover the _visible_ box: int expand_left = extents->x; int expand_right = -extents->x + extents->width - extents->xOff; int expand_max = expand_left > expand_right ? expand_left : expand_right; int expand_positive = expand_max > 0 ? expand_max : 0; return expand_positive; } #endif int TextWidth(const char *string, int len) { #ifdef HAVE_XFT_EXT if (xft_font != NULL) { XGlyphInfo extents; XftTextExtentsUtf8(display, xft_font, (const FcChar8 *)string, len, &extents); return extents.xOff + 2 * XGlyphInfoExpandAmount(&extents); } #endif return XTextWidth(core_font, string, len); } void DrawString(int monitor, int x, int y, int is_warning, const char *string, int len) { #ifdef HAVE_XFT_EXT if (xft_font != NULL) { // HACK: Query text extents here to make the text fit into the specified // box. For y this is covered by the usual ascent/descent behavior - for x // we however do have to work around font descents being drawn to the left // of the cursor. XGlyphInfo extents; XftTextExtentsUtf8(display, xft_font, (const FcChar8 *)string, len, &extents); XftDrawStringUtf8(xft_draws[monitor], is_warning ? &xft_color_warning : &xft_color_foreground, xft_font, x + XGlyphInfoExpandAmount(&extents), y, (const FcChar8 *)string, len); return; } #endif XDrawString(display, windows[monitor], is_warning ? gcs_warning[monitor] : gcs[monitor], x, y, string, len); } void StrAppend(char **output, size_t *output_size, const char *input, size_t input_size) { if (*output_size <= input_size) { // Cut the input off. Sorry. input_size = *output_size - 1; } memcpy(*output, input, input_size); *output += input_size; *output_size -= input_size; } void BuildTitle(char *output, size_t output_size, const char *input) { if (show_username) { size_t username_len = strlen(username); StrAppend(&output, &output_size, username, username_len); } if (show_username && show_hostname) { StrAppend(&output, &output_size, "@", 1); } if (show_hostname) { size_t hostname_len = show_hostname > 1 ? strlen(hostname) : strcspn(hostname, "."); StrAppend(&output, &output_size, hostname, hostname_len); } if (*input == 0) { *output = 0; return; } if (show_username || show_hostname) { StrAppend(&output, &output_size, " - ", 3); } strncpy(output, input, output_size - 1); output[output_size - 1] = 0; } /*! \brief Display a string in the window. * * The given title and message will be displayed on all screens. In case caps * lock is enabled, the string's case will be inverted. * * \param title The title of the message. * \param str The message itself. * \param is_warning Whether to use the warning style to display the message. */ void DisplayMessage(const char *title, const char *str, int is_warning) { char full_title[256]; BuildTitle(full_title, sizeof(full_title), title); int th = TextAscent() + TextDescent() + LINE_SPACING; int to = TextAscent() + LINE_SPACING / 2; // Text at to fits into 0 to th. int len_full_title = strlen(full_title); int tw_full_title = TextWidth(full_title, len_full_title); int len_str = strlen(str); int tw_str = TextWidth(str, len_str); int indicators_warning = 0; int have_multiple_layouts = 0; const char *indicators = GetIndicators(&indicators_warning, &have_multiple_layouts); int len_indicators = strlen(indicators); int tw_indicators = TextWidth(indicators, len_indicators); const char *switch_layout = have_multiple_layouts ? "Press Ctrl-Tab to switch keyboard layout" : ""; int len_switch_layout = strlen(switch_layout); int tw_switch_layout = TextWidth(switch_layout, len_switch_layout); const char *switch_user = have_switch_user_command ? "Press Ctrl-Alt-O or Win-O to switch user" : ""; int len_switch_user = strlen(switch_user); int tw_switch_user = TextWidth(switch_user, len_switch_user); char datetime[80] = ""; if (show_datetime) { time_t rawtime; struct tm timeinfo_buf; struct tm *timeinfo; time(&rawtime); timeinfo = localtime_r(&rawtime, &timeinfo_buf); if (timeinfo == NULL || strftime(datetime, sizeof(datetime), datetime_format, timeinfo) == 0) { // The datetime buffer was too small to fit the time format, and in this // case the buffer contents are undefined. Let's just make it a valid // empty string then so all else will go well. datetime[0] = 0; } } int len_datetime = strlen(datetime); int tw_datetime = TextWidth(datetime, len_datetime); // Compute the region we will be using, relative to cx and cy. int box_w = tw_full_title; if (box_w < tw_datetime) { box_w = tw_datetime; } if (box_w < tw_str) { box_w = tw_str; } if (box_w < tw_indicators) { box_w = tw_indicators; } if (box_w < tw_switch_layout) { box_w = tw_switch_layout; } if (box_w < tw_switch_user) { box_w = tw_switch_user; } int box_h = (4 + have_multiple_layouts + have_switch_user_command + show_datetime * 2) * th; int region_w = box_w + 2 * WINDOW_BORDER; int region_h = box_h + 2 * WINDOW_BORDER; if (burnin_mitigation_max_offset_change > 0) { x_offset += rand() % (2 * burnin_mitigation_max_offset_change + 1) - burnin_mitigation_max_offset_change; if (x_offset < -burnin_mitigation_max_offset) { x_offset = -burnin_mitigation_max_offset; } if (x_offset > burnin_mitigation_max_offset) { x_offset = burnin_mitigation_max_offset; } y_offset += rand() % (2 * burnin_mitigation_max_offset_change + 1) - burnin_mitigation_max_offset_change; if (y_offset < -burnin_mitigation_max_offset) { y_offset = -burnin_mitigation_max_offset; } if (y_offset > burnin_mitigation_max_offset) { y_offset = burnin_mitigation_max_offset; } } UpdatePerMonitorWindows(per_monitor_windows_dirty, region_w, region_h, x_offset, y_offset); per_monitor_windows_dirty = 0; size_t i; for (i = 0; i < num_windows; ++i) { int cx = region_w / 2; int cy = region_h / 2; int y = cy + to - box_h / 2; XClearWindow(display, windows[i]); #ifdef DRAW_BORDER XDrawRectangle(display, windows[i], gcs[i], // cx - box_w / 2, cy - box_h / 2, // box_w - 1, box_h - 1); #endif if (show_datetime) { DrawString(i, cx - tw_datetime / 2, y, 0, datetime, len_datetime); y += th * 2; } DrawString(i, cx - tw_full_title / 2, y, is_warning, full_title, len_full_title); y += th * 2; DrawString(i, cx - tw_str / 2, y, is_warning, str, len_str); y += th; DrawString(i, cx - tw_indicators / 2, y, indicators_warning, indicators, len_indicators); y += th; if (have_multiple_layouts) { DrawString(i, cx - tw_switch_layout / 2, y, 0, switch_layout, len_switch_layout); y += th; } if (have_switch_user_command) { DrawString(i, cx - tw_switch_user / 2, y, 0, switch_user, len_switch_user); // y += th; } } // Make the things just drawn appear on the screen as soon as possible. XFlush(display); } void WaitForKeypress(int seconds) { // Sleep for up to 1 second _or_ a key press. struct timeval timeout; timeout.tv_sec = seconds; timeout.tv_usec = 0; fd_set set; memset(&set, 0, sizeof(set)); // For clang-analyzer. FD_ZERO(&set); FD_SET(0, &set); select(1, &set, NULL, NULL, &timeout); } /*! \brief Bump the position for the password "cursor". * * If pwlen > 0: * Precondition: pos in 0..PARANOID_PASSWORD_LENGTH-1. * Postcondition: pos' in 1..PARANOID_PASSWORD_LENGTH-1. * Postcondition: abs(pos' - pos) >= PARANOID_PASSWORD_MIN_CHANGE. * Postcondition: pos' is uniformly distributed among all permitted choices. * If pwlen == 0: * Postcondition: pos' is 0. * * \param pwlen The current password length. * \param pos The initial cursor position; will get updated. * \param last_keystroke The time of last keystroke; will get updated. */ void BumpDisplayMarker(size_t pwlen, size_t *pos, struct timeval *last_keystroke) { gettimeofday(last_keystroke, NULL); // Empty password: always put at 0. if (pwlen == 0) { *pos = 0; return; } // Otherwise: put in the range and fulfill the constraints. for (;;) { size_t new_pos = 1 + rand() % (PARANOID_PASSWORD_LENGTH - 1); if (labs((ssize_t)new_pos - (ssize_t)*pos) >= PARANOID_PASSWORD_MIN_CHANGE) { *pos = new_pos; break; } } } //! The size of the buffer to store the password in. Not NUL terminated. #define PWBUF_SIZE 256 //! The size of the buffer to use for display, with space for cursor and NUL. #define DISPLAYBUF_SIZE (PWBUF_SIZE + 2) void ShowFromArray(const char **array, size_t displaymarker, char *displaybuf, size_t displaybufsize, size_t *displaylen) { const char *selection = array[displaymarker]; strncpy(displaybuf, selection, displaybufsize); displaybuf[displaybufsize - 1] = 0; *displaylen = strlen(selection); } /*! \brief Ask a question to the user. * * \param msg The message. * \param response The response will be stored in a newly allocated buffer here. * The caller is supposed to eventually free() it. * \param echo If true, the input will be shown; otherwise it will be hidden * (password entry). * \return 1 if successful, anything else otherwise. */ int Prompt(const char *msg, char **response, int echo) { // Ask something. Return strdup'd string. struct { // The received X11 event. XEvent ev; // Input buffer. Not NUL-terminated. char pwbuf[PWBUF_SIZE]; // Current input length. size_t pwlen; // Display buffer. If echo is 0, this will only contain asterisks, a // possible cursor, and be NUL-terminated. char displaybuf[DISPLAYBUF_SIZE]; // Display buffer length. size_t displaylen; // The display marker changes on every input action to a value from 0 to // PARANOID_PASSWORD-1. It indicates where to display the "cursor". size_t displaymarker; // Character read buffer. char inputbuf; // The time of last keystroke. struct timeval last_keystroke; // Temporary position variables that might leak properties about the // password and thus are in the private struct too. size_t prevpos; size_t pos; int len; } priv; int blink_state = 0; if (!echo && MLOCK_PAGE(&priv, sizeof(priv)) < 0) { LogErrno("mlock"); // We continue anyway, as the user being unable to unlock the screen is // worse. But let's alert the user. DisplayMessage("Error", "Password will not be stored securely.", 1); WaitForKeypress(1); } priv.pwlen = 0; priv.displaymarker = 0; time_t deadline = time(NULL) + prompt_timeout; // Unfortunately we may have to break out of multiple loops at once here but // still do common cleanup work. So we have to track the return value in a // variable. int status = 0; int done = 0; int played_sound = 0; while (!done) { if (echo) { if (priv.pwlen != 0) { memcpy(priv.displaybuf, priv.pwbuf, priv.pwlen); } priv.displaylen = priv.pwlen; // Note that priv.pwlen <= sizeof(priv.pwbuf) and thus // priv.pwlen + 2 <= sizeof(priv.displaybuf). priv.displaybuf[priv.displaylen] = blink_state ? ' ' : *cursor; priv.displaybuf[priv.displaylen + 1] = '\0'; } else { switch (password_prompt) { case PASSWORD_PROMPT_ASTERISKS: { mblen(NULL, 0); priv.pos = priv.displaylen = 0; while (priv.pos < priv.pwlen) { ++priv.displaylen; // Note: this won't read past priv.pwlen. priv.len = mblen(priv.pwbuf + priv.pos, priv.pwlen - priv.pos); if (priv.len <= 0) { // This guarantees to "eat" one byte each step. Therefore, // priv.displaylen <= priv.pwlen is ensured. break; } priv.pos += priv.len; } memset(priv.displaybuf, '*', priv.displaylen); // Note that priv.pwlen <= sizeof(priv.pwbuf) and thus // priv.pwlen + 2 <= sizeof(priv.displaybuf). priv.displaybuf[priv.displaylen] = blink_state ? ' ' : *cursor; priv.displaybuf[priv.displaylen + 1] = '\0'; break; } case PASSWORD_PROMPT_HIDDEN: { priv.displaylen = 0; priv.displaybuf[0] = '\0'; break; } case PASSWORD_PROMPT_DISCO: { size_t combiner_length = strlen(disco_combiner); size_t dancer_length = strlen(disco_dancers[0]); size_t stride = combiner_length + dancer_length; priv.displaylen = stride * DISCO_PASSWORD_DANCERS * strlen(disco_dancers[0]) + strlen(disco_combiner); for (size_t i = 0, bit = 1; i < DISCO_PASSWORD_DANCERS; ++i, bit <<= 1) { const char *dancer = disco_dancers[(priv.displaymarker & bit) ? 1 : 0]; memcpy(priv.displaybuf + i * stride, disco_combiner, combiner_length); memcpy(priv.displaybuf + i * stride + combiner_length, dancer, dancer_length); } memcpy(priv.displaybuf + DISCO_PASSWORD_DANCERS * stride, disco_combiner, combiner_length); priv.displaybuf[priv.displaylen] = '\0'; break; } case PASSWORD_PROMPT_EMOJI: { ShowFromArray(emoji, priv.displaymarker, priv.displaybuf, sizeof(priv.displaybuf), &priv.displaylen); break; } case PASSWORD_PROMPT_EMOTICON: { ShowFromArray(emoticons, priv.displaymarker, priv.displaybuf, sizeof(priv.displaybuf), &priv.displaylen); break; } case PASSWORD_PROMPT_KAOMOJI: { ShowFromArray(kaomoji, priv.displaymarker, priv.displaybuf, sizeof(priv.displaybuf), &priv.displaylen); break; } #if __STDC_VERSION__ >= 199901L case PASSWORD_PROMPT_TIME: case PASSWORD_PROMPT_TIME_HEX: { if (priv.pwlen == 0) { strncpy(priv.displaybuf, "----", DISPLAYBUF_SIZE - 1); priv.displaybuf[DISPLAYBUF_SIZE - 1] = 0; } else { if (password_prompt == PASSWORD_PROMPT_TIME) { snprintf(priv.displaybuf, DISPLAYBUF_SIZE, "%" PRId64 ".%06" PRId64, (int64_t)priv.last_keystroke.tv_sec, (int64_t)priv.last_keystroke.tv_usec); } else { snprintf(priv.displaybuf, DISPLAYBUF_SIZE, "%#" PRIx64, (int64_t)priv.last_keystroke.tv_sec * 1000000 + (int64_t)priv.last_keystroke.tv_usec); } priv.displaybuf[DISPLAYBUF_SIZE - 1] = 0; } break; } #endif default: case PASSWORD_PROMPT_CURSOR: { priv.displaylen = PARANOID_PASSWORD_LENGTH; memset(priv.displaybuf, '_', priv.displaylen); priv.displaybuf[priv.displaymarker] = blink_state ? '|' : '-'; priv.displaybuf[priv.displaylen] = '\0'; break; } } } DisplayMessage(msg, priv.displaybuf, 0); if (!played_sound) { PlaySound(SOUND_PROMPT); played_sound = 1; } // Blink the cursor. blink_state = !blink_state; struct timeval timeout; timeout.tv_sec = BLINK_INTERVAL / 1000000; timeout.tv_usec = BLINK_INTERVAL % 1000000; while (!done) { fd_set set; memset(&set, 0, sizeof(set)); // For clang-analyzer. FD_ZERO(&set); FD_SET(0, &set); int nfds = select(1, &set, NULL, NULL, &timeout); if (nfds < 0) { LogErrno("select"); done = 1; break; } time_t now = time(NULL); if (now > deadline) { Log("AUTH_TIMEOUT hit"); done = 1; break; } if (deadline > now + prompt_timeout) { // Guard against the system clock stepping back. deadline = now + prompt_timeout; } if (nfds == 0) { // Blink... break; } // From now on, only do nonblocking selects so we update the screen ASAP. timeout.tv_usec = 0; // Force the cursor to be in visible state while typing. blink_state = 0; // Reset the prompt timeout. deadline = now + prompt_timeout; ssize_t nread = read(0, &priv.inputbuf, 1); if (nread <= 0) { Log("EOF on password input - bailing out"); done = 1; break; } switch (priv.inputbuf) { case '\b': // Backspace. case '\177': { // Delete (note: i3lock does not handle this one). // Backwards skip with multibyte support. mblen(NULL, 0); priv.pos = priv.prevpos = 0; while (priv.pos < priv.pwlen) { priv.prevpos = priv.pos; // Note: this won't read past priv.pwlen. priv.len = mblen(priv.pwbuf + priv.pos, priv.pwlen - priv.pos); if (priv.len <= 0) { // This guarantees to "eat" one byte each step. Therefore, // this cannot loop endlessly. break; } priv.pos += priv.len; } priv.pwlen = priv.prevpos; BumpDisplayMarker(priv.pwlen, &priv.displaymarker, &priv.last_keystroke); break; } case '\001': // Ctrl-A. // Clearing input line on just Ctrl-A is odd - but commonly // requested. In most toolkits, Ctrl-A does not immediately erase but // almost every keypress other than arrow keys will erase afterwards. priv.pwlen = 0; BumpDisplayMarker(priv.pwlen, &priv.displaymarker, &priv.last_keystroke); break; case '\023': // Ctrl-S. SwitchKeyboardLayout(); break; case '\025': // Ctrl-U. // Delete the entire input line. // i3lock: supports Ctrl-U but not Ctrl-A. // xscreensaver: supports Ctrl-U and Ctrl-X but not Ctrl-A. priv.pwlen = 0; BumpDisplayMarker(priv.pwlen, &priv.displaymarker, &priv.last_keystroke); break; case 0: // Shouldn't happen. case '\033': // Escape. done = 1; break; case '\r': // Return. case '\n': // Return. *response = malloc(priv.pwlen + 1); if (!echo && MLOCK_PAGE(*response, priv.pwlen + 1) < 0) { LogErrno("mlock"); // We continue anyway, as the user being unable to unlock the screen // is worse. But let's alert the user of this. DisplayMessage("Error", "Password has not been stored securely.", 1); WaitForKeypress(1); } if (priv.pwlen != 0) { memcpy(*response, priv.pwbuf, priv.pwlen); } (*response)[priv.pwlen] = 0; status = 1; done = 1; break; default: if (priv.inputbuf >= '\000' && priv.inputbuf <= '\037') { // Other control character. We ignore them (and specifically do not // update the cursor on them) to "discourage" their use in // passwords, as most login screens do not support them anyway. break; } if (priv.pwlen < sizeof(priv.pwbuf)) { priv.pwbuf[priv.pwlen] = priv.inputbuf; ++priv.pwlen; BumpDisplayMarker(priv.pwlen, &priv.displaymarker, &priv.last_keystroke); } else { Log("Password entered is too long - bailing out"); done = 1; break; } break; } } // Handle X11 events that queued up. while (!done && XPending(display) && (XNextEvent(display, &priv.ev), 1)) { if (IsMonitorChangeEvent(display, priv.ev.type)) { per_monitor_windows_dirty = 1; } } } // priv contains password related data, so better clear it. memset(&priv, 0, sizeof(priv)); if (!done) { Log("Unreachable code - the loop above must set done"); } return status; } /*! \brief Perform authentication using a helper proxy. * * \return The authentication status (0 for OK, 1 otherwise). */ int Authenticate() { int requestfd[2], responsefd[2]; if (pipe(requestfd)) { LogErrno("pipe"); return 1; } if (pipe(responsefd)) { LogErrno("pipe"); return 1; } // Use authproto_pam. pid_t childpid = ForkWithoutSigHandlers(); if (childpid == -1) { LogErrno("fork"); return 1; } if (childpid == 0) { // Child process. Just run authproto_pam. // But first, move requestfd[1] to 1 and responsefd[0] to 0. close(requestfd[0]); close(responsefd[1]); if (requestfd[1] == 0) { // Tricky case. We don't _expect_ this to happen - after all, // initially our own fd 0 should be bound to xsecurelock's main // program - but nevertheless let's handle it. // At least this implies that no other fd is 0. int requestfd1 = dup(requestfd[1]); if (requestfd1 == -1) { LogErrno("dup"); _exit(EXIT_FAILURE); } close(requestfd[1]); if (dup2(responsefd[0], 0) == -1) { LogErrno("dup2"); _exit(EXIT_FAILURE); } close(responsefd[0]); if (requestfd1 != 1) { if (dup2(requestfd1, 1) == -1) { LogErrno("dup2"); _exit(EXIT_FAILURE); } close(requestfd1); } } else { if (responsefd[0] != 0) { if (dup2(responsefd[0], 0) == -1) { LogErrno("dup2"); _exit(EXIT_FAILURE); } close(responsefd[0]); } if (requestfd[1] != 1) { if (dup2(requestfd[1], 1) == -1) { LogErrno("dup2"); _exit(EXIT_FAILURE); } close(requestfd[1]); } } { const char *args[2] = {authproto_executable, NULL}; ExecvHelper(authproto_executable, args); sleep(2); // Reduce log spam or other effects from failed execv. _exit(EXIT_FAILURE); } } // Otherwise, we're in the parent process. close(requestfd[1]); close(responsefd[0]); for (;;) { char *message; char *response; char type = ReadPacket(requestfd[0], &message, 1); switch (type) { case PTYPE_INFO_MESSAGE: DisplayMessage("PAM says", message, 0); explicit_bzero(message, strlen(message)); free(message); PlaySound(SOUND_INFO); WaitForKeypress(1); break; case PTYPE_ERROR_MESSAGE: DisplayMessage("Error", message, 1); explicit_bzero(message, strlen(message)); free(message); PlaySound(SOUND_ERROR); WaitForKeypress(1); break; case PTYPE_PROMPT_LIKE_USERNAME: if (Prompt(message, &response, 1)) { WritePacket(responsefd[1], PTYPE_RESPONSE_LIKE_USERNAME, response); explicit_bzero(response, strlen(response)); free(response); } else { WritePacket(responsefd[1], PTYPE_RESPONSE_CANCELLED, ""); } explicit_bzero(message, strlen(message)); free(message); DisplayMessage("Processing...", "", 0); break; case PTYPE_PROMPT_LIKE_PASSWORD: if (Prompt(message, &response, 0)) { WritePacket(responsefd[1], PTYPE_RESPONSE_LIKE_PASSWORD, response); explicit_bzero(response, strlen(response)); free(response); } else { WritePacket(responsefd[1], PTYPE_RESPONSE_CANCELLED, ""); } explicit_bzero(message, strlen(message)); free(message); DisplayMessage("Processing...", "", 0); break; case 0: goto done; default: Log("Unknown message type %02x", (int)type); explicit_bzero(message, strlen(message)); free(message); goto done; } } done: close(requestfd[0]); close(responsefd[1]); int status; if (!WaitProc("authproto", &childpid, 1, 0, &status)) { Log("WaitPgrp returned false but we were blocking"); abort(); } if (status == 0) { PlaySound(SOUND_SUCCESS); } return status != 0; } enum PasswordPrompt GetPasswordPromptFromFlags( int paranoid_password_flag, const char *password_prompt_flag) { if (!*password_prompt_flag) { return paranoid_password_flag ? PASSWORD_PROMPT_CURSOR : PASSWORD_PROMPT_ASTERISKS; } for (enum PasswordPrompt prompt = 0; prompt < PASSWORD_PROMPT_COUNT; ++prompt) { if (strcmp(password_prompt_flag, PasswordPromptStrings[prompt]) == 0) { return prompt; } } Log("Invalid XSECURELOCK_PASSWORD_PROMPT value; defaulting to cursor"); return PASSWORD_PROMPT_CURSOR; } /*! \brief The main program. * * Usage: XSCREENSAVER_WINDOW=window_id ./auth_x11; status=$? * * \return 0 if authentication successful, anything else otherwise. */ int main(int argc_local, char **argv_local) { argc = argc_local; argv = argv_local; setlocale(LC_CTYPE, ""); setlocale(LC_TIME, ""); // This is used by displaymarker only; there is slight security relevance here // as an attacker who has a screenshot and an exact startup time and PID can // guess the password length. Of course, an attacker who records the screen // as a video, or points a camera or a microphone at the keyboard, can too. struct timeval tv; gettimeofday(&tv, NULL); srand(tv.tv_sec ^ tv.tv_usec ^ getpid()); authproto_executable = GetExecutablePathSetting("XSECURELOCK_AUTHPROTO", AUTHPROTO_EXECUTABLE, 0); // Unless disabled, we shift the login prompt randomly around by a few // pixels. This should mostly mitigate burn-in effects from the prompt // being displayed all the time, e.g. because the user's mouse is "shivering" // and thus the auth prompt reappears soon after timeout. burnin_mitigation_max_offset = GetIntSetting("XSECURELOCK_BURNIN_MITIGATION", 16); if (burnin_mitigation_max_offset > 0) { x_offset = rand() % (2 * burnin_mitigation_max_offset + 1) - burnin_mitigation_max_offset; y_offset = rand() % (2 * burnin_mitigation_max_offset + 1) - burnin_mitigation_max_offset; } //! Deprecated flag for setting whether password display should hide the //! length. int paranoid_password_flag; //! Updated flag for password display choice const char *password_prompt_flag; // If requested, mitigate burn-in even more by moving the auth prompt while // displayed. I bet many will find this annoying though. burnin_mitigation_max_offset_change = GetIntSetting("XSECURELOCK_BURNIN_MITIGATION_DYNAMIC", 0); prompt_timeout = GetIntSetting("XSECURELOCK_AUTH_TIMEOUT", 5 * 60); show_username = GetIntSetting("XSECURELOCK_SHOW_USERNAME", 1); show_hostname = GetIntSetting("XSECURELOCK_SHOW_HOSTNAME", 1); paranoid_password_flag = GetIntSetting( "XSECURELOCK_" /* REMOVE IN v2 */ "PARANOID_PASSWORD", 1); password_prompt_flag = GetStringSetting("XSECURELOCK_PASSWORD_PROMPT", ""); show_datetime = GetIntSetting("XSECURELOCK_SHOW_DATETIME", 0); datetime_format = GetStringSetting("XSECURELOCK_DATETIME_FORMAT", "%c"); have_switch_user_command = !!*GetStringSetting("XSECURELOCK_SWITCH_USER_COMMAND", ""); auth_sounds = GetIntSetting("XSECURELOCK_AUTH_SOUNDS", 0); single_auth_window = GetIntSetting("XSECURELOCK_SINGLE_AUTH_WINDOW", 0); password_prompt = GetPasswordPromptFromFlags(paranoid_password_flag, password_prompt_flag); if ((display = XOpenDisplay(NULL)) == NULL) { Log("Could not connect to $DISPLAY"); return 1; } #ifdef HAVE_XKB_EXT int xkb_opcode, xkb_event_base, xkb_error_base; int xkb_major_version = XkbMajorVersion, xkb_minor_version = XkbMinorVersion; have_xkb_ext = XkbQueryExtension(display, &xkb_opcode, &xkb_event_base, &xkb_error_base, &xkb_major_version, &xkb_minor_version); #endif if (!GetHostName(hostname, sizeof(hostname))) { return 1; } if (!GetUserName(username, sizeof(username))) { return 1; } main_window = ReadWindowID(); if (main_window == None) { Log("Invalid/no window ID in XSCREENSAVER_WINDOW"); return 1; } Window unused_root; Window *unused_children = NULL; unsigned int unused_nchildren; XQueryTree(display, main_window, &unused_root, &parent_window, &unused_children, &unused_nchildren); XFree(unused_children); Colormap colormap = DefaultColormap(display, DefaultScreen(display)); XColor dummy; XAllocNamedColor( display, DefaultColormap(display, DefaultScreen(display)), GetStringSetting("XSECURELOCK_AUTH_BACKGROUND_COLOR", "black"), &xcolor_background, &dummy); XAllocNamedColor( display, DefaultColormap(display, DefaultScreen(display)), GetStringSetting("XSECURELOCK_AUTH_FOREGROUND_COLOR", "white"), &xcolor_foreground, &dummy); XAllocNamedColor(display, DefaultColormap(display, DefaultScreen(display)), GetStringSetting("XSECURELOCK_AUTH_WARNING_COLOR", "red"), &xcolor_warning, &dummy); core_font = NULL; #ifdef HAVE_XFT_EXT xft_font = NULL; #endif const char *font_name = GetStringSetting("XSECURELOCK_FONT", ""); // First try parsing the font name as an X11 core font. We're trying these // first as their font name format is more restrictive (usually starts with a // dash), except for when font aliases are used. int have_font = 0; if (font_name[0] != 0) { core_font = XLoadQueryFont(display, font_name); have_font = (core_font != NULL); #ifdef HAVE_XFT_EXT if (!have_font) { xft_font = XftFontOpenName(display, DefaultScreen(display), font_name); have_font = (xft_font != NULL); } #endif } if (!have_font) { if (font_name[0] != 0) { Log("Could not load the specified font %s - trying a default font", font_name); } #ifdef HAVE_XFT_EXT xft_font = XftFontOpenName(display, DefaultScreen(display), "monospace"); have_font = (xft_font != NULL); #endif } if (!have_font) { core_font = XLoadQueryFont(display, "fixed"); have_font = (core_font != NULL); } if (!have_font) { Log("Could not load a mind-bogglingly stupid font"); return 1; } #ifdef HAVE_XFT_EXT if (xft_font != NULL) { XRenderColor xrcolor; xrcolor.alpha = 65535; // Translate the X11 colors to XRender colors. xrcolor.red = xcolor_foreground.red; xrcolor.green = xcolor_foreground.green; xrcolor.blue = xcolor_foreground.blue; XftColorAllocValue(display, DefaultVisual(display, DefaultScreen(display)), DefaultColormap(display, DefaultScreen(display)), &xrcolor, &xft_color_foreground); xrcolor.red = xcolor_warning.red; xrcolor.green = xcolor_warning.green; xrcolor.blue = xcolor_warning.blue; XftColorAllocValue(display, DefaultVisual(display, DefaultScreen(display)), DefaultColormap(display, DefaultScreen(display)), &xrcolor, &xft_color_warning); } #endif SelectMonitorChangeEvents(display, main_window); InitWaitPgrp(); int status = Authenticate(); // Clear any possible processing message by closing our windows. DestroyPerMonitorWindows(0); #ifdef HAVE_XFT_EXT if (xft_font != NULL) { XftColorFree(display, DefaultVisual(display, DefaultScreen(display)), DefaultColormap(display, DefaultScreen(display)), &xft_color_warning); XftColorFree(display, DefaultVisual(display, DefaultScreen(display)), DefaultColormap(display, DefaultScreen(display)), &xft_color_foreground); XftFontClose(display, xft_font); } #endif XFreeColors(display, colormap, &xcolor_warning.pixel, 1, 0); XFreeColors(display, colormap, &xcolor_foreground.pixel, 1, 0); XFreeColors(display, colormap, &xcolor_background.pixel, 1, 0); return status; } xsecurelock-1.5.1/helpers/authproto_htpasswd.in0000755061501702575230000000223613420106751016751 00000000000000#!/bin/sh # # Copyright 2018 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. echo "P 15" echo "Enter password:" read -r ptype len case "$ptype" in p) # Trick: reading len+1 characters get the password and the terminating # newline - just what we need here. if head -c "$((len+1))" |\ @path_to_htpasswd@ -v ~/.xsecurelock.pw "$USER" \ >/dev/null 2>&1; then echo "i 11" echo "I know you." exit 0 else echo "e 17" echo "Invalid password." exit 1 fi ;; x) exit 1 ;; *) echo >&2 "Unexpected packet type." exit 1 ;; esac # Shouldn't get here. exit 42 xsecurelock-1.5.1/helpers/saver_multiplex.c0000644061501702575230000001221113455110236016036 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include // for Window, CopyFromParent, CWBackPixel #include // for XEvent, XFlush, XNextEvent, XOpenDi... #include // for signal, SIGTERM #include // for fprintf, NULL, stderr #include // for setenv #include // for memcmp, memcpy #include // for select, FD_SET, FD_ZERO, fd_set #include // for sleep #include "../env_settings.h" // for GetStringSetting #include "../logging.h" // for Log, LogErrno #include "../saver_child.h" // for MAX_SAVERS #include "../wait_pgrp.h" // for InitWaitPgrp #include "../wm_properties.h" // for SetWMProperties #include "../xscreensaver_api.h" // for ReadWindowID #include "monitors.h" // for IsMonitorChangeEvent, Monitor, Sele... static void HandleSIGUSR1(int signo) { KillAllSaverChildrenSigHandler(signo); // Dirty, but quick. } static void HandleSIGTERM(int signo) { KillAllSaverChildrenSigHandler(signo); // Dirty, but quick. raise(signo); // Destroys windows we created anyway. } #define MAX_MONITORS MAX_SAVERS static const char* saver_executable; static Display* display; static Monitor monitors[MAX_MONITORS]; static size_t num_monitors; static Window windows[MAX_MONITORS]; static void WatchSavers(void) { size_t i; for (i = 0; i < num_monitors; ++i) { WatchSaverChild(display, windows[i], i, saver_executable, 1); } } static void SpawnSavers(Window parent, int argc, char* const* argv) { XSetWindowAttributes attrs = {0}; attrs.background_pixel = BlackPixel(display, DefaultScreen(display)); size_t i; for (i = 0; i < num_monitors; ++i) { windows[i] = XCreateWindow(display, parent, monitors[i].x, monitors[i].y, monitors[i].width, monitors[i].height, 0, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel, &attrs); SetWMProperties(display, windows[i], "xsecurelock", "saver_multiplex_screen", argc, argv); XMapRaised(display, windows[i]); } // Need to flush the display so savers sure can access the window. XFlush(display); WatchSavers(); } static void KillSavers(void) { size_t i; for (i = 0; i < num_monitors; ++i) { WatchSaverChild(display, windows[i], i, saver_executable, 0); XDestroyWindow(display, windows[i]); } } /*! \brief The main program. * * Usage: XSCREENSAVER_WINDOW=window_id ./saver_multiplex * * Spawns spearate saver subprocesses, one on each screen. */ int main(int argc, char** argv) { if (GetIntSetting("XSECURELOCK_INSIDE_SAVER_MULTIPLEX", 0)) { Log("Starting saver_multiplex inside saver_multiplex?!?"); // If we die, the parent process will revive us, so let's sleep a while to // conserve battery and avoid log spam in this case. sleep(60); return 1; } setenv("XSECURELOCK_INSIDE_SAVER_MULTIPLEX", "1", 1); if ((display = XOpenDisplay(NULL)) == NULL) { Log("Could not connect to $DISPLAY"); return 1; } int x11_fd = ConnectionNumber(display); Window parent = ReadWindowID(); if (parent == None) { Log("Invalid/no parent ID in XSCREENSAVER_WINDOW"); return 1; } saver_executable = GetExecutablePathSetting("XSECURELOCK_SAVER", SAVER_EXECUTABLE, 0); SelectMonitorChangeEvents(display, parent); num_monitors = GetMonitors(display, parent, monitors, MAX_MONITORS); SpawnSavers(parent, argc, argv); struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = HandleSIGUSR1; // To kill children. if (sigaction(SIGUSR1, &sa, NULL) != 0) { LogErrno("sigaction(SIGUSR1)"); } sa.sa_flags = SA_RESETHAND; // It re-raises to suicide. sa.sa_handler = HandleSIGTERM; // To kill children. if (sigaction(SIGTERM, &sa, NULL) != 0) { LogErrno("sigaction(SIGTERM)"); } InitWaitPgrp(); for (;;) { fd_set in_fds; FD_ZERO(&in_fds); FD_SET(x11_fd, &in_fds); select(x11_fd + 1, &in_fds, 0, 0, NULL); WatchSavers(); XEvent ev; while (XPending(display) && (XNextEvent(display, &ev), 1)) { if (IsMonitorChangeEvent(display, ev.type)) { Monitor new_monitors[MAX_SAVERS]; size_t new_num_monitors = GetMonitors(display, parent, new_monitors, MAX_SAVERS); if (new_num_monitors != num_monitors || memcmp(new_monitors, monitors, sizeof(monitors)) != 0) { KillSavers(); num_monitors = new_num_monitors; memcpy(monitors, new_monitors, sizeof(monitors)); SpawnSavers(parent, argc, argv); } } } } return 0; } xsecurelock-1.5.1/helpers/authproto_pam.c0000644061501702575230000001753613533470704015522 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include // for NULL, setlocale, LC_CTYPE #include // for pam_end, pam_start, pam_acct_mgmt #include // for free, calloc, exit, getenv #include // for strchr #include "../env_info.h" // for GetHostName, GetUserName #include "../env_settings.h" // for GetStringSetting #include "../logging.h" // for Log #include "../util.h" // for explicit_bzero #include "authproto.h" // for WritePacket, ReadPacket, PTYPE_ERRO... // IWYU pragma: no_include //! Set if a conversation error has happened during the last PAM call. static int conv_error = 0; /*! \brief Perform a single PAM conversation step. * * \param msg The PAM message. * \param resp The PAM response to store the output in. * \return The PAM status (PAM_SUCCESS in case of success, or anything else in * case of error). */ int ConverseOne(const struct pam_message *msg, struct pam_response *resp) { resp->resp_retcode = 0; // Unused but should be set to zero. switch (msg->msg_style) { case PAM_PROMPT_ECHO_OFF: { WritePacket(1, PTYPE_PROMPT_LIKE_PASSWORD, msg->msg); char type = ReadPacket(0, &resp->resp, 0); return type == PTYPE_RESPONSE_LIKE_PASSWORD ? PAM_SUCCESS : PAM_CONV_ERR; } case PAM_PROMPT_ECHO_ON: { WritePacket(1, PTYPE_PROMPT_LIKE_USERNAME, msg->msg); char type = ReadPacket(0, &resp->resp, 0); return type == PTYPE_RESPONSE_LIKE_USERNAME ? PAM_SUCCESS : PAM_CONV_ERR; } case PAM_ERROR_MSG: WritePacket(1, PTYPE_ERROR_MESSAGE, msg->msg); return PAM_SUCCESS; case PAM_TEXT_INFO: WritePacket(1, PTYPE_INFO_MESSAGE, msg->msg); return PAM_SUCCESS; default: return PAM_CONV_ERR; } } /*! \brief Perform a PAM conversation. * * \param num_msg The number of conversation steps to execute. * \param msg The PAM messages. * \param resp The PAM responses to store the output in. * \param appdata_ptr Unused. * \return The PAM status (PAM_SUCCESS in case of success, or anything else in * case of error). */ int Converse(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) { (void)appdata_ptr; if (conv_error) { Log("Converse() got called again with %d messages (first: %s) after " "having failed before - this is very likely a bug in the PAM " "module having made the call. Bailing out", num_msg, num_msg <= 0 ? "(none)" : msg[0]->msg); exit(1); } *resp = calloc(num_msg, sizeof(struct pam_response)); int i; for (i = 0; i < num_msg; ++i) { int status = ConverseOne(msg[i], &(*resp)[i]); if (status != PAM_SUCCESS) { for (i = 0; i < num_msg; ++i) { if ((*resp)[i].resp != NULL) { explicit_bzero((*resp)[i].resp, strlen((*resp)[i].resp)); } free((*resp)[i].resp); } free(*resp); *resp = NULL; conv_error = 1; return status; } } return PAM_SUCCESS; } /*! \brief Perform a single PAM operation with retrying logic. */ int CallPAMWithRetries(int (*pam_call)(pam_handle_t *, int), pam_handle_t *pam, int flags) { int attempt = 0; for (;;) { conv_error = 0; int status = pam_call(pam, flags); if (conv_error) { return status; } switch (status) { // Never retry these: case PAM_ABORT: // This is fine. case PAM_MAXTRIES: // D'oh. case PAM_NEW_AUTHTOK_REQD: // hunter2 no longer good enough. case PAM_SUCCESS: // Duh. return status; default: // Let's try again then. ++attempt; if (attempt >= 3) { return status; } break; } } } /*! \brief Perform PAM authentication. * * \param conv The PAM conversation handler. * \param pam The PAM handle will be returned here. * \return The PAM status (PAM_SUCCESS after successful authentication, or * anything else in case of error). */ int Authenticate(struct pam_conv *conv, pam_handle_t **pam) { const char *service_name = GetStringSetting("XSECURELOCK_PAM_SERVICE", PAM_SERVICE_NAME); if (strchr(service_name, '/')) { // As this binary might be running with setuid privileges, we should better // refuse potentially dangerous parameters. This works around PAM // implementations being potentially vulnerable to someone passing // "../shadow" as service name and then getting an error message containing // the encrypted root password. I am not aware of any implementations that // do fall for that - nevertheless let's better be safe. Log("PAM service name (%s) contains a slash - refusing", service_name); return 1; } char username[256]; if (!GetUserName(username, sizeof(username))) { return 1; } int status = pam_start(service_name, username, conv, pam); if (status != PAM_SUCCESS) { Log("pam_start: %d", status); // Or can one call pam_strerror on a NULL handle? return status; } if (!GetIntSetting("XSECURELOCK_NO_PAM_RHOST", 0)) { // This is a local login - by convention PAM_RHOST should be "localhost": // http://www.linux-pam.org/Linux-PAM-html/adg-security-user-identity.html status = pam_set_item(*pam, PAM_RHOST, "localhost"); if (status != PAM_SUCCESS) { Log("pam_set_item: %s", pam_strerror(*pam, status)); return status; } } status = pam_set_item(*pam, PAM_RUSER, username); if (status != PAM_SUCCESS) { Log("pam_set_item: %s", pam_strerror(*pam, status)); return status; } const char *display = getenv("DISPLAY"); status = pam_set_item(*pam, PAM_TTY, display); if (status != PAM_SUCCESS) { Log("pam_set_item: %s", pam_strerror(*pam, status)); return status; } status = CallPAMWithRetries(pam_authenticate, *pam, 0); if (status != PAM_SUCCESS) { if (!conv_error) { Log("pam_authenticate: %s", pam_strerror(*pam, status)); } return status; } int status2 = CallPAMWithRetries(pam_acct_mgmt, *pam, 0); if (status2 == PAM_NEW_AUTHTOK_REQD) { status2 = CallPAMWithRetries(pam_chauthtok, *pam, PAM_CHANGE_EXPIRED_AUTHTOK); #ifdef PAM_CHECK_ACCOUNT_TYPE if (status2 != PAM_SUCCESS) { if (!conv_error) { Log("pam_chauthtok: %s", pam_strerror(*pam, status2)); } return status2; } #else (void)status2; #endif } #ifdef PAM_CHECK_ACCOUNT_TYPE if (status2 != PAM_SUCCESS) { // If this one is true, it must be coming from pam_acct_mgmt, as // pam_chauthtok's result already has been checked against PAM_SUCCESS. if (!conv_error) { Log("pam_acct_mgmt: %s", pam_strerror(*pam, status2)); } return status2; } #endif return status; } /*! \brief The main program. * * Usage: ./authproto_pam; status=$? * * \return 0 if authentication successful, anything else otherwise. */ int main() { setlocale(LC_CTYPE, ""); struct pam_conv conv; conv.conv = Converse; conv.appdata_ptr = NULL; pam_handle_t *pam = NULL; int status = Authenticate(&conv, &pam); int status2 = pam == NULL ? PAM_SUCCESS : pam_end(pam, status); if (status != PAM_SUCCESS) { // The caller already displayed an error. return 1; } if (status2 != PAM_SUCCESS) { Log("pam_end: %s", pam_strerror(pam, status2)); return 1; } return 0; } xsecurelock-1.5.1/helpers/pgrp_placeholder.c0000644061501702575230000000233213455110236016130 00000000000000/* Copyright 2019 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /*! *\brief Process group placeholder. * * Does nothing except sitting around until killed. Spawned as extra process in * our process groups so that we can control on our own when the process group * ID is reclaimed to the kernel, namely by killing the entire process group. * This prevents a race condition of our process group getting reclaimed before * we try to kill possibly remaining processes in it, after which we would * possibly kill something else. * * Must be a separate executable so F_CLOEXEC applies as intended. */ #include #include int main() { for (;;) { pause(); } // Cannot get here. abort(); } xsecurelock-1.5.1/helpers/monitors.h0000644061501702575230000000367213420106751014504 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef MONITORS_H #define MONITORS_H #include // for Window #include // for Display #include // for size_t typedef struct { int x, y, width, height; } Monitor; /*! \brief Queries the current monitor configuration. * * Note: out_monitors will be zero padded and sorted in some deterministic order * so memcmp can be used to check if the monitor configuration has actually * changed. * * \param dpy The current display. * \param w The window this application intends to draw in. * \param out_monitors A pointer to an array that will receive the monitor * configuration (in coordinates relative and clipped to the window w. * \param max_monitors The size of the array. * \return The number of monitors returned in the array. */ size_t GetMonitors(Display* dpy, Window window, Monitor* out_monitors, size_t max_monitors); /*! \brief Enable receiving monitor change events for the given display at w. */ void SelectMonitorChangeEvents(Display* dpy, Window window); /*! \brief Returns the event type that indicates a change to the monitor * configuration. * * \param dpy The current display. * \param type The received event type. * * \returns 1 if the received event is a monitor change event and GetMonitors * should be called, or 0 otherwise. */ int IsMonitorChangeEvent(Display* dpy, int type); #endif xsecurelock-1.5.1/missing0000755061501702575230000001533013460622412012411 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xsecurelock-1.5.1/saver_child.h0000644061501702575230000000271413455110236013450 00000000000000/* Copyright 2014 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef SAVER_CHILD_H #define SAVER_CHILD_H #include // for Window #include // for Display #define MAX_SAVERS 16 /*! \brief Kill all saver children. * * This can be used from a signal handler. */ void KillAllSaverChildrenSigHandler(int signo); /*! \brief Starts or stops the screen saver child process. * * \param dpy The X11 display. * \param w The screen saver window. Will get cleared after saver child * execution. * \param index The index of the saver to maintain (0 <= index < MAX_SAVERS). * \param executable What binary to spawn for screen saving. No arguments will * be passed. * \param should_be_running If true, the saver child is started if not running * yet; if alse, the saver child will be terminated. */ void WatchSaverChild(Display* dpy, Window w, int index, const char* executable, int should_be_running); #endif xsecurelock-1.5.1/env_settings.h0000644061501702575230000000513213335032474013676 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef ENV_SETTINGS_H #define ENV_SETTINGS_H /*! \brief Loads an integer setting from the environment. * * \param name The setting to read (with XSECURELOCK_ variable name prefix). * \param def The default value. * \return The value of the setting, or def if unset or not a number. */ unsigned long long GetUnsignedLongLongSetting(const char* name, unsigned long long def); /*! \brief Loads an integer setting from the environment. * * \param name The setting to read (with XSECURELOCK_ variable name prefix). * \param def The default value. * \return The value of the setting, or def if unset or not a number. */ long GetLongSetting(const char* name, long def); /*! \brief Loads an integer setting from the environment. * * \param name The setting to read (with XSECURELOCK_ variable name prefix). * \param def The default value. * \return The value of the setting, or def if unset or not a number. */ int GetIntSetting(const char* name, int def); /*! \brief Loads a floating-point setting from the environment. * * \param name The setting to read (with XSECURELOCK_ variable name prefix). * \param def The default value. * \return The value of the setting, or def if unset or not a number. */ double GetDoubleSetting(const char* name, double def); /*! \brief Loads a setting from the environment. * * \param name The setting to read (with XSECURELOCK_ variable name prefix). * \param def The default value. * \return The value of the setting, or def if unset or empty. */ const char* GetStringSetting(const char* name, const char* def); /*! \brief Loads a setting from the environment that specifies a binary name. * * \param name The setting to read (with XSECURELOCK_ variable name prefix). * \param def The default value. * \param is_auth If the path should be an auth child. * \return The value of the setting, or def if unset, invalid or empty. */ const char* GetExecutablePathSetting(const char* name, const char* def, int is_auth); #endif xsecurelock-1.5.1/xscreensaver_api.h0000644061501702575230000000201113334563414014522 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef XSCREENSAVER_API_H #define XSCREENSAVER_API_H #include // for Window /*! \brief Export the given window ID to the environment for a saver/auth child. * * This simply sets $XSCREENSAVER_WINDOW. * * \param w The window the child should draw on. */ void ExportWindowID(Window w); /*! \brief Reads the window ID to draw on from the environment. * * This simply reads $XSCREENSAVER_WINDOW. */ Window ReadWindowID(void); #endif xsecurelock-1.5.1/CONTRIBUTING0000644061501702575230000000036113334563414012650 00000000000000In order to contribute to this project, a Contributor License Agreement needs to be signed. These agreements are available at: https://developers.google.com/open-source/cla/individual https://developers.google.com/open-source/cla/corporate xsecurelock-1.5.1/Makefile.am0000644061501702575230000001452313533470677013070 00000000000000# Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. CLEANFILES = AM_CFLAGS = -Wall -Wextra -D_POSIX_C_SOURCE=200112L -D_XOPEN_SOURCE=600 macros = \ -DHELPER_PATH=\"$(pkglibexecdir)\" \ -DDOCS_PATH=\"$(docdir)\" \ -DAUTH_EXECUTABLE=\"@auth_executable@\" \ -DAUTHPROTO_EXECUTABLE=\"@authproto_executable@\" \ -DGLOBAL_SAVER_EXECUTABLE=\"@global_saver_executable@\" \ -DSAVER_EXECUTABLE=\"@saver_executable@\" \ -DPAM_SERVICE_NAME=\"@pam_service_name@\" if HAVE_LIBBSD macros += -DHAVE_LIBBSD endif if PAM_CHECK_ACCOUNT_TYPE macros += -DPAM_CHECK_ACCOUNT_TYPE endif if HAVE_DPMS_EXT macros += -DHAVE_DPMS_EXT endif if HAVE_XSCREENSAVER_EXT macros += -DHAVE_XSCREENSAVER_EXT endif if HAVE_XSYNC_EXT macros += -DHAVE_XSYNC_EXT endif if HAVE_XCOMPOSITE_EXT macros += -DHAVE_XCOMPOSITE_EXT endif if HAVE_XF86MISC_EXT macros += -DHAVE_XF86MISC_EXT endif if HAVE_XFIXES_EXT macros += -DHAVE_XFIXES_EXT endif if HAVE_XFT_EXT macros += -DHAVE_XFT_EXT endif if HAVE_XRANDR_EXT macros += -DHAVE_XRANDR_EXT endif if HAVE_XKB_EXT macros += -DHAVE_XKB_EXT endif bin_PROGRAMS = \ xsecurelock xsecurelock_SOURCES = \ auth_child.c auth_child.h \ env_settings.c env_settings.h \ logging.c logging.h \ mlock_page.h \ main.c \ saver_child.c saver_child.h \ unmap_all.c unmap_all.h \ util.c util.h \ version.c version.h \ wait_pgrp.c wait_pgrp.h \ wm_properties.c wm_properties.h \ xscreensaver_api.c xscreensaver_api.h nodist_xsecurelock_SOURCES = \ env_helpstr.inc xsecurelock_CPPFLAGS = $(macros) $(LIBBSD_CFLAGS) xsecurelock_LDADD = $(LIBBSD_LIBS) helpersdir = $(pkglibexecdir) helpers_SCRIPTS = \ helpers/saver_blank if HAVE_HTPASSWD helpers_SCRIPTS += \ helpers/authproto_htpasswd endif if HAVE_MPLAYER helpers_SCRIPTS += \ helpers/saver_mplayer endif if HAVE_MPV helpers_SCRIPTS += \ helpers/saver_mpv endif if HAVE_PAMTESTER helpers_SCRIPTS += \ helpers/authproto_pamtester endif if HAVE_XSCREENSAVER helpers_SCRIPTS += \ helpers/saver_xscreensaver endif helpers_PROGRAMS = \ pgrp_placeholder pgrp_placeholder_SOURCES = \ helpers/pgrp_placeholder.c helpers_PROGRAMS += \ saver_multiplex saver_multiplex_SOURCES = \ env_settings.c env_settings.h \ helpers/monitors.c helpers/monitors.h \ helpers/saver_multiplex.c \ logging.c logging.h \ saver_child.c saver_child.h \ wait_pgrp.c wait_pgrp.h \ wm_properties.c wm_properties.h \ xscreensaver_api.c xscreensaver_api.h saver_multiplex_CPPFLAGS = $(macros) helpers_PROGRAMS += \ dimmer dimmer_SOURCES = \ env_settings.c env_settings.h \ helpers/dimmer.c \ logging.c logging.h \ wm_properties.c wm_properties.h dimmer_CPPFLAGS = $(macros) if HAVE_IDLE_TIMER helpers_PROGRAMS += \ until_nonidle until_nonidle_SOURCES = \ env_settings.c env_settings.h \ helpers/until_nonidle.c \ logging.c logging.h \ wait_pgrp.c wait_pgrp.h until_nonidle_CPPFLAGS = $(macros) endif helpers_PROGRAMS += \ auth_x11 auth_x11_SOURCES = \ env_info.c env_info.h \ env_settings.c env_settings.h \ helpers/authproto.c helpers/authproto.h \ helpers/auth_x11.c \ helpers/monitors.c helpers/monitors.h \ logging.c logging.h \ mlock_page.h \ util.c util.h \ wait_pgrp.c wait_pgrp.h \ wm_properties.c wm_properties.h \ xscreensaver_api.c xscreensaver_api.h auth_x11_CPPFLAGS = $(macros) $(XFT_CFLAGS) $(LIBBSD_CFLAGS) auth_x11_LDADD = $(XFT_LIBS) $(LIBBSD_LIBS) if HAVE_PAM helpers_PROGRAMS += \ authproto_pam authproto_pam_SOURCES = \ env_info.c env_info.h \ env_settings.c env_settings.h \ helpers/authproto.c helpers/authproto.h \ helpers/authproto_pam.c \ logging.c logging.h \ mlock_page.h \ util.c util.h authproto_pam_CPPFLAGS = $(macros) $(LIBBSD_CFLAGS) authproto_pam_LDADD = $(LIBBSD_LIBS) endif doc_DATA = \ CONTRIBUTING \ LICENSE \ README.md if HAVE_PANDOC man1_MANS = xsecurelock.1 xsecurelock.1.md: doc/xsecurelock.1.md README.md { \ grep -B 9999 'ENV VARIABLES HERE' doc/xsecurelock.1.md; \ grep -A 9999 'ENV VARIABLES START' README.md |\ grep -B 9999 'ENV VARIABLES END'; \ grep -A 9999 'ENV VARIABLES HERE' doc/xsecurelock.1.md; \ } > xsecurelock.1.md xsecurelock.1: xsecurelock.1.md $(path_to_pandoc) -s -f markdown -t man -o $@ $< CLEANFILES += xsecurelock.1.md xsecurelock.1 endif # Some tools that we sure don't wan to install noinst_PROGRAMS = cat_authproto nvidia_break_compositor get_compositor remap_all cat_authproto_SOURCES = \ logging.c logging.h \ helpers/authproto.c helpers/authproto.h \ test/cat_authproto.c nvidia_break_compositor_SOURCES = \ test/nvidia_break_compositor.c nvidia_break_compositor_CPPFLAGS = $(macros) get_compositor_SOURCES = \ test/get_compositor.c get_compositor_CPPFLAGS = $(macros) remap_all_SOURCES= \ test/remap_all.c \ unmap_all.c unmap_all.h remap_all_CPPFLAGS = $(macros) FORCE: version.c: FORCE if [ -n "$(GIT_VERSION)" ]; then \ echo "const char *const git_version = \"$(GIT_VERSION)\";" \ > version.c; \ elif git describe --always --dirty >/dev/null 2>&1; then \ echo "const char *const git_version = \"` \ git describe --always --dirty \ `\";" > version.c; \ else \ : version.c must exist in non-git builds.; \ cat version.c; \ fi .PRECIOUS: version.c # Old one is better than none. env_helpstr.inc: README.md # Autogenerate for --help. grep -A 9999 'ENV VARIABLES START' "$<" |\ grep -B 9999 'ENV VARIABLES END' |\ grep '^[ *]' |\ sed -e 's,\\\|",\\&,g; s,$$,\\n",; s,^,",;' > "$@" xsecurelock-main.$(OBJEXT): env_helpstr.inc EXTRA_DIST = \ CONTRIBUTING \ LICENSE \ README.md \ autogen.sh \ doc/xsecurelock.1.md \ ensure-documented-settings.sh \ helpers/saver_blank \ run-iwyu.sh \ run-linters.sh \ test/*.c \ test/*.sh \ test/*.xdo \ version.c examplesdir = $(docdir)/examples dist_examples_DATA = \ doc/examples/saver_livestreams if HAVE_DOXYGEN doxyfile.stamp: $(DOXYGEN) Doxyfile echo Timestamp > doxyfile.stamp CLEANFILES += doxyfile.stamp all-local: doxyfile.stamp clean-local: $(RM) -r $(top_srcdir)/doxy endif xsecurelock-1.5.1/env_settings.c0000644061501702575230000000740313335032460013667 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include "env_settings.h" #include // for errno, ERANGE #include // for fprintf, NULL, stderr #include // for getenv, strtol, strtoull #include // for strchr #include // for access, X_OK #include "logging.h" unsigned long long GetUnsignedLongLongSetting(const char* name, unsigned long long def) { const char* value = getenv(name); if (value == NULL || value[0] == 0) { return def; } char* endptr = NULL; errno = 0; unsigned long long number = strtoull(value, &endptr, 0); if (errno == ERANGE) { Log("Ignoring out-of-range value of %s: %s", name, value); return def; } if ((endptr != NULL && *endptr != 0)) { Log("Ignoring non-numeric value of %s: %s", name, value); return def; } return number; } long GetLongSetting(const char* name, long def) { const char* value = getenv(name); if (value == NULL || value[0] == 0) { return def; } char* endptr = NULL; errno = 0; long number = strtol(value, &endptr, 0); if (errno == ERANGE) { Log("Ignoring out-of-range value of %s: %s", name, value); return def; } if ((endptr != NULL && *endptr != 0)) { Log("Ignoring non-numeric value of %s: %s", name, value); return def; } return number; } int GetIntSetting(const char* name, int def) { long lnumber = GetLongSetting(name, def); int number = (int)lnumber; if (lnumber != (long)number) { Log("Ignoring out-of-range value of %s: %d", name, number); return def; } return number; } double GetDoubleSetting(const char* name, double def) { const char* value = getenv(name); if (value == NULL || value[0] == 0) { return def; } char* endptr = NULL; errno = 0; double number = strtod(value, &endptr); if (errno == ERANGE) { Log("Ignoring out-of-range value of %s: %s", name, value); return def; } if ((endptr != NULL && *endptr != 0)) { Log("Ignoring non-numeric value of %s: %s", name, value); return def; } return number; } const char* GetStringSetting(const char* name, const char* def) { const char* value = getenv(name); if (value == NULL || value[0] == 0) { return def; } return value; } const char* GetExecutablePathSetting(const char* name, const char* def, int is_auth) { const char* value = getenv(name); if (value == NULL || value[0] == 0) { return def; } if (strchr(value, '/') && value[0] != '/') { Log("Executable name '%s' must be either an absolute path or a file within " "%s", value, HELPER_PATH); return def; } const char* basename = strrchr(value, '/'); if (basename == NULL) { basename = value; // No slash, use as is. } else { ++basename; // Skip the slash. } if (is_auth) { if (strncmp(basename, "auth_", 5) != 0) { Log("Auth executable name '%s' must start with auth_", value); return def; } } else { if (!strncmp(basename, "auth_", 5)) { Log("Non-auth executable name '%s' must not start with auth_", value); return def; } } if (access(value, X_OK)) { Log("Executable '%s' must be executable", value); return def; } return value; } xsecurelock-1.5.1/util.h0000644061501702575230000000157013534464126012151 00000000000000// util header file // // Copyright 2017 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include // for size_t // Declare it - we'll either use ours or whatever autoconf found. // Including would maybe be nicer, but it doesn't seem to // actually define this symbol unless we set _GNU_SOURCE. void explicit_bzero(void *s, size_t len); xsecurelock-1.5.1/logging.c0000644061501702575230000000164113334611237012607 00000000000000#include "logging.h" #include // for errno #include // for va_end, va_list, va_start #include // for fputs, stderr, vfprintf, perror, NULL #include #include static void PrintLogPrefix(void) { time_t t = time(NULL); struct tm tm_buf; struct tm *tm = gmtime_r(&t, &tm_buf); char s[32]; if (!strftime(s, sizeof(s), "%Y-%m-%dT%H:%M:%SZ ", tm)) { *s = 0; } fprintf(stderr, "%s%ld xsecurelock: ", s, (long)getpid()); } void Log(const char *format, ...) { va_list args; va_start(args, format); PrintLogPrefix(); vfprintf(stderr, format, args); fputs(".\n", stderr); va_end(args); } void LogErrno(const char *format, ...) { int errno_save = errno; va_list args; va_start(args, format); PrintLogPrefix(); vfprintf(stderr, format, args); fputs(": ", stderr); errno = errno_save; perror(NULL); va_end(args); errno = errno_save; } xsecurelock-1.5.1/run-linters.sh0000755061501702575230000000411613533470677013652 00000000000000#!/bin/bash # clang-tidy. if which clang-tidy; then set -- \ 'bugprone-*' \ 'cert-*' \ 'clang-analyzer-*' \ 'misc-*' \ 'performance-*' \ 'readability-*' \ '-cert-env33-c' \ '-cert-msc30-c' \ '-cert-msc50-cpp' \ '-clang-analyzer-alpha.core.FixedAddr' \ '-clang-analyzer-alpha.core.PointerArithm' \ '-clang-analyzer-alpha.deadcode.UnreachableCode' checks=$(echo "$*" | tr ' ' ,) # Try once without extensions. clang-tidy -checks="$checks" \ -extra-arg=-DHELPER_PATH=\"\" \ -extra-arg=-DDOCS_PATH=\"\" \ -extra-arg=-DAUTH_EXECUTABLE=\"\" \ -extra-arg=-DAUTHPROTO_EXECUTABLE=\"\" \ -extra-arg=-DGLOBAL_SAVER_EXECUTABLE=\"\" \ -extra-arg=-DSAVER_EXECUTABLE=\"\" \ -extra-arg=-DPAM_SERVICE_NAME=\"\" \ *.[ch] */*.[ch] # Try again with all extensions. clang-tidy -checks="$checks" \ -extra-arg=-I/usr/include/freetype2 \ -extra-arg=-DHELPER_PATH=\"\" \ -extra-arg=-DDOCS_PATH=\"\" \ -extra-arg=-DAUTH_EXECUTABLE=\"\" \ -extra-arg=-DAUTHPROTO_EXECUTABLE=\"\" \ -extra-arg=-DGLOBAL_SAVER_EXECUTABLE=\"\" \ -extra-arg=-DSAVER_EXECUTABLE=\"\" \ -extra-arg=-DPAM_SERVICE_NAME=\"\" \ -extra-arg=-DHAVE_DPMS_EXT \ -extra-arg=-DHAVE_XCOMPOSITE_EXT \ -extra-arg=-DHAVE_XFIXES_EXT \ -extra-arg=-DHAVE_XKB_EXT \ -extra-arg=-DHAVE_XFT_EXT \ -extra-arg=-DHAVE_XRANDR_EXT \ -extra-arg=-DHAVE_XSCREENSAVER_EXT \ -extra-arg=-DHAVE_XSYNC_EXT \ *.[ch] */*.[ch] fi # CPPCheck. if which cppcheck; then cppcheck --enable=all --inconclusive --std=posix . fi # Clang Analyzer. if which scan-build; then make clean scan-build make fi # Build for Coverity Scan. if which cov-build; then make clean rm -rf cov-int cov-build --dir cov-int make tar cvjf cov-int.tbz2 cov-int/ rm -rf cov-int rev=$(git describe --always --dirty) curl --form token="$COVERITY_TOKEN" \ --form email="$COVERITY_EMAIL" \ --form file=@cov-int.tbz2 \ --form version="$rev" \ --form description="$rev" \ https://scan.coverity.com/builds?project=xsecurelock rm -f cov-int.tbz2 fi xsecurelock-1.5.1/util.c0000644061501702575230000000260013534464045012137 00000000000000/* * Copyright 2017 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * * An earlier version of this file was originally released into the public * domain by its authors. It has been modified to make the code compile and * link as part of the Google Authenticator project. These changes are * copyrighted by Google Inc. and released under the Apache License, * Version 2.0. * * The previous authors' terms are included below: */ /***************************************************************************** * * File: util.c * * Purpose: Collection of cross file utility functions. * * This code is in the public domain * ***************************************************************************** */ #ifndef HAVE_EXPLICIT_BZERO #include void explicit_bzero(void *s, size_t len) { memset(s, '\0', len); asm volatile("" ::: "memory"); } #endif xsecurelock-1.5.1/wait_pgrp.h0000644061501702575230000000704413536222143013163 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef WAIT_PGRP_H #define WAIT_PGRP_H #include // for INT_MIN #include // for pid_t #define WAIT_ALREADY_DEAD INT_MIN #define WAIT_NONPOSITIVE_SIGNAL (INT_MIN + 1) /*! \brief Initializes WaitPgrp. * * Actually just installs an empty SIGCHLD handler so select(), sigsuspend() * etc. get interrupted by the signal. */ void InitWaitPgrp(void); /*! \brief Fork a subprocess, but do not inherit our signal handlers. * * Otherwise behaves exactly like fork(). */ pid_t ForkWithoutSigHandlers(void); /*! \brief Starts a new process group. * * Must be called from a child process, which will become the process group * leader. The process group will never die, unless killed using KillPgrp (which * WaitPgrp calls implicitly when the leader process terminates). * * \return Zero if the operation succeeded. */ void StartPgrp(void); /*! \brief Spawns a helper process. * * Works just like execv(), but if path is a relative path, it looks it up * within HELPER_PATH. * * If it fails, it logs a message about what it tried to execute and how it * failed. */ int ExecvHelper(const char *path, const char *const argv[]); /*! \brief Kills the given process group. * * \param pid The process group ID. * \param signo The signal to send to the process group. * \return Zero if and only if sending the signal succeeded. */ int KillPgrp(pid_t pid, int signo); /*! \brief Waits for the given process group to terminate, or checks its status. * If the leader process died, kill the entire group. * * \param name The name of the process group for logging. * \param pid The process group ID; it is set to zero if the process group died. * \param do_block Whether to wait for the process group to terminate. * \param already_killed Whether the caller already sent SIGTERM to the process * group. If so, we will not log this signal as that'd be spam. * \param exit_status Variable that receives the exit status of the leader when * it terminated. Will be negative for a signal, positive for a regular exit, * or one of the WAIT_* constants. * \return True if the process group is still alive. */ int WaitPgrp(const char *name, pid_t *pid, int do_block, int already_killed, int *exit_status); /*! \brief Waits for the given process to terminate, or checks its status. * * \param name The name of the process for logging. * \param pid The process ID; it is set to zero if the process died. * \param do_block Whether to wait for the process to terminate. * \param already_killed Whether the caller already sent SIGTERM to the process. * If so, we will not log this signal as that'd be spam. \param exit_status * Variable that receives the exit status of the leader when it terminated. * Will be negative for a signal, positive for a regular exit, or one of the * WAIT_* constants. * \return True if the process is still alive. */ int WaitProc(const char *name, pid_t *pid, int do_block, int already_killed, int *exit_status); #endif xsecurelock-1.5.1/configure0000755061501702575230000067476513536475521012763 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for xsecurelock 1.5.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and rpolzer@google.com $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xsecurelock' PACKAGE_TARNAME='xsecurelock' PACKAGE_VERSION='1.5.1' PACKAGE_STRING='xsecurelock 1.5.1' PACKAGE_BUGREPORT='rpolzer@google.com' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS HAVE_DOXYGEN_FALSE HAVE_DOXYGEN_TRUE DOXYGEN HAVE_IDLE_TIMER_FALSE HAVE_IDLE_TIMER_TRUE PAM_CHECK_ACCOUNT_TYPE_FALSE PAM_CHECK_ACCOUNT_TYPE_TRUE saver_executable global_saver_executable authproto_executable auth_executable pam_service_name HAVE_XSCREENSAVER_FALSE HAVE_XSCREENSAVER_TRUE path_to_xscreensaver HAVE_PANDOC_FALSE HAVE_PANDOC_TRUE path_to_pandoc HAVE_PAMTESTER_FALSE HAVE_PAMTESTER_TRUE path_to_pamtester HAVE_MPV_FALSE HAVE_MPV_TRUE path_to_mpv HAVE_MPLAYER_FALSE HAVE_MPLAYER_TRUE path_to_mplayer HAVE_HTPASSWD_FALSE HAVE_HTPASSWD_TRUE path_to_htpasswd HAVE_XFIXES_EXT_FALSE HAVE_XFIXES_EXT_TRUE HAVE_XRANDR_EXT_FALSE HAVE_XRANDR_EXT_TRUE HAVE_XKB_EXT_FALSE HAVE_XKB_EXT_TRUE HAVE_XFT_EXT_FALSE HAVE_XFT_EXT_TRUE XFT_LIBS XFT_CFLAGS HAVE_LIBBSD_FALSE HAVE_LIBBSD_TRUE libbsd_LIBS libbsd_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG HAVE_PAM_FALSE HAVE_PAM_TRUE HAVE_XF86MISC_EXT_FALSE HAVE_XF86MISC_EXT_TRUE HAVE_XCOMPOSITE_EXT_FALSE HAVE_XCOMPOSITE_EXT_TRUE HAVE_XSYNC_EXT_FALSE HAVE_XSYNC_EXT_TRUE HAVE_XSCREENSAVER_EXT_FALSE HAVE_XSCREENSAVER_EXT_TRUE HAVE_DPMS_EXT_FALSE HAVE_DPMS_EXT_TRUE EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_dpms with_xss with_xsync with_xcomposite with_xf86misc with_pam with_libbsd with_xft with_xkb with_xrandr with_xfixes with_htpasswd with_mplayer with_mpv with_pamtester with_pandoc with_xscreensaver with_pam_service_name enable_pam_check_account_type with_default_auth_module with_default_authproto_module with_default_global_saver_module with_default_saver_module ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR libbsd_CFLAGS libbsd_LIBS XFT_CFLAGS XFT_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures xsecurelock 1.5.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/xsecurelock] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of xsecurelock 1.5.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-pam-check-account-type Enable checking of PAM accounting result. Only enable this if accounting is properly configured on your system; especially keep this disabled if --with-pam-service-name is set to an authentication-only service name like common-auth. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-dpms Use the DPMS extension to save power [default=check] --with-xss Use the X11 Screen Saver extension to save power [default=check] --with-xsync Use the X Synchronization extension to detect idle time [default=check] --with-xcomposite Use the X11 Composite extension to cover desktop notifications [default=yes] --with-xf86misc Use the XFree86-Misc extension to disable ungrab keys [default=check] --with-pam Enable support for the PAM library to authenticate the user [default=yes] --with-libbsd Use libbsd for utility functions. [default=check] --with-xft Use the Xft extension for nicer fonts (requires Xrender too) [default=check] --with-xkb Use the X Keyboard extension to show the keyboard LEDs [default=check] --with-xrandr Use the XRandR extension to query monitor layouts [default=check] --with-xfixes Use the XFixes extension to work around some compositors [default=check] --with-htpasswd Install auth_htpasswd (specify --with-htpasswd=/usr/bin/htpasswd to set the path to use) [default=check] --with-mplayer Install saver_mplayer (specify --with-mplayer=/usr/bin/mplayer to set the path to use) [default=check] --with-mpv Install saver_mpv (specify --with-mpv=/usr/bin/mpv to set the path to use) [default=check] --with-pamtester Install authproto_pamtester (specify --with-pamtester=/usr/bin to set the path to use) [default=check] --with-pandoc Use pandoc to generate man pages [default=check] --with-xscreensaver Install saver_xscreensaver (specify --with-xscreensaver=/usr/lib/xscreensaver to set the saver plugin directory to use) [default=check] --with-pam-service-name The name of the PAM service that xsecurelock's auth helpers will authenticate as by default. This flag is mandatory. Be sure to verify that /etc/pam.d/SERVICENAME actually exists, as failure of doing so may prevent unlocking the screen. --with-default-auth-module The default authentication module to use when none was specified. Can be overridden via the XSECURELOCK_AUTH environment variable or a command line argument. --with-default-authproto-module The default authentication protocol module to use when none was specified. Can be overridden via the XSECURELOCK_AUTHPROTO environment variable. By default this is autodetected to be one of the supported authentication modules. --with-default-global-saver-module The default global saver module to use when none was specified. Can be overridden via the XSECURELOCK_GLOBAL_SAVER environment variable. --with-default-saver-module The default per-screen saver module to use when none was specified. Can be overridden via the XSECURELOCK_SAVER environment variable. Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path libbsd_CFLAGS C compiler flags for libbsd, overriding pkg-config libbsd_LIBS linker flags for libbsd, overriding pkg-config XFT_CFLAGS C compiler flags for XFT, overriding pkg-config XFT_LIBS linker flags for XFT, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF xsecurelock configure 1.5.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------- ## ## Report this to rpolzer@google.com ## ## --------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by xsecurelock $as_me 1.5.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='xsecurelock' VERSION='1.5.1' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker supports --as-needed" >&5 $as_echo_n "checking whether the linker supports --as-needed... " >&6; } saved_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,--as-needed" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } LDFLAGS=$saved_LDFLAGS fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default" if test "x$ac_cv_header_X11_Xlib_h" = xyes; then : else as_fn_error $? "X includes not found." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5 $as_echo_n "checking for XOpenDisplay in -lX11... " >&6; } if ${ac_cv_lib_X11_XOpenDisplay+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_XOpenDisplay=yes else ac_cv_lib_X11_XOpenDisplay=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XOpenDisplay" >&5 $as_echo "$ac_cv_lib_X11_XOpenDisplay" >&6; } if test "x$ac_cv_lib_X11_XOpenDisplay" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBX11 1 _ACEOF LIBS="-lX11 $LIBS" else as_fn_error $? "X library not found." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XmuClientWindow in -lXmuu" >&5 $as_echo_n "checking for XmuClientWindow in -lXmuu... " >&6; } if ${ac_cv_lib_Xmuu_XmuClientWindow+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXmuu $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XmuClientWindow (); int main () { return XmuClientWindow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xmuu_XmuClientWindow=yes else ac_cv_lib_Xmuu_XmuClientWindow=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xmuu_XmuClientWindow" >&5 $as_echo "$ac_cv_lib_Xmuu_XmuClientWindow" >&6; } if test "x$ac_cv_lib_Xmuu_XmuClientWindow" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXMUU 1 _ACEOF LIBS="-lXmuu $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XmuClientWindow in -lXmu" >&5 $as_echo_n "checking for XmuClientWindow in -lXmu... " >&6; } if ${ac_cv_lib_Xmu_XmuClientWindow+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXmu $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XmuClientWindow (); int main () { return XmuClientWindow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xmu_XmuClientWindow=yes else ac_cv_lib_Xmu_XmuClientWindow=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xmu_XmuClientWindow" >&5 $as_echo "$ac_cv_lib_Xmu_XmuClientWindow" >&6; } if test "x$ac_cv_lib_Xmu_XmuClientWindow" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXMU 1 _ACEOF LIBS="-lXmu $LIBS" else as_fn_error $? "Xmuu or Xmu library not found." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 $as_echo_n "checking for sqrt in -lm... " >&6; } if ${ac_cv_lib_m_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqrt (); int main () { return sqrt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_sqrt=yes else ac_cv_lib_m_sqrt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 $as_echo "$ac_cv_lib_m_sqrt" >&6; } if test "x$ac_cv_lib_m_sqrt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" else as_fn_error $? "Math library not found." "$LINENO" 5 fi # RP_SEARCH_LIBS(sym, lib, macro, flag, default, description) # RP_SEARCH_PROG(prog, path, macro, flag, default, description) # RP_CHECK_MODULE(prefix, module, macro, flag, default, description) # The DPMS extension is used to save power of the screen when turned off. Saves # electric power. # Check whether --with-dpms was given. if test "${with_dpms+set}" = set; then : withval=$with_dpms; with_dpms=$withval else with_dpms=check fi if test "x$with_dpms" = xno; then : have_dpms=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DPMSQueryExtension" >&5 $as_echo_n "checking for library containing DPMSQueryExtension... " >&6; } if ${ac_cv_search_DPMSQueryExtension+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DPMSQueryExtension (); int main () { return DPMSQueryExtension (); ; return 0; } _ACEOF for ac_lib in '' Xext; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_DPMSQueryExtension=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_DPMSQueryExtension+:} false; then : break fi done if ${ac_cv_search_DPMSQueryExtension+:} false; then : else ac_cv_search_DPMSQueryExtension=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DPMSQueryExtension" >&5 $as_echo "$ac_cv_search_DPMSQueryExtension" >&6; } ac_res=$ac_cv_search_DPMSQueryExtension if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_dpms=true else if test "x$with_dpms" = xcheck; then : have_dpms=false else as_fn_error $? "--with-dpms was enabled, but test for dpms failed" "$LINENO" 5 fi fi fi if test x$have_dpms = xtrue; then HAVE_DPMS_EXT_TRUE= HAVE_DPMS_EXT_FALSE='#' else HAVE_DPMS_EXT_TRUE='#' HAVE_DPMS_EXT_FALSE= fi # The X11 Screen Saver extension is used to turn off the screen saver when X11 # handles screen blanking (e.g. via timeout) anyway; not needed for when we # handle blanking explicitly (XSECURELOCK_BLANK_TIMEOUT). Saves CPU power. # Check whether --with-xss was given. if test "${with_xss+set}" = set; then : withval=$with_xss; with_xss=$withval else with_xss=check fi if test "x$with_xss" = xno; then : have_xss=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XScreenSaverQueryExtension" >&5 $as_echo_n "checking for library containing XScreenSaverQueryExtension... " >&6; } if ${ac_cv_search_XScreenSaverQueryExtension+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XScreenSaverQueryExtension (); int main () { return XScreenSaverQueryExtension (); ; return 0; } _ACEOF for ac_lib in '' Xss; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_XScreenSaverQueryExtension=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_XScreenSaverQueryExtension+:} false; then : break fi done if ${ac_cv_search_XScreenSaverQueryExtension+:} false; then : else ac_cv_search_XScreenSaverQueryExtension=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XScreenSaverQueryExtension" >&5 $as_echo "$ac_cv_search_XScreenSaverQueryExtension" >&6; } ac_res=$ac_cv_search_XScreenSaverQueryExtension if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_xss=true else if test "x$with_xss" = xcheck; then : have_xss=false else as_fn_error $? "--with-xss was enabled, but test for xss failed" "$LINENO" 5 fi fi fi if test x$have_xss = xtrue; then HAVE_XSCREENSAVER_EXT_TRUE= HAVE_XSCREENSAVER_EXT_FALSE='#' else HAVE_XSCREENSAVER_EXT_TRUE='#' HAVE_XSCREENSAVER_EXT_FALSE= fi # The X Synchronization extension is used to get per-device idle times. Used by # until_nonidle only. # Check whether --with-xsync was given. if test "${with_xsync+set}" = set; then : withval=$with_xsync; with_xsync=$withval else with_xsync=check fi if test "x$with_xsync" = xno; then : have_xsync=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XSyncQueryExtension" >&5 $as_echo_n "checking for library containing XSyncQueryExtension... " >&6; } if ${ac_cv_search_XSyncQueryExtension+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XSyncQueryExtension (); int main () { return XSyncQueryExtension (); ; return 0; } _ACEOF for ac_lib in '' Xext; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_XSyncQueryExtension=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_XSyncQueryExtension+:} false; then : break fi done if ${ac_cv_search_XSyncQueryExtension+:} false; then : else ac_cv_search_XSyncQueryExtension=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XSyncQueryExtension" >&5 $as_echo "$ac_cv_search_XSyncQueryExtension" >&6; } ac_res=$ac_cv_search_XSyncQueryExtension if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_xsync=true else if test "x$with_xsync" = xcheck; then : have_xsync=false else as_fn_error $? "--with-xsync was enabled, but test for xsync failed" "$LINENO" 5 fi fi fi if test x$have_xsync = xtrue; then HAVE_XSYNC_EXT_TRUE= HAVE_XSYNC_EXT_FALSE='#' else HAVE_XSYNC_EXT_TRUE='#' HAVE_XSYNC_EXT_FALSE= fi # The Composite extension needs an explicit opt-out because not having it can # cause desktop notifications to appear on top of the screen saver (privacy # risk). # Check whether --with-xcomposite was given. if test "${with_xcomposite+set}" = set; then : withval=$with_xcomposite; with_xcomposite=$withval else with_xcomposite=yes fi if test "x$with_xcomposite" = xno; then : have_xcomposite=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XCompositeQueryExtension" >&5 $as_echo_n "checking for library containing XCompositeQueryExtension... " >&6; } if ${ac_cv_search_XCompositeQueryExtension+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XCompositeQueryExtension (); int main () { return XCompositeQueryExtension (); ; return 0; } _ACEOF for ac_lib in '' Xcomposite; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_XCompositeQueryExtension=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_XCompositeQueryExtension+:} false; then : break fi done if ${ac_cv_search_XCompositeQueryExtension+:} false; then : else ac_cv_search_XCompositeQueryExtension=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XCompositeQueryExtension" >&5 $as_echo "$ac_cv_search_XCompositeQueryExtension" >&6; } ac_res=$ac_cv_search_XCompositeQueryExtension if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_xcomposite=true else if test "x$with_xcomposite" = xcheck; then : have_xcomposite=false else as_fn_error $? "--with-xcomposite was enabled, but test for xcomposite failed" "$LINENO" 5 fi fi fi if test x$have_xcomposite = xtrue; then HAVE_XCOMPOSITE_EXT_TRUE= HAVE_XCOMPOSITE_EXT_FALSE='#' else HAVE_XCOMPOSITE_EXT_TRUE='#' HAVE_XCOMPOSITE_EXT_FALSE= fi # This extension doesn't really exist anymore, but served to counteract the # (also no longer existing) AllowClosedownGrabs and similar X server settings. # Check whether --with-xf86misc was given. if test "${with_xf86misc+set}" = set; then : withval=$with_xf86misc; with_xf86misc=$withval else with_xf86misc=check fi if test "x$with_xf86misc" = xno; then : have_xf86misc=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XF86MiscSetGrabKeysState" >&5 $as_echo_n "checking for library containing XF86MiscSetGrabKeysState... " >&6; } if ${ac_cv_search_XF86MiscSetGrabKeysState+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XF86MiscSetGrabKeysState (); int main () { return XF86MiscSetGrabKeysState (); ; return 0; } _ACEOF for ac_lib in '' Xxf86misc; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_XF86MiscSetGrabKeysState=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_XF86MiscSetGrabKeysState+:} false; then : break fi done if ${ac_cv_search_XF86MiscSetGrabKeysState+:} false; then : else ac_cv_search_XF86MiscSetGrabKeysState=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XF86MiscSetGrabKeysState" >&5 $as_echo "$ac_cv_search_XF86MiscSetGrabKeysState" >&6; } ac_res=$ac_cv_search_XF86MiscSetGrabKeysState if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_xf86misc=true else if test "x$with_xf86misc" = xcheck; then : have_xf86misc=false else as_fn_error $? "--with-xf86misc was enabled, but test for xf86misc failed" "$LINENO" 5 fi fi fi if test x$have_xf86misc = xtrue; then HAVE_XF86MISC_EXT_TRUE= HAVE_XF86MISC_EXT_FALSE='#' else HAVE_XF86MISC_EXT_TRUE='#' HAVE_XF86MISC_EXT_FALSE= fi # PAM-less operation is... unfortunate. Let's have users explicitly disable this # if they need to use other auth modules, as most likely they should rather # install PAM development libraries instead. # Check whether --with-pam was given. if test "${with_pam+set}" = set; then : withval=$with_pam; with_pam=$withval else with_pam=yes fi if test "x$with_pam" = xno; then : have_pam=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pam_authenticate" >&5 $as_echo_n "checking for library containing pam_authenticate... " >&6; } if ${ac_cv_search_pam_authenticate+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pam_authenticate (); int main () { return pam_authenticate (); ; return 0; } _ACEOF for ac_lib in '' pam; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_pam_authenticate=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_pam_authenticate+:} false; then : break fi done if ${ac_cv_search_pam_authenticate+:} false; then : else ac_cv_search_pam_authenticate=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pam_authenticate" >&5 $as_echo "$ac_cv_search_pam_authenticate" >&6; } ac_res=$ac_cv_search_pam_authenticate if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_pam=true else if test "x$with_pam" = xcheck; then : have_pam=false else as_fn_error $? "--with-pam was enabled, but test for pam failed" "$LINENO" 5 fi fi fi if test x$have_pam = xtrue; then HAVE_PAM_TRUE= HAVE_PAM_FALSE='#' else HAVE_PAM_TRUE='#' HAVE_PAM_FALSE= fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Check whether --with-libbsd was given. if test "${with_libbsd+set}" = set; then : withval=$with_libbsd; with_libbsd=$withval else with_libbsd=check fi if test "x$with_libbsd" = xno; then : have_libbsd=false else pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libbsd" >&5 $as_echo_n "checking for libbsd... " >&6; } if test -n "$libbsd_CFLAGS"; then pkg_cv_libbsd_CFLAGS="$libbsd_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libbsd\""; } >&5 ($PKG_CONFIG --exists --print-errors "libbsd") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libbsd_CFLAGS=`$PKG_CONFIG --cflags "libbsd" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libbsd_LIBS"; then pkg_cv_libbsd_LIBS="$libbsd_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libbsd\""; } >&5 ($PKG_CONFIG --exists --print-errors "libbsd") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libbsd_LIBS=`$PKG_CONFIG --libs "libbsd" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libbsd_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libbsd" 2>&1` else libbsd_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libbsd" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libbsd_PKG_ERRORS" >&5 if test "x$with_libbsd" = xcheck; then : have_libbsd=false else as_fn_error $? "--with-libbsd was enabled, but test for libbsd failed" "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "x$with_libbsd" = xcheck; then : have_libbsd=false else as_fn_error $? "--with-libbsd was enabled, but test for libbsd failed" "$LINENO" 5 fi else libbsd_CFLAGS=$pkg_cv_libbsd_CFLAGS libbsd_LIBS=$pkg_cv_libbsd_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libbsd=true fi fi if test x$have_libbsd = xtrue; then HAVE_LIBBSD_TRUE= HAVE_LIBBSD_FALSE='#' else HAVE_LIBBSD_TRUE='#' HAVE_LIBBSD_FALSE= fi for ac_func in explicit_bzero do : ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero" if test "x$ac_cv_func_explicit_bzero" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EXPLICIT_BZERO 1 _ACEOF fi done # Xft optionally provides nicer font rendering. # Check whether --with-xft was given. if test "${with_xft+set}" = set; then : withval=$with_xft; with_xft=$withval else with_xft=check fi if test "x$with_xft" = xno; then : have_xft=false else pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XFT" >&5 $as_echo_n "checking for XFT... " >&6; } if test -n "$XFT_CFLAGS"; then pkg_cv_XFT_CFLAGS="$XFT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xft\""; } >&5 ($PKG_CONFIG --exists --print-errors "xft") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XFT_CFLAGS=`$PKG_CONFIG --cflags "xft" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$XFT_LIBS"; then pkg_cv_XFT_LIBS="$XFT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xft\""; } >&5 ($PKG_CONFIG --exists --print-errors "xft") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XFT_LIBS=`$PKG_CONFIG --libs "xft" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then XFT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "xft" 2>&1` else XFT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "xft" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$XFT_PKG_ERRORS" >&5 if test "x$with_xft" = xcheck; then : have_xft=false else as_fn_error $? "--with-xft was enabled, but test for xft failed" "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "x$with_xft" = xcheck; then : have_xft=false else as_fn_error $? "--with-xft was enabled, but test for xft failed" "$LINENO" 5 fi else XFT_CFLAGS=$pkg_cv_XFT_CFLAGS XFT_LIBS=$pkg_cv_XFT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_xft=true fi fi if test x$have_xft = xtrue; then HAVE_XFT_EXT_TRUE= HAVE_XFT_EXT_FALSE='#' else HAVE_XFT_EXT_TRUE='#' HAVE_XFT_EXT_FALSE= fi # Querying the keyboard LEDs (and layout name) makes auth_x11 more user # friendly. # Check whether --with-xkb was given. if test "${with_xkb+set}" = set; then : withval=$with_xkb; with_xkb=$withval else with_xkb=check fi if test "x$with_xkb" = xno; then : have_xkb=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XkbGetIndicatorState" >&5 $as_echo_n "checking for library containing XkbGetIndicatorState... " >&6; } if ${ac_cv_search_XkbGetIndicatorState+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XkbGetIndicatorState (); int main () { return XkbGetIndicatorState (); ; return 0; } _ACEOF for ac_lib in '' X11; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_XkbGetIndicatorState=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_XkbGetIndicatorState+:} false; then : break fi done if ${ac_cv_search_XkbGetIndicatorState+:} false; then : else ac_cv_search_XkbGetIndicatorState=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XkbGetIndicatorState" >&5 $as_echo "$ac_cv_search_XkbGetIndicatorState" >&6; } ac_res=$ac_cv_search_XkbGetIndicatorState if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_xkb=true else if test "x$with_xkb" = xcheck; then : have_xkb=false else as_fn_error $? "--with-xkb was enabled, but test for xkb failed" "$LINENO" 5 fi fi fi if test x$have_xkb = xtrue; then HAVE_XKB_EXT_TRUE= HAVE_XKB_EXT_FALSE='#' else HAVE_XKB_EXT_TRUE='#' HAVE_XKB_EXT_FALSE= fi # XRandR provides information about monitor layouts and is strongly recommended # on systems which can use more than one monitor (which includes most laptops). # Check whether --with-xrandr was given. if test "${with_xrandr+set}" = set; then : withval=$with_xrandr; with_xrandr=$withval else with_xrandr=check fi if test "x$with_xrandr" = xno; then : have_xrandr=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XRRGetScreenResources" >&5 $as_echo_n "checking for library containing XRRGetScreenResources... " >&6; } if ${ac_cv_search_XRRGetScreenResources+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XRRGetScreenResources (); int main () { return XRRGetScreenResources (); ; return 0; } _ACEOF for ac_lib in '' Xrandr; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_XRRGetScreenResources=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_XRRGetScreenResources+:} false; then : break fi done if ${ac_cv_search_XRRGetScreenResources+:} false; then : else ac_cv_search_XRRGetScreenResources=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XRRGetScreenResources" >&5 $as_echo "$ac_cv_search_XRRGetScreenResources" >&6; } ac_res=$ac_cv_search_XRRGetScreenResources if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_xrandr=true else if test "x$with_xrandr" = xcheck; then : have_xrandr=false else as_fn_error $? "--with-xrandr was enabled, but test for xrandr failed" "$LINENO" 5 fi fi fi if test x$have_xrandr = xtrue; then HAVE_XRANDR_EXT_TRUE= HAVE_XRANDR_EXT_FALSE='#' else HAVE_XRANDR_EXT_TRUE='#' HAVE_XRANDR_EXT_FALSE= fi # The XFixes extension is used to work around possible weird leftover state from # compositors. # Check whether --with-xfixes was given. if test "${with_xfixes+set}" = set; then : withval=$with_xfixes; with_xfixes=$withval else with_xfixes=check fi if test "x$with_xfixes" = xno; then : have_xfixes=false else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XFixesSetWindowShapeRegion" >&5 $as_echo_n "checking for library containing XFixesSetWindowShapeRegion... " >&6; } if ${ac_cv_search_XFixesSetWindowShapeRegion+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XFixesSetWindowShapeRegion (); int main () { return XFixesSetWindowShapeRegion (); ; return 0; } _ACEOF for ac_lib in '' Xfixes; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_XFixesSetWindowShapeRegion=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_XFixesSetWindowShapeRegion+:} false; then : break fi done if ${ac_cv_search_XFixesSetWindowShapeRegion+:} false; then : else ac_cv_search_XFixesSetWindowShapeRegion=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XFixesSetWindowShapeRegion" >&5 $as_echo "$ac_cv_search_XFixesSetWindowShapeRegion" >&6; } ac_res=$ac_cv_search_XFixesSetWindowShapeRegion if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_xfixes=true else if test "x$with_xfixes" = xcheck; then : have_xfixes=false else as_fn_error $? "--with-xfixes was enabled, but test for xfixes failed" "$LINENO" 5 fi fi fi if test x$have_xfixes = xtrue; then HAVE_XFIXES_EXT_TRUE= HAVE_XFIXES_EXT_FALSE='#' else HAVE_XFIXES_EXT_TRUE='#' HAVE_XFIXES_EXT_FALSE= fi # Check whether --with-htpasswd was given. if test "${with_htpasswd+set}" = set; then : withval=$with_htpasswd; with_htpasswd=$withval else with_htpasswd=check fi if test "x$with_htpasswd" = xno; then : have_htpasswd=false else path_to_htpasswd=$with_htpasswd # Extract the first word of "htpasswd", so it can be a program name with args. set dummy htpasswd; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_path_to_htpasswd+:} false; then : $as_echo_n "(cached) " >&6 else case $path_to_htpasswd in [\\/]* | ?:[\\/]*) ac_cv_path_path_to_htpasswd="$path_to_htpasswd" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_path_to_htpasswd="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi path_to_htpasswd=$ac_cv_path_path_to_htpasswd if test -n "$path_to_htpasswd"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $path_to_htpasswd" >&5 $as_echo "$path_to_htpasswd" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$path_to_htpasswd" = x; then : if test "x$with_htpasswd" = xcheck; then : have_htpasswd=false else as_fn_error $? "--with-htpasswd was enabled, but test for htpasswd failed" "$LINENO" 5 fi else have_htpasswd=true fi fi if test x$have_htpasswd = xtrue; then HAVE_HTPASSWD_TRUE= HAVE_HTPASSWD_FALSE='#' else HAVE_HTPASSWD_TRUE='#' HAVE_HTPASSWD_FALSE= fi # Check whether --with-mplayer was given. if test "${with_mplayer+set}" = set; then : withval=$with_mplayer; with_mplayer=$withval else with_mplayer=check fi if test "x$with_mplayer" = xno; then : have_mplayer=false else path_to_mplayer=$with_mplayer # Extract the first word of "mplayer", so it can be a program name with args. set dummy mplayer; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_path_to_mplayer+:} false; then : $as_echo_n "(cached) " >&6 else case $path_to_mplayer in [\\/]* | ?:[\\/]*) ac_cv_path_path_to_mplayer="$path_to_mplayer" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_path_to_mplayer="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi path_to_mplayer=$ac_cv_path_path_to_mplayer if test -n "$path_to_mplayer"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $path_to_mplayer" >&5 $as_echo "$path_to_mplayer" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$path_to_mplayer" = x; then : if test "x$with_mplayer" = xcheck; then : have_mplayer=false else as_fn_error $? "--with-mplayer was enabled, but test for mplayer failed" "$LINENO" 5 fi else have_mplayer=true fi fi if test x$have_mplayer = xtrue; then HAVE_MPLAYER_TRUE= HAVE_MPLAYER_FALSE='#' else HAVE_MPLAYER_TRUE='#' HAVE_MPLAYER_FALSE= fi # Check whether --with-mpv was given. if test "${with_mpv+set}" = set; then : withval=$with_mpv; with_mpv=$withval else with_mpv=check fi if test "x$with_mpv" = xno; then : have_mpv=false else path_to_mpv=$with_mpv # Extract the first word of "mpv", so it can be a program name with args. set dummy mpv; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_path_to_mpv+:} false; then : $as_echo_n "(cached) " >&6 else case $path_to_mpv in [\\/]* | ?:[\\/]*) ac_cv_path_path_to_mpv="$path_to_mpv" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_path_to_mpv="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi path_to_mpv=$ac_cv_path_path_to_mpv if test -n "$path_to_mpv"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $path_to_mpv" >&5 $as_echo "$path_to_mpv" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$path_to_mpv" = x; then : if test "x$with_mpv" = xcheck; then : have_mpv=false else as_fn_error $? "--with-mpv was enabled, but test for mpv failed" "$LINENO" 5 fi else have_mpv=true fi fi if test x$have_mpv = xtrue; then HAVE_MPV_TRUE= HAVE_MPV_FALSE='#' else HAVE_MPV_TRUE='#' HAVE_MPV_FALSE= fi # Check whether --with-pamtester was given. if test "${with_pamtester+set}" = set; then : withval=$with_pamtester; with_pamtester=$withval else with_pamtester=check fi if test "x$with_pamtester" = xno; then : have_pamtester=false else path_to_pamtester=$with_pamtester # Extract the first word of "pamtester", so it can be a program name with args. set dummy pamtester; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_path_to_pamtester+:} false; then : $as_echo_n "(cached) " >&6 else case $path_to_pamtester in [\\/]* | ?:[\\/]*) ac_cv_path_path_to_pamtester="$path_to_pamtester" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_path_to_pamtester="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi path_to_pamtester=$ac_cv_path_path_to_pamtester if test -n "$path_to_pamtester"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $path_to_pamtester" >&5 $as_echo "$path_to_pamtester" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$path_to_pamtester" = x; then : if test "x$with_pamtester" = xcheck; then : have_pamtester=false else as_fn_error $? "--with-pamtester was enabled, but test for pamtester failed" "$LINENO" 5 fi else have_pamtester=true fi fi if test x$have_pamtester = xtrue; then HAVE_PAMTESTER_TRUE= HAVE_PAMTESTER_FALSE='#' else HAVE_PAMTESTER_TRUE='#' HAVE_PAMTESTER_FALSE= fi # Check whether --with-pandoc was given. if test "${with_pandoc+set}" = set; then : withval=$with_pandoc; with_pandoc=$withval else with_pandoc=check fi if test "x$with_pandoc" = xno; then : have_pandoc=false else path_to_pandoc=$with_pandoc # Extract the first word of "pandoc", so it can be a program name with args. set dummy pandoc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_path_to_pandoc+:} false; then : $as_echo_n "(cached) " >&6 else case $path_to_pandoc in [\\/]* | ?:[\\/]*) ac_cv_path_path_to_pandoc="$path_to_pandoc" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_path_to_pandoc="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi path_to_pandoc=$ac_cv_path_path_to_pandoc if test -n "$path_to_pandoc"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $path_to_pandoc" >&5 $as_echo "$path_to_pandoc" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$path_to_pandoc" = x; then : if test "x$with_pandoc" = xcheck; then : have_pandoc=false else as_fn_error $? "--with-pandoc was enabled, but test for pandoc failed" "$LINENO" 5 fi else have_pandoc=true fi fi if test x$have_pandoc = xtrue; then HAVE_PANDOC_TRUE= HAVE_PANDOC_FALSE='#' else HAVE_PANDOC_TRUE='#' HAVE_PANDOC_FALSE= fi # Check whether --with-xscreensaver was given. if test "${with_xscreensaver+set}" = set; then : withval=$with_xscreensaver; with_xscreensaver=$withval else with_xscreensaver=check fi if test "x$with_xscreensaver" = xno; then : have_xscreensaver=false else path_to_xscreensaver=$with_xscreensaver # Extract the first word of "slidescreen", so it can be a program name with args. set dummy slidescreen; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_path_to_xscreensaver+:} false; then : $as_echo_n "(cached) " >&6 else case $path_to_xscreensaver in [\\/]* | ?:[\\/]*) ac_cv_path_path_to_xscreensaver="$path_to_xscreensaver" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /usr/lib/xscreensaver do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_path_to_xscreensaver="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi path_to_xscreensaver=$ac_cv_path_path_to_xscreensaver if test -n "$path_to_xscreensaver"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $path_to_xscreensaver" >&5 $as_echo "$path_to_xscreensaver" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$path_to_xscreensaver" = x; then : if test "x$with_xscreensaver" = xcheck; then : have_xscreensaver=false else as_fn_error $? "--with-xscreensaver was enabled, but test for xscreensaver failed" "$LINENO" 5 fi else have_xscreensaver=true fi fi if test x$have_xscreensaver = xtrue; then HAVE_XSCREENSAVER_TRUE= HAVE_XSCREENSAVER_FALSE='#' else HAVE_XSCREENSAVER_TRUE='#' HAVE_XSCREENSAVER_FALSE= fi # However, all we really want is the directory name... path_to_xscreensaver=${path_to_xscreensaver%/slidescreen} pam_service_name= enable_pam_check_account_type=no if test x$have_pam = xtrue; then : # Check whether --with-pam_service_name was given. if test "${with_pam_service_name+set}" = set; then : withval=$with_pam_service_name; pam_service_name=$withval else as_fn_error $? "--with-pam-service-name is mandatory." "$LINENO" 5 fi if test -f "/etc/pam.d/$pam_service_name"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: /etc/pam.d/$pam_service_name doesn't exist. Sure?" >&5 $as_echo "$as_me: WARNING: /etc/pam.d/$pam_service_name doesn't exist. Sure?" >&2;} fi # Check whether --enable-pam_check_account_type was given. if test "${enable_pam_check_account_type+set}" = set; then : enableval=$enable_pam_check_account_type; enable_pam_check_account_type=$enableval else enable_pam_check_account_type=no fi fi # Check whether --with-default_auth_module was given. if test "${with_default_auth_module+set}" = set; then : withval=$with_default_auth_module; auth_executable=$withval else auth_executable=auth_x11 fi { $as_echo "$as_me:${as_lineno-$LINENO}: Configured default auth module: $auth_executable" >&5 $as_echo "$as_me: Configured default auth module: $auth_executable" >&6;} # Check whether --with-default_authproto_module was given. if test "${with_default_authproto_module+set}" = set; then : withval=$with_default_authproto_module; authproto_executable=$withval else authproto_executable= if test x$have_htpasswd = xtrue; then : authproto_executable=authproto_htpasswd fi if test x$have_pamtester = xtrue; then : authproto_executable=authproto_pamtester fi if test x$have_pam = xtrue; then : authproto_executable=authproto_pam fi if test -z "$authproto_executable"; then : as_fn_error $? "No authproto executable found." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: Configured default authproto module: $authproto_executable" >&5 $as_echo "$as_me: Configured default authproto module: $authproto_executable" >&6;} # Check whether --with-default_global_saver_module was given. if test "${with_default_global_saver_module+set}" = set; then : withval=$with_default_global_saver_module; global_saver_executable=$withval else global_saver_executable=saver_multiplex fi { $as_echo "$as_me:${as_lineno-$LINENO}: Configured default global saver module: $global_saver_executable" >&5 $as_echo "$as_me: Configured default global saver module: $global_saver_executable" >&6;} # Check whether --with-default_saver_module was given. if test "${with_default_saver_module+set}" = set; then : withval=$with_default_saver_module; saver_executable=$withval else saver_executable=saver_blank fi { $as_echo "$as_me:${as_lineno-$LINENO}: Configured default saver module: $saver_executable" >&5 $as_echo "$as_me: Configured default saver module: $saver_executable" >&6;} if test x$enable_pam_check_account_type = xyes; then PAM_CHECK_ACCOUNT_TYPE_TRUE= PAM_CHECK_ACCOUNT_TYPE_FALSE='#' else PAM_CHECK_ACCOUNT_TYPE_TRUE='#' PAM_CHECK_ACCOUNT_TYPE_FALSE= fi if test x$have_xss = xtrue -o x$have_xsync = xtrue; then HAVE_IDLE_TIMER_TRUE= HAVE_IDLE_TIMER_FALSE='#' else HAVE_IDLE_TIMER_TRUE='#' HAVE_IDLE_TIMER_FALSE= fi ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files helpers/authproto_htpasswd" ac_config_files="$ac_config_files helpers/authproto_pamtester" ac_config_files="$ac_config_files helpers/saver_mplayer" ac_config_files="$ac_config_files helpers/saver_mpv" ac_config_files="$ac_config_files helpers/saver_xscreensaver" # Generate documentation. for ac_prog in doxygen do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DOXYGEN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DOXYGEN"; then ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DOXYGEN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DOXYGEN=$ac_cv_prog_DOXYGEN if test -n "$DOXYGEN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 $as_echo "$DOXYGEN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DOXYGEN" && break done if test -z "$DOXYGEN"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Doxygen not found. Who needs documentation anyway." >&5 $as_echo "$as_me: WARNING: Doxygen not found. Who needs documentation anyway." >&2;} fi if test -n "$DOXYGEN"; then HAVE_DOXYGEN_TRUE= HAVE_DOXYGEN_FALSE='#' else HAVE_DOXYGEN_TRUE='#' HAVE_DOXYGEN_FALSE= fi ac_config_files="$ac_config_files Doxyfile" # End of documentation. cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DPMS_EXT_TRUE}" && test -z "${HAVE_DPMS_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_DPMS_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XSCREENSAVER_EXT_TRUE}" && test -z "${HAVE_XSCREENSAVER_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XSCREENSAVER_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XSYNC_EXT_TRUE}" && test -z "${HAVE_XSYNC_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XSYNC_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XCOMPOSITE_EXT_TRUE}" && test -z "${HAVE_XCOMPOSITE_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XCOMPOSITE_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XF86MISC_EXT_TRUE}" && test -z "${HAVE_XF86MISC_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XF86MISC_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PAM_TRUE}" && test -z "${HAVE_PAM_FALSE}"; then as_fn_error $? "conditional \"HAVE_PAM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBBSD_TRUE}" && test -z "${HAVE_LIBBSD_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XFT_EXT_TRUE}" && test -z "${HAVE_XFT_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XFT_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XKB_EXT_TRUE}" && test -z "${HAVE_XKB_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XKB_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XRANDR_EXT_TRUE}" && test -z "${HAVE_XRANDR_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XRANDR_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XFIXES_EXT_TRUE}" && test -z "${HAVE_XFIXES_EXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XFIXES_EXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_HTPASSWD_TRUE}" && test -z "${HAVE_HTPASSWD_FALSE}"; then as_fn_error $? "conditional \"HAVE_HTPASSWD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MPLAYER_TRUE}" && test -z "${HAVE_MPLAYER_FALSE}"; then as_fn_error $? "conditional \"HAVE_MPLAYER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MPV_TRUE}" && test -z "${HAVE_MPV_FALSE}"; then as_fn_error $? "conditional \"HAVE_MPV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PAMTESTER_TRUE}" && test -z "${HAVE_PAMTESTER_FALSE}"; then as_fn_error $? "conditional \"HAVE_PAMTESTER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PANDOC_TRUE}" && test -z "${HAVE_PANDOC_FALSE}"; then as_fn_error $? "conditional \"HAVE_PANDOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XSCREENSAVER_TRUE}" && test -z "${HAVE_XSCREENSAVER_FALSE}"; then as_fn_error $? "conditional \"HAVE_XSCREENSAVER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PAM_CHECK_ACCOUNT_TYPE_TRUE}" && test -z "${PAM_CHECK_ACCOUNT_TYPE_FALSE}"; then as_fn_error $? "conditional \"PAM_CHECK_ACCOUNT_TYPE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_IDLE_TIMER_TRUE}" && test -z "${HAVE_IDLE_TIMER_FALSE}"; then as_fn_error $? "conditional \"HAVE_IDLE_TIMER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DOXYGEN_TRUE}" && test -z "${HAVE_DOXYGEN_FALSE}"; then as_fn_error $? "conditional \"HAVE_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by xsecurelock $as_me 1.5.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ xsecurelock config.status 1.5.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "helpers/authproto_htpasswd") CONFIG_FILES="$CONFIG_FILES helpers/authproto_htpasswd" ;; "helpers/authproto_pamtester") CONFIG_FILES="$CONFIG_FILES helpers/authproto_pamtester" ;; "helpers/saver_mplayer") CONFIG_FILES="$CONFIG_FILES helpers/saver_mplayer" ;; "helpers/saver_mpv") CONFIG_FILES="$CONFIG_FILES helpers/saver_mpv" ;; "helpers/saver_xscreensaver") CONFIG_FILES="$CONFIG_FILES helpers/saver_xscreensaver" ;; "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "helpers/authproto_htpasswd":F) chmod +x helpers/authproto_htpasswd ;; "helpers/authproto_pamtester":F) chmod +x helpers/authproto_pamtester ;; "helpers/saver_mplayer":F) chmod +x helpers/saver_mplayer ;; "helpers/saver_mpv":F) chmod +x helpers/saver_mpv ;; "helpers/saver_xscreensaver":F) chmod +x helpers/saver_xscreensaver ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi xsecurelock-1.5.1/README.md0000644061501702575230000007226613534462643012316 00000000000000# About XSecureLock XSecureLock is an X11 screen lock utility designed with the primary goal of security. Screen lock utilities are widespread. However, in the past they often had security issues regarding authentication bypass (a crashing screen locker would unlock the screen), information disclosure (notifications may appear on top of the screen saver), or sometimes even worse. In XSecureLock, security is achieved using a modular design to avoid the usual pitfalls of screen locking utility design on X11. Details are available in the [Security Design](#security-design) section. # Requirements The following packages need to be installed; their names depend on your Linux distribution of choice, but will be similar: * apache2-utils (for the `auth_htpasswd` module) * autotools-dev * binutils * gcc * libc6-dev * libpam-dev (for the `authproto_pam` module) * libx11-dev * libxcomposite-dev * libxext-dev * libxfixes-dev * libxft-dev * libxmuu-dev * libxrandr-dev * libxss-dev * make * mplayer (for the `saver_mplayer` module) * mpv (for the `saver_mpv` module) * pamtester (for the `authproto_pamtester` module) * pkg-config * x11proto-core-dev * xscreensaver (for the `saver_xscreensaver` module) # Installation NOTE: In these instructions, please replace SERVICE-NAME by the name of an appropriate and existing file in `/etc/pam.d`. If xscreensaver is installed, `xscreensaver` should always be a good choice; otherwise, on Debian and Ubuntu, `common-auth` would work. This will be used as default and can be overridden with [`XSECURELOCK_PAM_SERVICE`](#options). Configuring a broken or missing SERVICE-NAME will render unlocking the screen impossible! If this should happen to you, switch to another terminal (`Ctrl-Alt-F1`), log in there, and run: `killall xsecurelock` to force unlocking of the screen. ``` git clone https://github.com/google/xsecurelock.git cd xsecurelock sh autogen.sh ./configure --with-pam-service-name=SERVICE-NAME make sudo make install ``` ## Special notes for FreeBSD and NetBSD First of all, on BSD systems, `/usr/local` is owned by the ports system, so unless you are creating a port, it is recommended to install to a separate location by specifying something like `--prefix=/opt/xsecurelock` in the `./configure` call. You can then run XSecureLock as `/opt/xsecurelock/bin/xsecurelock`. Also, in order to authenticate with PAM on FreeBSD and NetBSD, you must be root so you can read the shadow password database. The `authproto_pam` binary can be made to acquire these required privileges like this: ``` chmod +s /opt/xsecurelock/libexec/xsecurelock/authproto_pam ``` ## Special notes for OpenBSD First of all, on BSD systems, `/usr/local` is owned by the ports system, so unless you are creating a port, it is recommended to install to a separate location by specifying something like `--prefix=/opt/xsecurelock` in the `./configure` call. You can then run XSecureLock as `/opt/xsecurelock/bin/xsecurelock`. Also, in order to authenticate with PAM on OpenBSD, you must be in the `auth` group so you can run a setuid helper called `login_passwd` that can read the shadow password database. The `authproto_pam` binary can be made to acquire these required privileges like this: ``` chgrp auth /opt/xsecurelock/libexec/xsecurelock/authproto_pam chmod g+s /opt/xsecurelock/libexec/xsecurelock/authproto_pam ``` Note that this adds substantially less attack surface than adding your own user to the `auth` group, as the `login_passwd` binary can try out passwords of any user, while `authproto_pam` is restricted to trying your own user. # Setup Pick one of the [authentication modules](#authentication-modules) and one of the [screen saver modules](#screen-saver-modules). Tell your desktop environment to run XSecureLock by using a command line such as one of the following: ``` xsecurelock env XSECURELOCK_SAVER=saver_xscreensaver xsecurelock env XSECURELOCK_SAVER=saver_mplayer XSECURELOCK_DISCARD_FIRST_KEYPRESS=0 xsecurelock env XSECURELOCK_FONT=`xlsfonts | grep '\' | shuf | head -n 1` xsecurelock ``` Just kidding about the last one :) IMPORTANT: Make sure your desktop environment does not launch any other locker, be it via autostart file or its own configuration, as multiple screen lockers may interfere with each other. You have been warned! # Automatic Locking To automatically lock the screen after some time of inactivity, use [xss-lock](https://bitbucket.org/raymonad/xss-lock) as follows: ``` xset s 300 5 xss-lock -n /usr/lib/xsecurelock/dimmer -l -- xsecurelock ``` The option `-l` is critical as it makes sure not to allow machine suspend before the screen saver is active - otherwise previous screen content may show up for a short time after wakeup! NOTE: When using `xss-lock`, it's recommended to not launch `xsecurelock` directly for manual locking, but to manually lock using `xset s activate`. This ensures that `xss-lock` knows about the locking state and won't try again, which would spam the X11 error log. WARNING: Never rely on automatic locking for security, for the following reasons: - An attacker can, of course, use your computer after you leave it alone and before it locks or you return. - Automatic locking is unreliable by design - for example, it could simply be misconfigured, or a pointer grab (due to open context menu) could prevent the screen lock from ever activating. Media players also often suspend screen saver activation for usability reasons. Automatic locking should merely be seen as a fallback for the case of the user forgetting to lock explicitly, and not as a security feature. If you really want to use this as a security feature, make sure to kill the session whenever attempts to lock fail (in which case `xsecurelock` will return a non-zero exit status). ## Alternatives ### xautolock `xautolock` can be used instead of `xss-lock` as long as you do not care for suspend events (like on laptops): ``` xautolock -time 10 -notify 5 -notifier '/usr/lib/xsecurelock/until_nonidle /usr/lib/xsecurelock/dimmer' -locker xsecurelock ``` ### Possible other tools Ideally, an environment integrating `xsecurelock` should provide the following facilities: 1. Wait for one of the following events: 1. When idle for a sufficient amount of time: 1. Run `dimmer`. 2. When no longer idle while dimmed, kill `dimmer` and go back to the start. 3. When `dimmer` exits, run `xsecurelock` and wait for it. 2. When locking was requested, run `xsecurelock` and wait for it. 3. When suspending, run `xsecurelock` while passing along `XSS_SLEEP_LOCK_FD` and wait for it. 2. Repeat. This is, of course precisely what `xss-lock` does, and - apart from the suspend handling - what `xautolock` does. As an alternative, we also support this way of integrating: 1. Wait for one of the following events: 1. When idle for a sufficient amount of time: 1. Run `until_nonidle dimmer || exec xsecurelock` and wait for it. 2. Reset your idle timer (optional when your idle timer is either the X11 Screen Saver extension's idle timer or the X Synchronization extension's `"IDLETIME"` timer, as this command can never exit without those being reset). 2. When locking was requested, run `xsecurelock` and wait for it. 3. When suspending, run `xsecurelock` while passing along `XSS_SLEEP_LOCK_FD` and wait for it. 2. Repeat. NOTE: When using `until_nonidle` with other dimming tools than the included `dimmer`, please set `XSECURELOCK_DIM_TIME_MS` and `XSECURELOCK_WAIT_TIME_MS` to match the time your dimming tool takes for dimming, and how long you want to wait in dimmed state before locking. # Options Options to XSecureLock can be passed by environment variables: * `XSECURELOCK_AUTH`: specifies the desired authentication module (the part that displays the authentication prompt). * `XSECURELOCK_AUTHPROTO`: specifies the desired authentication protocol module (the part that talks to the system). * `XSECURELOCK_AUTH_BACKGROUND_COLOR`: specifies the X11 color (see manpage of XParseColor) for the background of the auth dialog. * `XSECURELOCK_AUTH_SOUNDS`: specifies whether to play sounds during authentication to indicate status. Sounds are defined as follows: * High-pitch ascending: prompt for user input. * High-pitch constant: an info message was displayed. * Low-pitch descending: an error message was displayed. * Medium-pitch ascending: authentication successful. * `XSECURELOCK_AUTH_FOREGROUND_COLOR`: specifies the X11 color (see manpage of XParseColor) for the foreground text of the auth dialog. * `XSECURELOCK_AUTH_TIMEOUT`: specifies the time (in seconds) to wait for response to a prompt by `auth_x11` before giving up and reverting to the screen saver. * `XSECURELOCK_AUTH_WARNING_COLOR`: specifies the X11 color (see manpage of XParseColor) for the warning text of the auth dialog. * `XSECURELOCK_BLANK_TIMEOUT`: specifies the time (in seconds) before telling X11 to fully blank the screen; a negative value disables X11 blanking. The time is measured since the closing of the auth window or xsecurelock startup. Setting this to 0 is rather nonsensical, as key-release events (e.g. from the keystroke to launch xsecurelock or from pressing escape to close the auth dialog) always wake up the screen. * `XSECURELOCK_BLANK_DPMS_STATE`: specifies which DPMS state to put the screen in when blanking (one of standby, suspend, off and on, where "on" means to not invoke DPMS at all). * `XSECURELOCK_BURNIN_MITIGATION`: specifies the number of pixels the prompt of `auth_x11` may be moved at startup to mitigate possible burn-in effects due to the auth dialog being displayed all the time (e.g. when spurious mouse events wake up the screen all the time). * `XSECURELOCK_BURNIN_MITIGATION_DYNAMIC`: if set to a non-zero value, `auth_x11` will move the prompt while it is being displayed, but stay within the bounds of `XSECURELOCK_BURNIN_MITIGATION`. The value of this variable is the maximum allowed shift per screen refresh. This mitigates short-term burn-in effects but is probably annoying to most users, and thus disabled by default. * `XSECURELOCK_COMPOSITE_OBSCURER`: create a second full-screen window to obscure window content in case a running compositor unmaps its own window. Helps with some instances of bad compositor behavior (such as compositor crashes/restarts, but also compton has been caught at drawing notification icons above the screen locker when not using the GLX backend), should prevent compositors from unredirecting as it's 1 pixel smaller than the screen from every side, and should otherwise be harmless, so it's enabled by default. * `XSECURELOCK_DATETIME_FORMAT`: the date format to show. Defaults to the locale settings. * `XSECURELOCK_DEBUG_ALLOW_LOCKING_IF_INEFFECTIVE`: Normally we don't allow locking sessions that are likely not any useful to lock, such as the X11 part of a Wayland session (one could still use Wayland applicatione when locked) or VNC sessions (as it'd only lock the server side session while users will likely think they locked the client, allowing for an easy escape). These checks can be bypassed by setting this variable to 1. Not recommended other than for debugging XSecureLock itself via such connections. * `XSECURELOCK_DEBUG_WINDOW_INFO`: When complaining about another window misbehaving, print not just the window ID but also some info about it. Uses the `xwininfo` and `xprop` tools. * `XSECURELOCK_DIM_ALPHA`: Linear-space opacity to fade the screen to. * `XSECURELOCK_DIM_COLOR`: X11 color to fade the screen to. * `XSECURELOCK_DIM_FPS`: Target framerate to attain during the dimming effect of `dimmer`. Ideally matches the display refresh rate. * `XSECURELOCK_DIM_OVERRIDE_COMPOSITOR_DETECTION`: When set to 1, always try to use transparency for dimming; when set to 0, always use a dither pattern. Default is to autodetect whether transparency will likely work. * `XSECURELOCK_DIM_TIME_MS`: Milliseconds to dim for when above xss-lock command line with `dimmer` is used; also used by `wait_nonidle` to know when to assume dimming and waiting has finished and exit. * `XSECURELOCK_DISCARD_FIRST_KEYPRESS`: If set to 0, the key pressed to stop the screen saver and spawn the auth child is sent to the auth child (and thus becomes part of the password entry). By default we always discard the key press that started the authentication flow, to prevent users from getting used to type their password on a blank screen (which could be just powered off and have a chat client behind or similar). * `XSECURELOCK_FONT`: X11 or FontConfig font name to use for `auth_x11`. You can get a list of supported font names by running `xlsfonts` and `fc-list`. * `XSECURELOCK_FORCE_GRAB`: When grabbing fails, try stealing the grab from other windows (a value of `2` steals from all descendants of the root window, while a value of `1` only steals from client windows). This works only sometimes and is incompatible with many window managers, so use with care. See the "Forcing Grabs" section below for details. * `XSECURELOCK_GLOBAL_SAVER`: specifies the desired global screen saver module (by default this is a multiplexer that runs `XSECURELOCK_SAVER` on each screen). * `XSECURELOCK_IDLE_TIMERS`: comma-separated list of idle time counters used by `until_nonidle`. Typical values are either empty (relies on the X Screen Saver extension instead), "IDLETIME" and "DEVICEIDLETIME " where n is an XInput device index (run `xinput` to see them). If multiple time counters are specified, the idle time is the minimum of them all. All listed timers must have the same unit. * `XSECURELOCK_IMAGE_DURATION_SECONDS`: how long to show each still image played by `saver_mpv`. Defaults to 1. * `XSECURELOCK_KEY_%s_COMMAND` where `%s` is the name of an X11 keysym (find using `xev`): a shell command to execute when the specified key is pressed. Useful e.g. for media player control. Beware: be cautiuous about what you run with this, as it may yield attackers control over your computer. * `XSECURELOCK_LIST_VIDEOS_COMMAND`: shell command to list all video files to potentially play by `saver_mpv` or `saver_mplayer`. Defaults to `find ~/Videos -type f`. * `XSECURELOCK_NO_COMPOSITE`: disables covering the composite overlay window. This switches to a more traditional way of locking, but may allow desktop notifications to be visible on top of the screen lock. Not recommended. * `XSECURELOCK_NO_PAM_RHOST`: do not set `PAM_RHOST` to `localhost`, despite [recommendation](http://www.linux-pam.org/Linux-PAM-html/adg-security-user-identity.html) to do so by the Linux-PAM Application Developers' Guide. This may work around bugs in third-party PAM authentication modules. If this solves a problem for you, please report a bug against said PAM module. * `XSECURELOCK_NO_XRANDR`: disables multi monitor support using XRandR. * `XSECURELOCK_NO_XRANDR15`: disables multi monitor support using XRandR 1.5 and fall back to XRandR 1.2. Not recommended. * `XSECURELOCK_PAM_SERVICE`: pam service name. You should have a file with that name in `/etc/pam.d`. * `XSECURELOCK_PASSWORD_PROMPT`: Choose password prompt mode: * `asterisks`: shows asterisks, like classic password prompts. This is the least secure option because password length is visible. ***_ *******_ * `cursor`: shows a cursor that jumps around on each key press. This is the default. ________|_______________________ ___________________|____________ * `disco`: shows dancers, which dance around on each key press. Requires a font that can handle Unicode line drawing characters, and FontConfig. ┏(・o・)┛ ♪ ┗(・o・)┓ ♪ ┏(・o・)┛ ♪ ┗(・o・)┓ ♪ ┏(・o・)┛ ┗(・o・)┓ ♪ ┏(・o・)┛ ♪ ┏(・o・)┛ ♪ ┏(・o・)┛ ♪ ┏(・o・)┛ * `emoji`: shows an emoji, changing which one on each key press. Requires a font that can handle emoji, and FontConfig. 👍 🎶 💕 * `emoticon`: shows an ascii emoticon, changing which one on each key press. :-O d-X X-\ * `hidden`: completely hides the password, and there's no feedback for keypresses. This would almost be most secure - however as it gives no feedback to input whatsoever, you may not be able to notice accidentally typing to another computer and sending your password to some chatroom. ``` ``` * `kaomoji`: shows a kaomoji (Japanese emoticon), changing which one on each key press. Requires a Japanese font, and FontConfig. (͡°͜ʖ͡°) (^u^) ¯\_(ツ)_/¯ * `time`: shows the current time since the epoch on each keystroke. This may be the most secure mode, as it gives feedback to keystroke based exclusively on public information, and does not carry over any state between keystrokes whatsoever - not even some form of randomness. 1559655410.922329 * `time_hex`: same as `time`, but in microseconds and hexadecimal. "Because we can". 0x58a7f92bd7359 * `XSECURELOCK_SAVER`: specifies the desired screen saver module. * `XSECURELOCK_SAVER_RESET_ON_AUTH_CLOSE`: specifies whether to reset the saver module when the auth dialog closes. Resetting is done by sending `SIGUSR1` to the saver, which may either just terminate, or handle this specifically to do a cheaper reset. * `XSECURELOCK_SHOW_DATETIME`: whether to show local date and time on the login. Disabled by default. * `XSECURELOCK_SHOW_HOSTNAME`: whether to show the hostname on the login screen of `auth_x11`. Possible values are 0 for not showing the hostname, 1 for showing the short form, and 2 for showing the long form. * `XSECURELOCK_SHOW_USERNAME`: whether to show the username on the login screen of `auth_x11`. * `XSECURELOCK_SINGLE_AUTH_WINDOW`: whether to show only a single auth window from `auth_x11`, as opposed to one per screen. * `XSECURELOCK_SWITCH_USER_COMMAND`: shell command to execute when `Win-O` or `Ctrl-Alt-O` are pressed (think "_other_ user"). Typical values could be `lxdm -c USER_SWITCH`, `dm-tool switch-to-greeter`, `gdmflexiserver` or `kdmctl reserve`, depending on your desktop environment. * `XSECURELOCK_WAIT_TIME_MS`: Milliseconds to wait after dimming (and before locking) when above xss-lock command line is used. Should be at least as large as the period time set using "xset s". Also used by `wait_nonidle` to know when to assume dimming and waiting has finished and exit. * `XSECURELOCK_XSCREENSAVER_PATH`: Location where XScreenSaver hacks are installed for use by `saver_xscreensaver`. * `XSECURELOCK_XSCREENSAVER_PATH`: Location where XScreenSaver hacks are installed for use by `saver_xscreensaver`. Additionally, command line arguments following a "--" argument will be executed via `execvp` once locking is successful; this can be used to notify a calling process of successful locking. # Authentication Modules The following authentication modules are included: * `auth_x11`: Authenticates via an authproto module using keyboard input (X11 based; recommended). ## Writing Your Own Module The authentication module is a separate executable, whose name must start with `auth_` and be installed together with the included `auth_` modules (default location: `/usr/local/libexec/xsecurelock/helpers`). * Input: it may receive keystroke input from standard input in a locale-dependent multibyte encoding (usually UTF-8). Use the `mb*` C functions to act on these. * Output: it may draw on or create windows below `$XSCREENSAVER_WINDOW`. * Exit status: if authentication was successful, it must return with status zero. If it returns with any other status (including e.g. a segfault), XSecureLock assumes failed authentication. * It is recommended that it shall spawn the configured authentication protocol module and let it do the actual authentication; that way the authentication module can focus on the user interface alone. # Authentication Protocol Modules The following authentication protocol ("authproto") modules are included: * `authproto_htpasswd`: Authenticates via a htpasswd style file stored in `~/.xsecurelock.pw`. To generate this file, run: `( umask 077; htpasswd -cB ~/.xsecurelock.pw "$USER" )` Use this only if you for some reason can't use PAM! * `authproto_pam`: Authenticates via PAM. Use this. * `authproto_pamtester`: Authenticates via PAM using pamtester. Shouldn't be required unless you can't compile `authproto_pam`. Only supports simple password based conversations. ## Writing Your Own Module The authentication protocol module is a separate executable, whose name must start with `authproto_` and be installed together with the included `authproto_` modules (default location: `/usr/local/libexec/xsecurelock/helpers`). * Input: in response to some output messages, it may receive authproto messages. See helpers/authproto.h for details. * Output: it should output authproto messages; see helpers/authproto.h for details. * Exit status: if authentication was successful, it must return with status zero. If it returns with any other status (including e.g. a segfault), XSecureLock assumes failed authentication. # Screen Saver Modules The following screen saver modules are included: * `saver_blank`: Simply blanks the screen. * `saver_mplayer` and `saver_mpv`: Plays a video using mplayer or mpv, respectively. The video to play is selected at random among all files in `~/Videos`. * `saver_multiplex`: Watches the display configuration and runs another screen saver module once on each screen; used internally. * `saver_xscreensaver`: Runs an XScreenSaver hack from an existing XScreenSaver setup. NOTE: some screen savers included by this may display arbitrary pictures from your home directory; if you care about this, either run `xscreensaver-demo` and disable screen savers that may do this, or stay away from this one! ## Writing Your Own Module The screen saver module is a separate executable, whose name must start with `saver_` and be installed together with the included `auth_` modules (default location: `/usr/local/libexec/xsecurelock/helpers`). * Input: none. * Output: it may draw on or create windows below `$XSCREENSAVER_WINDOW`. * Exit condition: the saver child will receive SIGTERM when the user wishes to unlock the screen. It should exit promptly. * Reset condition: the saver child will receive SIGUSR1 when the auth dialog is closed and `XSECURELOCK_SAVER_RESET_ON_AUTH_CLOSE`. # Security Design In order to achieve maximum possible security against screen lock bypass exploits, the following measures are taken: * Authentication dialog, authentication checking and screen saving are done using separate processes. Therefore a crash of these processes will not unlock the screen, which means that these processes are allowed to do "possibly dangerous" things. * This also means that on operating systems where authentication checking requires special privileges (such as FreeBSD), only that module can be set to run at elevated privileges, unlike most other screen lockers which in this scenario also run graphical user interface code as root. * The main process is kept minimal and only uses C, POSIX and X11 APIs. This limits the possible influence from bugs in external libraries, and allows for easy auditing. * The main process regularly refreshes the screen grabs in case they get lost for whatever reason. * The main process regularly brings its window to the front, to avoid leaking information from notification messages that are OverrideRedirect. * The main process resizes its window to the size of the root window, should the root window size change, to avoid leaking information by attaching a secondary display. * The main processes uses only a single buffer - to hold a single keystroke. Therefore it is impossible to exploit a buffer overrun in the main process by e.g. an overlong password entry. * The only exit conditions of the program is the Authentication Module returning with exit status zero, on which xsecurelock itself will return with status zero; therefore especially security-conscious users might want to run it as `sh -c "xsecurelock ... || kill -9 -1"` :) # Known Security Issues * Locking the screen will fail while other applications already have a keyboard or pointer grab open (for example while running a fullscreen game, or after opening a context menu). This will be noticeable as the screen will not turn black and should thus usually not be an issue - however when relying on automatic locking via `xss-lock`, this could leave a workstation open for days. Above `... || kill -9 -1` workaround would mitigate this issue too by simply killing the entire session if locking it fails. * As XSecureLock relies on an event notification after a screen configuration change, window content may be visible for a short time after attaching a monitor. No usual interaction with applications should be possible though. On desktop systems where monitors are usually not hotplugged, I'd recommend [turning off automatic screen reconfiguration](http://tech.draiser.net/2015/07/14/ignoring-hotplug-monitor-events-on-arch-linux/). * XSecureLock relies on a keyboard and pointer grab in order to prevent other applications from receiving keyboard events (and thus an unauthorized user from controlling the machine). However, there are various other ways for applications - in particular games - to receive input: * Polling current keyboard status (`XQueryKeymap`). * Polling current mouse position (`XQueryPointer`). * Receiving input out-of-band (`/dev/input`), including other input devices than keyboard and mouse, such as gamepads or joysticks. Most these issues are inherent with X11 and can only really be fixed by migrating to an alternative such as Wayland; some of the issues (in particular the gamepad input issue) will probably persist even with Wayland. ## Forcing Grabs As a workaround to the issue of another window already holding a grab, we offer an `XSECURELOCK_FORCE_GRAB` option. This adds a last measure attempt to force grabbing by iterating through all subwindows of the root window, unmapping them (which closes down their grabs), then taking the grab and mapping them again. This has the following known issues: * Grabs owned by the root window cannot be closed down this way. However, only screen lockers and fullscreen games should be doing that. * If the grab was owned by a full screen window (e.g. a game using `OverrideRedirect` to gain fullscreen mode), the window will become unresponsive, as your actions will be interpreted by another window - which you can't see - instead. Alt-Tabbing around may often work around this. * If the grab was owned by a context menu, it may become impossible to close the menu other than by selecting an item in it. * It will also likely confuse window managers: * Probably all window managers will rearrange the windows in response to this. * Cinnamon (and probably other GNOME-derived WMs) may become unresponsive and needs to be restarted. * As a mitigation we try to hit only client windows - but then we lose the ability of closing down window manager owned grabs. * Negative side effects as described are still likely to happen in case the measure fails. # Known Compatibility Issues * There is an open issue with the NVidia graphics driver in conjunction with some compositors. Workarounds include switching to the `nouveau` graphics driver, using a compositor that uses the Composite Overlay Window (e.g. `compton` with the flag `--paint-on-overlay`) or passing `XSECURELOCK_NO_COMPOSITE=1` to XSecureLock (which however may make notifications appear on top of the screen lock). * XSecureLock is incompatible with the compositor built into `metacity` (a GNOME component) because it draws on the Compositor Overlay Window with `IncludeInferiors` set (i.e. it explicitly requests to draw on top of programs like XSecureLock). It likely does this because the same is necessary when drawing on top of the root window, which it had done in the past but no longer does. Workarounds include disabling its compositor with `gsettings set org.gnome.metacity compositing-manager false` or passing `XSECURELOCK_NO_COMPOSITE=1` to XSecureLock. # License The code is released under the Apache 2.0 license. See the LICENSE file for more details. This project is not an official Google project. It is not supported by Google and Google specifically disclaims all warranties as to its quality, merchantability, or fitness for a particular purpose. xsecurelock-1.5.1/LICENSE0000644061501702575230000002613613334563414012033 00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. xsecurelock-1.5.1/test/0000755061501702575230000000000013536475523012064 500000000000000xsecurelock-1.5.1/test/test-xrandr.xdo0000644061501702575230000000216613334563414014771 00000000000000#preexec export XSECURELOCK_NO_COMPOSITE=1 sleep 1 # Assert that xsecurelock is running. exec --sync /bin/sh -c 'ps $XSECURELOCK_PID' # Assert that we're at 640x480. exec --sync /bin/sh -c 'xwininfo -root | tee /dev/stderr | grep "^ -geometry 640x480+0+0\$"' # Pause xsecurelock. exec --sync /bin/sh -c 'kill -STOP $XSECURELOCK_PID' # Switch to 800x600. exec --sync /bin/sh -c 'xrandr -s 800x600' # Assert that we're now at 800x600. exec --sync /bin/sh -c 'xwininfo -root | tee /dev/stderr | grep "^ -geometry 800x600+0+0\$"' # Assert that the screen is not black yet (we couldn't resize our window yet). exec --sync /bin/sh -c 'import -window root GRAY:- | tr -d "\0" | wc -c | tee /dev/stderr | grep -v "^0\$"' # Resume xsecurelock. exec --sync /bin/sh -c 'kill -CONT $XSECURELOCK_PID' sleep 1 # Assert that the screen is now all black. exec --sync /bin/sh -c 'import -window root GRAY:- | tr -d "\0" | wc -c | tee /dev/stderr | grep "^0\$"' # Enter the password to close xsecurelock. search --maxdepth 0 '' type ' hunter2 ' sleep 2 # Assert that xsecurelock is no longer running. exec --sync /bin/sh -c '! ps $XSECURELOCK_PID' xsecurelock-1.5.1/test/test-want-first-keypress-no.xdo0000644061501702575230000000077113334563414020046 00000000000000#preexec export XSECURELOCK_WANT_FIRST_KEYPRESS=0 # Assert that xsecurelock is running. exec --sync /bin/sh -c 'ps $XSECURELOCK_PID' # Just enter the password. search --maxdepth 0 '' type 'hunter2 ' sleep 2 # Assert that xsecurelock is still running. exec --sync /bin/sh -c 'ps $XSECURELOCK_PID' # Enter the password again, but press a key first this time. search --maxdepth 0 '' type 'xhunter2 ' sleep 2 # Assert that xsecurelock is no longer running. exec --sync /bin/sh -c '! ps $XSECURELOCK_PID' xsecurelock-1.5.1/test/test-correct-password.xdo0000644061501702575230000000122113334563414016763 00000000000000#preexec export XSECURELOCK_NO_COMPOSITE=1 # Assert that xsecurelock is running, and saving the screen. search --name background search --name saver sleep 1 search --name saver_multiplex_screen # Press a key. search --maxdepth 0 '' type ' ' sleep 2 # Assert that xsecurelock is running but no longer saving the screen. search --name background search --name saver exec --sync /bin/sh -c '! xdotool search --name saver_multiplex_screen exec --sync xwininfo -root -tree' # Enter the password. search --maxdepth 0 '' type 'hunter2 ' sleep 2 # Assert that xsecurelock is now gone. exec --sync /bin/sh -c '! xdotool search --name background exec echo fail' xsecurelock-1.5.1/test/run-test.sh0000644061501702575230000000137613334563414014121 00000000000000#!/bin/sh set -e # Set up an isolated homedir with a fixed password. homedir=$(mktemp -d -t xsecurelock-run-test.XXXXXX) trap 'rm -rf "$homedir"' EXIT htpasswd -bc "$homedir/.xsecurelock.pw" "$USER" hunter2 # Run preparatory commands. eval "$(grep '^#preexec ' "$1" | cut -d ' ' -f 2-)" # Lock the screen - and wait for the lock to succeed. mkfifo "$homedir"/lock.notify HOME="$homedir" XSECURELOCK_AUTH=auth_htpasswd XSECURELOCK_SAVER=saver_blank \ xsecurelock -- cat "$homedir"/lock.notify & pid=$! echo "Waiting for lock..." : > "$homedir"/lock.notify echo "Locked." # Run the test script. set +e XSECURELOCK_PID=$pid xdotool - < "$1" result=$? set -e # Kill the lock, if remaining. kill "$pid" || true # Finish the test. echo "Test $1 status: $result." xsecurelock-1.5.1/test/test-wrong-password.xdo0000644061501702575230000000156413334563414016470 00000000000000#preexec export XSECURELOCK_NO_COMPOSITE=1 # Assert that xsecurelock is running, and saving the screen. search --name background search --name saver sleep 1 search --name saver_multiplex_screen # Press a key. search --maxdepth 0 '' type ' ' sleep 2 # Assert that xsecurelock is running but no longer saving the screen. search --name background search --name saver exec --sync /bin/sh -c '! xdotool search --name saver_multiplex_screen exec --sync xwininfo -root -tree' # Enter the password. search --maxdepth 0 '' type '******* ' sleep 2 # Assert that xsecurelock is saving the screen again. search --name saver_multiplex_screen # Press a key. search --maxdepth 0 '' type ' ' sleep 2 # Enter the password for real. search --maxdepth 0 '' type 'hunter2 ' sleep 2 # Assert that xsecurelock is now gone. exec --sync /bin/sh -c '! xdotool search --name background exec echo fail' xsecurelock-1.5.1/test/test-want-first-keypress-yes.xdo0000644061501702575230000000103113334563414020220 00000000000000#preexec export XSECURELOCK_WANT_FIRST_KEYPRESS=1 # Assert that xsecurelock is running. exec --sync /bin/sh -c 'ps $XSECURELOCK_PID' # Enter the password with an extra key at the beginning. search --maxdepth 0 '' type 'xhunter2 ' sleep 2 # Assert that xsecurelock is still running. exec --sync /bin/sh -c 'ps $XSECURELOCK_PID' # Enter the password again, but do not press a key to wake up. search --maxdepth 0 '' type 'hunter2 ' sleep 2 # Assert that xsecurelock is no longer running. exec --sync /bin/sh -c '! ps $XSECURELOCK_PID' xsecurelock-1.5.1/test/remap_all.c0000644061501702575230000000153413536473607014110 00000000000000#include // for XCloseDisplay, XGrabServer, XOpenDisplay #include // for NULL, fprintf, stderr #include "../unmap_all.h" // for ClearUnmapAllWindowsState, InitUnmapAllWin... int main(int argc, char **unused_argv) { (void)unused_argv; Display *display = XOpenDisplay(NULL); if (display == NULL) { fprintf(stderr, "Could not connect to $DISPLAY.\n"); return 1; } UnmapAllWindowsState state; XGrabServer(display); // Without argument: remap application windows; with argument: remap all // toplevel windows. InitUnmapAllWindowsState(&state, display, DefaultRootWindow(display), NULL, 0, NULL, NULL, argc > 1); UnmapAllWindows(&state, NULL, NULL); RemapAllWindows(&state); XUngrabServer(display); ClearUnmapAllWindowsState(&state); XCloseDisplay(display); return 0; } xsecurelock-1.5.1/test/run-tests.sh0000755061501702575230000000034413334563414014301 00000000000000#!/bin/sh rm -f *.log for test in *$1*.xdo; do startx \ /bin/sh "$PWD"/run-test.sh "$test" \ -- \ "$(which Xephyr)" :42 -retro -screen 640x480 \ 2>&1 |\ tee "$test.log" |\ grep "^Test $test status: " done xsecurelock-1.5.1/test/nvidia_break_compositor.c0000644061501702575230000000107113335025174017031 00000000000000#include #include #include #include #include int main() { Display *display = XOpenDisplay(NULL); if (display == NULL) { fprintf(stderr, "Could not connect to $DISPLAY.\n"); return 1; } Window w = XCompositeGetOverlayWindow(display, DefaultRootWindow(display)); if (w == None) { fprintf(stderr, "No composite overlay window received.\n"); return 1; } printf("%#llx\n", (unsigned long long)w); sleep(1); XCompositeReleaseOverlayWindow(display, w); return 0; } xsecurelock-1.5.1/test/cat_authproto.c0000644061501702575230000000044313420106751015007 00000000000000#include "../helpers/authproto.h" int main() { int eof_permitted = 0; for (;;) { char type; char *message; type = ReadPacket(0, &message, eof_permitted); if (type == 0) { return 0; } WritePacket(1, type, message); eof_permitted = !eof_permitted; } } xsecurelock-1.5.1/test/get_compositor.c0000644061501702575230000000402713335034540015173 00000000000000#include // for Window, Atom, None #include // for XGetSelectionOwner, XInternAtom #include // for XCompositeGetOverlayWindow #include // for printf, snprintf, fflush, stdout #include // for system void DumpWindow(const char *title, Window w) { printf("# %s window = %#llx\n", title, (unsigned long long)w); if (w == None) { return; } // Lots of hackery to dump all we know about this window. char buf[128]; buf[sizeof(buf) - 1] = 0; snprintf(buf, sizeof(buf) - 1, "xwininfo -all -id %#llx", (unsigned long long)w); printf("$ %s\n", buf); fflush(stdout); system(buf); snprintf(buf, sizeof(buf) - 1, "xprop -id %#llx", (unsigned long long)w); printf("$ %s\n", buf); fflush(stdout); system(buf); snprintf( buf, sizeof(buf) - 1, "ps \"$(xprop -id %#llx _NET_WM_PID | cut -d ' ' -f 3)\" 2>/dev/null", (unsigned long long)w); printf("$ %s\n", buf); fflush(stdout); system(buf); if (((unsigned long long)w) >> 16 != 0) { // Lists all other windows from the same X11 client. snprintf( buf, sizeof(buf) - 1, "xwininfo -root -tree | grep '%#llx[0-9a-f][0-9a-f][0-9a-f][0-9a-f] '", ((unsigned long long)w) >> 16); printf("$ %s\n", buf); fflush(stdout); system(buf); } } int main() { Display *display = XOpenDisplay(NULL); if (display == NULL) { fprintf(stderr, "Could not connect to $DISPLAY.\n"); return 1; } char buf[64]; snprintf(buf, sizeof(buf), "_NET_WM_CM_S%d", (int)DefaultScreen(display)); buf[sizeof(buf) - 1] = 0; Atom atom = XInternAtom(display, buf, False); DumpWindow(buf, XGetSelectionOwner(display, atom)); Window cow = XCompositeGetOverlayWindow(display, DefaultRootWindow(display)); // Instantly release to prevent black screen with compton --backend glx. XCompositeReleaseOverlayWindow(display, cow); DumpWindow("Composite overlay", cow); return 0; } xsecurelock-1.5.1/main.c0000644061501702575230000015306313536475161012123 00000000000000/* Copyright 2014 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /*! *\brief XSecureLock. * *XSecureLock is an X11 screen lock utility designed with the primary goal of *security. */ #include // for Window, None, CopyFromParent #include // for XA_CARDINAL, XA_ATOM #include // for XEvent, XMapRaised, XSelectInput #include // for XLookupString #include // for XC_arrow #include // for XK_BackSpace, XK_Tab, XK_o #include // for fcntl, FD_CLOEXEC, F_GETFD #include // for NULL, setlocale, LC_CTYPE #include // for sigaction, raise, sa_handler #include // for printf, size_t, snprintf #include // for exit, system, EXIT_FAILURE #include // for memset, strcmp, strncmp #include // for select, timeval, fd_set, FD_SET #include // for gettimeofday #include // for nanosleep, timespec #include // for _exit, chdir, close, execvp #ifdef HAVE_DPMS_EXT #include // for BOOL, CARD16 #include #include // for DPMSModeOff, DPMSModeStandby #endif #ifdef HAVE_XCOMPOSITE_EXT #include // for XCompositeGetOverlayWindow #endif #ifdef HAVE_XSCREENSAVER_EXT #include // for ScreenSaverNotify, ScreenSave... #include // for XScreenSaverQueryExtension #endif #ifdef HAVE_XF86MISC_EXT #include // for XF86MiscSetGrabKeysState #endif #ifdef HAVE_XFIXES_EXT #include // for XFixesQueryExtension, XFixesS... #include // for ShapeBounding #endif #include "auth_child.h" // for KillAuthChildSigHandler, Want... #include "env_settings.h" // for GetIntSetting, GetExecutableP... #include "logging.h" // for Log, LogErrno #include "mlock_page.h" // for MLOCK_PAGE #include "saver_child.h" // for WatchSaverChild, KillAllSaver... #include "unmap_all.h" // for ClearUnmapAllWindowsState #include "util.h" // for explicit_bzero #include "version.h" // for git_version #include "wait_pgrp.h" // for WaitPgrp #include "wm_properties.h" // for SetWMProperties /*! \brief How often (in times per second) to watch child processes. * * This defines the minimum frequency to call WatchChildren(). */ #define WATCH_CHILDREN_HZ 10 /*! \brief Try to reinstate grabs in regular intervals. * * This will reinstate the grabs WATCH_CHILDREN_HZ times per second. This * appears to be required with some XScreenSaver hacks that cause XSecureLock to * lose MotionNotify events, but nothing else. */ #undef ALWAYS_REINSTATE_GRABS /*! \brief Try to bring the grab window to foreground in regular intervals. * * Some desktop environments have transparent OverrideRedirect notifications. * These do not send a VisibilityNotify to this window, as some part still * shines through. As a workaround, this enables raising the grab window * periodically. */ #undef AUTO_RAISE /*! \brief Show cursor during auth. * * If enabled, a mouse cursor is shown whenever the auth_window is mapped. * * Note that proper use of this also would require a way to forward click * events to the auth helper, which doesn't exist yet. */ #undef SHOW_CURSOR_DURING_AUTH /*! \brief Exhaustive list of all mouse related X11 events. * * These will be selected for grab. It is important that this contains all * pointer event types, to not let any through to other applications. */ #define ALL_POINTER_EVENTS \ (ButtonPressMask | ButtonReleaseMask | EnterWindowMask | LeaveWindowMask | \ PointerMotionMask | Button1MotionMask | Button2MotionMask | \ Button3MotionMask | Button4MotionMask | Button5MotionMask | \ ButtonMotionMask) //! Private (possibly containing information about the user's password) data. // This data is locked to RAM using mlock() to avoid leakage to disk via swap. struct { // The received X event. XEvent ev; // The decoded key press. char buf[16]; KeySym keysym; // The length of the data in buf. int len; } priv; //! The name of the auth child to execute, relative to HELPER_PATH. const char *auth_executable; //! The name of the saver child to execute, relative to HELPER_PATH. const char *saver_executable; //! The command to run once screen locking is complete. char *const *notify_command = NULL; #ifdef HAVE_XCOMPOSITE_EXT //! Do not use XComposite to cover transparent notifications. int no_composite = 0; //! Create an almost-fullscreen sized "obscurer window" against bad compositors. int composite_obscurer = 0; #endif //! If set, we can start a new login session. int have_switch_user_command = 0; //! If set, we try to force grabbing by "evil" means. int force_grab = 0; //! If set, print window info about any "conflicting" windows to stderr. int debug_window_info = 0; //! If nonnegative, the time in seconds till we blank the screen explicitly. int blank_timeout = -1; //! The DPMS state to switch the screen to when blanking. const char *blank_dpms_state = "off"; //! Whether to reset the saver module when auth closes. int saver_reset_on_auth_close = 0; //! The PID of a currently running notify command, or 0 if none is running. pid_t notify_command_pid = 0; //! The time when we will blank the screen. struct timeval time_to_blank; //! Whether the screen is currently blanked by us. int blanked = 0; #ifdef HAVE_DPMS_EXT //! Whether DPMS needs to be disabled when unblanking. Set when blanking. int must_disable_dpms; #endif void ResetBlankScreenTimer(void) { if (blank_timeout < 0) { return; } gettimeofday(&time_to_blank, NULL); time_to_blank.tv_sec += blank_timeout; } void InitBlankScreen(void) { if (blank_timeout < 0) { return; } blanked = 0; ResetBlankScreenTimer(); } void MaybeBlankScreen(Display *display) { if (blank_timeout < 0 || blanked) { return; } struct timeval now; gettimeofday(&now, NULL); if (now.tv_sec < time_to_blank.tv_sec || (now.tv_sec == time_to_blank.tv_sec && now.tv_usec < time_to_blank.tv_usec)) { return; } // Blank timer expired - blank the screen. blanked = 1; #ifdef HAVE_DPMS_EXT must_disable_dpms = 0; #endif XForceScreenSaver(display, ScreenSaverActive); if (!strcmp(blank_dpms_state, "on")) { // Just X11 blanking. return; } #ifdef HAVE_DPMS_EXT // If we get here, we want to do DPMS blanking. int dummy; if (!DPMSQueryExtension(display, &dummy, &dummy)) { Log("DPMS is unavailable and XSECURELOCK_BLANK_DPMS_STATE not on"); return; } CARD16 state; BOOL onoff; DPMSInfo(display, &state, &onoff); if (!onoff) { // DPMS not active by user - so we gotta force it. must_disable_dpms = 1; DPMSEnable(display); } if (!strcmp(blank_dpms_state, "standby")) { DPMSForceLevel(display, DPMSModeStandby); } else if (!strcmp(blank_dpms_state, "suspend")) { DPMSForceLevel(display, DPMSModeSuspend); } else if (!strcmp(blank_dpms_state, "off")) { DPMSForceLevel(display, DPMSModeOff); } else { Log("XSECURELOCK_BLANK_DPMS_STATE not in standby/suspend/off/on"); } #else Log("DPMS is not compiled in and XSECURELOCK_BLANK_DPMS_STATE not on"); #endif } void ScreenNoLongerBlanked(Display *display) { #ifdef HAVE_DPMS_EXT if (must_disable_dpms) { DPMSDisable(display); } #endif blanked = 0; } void UnblankScreen(Display *display) { if (blanked) { XForceScreenSaver(display, ScreenSaverReset); ScreenNoLongerBlanked(display); } ResetBlankScreenTimer(); } static void HandleSIGTERM(int signo) { KillAllSaverChildrenSigHandler(signo); // Dirty, but quick. KillAuthChildSigHandler(signo); // More dirty. explicit_bzero(&priv, sizeof(priv)); raise(signo); } enum WatchChildrenState { //! Request saver child. WATCH_CHILDREN_NORMAL, //! Request no saver to run (DPMS!). WATCH_CHILDREN_SAVER_DISABLED, //! Request auth child. WATCH_CHILDREN_FORCE_AUTH }; /*! \brief Watch the child processes, and bring them into the desired state. * * If the requested state is WATCH_CHILDREN_NORMAL and neither auth nor saver * child are running, the saver child will be spawned. * * If the requested state is WATCH_CHILDREN_SAVER_DISABLED, a possibly running * saver child will be killed. * * If the requested state is WATCH_CHILDREN_FORCE_AUTH, a possibly running saver * child will be killed, and an auth child will be spawned. * * If the auth child was already running, the stdinbuf is sent to the auth child * on standard input. * * \param state The request to perform. * \param stdinbuf Key presses to send to the auth child, if set. * \return If true, authentication was successful and the program should exit. */ int WatchChildren(Display *dpy, Window auth_win, Window saver_win, enum WatchChildrenState state, const char *stdinbuf) { int want_auth = WantAuthChild(state == WATCH_CHILDREN_FORCE_AUTH); int auth_running = 0; // Note: want_auth is true whenever we WANT to run authentication, or it is // already running. It may have recently terminated, which we will notice // later. if (want_auth) { // Actually start the auth child, or notice termination. if (WatchAuthChild(auth_win, auth_executable, state == WATCH_CHILDREN_FORCE_AUTH, stdinbuf, &auth_running)) { // Auth performed successfully. Terminate the other children. WatchSaverChild(dpy, saver_win, 0, saver_executable, 0); // Now terminate the screen lock. return 1; } // If we wanted auth, but it's not running, auth just terminated. Unmap the // auth window and poke the screensaver so that it can reset any timeouts. if (!auth_running) { XUnmapWindow(dpy, auth_win); if (saver_reset_on_auth_close) { KillAllSaverChildrenSigHandler(SIGUSR1); } } } // Show the screen saver. WatchSaverChild(dpy, saver_win, 0, saver_executable, state != WATCH_CHILDREN_SAVER_DISABLED); if (auth_running) { // While auth is running, we never blank. UnblankScreen(dpy); } else { // If no auth is running, permit blanking as per timer. MaybeBlankScreen(dpy); } // Do not terminate the screen lock. return 0; } /*! \brief Wake up the screen saver in response to a keyboard or mouse event. * * \return If true, authentication was successful, and the program should exit. */ int WakeUp(Display *dpy, Window auth_win, Window saver_win, const char *stdinbuf) { return WatchChildren(dpy, auth_win, saver_win, WATCH_CHILDREN_FORCE_AUTH, stdinbuf); } /*! \brief An X11 error handler that merely logs errors to stderr. * * This is used to prevent X11 errors from terminating XSecureLock. */ int IgnoreErrorsHandler(Display *display, XErrorEvent *error) { char buf[128]; XGetErrorText(display, error->error_code, buf, sizeof(buf)); buf[sizeof(buf) - 1] = 0; Log("Got non-fatal X11 error: %s", buf); return 0; } /*! \brief Print a version message. */ void Version(void) { printf("XSecureLock - X11 screen lock utility designed for security.\n"); if (*git_version) { printf("Version: %s\n", git_version); } else { printf("Version unknown.\n"); } } /*! \brief Print an usage message. * * A message is shown explaining how to use XSecureLock. * * \param me The name this executable was invoked as. */ void Usage(const char *me) { Version(); printf( "\n" "Usage:\n" " env [variables...] %s [-- command to run when locked]\n" "\n" "Environment variables you may set for XSecureLock and its modules:\n" "\n" #include "env_helpstr.inc" // IWYU pragma: keep "\n" "Configured default auth module: " AUTH_EXECUTABLE "\n" "Configured default authproto module: " AUTHPROTO_EXECUTABLE "\n" "Configured default global saver module: " GLOBAL_SAVER_EXECUTABLE "\n" "Configured default per-screen saver module: " SAVER_EXECUTABLE "\n" "\n" "This software is licensed under the Apache 2.0 License. Details are\n" "available at the following location:\n" " " DOCS_PATH "/COPYING\n", me, "%s", // For XSECURELOCK_KEY_%s_COMMAND. "%s"); // For XSECURELOCK_KEY_%s_COMMAND's description. } /*! \brief Load default settings from environment variables. * * These settings override what was figured out at ./configure time. */ void LoadDefaults() { auth_executable = GetExecutablePathSetting("XSECURELOCK_AUTH", AUTH_EXECUTABLE, 1); saver_executable = GetExecutablePathSetting("XSECURELOCK_GLOBAL_SAVER", GLOBAL_SAVER_EXECUTABLE, 0); #ifdef HAVE_XCOMPOSITE_EXT no_composite = GetIntSetting("XSECURELOCK_NO_COMPOSITE", 0); composite_obscurer = GetIntSetting("XSECURELOCK_COMPOSITE_OBSCURER", 1); #endif have_switch_user_command = *GetStringSetting("XSECURELOCK_SWITCH_USER_COMMAND", ""); force_grab = GetIntSetting("XSECURELOCK_FORCE_GRAB", 0); debug_window_info = GetIntSetting("XSECURELOCK_DEBUG_WINDOW_INFO", 0); blank_timeout = GetIntSetting("XSECURELOCK_BLANK_TIMEOUT", 600); blank_dpms_state = GetStringSetting("XSECURELOCK_BLANK_DPMS_STATE", "off"); saver_reset_on_auth_close = GetIntSetting("XSECURELOCK_SAVER_RESET_ON_AUTH_CLOSE", 0); } /*! \brief Parse the command line arguments, or exit in case of failure. * * This accepts saver_* or auth_* arguments, and puts them in their respective * global variable. * * This is DEPRECATED - use the XSECURELOCK_SAVER and XSECURELOCK_AUTH * environment variables instead! * * Possible errors will be printed on stderr. */ void ParseArgumentsOrExit(int argc, char **argv) { int i; for (i = 1; i < argc; ++i) { if (!strncmp(argv[i], "auth_", 5)) { Log("Setting auth child name from command line is DEPRECATED. Use " "the XSECURELOCK_AUTH environment variable instead"); auth_executable = argv[i]; continue; } if (!strncmp(argv[i], "saver_", 6)) { Log("Setting saver child name from command line is DEPRECATED. Use " "the XSECURELOCK_SAVER environment variable instead"); saver_executable = argv[i]; continue; } if (!strcmp(argv[i], "--")) { notify_command = argv + i + 1; break; } if (!strcmp(argv[i], "--help")) { Usage(argv[0]); exit(0); } if (!strcmp(argv[i], "--version")) { Version(); exit(0); } // If we get here, the argument is unrecognized. Exit, then. Log("Unrecognized argument: %s", argv[i]); Usage(argv[0]); exit(0); } } /*! \brief Check the settings. * * This tests whether the selected auth and saver executables are valid and * actually executable. Failure of this could lead to an un-unlockable screen, * and we sure don't want that. * * Possible errors will be printed on stderr. * * \return true if everything is OK, false otherwise. */ int CheckSettings() { // Flawfinder note: the access() calls here are not security relevant and just // prevent accidentally running with a nonexisting saver or auth executable as // that could make the system un-unlockable. if (auth_executable == NULL) { Log("Auth module has not been specified in any way"); return 0; } if (saver_executable == NULL) { Log("Saver module has not been specified in any way"); return 0; } return 1; } /*! \brief Print some debug info about a window. * * Only enabled if debug_window_info is set. * * Spammy. */ void DebugDumpWindowInfo(Window w) { if (!debug_window_info) { return; } char buf[128]; // Note: process has to be backgrounded (&) because we may be within // XGrabServer. int buflen = snprintf(buf, sizeof(buf), "{ xwininfo -all -id %lu; xprop -id %lu; } >&2 &", w, w); if (buflen <= 0 || (size_t)buflen >= sizeof(buf)) { Log("Wow, pretty large integers you got there"); return; } system(buf); } /*! \brief Raise a window if necessary. * * Does not cause any events if the window is already on the top. * \param display The X11 display. * \param w The window to raise. * \param silent Whether to output something if we can't detect what is wrong. * \param force Whether to always raise our window, even if we can't find what * covers us. Set this only if confident that there is something overlapping * us, like in response to a negative VisibilityNotify. */ void MaybeRaiseWindow(Display *display, Window w, int silent, int force) { int need_raise = force; Window root, parent; Window *children, *siblings; unsigned int nchildren, nsiblings; if (XQueryTree(display, w, &root, &parent, &children, &nchildren)) { XFree(children); Window grandparent; if (!XQueryTree(display, parent, &root, &grandparent, &siblings, &nsiblings)) { Log("XQueryTree failed on the parent"); siblings = NULL; nsiblings = 0; } } else { Log("XQueryTree failed on self"); siblings = NULL; nsiblings = 0; } if (nsiblings == 0) { Log("No siblings found"); } else { if (w == siblings[nsiblings - 1]) { // But we _are_ on top...? if (force && !silent) { // We have evidence of something covering us, but cannot locate it. Log("MaybeRaiseWindow miss: something obscured my window %lu but I " "can't find it", w); } } else { // We found what's covering us. Log("MaybeRaiseWindow hit: window %lu was above my window %lu", siblings[nsiblings - 1], w); DebugDumpWindowInfo(siblings[nsiblings - 1]); need_raise = 1; } } XFree(siblings); if (need_raise) { XRaiseWindow(display, w); } } typedef struct { Display *display; Window root_window; Cursor cursor; int silent; } AcquireGrabsState; int TryAcquireGrabs(Window w, void *state_voidp) { AcquireGrabsState *state = state_voidp; int ok = 1; if (XGrabPointer(state->display, state->root_window, False, ALL_POINTER_EVENTS, GrabModeAsync, GrabModeAsync, None, state->cursor, CurrentTime) != GrabSuccess) { if (!state->silent) { Log("Critical: cannot grab pointer"); } ok = 0; } if (XGrabKeyboard(state->display, state->root_window, False, GrabModeAsync, GrabModeAsync, CurrentTime) != GrabSuccess) { if (!state->silent) { Log("Critical: cannot grab keyboard"); } ok = 0; } if (w != None) { Log("Unmapped window %lu to force grabbing, which %s", w, ok ? "succeeded" : "didn't help"); if (ok) { DebugDumpWindowInfo(w); } } return ok; } /*! \brief Acquire all necessary grabs to lock the screen. * * \param display The X11 display. * \param root_window The root window. * \param silent Do not log errors. * \param force Try extra hard (1), or even harder (2). The latter mode will * very likely interfere strongly with window managers. \return true if grabbing * succeeded, false otherwise. */ int AcquireGrabs(Display *display, Window root_window, Window *ignored_windows, unsigned int n_ignored_windows, Cursor cursor, int silent, int force) { AcquireGrabsState grab_state; grab_state.display = display; grab_state.root_window = root_window; grab_state.cursor = cursor; grab_state.silent = silent; if (!force) { // Easy case. return TryAcquireGrabs(None, &grab_state); } XGrabServer(display); // Critical section. UnmapAllWindowsState unmap_state; int ok; if (InitUnmapAllWindowsState(&unmap_state, display, root_window, ignored_windows, n_ignored_windows, "xsecurelock", NULL, force > 1)) { Log("Trying to force grabbing by unmapping all windows. BAD HACK"); ok = UnmapAllWindows(&unmap_state, TryAcquireGrabs, &grab_state); RemapAllWindows(&unmap_state); } else { Log("Found XSecureLock to be already running, not forcing"); ok = TryAcquireGrabs(None, &grab_state); } ClearUnmapAllWindowsState(&unmap_state); XUngrabServer(display); // Always flush the display after this to ensure the server is only // grabbed for as long as needed, and to make absolutely sure that // remapping did happen. XFlush(display); return ok; } /*! \brief Tell xss-lock or others that we're done locking. * * This enables xss-lock to delay going to sleep until the screen is actually * locked - useful to prevent information leaks after wakeup. * * \param fd The file descriptor of the X11 connection that we shouldn't close. */ void NotifyOfLock(int xss_sleep_lock_fd) { if (xss_sleep_lock_fd != -1) { if (close(xss_sleep_lock_fd) != 0) { LogErrno("close(XSS_SLEEP_LOCK_FD)"); } } if (notify_command != NULL && *notify_command != NULL) { pid_t pid = ForkWithoutSigHandlers(); if (pid == -1) { LogErrno("fork"); } else if (pid == 0) { // Child process. execvp(notify_command[0], notify_command); LogErrno("execvp"); _exit(EXIT_FAILURE); } else { // Parent process after successful fork. notify_command_pid = pid; } } } int CheckLockingEffectiveness() { // When this variable is set, all checks in here are still evaluated but we // try locking anyway. int error_status = 0; const char *error_string = "Will not lock"; if (GetIntSetting("XSECURELOCK_DEBUG_ALLOW_LOCKING_IF_INEFFECTIVE", 0)) { error_status = 1; error_string = "Locking anyway"; } // Do not try "locking" a Wayland session. Although everything we do appears // to work on XWayland, our grab will only affect X11 and not Wayland // clients, and therefore the lock will not be effective. If you need to get // around this check for testing, just unset the WAYLAND_DISPLAY environment // variable before starting XSecureLock. But really, this won't be secure in // any way... if (*GetStringSetting("WAYLAND_DISPLAY", "")) { Log("Wayland detected. This would only lock the X11 part of your session. " "%s", error_string); return error_status; } // Inside a VNC session, we better don't lock, as users might think it locked // their client when it actually only locked the remote. if (*GetStringSetting("VNCDESKTOP", "")) { Log("VNC detected. This would only lock your remote session. %s", error_string); return error_status; } // Inside a Chrome Remote Desktop session, we better don't lock, as users // might think it locked their client when it actually only locked the remote. if (*GetStringSetting("CHROME_REMOTE_DESKTOP_SESSION", "")) { Log("Chrome Remote Desktop detected. This would only lock your remote " "session. %s", error_string); return error_status; } return 1; } /*! \brief The main program. * * Usage: see Usage(). */ int main(int argc, char **argv) { setlocale(LC_CTYPE, ""); int xss_sleep_lock_fd = GetIntSetting("XSS_SLEEP_LOCK_FD", -1); if (xss_sleep_lock_fd != -1) { // Children processes should not inherit the sleep lock // Failures are not critical, systemd will ignore the lock // when InhibitDelayMaxSec is reached int flags = fcntl(xss_sleep_lock_fd, F_GETFD); if (flags == -1) { LogErrno("fcntl(XSS_SLEEP_LOCK_FD, F_GETFD)"); } else { flags |= FD_CLOEXEC; int status = fcntl(xss_sleep_lock_fd, F_SETFD, flags); if (status == -1) { LogErrno("fcntl(XSS_SLEEP_LOCK_FD, F_SETFD, %#x)", flags); } } } // Switch to the root directory to not hold on to any directory descriptors // (just in case you started xsecurelock from a directory you want to unmount // later). if (chdir("/")) { Log("Could not switch to the root directory"); return 1; } // Test if HELPER_PATH is accessible; if not, we will likely have a problem. if (access(HELPER_PATH "/", X_OK)) { Log("Could not access directory %s", HELPER_PATH); return 1; } // Parse and verify arguments. LoadDefaults(); ParseArgumentsOrExit(argc, argv); if (!CheckSettings()) { Usage(argv[0]); return 1; } // Check if we are in a lockable session. if (!CheckLockingEffectiveness()) { return 1; } // Connect to X11. Display *display = XOpenDisplay(NULL); if (display == NULL) { Log("Could not connect to $DISPLAY"); return 1; } // TODO(divVerent): Support that? if (ScreenCount(display) != 1) { Log("Warning: 'Zaphod' configurations are not supported at this point. " "Only locking the default screen.\n"); } // My windows. Window my_windows[4]; unsigned int n_my_windows = 0; // Who's the root? Window root_window = DefaultRootWindow(display); // Query the initial screen size, and get notified on updates. Also we're // going to grab on the root window, so FocusOut events about losing the grab // will appear there. XSelectInput(display, root_window, StructureNotifyMask | FocusChangeMask); int w = DisplayWidth(display, DefaultScreen(display)); int h = DisplayHeight(display, DefaultScreen(display)); #ifdef DEBUG_EVENTS Log("DisplayWidthHeight %d %d", w, h); #endif // Prepare some nice window attributes for a screen saver window. XColor black; black.pixel = BlackPixel(display, DefaultScreen(display)); XQueryColor(display, DefaultColormap(display, DefaultScreen(display)), &black); Pixmap bg = XCreateBitmapFromData(display, root_window, "\0", 1, 1); Cursor default_cursor = XCreateFontCursor(display, XC_arrow); Cursor transparent_cursor = XCreatePixmapCursor(display, bg, bg, &black, &black, 0, 0); XSetWindowAttributes coverattrs = {0}; coverattrs.background_pixel = black.pixel; coverattrs.save_under = 1; coverattrs.override_redirect = 1; coverattrs.cursor = transparent_cursor; Window parent_window = root_window; #ifdef HAVE_XCOMPOSITE_EXT int composite_event_base, composite_error_base, composite_major_version = 0, composite_minor_version = 0; int have_xcomposite_ext = XCompositeQueryExtension(display, &composite_event_base, &composite_error_base) && // Require at least XComposite 0.3. XCompositeQueryVersion(display, &composite_major_version, &composite_minor_version) && (composite_major_version >= 1 || composite_minor_version >= 3); if (!have_xcomposite_ext) { Log("XComposite extension not detected"); } if (have_xcomposite_ext && no_composite) { Log("XComposite extension detected but disabled by user"); have_xcomposite_ext = 0; } Window composite_window = None, obscurer_window = None; if (have_xcomposite_ext) { composite_window = XCompositeGetOverlayWindow(display, root_window); // Some compositers may unmap or shape the overlay window - undo that, just // in case. XMapRaised(display, composite_window); #ifdef HAVE_XFIXES_EXT int xfixes_event_base, xfixes_error_base; if (XFixesQueryExtension(display, &xfixes_event_base, &xfixes_error_base)) { XFixesSetWindowShapeRegion(display, composite_window, ShapeBounding, // 0, 0, 0); } #endif parent_window = composite_window; if (composite_obscurer) { // Also create an "obscurer window" that we don't actually use but that // covers almost everything in case the composite window temporarily does // not work (e.g. in case the compositor hides the COW). We are making // the obscurer window actually white, so issues like this become visible // but harmless. The window isn't full-sized to avoid compositors turning // off themselves in response to a full-screen window, but nevertheless // this is kept opt-in for now until shown reliable. XSetWindowAttributes obscurerattrs = coverattrs; obscurerattrs.background_pixel = WhitePixel(display, DefaultScreen(display)); obscurer_window = XCreateWindow( display, root_window, 1, 1, w - 2, h - 2, 0, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel | CWSaveUnder | CWOverrideRedirect | CWCursor, &obscurerattrs); SetWMProperties(display, obscurer_window, "xsecurelock", "obscurer", argc, argv); my_windows[n_my_windows++] = obscurer_window; } } #endif // Create the windows. // background_window is the outer window which exists for security reasons (in // case a subprocess may turn its window transparent or something). // saver_window is the "visible" window that the saver child will draw on. // auth_window is a window exclusively used by the auth child. It will only be // mapped during auth, and hidden otherwise. These windows are separated // because XScreenSaver's savers might XUngrabKeyboard on their window. Window background_window = XCreateWindow( display, parent_window, 0, 0, w, h, 0, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel | CWSaveUnder | CWOverrideRedirect | CWCursor, &coverattrs); SetWMProperties(display, background_window, "xsecurelock", "background", argc, argv); my_windows[n_my_windows++] = background_window; Window saver_window = XCreateWindow(display, background_window, 0, 0, w, h, 0, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel, &coverattrs); SetWMProperties(display, saver_window, "xsecurelock", "saver", argc, argv); my_windows[n_my_windows++] = saver_window; Window auth_window = XCreateWindow(display, background_window, 0, 0, w, h, 0, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel, &coverattrs); SetWMProperties(display, auth_window, "xsecurelock", "auth", argc, argv); my_windows[n_my_windows++] = auth_window; // Let's get notified if we lose visibility, so we can self-raise. #ifdef HAVE_XCOMPOSITE_EXT if (composite_window != None) { XSelectInput(display, composite_window, StructureNotifyMask | VisibilityChangeMask); } if (obscurer_window != None) { XSelectInput(display, obscurer_window, StructureNotifyMask | VisibilityChangeMask); } #endif XSelectInput(display, background_window, StructureNotifyMask | VisibilityChangeMask); XSelectInput(display, saver_window, StructureNotifyMask); XSelectInput(display, auth_window, StructureNotifyMask | VisibilityChangeMask); // Make sure we stay always on top. XWindowChanges coverchanges; coverchanges.stack_mode = Above; XConfigureWindow(display, background_window, CWStackMode, &coverchanges); XConfigureWindow(display, auth_window, CWStackMode, &coverchanges); // We're OverrideRedirect anyway, but setting this hint may help compositors // leave our window alone. Atom state_atom = XInternAtom(display, "_NET_WM_STATE", False); Atom fullscreen_atom = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", False); XChangeProperty(display, background_window, state_atom, XA_ATOM, 32, PropModeReplace, (const unsigned char *)&fullscreen_atom, 1); // Bypass compositing, just in case. Atom dont_composite_atom = XInternAtom(display, "_NET_WM_BYPASS_COMPOSITOR", False); long dont_composite = 1; XChangeProperty(display, background_window, dont_composite_atom, XA_CARDINAL, 32, PropModeReplace, (const unsigned char *)&dont_composite, 1); #ifdef HAVE_XCOMPOSITE_EXT if (composite_window != None) { // Also set this property on the Composite Overlay Window, just in case a // compositor were to try compositing it (xcompmgr does, but doesn't know // this property anyway). XChangeProperty(display, composite_window, dont_composite_atom, XA_CARDINAL, 32, PropModeReplace, (const unsigned char *)&dont_composite, 1); } // Note: NOT setting this on the obscurer window, as this is a fallback and // actually should be composited to make sure the compositor never draws // anything "interesting". #endif // Initialize XInput so we can get multibyte key events. XIM xim = XOpenIM(display, NULL, NULL, NULL); if (xim == NULL) { Log("XOpenIM failed. Assuming Latin-1 encoding"); } XIC xic = NULL; if (xim != NULL) { // As we're OverrideRedirect and grabbing input, we can't use any fancy IMs. // Therefore, if we can't get a requirement-less IM, we won't use XIM at // all. int input_styles[4] = { XIMPreeditNothing | XIMStatusNothing, // Status might be invisible. XIMPreeditNothing | XIMStatusNone, // Maybe a compose key. XIMPreeditNone | XIMStatusNothing, // Status might be invisible. XIMPreeditNone | XIMStatusNone // Standard handling. }; size_t i; for (i = 0; i < sizeof(input_styles) / sizeof(input_styles[0]); ++i) { // Note: we draw XIM stuff in auth_window so it's above the saver/auth // child. However, we receive events for the grab window. xic = XCreateIC(xim, XNInputStyle, input_styles[i], XNClientWindow, auth_window, NULL); if (xic != NULL) { break; } } if (xic == NULL) { Log("XCreateIC failed. Assuming Latin-1 encoding"); } } #ifdef HAVE_XSCREENSAVER_EXT // If we support the screen saver extension, that'd be good. int scrnsaver_event_base, scrnsaver_error_base; if (!XScreenSaverQueryExtension(display, &scrnsaver_event_base, &scrnsaver_error_base)) { scrnsaver_event_base = 0; scrnsaver_error_base = 0; } XScreenSaverSelectInput(display, background_window, ScreenSaverNotifyMask); #endif #ifdef HAVE_XF86MISC_EXT // In case keys to disable grabs are available, turn them off for the duration // of the lock. if (XF86MiscSetGrabKeysState(display, False) != MiscExtGrabStateSuccess) { Log("Could not set grab keys state"); return EXIT_FAILURE; } #endif // Acquire all grabs we need. Retry in case the window manager is still // holding some grabs while starting XSecureLock. int retries; int last_normal_attempt = force_grab ? 1 : 0; for (retries = 10; retries >= 0; --retries) { if (AcquireGrabs(display, root_window, my_windows, n_my_windows, transparent_cursor, /*silent=*/retries > last_normal_attempt, /*force=*/retries < last_normal_attempt)) { break; } nanosleep(&(const struct timespec){0, 100000000L}, NULL); } if (retries < 0) { Log("Failed to grab. Giving up."); return EXIT_FAILURE; } // Map our windows. // This is done after grabbing so failure to grab does not blank the screen // yet, thereby "confirming" the screen lock. XMapRaised(display, background_window); XClearWindow(display, background_window); // Workaround for bad drivers. XMapRaised(display, saver_window); XRaiseWindow(display, auth_window); // Don't map here. #ifdef HAVE_XCOMPOSITE_EXT if (obscurer_window != None) { // Map the obscurer window last so it should never become visible. XMapRaised(display, obscurer_window); } #endif if (MLOCK_PAGE(&priv, sizeof(priv)) < 0) { LogErrno("mlock"); return EXIT_FAILURE; } // Prevent X11 errors from killing XSecureLock. Instead, just keep going. XSetErrorHandler(IgnoreErrorsHandler); struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = SIG_IGN; // Don't die if auth child closes stdin. if (sigaction(SIGPIPE, &sa, NULL) != 0) { LogErrno("sigaction(SIGPIPE)"); } sa.sa_flags = SA_RESETHAND; // It re-raises to suicide. sa.sa_handler = HandleSIGTERM; // To kill children. if (sigaction(SIGTERM, &sa, NULL) != 0) { LogErrno("sigaction(SIGTERM)"); } InitWaitPgrp(); // Need to flush the display so savers sure can access the window. XFlush(display); enum WatchChildrenState xss_requested_saver_state = WATCH_CHILDREN_NORMAL; int x11_fd = ConnectionNumber(display); if (x11_fd == xss_sleep_lock_fd && xss_sleep_lock_fd != -1) { Log("XSS_SLEEP_LOCK_FD matches DISPLAY - what?!? We're probably " "inhibiting sleep now"); xss_sleep_lock_fd = -1; } InitBlankScreen(); int background_window_mapped = 0, background_window_visible = 0, auth_window_mapped = 0, saver_window_mapped = 0, need_to_reinstate_grabs = 0, xss_lock_notified = 0; for (;;) { // Watch children WATCH_CHILDREN_HZ times per second. fd_set in_fds; memset(&in_fds, 0, sizeof(in_fds)); // For clang-analyzer. FD_ZERO(&in_fds); FD_SET(x11_fd, &in_fds); struct timeval tv; tv.tv_usec = 1000000 / WATCH_CHILDREN_HZ; tv.tv_sec = 0; select(x11_fd + 1, &in_fds, 0, 0, &tv); // Make sure to shut down the saver when blanked. Saves power. enum WatchChildrenState requested_saver_state = blanked ? WATCH_CHILDREN_SAVER_DISABLED : xss_requested_saver_state; // Now check status of our children. if (WatchChildren(display, auth_window, saver_window, requested_saver_state, NULL)) { goto done; } // If something changed our cursor, change it back. XUndefineCursor(display, saver_window); #ifdef ALWAYS_REINSTATE_GRABS // This really should never be needed... (void)need_to_reinstate_grabs; need_to_reinstate_grabs = 1; #endif if (need_to_reinstate_grabs) { need_to_reinstate_grabs = 0; if (!AcquireGrabs(display, root_window, my_windows, n_my_windows, transparent_cursor, 0, 0)) { Log("Critical: could not reacquire grabs. The screen is now UNLOCKED! " "Trying again next frame."); need_to_reinstate_grabs = 1; } } #ifdef AUTO_RAISE if (auth_window_mapped) { MaybeRaiseWindow(display, auth_window, 0, 0); } MaybeRaiseWindow(display, background_window, 0, 0); #ifdef HAVE_XCOMPOSITE_EXT if (obscurer_window != None) { MaybeRaiseWindow(display, obscurer_window, 1, 0); } #endif #endif // Take care of zombies. if (notify_command_pid != 0) { int status; WaitProc("notify", ¬ify_command_pid, 0, 0, &status); // Otherwise, we're still alive. Re-check next time. } // Handle all events. while (XPending(display) && (XNextEvent(display, &priv.ev), 1)) { if (XFilterEvent(&priv.ev, None)) { // If an input method ate the event, ignore it. continue; } switch (priv.ev.type) { case ConfigureNotify: #ifdef DEBUG_EVENTS Log("ConfigureNotify %lu %d %d", (unsigned long)priv.ev.xconfigure.window, priv.ev.xconfigure.width, priv.ev.xconfigure.height); #endif if (priv.ev.xconfigure.window == root_window) { // Root window size changed. Adjust the saver_window window too! w = priv.ev.xconfigure.width; h = priv.ev.xconfigure.height; #ifdef DEBUG_EVENTS Log("DisplayWidthHeight %d %d", w, h); #endif #ifdef HAVE_XCOMPOSITE_EXT if (obscurer_window != None) { XMoveResizeWindow(display, obscurer_window, 1, 1, w - 2, h - 2); } #endif XMoveResizeWindow(display, background_window, 0, 0, w, h); XClearWindow(display, background_window); // Workaround for bad drivers. XMoveResizeWindow(display, saver_window, 0, 0, w, h); // Just in case - ConfigureNotify might also be sent for raising } // Also, whatever window has been reconfigured, should also be raised // to make sure. if (auth_window_mapped && priv.ev.xconfigure.window == auth_window) { MaybeRaiseWindow(display, auth_window, 0, 0); } else if (priv.ev.xconfigure.window == background_window) { MaybeRaiseWindow(display, background_window, 0, 0); XClearWindow(display, background_window); // Workaround for bad drivers. #ifdef HAVE_XCOMPOSITE_EXT } else if (obscurer_window != None && priv.ev.xconfigure.window == obscurer_window) { MaybeRaiseWindow(display, obscurer_window, 1, 0); #endif } break; case VisibilityNotify: #ifdef DEBUG_EVENTS Log("VisibilityNotify %lu %d", (unsigned long)priv.ev.xvisibility.window, priv.ev.xvisibility.state); #endif if (priv.ev.xvisibility.state == VisibilityUnobscured) { if (priv.ev.xvisibility.window == background_window) { background_window_visible = 1; } } else { // If something else shows an OverrideRedirect window, we want to // stay on top. if (auth_window_mapped && priv.ev.xvisibility.window == auth_window) { Log("Someone overlapped the auth window. Undoing that"); MaybeRaiseWindow(display, auth_window, 0, 1); } else if (priv.ev.xvisibility.window == background_window) { background_window_visible = 0; Log("Someone overlapped the background window. Undoing that"); MaybeRaiseWindow(display, background_window, 0, 1); XClearWindow(display, background_window); // Workaround for bad drivers. #ifdef HAVE_XCOMPOSITE_EXT } else if (obscurer_window != None && priv.ev.xvisibility.window == obscurer_window) { // Not logging this as our own composite overlay window causes // this to happen too; keeping this there anyway so we self-raise // if something is wrong with the COW and something else overlaps // us. MaybeRaiseWindow(display, obscurer_window, 1, 1); } else if (composite_window != None && priv.ev.xvisibility.window == composite_window) { Log("Someone overlapped the composite overlay window window. " "Undoing that"); // Note: MaybeRaiseWindow isn't valid here, as the COW has the // root as parent without being a proper child of it. Let's just // raise the COW unconditionally. XRaiseWindow(display, composite_window); #endif } else { Log("Received unexpected VisibilityNotify for window %lu", priv.ev.xvisibility.window); } } break; case MotionNotify: case ButtonPress: // Mouse events launch the auth child. ScreenNoLongerBlanked(display); if (WakeUp(display, auth_window, saver_window, NULL)) { goto done; } break; case KeyPress: { // Keyboard events launch the auth child. ScreenNoLongerBlanked(display); Status status = XLookupNone; int have_key = 1; int do_wake_up = 1; priv.keysym = NoSymbol; if (xic) { // This uses the current locale. priv.len = XmbLookupString(xic, &priv.ev.xkey, priv.buf, sizeof(priv.buf) - 1, &priv.keysym, &status); if (priv.len <= 0) { // Error or no output. Fine. have_key = 0; } else if (status != XLookupChars && status != XLookupBoth) { // Got nothing new. have_key = 0; } } else { // This is always Latin-1. Sorry. priv.len = XLookupString(&priv.ev.xkey, priv.buf, sizeof(priv.buf) - 1, &priv.keysym, NULL); if (priv.len <= 0) { // Error or no output. Fine. have_key = 0; } } if (have_key && (size_t)priv.len >= sizeof(priv.buf)) { // Detect possible overruns. This should be unreachable. Log("Received invalid length from XLookupString: %d", priv.len); have_key = 0; } if (priv.keysym == XK_Tab && (priv.ev.xkey.state & ControlMask)) { // Map Ctrl-Tab to Ctrl-S (switch layout). We remap this one // because not all layouts have a key for S. priv.buf[0] = '\023'; priv.buf[1] = 0; } else if (priv.keysym == XK_BackSpace && (priv.ev.xkey.state & ControlMask)) { // Map Ctrl-Backspace to Ctrl-U (clear entry line). priv.buf[0] = '\025'; priv.buf[1] = 0; } else if (have_switch_user_command && priv.keysym == XK_o && (((priv.ev.xkey.state & ControlMask) && (priv.ev.xkey.state & Mod1Mask)) || (priv.ev.xkey.state & Mod4Mask))) { // Switch to greeter on Ctrl-Alt-O or Win-O. system("eval \"$XSECURELOCK_SWITCH_USER_COMMAND\" &"); // And send a Ctrl-U (clear entry line). priv.buf[0] = '\025'; priv.buf[1] = 0; } else if (have_key) { // Map all newline-like things to newlines. if (priv.len == 1 && priv.buf[0] == '\r') { priv.buf[0] = '\n'; } priv.buf[priv.len] = 0; } else { // No new bytes. Fine. priv.buf[0] = 0; // We do check if something external wants to handle this key, // though. const char *keyname = XKeysymToString(priv.keysym); if (keyname != NULL) { char buf[64]; int buflen = snprintf(buf, sizeof(buf), "XSECURELOCK_KEY_%s_COMMAND", keyname); if (buflen <= 0 || (size_t)buflen >= sizeof(buf)) { Log("Wow, pretty long keysym names you got there"); } else { const char *command = GetStringSetting(buf, ""); if (*command) { buflen = snprintf(buf, sizeof(buf), "eval \"$XSECURELOCK_KEY_%s_COMMAND\" &", keyname); if (buflen <= 0 || (size_t)buflen >= sizeof(buf)) { Log("Wow, pretty long keysym names you got there"); } else { system(buf); do_wake_up = 0; } } } } } // Now if so desired, wake up the login prompt, and check its // status. int authenticated = do_wake_up ? WakeUp(display, auth_window, saver_window, priv.buf) : 0; // Clear out keypress data immediately. explicit_bzero(&priv, sizeof(priv)); if (authenticated) { goto done; } } break; case KeyRelease: case ButtonRelease: // Known to wake up screen blanking. ScreenNoLongerBlanked(display); break; case MappingNotify: case EnterNotify: case LeaveNotify: // Ignored. break; case MapNotify: #ifdef DEBUG_EVENTS Log("MapNotify %lu", (unsigned long)priv.ev.xmap.window); #endif if (priv.ev.xmap.window == auth_window) { auth_window_mapped = 1; #ifdef SHOW_CURSOR_DURING_AUTH // Actually ShowCursor... XGrabPointer(display, root_window, False, ALL_POINTER_EVENTS, GrabModeAsync, GrabModeAsync, None, default_cursor, CurrentTime); #endif } else if (priv.ev.xmap.window == saver_window) { saver_window_mapped = 1; } else if (priv.ev.xmap.window == background_window) { background_window_mapped = 1; } break; case UnmapNotify: #ifdef DEBUG_EVENTS Log("UnmapNotify %lu", (unsigned long)priv.ev.xmap.window); #endif if (priv.ev.xmap.window == auth_window) { auth_window_mapped = 0; #ifdef SHOW_CURSOR_DURING_AUTH // Actually HideCursor... XGrabPointer(display, root_window, False, ALL_POINTER_EVENTS, GrabModeAsync, GrabModeAsync, None, transparent_cursor, CurrentTime); #endif } else if (priv.ev.xmap.window == saver_window) { // This should never happen, but let's handle it anyway. Log("Someone unmapped the saver window. Undoing that"); saver_window_mapped = 0; XMapWindow(display, saver_window); } else if (priv.ev.xmap.window == background_window) { // This should never happen, but let's handle it anyway. Log("Someone unmapped the background window. Undoing that"); background_window_mapped = 0; XMapRaised(display, background_window); XClearWindow(display, background_window); // Workaround for bad drivers. #ifdef HAVE_XCOMPOSITE_EXT } else if (obscurer_window != None && priv.ev.xmap.window == obscurer_window) { // This should never happen, but let's handle it anyway. Log("Someone unmapped the obscurer window. Undoing that"); XMapRaised(display, obscurer_window); } else if (composite_window != None && priv.ev.xmap.window == composite_window) { // This should never happen, but let's handle it anyway. // Compton might do this when --unredir-if-possible is set and a // fullscreen game launches while the screen is locked. Log("Someone unmapped the composite overlay window. Undoing " "that"); XMapRaised(display, composite_window); #endif } else if (priv.ev.xmap.window == root_window) { // This should never happen, but let's handle it anyway. Log("Someone unmapped the root window?!? Undoing that"); XMapRaised(display, root_window); } break; case FocusIn: case FocusOut: #ifdef DEBUG_EVENTS Log("Focus%d %lu", priv.ev.xfocus.mode, (unsigned long)priv.ev.xfocus.window); #endif if (priv.ev.xfocus.window == root_window && priv.ev.xfocus.mode == NotifyUngrab) { // Not logging this - this is a normal occurrence if invoking the // screen lock from a key combination, as the press event may // launch xsecurelock while the release event releases a passive // grab. We still immediately try to reacquire grabs here, though. if (!AcquireGrabs(display, root_window, my_windows, n_my_windows, transparent_cursor, 0, 0)) { Log("Critical: could not reacquire grabs after NotifyUngrab. " "The screen is now UNLOCKED! Trying again next frame."); need_to_reinstate_grabs = 1; } } break; case ClientMessage: { if (priv.ev.xclient.window == root_window) { // ClientMessage on root window is used by the EWMH spec. No need to // spam about those. As we want to watch the root window size, // we must keep selecting StructureNotifyMask there. break; } // Those cause spam below, so let's log them separately to get some // details. const char *message_type = XGetAtomName(display, priv.ev.xclient.message_type); Log("Received unexpected ClientMessage event %s on window %lu", message_type == NULL ? "(null)" : message_type, priv.ev.xclient.window); break; } default: #ifdef DEBUG_EVENTS Log("Event%d %lu", priv.ev.type, (unsigned long)priv.ev.xany.window); #endif #ifdef HAVE_XSCREENSAVER_EXT // Handle screen saver notifications. If the screen is blanked // anyway, turn off the saver child. if (scrnsaver_event_base != 0 && priv.ev.type == scrnsaver_event_base + ScreenSaverNotify) { XScreenSaverNotifyEvent *xss_ev = (XScreenSaverNotifyEvent *)&priv.ev; if (xss_ev->state == ScreenSaverOn) { xss_requested_saver_state = WATCH_CHILDREN_SAVER_DISABLED; } else { xss_requested_saver_state = WATCH_CHILDREN_NORMAL; } break; } #endif Log("Received unexpected event %d", priv.ev.type); break; } if (background_window_mapped && background_window_visible && saver_window_mapped && !xss_lock_notified) { NotifyOfLock(xss_sleep_lock_fd); xss_lock_notified = 1; } } } done: // Make sure no DPMS changes persist. UnblankScreen(display); // Wipe the password. explicit_bzero(&priv, sizeof(priv)); // Free our resources, and exit. XDestroyWindow(display, auth_window); XDestroyWindow(display, saver_window); XDestroyWindow(display, background_window); #ifdef HAVE_XCOMPOSITE_EXT if (obscurer_window != None) { // Destroy the obscurer window first so it should never become visible. XDestroyWindow(display, obscurer_window); } if (composite_window != None) { XCompositeReleaseOverlayWindow(display, composite_window); } #endif XFreeCursor(display, transparent_cursor); XFreeCursor(display, default_cursor); XFreePixmap(display, bg); XCloseDisplay(display); return EXIT_SUCCESS; } xsecurelock-1.5.1/run-iwyu.sh0000755061501702575230000000010313420106751013137 00000000000000#!/bin/sh make clean make CC=/usr/bin/iwyu -k 2>&1 | tee iwyu.log xsecurelock-1.5.1/compile0000755061501702575230000001624513460622412012376 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xsecurelock-1.5.1/Makefile.in0000644061501702575230000046311113536475521013076 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : @HAVE_LIBBSD_TRUE@am__append_1 = -DHAVE_LIBBSD @PAM_CHECK_ACCOUNT_TYPE_TRUE@am__append_2 = -DPAM_CHECK_ACCOUNT_TYPE @HAVE_DPMS_EXT_TRUE@am__append_3 = -DHAVE_DPMS_EXT @HAVE_XSCREENSAVER_EXT_TRUE@am__append_4 = -DHAVE_XSCREENSAVER_EXT @HAVE_XSYNC_EXT_TRUE@am__append_5 = -DHAVE_XSYNC_EXT @HAVE_XCOMPOSITE_EXT_TRUE@am__append_6 = -DHAVE_XCOMPOSITE_EXT @HAVE_XF86MISC_EXT_TRUE@am__append_7 = -DHAVE_XF86MISC_EXT @HAVE_XFIXES_EXT_TRUE@am__append_8 = -DHAVE_XFIXES_EXT @HAVE_XFT_EXT_TRUE@am__append_9 = -DHAVE_XFT_EXT @HAVE_XRANDR_EXT_TRUE@am__append_10 = -DHAVE_XRANDR_EXT @HAVE_XKB_EXT_TRUE@am__append_11 = -DHAVE_XKB_EXT bin_PROGRAMS = xsecurelock$(EXEEXT) @HAVE_HTPASSWD_TRUE@am__append_12 = \ @HAVE_HTPASSWD_TRUE@ helpers/authproto_htpasswd @HAVE_MPLAYER_TRUE@am__append_13 = \ @HAVE_MPLAYER_TRUE@ helpers/saver_mplayer @HAVE_MPV_TRUE@am__append_14 = \ @HAVE_MPV_TRUE@ helpers/saver_mpv @HAVE_PAMTESTER_TRUE@am__append_15 = \ @HAVE_PAMTESTER_TRUE@ helpers/authproto_pamtester @HAVE_XSCREENSAVER_TRUE@am__append_16 = \ @HAVE_XSCREENSAVER_TRUE@ helpers/saver_xscreensaver helpers_PROGRAMS = pgrp_placeholder$(EXEEXT) saver_multiplex$(EXEEXT) \ dimmer$(EXEEXT) $(am__EXEEXT_1) auth_x11$(EXEEXT) \ $(am__EXEEXT_2) @HAVE_IDLE_TIMER_TRUE@am__append_17 = \ @HAVE_IDLE_TIMER_TRUE@ until_nonidle @HAVE_PAM_TRUE@am__append_18 = \ @HAVE_PAM_TRUE@ authproto_pam @HAVE_PANDOC_TRUE@am__append_19 = xsecurelock.1.md xsecurelock.1 noinst_PROGRAMS = cat_authproto$(EXEEXT) \ nvidia_break_compositor$(EXEEXT) get_compositor$(EXEEXT) \ remap_all$(EXEEXT) @HAVE_DOXYGEN_TRUE@am__append_20 = doxyfile.stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(dist_examples_DATA) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = helpers/authproto_htpasswd \ helpers/authproto_pamtester helpers/saver_mplayer \ helpers/saver_mpv helpers/saver_xscreensaver Doxyfile CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(helpersdir)" \ "$(DESTDIR)$(helpersdir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(docdir)" @HAVE_IDLE_TIMER_TRUE@am__EXEEXT_1 = until_nonidle$(EXEEXT) @HAVE_PAM_TRUE@am__EXEEXT_2 = authproto_pam$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(helpers_PROGRAMS) $(noinst_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_auth_x11_OBJECTS = auth_x11-env_info.$(OBJEXT) \ auth_x11-env_settings.$(OBJEXT) \ helpers/auth_x11-authproto.$(OBJEXT) \ helpers/auth_x11-auth_x11.$(OBJEXT) \ helpers/auth_x11-monitors.$(OBJEXT) auth_x11-logging.$(OBJEXT) \ auth_x11-util.$(OBJEXT) auth_x11-wait_pgrp.$(OBJEXT) \ auth_x11-wm_properties.$(OBJEXT) \ auth_x11-xscreensaver_api.$(OBJEXT) auth_x11_OBJECTS = $(am_auth_x11_OBJECTS) am__DEPENDENCIES_1 = auth_x11_DEPENDENCIES = $(am__DEPENDENCIES_1) am__authproto_pam_SOURCES_DIST = env_info.c env_info.h env_settings.c \ env_settings.h helpers/authproto.c helpers/authproto.h \ helpers/authproto_pam.c logging.c logging.h mlock_page.h \ util.c util.h @HAVE_PAM_TRUE@am_authproto_pam_OBJECTS = \ @HAVE_PAM_TRUE@ authproto_pam-env_info.$(OBJEXT) \ @HAVE_PAM_TRUE@ authproto_pam-env_settings.$(OBJEXT) \ @HAVE_PAM_TRUE@ helpers/authproto_pam-authproto.$(OBJEXT) \ @HAVE_PAM_TRUE@ helpers/authproto_pam-authproto_pam.$(OBJEXT) \ @HAVE_PAM_TRUE@ authproto_pam-logging.$(OBJEXT) \ @HAVE_PAM_TRUE@ authproto_pam-util.$(OBJEXT) authproto_pam_OBJECTS = $(am_authproto_pam_OBJECTS) authproto_pam_DEPENDENCIES = am_cat_authproto_OBJECTS = logging.$(OBJEXT) \ helpers/authproto.$(OBJEXT) test/cat_authproto.$(OBJEXT) cat_authproto_OBJECTS = $(am_cat_authproto_OBJECTS) cat_authproto_LDADD = $(LDADD) am_dimmer_OBJECTS = dimmer-env_settings.$(OBJEXT) \ helpers/dimmer-dimmer.$(OBJEXT) dimmer-logging.$(OBJEXT) \ dimmer-wm_properties.$(OBJEXT) dimmer_OBJECTS = $(am_dimmer_OBJECTS) dimmer_LDADD = $(LDADD) am_get_compositor_OBJECTS = \ test/get_compositor-get_compositor.$(OBJEXT) get_compositor_OBJECTS = $(am_get_compositor_OBJECTS) get_compositor_LDADD = $(LDADD) am_nvidia_break_compositor_OBJECTS = test/nvidia_break_compositor-nvidia_break_compositor.$(OBJEXT) nvidia_break_compositor_OBJECTS = \ $(am_nvidia_break_compositor_OBJECTS) nvidia_break_compositor_LDADD = $(LDADD) am_pgrp_placeholder_OBJECTS = helpers/pgrp_placeholder.$(OBJEXT) pgrp_placeholder_OBJECTS = $(am_pgrp_placeholder_OBJECTS) pgrp_placeholder_LDADD = $(LDADD) am_remap_all_OBJECTS = test/remap_all-remap_all.$(OBJEXT) \ remap_all-unmap_all.$(OBJEXT) remap_all_OBJECTS = $(am_remap_all_OBJECTS) remap_all_LDADD = $(LDADD) am_saver_multiplex_OBJECTS = saver_multiplex-env_settings.$(OBJEXT) \ helpers/saver_multiplex-monitors.$(OBJEXT) \ helpers/saver_multiplex-saver_multiplex.$(OBJEXT) \ saver_multiplex-logging.$(OBJEXT) \ saver_multiplex-saver_child.$(OBJEXT) \ saver_multiplex-wait_pgrp.$(OBJEXT) \ saver_multiplex-wm_properties.$(OBJEXT) \ saver_multiplex-xscreensaver_api.$(OBJEXT) saver_multiplex_OBJECTS = $(am_saver_multiplex_OBJECTS) saver_multiplex_LDADD = $(LDADD) am__until_nonidle_SOURCES_DIST = env_settings.c env_settings.h \ helpers/until_nonidle.c logging.c logging.h wait_pgrp.c \ wait_pgrp.h @HAVE_IDLE_TIMER_TRUE@am_until_nonidle_OBJECTS = \ @HAVE_IDLE_TIMER_TRUE@ until_nonidle-env_settings.$(OBJEXT) \ @HAVE_IDLE_TIMER_TRUE@ helpers/until_nonidle-until_nonidle.$(OBJEXT) \ @HAVE_IDLE_TIMER_TRUE@ until_nonidle-logging.$(OBJEXT) \ @HAVE_IDLE_TIMER_TRUE@ until_nonidle-wait_pgrp.$(OBJEXT) until_nonidle_OBJECTS = $(am_until_nonidle_OBJECTS) until_nonidle_LDADD = $(LDADD) am_xsecurelock_OBJECTS = xsecurelock-auth_child.$(OBJEXT) \ xsecurelock-env_settings.$(OBJEXT) \ xsecurelock-logging.$(OBJEXT) xsecurelock-main.$(OBJEXT) \ xsecurelock-saver_child.$(OBJEXT) \ xsecurelock-unmap_all.$(OBJEXT) xsecurelock-util.$(OBJEXT) \ xsecurelock-version.$(OBJEXT) xsecurelock-wait_pgrp.$(OBJEXT) \ xsecurelock-wm_properties.$(OBJEXT) \ xsecurelock-xscreensaver_api.$(OBJEXT) nodist_xsecurelock_OBJECTS = xsecurelock_OBJECTS = $(am_xsecurelock_OBJECTS) \ $(nodist_xsecurelock_OBJECTS) xsecurelock_DEPENDENCIES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(helpers_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/auth_x11-env_info.Po \ ./$(DEPDIR)/auth_x11-env_settings.Po \ ./$(DEPDIR)/auth_x11-logging.Po ./$(DEPDIR)/auth_x11-util.Po \ ./$(DEPDIR)/auth_x11-wait_pgrp.Po \ ./$(DEPDIR)/auth_x11-wm_properties.Po \ ./$(DEPDIR)/auth_x11-xscreensaver_api.Po \ ./$(DEPDIR)/authproto_pam-env_info.Po \ ./$(DEPDIR)/authproto_pam-env_settings.Po \ ./$(DEPDIR)/authproto_pam-logging.Po \ ./$(DEPDIR)/authproto_pam-util.Po \ ./$(DEPDIR)/dimmer-env_settings.Po \ ./$(DEPDIR)/dimmer-logging.Po \ ./$(DEPDIR)/dimmer-wm_properties.Po ./$(DEPDIR)/logging.Po \ ./$(DEPDIR)/remap_all-unmap_all.Po \ ./$(DEPDIR)/saver_multiplex-env_settings.Po \ ./$(DEPDIR)/saver_multiplex-logging.Po \ ./$(DEPDIR)/saver_multiplex-saver_child.Po \ ./$(DEPDIR)/saver_multiplex-wait_pgrp.Po \ ./$(DEPDIR)/saver_multiplex-wm_properties.Po \ ./$(DEPDIR)/saver_multiplex-xscreensaver_api.Po \ ./$(DEPDIR)/until_nonidle-env_settings.Po \ ./$(DEPDIR)/until_nonidle-logging.Po \ ./$(DEPDIR)/until_nonidle-wait_pgrp.Po \ ./$(DEPDIR)/xsecurelock-auth_child.Po \ ./$(DEPDIR)/xsecurelock-env_settings.Po \ ./$(DEPDIR)/xsecurelock-logging.Po \ ./$(DEPDIR)/xsecurelock-main.Po \ ./$(DEPDIR)/xsecurelock-saver_child.Po \ ./$(DEPDIR)/xsecurelock-unmap_all.Po \ ./$(DEPDIR)/xsecurelock-util.Po \ ./$(DEPDIR)/xsecurelock-version.Po \ ./$(DEPDIR)/xsecurelock-wait_pgrp.Po \ ./$(DEPDIR)/xsecurelock-wm_properties.Po \ ./$(DEPDIR)/xsecurelock-xscreensaver_api.Po \ helpers/$(DEPDIR)/auth_x11-auth_x11.Po \ helpers/$(DEPDIR)/auth_x11-authproto.Po \ helpers/$(DEPDIR)/auth_x11-monitors.Po \ helpers/$(DEPDIR)/authproto.Po \ helpers/$(DEPDIR)/authproto_pam-authproto.Po \ helpers/$(DEPDIR)/authproto_pam-authproto_pam.Po \ helpers/$(DEPDIR)/dimmer-dimmer.Po \ helpers/$(DEPDIR)/pgrp_placeholder.Po \ helpers/$(DEPDIR)/saver_multiplex-monitors.Po \ helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Po \ helpers/$(DEPDIR)/until_nonidle-until_nonidle.Po \ test/$(DEPDIR)/cat_authproto.Po \ test/$(DEPDIR)/get_compositor-get_compositor.Po \ test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Po \ test/$(DEPDIR)/remap_all-remap_all.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(auth_x11_SOURCES) $(authproto_pam_SOURCES) \ $(cat_authproto_SOURCES) $(dimmer_SOURCES) \ $(get_compositor_SOURCES) $(nvidia_break_compositor_SOURCES) \ $(pgrp_placeholder_SOURCES) $(remap_all_SOURCES) \ $(saver_multiplex_SOURCES) $(until_nonidle_SOURCES) \ $(xsecurelock_SOURCES) $(nodist_xsecurelock_SOURCES) DIST_SOURCES = $(auth_x11_SOURCES) $(am__authproto_pam_SOURCES_DIST) \ $(cat_authproto_SOURCES) $(dimmer_SOURCES) \ $(get_compositor_SOURCES) $(nvidia_break_compositor_SOURCES) \ $(pgrp_placeholder_SOURCES) $(remap_all_SOURCES) \ $(saver_multiplex_SOURCES) $(am__until_nonidle_SOURCES_DIST) \ $(xsecurelock_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) DATA = $(dist_examples_DATA) $(doc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope AM_RECURSIVE_TARGETS = cscope am__DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.in \ $(top_srcdir)/helpers/authproto_htpasswd.in \ $(top_srcdir)/helpers/authproto_pamtester.in \ $(top_srcdir)/helpers/saver_mplayer.in \ $(top_srcdir)/helpers/saver_mpv.in \ $(top_srcdir)/helpers/saver_xscreensaver.in compile depcomp \ install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XFT_CFLAGS = @XFT_CFLAGS@ XFT_LIBS = @XFT_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ auth_executable = @auth_executable@ authproto_executable = @authproto_executable@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ global_saver_executable = @global_saver_executable@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libbsd_CFLAGS = @libbsd_CFLAGS@ libbsd_LIBS = @libbsd_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pam_service_name = @pam_service_name@ path_to_htpasswd = @path_to_htpasswd@ path_to_mplayer = @path_to_mplayer@ path_to_mpv = @path_to_mpv@ path_to_pamtester = @path_to_pamtester@ path_to_pandoc = @path_to_pandoc@ path_to_xscreensaver = @path_to_xscreensaver@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ saver_executable = @saver_executable@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ CLEANFILES = $(am__append_19) $(am__append_20) AM_CFLAGS = -Wall -Wextra -D_POSIX_C_SOURCE=200112L -D_XOPEN_SOURCE=600 macros = -DHELPER_PATH=\"$(pkglibexecdir)\" -DDOCS_PATH=\"$(docdir)\" \ -DAUTH_EXECUTABLE=\"@auth_executable@\" \ -DAUTHPROTO_EXECUTABLE=\"@authproto_executable@\" \ -DGLOBAL_SAVER_EXECUTABLE=\"@global_saver_executable@\" \ -DSAVER_EXECUTABLE=\"@saver_executable@\" \ -DPAM_SERVICE_NAME=\"@pam_service_name@\" $(am__append_1) \ $(am__append_2) $(am__append_3) $(am__append_4) \ $(am__append_5) $(am__append_6) $(am__append_7) \ $(am__append_8) $(am__append_9) $(am__append_10) \ $(am__append_11) xsecurelock_SOURCES = \ auth_child.c auth_child.h \ env_settings.c env_settings.h \ logging.c logging.h \ mlock_page.h \ main.c \ saver_child.c saver_child.h \ unmap_all.c unmap_all.h \ util.c util.h \ version.c version.h \ wait_pgrp.c wait_pgrp.h \ wm_properties.c wm_properties.h \ xscreensaver_api.c xscreensaver_api.h nodist_xsecurelock_SOURCES = \ env_helpstr.inc xsecurelock_CPPFLAGS = $(macros) $(LIBBSD_CFLAGS) xsecurelock_LDADD = $(LIBBSD_LIBS) helpersdir = $(pkglibexecdir) helpers_SCRIPTS = helpers/saver_blank $(am__append_12) \ $(am__append_13) $(am__append_14) $(am__append_15) \ $(am__append_16) pgrp_placeholder_SOURCES = \ helpers/pgrp_placeholder.c saver_multiplex_SOURCES = \ env_settings.c env_settings.h \ helpers/monitors.c helpers/monitors.h \ helpers/saver_multiplex.c \ logging.c logging.h \ saver_child.c saver_child.h \ wait_pgrp.c wait_pgrp.h \ wm_properties.c wm_properties.h \ xscreensaver_api.c xscreensaver_api.h saver_multiplex_CPPFLAGS = $(macros) dimmer_SOURCES = \ env_settings.c env_settings.h \ helpers/dimmer.c \ logging.c logging.h \ wm_properties.c wm_properties.h dimmer_CPPFLAGS = $(macros) @HAVE_IDLE_TIMER_TRUE@until_nonidle_SOURCES = \ @HAVE_IDLE_TIMER_TRUE@ env_settings.c env_settings.h \ @HAVE_IDLE_TIMER_TRUE@ helpers/until_nonidle.c \ @HAVE_IDLE_TIMER_TRUE@ logging.c logging.h \ @HAVE_IDLE_TIMER_TRUE@ wait_pgrp.c wait_pgrp.h @HAVE_IDLE_TIMER_TRUE@until_nonidle_CPPFLAGS = $(macros) auth_x11_SOURCES = \ env_info.c env_info.h \ env_settings.c env_settings.h \ helpers/authproto.c helpers/authproto.h \ helpers/auth_x11.c \ helpers/monitors.c helpers/monitors.h \ logging.c logging.h \ mlock_page.h \ util.c util.h \ wait_pgrp.c wait_pgrp.h \ wm_properties.c wm_properties.h \ xscreensaver_api.c xscreensaver_api.h auth_x11_CPPFLAGS = $(macros) $(XFT_CFLAGS) $(LIBBSD_CFLAGS) auth_x11_LDADD = $(XFT_LIBS) $(LIBBSD_LIBS) @HAVE_PAM_TRUE@authproto_pam_SOURCES = \ @HAVE_PAM_TRUE@ env_info.c env_info.h \ @HAVE_PAM_TRUE@ env_settings.c env_settings.h \ @HAVE_PAM_TRUE@ helpers/authproto.c helpers/authproto.h \ @HAVE_PAM_TRUE@ helpers/authproto_pam.c \ @HAVE_PAM_TRUE@ logging.c logging.h \ @HAVE_PAM_TRUE@ mlock_page.h \ @HAVE_PAM_TRUE@ util.c util.h @HAVE_PAM_TRUE@authproto_pam_CPPFLAGS = $(macros) $(LIBBSD_CFLAGS) @HAVE_PAM_TRUE@authproto_pam_LDADD = $(LIBBSD_LIBS) doc_DATA = \ CONTRIBUTING \ LICENSE \ README.md @HAVE_PANDOC_TRUE@man1_MANS = xsecurelock.1 cat_authproto_SOURCES = \ logging.c logging.h \ helpers/authproto.c helpers/authproto.h \ test/cat_authproto.c nvidia_break_compositor_SOURCES = \ test/nvidia_break_compositor.c nvidia_break_compositor_CPPFLAGS = $(macros) get_compositor_SOURCES = \ test/get_compositor.c get_compositor_CPPFLAGS = $(macros) remap_all_SOURCES = \ test/remap_all.c \ unmap_all.c unmap_all.h remap_all_CPPFLAGS = $(macros) EXTRA_DIST = \ CONTRIBUTING \ LICENSE \ README.md \ autogen.sh \ doc/xsecurelock.1.md \ ensure-documented-settings.sh \ helpers/saver_blank \ run-iwyu.sh \ run-linters.sh \ test/*.c \ test/*.sh \ test/*.xdo \ version.c examplesdir = $(docdir)/examples dist_examples_DATA = \ doc/examples/saver_livestreams all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): helpers/authproto_htpasswd: $(top_builddir)/config.status $(top_srcdir)/helpers/authproto_htpasswd.in cd $(top_builddir) && $(SHELL) ./config.status $@ helpers/authproto_pamtester: $(top_builddir)/config.status $(top_srcdir)/helpers/authproto_pamtester.in cd $(top_builddir) && $(SHELL) ./config.status $@ helpers/saver_mplayer: $(top_builddir)/config.status $(top_srcdir)/helpers/saver_mplayer.in cd $(top_builddir) && $(SHELL) ./config.status $@ helpers/saver_mpv: $(top_builddir)/config.status $(top_srcdir)/helpers/saver_mpv.in cd $(top_builddir) && $(SHELL) ./config.status $@ helpers/saver_xscreensaver: $(top_builddir)/config.status $(top_srcdir)/helpers/saver_xscreensaver.in cd $(top_builddir) && $(SHELL) ./config.status $@ Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) install-helpersPROGRAMS: $(helpers_PROGRAMS) @$(NORMAL_INSTALL) @list='$(helpers_PROGRAMS)'; test -n "$(helpersdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(helpersdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(helpersdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(helpersdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(helpersdir)$$dir" || exit $$?; \ } \ ; done uninstall-helpersPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(helpers_PROGRAMS)'; test -n "$(helpersdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(helpersdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(helpersdir)" && rm -f $$files clean-helpersPROGRAMS: -test -z "$(helpers_PROGRAMS)" || rm -f $(helpers_PROGRAMS) clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) helpers/$(am__dirstamp): @$(MKDIR_P) helpers @: > helpers/$(am__dirstamp) helpers/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) helpers/$(DEPDIR) @: > helpers/$(DEPDIR)/$(am__dirstamp) helpers/auth_x11-authproto.$(OBJEXT): helpers/$(am__dirstamp) \ helpers/$(DEPDIR)/$(am__dirstamp) helpers/auth_x11-auth_x11.$(OBJEXT): helpers/$(am__dirstamp) \ helpers/$(DEPDIR)/$(am__dirstamp) helpers/auth_x11-monitors.$(OBJEXT): helpers/$(am__dirstamp) \ helpers/$(DEPDIR)/$(am__dirstamp) auth_x11$(EXEEXT): $(auth_x11_OBJECTS) $(auth_x11_DEPENDENCIES) $(EXTRA_auth_x11_DEPENDENCIES) @rm -f auth_x11$(EXEEXT) $(AM_V_CCLD)$(LINK) $(auth_x11_OBJECTS) $(auth_x11_LDADD) $(LIBS) helpers/authproto_pam-authproto.$(OBJEXT): helpers/$(am__dirstamp) \ helpers/$(DEPDIR)/$(am__dirstamp) helpers/authproto_pam-authproto_pam.$(OBJEXT): \ helpers/$(am__dirstamp) helpers/$(DEPDIR)/$(am__dirstamp) authproto_pam$(EXEEXT): $(authproto_pam_OBJECTS) $(authproto_pam_DEPENDENCIES) $(EXTRA_authproto_pam_DEPENDENCIES) @rm -f authproto_pam$(EXEEXT) $(AM_V_CCLD)$(LINK) $(authproto_pam_OBJECTS) $(authproto_pam_LDADD) $(LIBS) helpers/authproto.$(OBJEXT): helpers/$(am__dirstamp) \ helpers/$(DEPDIR)/$(am__dirstamp) test/$(am__dirstamp): @$(MKDIR_P) test @: > test/$(am__dirstamp) test/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) test/$(DEPDIR) @: > test/$(DEPDIR)/$(am__dirstamp) test/cat_authproto.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) cat_authproto$(EXEEXT): $(cat_authproto_OBJECTS) $(cat_authproto_DEPENDENCIES) $(EXTRA_cat_authproto_DEPENDENCIES) @rm -f cat_authproto$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cat_authproto_OBJECTS) $(cat_authproto_LDADD) $(LIBS) helpers/dimmer-dimmer.$(OBJEXT): helpers/$(am__dirstamp) \ helpers/$(DEPDIR)/$(am__dirstamp) dimmer$(EXEEXT): $(dimmer_OBJECTS) $(dimmer_DEPENDENCIES) $(EXTRA_dimmer_DEPENDENCIES) @rm -f dimmer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dimmer_OBJECTS) $(dimmer_LDADD) $(LIBS) test/get_compositor-get_compositor.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) get_compositor$(EXEEXT): $(get_compositor_OBJECTS) $(get_compositor_DEPENDENCIES) $(EXTRA_get_compositor_DEPENDENCIES) @rm -f get_compositor$(EXEEXT) $(AM_V_CCLD)$(LINK) $(get_compositor_OBJECTS) $(get_compositor_LDADD) $(LIBS) test/nvidia_break_compositor-nvidia_break_compositor.$(OBJEXT): \ test/$(am__dirstamp) test/$(DEPDIR)/$(am__dirstamp) nvidia_break_compositor$(EXEEXT): $(nvidia_break_compositor_OBJECTS) $(nvidia_break_compositor_DEPENDENCIES) $(EXTRA_nvidia_break_compositor_DEPENDENCIES) @rm -f nvidia_break_compositor$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nvidia_break_compositor_OBJECTS) $(nvidia_break_compositor_LDADD) $(LIBS) helpers/pgrp_placeholder.$(OBJEXT): helpers/$(am__dirstamp) \ helpers/$(DEPDIR)/$(am__dirstamp) pgrp_placeholder$(EXEEXT): $(pgrp_placeholder_OBJECTS) $(pgrp_placeholder_DEPENDENCIES) $(EXTRA_pgrp_placeholder_DEPENDENCIES) @rm -f pgrp_placeholder$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pgrp_placeholder_OBJECTS) $(pgrp_placeholder_LDADD) $(LIBS) test/remap_all-remap_all.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) remap_all$(EXEEXT): $(remap_all_OBJECTS) $(remap_all_DEPENDENCIES) $(EXTRA_remap_all_DEPENDENCIES) @rm -f remap_all$(EXEEXT) $(AM_V_CCLD)$(LINK) $(remap_all_OBJECTS) $(remap_all_LDADD) $(LIBS) helpers/saver_multiplex-monitors.$(OBJEXT): helpers/$(am__dirstamp) \ helpers/$(DEPDIR)/$(am__dirstamp) helpers/saver_multiplex-saver_multiplex.$(OBJEXT): \ helpers/$(am__dirstamp) helpers/$(DEPDIR)/$(am__dirstamp) saver_multiplex$(EXEEXT): $(saver_multiplex_OBJECTS) $(saver_multiplex_DEPENDENCIES) $(EXTRA_saver_multiplex_DEPENDENCIES) @rm -f saver_multiplex$(EXEEXT) $(AM_V_CCLD)$(LINK) $(saver_multiplex_OBJECTS) $(saver_multiplex_LDADD) $(LIBS) helpers/until_nonidle-until_nonidle.$(OBJEXT): \ helpers/$(am__dirstamp) helpers/$(DEPDIR)/$(am__dirstamp) until_nonidle$(EXEEXT): $(until_nonidle_OBJECTS) $(until_nonidle_DEPENDENCIES) $(EXTRA_until_nonidle_DEPENDENCIES) @rm -f until_nonidle$(EXEEXT) $(AM_V_CCLD)$(LINK) $(until_nonidle_OBJECTS) $(until_nonidle_LDADD) $(LIBS) xsecurelock$(EXEEXT): $(xsecurelock_OBJECTS) $(xsecurelock_DEPENDENCIES) $(EXTRA_xsecurelock_DEPENDENCIES) @rm -f xsecurelock$(EXEEXT) $(AM_V_CCLD)$(LINK) $(xsecurelock_OBJECTS) $(xsecurelock_LDADD) $(LIBS) install-helpersSCRIPTS: $(helpers_SCRIPTS) @$(NORMAL_INSTALL) @list='$(helpers_SCRIPTS)'; test -n "$(helpersdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(helpersdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(helpersdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(helpersdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(helpersdir)$$dir" || exit $$?; \ } \ ; done uninstall-helpersSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(helpers_SCRIPTS)'; test -n "$(helpersdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(helpersdir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f helpers/*.$(OBJEXT) -rm -f test/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_x11-env_info.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_x11-env_settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_x11-logging.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_x11-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_x11-wait_pgrp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_x11-wm_properties.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth_x11-xscreensaver_api.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/authproto_pam-env_info.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/authproto_pam-env_settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/authproto_pam-logging.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/authproto_pam-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dimmer-env_settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dimmer-logging.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dimmer-wm_properties.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logging.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remap_all-unmap_all.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saver_multiplex-env_settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saver_multiplex-logging.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saver_multiplex-saver_child.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saver_multiplex-wait_pgrp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saver_multiplex-wm_properties.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saver_multiplex-xscreensaver_api.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/until_nonidle-env_settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/until_nonidle-logging.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/until_nonidle-wait_pgrp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-auth_child.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-env_settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-logging.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-saver_child.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-unmap_all.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-version.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-wait_pgrp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-wm_properties.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsecurelock-xscreensaver_api.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/auth_x11-auth_x11.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/auth_x11-authproto.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/auth_x11-monitors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/authproto.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/authproto_pam-authproto.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/authproto_pam-authproto_pam.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/dimmer-dimmer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/pgrp_placeholder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/saver_multiplex-monitors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@helpers/$(DEPDIR)/until_nonidle-until_nonidle.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/cat_authproto.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/get_compositor-get_compositor.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/remap_all-remap_all.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` auth_x11-env_info.o: env_info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-env_info.o -MD -MP -MF $(DEPDIR)/auth_x11-env_info.Tpo -c -o auth_x11-env_info.o `test -f 'env_info.c' || echo '$(srcdir)/'`env_info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-env_info.Tpo $(DEPDIR)/auth_x11-env_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_info.c' object='auth_x11-env_info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-env_info.o `test -f 'env_info.c' || echo '$(srcdir)/'`env_info.c auth_x11-env_info.obj: env_info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-env_info.obj -MD -MP -MF $(DEPDIR)/auth_x11-env_info.Tpo -c -o auth_x11-env_info.obj `if test -f 'env_info.c'; then $(CYGPATH_W) 'env_info.c'; else $(CYGPATH_W) '$(srcdir)/env_info.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-env_info.Tpo $(DEPDIR)/auth_x11-env_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_info.c' object='auth_x11-env_info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-env_info.obj `if test -f 'env_info.c'; then $(CYGPATH_W) 'env_info.c'; else $(CYGPATH_W) '$(srcdir)/env_info.c'; fi` auth_x11-env_settings.o: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-env_settings.o -MD -MP -MF $(DEPDIR)/auth_x11-env_settings.Tpo -c -o auth_x11-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-env_settings.Tpo $(DEPDIR)/auth_x11-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='auth_x11-env_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c auth_x11-env_settings.obj: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-env_settings.obj -MD -MP -MF $(DEPDIR)/auth_x11-env_settings.Tpo -c -o auth_x11-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-env_settings.Tpo $(DEPDIR)/auth_x11-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='auth_x11-env_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` helpers/auth_x11-authproto.o: helpers/authproto.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/auth_x11-authproto.o -MD -MP -MF helpers/$(DEPDIR)/auth_x11-authproto.Tpo -c -o helpers/auth_x11-authproto.o `test -f 'helpers/authproto.c' || echo '$(srcdir)/'`helpers/authproto.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/auth_x11-authproto.Tpo helpers/$(DEPDIR)/auth_x11-authproto.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/authproto.c' object='helpers/auth_x11-authproto.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/auth_x11-authproto.o `test -f 'helpers/authproto.c' || echo '$(srcdir)/'`helpers/authproto.c helpers/auth_x11-authproto.obj: helpers/authproto.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/auth_x11-authproto.obj -MD -MP -MF helpers/$(DEPDIR)/auth_x11-authproto.Tpo -c -o helpers/auth_x11-authproto.obj `if test -f 'helpers/authproto.c'; then $(CYGPATH_W) 'helpers/authproto.c'; else $(CYGPATH_W) '$(srcdir)/helpers/authproto.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/auth_x11-authproto.Tpo helpers/$(DEPDIR)/auth_x11-authproto.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/authproto.c' object='helpers/auth_x11-authproto.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/auth_x11-authproto.obj `if test -f 'helpers/authproto.c'; then $(CYGPATH_W) 'helpers/authproto.c'; else $(CYGPATH_W) '$(srcdir)/helpers/authproto.c'; fi` helpers/auth_x11-auth_x11.o: helpers/auth_x11.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/auth_x11-auth_x11.o -MD -MP -MF helpers/$(DEPDIR)/auth_x11-auth_x11.Tpo -c -o helpers/auth_x11-auth_x11.o `test -f 'helpers/auth_x11.c' || echo '$(srcdir)/'`helpers/auth_x11.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/auth_x11-auth_x11.Tpo helpers/$(DEPDIR)/auth_x11-auth_x11.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/auth_x11.c' object='helpers/auth_x11-auth_x11.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/auth_x11-auth_x11.o `test -f 'helpers/auth_x11.c' || echo '$(srcdir)/'`helpers/auth_x11.c helpers/auth_x11-auth_x11.obj: helpers/auth_x11.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/auth_x11-auth_x11.obj -MD -MP -MF helpers/$(DEPDIR)/auth_x11-auth_x11.Tpo -c -o helpers/auth_x11-auth_x11.obj `if test -f 'helpers/auth_x11.c'; then $(CYGPATH_W) 'helpers/auth_x11.c'; else $(CYGPATH_W) '$(srcdir)/helpers/auth_x11.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/auth_x11-auth_x11.Tpo helpers/$(DEPDIR)/auth_x11-auth_x11.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/auth_x11.c' object='helpers/auth_x11-auth_x11.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/auth_x11-auth_x11.obj `if test -f 'helpers/auth_x11.c'; then $(CYGPATH_W) 'helpers/auth_x11.c'; else $(CYGPATH_W) '$(srcdir)/helpers/auth_x11.c'; fi` helpers/auth_x11-monitors.o: helpers/monitors.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/auth_x11-monitors.o -MD -MP -MF helpers/$(DEPDIR)/auth_x11-monitors.Tpo -c -o helpers/auth_x11-monitors.o `test -f 'helpers/monitors.c' || echo '$(srcdir)/'`helpers/monitors.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/auth_x11-monitors.Tpo helpers/$(DEPDIR)/auth_x11-monitors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/monitors.c' object='helpers/auth_x11-monitors.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/auth_x11-monitors.o `test -f 'helpers/monitors.c' || echo '$(srcdir)/'`helpers/monitors.c helpers/auth_x11-monitors.obj: helpers/monitors.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/auth_x11-monitors.obj -MD -MP -MF helpers/$(DEPDIR)/auth_x11-monitors.Tpo -c -o helpers/auth_x11-monitors.obj `if test -f 'helpers/monitors.c'; then $(CYGPATH_W) 'helpers/monitors.c'; else $(CYGPATH_W) '$(srcdir)/helpers/monitors.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/auth_x11-monitors.Tpo helpers/$(DEPDIR)/auth_x11-monitors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/monitors.c' object='helpers/auth_x11-monitors.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/auth_x11-monitors.obj `if test -f 'helpers/monitors.c'; then $(CYGPATH_W) 'helpers/monitors.c'; else $(CYGPATH_W) '$(srcdir)/helpers/monitors.c'; fi` auth_x11-logging.o: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-logging.o -MD -MP -MF $(DEPDIR)/auth_x11-logging.Tpo -c -o auth_x11-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-logging.Tpo $(DEPDIR)/auth_x11-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='auth_x11-logging.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c auth_x11-logging.obj: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-logging.obj -MD -MP -MF $(DEPDIR)/auth_x11-logging.Tpo -c -o auth_x11-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-logging.Tpo $(DEPDIR)/auth_x11-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='auth_x11-logging.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` auth_x11-util.o: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-util.o -MD -MP -MF $(DEPDIR)/auth_x11-util.Tpo -c -o auth_x11-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-util.Tpo $(DEPDIR)/auth_x11-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='auth_x11-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c auth_x11-util.obj: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-util.obj -MD -MP -MF $(DEPDIR)/auth_x11-util.Tpo -c -o auth_x11-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-util.Tpo $(DEPDIR)/auth_x11-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='auth_x11-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` auth_x11-wait_pgrp.o: wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-wait_pgrp.o -MD -MP -MF $(DEPDIR)/auth_x11-wait_pgrp.Tpo -c -o auth_x11-wait_pgrp.o `test -f 'wait_pgrp.c' || echo '$(srcdir)/'`wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-wait_pgrp.Tpo $(DEPDIR)/auth_x11-wait_pgrp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait_pgrp.c' object='auth_x11-wait_pgrp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-wait_pgrp.o `test -f 'wait_pgrp.c' || echo '$(srcdir)/'`wait_pgrp.c auth_x11-wait_pgrp.obj: wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-wait_pgrp.obj -MD -MP -MF $(DEPDIR)/auth_x11-wait_pgrp.Tpo -c -o auth_x11-wait_pgrp.obj `if test -f 'wait_pgrp.c'; then $(CYGPATH_W) 'wait_pgrp.c'; else $(CYGPATH_W) '$(srcdir)/wait_pgrp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-wait_pgrp.Tpo $(DEPDIR)/auth_x11-wait_pgrp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait_pgrp.c' object='auth_x11-wait_pgrp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-wait_pgrp.obj `if test -f 'wait_pgrp.c'; then $(CYGPATH_W) 'wait_pgrp.c'; else $(CYGPATH_W) '$(srcdir)/wait_pgrp.c'; fi` auth_x11-wm_properties.o: wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-wm_properties.o -MD -MP -MF $(DEPDIR)/auth_x11-wm_properties.Tpo -c -o auth_x11-wm_properties.o `test -f 'wm_properties.c' || echo '$(srcdir)/'`wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-wm_properties.Tpo $(DEPDIR)/auth_x11-wm_properties.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wm_properties.c' object='auth_x11-wm_properties.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-wm_properties.o `test -f 'wm_properties.c' || echo '$(srcdir)/'`wm_properties.c auth_x11-wm_properties.obj: wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-wm_properties.obj -MD -MP -MF $(DEPDIR)/auth_x11-wm_properties.Tpo -c -o auth_x11-wm_properties.obj `if test -f 'wm_properties.c'; then $(CYGPATH_W) 'wm_properties.c'; else $(CYGPATH_W) '$(srcdir)/wm_properties.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-wm_properties.Tpo $(DEPDIR)/auth_x11-wm_properties.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wm_properties.c' object='auth_x11-wm_properties.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-wm_properties.obj `if test -f 'wm_properties.c'; then $(CYGPATH_W) 'wm_properties.c'; else $(CYGPATH_W) '$(srcdir)/wm_properties.c'; fi` auth_x11-xscreensaver_api.o: xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-xscreensaver_api.o -MD -MP -MF $(DEPDIR)/auth_x11-xscreensaver_api.Tpo -c -o auth_x11-xscreensaver_api.o `test -f 'xscreensaver_api.c' || echo '$(srcdir)/'`xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-xscreensaver_api.Tpo $(DEPDIR)/auth_x11-xscreensaver_api.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xscreensaver_api.c' object='auth_x11-xscreensaver_api.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-xscreensaver_api.o `test -f 'xscreensaver_api.c' || echo '$(srcdir)/'`xscreensaver_api.c auth_x11-xscreensaver_api.obj: xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT auth_x11-xscreensaver_api.obj -MD -MP -MF $(DEPDIR)/auth_x11-xscreensaver_api.Tpo -c -o auth_x11-xscreensaver_api.obj `if test -f 'xscreensaver_api.c'; then $(CYGPATH_W) 'xscreensaver_api.c'; else $(CYGPATH_W) '$(srcdir)/xscreensaver_api.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/auth_x11-xscreensaver_api.Tpo $(DEPDIR)/auth_x11-xscreensaver_api.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xscreensaver_api.c' object='auth_x11-xscreensaver_api.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(auth_x11_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o auth_x11-xscreensaver_api.obj `if test -f 'xscreensaver_api.c'; then $(CYGPATH_W) 'xscreensaver_api.c'; else $(CYGPATH_W) '$(srcdir)/xscreensaver_api.c'; fi` authproto_pam-env_info.o: env_info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT authproto_pam-env_info.o -MD -MP -MF $(DEPDIR)/authproto_pam-env_info.Tpo -c -o authproto_pam-env_info.o `test -f 'env_info.c' || echo '$(srcdir)/'`env_info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/authproto_pam-env_info.Tpo $(DEPDIR)/authproto_pam-env_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_info.c' object='authproto_pam-env_info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o authproto_pam-env_info.o `test -f 'env_info.c' || echo '$(srcdir)/'`env_info.c authproto_pam-env_info.obj: env_info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT authproto_pam-env_info.obj -MD -MP -MF $(DEPDIR)/authproto_pam-env_info.Tpo -c -o authproto_pam-env_info.obj `if test -f 'env_info.c'; then $(CYGPATH_W) 'env_info.c'; else $(CYGPATH_W) '$(srcdir)/env_info.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/authproto_pam-env_info.Tpo $(DEPDIR)/authproto_pam-env_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_info.c' object='authproto_pam-env_info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o authproto_pam-env_info.obj `if test -f 'env_info.c'; then $(CYGPATH_W) 'env_info.c'; else $(CYGPATH_W) '$(srcdir)/env_info.c'; fi` authproto_pam-env_settings.o: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT authproto_pam-env_settings.o -MD -MP -MF $(DEPDIR)/authproto_pam-env_settings.Tpo -c -o authproto_pam-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/authproto_pam-env_settings.Tpo $(DEPDIR)/authproto_pam-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='authproto_pam-env_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o authproto_pam-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c authproto_pam-env_settings.obj: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT authproto_pam-env_settings.obj -MD -MP -MF $(DEPDIR)/authproto_pam-env_settings.Tpo -c -o authproto_pam-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/authproto_pam-env_settings.Tpo $(DEPDIR)/authproto_pam-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='authproto_pam-env_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o authproto_pam-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` helpers/authproto_pam-authproto.o: helpers/authproto.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/authproto_pam-authproto.o -MD -MP -MF helpers/$(DEPDIR)/authproto_pam-authproto.Tpo -c -o helpers/authproto_pam-authproto.o `test -f 'helpers/authproto.c' || echo '$(srcdir)/'`helpers/authproto.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/authproto_pam-authproto.Tpo helpers/$(DEPDIR)/authproto_pam-authproto.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/authproto.c' object='helpers/authproto_pam-authproto.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/authproto_pam-authproto.o `test -f 'helpers/authproto.c' || echo '$(srcdir)/'`helpers/authproto.c helpers/authproto_pam-authproto.obj: helpers/authproto.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/authproto_pam-authproto.obj -MD -MP -MF helpers/$(DEPDIR)/authproto_pam-authproto.Tpo -c -o helpers/authproto_pam-authproto.obj `if test -f 'helpers/authproto.c'; then $(CYGPATH_W) 'helpers/authproto.c'; else $(CYGPATH_W) '$(srcdir)/helpers/authproto.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/authproto_pam-authproto.Tpo helpers/$(DEPDIR)/authproto_pam-authproto.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/authproto.c' object='helpers/authproto_pam-authproto.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/authproto_pam-authproto.obj `if test -f 'helpers/authproto.c'; then $(CYGPATH_W) 'helpers/authproto.c'; else $(CYGPATH_W) '$(srcdir)/helpers/authproto.c'; fi` helpers/authproto_pam-authproto_pam.o: helpers/authproto_pam.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/authproto_pam-authproto_pam.o -MD -MP -MF helpers/$(DEPDIR)/authproto_pam-authproto_pam.Tpo -c -o helpers/authproto_pam-authproto_pam.o `test -f 'helpers/authproto_pam.c' || echo '$(srcdir)/'`helpers/authproto_pam.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/authproto_pam-authproto_pam.Tpo helpers/$(DEPDIR)/authproto_pam-authproto_pam.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/authproto_pam.c' object='helpers/authproto_pam-authproto_pam.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/authproto_pam-authproto_pam.o `test -f 'helpers/authproto_pam.c' || echo '$(srcdir)/'`helpers/authproto_pam.c helpers/authproto_pam-authproto_pam.obj: helpers/authproto_pam.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/authproto_pam-authproto_pam.obj -MD -MP -MF helpers/$(DEPDIR)/authproto_pam-authproto_pam.Tpo -c -o helpers/authproto_pam-authproto_pam.obj `if test -f 'helpers/authproto_pam.c'; then $(CYGPATH_W) 'helpers/authproto_pam.c'; else $(CYGPATH_W) '$(srcdir)/helpers/authproto_pam.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/authproto_pam-authproto_pam.Tpo helpers/$(DEPDIR)/authproto_pam-authproto_pam.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/authproto_pam.c' object='helpers/authproto_pam-authproto_pam.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/authproto_pam-authproto_pam.obj `if test -f 'helpers/authproto_pam.c'; then $(CYGPATH_W) 'helpers/authproto_pam.c'; else $(CYGPATH_W) '$(srcdir)/helpers/authproto_pam.c'; fi` authproto_pam-logging.o: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT authproto_pam-logging.o -MD -MP -MF $(DEPDIR)/authproto_pam-logging.Tpo -c -o authproto_pam-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/authproto_pam-logging.Tpo $(DEPDIR)/authproto_pam-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='authproto_pam-logging.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o authproto_pam-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c authproto_pam-logging.obj: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT authproto_pam-logging.obj -MD -MP -MF $(DEPDIR)/authproto_pam-logging.Tpo -c -o authproto_pam-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/authproto_pam-logging.Tpo $(DEPDIR)/authproto_pam-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='authproto_pam-logging.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o authproto_pam-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` authproto_pam-util.o: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT authproto_pam-util.o -MD -MP -MF $(DEPDIR)/authproto_pam-util.Tpo -c -o authproto_pam-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/authproto_pam-util.Tpo $(DEPDIR)/authproto_pam-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='authproto_pam-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o authproto_pam-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c authproto_pam-util.obj: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT authproto_pam-util.obj -MD -MP -MF $(DEPDIR)/authproto_pam-util.Tpo -c -o authproto_pam-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/authproto_pam-util.Tpo $(DEPDIR)/authproto_pam-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='authproto_pam-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(authproto_pam_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o authproto_pam-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` dimmer-env_settings.o: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dimmer-env_settings.o -MD -MP -MF $(DEPDIR)/dimmer-env_settings.Tpo -c -o dimmer-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dimmer-env_settings.Tpo $(DEPDIR)/dimmer-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='dimmer-env_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dimmer-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c dimmer-env_settings.obj: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dimmer-env_settings.obj -MD -MP -MF $(DEPDIR)/dimmer-env_settings.Tpo -c -o dimmer-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dimmer-env_settings.Tpo $(DEPDIR)/dimmer-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='dimmer-env_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dimmer-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` helpers/dimmer-dimmer.o: helpers/dimmer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/dimmer-dimmer.o -MD -MP -MF helpers/$(DEPDIR)/dimmer-dimmer.Tpo -c -o helpers/dimmer-dimmer.o `test -f 'helpers/dimmer.c' || echo '$(srcdir)/'`helpers/dimmer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/dimmer-dimmer.Tpo helpers/$(DEPDIR)/dimmer-dimmer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/dimmer.c' object='helpers/dimmer-dimmer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/dimmer-dimmer.o `test -f 'helpers/dimmer.c' || echo '$(srcdir)/'`helpers/dimmer.c helpers/dimmer-dimmer.obj: helpers/dimmer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/dimmer-dimmer.obj -MD -MP -MF helpers/$(DEPDIR)/dimmer-dimmer.Tpo -c -o helpers/dimmer-dimmer.obj `if test -f 'helpers/dimmer.c'; then $(CYGPATH_W) 'helpers/dimmer.c'; else $(CYGPATH_W) '$(srcdir)/helpers/dimmer.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/dimmer-dimmer.Tpo helpers/$(DEPDIR)/dimmer-dimmer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/dimmer.c' object='helpers/dimmer-dimmer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/dimmer-dimmer.obj `if test -f 'helpers/dimmer.c'; then $(CYGPATH_W) 'helpers/dimmer.c'; else $(CYGPATH_W) '$(srcdir)/helpers/dimmer.c'; fi` dimmer-logging.o: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dimmer-logging.o -MD -MP -MF $(DEPDIR)/dimmer-logging.Tpo -c -o dimmer-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dimmer-logging.Tpo $(DEPDIR)/dimmer-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='dimmer-logging.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dimmer-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c dimmer-logging.obj: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dimmer-logging.obj -MD -MP -MF $(DEPDIR)/dimmer-logging.Tpo -c -o dimmer-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dimmer-logging.Tpo $(DEPDIR)/dimmer-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='dimmer-logging.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dimmer-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` dimmer-wm_properties.o: wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dimmer-wm_properties.o -MD -MP -MF $(DEPDIR)/dimmer-wm_properties.Tpo -c -o dimmer-wm_properties.o `test -f 'wm_properties.c' || echo '$(srcdir)/'`wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dimmer-wm_properties.Tpo $(DEPDIR)/dimmer-wm_properties.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wm_properties.c' object='dimmer-wm_properties.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dimmer-wm_properties.o `test -f 'wm_properties.c' || echo '$(srcdir)/'`wm_properties.c dimmer-wm_properties.obj: wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dimmer-wm_properties.obj -MD -MP -MF $(DEPDIR)/dimmer-wm_properties.Tpo -c -o dimmer-wm_properties.obj `if test -f 'wm_properties.c'; then $(CYGPATH_W) 'wm_properties.c'; else $(CYGPATH_W) '$(srcdir)/wm_properties.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dimmer-wm_properties.Tpo $(DEPDIR)/dimmer-wm_properties.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wm_properties.c' object='dimmer-wm_properties.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dimmer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dimmer-wm_properties.obj `if test -f 'wm_properties.c'; then $(CYGPATH_W) 'wm_properties.c'; else $(CYGPATH_W) '$(srcdir)/wm_properties.c'; fi` test/get_compositor-get_compositor.o: test/get_compositor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_compositor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test/get_compositor-get_compositor.o -MD -MP -MF test/$(DEPDIR)/get_compositor-get_compositor.Tpo -c -o test/get_compositor-get_compositor.o `test -f 'test/get_compositor.c' || echo '$(srcdir)/'`test/get_compositor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/get_compositor-get_compositor.Tpo test/$(DEPDIR)/get_compositor-get_compositor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/get_compositor.c' object='test/get_compositor-get_compositor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_compositor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test/get_compositor-get_compositor.o `test -f 'test/get_compositor.c' || echo '$(srcdir)/'`test/get_compositor.c test/get_compositor-get_compositor.obj: test/get_compositor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_compositor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test/get_compositor-get_compositor.obj -MD -MP -MF test/$(DEPDIR)/get_compositor-get_compositor.Tpo -c -o test/get_compositor-get_compositor.obj `if test -f 'test/get_compositor.c'; then $(CYGPATH_W) 'test/get_compositor.c'; else $(CYGPATH_W) '$(srcdir)/test/get_compositor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/get_compositor-get_compositor.Tpo test/$(DEPDIR)/get_compositor-get_compositor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/get_compositor.c' object='test/get_compositor-get_compositor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_compositor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test/get_compositor-get_compositor.obj `if test -f 'test/get_compositor.c'; then $(CYGPATH_W) 'test/get_compositor.c'; else $(CYGPATH_W) '$(srcdir)/test/get_compositor.c'; fi` test/nvidia_break_compositor-nvidia_break_compositor.o: test/nvidia_break_compositor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nvidia_break_compositor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test/nvidia_break_compositor-nvidia_break_compositor.o -MD -MP -MF test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Tpo -c -o test/nvidia_break_compositor-nvidia_break_compositor.o `test -f 'test/nvidia_break_compositor.c' || echo '$(srcdir)/'`test/nvidia_break_compositor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Tpo test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/nvidia_break_compositor.c' object='test/nvidia_break_compositor-nvidia_break_compositor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nvidia_break_compositor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test/nvidia_break_compositor-nvidia_break_compositor.o `test -f 'test/nvidia_break_compositor.c' || echo '$(srcdir)/'`test/nvidia_break_compositor.c test/nvidia_break_compositor-nvidia_break_compositor.obj: test/nvidia_break_compositor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nvidia_break_compositor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test/nvidia_break_compositor-nvidia_break_compositor.obj -MD -MP -MF test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Tpo -c -o test/nvidia_break_compositor-nvidia_break_compositor.obj `if test -f 'test/nvidia_break_compositor.c'; then $(CYGPATH_W) 'test/nvidia_break_compositor.c'; else $(CYGPATH_W) '$(srcdir)/test/nvidia_break_compositor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Tpo test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/nvidia_break_compositor.c' object='test/nvidia_break_compositor-nvidia_break_compositor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nvidia_break_compositor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test/nvidia_break_compositor-nvidia_break_compositor.obj `if test -f 'test/nvidia_break_compositor.c'; then $(CYGPATH_W) 'test/nvidia_break_compositor.c'; else $(CYGPATH_W) '$(srcdir)/test/nvidia_break_compositor.c'; fi` test/remap_all-remap_all.o: test/remap_all.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(remap_all_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test/remap_all-remap_all.o -MD -MP -MF test/$(DEPDIR)/remap_all-remap_all.Tpo -c -o test/remap_all-remap_all.o `test -f 'test/remap_all.c' || echo '$(srcdir)/'`test/remap_all.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/remap_all-remap_all.Tpo test/$(DEPDIR)/remap_all-remap_all.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/remap_all.c' object='test/remap_all-remap_all.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(remap_all_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test/remap_all-remap_all.o `test -f 'test/remap_all.c' || echo '$(srcdir)/'`test/remap_all.c test/remap_all-remap_all.obj: test/remap_all.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(remap_all_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test/remap_all-remap_all.obj -MD -MP -MF test/$(DEPDIR)/remap_all-remap_all.Tpo -c -o test/remap_all-remap_all.obj `if test -f 'test/remap_all.c'; then $(CYGPATH_W) 'test/remap_all.c'; else $(CYGPATH_W) '$(srcdir)/test/remap_all.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/remap_all-remap_all.Tpo test/$(DEPDIR)/remap_all-remap_all.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/remap_all.c' object='test/remap_all-remap_all.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(remap_all_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test/remap_all-remap_all.obj `if test -f 'test/remap_all.c'; then $(CYGPATH_W) 'test/remap_all.c'; else $(CYGPATH_W) '$(srcdir)/test/remap_all.c'; fi` remap_all-unmap_all.o: unmap_all.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(remap_all_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT remap_all-unmap_all.o -MD -MP -MF $(DEPDIR)/remap_all-unmap_all.Tpo -c -o remap_all-unmap_all.o `test -f 'unmap_all.c' || echo '$(srcdir)/'`unmap_all.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/remap_all-unmap_all.Tpo $(DEPDIR)/remap_all-unmap_all.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unmap_all.c' object='remap_all-unmap_all.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(remap_all_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o remap_all-unmap_all.o `test -f 'unmap_all.c' || echo '$(srcdir)/'`unmap_all.c remap_all-unmap_all.obj: unmap_all.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(remap_all_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT remap_all-unmap_all.obj -MD -MP -MF $(DEPDIR)/remap_all-unmap_all.Tpo -c -o remap_all-unmap_all.obj `if test -f 'unmap_all.c'; then $(CYGPATH_W) 'unmap_all.c'; else $(CYGPATH_W) '$(srcdir)/unmap_all.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/remap_all-unmap_all.Tpo $(DEPDIR)/remap_all-unmap_all.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unmap_all.c' object='remap_all-unmap_all.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(remap_all_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o remap_all-unmap_all.obj `if test -f 'unmap_all.c'; then $(CYGPATH_W) 'unmap_all.c'; else $(CYGPATH_W) '$(srcdir)/unmap_all.c'; fi` saver_multiplex-env_settings.o: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-env_settings.o -MD -MP -MF $(DEPDIR)/saver_multiplex-env_settings.Tpo -c -o saver_multiplex-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-env_settings.Tpo $(DEPDIR)/saver_multiplex-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='saver_multiplex-env_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c saver_multiplex-env_settings.obj: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-env_settings.obj -MD -MP -MF $(DEPDIR)/saver_multiplex-env_settings.Tpo -c -o saver_multiplex-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-env_settings.Tpo $(DEPDIR)/saver_multiplex-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='saver_multiplex-env_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` helpers/saver_multiplex-monitors.o: helpers/monitors.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/saver_multiplex-monitors.o -MD -MP -MF helpers/$(DEPDIR)/saver_multiplex-monitors.Tpo -c -o helpers/saver_multiplex-monitors.o `test -f 'helpers/monitors.c' || echo '$(srcdir)/'`helpers/monitors.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/saver_multiplex-monitors.Tpo helpers/$(DEPDIR)/saver_multiplex-monitors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/monitors.c' object='helpers/saver_multiplex-monitors.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/saver_multiplex-monitors.o `test -f 'helpers/monitors.c' || echo '$(srcdir)/'`helpers/monitors.c helpers/saver_multiplex-monitors.obj: helpers/monitors.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/saver_multiplex-monitors.obj -MD -MP -MF helpers/$(DEPDIR)/saver_multiplex-monitors.Tpo -c -o helpers/saver_multiplex-monitors.obj `if test -f 'helpers/monitors.c'; then $(CYGPATH_W) 'helpers/monitors.c'; else $(CYGPATH_W) '$(srcdir)/helpers/monitors.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/saver_multiplex-monitors.Tpo helpers/$(DEPDIR)/saver_multiplex-monitors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/monitors.c' object='helpers/saver_multiplex-monitors.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/saver_multiplex-monitors.obj `if test -f 'helpers/monitors.c'; then $(CYGPATH_W) 'helpers/monitors.c'; else $(CYGPATH_W) '$(srcdir)/helpers/monitors.c'; fi` helpers/saver_multiplex-saver_multiplex.o: helpers/saver_multiplex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/saver_multiplex-saver_multiplex.o -MD -MP -MF helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Tpo -c -o helpers/saver_multiplex-saver_multiplex.o `test -f 'helpers/saver_multiplex.c' || echo '$(srcdir)/'`helpers/saver_multiplex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Tpo helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/saver_multiplex.c' object='helpers/saver_multiplex-saver_multiplex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/saver_multiplex-saver_multiplex.o `test -f 'helpers/saver_multiplex.c' || echo '$(srcdir)/'`helpers/saver_multiplex.c helpers/saver_multiplex-saver_multiplex.obj: helpers/saver_multiplex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/saver_multiplex-saver_multiplex.obj -MD -MP -MF helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Tpo -c -o helpers/saver_multiplex-saver_multiplex.obj `if test -f 'helpers/saver_multiplex.c'; then $(CYGPATH_W) 'helpers/saver_multiplex.c'; else $(CYGPATH_W) '$(srcdir)/helpers/saver_multiplex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Tpo helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/saver_multiplex.c' object='helpers/saver_multiplex-saver_multiplex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/saver_multiplex-saver_multiplex.obj `if test -f 'helpers/saver_multiplex.c'; then $(CYGPATH_W) 'helpers/saver_multiplex.c'; else $(CYGPATH_W) '$(srcdir)/helpers/saver_multiplex.c'; fi` saver_multiplex-logging.o: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-logging.o -MD -MP -MF $(DEPDIR)/saver_multiplex-logging.Tpo -c -o saver_multiplex-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-logging.Tpo $(DEPDIR)/saver_multiplex-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='saver_multiplex-logging.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c saver_multiplex-logging.obj: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-logging.obj -MD -MP -MF $(DEPDIR)/saver_multiplex-logging.Tpo -c -o saver_multiplex-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-logging.Tpo $(DEPDIR)/saver_multiplex-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='saver_multiplex-logging.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` saver_multiplex-saver_child.o: saver_child.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-saver_child.o -MD -MP -MF $(DEPDIR)/saver_multiplex-saver_child.Tpo -c -o saver_multiplex-saver_child.o `test -f 'saver_child.c' || echo '$(srcdir)/'`saver_child.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-saver_child.Tpo $(DEPDIR)/saver_multiplex-saver_child.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='saver_child.c' object='saver_multiplex-saver_child.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-saver_child.o `test -f 'saver_child.c' || echo '$(srcdir)/'`saver_child.c saver_multiplex-saver_child.obj: saver_child.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-saver_child.obj -MD -MP -MF $(DEPDIR)/saver_multiplex-saver_child.Tpo -c -o saver_multiplex-saver_child.obj `if test -f 'saver_child.c'; then $(CYGPATH_W) 'saver_child.c'; else $(CYGPATH_W) '$(srcdir)/saver_child.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-saver_child.Tpo $(DEPDIR)/saver_multiplex-saver_child.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='saver_child.c' object='saver_multiplex-saver_child.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-saver_child.obj `if test -f 'saver_child.c'; then $(CYGPATH_W) 'saver_child.c'; else $(CYGPATH_W) '$(srcdir)/saver_child.c'; fi` saver_multiplex-wait_pgrp.o: wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-wait_pgrp.o -MD -MP -MF $(DEPDIR)/saver_multiplex-wait_pgrp.Tpo -c -o saver_multiplex-wait_pgrp.o `test -f 'wait_pgrp.c' || echo '$(srcdir)/'`wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-wait_pgrp.Tpo $(DEPDIR)/saver_multiplex-wait_pgrp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait_pgrp.c' object='saver_multiplex-wait_pgrp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-wait_pgrp.o `test -f 'wait_pgrp.c' || echo '$(srcdir)/'`wait_pgrp.c saver_multiplex-wait_pgrp.obj: wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-wait_pgrp.obj -MD -MP -MF $(DEPDIR)/saver_multiplex-wait_pgrp.Tpo -c -o saver_multiplex-wait_pgrp.obj `if test -f 'wait_pgrp.c'; then $(CYGPATH_W) 'wait_pgrp.c'; else $(CYGPATH_W) '$(srcdir)/wait_pgrp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-wait_pgrp.Tpo $(DEPDIR)/saver_multiplex-wait_pgrp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait_pgrp.c' object='saver_multiplex-wait_pgrp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-wait_pgrp.obj `if test -f 'wait_pgrp.c'; then $(CYGPATH_W) 'wait_pgrp.c'; else $(CYGPATH_W) '$(srcdir)/wait_pgrp.c'; fi` saver_multiplex-wm_properties.o: wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-wm_properties.o -MD -MP -MF $(DEPDIR)/saver_multiplex-wm_properties.Tpo -c -o saver_multiplex-wm_properties.o `test -f 'wm_properties.c' || echo '$(srcdir)/'`wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-wm_properties.Tpo $(DEPDIR)/saver_multiplex-wm_properties.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wm_properties.c' object='saver_multiplex-wm_properties.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-wm_properties.o `test -f 'wm_properties.c' || echo '$(srcdir)/'`wm_properties.c saver_multiplex-wm_properties.obj: wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-wm_properties.obj -MD -MP -MF $(DEPDIR)/saver_multiplex-wm_properties.Tpo -c -o saver_multiplex-wm_properties.obj `if test -f 'wm_properties.c'; then $(CYGPATH_W) 'wm_properties.c'; else $(CYGPATH_W) '$(srcdir)/wm_properties.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-wm_properties.Tpo $(DEPDIR)/saver_multiplex-wm_properties.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wm_properties.c' object='saver_multiplex-wm_properties.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-wm_properties.obj `if test -f 'wm_properties.c'; then $(CYGPATH_W) 'wm_properties.c'; else $(CYGPATH_W) '$(srcdir)/wm_properties.c'; fi` saver_multiplex-xscreensaver_api.o: xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-xscreensaver_api.o -MD -MP -MF $(DEPDIR)/saver_multiplex-xscreensaver_api.Tpo -c -o saver_multiplex-xscreensaver_api.o `test -f 'xscreensaver_api.c' || echo '$(srcdir)/'`xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-xscreensaver_api.Tpo $(DEPDIR)/saver_multiplex-xscreensaver_api.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xscreensaver_api.c' object='saver_multiplex-xscreensaver_api.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-xscreensaver_api.o `test -f 'xscreensaver_api.c' || echo '$(srcdir)/'`xscreensaver_api.c saver_multiplex-xscreensaver_api.obj: xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT saver_multiplex-xscreensaver_api.obj -MD -MP -MF $(DEPDIR)/saver_multiplex-xscreensaver_api.Tpo -c -o saver_multiplex-xscreensaver_api.obj `if test -f 'xscreensaver_api.c'; then $(CYGPATH_W) 'xscreensaver_api.c'; else $(CYGPATH_W) '$(srcdir)/xscreensaver_api.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/saver_multiplex-xscreensaver_api.Tpo $(DEPDIR)/saver_multiplex-xscreensaver_api.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xscreensaver_api.c' object='saver_multiplex-xscreensaver_api.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(saver_multiplex_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o saver_multiplex-xscreensaver_api.obj `if test -f 'xscreensaver_api.c'; then $(CYGPATH_W) 'xscreensaver_api.c'; else $(CYGPATH_W) '$(srcdir)/xscreensaver_api.c'; fi` until_nonidle-env_settings.o: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT until_nonidle-env_settings.o -MD -MP -MF $(DEPDIR)/until_nonidle-env_settings.Tpo -c -o until_nonidle-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/until_nonidle-env_settings.Tpo $(DEPDIR)/until_nonidle-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='until_nonidle-env_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o until_nonidle-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c until_nonidle-env_settings.obj: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT until_nonidle-env_settings.obj -MD -MP -MF $(DEPDIR)/until_nonidle-env_settings.Tpo -c -o until_nonidle-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/until_nonidle-env_settings.Tpo $(DEPDIR)/until_nonidle-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='until_nonidle-env_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o until_nonidle-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` helpers/until_nonidle-until_nonidle.o: helpers/until_nonidle.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/until_nonidle-until_nonidle.o -MD -MP -MF helpers/$(DEPDIR)/until_nonidle-until_nonidle.Tpo -c -o helpers/until_nonidle-until_nonidle.o `test -f 'helpers/until_nonidle.c' || echo '$(srcdir)/'`helpers/until_nonidle.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/until_nonidle-until_nonidle.Tpo helpers/$(DEPDIR)/until_nonidle-until_nonidle.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/until_nonidle.c' object='helpers/until_nonidle-until_nonidle.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/until_nonidle-until_nonidle.o `test -f 'helpers/until_nonidle.c' || echo '$(srcdir)/'`helpers/until_nonidle.c helpers/until_nonidle-until_nonidle.obj: helpers/until_nonidle.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT helpers/until_nonidle-until_nonidle.obj -MD -MP -MF helpers/$(DEPDIR)/until_nonidle-until_nonidle.Tpo -c -o helpers/until_nonidle-until_nonidle.obj `if test -f 'helpers/until_nonidle.c'; then $(CYGPATH_W) 'helpers/until_nonidle.c'; else $(CYGPATH_W) '$(srcdir)/helpers/until_nonidle.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) helpers/$(DEPDIR)/until_nonidle-until_nonidle.Tpo helpers/$(DEPDIR)/until_nonidle-until_nonidle.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='helpers/until_nonidle.c' object='helpers/until_nonidle-until_nonidle.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o helpers/until_nonidle-until_nonidle.obj `if test -f 'helpers/until_nonidle.c'; then $(CYGPATH_W) 'helpers/until_nonidle.c'; else $(CYGPATH_W) '$(srcdir)/helpers/until_nonidle.c'; fi` until_nonidle-logging.o: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT until_nonidle-logging.o -MD -MP -MF $(DEPDIR)/until_nonidle-logging.Tpo -c -o until_nonidle-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/until_nonidle-logging.Tpo $(DEPDIR)/until_nonidle-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='until_nonidle-logging.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o until_nonidle-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c until_nonidle-logging.obj: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT until_nonidle-logging.obj -MD -MP -MF $(DEPDIR)/until_nonidle-logging.Tpo -c -o until_nonidle-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/until_nonidle-logging.Tpo $(DEPDIR)/until_nonidle-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='until_nonidle-logging.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o until_nonidle-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` until_nonidle-wait_pgrp.o: wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT until_nonidle-wait_pgrp.o -MD -MP -MF $(DEPDIR)/until_nonidle-wait_pgrp.Tpo -c -o until_nonidle-wait_pgrp.o `test -f 'wait_pgrp.c' || echo '$(srcdir)/'`wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/until_nonidle-wait_pgrp.Tpo $(DEPDIR)/until_nonidle-wait_pgrp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait_pgrp.c' object='until_nonidle-wait_pgrp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o until_nonidle-wait_pgrp.o `test -f 'wait_pgrp.c' || echo '$(srcdir)/'`wait_pgrp.c until_nonidle-wait_pgrp.obj: wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT until_nonidle-wait_pgrp.obj -MD -MP -MF $(DEPDIR)/until_nonidle-wait_pgrp.Tpo -c -o until_nonidle-wait_pgrp.obj `if test -f 'wait_pgrp.c'; then $(CYGPATH_W) 'wait_pgrp.c'; else $(CYGPATH_W) '$(srcdir)/wait_pgrp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/until_nonidle-wait_pgrp.Tpo $(DEPDIR)/until_nonidle-wait_pgrp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait_pgrp.c' object='until_nonidle-wait_pgrp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(until_nonidle_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o until_nonidle-wait_pgrp.obj `if test -f 'wait_pgrp.c'; then $(CYGPATH_W) 'wait_pgrp.c'; else $(CYGPATH_W) '$(srcdir)/wait_pgrp.c'; fi` xsecurelock-auth_child.o: auth_child.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-auth_child.o -MD -MP -MF $(DEPDIR)/xsecurelock-auth_child.Tpo -c -o xsecurelock-auth_child.o `test -f 'auth_child.c' || echo '$(srcdir)/'`auth_child.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-auth_child.Tpo $(DEPDIR)/xsecurelock-auth_child.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='auth_child.c' object='xsecurelock-auth_child.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-auth_child.o `test -f 'auth_child.c' || echo '$(srcdir)/'`auth_child.c xsecurelock-auth_child.obj: auth_child.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-auth_child.obj -MD -MP -MF $(DEPDIR)/xsecurelock-auth_child.Tpo -c -o xsecurelock-auth_child.obj `if test -f 'auth_child.c'; then $(CYGPATH_W) 'auth_child.c'; else $(CYGPATH_W) '$(srcdir)/auth_child.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-auth_child.Tpo $(DEPDIR)/xsecurelock-auth_child.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='auth_child.c' object='xsecurelock-auth_child.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-auth_child.obj `if test -f 'auth_child.c'; then $(CYGPATH_W) 'auth_child.c'; else $(CYGPATH_W) '$(srcdir)/auth_child.c'; fi` xsecurelock-env_settings.o: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-env_settings.o -MD -MP -MF $(DEPDIR)/xsecurelock-env_settings.Tpo -c -o xsecurelock-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-env_settings.Tpo $(DEPDIR)/xsecurelock-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='xsecurelock-env_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-env_settings.o `test -f 'env_settings.c' || echo '$(srcdir)/'`env_settings.c xsecurelock-env_settings.obj: env_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-env_settings.obj -MD -MP -MF $(DEPDIR)/xsecurelock-env_settings.Tpo -c -o xsecurelock-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-env_settings.Tpo $(DEPDIR)/xsecurelock-env_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='env_settings.c' object='xsecurelock-env_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-env_settings.obj `if test -f 'env_settings.c'; then $(CYGPATH_W) 'env_settings.c'; else $(CYGPATH_W) '$(srcdir)/env_settings.c'; fi` xsecurelock-logging.o: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-logging.o -MD -MP -MF $(DEPDIR)/xsecurelock-logging.Tpo -c -o xsecurelock-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-logging.Tpo $(DEPDIR)/xsecurelock-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='xsecurelock-logging.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-logging.o `test -f 'logging.c' || echo '$(srcdir)/'`logging.c xsecurelock-logging.obj: logging.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-logging.obj -MD -MP -MF $(DEPDIR)/xsecurelock-logging.Tpo -c -o xsecurelock-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-logging.Tpo $(DEPDIR)/xsecurelock-logging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logging.c' object='xsecurelock-logging.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-logging.obj `if test -f 'logging.c'; then $(CYGPATH_W) 'logging.c'; else $(CYGPATH_W) '$(srcdir)/logging.c'; fi` xsecurelock-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-main.o -MD -MP -MF $(DEPDIR)/xsecurelock-main.Tpo -c -o xsecurelock-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-main.Tpo $(DEPDIR)/xsecurelock-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='xsecurelock-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c xsecurelock-main.obj: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-main.obj -MD -MP -MF $(DEPDIR)/xsecurelock-main.Tpo -c -o xsecurelock-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-main.Tpo $(DEPDIR)/xsecurelock-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='xsecurelock-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` xsecurelock-saver_child.o: saver_child.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-saver_child.o -MD -MP -MF $(DEPDIR)/xsecurelock-saver_child.Tpo -c -o xsecurelock-saver_child.o `test -f 'saver_child.c' || echo '$(srcdir)/'`saver_child.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-saver_child.Tpo $(DEPDIR)/xsecurelock-saver_child.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='saver_child.c' object='xsecurelock-saver_child.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-saver_child.o `test -f 'saver_child.c' || echo '$(srcdir)/'`saver_child.c xsecurelock-saver_child.obj: saver_child.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-saver_child.obj -MD -MP -MF $(DEPDIR)/xsecurelock-saver_child.Tpo -c -o xsecurelock-saver_child.obj `if test -f 'saver_child.c'; then $(CYGPATH_W) 'saver_child.c'; else $(CYGPATH_W) '$(srcdir)/saver_child.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-saver_child.Tpo $(DEPDIR)/xsecurelock-saver_child.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='saver_child.c' object='xsecurelock-saver_child.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-saver_child.obj `if test -f 'saver_child.c'; then $(CYGPATH_W) 'saver_child.c'; else $(CYGPATH_W) '$(srcdir)/saver_child.c'; fi` xsecurelock-unmap_all.o: unmap_all.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-unmap_all.o -MD -MP -MF $(DEPDIR)/xsecurelock-unmap_all.Tpo -c -o xsecurelock-unmap_all.o `test -f 'unmap_all.c' || echo '$(srcdir)/'`unmap_all.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-unmap_all.Tpo $(DEPDIR)/xsecurelock-unmap_all.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unmap_all.c' object='xsecurelock-unmap_all.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-unmap_all.o `test -f 'unmap_all.c' || echo '$(srcdir)/'`unmap_all.c xsecurelock-unmap_all.obj: unmap_all.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-unmap_all.obj -MD -MP -MF $(DEPDIR)/xsecurelock-unmap_all.Tpo -c -o xsecurelock-unmap_all.obj `if test -f 'unmap_all.c'; then $(CYGPATH_W) 'unmap_all.c'; else $(CYGPATH_W) '$(srcdir)/unmap_all.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-unmap_all.Tpo $(DEPDIR)/xsecurelock-unmap_all.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unmap_all.c' object='xsecurelock-unmap_all.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-unmap_all.obj `if test -f 'unmap_all.c'; then $(CYGPATH_W) 'unmap_all.c'; else $(CYGPATH_W) '$(srcdir)/unmap_all.c'; fi` xsecurelock-util.o: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-util.o -MD -MP -MF $(DEPDIR)/xsecurelock-util.Tpo -c -o xsecurelock-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-util.Tpo $(DEPDIR)/xsecurelock-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='xsecurelock-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c xsecurelock-util.obj: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-util.obj -MD -MP -MF $(DEPDIR)/xsecurelock-util.Tpo -c -o xsecurelock-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-util.Tpo $(DEPDIR)/xsecurelock-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='xsecurelock-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` xsecurelock-version.o: version.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-version.o -MD -MP -MF $(DEPDIR)/xsecurelock-version.Tpo -c -o xsecurelock-version.o `test -f 'version.c' || echo '$(srcdir)/'`version.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-version.Tpo $(DEPDIR)/xsecurelock-version.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='version.c' object='xsecurelock-version.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-version.o `test -f 'version.c' || echo '$(srcdir)/'`version.c xsecurelock-version.obj: version.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-version.obj -MD -MP -MF $(DEPDIR)/xsecurelock-version.Tpo -c -o xsecurelock-version.obj `if test -f 'version.c'; then $(CYGPATH_W) 'version.c'; else $(CYGPATH_W) '$(srcdir)/version.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-version.Tpo $(DEPDIR)/xsecurelock-version.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='version.c' object='xsecurelock-version.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-version.obj `if test -f 'version.c'; then $(CYGPATH_W) 'version.c'; else $(CYGPATH_W) '$(srcdir)/version.c'; fi` xsecurelock-wait_pgrp.o: wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-wait_pgrp.o -MD -MP -MF $(DEPDIR)/xsecurelock-wait_pgrp.Tpo -c -o xsecurelock-wait_pgrp.o `test -f 'wait_pgrp.c' || echo '$(srcdir)/'`wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-wait_pgrp.Tpo $(DEPDIR)/xsecurelock-wait_pgrp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait_pgrp.c' object='xsecurelock-wait_pgrp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-wait_pgrp.o `test -f 'wait_pgrp.c' || echo '$(srcdir)/'`wait_pgrp.c xsecurelock-wait_pgrp.obj: wait_pgrp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-wait_pgrp.obj -MD -MP -MF $(DEPDIR)/xsecurelock-wait_pgrp.Tpo -c -o xsecurelock-wait_pgrp.obj `if test -f 'wait_pgrp.c'; then $(CYGPATH_W) 'wait_pgrp.c'; else $(CYGPATH_W) '$(srcdir)/wait_pgrp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-wait_pgrp.Tpo $(DEPDIR)/xsecurelock-wait_pgrp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait_pgrp.c' object='xsecurelock-wait_pgrp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-wait_pgrp.obj `if test -f 'wait_pgrp.c'; then $(CYGPATH_W) 'wait_pgrp.c'; else $(CYGPATH_W) '$(srcdir)/wait_pgrp.c'; fi` xsecurelock-wm_properties.o: wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-wm_properties.o -MD -MP -MF $(DEPDIR)/xsecurelock-wm_properties.Tpo -c -o xsecurelock-wm_properties.o `test -f 'wm_properties.c' || echo '$(srcdir)/'`wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-wm_properties.Tpo $(DEPDIR)/xsecurelock-wm_properties.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wm_properties.c' object='xsecurelock-wm_properties.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-wm_properties.o `test -f 'wm_properties.c' || echo '$(srcdir)/'`wm_properties.c xsecurelock-wm_properties.obj: wm_properties.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-wm_properties.obj -MD -MP -MF $(DEPDIR)/xsecurelock-wm_properties.Tpo -c -o xsecurelock-wm_properties.obj `if test -f 'wm_properties.c'; then $(CYGPATH_W) 'wm_properties.c'; else $(CYGPATH_W) '$(srcdir)/wm_properties.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-wm_properties.Tpo $(DEPDIR)/xsecurelock-wm_properties.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wm_properties.c' object='xsecurelock-wm_properties.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-wm_properties.obj `if test -f 'wm_properties.c'; then $(CYGPATH_W) 'wm_properties.c'; else $(CYGPATH_W) '$(srcdir)/wm_properties.c'; fi` xsecurelock-xscreensaver_api.o: xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-xscreensaver_api.o -MD -MP -MF $(DEPDIR)/xsecurelock-xscreensaver_api.Tpo -c -o xsecurelock-xscreensaver_api.o `test -f 'xscreensaver_api.c' || echo '$(srcdir)/'`xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-xscreensaver_api.Tpo $(DEPDIR)/xsecurelock-xscreensaver_api.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xscreensaver_api.c' object='xsecurelock-xscreensaver_api.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-xscreensaver_api.o `test -f 'xscreensaver_api.c' || echo '$(srcdir)/'`xscreensaver_api.c xsecurelock-xscreensaver_api.obj: xscreensaver_api.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsecurelock-xscreensaver_api.obj -MD -MP -MF $(DEPDIR)/xsecurelock-xscreensaver_api.Tpo -c -o xsecurelock-xscreensaver_api.obj `if test -f 'xscreensaver_api.c'; then $(CYGPATH_W) 'xscreensaver_api.c'; else $(CYGPATH_W) '$(srcdir)/xscreensaver_api.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xsecurelock-xscreensaver_api.Tpo $(DEPDIR)/xsecurelock-xscreensaver_api.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xscreensaver_api.c' object='xsecurelock-xscreensaver_api.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xsecurelock_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsecurelock-xscreensaver_api.obj `if test -f 'xscreensaver_api.c'; then $(CYGPATH_W) 'xscreensaver_api.c'; else $(CYGPATH_W) '$(srcdir)/xscreensaver_api.c'; fi` install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-dist_examplesDATA: $(dist_examples_DATA) @$(NORMAL_INSTALL) @list='$(dist_examples_DATA)'; test -n "$(examplesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(examplesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(examplesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(examplesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(examplesdir)" || exit $$?; \ done uninstall-dist_examplesDATA: @$(NORMAL_UNINSTALL) @list='$(dist_examples_DATA)'; test -n "$(examplesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(examplesdir)'; $(am__uninstall_files_from_dir) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am @HAVE_DOXYGEN_FALSE@all-local: all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) all-local installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(helpersdir)" "$(DESTDIR)$(helpersdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f helpers/$(DEPDIR)/$(am__dirstamp) -rm -f helpers/$(am__dirstamp) -rm -f test/$(DEPDIR)/$(am__dirstamp) -rm -f test/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @HAVE_DOXYGEN_FALSE@clean-local: clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-helpersPROGRAMS \ clean-local clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f ./$(DEPDIR)/auth_x11-env_info.Po -rm -f ./$(DEPDIR)/auth_x11-env_settings.Po -rm -f ./$(DEPDIR)/auth_x11-logging.Po -rm -f ./$(DEPDIR)/auth_x11-util.Po -rm -f ./$(DEPDIR)/auth_x11-wait_pgrp.Po -rm -f ./$(DEPDIR)/auth_x11-wm_properties.Po -rm -f ./$(DEPDIR)/auth_x11-xscreensaver_api.Po -rm -f ./$(DEPDIR)/authproto_pam-env_info.Po -rm -f ./$(DEPDIR)/authproto_pam-env_settings.Po -rm -f ./$(DEPDIR)/authproto_pam-logging.Po -rm -f ./$(DEPDIR)/authproto_pam-util.Po -rm -f ./$(DEPDIR)/dimmer-env_settings.Po -rm -f ./$(DEPDIR)/dimmer-logging.Po -rm -f ./$(DEPDIR)/dimmer-wm_properties.Po -rm -f ./$(DEPDIR)/logging.Po -rm -f ./$(DEPDIR)/remap_all-unmap_all.Po -rm -f ./$(DEPDIR)/saver_multiplex-env_settings.Po -rm -f ./$(DEPDIR)/saver_multiplex-logging.Po -rm -f ./$(DEPDIR)/saver_multiplex-saver_child.Po -rm -f ./$(DEPDIR)/saver_multiplex-wait_pgrp.Po -rm -f ./$(DEPDIR)/saver_multiplex-wm_properties.Po -rm -f ./$(DEPDIR)/saver_multiplex-xscreensaver_api.Po -rm -f ./$(DEPDIR)/until_nonidle-env_settings.Po -rm -f ./$(DEPDIR)/until_nonidle-logging.Po -rm -f ./$(DEPDIR)/until_nonidle-wait_pgrp.Po -rm -f ./$(DEPDIR)/xsecurelock-auth_child.Po -rm -f ./$(DEPDIR)/xsecurelock-env_settings.Po -rm -f ./$(DEPDIR)/xsecurelock-logging.Po -rm -f ./$(DEPDIR)/xsecurelock-main.Po -rm -f ./$(DEPDIR)/xsecurelock-saver_child.Po -rm -f ./$(DEPDIR)/xsecurelock-unmap_all.Po -rm -f ./$(DEPDIR)/xsecurelock-util.Po -rm -f ./$(DEPDIR)/xsecurelock-version.Po -rm -f ./$(DEPDIR)/xsecurelock-wait_pgrp.Po -rm -f ./$(DEPDIR)/xsecurelock-wm_properties.Po -rm -f ./$(DEPDIR)/xsecurelock-xscreensaver_api.Po -rm -f helpers/$(DEPDIR)/auth_x11-auth_x11.Po -rm -f helpers/$(DEPDIR)/auth_x11-authproto.Po -rm -f helpers/$(DEPDIR)/auth_x11-monitors.Po -rm -f helpers/$(DEPDIR)/authproto.Po -rm -f helpers/$(DEPDIR)/authproto_pam-authproto.Po -rm -f helpers/$(DEPDIR)/authproto_pam-authproto_pam.Po -rm -f helpers/$(DEPDIR)/dimmer-dimmer.Po -rm -f helpers/$(DEPDIR)/pgrp_placeholder.Po -rm -f helpers/$(DEPDIR)/saver_multiplex-monitors.Po -rm -f helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Po -rm -f helpers/$(DEPDIR)/until_nonidle-until_nonidle.Po -rm -f test/$(DEPDIR)/cat_authproto.Po -rm -f test/$(DEPDIR)/get_compositor-get_compositor.Po -rm -f test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Po -rm -f test/$(DEPDIR)/remap_all-remap_all.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_examplesDATA install-docDATA \ install-helpersPROGRAMS install-helpersSCRIPTS install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f ./$(DEPDIR)/auth_x11-env_info.Po -rm -f ./$(DEPDIR)/auth_x11-env_settings.Po -rm -f ./$(DEPDIR)/auth_x11-logging.Po -rm -f ./$(DEPDIR)/auth_x11-util.Po -rm -f ./$(DEPDIR)/auth_x11-wait_pgrp.Po -rm -f ./$(DEPDIR)/auth_x11-wm_properties.Po -rm -f ./$(DEPDIR)/auth_x11-xscreensaver_api.Po -rm -f ./$(DEPDIR)/authproto_pam-env_info.Po -rm -f ./$(DEPDIR)/authproto_pam-env_settings.Po -rm -f ./$(DEPDIR)/authproto_pam-logging.Po -rm -f ./$(DEPDIR)/authproto_pam-util.Po -rm -f ./$(DEPDIR)/dimmer-env_settings.Po -rm -f ./$(DEPDIR)/dimmer-logging.Po -rm -f ./$(DEPDIR)/dimmer-wm_properties.Po -rm -f ./$(DEPDIR)/logging.Po -rm -f ./$(DEPDIR)/remap_all-unmap_all.Po -rm -f ./$(DEPDIR)/saver_multiplex-env_settings.Po -rm -f ./$(DEPDIR)/saver_multiplex-logging.Po -rm -f ./$(DEPDIR)/saver_multiplex-saver_child.Po -rm -f ./$(DEPDIR)/saver_multiplex-wait_pgrp.Po -rm -f ./$(DEPDIR)/saver_multiplex-wm_properties.Po -rm -f ./$(DEPDIR)/saver_multiplex-xscreensaver_api.Po -rm -f ./$(DEPDIR)/until_nonidle-env_settings.Po -rm -f ./$(DEPDIR)/until_nonidle-logging.Po -rm -f ./$(DEPDIR)/until_nonidle-wait_pgrp.Po -rm -f ./$(DEPDIR)/xsecurelock-auth_child.Po -rm -f ./$(DEPDIR)/xsecurelock-env_settings.Po -rm -f ./$(DEPDIR)/xsecurelock-logging.Po -rm -f ./$(DEPDIR)/xsecurelock-main.Po -rm -f ./$(DEPDIR)/xsecurelock-saver_child.Po -rm -f ./$(DEPDIR)/xsecurelock-unmap_all.Po -rm -f ./$(DEPDIR)/xsecurelock-util.Po -rm -f ./$(DEPDIR)/xsecurelock-version.Po -rm -f ./$(DEPDIR)/xsecurelock-wait_pgrp.Po -rm -f ./$(DEPDIR)/xsecurelock-wm_properties.Po -rm -f ./$(DEPDIR)/xsecurelock-xscreensaver_api.Po -rm -f helpers/$(DEPDIR)/auth_x11-auth_x11.Po -rm -f helpers/$(DEPDIR)/auth_x11-authproto.Po -rm -f helpers/$(DEPDIR)/auth_x11-monitors.Po -rm -f helpers/$(DEPDIR)/authproto.Po -rm -f helpers/$(DEPDIR)/authproto_pam-authproto.Po -rm -f helpers/$(DEPDIR)/authproto_pam-authproto_pam.Po -rm -f helpers/$(DEPDIR)/dimmer-dimmer.Po -rm -f helpers/$(DEPDIR)/pgrp_placeholder.Po -rm -f helpers/$(DEPDIR)/saver_multiplex-monitors.Po -rm -f helpers/$(DEPDIR)/saver_multiplex-saver_multiplex.Po -rm -f helpers/$(DEPDIR)/until_nonidle-until_nonidle.Po -rm -f test/$(DEPDIR)/cat_authproto.Po -rm -f test/$(DEPDIR)/get_compositor-get_compositor.Po -rm -f test/$(DEPDIR)/nvidia_break_compositor-nvidia_break_compositor.Po -rm -f test/$(DEPDIR)/remap_all-remap_all.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_examplesDATA \ uninstall-docDATA uninstall-helpersPROGRAMS \ uninstall-helpersSCRIPTS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles am--refresh \ check check-am clean clean-binPROGRAMS clean-cscope \ clean-generic clean-helpersPROGRAMS clean-local \ clean-noinstPROGRAMS cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dist_examplesDATA install-docDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-helpersPROGRAMS install-helpersSCRIPTS install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-dist_examplesDATA \ uninstall-docDATA uninstall-helpersPROGRAMS \ uninstall-helpersSCRIPTS uninstall-man uninstall-man1 .PRECIOUS: Makefile @HAVE_PANDOC_TRUE@xsecurelock.1.md: doc/xsecurelock.1.md README.md @HAVE_PANDOC_TRUE@ { \ @HAVE_PANDOC_TRUE@ grep -B 9999 'ENV VARIABLES HERE' doc/xsecurelock.1.md; \ @HAVE_PANDOC_TRUE@ grep -A 9999 'ENV VARIABLES START' README.md |\ @HAVE_PANDOC_TRUE@ grep -B 9999 'ENV VARIABLES END'; \ @HAVE_PANDOC_TRUE@ grep -A 9999 'ENV VARIABLES HERE' doc/xsecurelock.1.md; \ @HAVE_PANDOC_TRUE@ } > xsecurelock.1.md @HAVE_PANDOC_TRUE@xsecurelock.1: xsecurelock.1.md @HAVE_PANDOC_TRUE@ $(path_to_pandoc) -s -f markdown -t man -o $@ $< FORCE: version.c: FORCE if [ -n "$(GIT_VERSION)" ]; then \ echo "const char *const git_version = \"$(GIT_VERSION)\";" \ > version.c; \ elif git describe --always --dirty >/dev/null 2>&1; then \ echo "const char *const git_version = \"` \ git describe --always --dirty \ `\";" > version.c; \ else \ : version.c must exist in non-git builds.; \ cat version.c; \ fi .PRECIOUS: version.c # Old one is better than none. env_helpstr.inc: README.md # Autogenerate for --help. grep -A 9999 'ENV VARIABLES START' "$<" |\ grep -B 9999 'ENV VARIABLES END' |\ grep '^[ *]' |\ sed -e 's,\\\|",\\&,g; s,$$,\\n",; s,^,",;' > "$@" xsecurelock-main.$(OBJEXT): env_helpstr.inc @HAVE_DOXYGEN_TRUE@doxyfile.stamp: @HAVE_DOXYGEN_TRUE@ $(DOXYGEN) Doxyfile @HAVE_DOXYGEN_TRUE@ echo Timestamp > doxyfile.stamp @HAVE_DOXYGEN_TRUE@all-local: doxyfile.stamp @HAVE_DOXYGEN_TRUE@clean-local: @HAVE_DOXYGEN_TRUE@ $(RM) -r $(top_srcdir)/doxy # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xsecurelock-1.5.1/depcomp0000755061501702575230000005601713460622412012376 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: xsecurelock-1.5.1/unmap_all.h0000644061501702575230000000472113420106751013134 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef UNMAP_ALL_H #define UNMAP_ALL_H #include // for Window #include // for Display typedef struct { Display *display; Window root_window; // The window list; None windows should be skipped when iterating. Window *windows; unsigned int n_windows; unsigned int first_unmapped_window; } UnmapAllWindowsState; /*! \brief Stores the list of all mapped application windows in the state. * * Note that windows might be created after this has been called, so you * typically want to grab the server first. * * \return true if all is fine, false if a non-ignored window matching my own * window class was found, which should indicate that another instance is * already running. */ int InitUnmapAllWindowsState(UnmapAllWindowsState *state, Display *display, Window root_window, const Window *ignored_windows, unsigned int n_ignored_windows, const char *my_res_class, const char *my_res_name, int include_frame); /*! \brief Unmaps all windows, and stores them in the state. * * After each unmapping it calls just_unmapped_can_we_stop on the window; if * that returns a non-zero value, unmapping stops and we return that value. * * Must be used on the state filled by ListAllWindows. * * \return Nonzero return value of just_unmapped_can_we_stop, or zero if we * unmapped all. */ int UnmapAllWindows(UnmapAllWindowsState *state, int (*just_unmapped_can_we_stop)(Window w, void *arg), void *arg); /*! \brief Remaps all windows from the state. * * Must be used on the state filled by ListAllWindows. */ void RemapAllWindows(UnmapAllWindowsState *state); /*! \brief Clears the UnmapAllWindowsState when done, and returns resources to * X11. */ void ClearUnmapAllWindowsState(UnmapAllWindowsState *state); #endif xsecurelock-1.5.1/configure.ac0000644061501702575230000003351413536475517013324 00000000000000# Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. define([thisversion],[1.5.1]) define([nextversion],[1.5.1]) AC_INIT([xsecurelock],thisversion,[rpolzer@google.com]) AM_INIT_AUTOMAKE([-Wall subdir-objects foreign]) AC_PROG_CC dnl We only detect libraries globally, but not all binaries need all of them. dnl So we use --as-needed to work around. AC_MSG_CHECKING([whether the linker supports --as-needed]) saved_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,--as-needed" AC_LINK_IFELSE([AC_LANG_PROGRAM([])], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) LDFLAGS=$saved_LDFLAGS]) AC_CHECK_HEADER(X11/Xlib.h, [], [AC_ERROR([X includes not found.])]) AC_CHECK_LIB(X11, XOpenDisplay, [], [AC_ERROR([X library not found.])]) AC_CHECK_LIB(Xmuu, XmuClientWindow, [], [AC_CHECK_LIB(Xmu, XmuClientWindow, [], [AC_ERROR([Xmuu or Xmu library not found.])])]) AC_CHECK_LIB(m, sqrt, [], [AC_ERROR([Math library not found.])]) # RP_SEARCH_LIBS(sym, lib, macro, flag, default, description) AC_DEFUN([RP_SEARCH_LIBS], [ AC_ARG_WITH([$4], [AS_HELP_STRING([--with-$4], [$6 @<:@default=$5@:>@])], [with_$4=$withval], [with_$4=$5]) AS_IF([test "x$with_$4" = xno], [have_$4=false], [AC_SEARCH_LIBS([$1], [$2], [have_$4=true], [AS_IF([test "x$with_$4" = xcheck], [have_$4=false], [AC_MSG_ERROR([--with-$4 was enabled, but test for $4 failed])])])]) AM_CONDITIONAL([$3], [test x$have_$4 = xtrue])]) # RP_SEARCH_PROG(prog, path, macro, flag, default, description) AC_DEFUN([RP_SEARCH_PROG], [ AC_ARG_WITH([$4], [AS_HELP_STRING([--with-$4], [$6 @<:@default=$5@:>@])], [with_$4=$withval], [with_$4=$5]) AS_IF([test "x$with_$4" = xno], [have_$4=false], [path_to_$4=$with_$4 AC_PATH_PROG([path_to_$4], [$1], [], [$2]) AS_IF([test "x$path_to_$4" = x], [AS_IF([test "x$with_$4" = xcheck], [have_$4=false], [AC_MSG_ERROR([--with-$4 was enabled, but test for $4 failed])])], [have_$4=true])]) AM_CONDITIONAL([$3], [test x$have_$4 = xtrue])]) # RP_CHECK_MODULE(prefix, module, macro, flag, default, description) AC_DEFUN([RP_CHECK_MODULE], [ AC_ARG_WITH([$4], [AS_HELP_STRING([--with-$4], [$6 @<:@default=$5@:>@])], [with_$4=$withval], [with_$4=$5]) AS_IF([test "x$with_$4" = xno], [have_$4=false], [PKG_CHECK_MODULES($1, [$2], [have_$4=true], [AS_IF([test "x$with_$4" = xcheck], [have_$4=false], [AC_MSG_ERROR([--with-$4 was enabled, but test for $4 failed])])])]) AM_CONDITIONAL([$3], [test x$have_$4 = xtrue])]) # The DPMS extension is used to save power of the screen when turned off. Saves # electric power. RP_SEARCH_LIBS(DPMSQueryExtension, Xext, [HAVE_DPMS_EXT], [dpms], [check], [Use the DPMS extension to save power]) # The X11 Screen Saver extension is used to turn off the screen saver when X11 # handles screen blanking (e.g. via timeout) anyway; not needed for when we # handle blanking explicitly (XSECURELOCK_BLANK_TIMEOUT). Saves CPU power. RP_SEARCH_LIBS(XScreenSaverQueryExtension, Xss, [HAVE_XSCREENSAVER_EXT], [xss], [check], [Use the X11 Screen Saver extension to save power]) # The X Synchronization extension is used to get per-device idle times. Used by # until_nonidle only. RP_SEARCH_LIBS(XSyncQueryExtension, Xext, [HAVE_XSYNC_EXT], [xsync], [check], [Use the X Synchronization extension to detect idle time]) # The Composite extension needs an explicit opt-out because not having it can # cause desktop notifications to appear on top of the screen saver (privacy # risk). RP_SEARCH_LIBS(XCompositeQueryExtension, Xcomposite, [HAVE_XCOMPOSITE_EXT], [xcomposite], [yes], [Use the X11 Composite extension to cover desktop notifications]) # This extension doesn't really exist anymore, but served to counteract the # (also no longer existing) AllowClosedownGrabs and similar X server settings. RP_SEARCH_LIBS(XF86MiscSetGrabKeysState, Xxf86misc, [HAVE_XF86MISC_EXT], [xf86misc], [check], [Use the XFree86-Misc extension to disable ungrab keys]) # PAM-less operation is... unfortunate. Let's have users explicitly disable this # if they need to use other auth modules, as most likely they should rather # install PAM development libraries instead. RP_SEARCH_LIBS(pam_authenticate, pam, [HAVE_PAM], [pam], [yes], [Enable support for the PAM library to authenticate the user]) RP_CHECK_MODULE(libbsd, [libbsd], [HAVE_LIBBSD], [libbsd], [check], [Use libbsd for utility functions.]) AC_CHECK_FUNCS([explicit_bzero]) # Xft optionally provides nicer font rendering. RP_CHECK_MODULE(XFT, [xft], [HAVE_XFT_EXT], [xft], [check], [Use the Xft extension for nicer fonts (requires Xrender too)]) # Querying the keyboard LEDs (and layout name) makes auth_x11 more user # friendly. RP_SEARCH_LIBS(XkbGetIndicatorState, X11, [HAVE_XKB_EXT], [xkb], [check], [Use the X Keyboard extension to show the keyboard LEDs]) # XRandR provides information about monitor layouts and is strongly recommended # on systems which can use more than one monitor (which includes most laptops). RP_SEARCH_LIBS(XRRGetScreenResources, Xrandr, [HAVE_XRANDR_EXT], [xrandr], [check], [Use the XRandR extension to query monitor layouts]) # The XFixes extension is used to work around possible weird leftover state from # compositors. RP_SEARCH_LIBS(XFixesSetWindowShapeRegion, Xfixes, [HAVE_XFIXES_EXT], [xfixes], [check], [Use the XFixes extension to work around some compositors]) RP_SEARCH_PROG(htpasswd, [$PATH], [HAVE_HTPASSWD], [htpasswd], [check], [Install auth_htpasswd (specify --with-htpasswd=/usr/bin/htpasswd to set the path to use)]) RP_SEARCH_PROG(mplayer, [$PATH], [HAVE_MPLAYER], [mplayer], [check], [Install saver_mplayer (specify --with-mplayer=/usr/bin/mplayer to set the path to use)]) RP_SEARCH_PROG(mpv, [$PATH], [HAVE_MPV], [mpv], [check], [Install saver_mpv (specify --with-mpv=/usr/bin/mpv to set the path to use)]) RP_SEARCH_PROG(pamtester, [$PATH], [HAVE_PAMTESTER], [pamtester], [check], [Install authproto_pamtester (specify --with-pamtester=/usr/bin to set the path to use)]) RP_SEARCH_PROG(pandoc, [$PATH], [HAVE_PANDOC], [pandoc], [check], [Use pandoc to generate man pages]) RP_SEARCH_PROG(slidescreen, /usr/lib/xscreensaver, [HAVE_XSCREENSAVER], [xscreensaver], [check], [Install saver_xscreensaver (specify --with-xscreensaver=/usr/lib/xscreensaver to set the saver plugin directory to use)]) # However, all we really want is the directory name... path_to_xscreensaver=${path_to_xscreensaver%/slidescreen} pam_service_name= enable_pam_check_account_type=no AS_IF([test x$have_pam = xtrue], [ AC_ARG_WITH([pam_service_name], AC_HELP_STRING([--with-pam-service-name], [The name of the PAM service that xsecurelock's auth helpers will authenticate as by default. This flag is mandatory. Be sure to verify that /etc/pam.d/SERVICENAME actually exists, as failure of doing so may prevent unlocking the screen.]), [pam_service_name=$withval], [AC_MSG_ERROR([--with-pam-service-name is mandatory.])]) AS_IF([test -f "/etc/pam.d/$pam_service_name"], [], [AC_MSG_WARN([/etc/pam.d/$pam_service_name doesn't exist. Sure?])]) AC_ARG_ENABLE([pam_check_account_type], AC_HELP_STRING([--enable-pam-check-account-type], [Enable checking of PAM accounting result. Only enable this if accounting is properly configured on your system; especially keep this disabled if --with-pam-service-name is set to an authentication-only service name like common-auth.]), [enable_pam_check_account_type=$enableval], [enable_pam_check_account_type=no]) ]) AC_ARG_WITH([default_auth_module], AC_HELP_STRING([--with-default-auth-module], [The default authentication module to use when none was specified. Can be overridden via the XSECURELOCK_AUTH environment variable or a command line argument.]), [auth_executable=$withval], [auth_executable=auth_x11]) AC_MSG_NOTICE([Configured default auth module: $auth_executable]) AC_ARG_WITH([default_authproto_module], AC_HELP_STRING([--with-default-authproto-module], [The default authentication protocol module to use when none was specified. Can be overridden via the XSECURELOCK_AUTHPROTO environment variable. By default this is autodetected to be one of the supported authentication modules.]), [authproto_executable=$withval], [ authproto_executable= AS_IF([test x$have_htpasswd = xtrue], [authproto_executable=authproto_htpasswd]) AS_IF([test x$have_pamtester = xtrue], [authproto_executable=authproto_pamtester]) AS_IF([test x$have_pam = xtrue], [authproto_executable=authproto_pam]) AS_IF([test -z "$authproto_executable"], [AC_MSG_ERROR([No authproto executable found.])]) ]) AC_MSG_NOTICE([Configured default authproto module: $authproto_executable]) AC_ARG_WITH([default_global_saver_module], AC_HELP_STRING([--with-default-global-saver-module], [The default global saver module to use when none was specified. Can be overridden via the XSECURELOCK_GLOBAL_SAVER environment variable.]), [global_saver_executable=$withval], [global_saver_executable=saver_multiplex]) AC_MSG_NOTICE([Configured default global saver module: ]dnl [$global_saver_executable]) AC_ARG_WITH([default_saver_module], AC_HELP_STRING([--with-default-saver-module], [The default per-screen saver module to use when none was specified. Can be overridden via the XSECURELOCK_SAVER environment variable.]), [saver_executable=$withval], [saver_executable=saver_blank]) AC_MSG_NOTICE([Configured default saver module: $saver_executable]) AC_SUBST(pam_service_name) AC_SUBST(auth_executable) AC_SUBST(authproto_executable) AC_SUBST(global_saver_executable) AC_SUBST(saver_executable) AC_SUBST(path_to_htpasswd) AC_SUBST(path_to_mplayer) AC_SUBST(path_to_mpv) AC_SUBST(path_to_pamtester) AC_SUBST(path_to_xscreensaver) AM_CONDITIONAL([PAM_CHECK_ACCOUNT_TYPE], [test x$enable_pam_check_account_type = xyes]) AM_CONDITIONAL([HAVE_IDLE_TIMER], [test x$have_xss = xtrue -o x$have_xsync = xtrue]) AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([helpers/authproto_htpasswd], [chmod +x helpers/authproto_htpasswd]) AC_CONFIG_FILES([helpers/authproto_pamtester], [chmod +x helpers/authproto_pamtester]) AC_CONFIG_FILES([helpers/saver_mplayer], [chmod +x helpers/saver_mplayer]) AC_CONFIG_FILES([helpers/saver_mpv], [chmod +x helpers/saver_mpv]) AC_CONFIG_FILES([helpers/saver_xscreensaver], [chmod +x helpers/saver_xscreensaver]) # Generate documentation. AC_CHECK_PROGS([DOXYGEN], [doxygen], []) AS_IF([test -z "$DOXYGEN"], [AC_MSG_WARN([Doxygen not found. Who needs documentation anyway.])]) AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"]) AC_CONFIG_FILES([Doxyfile]) # End of documentation. AC_OUTPUT xsecurelock-1.5.1/auth_child.h0000644061501702575230000000351213455110236013266 00000000000000/* Copyright 2014 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef AUTH_CHILD_H #define AUTH_CHILD_H #include // for Window /*! \brief Kill the auth child. * * This can be used from a signal handler. */ void KillAuthChildSigHandler(int signo); /*! \brief Checks whether an auth child should be running. * * \param force_auth If true, assume we want to start a new auth child. * \return true if an auth child is expected to be running after a call to * WatchAuthChild() with this force_auth parameter. */ int WantAuthChild(int force_auth); /*! \brief Starts or stops the authentication child process. * * \param w The screen saver window. Will get cleared after auth child * execution. * \param executable What binary to spawn for authentication. No arguments will * be passed. * \param force_auth If true, the auth child will be spawned if not already * running. * \param stdinbuf If non-NULL, this data will be sent to stdin of the auth * child. * \param auth_running Will be set to the status of the current auth child (i.e. * true iff it is running). * \return true if authentication was successful, i.e. if the auth child exited * with status zero. */ int WatchAuthChild(Window w, const char *executable, int force_auth, const char *stdinbuf, int *auth_running); #endif xsecurelock-1.5.1/wait_pgrp.c0000644061501702575230000001675413536223257013175 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include "wait_pgrp.h" #include // for errno, ECHILD, EINTR, ESRCH #include // for kill, sigaddset, sigemptyset, sigprocmask, // sigsuspend, SIGCHLD, SIGTERM #include #include // for EXIT_SUCCESS, WEXITSTATUS, WIFEXITED, WIFSIGNALED #include #include // for waitpid, WNOHANG #include // for pid_t #include "logging.h" // for Log, LogErrno static void HandleSIGCHLD(int unused_signo) { // No handling needed - we just want to interrupt select() or sigsuspend() // calls. (void)unused_signo; } void InitWaitPgrp(void) { struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = HandleSIGCHLD; // To interrupt select(). if (sigaction(SIGCHLD, &sa, NULL) != 0) { LogErrno("sigaction(SIGCHLD)"); } } pid_t ForkWithoutSigHandlers(void) { // Before forking, block all signals we may have handlers for. sigset_t oldset, set; sigemptyset(&set); sigaddset(&set, SIGUSR1); sigaddset(&set, SIGTERM); sigaddset(&set, SIGCHLD); sigemptyset(&oldset); if (sigprocmask(SIG_BLOCK, &set, &oldset)) { LogErrno("Unable to block signals"); } pid_t pid = fork(); int fork_errno = errno; if (pid == 0) { // Clear all our custom signal handlers in the subprocess. struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = SIG_DFL; if (sigaction(SIGUSR1, &sa, NULL)) { LogErrno("sigaction(SIGUSR1)"); } if (sigaction(SIGTERM, &sa, NULL)) { LogErrno("sigaction(SIGTERM)"); } if (sigaction(SIGCHLD, &sa, NULL)) { LogErrno("sigaction(SIGCHLD)"); } } // Now we can unmask signals. if (sigprocmask(SIG_SETMASK, &oldset, NULL)) { LogErrno("Unable to restore signal mask"); } errno = fork_errno; return pid; } void StartPgrp(void) { if (setsid() == (pid_t)-1) { LogErrno("setsid"); } // To avoid a race condition when killing the process group after the leader // is already dead (which could then kill another new process group with the // same ID), we'll create a dummy process that never dies until we signal the // process group explicitly. pid_t pid = fork(); if (pid == -1) { LogErrno("StartPgrp -> fork; expect potential race in KillPgrp"); // We ignore this error, as everything else can still work in this case; // however in this case the aforementioned race condition in KillPgrp can // happen. } else if (pid == 0) { // Child process. // Just wait forever. We'll get SIGTERM'd when it's time to go. struct sigaction sa; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = SIG_IGN; // Don't die of SIGUSR1 (saver reset). if (sigaction(SIGUSR1, &sa, NULL) != 0) { LogErrno("sigaction(SIGUSR1)"); } { const char *args[2] = {"prgp_placeholder", NULL}; ExecvHelper("pgrp_placeholder", args); sleep(2); // Reduce log spam or other effects from failed execv. _exit(EXIT_FAILURE); } } } int ExecvHelper(const char *path, const char *const argv[]) { // Helpers expect to always run inside HELPER_PATH. Also, path names may be // relative to this directory. if (chdir(HELPER_PATH)) { LogErrno("chdir %s", HELPER_PATH); return -1; } // Now execute the program. execv(path, (char *const *)argv); // If we get here, we know it failed. We still log the error and free the // allocated path if any. int saved_errno = errno; LogErrno("execv %s", path); errno = saved_errno; return -1; } int KillPgrp(pid_t pid, int signo) { int ret = kill(-pid, signo); if (ret < 0 && errno == ESRCH) { // Note: this shouldn't happen as StartPgrp() should ensure that we never // get here. Remove this workaround once we made sure this really does not // happen. TODO(divVerent). LogErrno("Unable to kill process group %d - falling back to leader only", (int)pid); // Might mean the process is not a process group leader - but might also // mean that the process is already dead. Try killing just the process // then. ret = kill(pid, signo); } return ret; } int WaitPgrp(const char *name, pid_t *pid, int do_block, int already_killed, int *exit_status) { int pid_saved = *pid; int result = WaitProc(name, pid, do_block, already_killed, exit_status); if (result && !already_killed) { if (KillPgrp(pid_saved, SIGTERM) < 0) { LogErrno("KillPgrp %s", name); } } return result; } int WaitProc(const char *name, pid_t *pid, int do_block, int already_killed, int *exit_status) { sigset_t oldset, set; sigemptyset(&set); // We're blocking the signals we may have forwarding handlers for as their // handling reads the pid variable we are changing here. sigaddset(&set, SIGUSR1); sigaddset(&set, SIGTERM); // If we want to wait for a process to die, we must also block SIGCHLD // so we can reliably wait for another child in case waitpid returned 0. // Why can't we just use 0 instead of WNOHANG? Because then we can't block // above signal handlers anymore, which use the pid variable. if (do_block) { sigaddset(&set, SIGCHLD); } sigemptyset(&oldset); if (sigprocmask(SIG_BLOCK, &set, &oldset)) { LogErrno("Unable to block signals"); } int result = -1; while (result == -1) { int status; pid_t gotpid = waitpid(*pid, &status, WNOHANG); if (gotpid < 0) { switch (errno) { case ECHILD: // The process is already dead. Fine. Although this shouldn't happen. Log("%s child died without us noticing - please fix", name); *exit_status = WAIT_ALREADY_DEAD; *pid = 0; result = 1; break; case EINTR: // Waitpid was interrupted. Need to retry. break; default: // Assume the child still lives. Shouldn't ever happen. LogErrno("%s child could not be waited upon", name); break; } } else if (gotpid == *pid) { if (WIFSIGNALED(status)) { int signo = WTERMSIG(status); if (!already_killed || signo != SIGTERM) { Log("%s child killed by signal %d", name, signo); } *exit_status = (signo > 0) ? -signo : WAIT_NONPOSITIVE_SIGNAL; *pid = 0; result = 1; } else if (WIFEXITED(status)) { *exit_status = WEXITSTATUS(status); if (*exit_status != EXIT_SUCCESS) { Log("%s child failed with status %d", name, *exit_status); } *pid = 0; result = 1; } // Otherwise it was suspended or whatever. We need to keep waiting. } else if (gotpid != 0) { Log("Unexpectedly woke up for PID %d", (int)*pid); } else if (do_block) { // Block for SIGCHLD, then waitpid again. sigsuspend(&oldset); } else { result = 0; // Child still lives. } } if (sigprocmask(SIG_SETMASK, &oldset, NULL)) { LogErrno("Unable to restore signal mask"); } return result; } xsecurelock-1.5.1/saver_child.c0000644061501702575230000000512213536221742013444 00000000000000/* Copyright 2014 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #include "saver_child.h" #include // for sigemptyset, sigprocmask, SIG_SETMASK #include // for NULL, EXIT_FAILURE #include // for pid_t, _exit, execl, fork, setsid, sleep #include "logging.h" // for LogErrno, Log #include "wait_pgrp.h" // for KillPgrp, WaitPgrp #include "xscreensaver_api.h" // for ExportWindowID //! The PIDs of currently running saver children, or 0 if not running. static pid_t saver_child_pid[MAX_SAVERS] = {0}; void KillAllSaverChildrenSigHandler(int signo) { // This is a signal handler, so we're not going to make this too // complicated. Just kill 'em all. int i; for (i = 0; i < MAX_SAVERS; ++i) { if (saver_child_pid[i] != 0) { KillPgrp(saver_child_pid[i], signo); } } } void WatchSaverChild(Display* dpy, Window w, int index, const char* executable, int should_be_running) { if (index < 0 || index >= MAX_SAVERS) { Log("Saver index out of range: !(0 <= %d < %d)", index, MAX_SAVERS); return; } if (saver_child_pid[index] != 0) { if (!should_be_running) { KillPgrp(saver_child_pid[index], SIGTERM); } int status; if (WaitPgrp("saver", &saver_child_pid[index], !should_be_running, !should_be_running, &status)) { // Now is the time to remove anything the child may have displayed. XClearWindow(dpy, w); } } if (should_be_running && saver_child_pid[index] == 0) { pid_t pid = ForkWithoutSigHandlers(); if (pid == -1) { LogErrno("fork"); } else if (pid == 0) { // Child process. StartPgrp(); ExportWindowID(w); { const char* args[3] = { executable, "-root", // For XScreenSaver hacks, unused by our own. NULL}; ExecvHelper(executable, args); sleep(2); // Reduce log spam or other effects from failed execv. _exit(EXIT_FAILURE); } } else { // Parent process after successful fork. saver_child_pid[index] = pid; } } } xsecurelock-1.5.1/wm_properties.c0000644061501702575230000000247113334563414014065 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef WM_PROPERTIES_H #define WM_PROPERTIES_H #include // for Window #include // for XFree, Display #include // for XClassHint, XAllocClassHint, XSetWMProperties #include // for NULL void SetWMProperties(Display* dpy, Window w, const char* res_class, const char* res_name, int argc, char* const* argv) { XClassHint* class_hint = XAllocClassHint(); class_hint->res_name = (char*)res_name; class_hint->res_class = (char*)res_class; XTextProperty name_prop; XStringListToTextProperty((char**)&res_name, 1, &name_prop); XSetWMProperties(dpy, w, &name_prop, &name_prop, (char**)argv, argc, NULL, NULL, class_hint); XFree(class_hint); } #endif xsecurelock-1.5.1/ensure-documented-settings.sh0000755061501702575230000000410513533470704016641 00000000000000#!/bin/sh # # Copyright 2014 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Simple script to ensure all settings variables are documented. # List all settings (usually from Get*Settings call). all_settings=$( for file in *.[ch] */*.[ch] */auth_* */saver_*; do <"$file" perl -ne ' print "$_\n" for /\bXSECURELOCK_[A-Za-z0-9_%]+\b/g; ' done | sort -u ) # List of internal settings. These shall not be documented. internal_settings=' XSECURELOCK_INSIDE_SAVER_MULTIPLEX ' # List of deprecated settings. These shall not be documented. deprecated_settings=' XSECURELOCK_PARANOID_PASSWORD XSECURELOCK_WANT_FIRST_KEYPRESS ' public_settings=$( { echo "$all_settings" echo "$internal_settings" echo "$internal_settings" echo "$deprecated_settings" echo "$deprecated_settings" } | sort | uniq -u ) # List all documented settings. documented_settings=$( Additionally, XSecureLock spawns the *command-to-run-when-locked* once locking is complete; this can be used as a notification mechanism if desired. # REPORTING BUGS The official bug tracker is at . # COPYRIGHT The code is released unser the Apache 2.0 license. See the LICENSE file for more details. # SEE ALSO `xss-lock` (1), `xautolock` (1). The *README.md* file included with XSecureLock contains full documentation. The XSecureLock source code and all documentation may be downloaded on . xsecurelock-1.5.1/doc/examples/0000755061501702575230000000000013536475523013470 500000000000000xsecurelock-1.5.1/doc/examples/saver_livestreams0000755061501702575230000000175613466535316017104 00000000000000#!/bin/bash # This screensaver displays livestreams that are listed in the feed file located # at "~/.streamsaver-feeds". The feeds are chosen by the current day of year # and the index of the monitor as shown in `xrandr`. The entries started with # "#"-sign is ignored. # # Please install livestreamer (http://livestreamer.io) before using this saver. # # A sample feed file (~/.streamsaver-feeds): # > http://ustream.tv/channel/iss-hdev-payload # > http://ustream.tv/channel/live-iss-stream # > # http://ustream.tv/channel/live-mir-stream feeds=(`cat ~/.streamsaver-feeds | grep -Ev '^#'`) monitor_index=`xrandr | grep -wi "connected" | sort | grep -nho "$(xwininfo -id "$XSCREENSAVER_WINDOW" | awk '/^ Corners:/ { print $2 }')" | awk -F: '{ print $1; exit 0; }'` day=`date +"%-j"` i=$(( ($monitor_index+$day)%${#feeds[@]} )) /usr/bin/livestreamer "${feeds[i]}" "best" --quiet --player="/usr/bin/mpv --no-input-terminal --really-quiet --no-audio --no-stop-screensaver --wid=${XSCREENSAVER_WINDOW}" xsecurelock-1.5.1/unmap_all.c0000644061501702575230000000764013536473467013155 00000000000000#include "unmap_all.h" #include // for Window, None, IsUnmapped #include // for XFree, XGetWindowAttributes, XMapWindow #include // for XmuClientWindow #include // for XClassHint, XGetClassHint #include // for NULL, strcmp int InitUnmapAllWindowsState(UnmapAllWindowsState* state, Display* display, Window root_window, const Window* ignored_windows, unsigned int n_ignored_windows, const char* my_res_class, const char* my_res_name, int include_frame) { int should_proceed = 1; state->display = display; state->root_window = root_window; state->windows = NULL; state->n_windows = 0; Window unused_root_return, unused_parent_return; XQueryTree(state->display, state->root_window, &unused_root_return, &unused_parent_return, &state->windows, &state->n_windows); state->first_unmapped_window = state->n_windows; // That means none unmapped. unsigned int i; for (i = 0; i < state->n_windows; ++i) { XWindowAttributes xwa; XGetWindowAttributes(display, state->windows[i], &xwa); // Not mapped -> nothing to do. if (xwa.map_state == IsUnmapped) { state->windows[i] = None; continue; } // Go down to the next WM_STATE window if available, as unmapping window // frames may confuse WMs. if (!include_frame) { state->windows[i] = XmuClientWindow(display, state->windows[i]); } // If any window we'd be unmapping is in the ignore list, skip it. unsigned int j; for (j = 0; j < n_ignored_windows; ++j) { if (state->windows[i] == ignored_windows[j]) { state->windows[i] = None; } } if (state->windows[i] == None) { continue; } XClassHint cls; if (XGetClassHint(state->display, state->windows[i], &cls)) { // If any window has my window class, we better not proceed with // unmapping as doing so could accidentally unlock the screen or // otherwise cause more damage than good. if ((my_res_class || my_res_name) && (!my_res_class || strcmp(my_res_class, cls.res_class) == 0) && (!my_res_name || strcmp(my_res_name, cls.res_name) == 0)) { state->windows[i] = None; should_proceed = 0; } // HACK: Bspwm creates some subwindows of the root window that we // absolutely shouldn't ever unmap, as remapping them confuses Bspwm. if (!strcmp(cls.res_class, "Bspwm")) { state->windows[i] = None; } XFree(cls.res_class); cls.res_class = NULL; XFree(cls.res_name); cls.res_name = NULL; } } return should_proceed; } int UnmapAllWindows(UnmapAllWindowsState* state, int (*just_unmapped_can_we_stop)(Window w, void* arg), void* arg) { if (state->first_unmapped_window == 0) { // Already all unmapped. return 0; } unsigned int i; for (i = state->first_unmapped_window - 1;; --i) { // Top-to-bottom order! if (state->windows[i] != None) { XUnmapWindow(state->display, state->windows[i]); state->first_unmapped_window = i; int ret; if (just_unmapped_can_we_stop != NULL && (ret = just_unmapped_can_we_stop(state->windows[i], arg))) { return ret; } } if (i == 0) { return 0; } } } void RemapAllWindows(UnmapAllWindowsState* state) { unsigned int i; for (i = state->first_unmapped_window; i < state->n_windows; ++i) { if (state->windows[i] != None) { XMapWindow(state->display, state->windows[i]); } } state->first_unmapped_window = state->n_windows; } void ClearUnmapAllWindowsState(UnmapAllWindowsState* state) { state->display = NULL; state->root_window = None; XFree(state->windows); state->windows = NULL; state->n_windows = 0; state->first_unmapped_window = 0; } xsecurelock-1.5.1/wm_properties.h0000644061501702575230000000243613334574355014101 00000000000000/* Copyright 2018 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef WM_PROPERTIES_H #define WM_PROPERTIES_H #include /*! \brief Configures properties on the given window for easier debugging. * * \param dpy The X11 dpy. * \param w The window (which shouldn't be mapped yet). * \param res_class The class name the window should receive (becomes * WM_CLASS.res_class) * \param res_name The window name the window should receive (becomes * WM_CLASS.res_name and WM_NAME) * \param argc The number of arguments the main program received. * \param argv The arguments the main program received (becomes WM_COMMAND). */ void SetWMProperties(Display* dpy, Window w, const char* res_class, const char* res_name, int argc, char* const* argv); #endif xsecurelock-1.5.1/version.h0000644061501702575230000000132013420106751012641 00000000000000/* Copyright 2014 Google Inc. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef VERSION_H #define VERSION_H //! The git version; empty string if not built from git. extern const char *const git_version; #endif xsecurelock-1.5.1/Doxyfile.in0000644061501702575230000030374613334563414013146 00000000000000# Doxyfile 1.8.6 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "XSecureLock is an X11 screen lock utility." # With the PROJECT_LOGO tag one can specify an logo or icon that is included in # the documentation. The maximum height of the logo should not exceed 55 pixels # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo # to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = doxy # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a # new page for each member. If set to NO, the documentation of a member will be # part of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. # # Note For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by by putting a % sign in front of the word # or globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = YES # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined # locally in source files will be included in the documentation. If set to NO # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = YES # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO these classes will be included in the various overviews. This option has # no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the # todo list. This list is created by putting \todo commands in the # documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the # test list. This list is created by putting \test commands in the # documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES the list # will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. Do not use file names with spaces, bibtex cannot handle them. See # also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO doxygen will only warn about wrong or incomplete parameter # documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. # Note: If this tag is empty the current directory is searched. INPUT = @top_srcdir@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank the # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, # *.qsf, *.as and *.js. FILE_PATTERNS = # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER ) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = README.md #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES, then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- # defined cascading style sheet that is included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefor more robust against future updates. # Doxygen will copy the style sheet file to the output directory. For an example # see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the stylesheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to NO can help when comparing the output of multiple runs. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: http://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler ( hhc.exe). If non-empty # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated ( # YES) or that it should be included in the master .chm file ( NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated ( # YES) or a normal table of contents ( NO) in the .chm file. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering # instead of using prerendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from http://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /