From 0da81b301833a87dde90a620daa397908a2bbbdc Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 21 Nov 2007 14:47:15 -0600 Subject: [PATCH 1/8] Reuse existing console if present, or else open a new console, when -console is supplied --- vm/os-windows-nt.c | 10 ++++++++++ vm/os-windows-nt.h | 1 + 2 files changed, 11 insertions(+) diff --git a/vm/os-windows-nt.c b/vm/os-windows-nt.c index 7ea8155072..afd1e0ed3b 100755 --- a/vm/os-windows-nt.c +++ b/vm/os-windows-nt.c @@ -91,4 +91,14 @@ void c_to_factor_toplevel(CELL quot) void open_console(void) { + if(!console_open) + { + if(!AttachConsole(ATTACH_PARENT_PROCESS)) + { + if(AllocConsole()) + console_open = true; + } + else + console_open = true; + } } diff --git a/vm/os-windows-nt.h b/vm/os-windows-nt.h index f74c7b1883..9e451f0301 100755 --- a/vm/os-windows-nt.h +++ b/vm/os-windows-nt.h @@ -18,4 +18,5 @@ typedef char F_SYMBOL; void c_to_factor_toplevel(CELL quot); long exception_handler(PEXCEPTION_POINTERS pe); +bool console_open; void open_console(void); From 9695beb00c67a1d69c189a265e534c752b782a87 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 17:59:11 -0600 Subject: [PATCH 2/8] Rename the install.sh to factor.sh - Add install and update parameters to it --- misc/factor.sh | 203 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100755 misc/factor.sh diff --git a/misc/factor.sh b/misc/factor.sh new file mode 100755 index 0000000000..3f8152518c --- /dev/null +++ b/misc/factor.sh @@ -0,0 +1,203 @@ +#!/bin/bash -e + +# Programs returning != 0 will not cause script to exit +set +e + +# Case insensitive string comparison +shopt -s nocaseglob +#shopt -s nocasematch + +OS= +ARCH= +WORD= + +ensure_program_installed() { + echo -n "Checking for $1..." + result=`type -p $1` + if ! [[ -n $result ]] ; then + echo "not found!" + echo "Install $1 and try again." + exit 1 + fi + echo "found!" +} + +check_ret() { + RET=$? + if [[ $RET -ne 0 ]] ; then + echo $1 failed + exit 5 + fi +} + +check_gcc_version() { + GCC_VERSION=`gcc --version` + if [[ $GCC_VERSION == *3.3.* ]] ; then + echo "You have a known buggy version of gcc (3.3)" + echo "Install gcc 3.4 or higher and try again." + exit 1 + fi +} + +check_installed_programs() { + ensure_program_installed chmod + ensure_program_installed uname + ensure_program_installed git + ensure_program_installed wget + ensure_program_installed gcc + ensure_program_installed make + check_gcc_version +} + + +find_os() { + uname_s=`uname -s` + case $uname_s in + CYGWIN_NT-5.2-WOW64) OS=windows-nt;; + *CYGWIN_NT*) OS=windows-nt;; + *CYGWIN*) OS=windows-nt;; + *darwin*) OS=macosx;; + *Darwin*) OS=macosx;; + *linux*) OS=linux;; + *Linux*) OS=linux;; + esac +} + +find_architecture() { + uname_m=`uname -m` + case $uname_m in + i386) ARCH=x86;; + i686) ARCH=x86;; + *86) ARCH=x86;; + "Power Macintosh") ARCH=ppc;; + esac +} + +write_test_program() { + echo "#include " > $C_WORD.c + echo "int main(){printf(\"%d\", 8*sizeof(void*)); return 0; }" >> $C_WORD.c +} + +find_word_size() { + C_WORD=factor-word-size + write_test_program + gcc -o $C_WORD $C_WORD.c + WORD=$(./$C_WORD) + check_ret $C_WORD + rm -f $C_WORD* +} + +set_factor_binary() { + case $OS in + windows-nt) FACTOR_BINARY=factor-nt;; + macosx) FACTOR_BINARY=./Factor.app/Contents/MacOS/factor;; + *) FACTOR_BINARY=factor;; + esac +} + +echo_build_info() { + echo OS=$OS + echo ARCH=$ARCH + echo WORD=$WORD + echo FACTOR_BINARY=$FACTOR_BINARY + echo MAKE_TARGET=$MAKE_TARGET + echo BOOT_IMAGE=$BOOT_IMAGE +} + +set_build_info() { + if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then + echo "OS, ARCH, or WORD is empty. Please report this" + exit 4 + fi + MAKE_TARGET=$OS-$ARCH-$WORD + BOOT_IMAGE=boot.$ARCH.$WORD.image +} + +find_build_info() { + find_os + find_architecture + find_word_size + set_factor_binary + set_build_info + echo_build_info +} + + + +git_clone() { + echo "Downloading the git repository from factorcode.org..." + git clone git://factorcode.org/git/factor.git + check_ret git +} + +git_pull_factorcode() { + git pull git://factorcode.org/git/factor.git + check_ret git +} + +cd_factor() { + cd factor + check_ret cd +} + +make_factor() { + make $MAKE_TARGET + check_ret make +} + +delete_boot_images() { + echo "Deleting old images..." + rm $BOOT_IMAGE > /dev/null 2>&1 + rm $BOOT_IMAGE.* > /dev/null 2>&1 +} + +get_boot_image() { + wget http://factorcode.org/images/latest/$BOOT_IMAGE + check_ret wget +} + +maybe_download_dlls() { + if [[ $OS == windows-nt ]] ; then + wget http://factorcode.org/dlls/freetype6.dll + check_ret + wget http://factorcode.org/dlls/zlib1.dll + check_ret + chmod 777 *.dll + check_ret + fi +} + +bootstrap() { + ./$FACTOR_BINARY -i=$BOOT_IMAGE +} + +usage() { + echo "usage: $0 install|update" +} + +case "$1" in + install) + check_installed_programs + find_build_info + git_clone + cd_factor + make_factor + get_boot_image + maybe_download_dlls + bootstrap + ;; + + update) + check_installed_programs + find_build_info + git_pull_factorcode + make_factor + delete_boot_images + get_boot_image + bootstrap + ;; + + *) + usage + ;; +esac From 5849496a93ae77f866ce7a5f99a42c06fd8a6081 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:00:18 -0600 Subject: [PATCH 3/8] add Config file for win64 --- vm/Config.windows.nt.x86.64 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 vm/Config.windows.nt.x86.64 diff --git a/vm/Config.windows.nt.x86.64 b/vm/Config.windows.nt.x86.64 new file mode 100644 index 0000000000..1c30e64096 --- /dev/null +++ b/vm/Config.windows.nt.x86.64 @@ -0,0 +1,4 @@ +CC=/k/target/bin/x86_64-pc-mingw32-gcc +include vm/Config.windows.nt +include vm/Config.x86.64 +WINDRES = /k/target/bin/windres From 1347c04163c952cf6f68fe33e4a82cd766a38542 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:00:48 -0600 Subject: [PATCH 4/8] Remove old install.sh --- misc/install.sh | 120 ------------------------------------------------ 1 file changed, 120 deletions(-) delete mode 100755 misc/install.sh diff --git a/misc/install.sh b/misc/install.sh deleted file mode 100755 index 006a7cf604..0000000000 --- a/misc/install.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/bash -e - -# Programs returning != 0 will not cause script to exit -set +e - -# Case insensitive string comparison -shopt -s nocaseglob -#shopt -s nocasematch - -ensure_program_installed() { - echo -n "Checking for $1..." - result=`type -p $1` - if ! [[ -n $result ]] ; then - echo "not found!" - echo "Install $1 and try again." - exit 1 - fi - echo "found!" -} - -check_ret() { - RET=$? - if [[ $RET -ne 0 ]] ; then - echo $1 failed - exit 5 - fi -} - -ensure_program_installed uname -ensure_program_installed git -ensure_program_installed wget -ensure_program_installed gcc -ensure_program_installed make - -GCC_VERSION=`gcc --version` -if [[ $GCC_VERSION == *3.3.* ]] ; then - echo "You have a known buggy version of gcc (3.3)" - echo "Install gcc 3.4 or higher and try again." - exit 1 -fi - -# OS -OS= -uname_s=`uname -s` -case $uname_s in - CYGWIN_NT-5.2-WOW64) OS=windows-nt;; - *CYGWIN_NT*) OS=windows-nt;; - *CYGWIN*) OS=windows-nt;; - *darwin*) OS=macosx;; - *Darwin*) OS=macosx;; - *linux*) OS=linux;; - *Linux*) OS=linux;; -esac - -# Architecture -ARCH= -uname_m=`uname -m` -case $uname_m in - i386) ARCH=x86;; - i686) ARCH=x86;; - *86) ARCH=x86;; - "Power Macintosh") ARCH=ppc;; -esac - -WORD= -C_WORD=factor-word-size -# Word size -echo "#include " > $C_WORD.c -echo "int main() { printf(\"%d\", 8*sizeof(long)); return 0; }" >> $C_WORD.c -gcc -o $C_WORD $C_WORD.c -WORD=$(./$C_WORD) -check_ret $C_WORD -rm -f $C_WORD* - -case $OS in - windows-nt) FACTOR_BINARY=factor-nt;; - macosx) FACTOR_BINARY=./Factor.app/Contents/MacOS/factor;; - *) FACTOR_BINARY=factor;; -esac - -MAKE_TARGET=$OS-$ARCH-$WORD -BOOT_IMAGE=boot.$ARCH.$WORD.image - -echo OS=$OS -echo ARCH=$ARCH -echo WORD=$WORD -echo FACTOR_BINARY=$FACTOR_BINARY -echo MAKE_TARGET=$MAKE_TARGET -echo BOOT_IMAGE=$BOOT_IMAGE - -if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then - echo "OS, ARCH, or WORD is empty. Please report this" - exit 4 -fi - -echo "Downloading the git repository from factorcode.org..." -git clone git://factorcode.org/git/factor.git -check_ret git - -cd factor -check_ret cd - -make $MAKE_TARGET -check_ret make - -echo "Deleting old images..." -rm $BOOT_IMAGE > /dev/null 2>&1 -rm $BOOT_IMAGE.* > /dev/null 2>&1 -wget http://factorcode.org/images/latest/$BOOT_IMAGE -check_ret wget - -if [[ $OS == windows-nt ]] ; then - wget http://factorcode.org/dlls/freetype6.dll - check_ret - wget http://factorcode.org/dlls/zlib1.dll - check_ret -fi - - -./$FACTOR_BINARY -i=$BOOT_IMAGE From be1e2961ef34f6b6c2f098af50748c49e82ba0fe Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:02:34 -0600 Subject: [PATCH 5/8] Update Makefile for win64 --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 77a6fb6409..4c6eb2f4e6 100644 --- a/Makefile +++ b/Makefile @@ -62,6 +62,7 @@ default: @echo "solaris-x86-64" @echo "windows-ce-arm" @echo "windows-nt-x86-32" + @echo "windows-nt-x86-64" @echo "" @echo "Additional modifiers:" @echo "" @@ -113,6 +114,9 @@ solaris-x86-64: windows-nt-x86-32: $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.32 +windows-nt-x86-64: + $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.64 + windows-ce-arm: $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.ce.arm @@ -138,7 +142,7 @@ clean: rm -f vm/*.o vm/resources.o: - windres vm/factor.rs vm/resources.o + $(WINDRES) vm/factor.rs vm/resources.o .c.o: $(CC) -c $(CFLAGS) -o $@ $< From dc76d551e0f8f4b5758789260cb2183fbf854df8 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:03:01 -0600 Subject: [PATCH 6/8] Don't install factor if a factor/ already exists --- misc/factor.sh | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/misc/factor.sh b/misc/factor.sh index 3f8152518c..9db0a29fcb 100755 --- a/misc/factor.sh +++ b/misc/factor.sh @@ -26,7 +26,7 @@ check_ret() { RET=$? if [[ $RET -ne 0 ]] ; then echo $1 failed - exit 5 + exit 2 fi } @@ -35,7 +35,7 @@ check_gcc_version() { if [[ $GCC_VERSION == *3.3.* ]] ; then echo "You have a known buggy version of gcc (3.3)" echo "Install gcc 3.4 or higher and try again." - exit 1 + exit 3 fi } @@ -49,6 +49,13 @@ check_installed_programs() { check_gcc_version } +check_factor_exists() { + if [[ -d "factor" ]] ; then + echo "A directory called 'factor' already exists." + echo "Rename or delete it and try again." + exit 4 + fi +} find_os() { uname_s=`uname -s` @@ -66,10 +73,10 @@ find_os() { find_architecture() { uname_m=`uname -m` case $uname_m in - i386) ARCH=x86;; - i686) ARCH=x86;; - *86) ARCH=x86;; - "Power Macintosh") ARCH=ppc;; + i386) ARCH=x86;; + i686) ARCH=x86;; + *86) ARCH=x86;; + "Power Macintosh") ARCH=ppc;; esac } @@ -107,7 +114,7 @@ echo_build_info() { set_build_info() { if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then echo "OS, ARCH, or WORD is empty. Please report this" - exit 4 + exit 5 fi MAKE_TARGET=$OS-$ARCH-$WORD BOOT_IMAGE=boot.$ARCH.$WORD.image @@ -122,8 +129,6 @@ find_build_info() { echo_build_info } - - git_clone() { echo "Downloading the git repository from factorcode.org..." git clone git://factorcode.org/git/factor.git @@ -177,6 +182,7 @@ usage() { case "$1" in install) + check_factor_exists check_installed_programs find_build_info git_clone From b8ab6a8cb188549aae66ee6743de66b30947dae7 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:07:05 -0600 Subject: [PATCH 7/8] Comment out the AllocConsole() code for windows Add WINDRES variable to NT 32-bit backend --- vm/Config.windows.nt | 2 +- vm/Config.windows.nt.x86.32 | 1 + vm/os-windows-nt.c | 10 +++++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/vm/Config.windows.nt b/vm/Config.windows.nt index 8c67b11c19..c712c7d053 100644 --- a/vm/Config.windows.nt +++ b/vm/Config.windows.nt @@ -4,5 +4,5 @@ DLL_SUFFIX=-nt PLAF_DLL_OBJS += vm/os-windows-nt.o PLAF_EXE_OBJS += vm/resources.o PLAF_EXE_OBJS += vm/main-windows-nt.o -CFLAGS += -mwindows +#CFLAGS += -mwindows include vm/Config.windows diff --git a/vm/Config.windows.nt.x86.32 b/vm/Config.windows.nt.x86.32 index a8d4931b4d..9a020a7bc1 100644 --- a/vm/Config.windows.nt.x86.32 +++ b/vm/Config.windows.nt.x86.32 @@ -1,2 +1,3 @@ +WINDRES=windres include vm/Config.windows.nt include vm/Config.x86.32 diff --git a/vm/os-windows-nt.c b/vm/os-windows-nt.c index afd1e0ed3b..fc7fc61e0d 100755 --- a/vm/os-windows-nt.c +++ b/vm/os-windows-nt.c @@ -91,14 +91,14 @@ void c_to_factor_toplevel(CELL quot) void open_console(void) { + /* + // Do this: http://www.cygwin.com/ml/cygwin/2007-11/msg00432.html if(!console_open) { - if(!AttachConsole(ATTACH_PARENT_PROCESS)) + if(AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()) { - if(AllocConsole()) - console_open = true; - } - else console_open = true; + } } + */ } From 096b9fe4b73466e857334de08475e6bcb1e12165 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 18:17:25 -0600 Subject: [PATCH 8/8] Clean up C code a bit --- vm/os-windows-nt.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vm/os-windows-nt.c b/vm/os-windows-nt.c index fc7fc61e0d..be9dde1fa8 100755 --- a/vm/os-windows-nt.c +++ b/vm/os-windows-nt.c @@ -93,12 +93,12 @@ void open_console(void) { /* // Do this: http://www.cygwin.com/ml/cygwin/2007-11/msg00432.html - if(!console_open) + if(console_open) + return; + + if(AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()) { - if(AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()) - { - console_open = true; - } + console_open = true; } */ }