From e3ee0b4304e190436375a913fe66f072a41bf505 Mon Sep 17 00:00:00 2001 From: ketmar Date: Fri, 16 May 2014 16:43:16 +0300 Subject: [PATCH] Main renamed to C-Main; new Main now will try to detect language --- defaults/main/Jambase.main | 51 ++++++++++++++++++++++++++++++++++++++++++++ defaults/main/Jambase.main.c | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/defaults/main/Jambase.main b/defaults/main/Jambase.main index 77fdd79..88669db 100644 --- a/defaults/main/Jambase.main +++ b/defaults/main/Jambase.main @@ -79,6 +79,57 @@ rule --MainFromObjects-- { return $(5) ; } + +# /Main image : sources [ : targets ] ; +# +# Compiles _sources_ and links them into _image_. Calls @Objects and +# @MainFromObjects. +# +# _image_ may be supplied without suffix. +# +rule Main { + local main_name = ; + local detected ; + # detect which main we want + for local fn in $(2) { + if ! ( $(fname) ~= '^![^!]' ) { + #Echo "ext:" $(fn:S) ; + local ext = $(fn:S) ; + if $(ext) = '.d' { detected = Gdc-Main ; } + else if $(ext) = '.c' { detected = C-Main ; } + else if $(ext) = 'C' { detected = C++Main ; } + else if $(ext) ~= '/^\.c++/i' { detected = C++Main ; } + else if $(ext) ~= '/^\.cc/i' { detected = C++Main ; } + else if $(ext) ~= '/^\.cpp/i' { detected = C++Main ; } + else { detected = ; } + #Echo " detected:" $(detected) ; + #Echo " main_name:" $(main_name) ; + if $(detected) { + if ! $(main_name) { + main_name = $(detected) ; + } else if $(detected) != $(main_name) { + # two languages detected + if $(detected) == 'C-Main' { + # it's ok to mix C and C++ + if $(main_name) != 'C++Main' { Exit "Main: conflicting languages for $(1)" ; } + } else if $(detected) == 'C++Main' { + # it's ok to mix C and C++ + if $(main_name) != 'C-Main' { Exit "Main: conflicting languages for $(1)" ; } + main_name = 'C++Main' ; + } else { + Exit "Main: can't detect language for $(1)" ; + } + } + } + } + } + #Echo "main_name:" $(main_name) ; + if ! $(main_name) { Exit "Main: can't detect language for $(1)" ; } + #Echo "Main detected:" $(main_name) ; + $(main_name) ; +} + + . Jambase.main.attrs . Jambase.main.c . Jambase.main.cpp diff --git a/defaults/main/Jambase.main.c b/defaults/main/Jambase.main.c index 5d880d3..e232343 100644 --- a/defaults/main/Jambase.main.c +++ b/defaults/main/Jambase.main.c @@ -18,7 +18,7 @@ # # _image_ may be supplied without suffix. # -rule Main { +rule C-Main { local _tgts = [ --MainNormalizeTargets-- $(1) : $(3) ] ; local _xl = [ --MainFromObjects-- $(<) : $(>:S=$(SUFOBJ)) : $(_tgts) : Link : $(>) ] ; Objects $(_xl) : $(3) : $(1) ; -- 2.11.4.GIT