Wakeup is a script to wake someone up - an alarm clock of sorts. "Of sorts" because it is only the "alarm" part. at(1) does the "clock" bit. It's designed to be very flexible and (potentially) very annoying. If set up properly, it will wake you up no matter what - hence the name.
I don't wake up easily. Rather, I do, but I'm often reluctant to do such. In order to help wake me up, I wanted a system that was more powerful than a simple alarm clock. Alarm clocks can be flaky and a simple misconfiguration can cause it to not go off at all.
This software relies on the idea of "stages". Think of this as any multi-tiered alarm clock system that people set up for themselves (one clock across the room set at a later time, etc.). Each stage represents an attempt to wake someone up, generally increasing in power as the stages increase in number. The individual stages are "enter"ed after a certain amount of time. It will continue until the system is told that the user is awake.
When a stage is "enter"ed, some commands can be run. This could be something that turns on some speakers, starts some music, or anything that could potentially wake someone up. After a specified amount of time, an "alarm" command will be run for a given stage. That could be something like increasing the volume or turning on a light.
As each stage is "enter"ed, the previous stage is "exit"ed. Any cleanup can go there.
There are a number of scripts which make up the system. The main one is wakeup which calls a number of scripts that are in your stages directory. These are very similar to init.d scripts, except instead of "start" and "stop" they have "enter", "alarm", and "exit".
Simply run make install as root and it will install globally. This will defaultly install the various scripts to /usr/local/bin/.
You then need to look at the stages/ directory and wakeuprc.xml to make a configuration for yourself. Take a look at the sample scripts there, they are a copy of my own configuration so you can see how I use it.