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