about summary refs log tree commit diff stats
path: root/config.mk
blob: a2ca7713f8b36798b0dbe0ad10134bb1ed438bde (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# dwm version
VERSION = 2.5

# Customize below to fit your system

# paths
PREFIX = /usr/local
MANPREFIX = ${PREFIX}/share/man

X11INC = /usr/X11R6/include
X11LIB = /usr/X11R6/lib

# includes and libs
INCS = -I. -I/usr/include -I${X11INC}
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11

# flags
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
LDFLAGS = ${LIBS}
#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
#LDFLAGS = -g ${LIBS}

# compiler and linker
CC = cc
LD = ${CC}
color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
// You guessed right: the '000' prefix means you should start reading here.
//
// This project is setup to load all files with a numeric prefix. Just create
// a new file and start hacking.
//
// The first few files (00*) are independent of what this program does, an
// experimental skeleton that will hopefully make it both easier for others to
// understand and more malleable, easier to rewrite and remould into radically
// different shapes without breaking in subtle corner cases. The premise is
// that understandability and rewrite-friendliness are related in a virtuous
// cycle. Doing one well makes it easier to do the other.
//
// Lower down, this file contains a legal, bare-bones C++ program. It doesn't
// do anything yet; subsequent files will add behaviors by inserting lines
// into it with directives like:
//   :(after "more events")
// This will insert the following lines after a line in the program containing
// the words "more events".
//
// Directives free up the programmer to order code for others to read rather
// than as forced by the computer or compiler. Each individual feature can be
// organized in a self-contained 'layer' that adds code to many different data
// structures and functions all over the program. The right decomposition into
// layers will let each layer make sense in isolation.
//
//   "If I look at any small part of it, I can see what is going on -- I don't
//   need to refer to other parts to understand what something is doing.
//
//   If I look at any large part in overview, I can see what is going on -- I
//   don't need to know all the details to get it.
//
//   Every level of detail is as locally coherent and as well thought-out as
//   any other level."
//
//       -- Richard Gabriel, "The Quality Without A Name"
//          (http://dreamsongs.com/Files/PatternsOfSoftware.pdf, page 42)
//
// Directives are powerful; they permit inserting or modifying any point in
// the program. Using them tastefully requires mapping out specific lines as
// waypoints for future layers to hook into. Often such waypoints will be in
// comments, capitalized to hint that other layers rely on their presence.
//
// A single waypoint might have many different code fragments hooking into
// it from all over the codebase. Use 'before' directives to insert
// code at a location in order, top to bottom, and 'after' directives to
// insert code in reverse order. By convention waypoints intended for insertion
// before begin with 'End'. Notice below how the layers line up above the "End
// Foo" waypoint.
//
//   File 001          File 002                File 003
//   ============      ===================     ===================
//   // Foo
//   ------------
//              <----  :(before "End Foo")
//                     ....
//                     ...
//   ------------
//              <----------------------------  :(before "End Foo")
//                                             ....
//                                             ...
//   // End Foo
//   ============
//
// Here's part of a layer in color: http://i.imgur.com/0eONnyX.png. Directives
// are shaded dark. Notice the references to waypoints lower down in this
// file.
//
// Layers do more than just shuffle code around. Past the initial skeleton of
// this program (currently 00*-02*), it ought to be possible to stop loading
// after any file/layer, build and run the program, and pass all tests for
// loaded features. (Relevant is http://youtube.com/watch?v=c8N72t7aScY, a
// scene from "2001: A Space Odyssey".)
//
// This 'subsetting guarantee' ensures that this directory contains a
// cleaned-up narrative of the evolution of this codebase. Organizing
// autobiographically allows a newcomer to rapidly orient himself, reading the
// first few files to understand a simple gestalt of a program's core purpose
// and features, and later gradually working his way through other features as
// the need arises. Each step should be as simple as possible (but no simpler).
//
// Programmers shouldn't need to understand everything about a program to hack
// on it. But they shouldn't be prevented from a thorough understanding of
// each aspect either. The goal of layers is to reward curiosity.

// Includes
// End Includes

// Types
// End Types

// prototypes are auto-generated; define your functions in any order
#include "function_list"  // by convention, files ending with '_list' are auto-generated

// Globals
// End Globals

int main(int argc, char* argv[]) {
  if (argc > 1) {
    // Commandline Options
  }

  setup();
  return 0;  // End Main
}

void setup() {
  // End Setup
}

// Without directives or with the :(code) directive, lines get added at the
// end.