Skip to content

Commit d434329

Browse files
committed
Create src/ files
1 parent 9b2be23 commit d434329

File tree

2 files changed

+49
-8
lines changed

2 files changed

+49
-8
lines changed

cmake/scripts/dkcoder/project/init.cmake

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,19 @@ macro(dkcoder_project_init)
117117
set(init_OPTIONS)
118118
# all DkStd_Std commands must run in old versions of DkCoder. Confer dkcoder/src/DkStd_Std/README.md
119119
set(dk_run DkRun_V2_2.RunAway)
120-
if(NOT ARG_QUIET)
120+
if(NOT ARG_QUIET)
121121
string(APPEND init_OPTIONS " -verbose")
122122
endif()
123123

124+
set(init_ARGS)
125+
set(postinstall_WIN32)
126+
set(postinstall_UNIX)
127+
if(NOT ARG_NOSRC)
128+
string(APPEND init_ARGS " MyScripts_Std.StartHere=")
129+
set(postinstall_WIN32 "ECHO suggestion: Run with `./dk MyScripts_Std.StartHere`\nECHO suggestion: Open project in VSCode and install the recommended plugins.")
130+
set(postinstall_UNIX "echo 'suggestion: Run with `./dk MyScripts_Std.StartHere`'\necho 'suggestion: Open project in VSCode and install the recommended plugins.'")
131+
endif()
132+
124133
# Run the command as a post script. Why?
125134
# 1. We don't want to run ./dk inside of ./dk. Not sure how the environment variables (etc.) interact.
126135
# 2. Makes it possible for DkStd_Std.Project.Init to erase the dkcoder/ project directory on Windows
@@ -137,12 +146,13 @@ REM 1. We copy the dk.cmd and __dk.cmake to the new project directory
137146
CALL "@dk_cmd_NATIVE@" @dk_run@ --generator dune --you-dir "@CMAKE_SOURCE_DIR_NATIVE@\src" -- DkStd_Std.Project.Init -windows-boot @init_OPTIONS@ "@DKCODER_PWD_NATIVE@" "@CMAKE_SOURCE_DIR_NATIVE@"
138147
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
139148
140-
REM 2. We do the dkcoder/ project deletion from the new project directory.
149+
REM 2. We do the dkcoder/ project deletion and src/ construction from the new project directory.
141150
REM The deletion will not erase the running dk.cmd script and cause 'The system cannot find the path specified.'
142-
CALL "@DKCODER_PWD_NATIVE@\dk.cmd" @dk_run@ --generator dune --you-dir "@CMAKE_SOURCE_DIR_NATIVE@\src" -- DkStd_Std.Project.Init -delete-dkcoder-after @init_OPTIONS@ "@DKCODER_PWD_NATIVE@" "@CMAKE_SOURCE_DIR_NATIVE@"
151+
CALL "@DKCODER_PWD_NATIVE@\dk.cmd" @dk_run@ --generator dune --you-dir "@CMAKE_SOURCE_DIR_NATIVE@\src" -- DkStd_Std.Project.Init -delete-dkcoder-after @init_OPTIONS@ "@DKCODER_PWD_NATIVE@" "@CMAKE_SOURCE_DIR_NATIVE@" @init_ARGS@
143152
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
144153
145154
ECHO dkcoder: project installed.
155+
@postinstall_WIN32@
146156
147157
REM The parent dk.cmd script was deleted, and if it continued then
148158
REM we would get 'The system cannot find the path specified.' so exit
@@ -154,8 +164,9 @@ EXIT 0
154164
file(CONFIGURE OUTPUT "${DKCODER_POST_SCRIPT}" CONTENT [[#!/bin/sh
155165
set -euf
156166
cd '@CMAKE_CURRENT_BINARY_DIR@'
157-
'@dk_cmd@' @dk_run@ --generator dune --you-dir '@CMAKE_SOURCE_DIR@/src' -- DkStd_Std.Project.Init -delete-dkcoder-after @init_OPTIONS@ '@DKCODER_PWD@' '@CMAKE_SOURCE_DIR@'
158-
ECHO "dkcoder: project installed."
167+
'@dk_cmd@' @dk_run@ --generator dune --you-dir '@CMAKE_SOURCE_DIR@/src' -- DkStd_Std.Project.Init -delete-dkcoder-after @init_OPTIONS@ '@DKCODER_PWD@' '@CMAKE_SOURCE_DIR@' @init_ARGS@
168+
echo "dkcoder: project installed."
169+
@postinstall_UNIX@
159170
]]
160171
@ONLY NEWLINE_STYLE UNIX)
161172
endif()
@@ -165,7 +176,7 @@ function(run)
165176
# Get helper functions from this file
166177
include(${CMAKE_CURRENT_FUNCTION_LIST_FILE})
167178

