1 /* $OpenBSD: enginechoice.c,v 1.4 2023/09/04 11:35:11 espie Exp $ */ 2 /* 3 * Copyright (c) 2020 Marc Espie. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS 15 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 17 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBSD 18 * PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 19 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 20 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 #include "defines.h" 27 #include "compat.h" 28 #include "make.h" 29 #include "enginechoice.h" 30 31 struct engine { 32 void (*run_list)(Lst, bool *, bool *); 33 void (*node_updated)(GNode *); 34 void (*init)(void); 35 } 36 compat_engine = { Compat_Run, Compat_Update, Compat_Init }, 37 parallel_engine = { Make_Run, Make_Update, Make_Init }, 38 *engine; 39 40 void 41 choose_engine(bool compat) 42 { 43 engine = compat ? &compat_engine: ¶llel_engine; 44 engine->init(); 45 } 46 47 void 48 engine_run_list(Lst l, bool *has_errors, bool *out_of_date) 49 { 50 engine->run_list(l, has_errors, out_of_date); 51 } 52 53 void 54 engine_node_updated(GNode *gn) 55 { 56 engine->node_updated(gn); 57 } 58