1 #ifndef _MK_DEFS_H 2 #define _MK_DEFS_H 3 /* 4 * CDDL HEADER START 5 * 6 * The contents of this file are subject to the terms of the 7 * Common Development and Distribution License (the "License"). 8 * You may not use this file except in compliance with the License. 9 * 10 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 11 * or http://www.opensolaris.org/os/licensing. 12 * See the License for the specific language governing permissions 13 * and limitations under the License. 14 * 15 * When distributing Covered Code, include this CDDL HEADER in each 16 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 17 * If applicable, add the following below this CDDL HEADER, with the 18 * fields enclosed by brackets "[]" replaced with your own identifying 19 * information: Portions Copyright [yyyy] [name of copyright owner] 20 * 21 * CDDL HEADER END 22 */ 23 /* 24 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 25 * Use is subject to license terms. 26 */ 27 28 /* 29 * Included files 30 */ 31 #ifdef DISTRIBUTED 32 # include <dm/Avo_AcknowledgeMsg.h> 33 # include <dm/Avo_DoJobMsg.h> 34 # include <dm/Avo_JobResultMsg.h> 35 #endif 36 37 #include <mksh/defs.h> 38 39 #if defined(DISTRIBUTED) || defined(MAKETOOL) /* tolik */ 40 # include <rw/xdrstrea.h> 41 #endif 42 43 44 /* 45 * Defined macros 46 */ 47 48 #define SKIPSPACE(x) while (*x && \ 49 ((*x == (int) space_char) || \ 50 (*x == (int) tab_char) || \ 51 (*x == (int) comma_char))) { \ 52 x++; \ 53 } 54 55 #define SKIPWORD(x) while (*x && \ 56 (*x != (int) space_char) && \ 57 (*x != (int) tab_char) && \ 58 (*x != (int) newline_char) && \ 59 (*x != (int) comma_char) && \ 60 (*x != (int) equal_char)) { \ 61 x++; \ 62 } 63 64 #define SKIPTOEND(x) while (*x && \ 65 (*x != (int) newline_char)) { \ 66 x++; \ 67 } 68 69 #define PMAKE_DEF_MAX_JOBS 2 /* Default number of parallel jobs. */ 70 71 #define OUT_OF_DATE(a,b) \ 72 (((a) < (b)) || (((a) == file_doesnt_exist) && ((b) == file_doesnt_exist))) 73 74 #define OUT_OF_DATE_SEC(a,b) \ 75 (((a).tv_sec < (b).tv_sec) || (((a).tv_sec == file_doesnt_exist.tv_sec) && ((b).tv_sec == file_doesnt_exist.tv_sec))) 76 77 #define SETVAR(name, value, append) \ 78 setvar_daemon(name, value, append, no_daemon, \ 79 true, debug_level) 80 #ifdef SUN5_0 81 #define MAX(a,b) (((a)>(b))?(a):(b)) 82 /* 83 * New feature added to SUN5_0 make, invoke the vanilla svr4 make when 84 * the USE_SVR4_MAKE environment variable is set. 85 */ 86 #define SVR4_MAKE "/usr/ccs/lib/svr4.make" 87 #define USE_SVR4_MAKE "USE_SVR4_MAKE" 88 #endif 89 /* 90 * The standard MAXHOSTNAMELEN is 64. We want 32. 91 */ 92 #define MAX_HOSTNAMELEN 32 93 94 95 /* 96 * typedefs & structs 97 */ 98 typedef enum { 99 no_state, 100 scan_name_state, 101 scan_command_state, 102 enter_dependencies_state, 103 enter_conditional_state, 104 enter_equal_state, 105 illegal_bytes_state, 106 illegal_eoln_state, 107 poorly_formed_macro_state, 108 exit_state 109 } Reader_state; 110 111 struct _Name_vector { 112 struct _Name *names[64]; 113 struct _Chain *target_group[64]; 114 short used; 115 struct _Name_vector *next; 116 }; 117 118 struct _Running { 119 struct _Running *next; 120 Doname state; 121 struct _Name *target; 122 struct _Name *true_target; 123 struct _Property *command; 124 struct _Name *sprodep_value; 125 char *sprodep_env; 126 int recursion_level; 127 Boolean do_get; 128 Boolean implicit; 129 Boolean redo; 130 int auto_count; 131 struct _Name **automatics; 132 pid_t pid; 133 #ifdef TEAMWARE_MAKE_CMN 134 int job_msg_id; 135 #else 136 int host; 137 #endif 138 char *stdout_file; 139 char *stderr_file; 140 struct _Name *temp_file; 141 int conditional_cnt; 142 struct _Name **conditional_targets; 143 #ifdef TEAMWARE_MAKE_CMN 144 Boolean make_refd; 145 #endif 146 }; 147 148 typedef enum { 149 serial_mode, 150 parallel_mode, 151 distributed_mode 152 } DMake_mode; 153 154 typedef enum { 155 txt1_mode, 156 txt2_mode, 157 html1_mode 158 } DMake_output_mode; 159 160 struct _Recursive_make { 161 struct _Recursive_make *next; /* Linked list */ 162 wchar_t *target;/* Name of target */ 163 wchar_t *oldline;/* Original line in .nse_depinfo */ 164 wchar_t *newline;/* New line in .nse_depinfo */ 165 wchar_t *cond_macrostring; 166 /* string built from value of 167 * conditional macros used by 168 * this target 169 */ 170 Boolean removed;/* This target is no longer recursive*/ 171 }; 172 173 struct _Dyntarget { 174 struct _Dyntarget *next; 175 struct _Name *name; 176 }; 177 178 179 /* 180 * Typedefs for all structs 181 */ 182 typedef struct _Cmd_line *Cmd_line, Cmd_line_rec; 183 typedef struct _Dependency *Dependency, Dependency_rec; 184 typedef struct _Macro *Macro, Macro_rec; 185 typedef struct _Name_vector *Name_vector, Name_vector_rec; 186 typedef struct _Percent *Percent, Percent_rec; 187 typedef struct _Dyntarget *Dyntarget; 188 typedef struct _Recursive_make *Recursive_make, Recursive_make_rec; 189 typedef struct _Running *Running, Running_rec; 190 191 192 /* 193 * extern declarations for all global variables. 194 * The actual declarations are in globals.cc 195 */ 196 extern Boolean allrules_read; 197 extern Name posix_name; 198 extern Name svr4_name; 199 extern Boolean sdot_target; 200 extern Boolean all_parallel; 201 extern Boolean assign_done; 202 extern Boolean build_failed_seen; 203 #ifdef DISTRIBUTED 204 extern Boolean building_serial; 205 #endif 206 extern Name built_last_make_run; 207 extern Name c_at; 208 #ifdef DISTRIBUTED 209 extern Boolean called_make; 210 #endif 211 extern Boolean command_changed; 212 extern Boolean commands_done; 213 extern Chain conditional_targets; 214 extern Name conditionals; 215 extern Boolean continue_after_error; 216 extern Property current_line; 217 extern Name current_make_version; 218 extern Name current_target; 219 extern short debug_level; 220 extern Cmd_line default_rule; 221 extern Name default_rule_name; 222 extern Name default_target_to_build; 223 extern Boolean depinfo_already_read; 224 extern Name dmake_group; 225 extern Name dmake_max_jobs; 226 extern Name dmake_mode; 227 extern DMake_mode dmake_mode_type; 228 extern Name dmake_output_mode; 229 extern DMake_output_mode output_mode; 230 extern Name dmake_odir; 231 extern Name dmake_rcfile; 232 extern Name done; 233 extern Name dot; 234 extern Name dot_keep_state; 235 extern Name dot_keep_state_file; 236 extern Name empty_name; 237 extern Boolean fatal_in_progress; 238 extern int file_number; 239 extern Name force; 240 extern Name ignore_name; 241 extern Boolean ignore_errors; 242 extern Boolean ignore_errors_all; 243 extern Name init; 244 extern int job_msg_id; 245 extern Boolean keep_state; 246 extern Name make_state; 247 #ifdef TEAMWARE_MAKE_CMN 248 extern timestruc_t make_state_before; 249 #endif 250 extern Boolean make_state_locked; 251 extern Dependency makefiles_used; 252 extern Name makeflags; 253 extern Name make_version; 254 extern char mbs_buffer2[]; 255 extern char *mbs_ptr; 256 extern char *mbs_ptr2; 257 extern Boolean no_action_was_taken; 258 extern int mtool_msgs_fd; 259 extern Boolean no_parallel; 260 #ifdef SGE_SUPPORT 261 extern Boolean grid; 262 #endif 263 extern Name no_parallel_name; 264 extern Name not_auto; 265 extern Boolean only_parallel; 266 extern Boolean parallel; 267 extern Name parallel_name; 268 extern Name localhost_name; 269 extern int parallel_process_cnt; 270 extern Percent percent_list; 271 extern Dyntarget dyntarget_list; 272 extern Name plus; 273 extern Name pmake_machinesfile; 274 extern Name precious; 275 extern Name primary_makefile; 276 extern Boolean quest; 277 extern short read_trace_level; 278 extern Boolean reading_dependencies; 279 extern int recursion_level; 280 extern Name recursive_name; 281 extern short report_dependencies_level; 282 extern Boolean report_pwd; 283 extern Boolean rewrite_statefile; 284 extern Running running_list; 285 extern char *sccs_dir_path; 286 extern Name sccs_get_name; 287 extern Name sccs_get_posix_name; 288 extern Cmd_line sccs_get_rule; 289 extern Cmd_line sccs_get_org_rule; 290 extern Cmd_line sccs_get_posix_rule; 291 extern Name get_name; 292 extern Name get_posix_name; 293 extern Cmd_line get_rule; 294 extern Cmd_line get_posix_rule; 295 extern Boolean send_mtool_msgs; 296 extern Boolean all_precious; 297 extern Boolean report_cwd; 298 extern Boolean silent_all; 299 extern Boolean silent; 300 extern Name silent_name; 301 extern char *stderr_file; 302 extern char *stdout_file; 303 #ifdef SGE_SUPPORT 304 extern char script_file[]; 305 #endif 306 extern Boolean stdout_stderr_same; 307 extern Dependency suffixes; 308 extern Name suffixes_name; 309 extern Name sunpro_dependencies; 310 extern Boolean target_variants; 311 extern const char *tmpdir; 312 extern const char *temp_file_directory; 313 extern Name temp_file_name; 314 extern short temp_file_number; 315 extern wchar_t *top_level_target; 316 extern Boolean touch; 317 extern Boolean trace_reader; 318 extern Boolean build_unconditional; 319 extern pathpt vroot_path; 320 extern Name wait_name; 321 extern wchar_t wcs_buffer2[]; 322 extern wchar_t *wcs_ptr; 323 extern wchar_t *wcs_ptr2; 324 extern nl_catd catd; 325 extern long int hostid; 326 327 /* 328 * Declarations of system defined variables 329 */ 330 #if !defined(linux) 331 /* On linux this variable is defined in 'signal.h' */ 332 extern char *sys_siglist[]; 333 #endif 334 335 /* 336 * Declarations of system supplied functions 337 */ 338 extern int file_lock(char *, char *, int *, int); 339 340 /* 341 * Declarations of functions declared and used by make 342 */ 343 extern void add_pending(Name target, int recursion_level, Boolean do_get, Boolean implicit, Boolean redo); 344 extern void add_running(Name target, Name true_target, Property command, int recursion_level, int auto_count, Name *automatics, Boolean do_get, Boolean implicit); 345 extern void add_serial(Name target, int recursion_level, Boolean do_get, Boolean implicit); 346 extern void add_subtree(Name target, int recursion_level, Boolean do_get, Boolean implicit); 347 extern void append_or_replace_macro_in_dyn_array(ASCII_Dyn_Array *Ar, char *macro); 348 #ifdef DISTRIBUTED 349 extern Doname await_dist(Boolean waitflg); 350 #endif 351 #ifdef TEAMWARE_MAKE_CMN 352 extern void await_parallel(Boolean waitflg); 353 #endif 354 extern void build_suffix_list(Name target_suffix); 355 extern Boolean check_auto_dependencies(Name target, int auto_count, Name *automatics); 356 extern void check_state(Name temp_file_name); 357 extern void cond_macros_into_string(Name np, String_rec *buffer); 358 extern void construct_target_string(); 359 extern void create_xdrs_ptr(void); 360 extern void depvar_add_to_list (Name name, Boolean cmdline); 361 #ifdef DISTRIBUTED 362 extern void distribute_rxm(Avo_DoJobMsg *dmake_job_msg); 363 extern int getRxmMessage(void); 364 extern Avo_JobResultMsg* getJobResultMsg(void); 365 extern Avo_AcknowledgeMsg* getAcknowledgeMsg(void); 366 #endif 367 extern Doname doname(register Name target, register Boolean do_get, register Boolean implicit, register Boolean automatic = false); 368 extern Doname doname_check(register Name target, register Boolean do_get, register Boolean implicit, register Boolean automatic); 369 extern Doname doname_parallel(Name target, Boolean do_get, Boolean implicit); 370 extern Doname dosys(register Name command, register Boolean ignore_error, register Boolean call_make, Boolean silent_error, Boolean always_exec, Name target, Boolean redirect_out_err); 371 extern void dump_make_state(void); 372 extern void dump_target_list(void); 373 extern void enter_conditional(register Name target, Name name, Name value, register Boolean append); 374 extern void enter_dependencies(register Name target, Chain target_group, register Name_vector depes, register Cmd_line command, register Separator separator); 375 extern void enter_dependency(Property line, register Name depe, Boolean automatic); 376 extern void enter_equal(Name name, Name value, register Boolean append); 377 extern Percent enter_percent(register Name target, Chain target_group, register Name_vector depes, Cmd_line command); 378 extern Dyntarget enter_dyntarget(register Name target); 379 extern Name_vector enter_name(String string, Boolean tail_present, register wchar_t *string_start, register wchar_t *string_end, Name_vector current_names, Name_vector *extra_names, Boolean *target_group_seen); 380 extern Boolean exec_vp(register char *name, register char **argv, char **envp, register Boolean ignore_error); 381 extern Doname execute_parallel(Property line, Boolean waitflg, Boolean local = false); 382 extern Doname execute_serial(Property line); 383 extern timestruc_t& exists(register Name target); 384 extern void fatal(char *, ...); 385 extern void fatal_reader(char *, ...); 386 extern Doname find_ar_suffix_rule(register Name target, Name true_target, Property *command, Boolean rechecking); 387 extern Doname find_double_suffix_rule(register Name target, Property *command, Boolean rechecking); 388 extern Doname find_percent_rule(register Name target, Property *command, Boolean rechecking); 389 extern int find_run_directory (char *cmd, char *cwd, char *dir, char **pgm, char **run, char *path); 390 extern Doname find_suffix_rule(Name target, Name target_body, Name target_suffix, Property *command, Boolean rechecking); 391 extern Chain find_target_groups(register Name_vector target_list, register int i, Boolean reset); 392 extern void finish_children(Boolean docheck); 393 extern void finish_running(void); 394 extern void free_chain(Name_vector ptr); 395 extern void gather_recursive_deps(void); 396 extern char *get_current_path(void); 397 extern int get_job_msg_id(void); 398 extern FILE *get_mtool_msgs_fp(void); 399 #ifdef DISTRIBUTED 400 extern Boolean get_dmake_group_specified(void); 401 extern Boolean get_dmake_max_jobs_specified(void); 402 extern Boolean get_dmake_mode_specified(void); 403 extern Boolean get_dmake_odir_specified(void); 404 extern Boolean get_dmake_rcfile_specified(void); 405 extern Boolean get_pmake_machinesfile_specified(void); 406 #endif 407 #if defined(DISTRIBUTED) || defined(MAKETOOL) /* tolik */ 408 extern XDR *get_xdrs_ptr(void); 409 #endif 410 extern wchar_t *getmem_wc(register int size); 411 #if !defined(linux) 412 /* On linux getwd(char *) is defined in 'unistd.h' */ 413 #ifdef __cplusplus 414 extern "C" { 415 #endif 416 extern char *getwd(char *); 417 #ifdef __cplusplus 418 } 419 #endif 420 #endif 421 extern void handle_interrupt(int); 422 extern Boolean is_running(Name target); 423 extern void load_cached_names(void); 424 extern Boolean parallel_ok(Name target, Boolean line_prop_must_exists); 425 extern void print_dependencies(register Name target, register Property line); 426 extern void send_job_start_msg(Property line); 427 extern void send_rsrc_info_msg(int max_jobs, char *hostname, char *username); 428 extern void print_value(register Name value, Daemon daemon); 429 extern timestruc_t& read_archive(register Name target); 430 extern int read_dir(Name dir, wchar_t *pattern, Property line, wchar_t *library); 431 extern void read_directory_of_file(register Name file); 432 extern int read_make_machines(Name make_machines_name); 433 extern Boolean read_simple_file(register Name makefile_name, register Boolean chase_path, register Boolean doname_it, Boolean complain, Boolean must_exist, Boolean report_file, Boolean lock_makefile); 434 extern void remove_recursive_dep(Name target); 435 extern void report_recursive_dep(Name target, char *line); 436 extern void report_recursive_done(void); 437 extern void report_recursive_init(void); 438 extern Recursive_make find_recursive_target(Name target); 439 extern void reset_locals(register Name target, register Property old_locals, register Property conditional, register int index); 440 extern void set_locals(register Name target, register Property old_locals); 441 extern void setvar_append(register Name name, register Name value); 442 #ifdef DISTRIBUTED 443 extern void setvar_envvar(Avo_DoJobMsg *dmake_job_msg); 444 #else 445 extern void setvar_envvar(void); 446 #endif 447 extern void special_reader(Name target, register Name_vector depes, Cmd_line command); 448 extern void startup_rxm(); 449 extern Doname target_can_be_built(register Name target); 450 extern char *time_to_string(const timestruc_t &time); 451 extern void update_target(Property line, Doname result); 452 extern void warning(char *, ...); 453 extern void write_state_file(int report_recursive, Boolean exiting); 454 extern Name vpath_translation(register Name cmd); 455 456 #define DEPINFO_FMT_VERSION "VERS2$" 457 #define VER_LEN strlen(DEPINFO_FMT_VERSION) 458 459 #ifdef NSE 460 461 /* 462 * NSE version for depinfo format 463 */ 464 extern Boolean nse; 465 extern Name nse_backquote_seen; 466 extern Boolean nse_did_recursion; 467 extern Name nse_shell_var_used; 468 extern Boolean nse_watch_vars; 469 extern wchar_t current_makefile[MAXPATHLEN]; 470 extern Boolean nse_depinfo_locked; 471 extern char nse_depinfo_lockfile[MAXPATHLEN]; 472 extern Name derived_src; 473 474 extern void depvar_dep_macro_used(Name); 475 extern void depvar_rule_macro_used(Name); 476 extern Boolean nse_backquotes(wchar_t *); 477 extern void nse_check_cd(Property); 478 extern void nse_check_derived_src(Name, wchar_t *, Cmd_line); 479 extern void nse_check_file_backquotes(wchar_t *); 480 extern void nse_check_no_deps_no_rule(Name, Property, Property); 481 extern void nse_check_sccs(wchar_t *, wchar_t *); 482 extern void nse_dep_cmdmacro(wchar_t *); 483 extern int nse_exit_status(void); 484 extern void nse_init_source_suffixes(void); 485 extern void nse_no_makefile(Name); 486 extern void nse_rule_cmdmacro(wchar_t *); 487 extern void nse_wildcard(wchar_t *, wchar_t *); 488 #endif 489 490 #endif