C 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. $_CC = defined("CC")? CC: "cc";
  2. $_CFLAGS = array();
  3. $_LDFLAGS = array();
  4. $_SOURCES = array();
  5. $_OBJECTS = array();
  6. $_OUT = defined("OUT")? OUT: defined("OUTPUT")? OUTPUT: "out";
  7. if (defined("CFLAGS"))
  8. $_CFLAGS = arrcat($_CFLAGS, words(CFLAGS));
  9. if (defined("LDFLAGS"))
  10. $_LDFLAGS = arrcat($_LDFLAGS, words(LDFLAGS));
  11. function pkg_config() {
  12. global $_CFLAGS, $_LDFLAGS;
  13. foreach (getargs(), $name) {
  14. $_CFLAGS = arrcat($_CFLAGS, words(rtrim(`pkg-config --cflags $name`)));
  15. $_LDFLAGS = arrcat($_LDFLAGS, words(rtrim(`pkg-config --libs $name`)));
  16. }
  17. }
  18. function sources() {
  19. global $_SOURCES;
  20. foreach (getargs(), $source) {
  21. if (!isarray($source))
  22. $source = words($source);
  23. $_SOURCES = arrcat($_SOURCES, $source);
  24. }
  25. }
  26. function flags() {
  27. global $_CFLAGS;
  28. foreach (getargs(), $flag) {
  29. if (!isarray($flag))
  30. $flag = words($flag);
  31. $_CFLAGS = arrcat($_CFLAGS, $flag);
  32. }
  33. }
  34. function compile() {
  35. global $_CC, $_CFLAGS, $_SOURCES, $_OBJECTS;
  36. foreach ($_SOURCES, $source) {
  37. $object = replace($source, ".c", ".o");
  38. $cflags = unwords($_CFLAGS);
  39. if (!isfile($object) || mtime($source) > mtime($object))
  40. `$_CC $cflags -c $source`;
  41. push($_OBJECTS, $object);
  42. }
  43. }
  44. function link() {
  45. global $_CC, $_LDFLAGS, $_OBJECTS, $_OUT;
  46. foreach ($_OBJECTS, $object) {
  47. if (!isfile($_OUT) || mtime($_OUT) < mtime($object)) {
  48. $objects = unwords($_OBJECTS);
  49. $ldflags = unwords($_LDFLAGS);
  50. `$_CC $ldflags $objects -o $_OUT`;
  51. break;
  52. }
  53. }
  54. }