diff --git a/Makefile b/Makefile index 02b5bec4c..db440fa4f 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,8 @@ default all: build .PHONY: build build: - ${MAKE} -C src + dune build -p ocsigenserver + ${MAKE} -C src/server build doc: $(MAKE) -C doc @@ -28,13 +29,14 @@ top: ### Cleaning ### clean: clean.local - ${MAKE} -C src clean + ${MAKE} -C src/server clean clean.local: + dune clean -rm -f ocsigenserver-*.tar.gz distclean: clean.local - ${MAKE} -C src distclean + ${MAKE} -C src/server distclean -make -C doc clean -rm Makefile.config -rm -f *~ \#* .\#* @@ -76,9 +78,9 @@ install.files: @echo INSTALL_CAN_PUT_PERMISSIONS: ${INSTALL_CAN_PUT_PERMISSIONS} ## Configuration files $(INSTALL) -m ${INSTALL_MOD_755} -d $(TEMPROOT)$(CONFIGDIR)/conf.d - ${INSTALL} -m ${INSTALL_MOD_644} ocsigenserver.conf.sample $(TEMPROOT)$(CONFIGDIR)/ + ${INSTALL} -m ${INSTALL_MOD_644} _build/install/default/etc/ocsigenserver/ocsigenserver.conf.sample $(TEMPROOT)$(CONFIGDIR)/ [ -f $(TEMPROOT)$(CONFIGDIR)/ocsigenserver.conf ] || \ - { $(INSTALL) -m ${INSTALL_MOD_644} ocsigenserver.conf.sample \ + { $(INSTALL) -m ${INSTALL_MOD_644} _build/install/default/etc/ocsigenserver/ocsigenserver.conf.sample \ $(TEMPROOT)$(CONFIGDIR)/ocsigenserver.conf; } -mv $(TEMPROOT)$(CONFIGDIR)/mime.types $(TEMPROOT)$(CONFIGDIR)/mime.types.old ## Log directory diff --git a/Makefile.options b/Makefile.options index a89718d54..698ab4b11 100644 --- a/Makefile.options +++ b/Makefile.options @@ -26,12 +26,3 @@ INCS= -I ${BLD}/server/.ocsigenserver.objs/byte \ SERVER_PACKAGE := lwt_ssl,bytes,lwt.unix,lwt_log,ipaddr,findlib,cryptokit,re,str,xml-light,dynlink,cohttp-lwt-unix LIBS := -package ${SERVER_PACKAGE} ${INCS} - -INITPACKAGE := \"$(shell ${OCAMLFIND} query -p-format -recursive \ - -separator '\";\"' ${SERVER_PACKAGE})\"; \ - \"ocsigenserver.polytables\"; \ - \"ocsigenserver.cookies\"; \ - \"ocsigenserver.baselib.base\"; \ - \"ocsigenserver.baselib\"; \ - \"ocsigenserver.http\"; \ - \"ocsigenserver\"; \ diff --git a/configure b/configure index 5cedef2fd..9545297aa 100755 --- a/configure +++ b/configure @@ -80,6 +80,7 @@ set_defaults () { bindir="" logdir="" libdir="" + libdir_set=0 mandir="" docdir="" sysconfdir="/etc/ocsigenserver" @@ -282,6 +283,7 @@ while [ "$#" -gt 0 ]; do ;; --libdir) libdir="$2" + libdir_set=1 shift shift ;; @@ -485,32 +487,14 @@ CC := gcc # optional RLWRAP := $rlwrap - -### Options ### - -# User who will run Ocsigen server (not root) (eg, for debian, www-data) -# (This user must exist on your system) -OCSIGENUSER := $ocsigen_user - -# group who will run Ocsigen server (not root) (eg, for debian, www-data) -# (This group must exist) -OCSIGENGROUP := $ocsigen_group - - ### Paths ### # Temporary root directory to install the package (usually always "" but for package makers) TEMPROOT := $temproot -# The directory for ocsigen server (binary): -BINDIR := $root$bindir - # The directory for ocsigen manpage: MANDIR := $root$mandir -# Where to install the libraries -LIBDIR := $libdir - # ocsigen's logs: LOGDIR := $root$logdir @@ -538,6 +522,23 @@ SRC := $full_pwd include \$(SRC)/Makefile.options _EOF_ +echo "Writing config options" +cat <<_EOF_ > $my_pwd/src/files/ocsigenserver.conf/options.ml +let version = "$version" +let src = "$full_pwd" +let port = 80 +let bindir = "$root$bindir" +let libdir = "$libdir" +let libdir_set = $libdir_set +let logdir = "$root$logdir" +let configdir = "$root$sysconfdir" +let staticpagesdir = "$root$staticpagesdir" +let datadir = "$root$datadir" +let uploaddir = "$root$uploaddir" +let commandpipe = "$root$commandpipe" +let mimefile = "$root$sysconfdir/mime.types" +_EOF_ + ###################################################################### # Finish diff --git a/dune b/dune index f749468dd..791d2fe2b 100644 --- a/dune +++ b/dune @@ -2,3 +2,26 @@ (_ (flags (:standard -w -69)))) + +(rule + (target ocsigenserver.conf.sample) + (action + (with-stdout-to + %{target} + (run src/files/ocsigenserver.conf/gen.exe sample)))) + +(install + (files ocsigenserver.conf.sample) + (section etc) + (package ocsigenserver)) + +(subdir + local/etc + (rule + (mode + (promote (until-clean))) + (target ocsigenserver.conf) + (action + (with-stdout-to + %{target} + (run ../../src/files/ocsigenserver.conf/gen.exe local))))) diff --git a/ocsigenserver.opam b/ocsigenserver.opam index 14db6226f..7bf573af9 100644 --- a/ocsigenserver.opam +++ b/ocsigenserver.opam @@ -61,7 +61,6 @@ build: [ "--sysconfdir" "%{lib}%/ocsigenserver/etc/ocsigenserver" ] - [make "-C" "src" "confs"] ["dune" "build" "-p" name "-j" jobs] ] install:[make "install.files"] diff --git a/ocsigenserver.opam.template b/ocsigenserver.opam.template index 09d8559d2..85f63d47b 100644 --- a/ocsigenserver.opam.template +++ b/ocsigenserver.opam.template @@ -27,7 +27,6 @@ build: [ "--sysconfdir" "%{lib}%/ocsigenserver/etc/ocsigenserver" ] - [make "-C" "src" "confs"] ["dune" "build" "-p" name "-j" jobs] ] install:[make "install.files"] diff --git a/src/Makefile b/src/Makefile deleted file mode 100644 index f28b91bd9..000000000 --- a/src/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -include ../Makefile.config - -all: confs - dune build @all - -### CONF #### - -confs: ../ocsigenserver.conf.sample ../local/etc/ocsigenserver.conf - ${MAKE} -C baselib confs - -../ocsigenserver.conf.sample: files/ocsigenserver.conf.in ../Makefile.config Makefile - cat $< \ - | sed s%_LOGDIR_%$(LOGDIR)%g \ - | sed s%_DATADIR_%$(DATADIR)%g \ - | sed s%_COMMANDPIPE_%$(COMMANDPIPE)%g \ - | sed s%_MIMEFILE_%$(CONFIGDIR)/mime.types%g \ - | sed s%_METADIR_%$(LIBDIR)%g \ - | sed s%_LIBDIR_%$(LIBDIR)%g \ - | sed s%_EXTDIR_%$(LIBDIR)/ocsigenserver/extensions%g \ - | sed s%_CONFIGDIR_%$(CONFIGDIR)%g \ - | sed s%_STATICPAGESDIR_%$(STATICPAGESDIR)%g \ - | sed s%_EXTPACKAGENAME_%ocsigenserver.ext%g \ - > $@ - -../local/etc/ocsigenserver.conf: files/ocsigenserver.conf.in ../Makefile.config Makefile - mkdir -p ../local/etc ../local/var/log ../local/var/run - cat $< \ - | sed s%80\%8080\%g \ - | sed s%_LOGDIR_%$(SRC)/local/var/log%g \ - | sed s%_DATADIR_%$(SRC)/local/var/lib%g \ - | sed s%_COMMANDPIPE_%$(SRC)/local/var/run/ocsigenserver_command%g \ - | sed s%_MIMEFILE_%$(SRC)/src/files/mime.types%g \ - | sed s%_METADIR_%${LIBDIR}\"/\>\\\ --\>%\%g \ - | sed s%\<\!--\ \\ --\>%\%g \ - > $@ - -### - -clean: clean.local - ${MAKE} -C baselib clean - dune clean - -clean.local: - -rm -f ../ocsigenserver.conf.sample - -rm -f ../ocsigenserver.conf.opt.sample - -rm -f ../ocsigenserver.conf.local - -rm -f ../ocsigenserver.conf.opt.local - -distclean: clean.local - ${MAKE} -C baselib distclean - ${MAKE} -C http distclean - ${MAKE} -C server distclean - ${MAKE} -C extensions distclean - -rm -f *~ \#* .\#* - -cd files; rm -f *~ \#* .\#* - -rm -fr ../local/var/log/*.log - -rm -fr ../local/var/lib/ocsidb - -rm -fr ../local/etc/ocsigenserver.conf - -rm -fr ../local/etc/ocsigenserver.conf.opt diff --git a/src/baselib/Makefile b/src/baselib/Makefile deleted file mode 100644 index 0165bb25b..000000000 --- a/src/baselib/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -include ../../Makefile.config - -.PHONY: default -default: build - -.PHONY: build -build: confs - dune build - -.PHONY: confs -confs: ocsigen_config_static.ml - -## Ocsigen_config ## - -VERSION := $(shell head -n 1 ../../VERSION) - -ocsigen_config_static.ml: ocsigen_config_static.ml.in ../../Makefile.config ../../Makefile.options ../../VERSION - cat ocsigen_config_static.ml.in \ - | sed s%_VERSION_%${VERSION}% \ - | sed s%_WARNING_%"Warning: this file has been generated from ocsigen_config_static.ml.in - DO NOT MODIFY MANUALLY!"% \ - | sed s%_LOGDIR_%$(LOGDIR)% \ - | sed s%_DATADIR_%$(DATADIR)%g \ - | sed s%_BINDIR_%$(BINDIR)%g \ - | sed s%_EXTDIR_%$(LIBDIR)/ocsigenserver/extensions%g \ - | sed s%_STATICPAGESDIR_%$(STATICPAGESDIR)% \ - | sed s%_UP_%$(UPLOADDIR)%g \ - | sed s%_COMMANDPIPE_%$(COMMANDPIPE)%g \ - | sed s%_CONFIGDIR_%$(CONFIGDIR)% \ - | sed s%_ISNATIVE_%$(NATIVECODE_RUNTIME_DETECT)%g \ - | sed "s%_DEPS_%$(INITPACKAGE)%g" \ - > ocsigen_config_static.ml - -## Clean up - -clean: - -rm -f ocsigen_config_static.ml - -distclean: clean - -rm -f *~ \#* .\#* diff --git a/src/baselib/dune b/src/baselib/dune index 37d2e2281..c9f64d100 100644 --- a/src/baselib/dune +++ b/src/baselib/dune @@ -32,3 +32,8 @@ from (dynlink -> dynlink_wrapper.natdynlink.ml) (_ -> dynlink_wrapper.nonatdynlink.ml)))) + +(rule + (with-stdout-to + ocsigen_config_static.ml + (run ../files/ocsigenserver.conf/gen.exe static.ml))) diff --git a/src/extensions/Makefile b/src/extensions/Makefile deleted file mode 100644 index 28dbae0ff..000000000 --- a/src/extensions/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -include ../../Makefile.config - -.PHONY: default -default: build - -.PHONY: build -build:: - dune build - -## Clean up - -distclean: clean - -rm -f *~ \#* .\#* - ${MAKE} -C deflatemod distclean diff --git a/src/files/ocsigenserver.conf.in b/src/files/ocsigenserver.conf.in deleted file mode 100644 index 8a5b50a61..000000000 --- a/src/files/ocsigenserver.conf.in +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - 80 - - _LOGDIR_ - _DATADIR_ - - - - utf-8 - - - - - - - - - - - - - - - - - - - - - diff --git a/src/files/ocsigenserver.conf/dune b/src/files/ocsigenserver.conf/dune new file mode 100644 index 000000000..c33a6c361 --- /dev/null +++ b/src/files/ocsigenserver.conf/dune @@ -0,0 +1,3 @@ +(executable + (name gen) + (libraries str unix)) diff --git a/src/files/ocsigenserver.conf/gen.ml b/src/files/ocsigenserver.conf/gen.ml new file mode 100644 index 000000000..8976b2fb4 --- /dev/null +++ b/src/files/ocsigenserver.conf/gen.ml @@ -0,0 +1,158 @@ +let conf_in = + {| + + + + + + + + _PORT_ + + _LOGDIR_ + _DATADIR_ + _COMMANDPIPE_ + _MIMEFILE_ + + utf-8 + + _FINDLIBEXTRA_ + + + + + + + + + + + + + + + + + + +|} + +let conf_ml = + {|(* Warning: this file has been generated - DO NOT MODIFY! *) + +let version_number = _VERSION_ +let config_file = ref _CONFIGFILE_ +let is_native = Sys.backend_type = Sys.Native +let logdir = ref (Some _LOGDIR_) +let mimefile = ref _MIMEFILE_ +let datadir = ref _DATADIR_ +let bindir = ref _BINDIR_ +let extdir = ref _EXTDIR_ +let command_pipe = ref _COMMANDPIPE_ +let builtin_packages = + List.fold_left + (fun a s -> Ocsigen_lib.String.Set.add s a) + Ocsigen_lib.String.Set.empty + [_DEPS_]|} + +let interpolate f s = + let regexp = Str.regexp "_\\([A-Z]+\\)_" in + let f s = f (Str.matched_group 1 s) in + Str.global_substitute regexp f s + +open Options + +let libdir () = + if libdir_set = 0 + then ( + let inp = Unix.open_process_in "ocamlfind printconf destdir" in + let libdir = input_line inp in + ignore (Unix.close_process_in inp); + libdir) + else libdir + +let deps () = + let extra_deps = + [ "ocsigenserver.polytables" + ; "ocsigenserver.cookies" + ; "ocsigenserver.baselib.base" + ; "ocsigenserver.baselib" + ; "ocsigenserver.http" + ; "ocsigenserver" ] + in + let packages = + "lwt_ssl,bytes,lwt.unix,lwt_log,ipaddr,findlib,cryptokit,re,str,xml-light,dynlink,cohttp-lwt-unix,hmap" + in + let inp = + Unix.open_process_in ("ocamlfind query -p-format -recursive " ^ packages) + in + let deps = ref [] in + (try + while true do + deps := input_line inp :: !deps + done + with End_of_file -> ()); + ignore (Unix.close_process_in inp); + !deps @ extra_deps + +(* Encode a string as a string literal that can be included in an ocaml file. *) +let str = Printf.sprintf "%S" +let ( // ) = Filename.concat + +let static_options = function + | "VERSION" -> str version + | "LOGDIR" -> str logdir + | "DATADIR" -> str datadir + | "BINDIR" -> str bindir + | "EXTDIR" -> str (libdir () // "ocsigenserver" // "extensions") + | "STATICPAGESDIR" -> str staticpagesdir + | "UP" -> str uploaddir + | "COMMANDPIPE" -> str commandpipe + | "CONFIGDIR" -> str configdir + | "CONFIGFILE" -> str (configdir // "ocsigenserver.conf") + | "MIMEFILE" -> str (configdir // "mime.types") + | "DEPS" -> String.concat ";" (List.map (Format.asprintf "%S") (deps ())) + | _ as s -> failwith s + +let sample_options = function + | "PORT" -> string_of_int port + | "LOGDIR" -> logdir + | "DATADIR" -> datadir + | "COMMANDPIPE" -> "" + | "MIMEFILE" -> "" + | "LIBDIR" | "METADIR" -> libdir () + | "EXTPACKAGENAME" -> "ocsigenserver.ext" + | "CONFIGDIR" -> configdir + | "STATICPAGESDIR" -> staticpagesdir + | "FINDLIBEXTRA" -> "" + | _ as s -> failwith s + +let local_options = function + | "PORT" -> "8080" + | "LOGDIR" -> src ^ "/local/var/log" + | "DATADIR" -> src ^ "/local/var/lib" + | "COMMANDPIPE" -> + "" ^ src + ^ "/local/var/run/ocsigenserver_command" + | "MIMEFILE" -> "" ^ src ^ "/src/files/mime.types" + | "LIBDIR" | "METADIR" -> libdir () + | "EXTPACKAGENAME" -> "ocsigenserver.ext" + | "CONFIGDIR" -> src ^ "/local/etc/ocsigenserver" + | "STATICPAGESDIR" -> src ^ "/local/var/www" + | "FINDLIBEXTRA" -> + "" + | _ as s -> failwith s + +let () = + let arg = if Array.length Sys.argv > 1 then Sys.argv.(1) else "" in + print_endline + @@ + match arg with + | "static.ml" -> interpolate static_options conf_ml + | "local" -> interpolate local_options conf_in + | "sample" -> interpolate sample_options conf_in + | _ -> failwith arg diff --git a/src/files/ocsigenserver.conf/options.ml b/src/files/ocsigenserver.conf/options.ml new file mode 100644 index 000000000..263688f24 --- /dev/null +++ b/src/files/ocsigenserver.conf/options.ml @@ -0,0 +1,13 @@ +let version = "dev" +let src = "" +let port = 80 +let bindir = "" +let libdir = "" +let libdir_set = 0 +let logdir = "" +let configdir = "" +let staticpagesdir = "" +let datadir = "" +let uploaddir = "" +let commandpipe = "" +let mimefile = "" diff --git a/src/http/Makefile b/src/http/Makefile deleted file mode 100644 index 4520a8aef..000000000 --- a/src/http/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -.PHONY: default -default: build - -.PHONY: build -build: - dune build - -## Clean up - -distclean: clean - -rm -f *~ \#* .\#*