168-
set(noValues HELP MOREHELP QUIET)
179+
set(noValues HELP MOREHELP QUIET NOSRC)
169180
set(singleValues LOGLEVEL)
170181
set(multiValues)
171182
cmake_parse_arguments(PARSE_ARGV 0 ARG "${noValues}" "${singleValues}" "${multiValues}")

src/DkStd_Std/Project/Init.ml

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,38 @@ module Arg = Tr1Stdlib_V414CRuntime.Arg
22
module Bos = Tr1Bos_Std.Bos
33
module Format = Tr1Stdlib_V414CRuntime.Format
44
module Printf = Tr1Stdlib_V414CRuntime.Printf
5+
module List = Tr1Stdlib_V414Base.List
56
module Logs = Tr1Logs_Std.Logs
7+
module Map = Tr1Stdlib_V414Base.Map
68
module Out_channel = Tr1Stdlib_V414CRuntime.Out_channel
79
module StdExit = Tr1Stdlib_V414CRuntime.StdExit
810
module String = Tr1Stdlib_V414Base.String
11+
module Stringext = Tr1String_Ext.Stringext
912
module Sys = Tr1Stdlib_V414CRuntime.Sys
1013
let prerr_endline = Tr1Stdlib_V414Io.StdIo.prerr_endline
1114
let exit = Tr1Stdlib_V414CRuntime.StdExit.exit
1215

16+
module StringMap = Map.Make (String)
17+
1318
let verbose = ref false
1419
let windows_boot = ref false
1520
let delete_dkcoder_after = ref false
1621
let new_project_dir = ref ""
1722
let dkcoder_project_dir = ref ""
23+
let module_id_contents = ref StringMap.empty
24+
1825
let anon_fun s =
1926
if !new_project_dir = "" then
2027
new_project_dir := s
2128
else if !dkcoder_project_dir = "" then
2229
dkcoder_project_dir := s
30+
else
31+
match Stringext.cut ~on:"=" s with
32+
| None -> ()
33+
| Some (module_id, _contents_or_filename) ->
34+
module_id_contents := StringMap.add module_id "" !module_id_contents
2335

24-
let usage_msg = "DkStd_Std.Project.Init [-verbose] [-windows-boot] [-delete-dkcoder-after] NEW_PROJECT_DIR DKCODER_PROJECT_DIR"
36+
let usage_msg = "DkStd_Std.Project.Init [-verbose] [-windows-boot] [-delete-dkcoder-after] NEW_PROJECT_DIR DKCODER_PROJECT_DIR [MODULE_ID1=] [MODULE_ID2=] ..."
2537
let speclist =
2638
[
2739
("-verbose", Arg.Set verbose, "Output debug information.");
@@ -186,11 +198,29 @@ let () =
186198
(* Use CRLF on Windows since .json are "*.json text" in .gitattributes *)
187199
write_crlf_on_win32 settings_json (String.trim contents_settings_json_untrimmed));
188200

201+
(* src/**.ml *)
202+
let source_files = List.filter_map (fun (module_id, content) ->
203+
let ml_file =
204+
let src_mod = "src" :: Stringext.split ~on:'.' module_id in
205+
(String.concat "/" src_mod) ^ ".ml"
206+
in
207+
match Fpath.of_string ml_file with
208+
| Error (`Msg msg) -> Printf.eprintf "dkcoder: INVALID module id: %s. %s\n%!" module_id msg; exit 4
209+
| Ok fp ->
210+
let abs_fp = Fpath.(new_project_dirp // fp) in
211+
Bos.OS.Dir.create (Fpath.parent abs_fp) |> Utils.rmsg |> ignore;
212+
Bos.OS.File.write abs_fp content |> Utils.rmsg;
213+
Some ml_file)
214+
(StringMap.bindings !module_id_contents)
215+
in
216+
189217
(* git add, git update-index *)
190218
let project_files = ["dk"; "dk.cmd"; "__dk.cmake";
191219
".gitattributes"; ".gitignore";
192220
".ocamlformat";
193-
".vscode/settings.json"; ".vscode/extensions.json"] in
221+
".vscode/settings.json"; ".vscode/extensions.json"]
222+
@ source_files
223+
in
194224
Utils.git ~quiet:() ~slots ("add" :: project_files);
195225
Utils.git ~quiet:() ~slots ["update-index"; "--chmod=+x"; "dk"];
196226

0 commit comments

Comments
 (0)