$_CC = defined("CC")? CC: "cc"; $_CFLAGS = array(); $_LDFLAGS = array(); $_SOURCES = array(); $_OBJECTS = array(); $_OUT = defined("OUT")? OUT: defined("OUTPUT")? OUTPUT: "out"; if (defined("CFLAGS")) $_CFLAGS = arrcat($_CFLAGS, words(CFLAGS)); if (defined("LDFLAGS")) $_LDFLAGS = arrcat($_LDFLAGS, words(LDFLAGS)); function pkg_config() { global $_CFLAGS, $_LDFLAGS; foreach (getargs(), $name) { $_CFLAGS = arrcat($_CFLAGS, words(rtrim(`pkg-config --cflags $name`))); $_LDFLAGS = arrcat($_LDFLAGS, words(rtrim(`pkg-config --libs $name`))); } } function sources() { global $_SOURCES; foreach (getargs(), $source) { if (!isarray($source)) $source = words($source); $_SOURCES = arrcat($_SOURCES, $source); } } function flags() { global $_CFLAGS; foreach (getargs(), $flag) { if (!isarray($flag)) $flag = words($flag); $_CFLAGS = arrcat($_CFLAGS, $flag); } } function compile() { global $_CC, $_CFLAGS, $_SOURCES, $_OBJECTS; foreach ($_SOURCES, $source) { $object = replace($source, ".c", ".o"); $cflags = unwords($_CFLAGS); if (!isfile($object) || mtime($source) > mtime($object)) `$_CC $cflags -c $source`; push($_OBJECTS, $object); } } function link() { global $_CC, $_LDFLAGS, $_OBJECTS, $_OUT; foreach ($_OBJECTS, $object) { if (!isfile($_OUT) || mtime($_OUT) < mtime($object)) { $objects = unwords($_OBJECTS); $ldflags = unwords($_LDFLAGS); `$_CC $ldflags $objects -o $_OUT`; break; } } }