From 63e356d53be1f139d8e846f010e34f0033d7b627 Mon Sep 17 00:00:00 2001 From: malc Date: Mon, 28 Jul 2014 06:18:35 +0400 Subject: [PATCH] Drop tbs in favour of ninja --- build.ml | 155 ------------------------------------------------------------ build.ninja | 72 ++++++++++++++++++++++++++++ configure | 33 +++++++++++++ doocaml | 7 +++ 4 files changed, 112 insertions(+), 155 deletions(-) delete mode 100644 build.ml create mode 100644 build.ninja create mode 100755 configure create mode 100644 doocaml diff --git a/build.ml b/build.ml deleted file mode 100644 index e89605f..0000000 --- a/build.ml +++ /dev/null @@ -1,155 +0,0 @@ -let start = Unix.gettimeofday ();; - -open List;; -open Typs;; -open Utils;; -open State;; -open Helpers;; - -let jobs, targets, dodeplist, dotarlist = getopt ();; - -let get key msg = - match getval key with | None -> failwith msg | Some s -> s -;; - -let getdef key def = - match getval key with | None -> def | Some s -> s -;; - -let srcdir = get "src" "no source dir";; -let cc = getdef "cc" "cc";; -let ccopt = getdef "ccopt" "";; -let mupdflibpath = get "mupdflibpath" "no mupdf libpath";; -let libs = getdef "libs" "";; - -let boc flags src = - let o = src ^ ".o" in - let c = src ^ ".c" in - let d = - (* Since we are using ocaml instead of gcc to compile this - the dep scanning passs is not done, hence this cludge *) - List.fold_left - (fun s p -> StrSet.add (Filename.concat srcdir p) s) - StrSet.empty - ["glfont.c"; "keysym2ucs.c"] - in - ocaml - "ocamlc.opt" - ("-cc '" ^ cc ^ "' -ccopt '" ^ flags ^ " " ^ ccopt ^ " -o " ^ o ^ "'") - o - (StrSet.singleton o) - [Filename.concat srcdir c] - d - ; -;; - -let ocaml1 prog flags1 flags2 mainoutput outputs inputs deps f = - let flags = flags1 ^ " -o " ^ Filename.quote mainoutput in - let build = - let commands _ = - let s = String.concat " " (map Filename.quote (f ())) in - [Run (prog ^ " " ^ flags ^ " " ^ s ^ flags2)] - in - let cookie _ = prog ^ flags in - let presentation _ = "OCAMLC " ^ mainoutput in - { get_commands = commands - ; get_cookie = cookie - ; get_presentation = presentation - } - in - let inputs = fold_right StrSet.add inputs StrSet.empty in - let deps = StrSet.union inputs deps in - StrSet.iter (fun output -> - put_build_info output build; - let deps = StrSet.remove output deps in - add_target output inputs outputs deps - ) outputs; -;; - -let ocaml' prog flags1 flags2 mainoutput outputs inputs deps = - ocaml1 prog flags1 flags2 mainoutput outputs inputs deps (fun () -> inputs) -;; - -let bso name objs = - let so = name ^ ".so" in - let mupdf_libs = - " -L" ^ mupdflibpath ^ " " ^ libs - in - let o = List.map (fun s -> s ^ ".o") objs in - let libs = ["mupdf"] in - let set = - List.fold_left (fun set s -> - let l = "lib" ^ s ^ ".a" in - let l = Filename.concat mupdflibpath l in - StrSet.add l set) - StrSet.empty libs - in - ocaml' - cc - ("-shared -lpthread -lfontconfig") - (mupdf_libs) - so - (StrSet.singleton so) - o - set - ; - so -;; - -let () = - boc "-g" "link"; - let _ = - let mkhelp = Filename.concat srcdir "mkhelp.sh" in - let keystoml = Filename.concat srcdir "keystoml.ml" in - let keys = Filename.concat srcdir "KEYS" in - let cmd = "sh " ^ mkhelp ^ " " ^ keystoml ^ " " ^ keys ^ "> help.ml" in - let build = - { get_commands = (fun _ -> [Run cmd]) - ; get_cookie = (fun _ -> - let cwd = Sys.getcwd () in - Sys.chdir srcdir; - let s = get_cmd_output "git describe --tags --dirty || echo" in - Sys.chdir cwd; - s) - ; get_presentation = (fun _ -> "KEYSTOML KEYS") - } - in - put_build_info "help.ml" build; - let sing s = StrSet.singleton s in - add_target - "help.ml" - (sing "KEYS") - (sing "help.ml") - (StrSet.add keys (StrSet.add mkhelp (sing keystoml))) - in - let so = bso "link" ["link"] in - let prog name cmos = - ocaml - "ocamlc.opt" - ("-g -I +lablGL lablgl.cma str.cma unix.cma -dllpath " - ^ Sys.getcwd ()) - name - (StrSet.singleton name) - (State.dep_sort cmos) - StrSet.empty - in - let mkcmo name = - let dirname = if name = "help" then Sys.getcwd () else srcdir in - if name = "main" - then - let flags = "-g -w A-7-6-4 -I +lablGL -thread -pp 'sed -f " ^ - (Filename.concat dirname "pp.sed") ^ "'" - in - cmopp ~flags ~dirname name - else cmopp ~flags:"-g -w A-7-6-4 -I +lablGL -thread" ~dirname name; - (name ^ ".cmo") - in - let cmos = so :: List.map mkcmo - ["help"; "utils"; "parser"; "wsi"; "config"; "main"] in - prog "llpp" cmos; -;; - -let () = - run start jobs ["help.ml"] false dotarlist; - run start jobs targets dodeplist dotarlist; -;; diff --git a/build.ninja b/build.ninja new file mode 100644 index 0000000..6718d3e --- /dev/null +++ b/build.ninja @@ -0,0 +1,72 @@ +cc = gcc +include .config +ocamlc = ocamlc.opt +ocaml = ocamlc.opt +ocamlflags = -g -w a -I $builddir +libs = -lmupdf $mujs -lpthread -L$mupdf/build/$buildtype + +cflags =$cflags -Wall -Werror -I$mupdf/include -I$freetype $ + -I$mupdf/include + +rule cc + deps = gcc + depfile = $out.d + command = $ocamlc -cc $cc -ccopt "$cflags -MMD -MF $out.d -o $out" -c $in + +rule ocamlc + command = sh $srcdir/doocaml $out $in -c $ocamlflags + +rule helpcmo + command = cd $builddir >/dev/null && $ + $ocaml $ocamlflags -c -o help.cmo help.ml + +rule genhelp + command = sh $srcdir/mkhelp.sh $srcdir/keystoml.ml $srcdir/KEYS >$out + +sedcmd = sed -f $srcdir/pp.sed + +build $builddir/help.ml: genhelp +build $builddir/link.o: cc $srcdir/link.c + cflags = $cflags -D_GNU_SOURCE -DOBSCURED_OPT -DFFP $ + -DUSE_FONTCONFIG -g +build $builddir/help.cmo: helpcmo | $builddir/help.ml +build $builddir/utils.cmo: ocamlc $srcdir/utils.ml +build $builddir/bo.cmo: ocamlc $srcdir/le/bo.ml +build $builddir/wsi.cmi: ocamlc $srcdir/wsi.mli +build $builddir/wsi.cmo: ocamlc $srcdir/wsi.ml | $ + $builddir/wsi.cmi $builddir/bo.cmo +build $builddir/parser.cmo: ocamlc $srcdir/parser.ml +build $builddir/config.cmo: ocamlc $srcdir/config.ml + ocamlflags = $ocamlflags -I +lablGL +build $builddir/main.cmo: ocamlc $srcdir/main.ml + ocamlflags = $ocamlflags -I +lablGL -pp "$sedcmd" + +cmos = $builddir/help.cmo $ + $builddir/utils.cmo $ + $builddir/parser.cmo $ + $builddir/bo.cmo $ + $builddir/wsi.cmo $ + $builddir/config.cmo $ + $builddir/main.cmo + +rule linkso + command = $cc -o $out -shared $in $libs + +build $builddir/link.so: linkso $builddir/link.o + +rule link + command = $ocaml -custom -g $ + -cclib "$builddir/link.so $lflags" $ + -o $out -I +lablGL str.cma unix.cma lablgl.cma $cmos + +build $builddir/llpp: link | $ + $builddir/help.cmo $ + $builddir/utils.cmo $ + $builddir/parser.cmo $ + $builddir/bo.cmo $ + $builddir/wsi.cmo $ + $builddir/config.cmo $ + $builddir/main.cmo $ + $builddir/link.so + +default $builddir/llpp diff --git a/configure b/configure new file mode 100755 index 0000000..139e212 --- /dev/null +++ b/configure @@ -0,0 +1,33 @@ +#!/bin/sh -e + +test -z "$1" && mupdf=/home/malc/x/rcs/git/mupdf +test -e "$mupdf" || { + printf "Pleas supply patch to mupdf\n" >&2 + printf "$0 [path-to-git-clone-of-mupdf] [build-type[=native]]\n" >&2 + exit 1 +} +pkgs="freetype2 fontconfig zlib x11 openssl libopenjp2" # j(peg|big2dec)? + +expr "$0" : "/.*" >/dev/null && { + path="$0" + builddir="$PWD" +} || { + path="$PWD/$0" + builddir="$PWD/build" +} + +( + exec >.config + printf "cflags=$(pkg-config --cflags $pkgs)\n" + printf "lflags=$(pkg-config --libs $pkgs) -ljbig2dec -ljpeg -lz\n" + printf "srcdir=$(dirname $path)\n" + printf "buildtype=${2:-native}\n" + printf "mupdf=$mupdf\n" + printf "builddir=$builddir\n" + test $(uname -m) = "x86_64" && { + printf "cflags=\$cflags -fPIC\n" + printf "mujs=-lmujs\n" + } +) + +echo "To build type: ninja -f $(dirname $path)/build.ninja" diff --git a/doocaml b/doocaml new file mode 100644 index 0000000..9c8b8c7 --- /dev/null +++ b/doocaml @@ -0,0 +1,7 @@ +#!/bin/sh -e + +out="$(basename "$1")" +dir="$(dirname "$1")" +expr "$2" : "/.*" >/dev/null && src="$2" || src="$PWD/$2" +shift 2 +(cd "$dir" && ocamlc "$@" -o $out $src) -- 2.11.4.GIT