blueloveTH 2 luni în urmă
părinte
comite
bbddcc7ef7
2 a modificat fișierele cu 25 adăugiri și 5 ștergeri
  1. 23 5
      amalgamate.py
  2. 2 0
      include/pocketpy/pocketpy.h

+ 23 - 5
amalgamate.py

@@ -80,7 +80,14 @@ for entry in os.listdir(ROOT):
 			headers[f'{entry}/{file}'] = Header(f'{entry}/{file}')
 
 def merge_c_files():
-	c_files = [COPYRIGHT, '\n', '#include "pocketpy.h"', '\n']
+	c_files = [
+		COPYRIGHT,
+		'\n',
+		'#define PK_IS_AMALGAMATED_C',
+		'\n',
+		'#include "pocketpy.h"',
+		'\n'
+	]
 
 	# merge internal headers
 	internal_h = []
@@ -123,7 +130,12 @@ def merge_c_files():
 	return ''.join(c_files)
 
 def merge_h_files():
-	h_files = [COPYRIGHT, '#pragma once']
+	h_files = [
+		COPYRIGHT,
+		'#pragma once',
+		'\n',
+		'#define PK_IS_PUBLIC_INCLUDE',
+	]
 
 	def _replace(m):
 		path = m.group(1)
@@ -148,9 +160,15 @@ write_file('amalgamated/pocketpy.h', merge_h_files())
 
 shutil.copy("src2/main.c", "amalgamated/main.c")
 
+def checked_sh(cmd):
+	ok = os.system(cmd)
+	assert ok == 0, f"command failed: {cmd}"
+
 if sys.platform in ['linux', 'darwin']:
-	ok = os.system("gcc -o main amalgamated/pocketpy.c amalgamated/main.c -O1 --std=c11 -lm -ldl -lpthread")
-	if ok == 0:
-		print("Test build success!")
+	common_flags = "-O1 --std=c11 -lm -ldl -lpthread -Iamalgamated"
+	checked_sh(f"gcc -o main amalgamated/pocketpy.c src2/example.c {common_flags}")
+	checked_sh("./main && rm -f ./main")
+	checked_sh(f"gcc -o main amalgamated/pocketpy.c amalgamated/main.c {common_flags}")
+
 
 print("amalgamated/pocketpy.h")

+ 2 - 0
include/pocketpy/pocketpy.h

@@ -28,6 +28,7 @@ typedef double py_f64;
 /// A generic destructor function.
 typedef void (*py_Dtor)(void*);
 
+#ifndef PK_IS_AMALGAMATED_C
 #ifdef PK_IS_PUBLIC_INCLUDE
 typedef struct py_TValue {
     py_Type type;
@@ -40,6 +41,7 @@ typedef struct py_TValue {
     };
 } py_TValue;
 #endif
+#endif
 
 /// A string view type. It is helpful for passing strings which are not null-terminated.
 typedef struct c11_sv {