I have a laptop that I have installed CentOS 7 to - after completely forgetting with a desktop installation - that doesn't have a viable screen saver (unless I choose to go with that abomination called "Gnome"). See, I can't deal with Gnome. I tried KDE for a week, and half of the time, I couldn't unlock the KDE/plasma screen because it never presented the unlock on it. I realized that CentOS was not going to make a good desktop/laptop operating system unless I could get to a decent Window Manager and screen saver.
So, I did what every intelligent, awesome, amazing, and brilliant individual would do. I went down the rabbit hole. Seriously, I should have taken the blue pill and pretended that Gnome was just awesome - but I don't think I could get beyond comparing it to slicing my wrists and doing pushups in salt water with a hint of lemon juice in it. I grabbed Xfce (nice - this one came in packages from the Fedora Project epel repository). However, the EPEL Fedora Project repository still did not have xscreensaver. That's a serious risk to me. The last thing I wanted was someone coming by, finding the laptop unlocked, and me returning to find Justin Beiber as my wall paper.
So, I knew I had to compile xscreensaver from scratch. I ran out and downloaded it from http://www.jwz.org/xscreensaver/download.html and extracted it. I found a couple of missing packages (aside from the development packages I'd installed previously), and found those in yum :
yum --enablerepo=base --enablerepo=updates --enablerepo=extras --enablerepo=epel --enablerepo=rpmforge install xorg-x11-server-devel.x86_64 libXt-devel libXpm-devel motif-devel
Then..., I tried to compile it :make distclean
./configure --with-motif
make
I kept running into undefined functions for pthread_join and pthread_create, and thought I was missing a library - but I wasn't. Down that rabbit hole, I realized I had to patch it. I tracked down (from the error message) that it was trying to assemble the bsod screensaver and getting those functions, so I opened up the Makefile and started checking it to see how the -pthread was being passed. After tracking it down, I created the following patch :diff -rupN xscreensaver-5.30-base/hacks/Makefile.in xscreensaver-5.30/hacks/Makefile.in
--- xscreensaver-5.30-base/hacks/Makefile.in 2014-09-11 11:07:53.000000000 -0600
+++ xscreensaver-5.30/hacks/Makefile.in 2014-09-12 09:48:05.017172709 -0600
@@ -671,7 +671,7 @@ truchet: truchet.o $(HACK_OBJS) $(COL)
$(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS)
bsod: bsod.o $(HACK_OBJS) $(GRAB) $(APPLE2) $(XPM)
- $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(APPLE2) $(XPM) $(XPM_LIBS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(APPLE2) $(XPM) $(XPM_LIBS) $(THRL)
apple2: apple2.o apple2-main.o $(HACK_OBJS) $(ATV) $(GRAB) $(TEXT)
$(CC_HACK) -o $@ $@.o apple2-main.o $(HACK_OBJS) $(ATV) $(GRAB) $(TEXT) $(XPM_LIBS) $(TEXT_LIBS) $(THRL)
Simply put - the bsod compile instructions missed having the THRL (pthread library) environment variable passed to it. That was the ONLY patching I had to do. It still didn't compile because of the xscreensaver-demo until I symlinked the following Directory :cd /usr/include/
ln -s gdk-pixbuf-2.0 gdk-pixbuf
Compiled just fine!