#------------------------------------------------------ # Demonstration on how to create a GTK GUI using Psalm with GNU Make 4.3 # # Supposes the presence of the GNU coreutils 'mkfifo'. Requires Psalm 1.0.8 or higher. # # Run as follows: # make -f demo3.make # # December 6, 2022 by Peter van Eerten. #------------------------------------------------------ IN = /dev/shm/psalm.in OUT = /dev/shm/psalm.out define comm $(eval answer:=$(shell echo ${1} > $(IN) && read x < $(OUT) && echo $$x)) endef all: fifo psalm definitions gui signals mainloop retrieve exit clean exit: $(call comm,"EXIT") retrieve: $(call comm,"EXE gtk_toggle_button_get_active $(check1)") @echo Option -O2 enabled: $(answer) $(call comm,"EXE gtk_toggle_button_get_active $(check2)") @echo Strip Binary: $(answer) $(call comm,"EXE gtk_toggle_button_get_active $(check3)") @echo Add Debugging Symbols: $(answer) $(call comm,"EXE gtk_entry_get_text $(entry1)") @echo Path To Datadir: $(answer) $(call comm,"EXE gtk_entry_get_text $(entry2)") @echo Path To Mandir: $(answer) mainloop: @while test "$$event" != "$(window)" -a "$$event" != "$(button)"; do \ echo "EXE gtk_main_iteration" > $(IN); \ read answer < $(OUT); \ echo "CALLBACK 1" > $(IN); \ read event < $(OUT); \ done; signals: $(call comm,"EXE g_signal_connect_data $(window) delete-event callback NULL NULL 0") $(call comm,"EXE g_signal_connect_data $(button) clicked callback NULL NULL 0") gui: $(call comm,"EXE gtk_init NULL NULL") $(call comm,"EXE gtk_window_new 0") $(eval window:=$(answer)) $(call comm,"EXE gtk_window_set_title" $(window) "\"GNU Make and Psalm demo!\"") $(call comm,"EXE gtk_widget_set_size_request $(window) 400 300") $(call comm,"EXE gtk_window_set_position $(window) 1") $(call comm,"EXE gtk_fixed_new") $(eval fixed:=$(answer)) $(call comm,"EXE gtk_container_add $(window) $(fixed)") $(call comm,"EXE gtk_check_button_new_with_label \"Use -O2\"") $(eval check1:=$(answer)) $(call comm,"EXE gtk_fixed_put $(fixed) $(check1) 20 20") $(call comm,"EXE gtk_check_button_new_with_label \"Strip Binary\"") $(eval check2:=$(answer)) $(call comm,"EXE gtk_fixed_put $(fixed) $(check2) 20 50") $(call comm,"EXE gtk_check_button_new_with_label \"Add Debugging Symbols\"") $(eval check3:=$(answer)) $(call comm,"EXE gtk_fixed_put $(fixed) $(check3) 20 80") $(call comm,"EXE gtk_label_new \"Path To Datadir:\"") $(eval label1:=$(answer)) $(call comm,"EXE gtk_fixed_put $(fixed) $(label1) 20 140") $(call comm,"EXE gtk_entry_new") $(eval entry1:=$(answer)) $(call comm,"EXE gtk_entry_set_text $(entry1) \"/usr/local/share\"") $(call comm,"EXE gtk_fixed_put $(fixed) $(entry1) 130 130") $(call comm,"EXE gtk_label_new \"Path To Mandir:\"") $(eval label2:=$(answer)) $(call comm,"EXE gtk_fixed_put $(fixed) $(label2) 20 180") $(call comm,"EXE gtk_entry_new") $(eval entry2:=$(answer)) $(call comm,"EXE gtk_entry_set_text $(entry2) \"/usr/local/man\"") $(call comm,"EXE gtk_fixed_put $(fixed) $(entry2) 130 170") $(call comm,"EXE gtk_button_new_with_label \"Compile Now\"") $(eval button:=$(answer)) $(call comm,"EXE gtk_fixed_put $(fixed) $(button) 290 260") $(call comm,"EXE gtk_widget_show_all $(window)") definitions: $(call comm,"DEF libgtk-3.so.0 void gtk_init int int") $(call comm,"DEF libgtk-3.so.0 long gtk_window_new int") $(call comm,"DEF libgtk-3.so.0 void gtk_window_set_title int char*") $(call comm,"DEF libgtk-3.so.0 void gtk_window_set_position long int") $(call comm,"DEF libgtk-3.so.0 long gtk_button_new_with_label char*") $(call comm,"DEF libgtk-3.so.0 long gtk_check_button_new_with_label char*") $(call comm,"DEF libgtk-3.so.0 int gtk_toggle_button_get_active long") $(call comm,"DEF libgtk-3.so.0 long gtk_label_new char*") $(call comm,"DEF libgtk-3.so.0 long gtk_entry_new void") $(call comm,"DEF libgtk-3.so.0 void gtk_entry_set_text long char*") $(call comm,"DEF libgtk-3.so.0 char* gtk_entry_get_text long") $(call comm,"DEF libgtk-3.so.0 long gtk_fixed_new void") $(call comm,"DEF libgtk-3.so.0 long gtk_fixed_put long long int int") $(call comm,"DEF libgtk-3.so.0 void gtk_main_iteration void") $(call comm,"DEF libgtk-3.so.0 void gtk_widget_show_all int") $(call comm,"DEF libgtk-3.so.0 void gtk_widget_set_size_request long int int") $(call comm,"DEF libgtk-3.so.0 void gtk_container_add long long") $(call comm,"DEF libgobject-2.0.so.0 long g_signal_connect_data int char* address void* void* int") .PHONY: psalm psalm : @./psalm <$(IN) >$(OUT) & fifo : @mkfifo $(IN) $(OUT) clean : @rm -f $(IN) $(OUT)
Return to PSALM