1 /**
2  * \file   premake.h
3  * \brief  Program-wide constants and definitions.
4  * \author Copyright (c) 2002-2021 Jason Perkins and the Premake project
5  */
6 
7 #define lua_c
8 #include "lua.h"
9 #include "lauxlib.h"
10 #include "lualib.h"
11 
12 #include <stdlib.h>
13 
14 #define PREMAKE_VERSION        "5.0.0-alpha16"
15 #define PREMAKE_COPYRIGHT      "Copyright (C) 2002-2021 Jason Perkins and the Premake Project"
16 #define PREMAKE_PROJECT_URL    "https://github.com/premake/premake-core/wiki"
17 
18 /* Identify the current platform I'm not sure how to reliably detect
19  * Windows but since it is the most common I use it as the default */
20 #if defined(__linux__)
21 #define PLATFORM_LINUX    (1)
22 #define PLATFORM_STRING   "linux"
23 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
24 #define PLATFORM_BSD      (1)
25 #define PLATFORM_STRING   "bsd"
26 #elif defined(__APPLE__) && defined(__MACH__)
27 #define PLATFORM_MACOSX   (1)
28 #define PLATFORM_STRING   "macosx"
29 #elif defined(__sun__) && defined(__svr4__)
30 #define PLATFORM_SOLARIS  (1)
31 #define PLATFORM_STRING   "solaris"
32 #elif defined(__HAIKU__)
33 #define PLATFORM_HAIKU    (1)
34 #define PLATFORM_STRING   "haiku"
35 #elif defined (_AIX)
36 #define PLATFORM_AIX  (1)
37 #define PLATFORM_STRING  "aix"
38 #elif defined (__GNU__)
39 #define PLATFORM_HURD  (1)
40 #define PLATFORM_STRING  "hurd"
41 #else
42 #define PLATFORM_WINDOWS  (1)
43 #define PLATFORM_STRING   "windows"
44 #endif
45 
46 #define PLATFORM_POSIX  (PLATFORM_LINUX || PLATFORM_BSD || PLATFORM_MACOSX || PLATFORM_SOLARIS || PLATFORM_HAIKU)
47 
48 
49 /* Pull in platform-specific headers required by built-in functions */
50 #if PLATFORM_WINDOWS
51 #define WIN32_LEAN_AND_MEAN
52 #include <windows.h>
53 #else
54 #include <unistd.h>
55 #endif
56 #include <stdint.h>
57 
58 /* not all platforms define this */
59 #ifndef FALSE
60 #define FALSE 0
61 #endif
62 #ifndef TRUE
63 #define TRUE 1
64 #endif
65 
66 /* Fill in any missing bits */
67 #ifndef PATH_MAX
68 #define PATH_MAX   (4096)
69 #endif
70 
71 
72 /* A success return code */
73 #define OKAY   (0)
74 
75 
76 /* Bitmasks for the different script file search locations */
77 #define TEST_LOCAL     (0x01)
78 #define TEST_SCRIPTS   (0x02)
79 #define TEST_PATH      (0x04)
80 #define TEST_EMBEDDED  (0x08)
81 
82 
83 /* If a /scripts argument is present, its value */
84 extern const char* scripts_path;
85 
86 
87 /* Bootstrapping helper functions */
88 int do_chdir(lua_State* L, const char* path);
89 uint32_t do_hash(const char* str, int seed);
90 void do_getabsolute(char* result, const char* value, const char* relative_to);
91 int do_getcwd(char* buffer, size_t size);
92 int do_isabsolute(const char* path);
93 int do_absolutetype(const char* path);
94 int do_isfile(lua_State* L, const char* filename);
95 int do_locate(lua_State* L, const char* filename, const char* path);
96 void do_normalize(lua_State* L, char* buffer, const char* path);
97 int do_pathsearch(lua_State* L, const char* filename, const char* path);
98 void do_translate(char* value, const char sep);
99 
100 int term_doGetTextColor();
101 void term_doSetTextColor(int color);
102 void printLastError(lua_State* L);
103 
104 /* Built-in functions */
105 int criteria_compile(lua_State* L);
106 int criteria_delete(lua_State* L);
107 int criteria_matches(lua_State* L);
108 int debug_prompt(lua_State* L);
109 int path_getabsolute(lua_State* L);
110 int path_getrelative(lua_State* L);
111 int path_isabsolute(lua_State* L);
112 int path_join(lua_State* L);
113 int path_deferred_join(lua_State* L);
114 int path_has_deferred_join(lua_State* L);
115 int path_resolve_deferred_join(lua_State* L);
116 int path_normalize(lua_State* L);
117 int path_translate(lua_State* L);
118 int path_wildcards(lua_State* L);
119 int os_chdir(lua_State* L);
120 int os_chmod(lua_State* L);
121 int os_comparefiles(lua_State* L);
122 int os_copyfile(lua_State* L);
123 int os_getcwd(lua_State* L);
124 int os_getpass(lua_State* L);
125 int os_getWindowsRegistry(lua_State* L);
126 int os_listWindowsRegistry(lua_State* L);
127 int os_getversion(lua_State* L);
128 int os_host(lua_State* L);
129 int os_is64bit(lua_State* L);
130 int os_isdir(lua_State* L);
131 int os_isfile(lua_State* L);
132 int os_islink(lua_State* L);
133 int os_locate(lua_State* L);
134 int os_matchdone(lua_State* L);
135 int os_matchisfile(lua_State* L);
136 int os_matchname(lua_State* L);
137 int os_matchnext(lua_State* L);
138 int os_matchstart(lua_State* L);
139 int os_mkdir(lua_State* L);
140 int os_pathsearch(lua_State* L);
141 int os_realpath(lua_State* L);
142 #if PLATFORM_WINDOWS
143 // utf8 versions
144 int os_remove(lua_State* L);
145 int os_rename(lua_State* L);
146 #endif
147 int os_rmdir(lua_State* L);
148 int os_stat(lua_State* L);
149 int os_uuid(lua_State* L);
150 int os_writefile_ifnotequal(lua_State* L);
151 int os_touchfile(lua_State* L);
152 int os_compile(lua_State* L);
153 int premake_getEmbeddedResource(lua_State* L);
154 int string_endswith(lua_State* L);
155 int string_hash(lua_State* L);
156 int string_sha1(lua_State* L);
157 int string_startswith(lua_State* L);
158 int buffered_new(lua_State* L);
159 int buffered_write(lua_State* L);
160 int buffered_writeln(lua_State* L);
161 int buffered_close(lua_State* L);
162 int buffered_tostring(lua_State* L);
163 int term_getTextColor(lua_State* L);
164 int term_setTextColor(lua_State* L);
165 
166 #ifdef PREMAKE_CURL
167 int http_get(lua_State* L);
168 int http_post(lua_State* L);
169 int http_download(lua_State* L);
170 #endif
171 
172 #ifdef PREMAKE_COMPRESSION
173 int zip_extract(lua_State* L);
174 #endif
175 
176 #ifdef _MSC_VER
177  #ifndef snprintf
178   #define snprintf _snprintf
179  #endif
180 #endif
181 
182 /* Engine interface */
183 
184 typedef struct
185 {
186 	const char*          name;
187 	const unsigned char* bytecode;
188 	size_t               length;
189 } buildin_mapping;
190 
191 extern const buildin_mapping builtin_scripts[];
192 extern void  registerModules(lua_State* L);
193 
194 int premake_init(lua_State* L);
195 int premake_pcall(lua_State* L, int nargs, int nresults);
196 int premake_execute(lua_State* L, int argc, const char** argv, const char* script);
197 int premake_load_embedded_script(lua_State* L, const char* filename);
198 const buildin_mapping* premake_find_embedded_script(const char* filename);
199 
200 int premake_locate_executable(lua_State* L, const char* argv0);
201 int premake_test_file(lua_State* L, const char* filename, int searchMask);
202